Mercurial > ecos
diff packages/hal/common/current/include/hal_if.h @ 105:5a0cc6c243a9 ecos-sw-2000-06-30
Merge from eCos master repository on 2000-06-30-08:18:49-BST
| author | jlarmour |
|---|---|
| date | Fri, 30 Jun 2000 16:27:35 +0000 |
| parents | 95f3e12a6327 |
| children | 7f461c3a372c |
line wrap: on
line diff
--- a/packages/hal/common/current/include/hal_if.h +++ b/packages/hal/common/current/include/hal_if.h @@ -51,6 +51,8 @@ #include <cyg/hal/dbg-threads-api.h> #include <cyg/hal/dbg-thread-syscall.h> +#include <stdarg.h> + #ifdef CYGSEM_HAL_VIRTUAL_VECTOR_SUPPORT //-------------------------------------------------------------------------- @@ -93,6 +95,20 @@ typedef enum { * Enable comm port interrupt. */ __COMMCTL_IRQ_ENABLE, + + /* + * Returns the number of the interrupt vector used by the debug + * interrupt handler. + */ + __COMMCTL_DBG_ISR_VECTOR, + + /* + * Returns the current timeout value and sets a new timeout. + * Timeout resolution is in milliseconds. + * old_timeout = (*__control)(__COMMCTL_SET_TIMEOUT, + * cyg_int32 new_timeout); + */ + __COMMCTL_SET_TIMEOUT, } __comm_control_cmd_t; @@ -102,10 +118,12 @@ typedef enum { #define CYGNUM_COMM_IF_PUTC 3 #define CYGNUM_COMM_IF_GETC 4 #define CYGNUM_COMM_IF_CONTROL 5 +#define CYGNUM_COMM_IF_DBG_ISR 6 +#define CYGNUM_COMM_IF_GETC_TIMEOUT 7 #define CYGNUM_COMM_IF_TABLE_SIZE 8 -typedef CYG_ADDRWORD hal_virtual_comm_table_t[CYGNUM_COMM_IF_TABLE_SIZE]; +typedef volatile CYG_ADDRWORD hal_virtual_comm_table_t[CYGNUM_COMM_IF_TABLE_SIZE]; // The below is a (messy) attempt at adding some type safety to the // above array. At the same time, the accessors allow the @@ -151,6 +169,19 @@ typedef int (*__comm_if_control_t)(void #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_) \ + ((__comm_if_dbg_isr_t)(((_t_))[CYGNUM_COMM_IF_DBG_ISR])) +#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_) \ + ((__comm_if_getc_timeout_t)(((_t_))[CYGNUM_COMM_IF_GETC_TIMEOUT])) +#define CYGACC_COMM_IF_GETC_TIMEOUT_SET(_t_, _x_) \ + (_t_)[CYGNUM_COMM_IF_GETC_TIMEOUT]=(CYG_ADDRWORD)(_x_) //-------------------------------------------------------------------------- // Main calling interface table. Will be assigned a location by the @@ -175,14 +206,15 @@ typedef int (*__comm_if_control_t)(void #define CYGNUM_CALL_IF_DBG_SYSCALL 15 // conflict! #define CYGNUM_CALL_IF_RESET 16 #define CYGNUM_CALL_IF_CONSOLE_INTERRUPT_FLAG 17 +#define CYGNUM_CALL_IF_DELAY_US 18 -#define CYGNUM_CALL_IF_LAST_ENTRY CYGNUM_CALL_IF_CONSOLE_INTERRUPT_FLAG +#define CYGNUM_CALL_IF_LAST_ENTRY CYGNUM_CALL_IF_DELAY_US #define CYGNUM_CALL_IF_INSTALL_BPT_FN 35 #define CYGNUM_CALL_IF_TABLE_SIZE 64 -externC CYG_ADDRWORD hal_virtual_vector_table[CYGNUM_CALL_IF_TABLE_SIZE]; +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). @@ -323,6 +355,12 @@ typedef int __call_if_console_interrupt_ #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() \ + ((__call_if_delay_us_t)hal_virtual_vector_table[CYGNUM_CALL_IF_DELAY_US]) +#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() \ ((__call_if_install_bpt_fn_t)hal_virtual_vector_table[CYGNUM_CALL_IF_INSTALL_BPT_FN]) @@ -335,13 +373,18 @@ externC void hal_if_diag_init(void); externC void hal_if_diag_write_char(char c); externC void hal_if_diag_read_char(char *c); +//-------------------------------------------------------------------------- +// Ctrl-c support. +externC cyg_uint32 hal_ctrlc_isr(CYG_ADDRWORD vector, CYG_ADDRWORD data); + +#define HAL_CTRLC_ISR hal_ctrlc_isr + #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
