diff packages/hal/common/current/include/hal_if.h @ 151:25e238959bae

Merge from eCos master repository on 2001-02-12-23:44:24-GMT
author jlarmour
date Tue, 13 Feb 2001 01:23:16 +0000
parents 289bf90c6a9b
children b939e9cada46
line wrap: on
line diff
--- a/packages/hal/common/current/include/hal_if.h
+++ b/packages/hal/common/current/include/hal_if.h
@@ -26,7 +26,7 @@
 //                                                                          
 // The Initial Developer of the Original Code is Red Hat.                   
 // Portions created by Red Hat are                                          
-// Copyright (C) 1998, 1999, 2000 Red Hat, Inc.                             
+// Copyright (C) 1998, 1999, 2000, 2001 Red Hat, Inc.
 // All Rights Reserved.                                                     
 // -------------------------------------------                              
 //                                                                          
@@ -55,6 +55,9 @@
 
 #ifdef CYGSEM_HAL_VIRTUAL_VECTOR_SUPPORT
 
+// Architecture/var/platform may override the accessor macros.
+#include <cyg/hal/hal_arch.h>
+
 //--------------------------------------------------------------------------
 #ifndef _BSP_HANDLER_T_DEFINED
 #define _BSP_HANDLER_T_DEFINED
@@ -142,58 +145,62 @@ typedef volatile CYG_ADDRWORD hal_virtua
 // table and structure implementations have been suggested).
 
 typedef void* __comm_if_ch_data_t;
+typedef void (*__comm_if_write_t)(void* __ch_data, const cyg_uint8* __buf,
+                                  cyg_uint32 __len);
+typedef int (*__comm_if_read_t)(void* __ch_data, cyg_uint8* __buf,
+                                cyg_uint32 __len);
+typedef void (*__comm_if_putc_t)(void* __ch_data, cyg_uint8 __ch);
+typedef cyg_uint8 (*__comm_if_getc_t)(void* __ch_data);
+typedef int (*__comm_if_control_t)(void *__ch_data, 
+                                   __comm_control_cmd_t __func, ...);
+typedef int (*__comm_if_dbg_isr_t)(void *__ch_data, 
+                               int* __ctrlc, CYG_ADDRWORD __vector,
+                               CYG_ADDRWORD __data);
+typedef cyg_bool (*__comm_if_getc_timeout_t)(void* __ch_data, cyg_uint8* __ch);
+
+#ifndef CYGACC_COMM_IF_DEFINED
 #define CYGACC_COMM_IF_CH_DATA(_t_) \
  ((__comm_if_ch_data_t)((_t_)[CYGNUM_COMM_IF_CH_DATA]))
 #define CYGACC_COMM_IF_CH_DATA_SET(_t_, _x_) \
  (_t_)[CYGNUM_COMM_IF_CH_DATA]=(CYG_ADDRWORD)(_x_)
 
-typedef void (*__comm_if_write_t)(void* __ch_data, const cyg_uint8* __buf,
-                                  cyg_uint32 __len);
 #define CYGACC_COMM_IF_WRITE(_t_, _b_, _l_) \
- ((__comm_if_write_t)(((_t_))[CYGNUM_COMM_IF_WRITE]))(CYGACC_COMM_IF_CH_DATA(_t_), (_b_), (_l_))
+ ((__comm_if_write_t)((_t_)[CYGNUM_COMM_IF_WRITE]))(CYGACC_COMM_IF_CH_DATA(_t_), (_b_), (_l_))
 #define CYGACC_COMM_IF_WRITE_SET(_t_, _x_) \
  (_t_)[CYGNUM_COMM_IF_WRITE]=(CYG_ADDRWORD)(_x_)
 
-typedef int (*__comm_if_read_t)(void* __ch_data, cyg_uint8* __buf,
-                                cyg_uint32 __len);
 #define CYGACC_COMM_IF_READ(_t_, _b_, _l_) \
- ((__comm_if_read_t)(((_t_))[CYGNUM_COMM_IF_READ]))(CYGACC_COMM_IF_CH_DATA(_t_), (_b_), (_l_))
+ ((__comm_if_read_t)((_t_)[CYGNUM_COMM_IF_READ]))(CYGACC_COMM_IF_CH_DATA(_t_), (_b_), (_l_))
 #define CYGACC_COMM_IF_READ_SET(_t_, _x_) \
  (_t_)[CYGNUM_COMM_IF_READ]=(CYG_ADDRWORD)(_x_)
 
-typedef void (*__comm_if_putc_t)(void* __ch_data, cyg_uint8 __ch);
 #define CYGACC_COMM_IF_PUTC(_t_, _c_) \
- ((__comm_if_putc_t)(((_t_))[CYGNUM_COMM_IF_PUTC]))(CYGACC_COMM_IF_CH_DATA(_t_), (_c_))
+ ((__comm_if_putc_t)((_t_)[CYGNUM_COMM_IF_PUTC]))(CYGACC_COMM_IF_CH_DATA(_t_), (_c_))
 #define CYGACC_COMM_IF_PUTC_SET(_t_, _x_) \
  (_t_)[CYGNUM_COMM_IF_PUTC]=(CYG_ADDRWORD)(_x_)
 
-typedef cyg_uint8 (*__comm_if_getc_t)(void* __ch_data);
 #define CYGACC_COMM_IF_GETC(_t_) \
  ((__comm_if_getc_t)((_t_)[CYGNUM_COMM_IF_GETC]))(CYGACC_COMM_IF_CH_DATA(_t_))
 #define CYGACC_COMM_IF_GETC_SET(_t_, _x_) \
  (_t_)[CYGNUM_COMM_IF_GETC]=(CYG_ADDRWORD)(_x_)
 
-typedef int (*__comm_if_control_t)(void *__ch_data, 
-                                   __comm_control_cmd_t __func, ...);
 #define CYGACC_COMM_IF_CONTROL(_t_, args...) \
- ((__comm_if_control_t)(((_t_))[CYGNUM_COMM_IF_CONTROL]))(CYGACC_COMM_IF_CH_DATA(_t_), args)
+ ((__comm_if_control_t)((_t_)[CYGNUM_COMM_IF_CONTROL]))(CYGACC_COMM_IF_CH_DATA(_t_), args)
 #define CYGACC_COMM_IF_CONTROL_SET(_t_, _x_) \
  (_t_)[CYGNUM_COMM_IF_CONTROL]=(CYG_ADDRWORD)(_x_)
 
-typedef int (*__comm_if_dbg_isr_t)(void *__ch_data, 
-                               int* __ctrlc, CYG_ADDRWORD __vector,
-                               CYG_ADDRWORD __data);
 #define CYGACC_COMM_IF_DBG_ISR(_t_, _c_, _v_, _d_) \
- ((__comm_if_dbg_isr_t)(((_t_))[CYGNUM_COMM_IF_DBG_ISR]))(CYGACC_COMM_IF_CH_DATA(_t_), (_c_), (_v_), (_d_))
+ ((__comm_if_dbg_isr_t)((_t_)[CYGNUM_COMM_IF_DBG_ISR]))(CYGACC_COMM_IF_CH_DATA(_t_), (_c_), (_v_), (_d_))
 #define CYGACC_COMM_IF_DBG_ISR_SET(_t_, _x_) \
  (_t_)[CYGNUM_COMM_IF_DBG_ISR]=(CYG_ADDRWORD)(_x_)
 
-typedef cyg_bool (*__comm_if_getc_timeout_t)(void* __ch_data, cyg_uint8* __ch);
 #define CYGACC_COMM_IF_GETC_TIMEOUT(_t_, _c_) \
- ((__comm_if_getc_timeout_t)(((_t_))[CYGNUM_COMM_IF_GETC_TIMEOUT]))(CYGACC_COMM_IF_CH_DATA(_t_), (_c_))
+ ((__comm_if_getc_timeout_t)((_t_)[CYGNUM_COMM_IF_GETC_TIMEOUT]))(CYGACC_COMM_IF_CH_DATA(_t_), (_c_))
 #define CYGACC_COMM_IF_GETC_TIMEOUT_SET(_t_, _x_) \
  (_t_)[CYGNUM_COMM_IF_GETC_TIMEOUT]=(CYG_ADDRWORD)(_x_)
 
+#endif // CYGACC_COMM_IF_DEFINED
+
 //--------------------------------------------------------------------------
 // Main calling interface table. Will be assigned a location by the 
 // linker script. Both ROM and RAM startup applications will know about
@@ -227,10 +234,16 @@ typedef cyg_bool (*__comm_if_getc_timeou
 
 externC volatile CYG_ADDRWORD hal_virtual_vector_table[CYGNUM_CALL_IF_TABLE_SIZE];
 
-// Table version is simply the number of the last active entry in the table
-// (except INSTALL_BPT_FN since it's so high).
-#define CYGNUM_CALL_IF_TABLE_VERSION              CYGNUM_CALL_IF_LAST_ENTRY
-
+// Table version contains version information for both the CALL table
+// itself (the number of the last active entry in the table), and the
+// COMM table (the size of the table).
+#define CYGNUM_CALL_IF_TABLE_VERSION_CALL         CYGNUM_CALL_IF_LAST_ENTRY
+#define CYGNUM_CALL_IF_TABLE_VERSION_CALL_HACK    (CYGNUM_CALL_IF_TABLE_SIZE+1)
+#define CYGNUM_CALL_IF_TABLE_VERSION_CALL_MAX     CYGNUM_CALL_IF_TABLE_SIZE
+#define CYGNUM_CALL_IF_TABLE_VERSION_COMM         CYGNUM_COMM_IF_TABLE_SIZE
+#define CYGNUM_CALL_IF_TABLE_VERSION_CALL_MASK    0x0000ffff
+#define CYGNUM_CALL_IF_TABLE_VERSION_COMM_MASK    0xffff0000
+#define CYGNUM_CALL_IF_TABLE_VERSION_COMM_shift   16
 
 
 // These are special debug/console procs IDs
@@ -251,110 +264,116 @@ externC volatile CYG_ADDRWORD hal_virtua
 // table and structure implementations have been suggested).
 
 typedef int __call_if_version_t;
+typedef void* __call_if_ictrl_table_t;
+typedef void* __call_if_exc_table_t;
+typedef bsp_handler_t *__call_if_dbg_vector_t;
+typedef bsp_handler_t __call_if_kill_vector_t;
+typedef hal_virtual_comm_table_t *__call_if_console_procs_t;
+typedef hal_virtual_comm_table_t *__call_if_debug_procs_t;
+typedef void (*__call_if_flush_dcache_t)(void *__p, int __nbytes);
+typedef void (*__call_if_flush_icache_t)(void *__p, int __nbytes);
+typedef void* __call_if_cpu_data_t;
+typedef void* __call_if_board_data_t;
+typedef int (*__call_if_sysinfo_t)(int __id, void* __ap);
+//typedef int (*__call_if_sysinfo_t)(enum bsp_info_id __id, va_list __ap);
+typedef int (*__call_if_set_debug_comm_t)(int __comm_id);
+typedef int (*__call_if_set_console_comm_t)(int __comm_id);
+typedef int (*__call_if_set_serial_baud_t)(int __comm_id, int __baud);
+typedef void* __call_if_dbg_data_t;
+typedef int (*__call_if_dbg_syscall_t) (enum dbg_syscall_ids id,
+                                        union dbg_thread_syscall_parms  *p );
+typedef void (*__call_if_reset_t)(void);
+typedef int __call_if_console_interrupt_flag_t;
+typedef void (*__call_if_delay_us_t)(cyg_int32 usecs);
+typedef void (*__call_if_install_bpt_fn_t)(void *__epc);
+
+#ifndef CYGACC_CALL_IF_DEFINED
+
 #define CYGACC_CALL_IF_VERSION() \
  ((__call_if_version_t)hal_virtual_vector_table[CYGNUM_CALL_IF_VERSION])
 #define CYGACC_CALL_IF_VERSION_SET(_x_) \
  hal_virtual_vector_table[CYGNUM_CALL_IF_VERSION]=(CYG_ADDRWORD)(_x_)
 
-typedef void* __call_if_ictrl_table_t;
 #define CYGACC_CALL_IF_ICTRL_TABLE() \
  ((__call_if_ictrl_table_t)hal_virtual_vector_table[CYGNUM_CALL_IF_ICTRL_TABLE])
 #define CYGACC_CALL_IF_ICTRL_TABLE_SET(_x_) \
  hal_virtual_vector_table[CYGNUM_CALL_IF_ICTRL_TABLE]=(CYG_ADDRWORD)(_x_)
 
-typedef void* __call_if_exc_table_t;
 #define CYGACC_CALL_IF_EXC_TABLE() \
  ((__call_if_exc_table_t)hal_virtual_vector_table[CYGNUM_CALL_IF_EXC_TABLE])
 #define CYGACC_CALL_IF_EXC_TABLE_SET(_x_) \
  hal_virtual_vector_table[CYGNUM_CALL_IF_EXC_TABLE]=(CYG_ADDRWORD)(_x_)
 
-typedef bsp_handler_t *__call_if_dbg_vector_t;
 #define CYGACC_CALL_IF_DBG_VECTOR() \
  ((__call_if_dbg_vector_t)hal_virtual_vector_table[CYGNUM_CALL_IF_DBG_VECTOR])
 #define CYGACC_CALL_IF_DBG_VECTOR_SET(_x_) \
  hal_virtual_vector_table[CYGNUM_CALL_IF_DBG_VECTOR]=(CYG_ADDRWORD)(_x_)
 
-typedef bsp_handler_t __call_if_kill_vector_t;
 #define CYGACC_CALL_IF_KILL_VECTOR() \
  ((__call_if_kill_vector_t)hal_virtual_vector_table[CYGNUM_CALL_IF_KILL_VECTOR])
 #define CYGACC_CALL_IF_KILL_VECTOR_SET(_x_) \
  hal_virtual_vector_table[CYGNUM_CALL_IF_KILL_VECTOR]=(CYG_ADDRWORD)(_x_)
 
-typedef hal_virtual_comm_table_t *__call_if_console_procs_t;
 #define CYGACC_CALL_IF_CONSOLE_PROCS() \
  ((__call_if_console_procs_t)hal_virtual_vector_table[CYGNUM_CALL_IF_CONSOLE_PROCS])
 #define CYGACC_CALL_IF_CONSOLE_PROCS_SET(_x_) \
  hal_virtual_vector_table[CYGNUM_CALL_IF_CONSOLE_PROCS]=(CYG_ADDRWORD)(_x_)
 
-typedef hal_virtual_comm_table_t *__call_if_debug_procs_t;
 #define CYGACC_CALL_IF_DEBUG_PROCS() \
  ((__call_if_debug_procs_t)hal_virtual_vector_table[CYGNUM_CALL_IF_DEBUG_PROCS])
 #define CYGACC_CALL_IF_DEBUG_PROCS_SET(_x_) \
  hal_virtual_vector_table[CYGNUM_CALL_IF_DEBUG_PROCS]=(CYG_ADDRWORD)(_x_)
 
-typedef void (*__call_if_flush_dcache_t)(void *__p, int __nbytes);
 #define CYGACC_CALL_IF_FLUSH_DCACHE(_p_, _n_) \
  ((__call_if_flush_dcache_t)hal_virtual_vector_table[CYGNUM_CALL_IF_FLUSH_DCACHE])((_p_), (_n_))
 #define CYGACC_CALL_IF_FLUSH_DCACHE_SET(_x_) \
  hal_virtual_vector_table[CYGNUM_CALL_IF_FLUSH_DCACHE]=(CYG_ADDRWORD)(_x_)
 
-typedef void (*__call_if_flush_icache_t)(void *__p, int __nbytes);
 #define CYGACC_CALL_IF_FLUSH_ICACHE(_p_, _n_) \
  ((__call_if_flush_icache_t)hal_virtual_vector_table[CYGNUM_CALL_IF_FLUSH_ICACHE])((_p_), (_n_))
 #define CYGACC_CALL_IF_FLUSH_ICACHE_SET(_x_) \
  hal_virtual_vector_table[CYGNUM_CALL_IF_FLUSH_ICACHE]=(CYG_ADDRWORD)(_x_)
 
-typedef void* __call_if_cpu_data_t;
 #define CYGACC_CALL_IF_CPU_DATA() \
  ((__call_if_cpu_data_t)hal_virtual_vector_table[CYGNUM_CALL_IF_CPU_DATA])
 #define CYGACC_CALL_IF_CPU_DATA_SET(_x_) \
  hal_virtual_vector_table[CYGNUM_CALL_IF_CPU_DATA]=(CYG_ADDRWORD)(_x_)
 
-typedef void* __call_if_board_data_t;
 #define CYGACC_CALL_IF_BOARD_DATA() \
  ((__call_if_board_data_t)hal_virtual_vector_table[CYGNUM_CALL_IF_BOARD_DATA])
 #define CYGACC_CALL_IF_BOARD_DATA_SET(_x_) \
  hal_virtual_vector_table[CYGNUM_CALL_IF_BOARD_DATA]=(CYG_ADDRWORD)(_x_)
 
-typedef int (*__call_if_sysinfo_t)(int __id, void* __ap);
-//typedef int (*__call_if_sysinfo_t)(enum bsp_info_id __id, va_list __ap);
 #define CYGACC_CALL_IF_SYSINFO(_i_, _a_) \
  ((__call_if_sysinfo_t)hal_virtual_vector_table[CYGNUM_CALL_IF_SYSINFO])((_i_), (_a_))
 #define CYGACC_CALL_IF_SYSINFO_SET(_x_) \
  hal_virtual_vector_table[CYGNUM_CALL_IF_SYSINFO]=(CYG_ADDRWORD)(_x_)
 
-typedef int (*__call_if_set_debug_comm_t)(int __comm_id);
 #define CYGACC_CALL_IF_SET_DEBUG_COMM(_i_) \
  ((__call_if_set_debug_comm_t)hal_virtual_vector_table[CYGNUM_CALL_IF_SET_DEBUG_COMM])((_i_))
 #define CYGACC_CALL_IF_SET_DEBUG_COMM_SET(_x_) \
  hal_virtual_vector_table[CYGNUM_CALL_IF_SET_DEBUG_COMM]=(CYG_ADDRWORD)(_x_)
 
-typedef int (*__call_if_set_console_comm_t)(int __comm_id);
 #define CYGACC_CALL_IF_SET_CONSOLE_COMM(_i_) \
  ((__call_if_set_console_comm_t)hal_virtual_vector_table[CYGNUM_CALL_IF_SET_CONSOLE_COMM])((_i_))
 #define CYGACC_CALL_IF_SET_CONSOLE_COMM_SET(_x_) \
  hal_virtual_vector_table[CYGNUM_CALL_IF_SET_CONSOLE_COMM]=(CYG_ADDRWORD)(_x_)
 
-typedef int (*__call_if_set_serial_baud_t)(int __comm_id, int __baud);
 #define CYGACC_CALL_IF_SET_SERIAL_BAUD(_i_, _b_) \
  ((__call_if_set_serial_baud_t)hal_virtual_vector_table[CYGNUM_CALL_IF_SET_SERIAL_BAUD])((_i_), (_b_))
 #define CYGACC_CALL_IF_SET_SERIAL_BAUD_SET(_x_) \
  hal_virtual_vector_table[CYGNUM_CALL_IF_SET_SERIAL_BAUD]=(CYG_ADDRWORD)(_x_)
 
-typedef void* __call_if_dbg_data_t;
 #define CYGACC_CALL_IF_DBG_DATA() \
  ((__call_if_dbg_data_t)hal_virtual_vector_table[CYGNUM_CALL_IF_DBG_DATA])
 #define CYGACC_CALL_IF_DBG_DATA_SET(_x_) \
  hal_virtual_vector_table[CYGNUM_CALL_IF_DBG_DATA]=(CYG_ADDRWORD)(_x_)
 
-typedef int (*__call_if_dbg_syscall_t) (enum dbg_syscall_ids id,
-                                        union dbg_thread_syscall_parms  *p );
 #define CYGACC_CALL_IF_DBG_SYSCALL() \
  ((__call_if_dbg_syscall_t)hal_virtual_vector_table[CYGNUM_CALL_IF_DBG_SYSCALL])
 #define CYGACC_CALL_IF_DBG_SYSCALL_SET(_x_) \
  hal_virtual_vector_table[CYGNUM_CALL_IF_DBG_SYSCALL]=(CYG_ADDRWORD)(_x_)
 
-typedef void (*__call_if_reset_t)(void);
 #define CYGACC_CALL_IF_RESET() \
  ((__call_if_reset_t)hal_virtual_vector_table[CYGNUM_CALL_IF_RESET])()
 #define CYGACC_CALL_IF_RESET_SET(_x_) \
@@ -362,24 +381,23 @@ typedef void (*__call_if_reset_t)(void);
 #define CYGACC_CALL_IF_RESET_GET() \
  ((__call_if_reset_t)hal_virtual_vector_table[CYGNUM_CALL_IF_RESET])
 
-typedef int __call_if_console_interrupt_flag_t;
 #define CYGACC_CALL_IF_CONSOLE_INTERRUPT_FLAG() \
  ((__call_if_console_interrupt_flag_t)hal_virtual_vector_table[CYGNUM_CALL_IF_CONSOLE_INTERRUPT_FLAG])
 #define CYGACC_CALL_IF_CONSOLE_INTERRUPT_FLAG_SET(_x_) \
  hal_virtual_vector_table[CYGNUM_CALL_IF_CONSOLE_INTERRUPT_FLAG]=(CYG_ADDRWORD)(_x_)
 
-typedef void (*__call_if_delay_us_t)(cyg_int32 usecs);
 #define CYGACC_CALL_IF_DELAY_US(_u_) \
  ((__call_if_delay_us_t)hal_virtual_vector_table[CYGNUM_CALL_IF_DELAY_US])((_u_))
 #define CYGACC_CALL_IF_DELAY_US_SET(_x_) \
  hal_virtual_vector_table[CYGNUM_CALL_IF_DELAY_US]=(CYG_ADDRWORD)(_x_)
 
-typedef void (*__call_if_install_bpt_fn_t)(void *__epc);
 #define CYGACC_CALL_IF_INSTALL_BPT_FN(_e_) \
  ((__call_if_install_bpt_fn_t)hal_virtual_vector_table[CYGNUM_CALL_IF_INSTALL_BPT_FN])((_e_))
 #define CYGACC_CALL_IF_INSTALL_BPT_FN_SET(_x_) \
  hal_virtual_vector_table[CYGNUM_CALL_IF_INSTALL_BPT_FN]=(CYG_ADDRWORD)(_x_)
 
+#endif // CYGACC_CALL_IF_DEFINED
+
 //--------------------------------------------------------------------------
 // Diag wrappers.
 externC void hal_if_diag_init(void);
@@ -394,22 +412,20 @@ externC cyg_bool   hal_ctrlc_check(CYG_A
 #define HAL_CTRLC_ISR hal_ctrlc_isr
 #define HAL_CTRLC_CHECK hal_ctrlc_check
 
+#else
+
+#if defined(CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT) \
+    || defined(CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT)
+// Then other code might invoke this macro
+#define HAL_CTRLC_CHECK(a1,a2) (0) // Nothing, no CTRLC here
+#endif
+
 #endif // CYGSEM_HAL_VIRTUAL_VECTOR_SUPPORT
 
 //--------------------------------------------------------------------------
 // Functions provided by the HAL interface.
 externC void hal_if_init(void);
 
-//--------------------------------------------------------------------------
-// Configuration control for the interface services.
-// When this is set, code should initialize the vector table wherever
-// appropriate.
-#if	!defined(CYG_HAL_STARTUP_RAM) ||		\
-	(	defined(CYG_HAL_STARTUP_RAM) &&		\
-		!defined(CYGSEM_HAL_USE_ROM_MONITOR))
-# define CYGPRI_HAL_IMPLEMENTS_IF_SERVICES
-#endif
-
 //-----------------------------------------------------------------------------
 #endif // CYGONCE_HAL_HAL_IF_H
 // End of hal_if.h