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