diff packages/kernel/current/include/kapidata.h @ 181:d61da071934c

Merge from eCos master repository on 2001-08-22-06:38:55-BST
author jlarmour
date Wed, 22 Aug 2001 06:27:14 +0000
parents 4c750ce71ae3
children f62680ef1804
line wrap: on
line diff
--- a/packages/kernel/current/include/kapidata.h
+++ b/packages/kernel/current/include/kapidata.h
@@ -127,190 +127,279 @@ struct cyg_interrupt
 
 /*---------------------------------------------------------------------------*/
 
-struct cyg_counter
-{
+
 #if defined(CYGIMP_KERNEL_COUNTERS_SINGLE_LIST)
+# define CYG_COUNTER_ALARM_LIST_MEMBER \
     cyg_alarm           *alarm_list;
 #elif defined(CYGIMP_KERNEL_COUNTERS_MULTI_LIST)
+# define CYG_COUNTER_ALARM_LIST_MEMBER \
     cyg_alarm           *alarm_list[CYGNUM_KERNEL_COUNTERS_MULTI_LIST_SIZE];
+#else
+# define CYG_COUNTER_ALARM_LIST_MEMBER
 #endif
-    cyg_tick_count_t    counter;
+
+#define CYG_COUNTER_MEMBERS              \
+    CYG_COUNTER_ALARM_LIST_MEMBER        \
+    cyg_tick_count_t    counter;         \
     cyg_uint32          increment;
+
+struct cyg_counter
+{
+    CYG_COUNTER_MEMBERS
 };
 
 /*---------------------------------------------------------------------------*/
 
 struct cyg_clock
 {
-    cyg_counter         counter;
-    cyg_resolution_t    resolution;
+    CYG_COUNTER_MEMBERS
+    CYG_RESOLUTION_T_MEMBERS
 };
 
 /*---------------------------------------------------------------------------*/
 
+
+#if defined(CYGIMP_KERNEL_COUNTERS_SINGLE_LIST) ||  \
+    defined(CYGIMP_KERNEL_COUNTERS_MULTI_LIST)      
+# define CYG_ALARM_LIST_MEMBERS                     \
+    cyg_alarm           *next;                      \
+    cyg_alarm           *prev;
+#else 
+# define CYG_ALARM_LIST_MEMBERS
+#endif
+
+#define CYG_ALARM_MEMBERS           \
+    CYG_ALARM_LIST_MEMBERS          \
+    cyg_counter         *counter;   \
+    cyg_alarm_t         *alarm;     \
+    CYG_ADDRWORD        data;       \
+    cyg_tick_count_t    trigger;    \
+    cyg_tick_count_t    interval;   \
+    cyg_bool            enabled;
+
 struct cyg_alarm
 {
-#if defined(CYGIMP_KERNEL_COUNTERS_SINGLE_LIST) || defined(CYGIMP_KERNEL_COUNTERS_MULTI_LIST)
-    cyg_alarm           *next;    
-    cyg_alarm           *prev;    
-#endif
-    cyg_counter         *counter;
-    cyg_alarm_t         *alarm;
-    CYG_ADDRWORD        data;
-    cyg_tick_count_t    trigger;
-    cyg_tick_count_t    interval;
-    cyg_bool            enabled;
+    CYG_ALARM_MEMBERS
 };
 
 /*---------------------------------------------------------------------------*/
 /* Exception controller                                                      */
 
 #ifdef CYGPKG_KERNEL_EXCEPTIONS
+
+# ifdef CYGSEM_KERNEL_EXCEPTIONS_DECODE
+#  define CYG_EXCEPTION_CONTROL_MEMBERS                                     \
+    cyg_exception_handler_t *exception_handler[CYGNUM_HAL_EXCEPTION_COUNT]; \
+    CYG_ADDRWORD            exception_data[CYGNUM_HAL_EXCEPTION_COUNT];     
+# else
+#  define CYG_EXCEPTION_CONTROL_MEMBERS                                \
+    cyg_exception_handler_t *exception_handler; /* Handler function */ \
+    CYG_ADDRWORD            exception_data;     /* Handler data */
+# endif
+
 typedef struct
 {
-#ifdef CYGSEM_KERNEL_EXCEPTIONS_DECODE
-    cyg_exception_handler_t *exception_handler[CYGNUM_HAL_EXCEPTION_COUNT];
-    
-    CYG_ADDRWORD            exception_data[CYGNUM_HAL_EXCEPTION_COUNT];
-#else
-    cyg_exception_handler_t *exception_handler; // Handler function
-    
-    CYG_ADDRWORD            exception_data;     // Handler data
-#endif
-    
+    CYG_EXCEPTION_CONTROL_MEMBERS    
 } cyg_exception_control;
 
 #endif
 
 /*---------------------------------------------------------------------------*/
-/* Thread structure                                                          */
+/* Hardware Thread structure                                                 */
+
+#ifdef CYGFUN_KERNEL_THREADS_STACK_LIMIT
+# define CYG_HARDWARETHREAD_STACK_LIMIT_MEMBER \
+    CYG_ADDRESS         stack_limit;    /* movable stack limit */
+#else
+# define CYG_HARDWARETHREAD_STACK_LIMIT_MEMBER
+#endif
+
+#ifdef CYGDBG_KERNEL_DEBUG_GDB_THREAD_SUPPORT
+# define CYG_HARDWARETHREAD_SAVED_CONTEXT_MEMBER \
+    void                *saved_context; // If non-zero, this points at a more
+                                        // interesting context than stack_ptr.
+#else
+# define CYG_HARDWARETHREAD_SAVED_CONTEXT_MEMBER
+#endif
+
+#define CYG_HARDWARETHREAD_MEMBERS                                           \
+    CYG_ADDRESS         stack_base;   /* pointer to base of stack area */    \
+    cyg_uint32          stack_size;   /* size of stack area in bytes */      \
+    CYG_HARDWARETHREAD_STACK_LIMIT_MEMBER                                    \
+    CYG_ADDRESS         stack_ptr;    /* pointer to saved state on stack */  \
+    CYG_ADDRWORD        entry_point;  /* main entry point (code pointer!) */ \
+    CYG_ADDRWORD        entry_data;   /* entry point argument */             \
+    CYG_HARDWARETHREAD_SAVED_CONTEXT_MEMBER
 
 typedef struct
 {
-    CYG_ADDRESS         stack_base;     /* pointer to base of stack area */
-    cyg_uint32          stack_size;     /* size of stack area in bytes */
-#ifdef CYGFUN_KERNEL_THREADS_STACK_LIMIT
-    CYG_ADDRESS         stack_limit;    /* movable stack limit */
+    CYG_HARDWARETHREAD_MEMBERS
+} cyg_hardwarethread;
+
+/*---------------------------------------------------------------------------*/
+/* Scheduler Thread structure                                                */
+
+#ifdef CYGPKG_KERNEL_SMP_SUPPORT
+# define CYG_SCHEDTHREAD_CPU_MEMBER \
+    cyg_uint32          cpu;            // CPU id of cpu currently running
+#else
+# define CYG_SCHEDTHREAD_CPU_MEMBER
+#endif
+
+#ifdef CYGSEM_KERNEL_SCHED_TIMESLICE_ENABLE
+# define CYG_SCHEDTHREAD_TIMESLICE_ENABLED_MEMBER \
+    cyg_bool            timeslice_enabled; /* per-thread timeslice enable */
+#else
+# define CYG_SCHEDTHREAD_TIMESLICE_ENABLED_MEMBER
+#endif
+
+#if defined(CYGSEM_KERNEL_SCHED_BITMAP)
+# define CYG_SCHEDTHREAD_SCHEDIMP_MEMBERS \
+    cyg_priority_t      priority;       /* current thread priority */
+#elif defined(CYGSEM_KERNEL_SCHED_MLQUEUE)
+# define CYG_SCHEDTHREAD_SCHEDIMP_MEMBERS                                    \
+    cyg_thread *next;                                                        \
+    cyg_thread *prev;                                                        \
+    cyg_priority_t      priority;             /* current thread priority */  \
+    CYG_SCHEDTHREAD_CPU_MEMBER                                               \
+    CYG_SCHEDTHREAD_TIMESLICE_ENABLED_MEMBER
+#elif defined(CYGSEM_KERNEL_SCHED_LOTTERY)
+# define CYG_SCHEDTHREAD_SCHEDIMP_MEMBERS                                    \
+    cyg_thread *next;                                                        \
+    cyg_thread *prev;                                                        \
+    cyg_priority_t      priority;             /* current thread priority */  \
+    cyg_priority_t      compensation_tickets; /* sleep compensation */
+#else
+# error Undefined scheduler type
 #endif    
-    CYG_ADDRESS         stack_ptr;      /* pointer to saved state on stack */
-    CYG_ADDRWORD        entry_point;    /* main entry point (code pointer!) */
-    CYG_ADDRWORD        entry_data;     /* entry point argument */
-#ifdef CYGDBG_KERNEL_DEBUG_GDB_THREAD_SUPPORT
-    void                *saved_context; // If non-zero, this points at a more
-                                        // interesting context than stack_ptr.
+
+#ifndef CYGSEM_KERNEL_SCHED_ASR_GLOBAL
+#  define CYG_SCHEDTHREAD_ASR_NONGLOBAL_MEMBER \
+    void              (*asr)(CYG_ADDRWORD);   // ASR function
+#else
+#  define CYG_SCHEDTHREAD_ASR_NONGLOBAL_MEMBER
+#endif
+
+#ifndef CYGSEM_KERNEL_SCHED_ASR_DATA_GLOBAL
+#  define CYG_SCHEDTHREAD_ASR_DATA_NONGLOBAL_MEMBER \
+    CYG_ADDRWORD        asr_data;       // ASR data pointer
+#else
+#  define CYG_SCHEDTHREAD_ASR_DATA_NONGLOBAL_MEMBER
 #endif
-    
-} cyg_hardwarethread;
+
+#ifdef CYGSEM_KERNEL_SCHED_ASR_SUPPORT
+# define CYG_SCHEDTHREAD_ASR_MEMBER                                       \
+    volatile cyg_bool   asr_inhibit; /* If true, blocks calls to ASRs */  \
+    volatile cyg_bool   asr_pending; /* If true, this thread's ASR    */  \
+                                     /* should be called. */              \
+    CYG_SCHEDTHREAD_ASR_NONGLOBAL_MEMBER                                  \
+    CYG_SCHEDTHREAD_ASR_DATA_NONGLOBAL_MEMBER                             
+#else
+# define CYG_SCHEDTHREAD_ASR_MEMBER
+#endif
+
+#ifdef CYGSEM_KERNEL_SYNCH_MUTEX_PRIORITY_INVERSION_PROTOCOL_SIMPLE
+# define CYG_SCHEDTHREAD_MUTEX_INV_PROTO_SIMPLE_MEMBERS \
+    cyg_priority_t      original_priority;              \
+    cyg_bool            priority_inherited;
+#else
+# define CYG_SCHEDTHREAD_MUTEX_INV_PROTO_SIMPLE_MEMBERS
+#endif
+
+#ifdef CYGSEM_KERNEL_SYNCH_MUTEX_PRIORITY_INVERSION_PROTOCOL
+# define CYG_SCHEDTHREAD_MUTEX_INV_PROTO_MEMBERS   \
+    cyg_count32         mutex_count;               \
+    CYG_SCHEDTHREAD_MUTEX_INV_PROTO_SIMPLE_MEMBERS
+#else
+# define CYG_SCHEDTHREAD_MUTEX_INV_PROTO_MEMBERS
+#endif
+
+#define CYG_SCHEDTHREAD_MEMBERS               \
+    CYG_SCHEDTHREAD_SCHEDIMP_MEMBERS          \
+    cyg_threadqueue     *queue;               \
+    CYG_SCHEDTHREAD_ASR_MEMBER                \
+    CYG_SCHEDTHREAD_MUTEX_INV_PROTO_MEMBERS
+
     
 typedef struct 
 {
-#if defined(CYGSEM_KERNEL_SCHED_BITMAP)
-
-    cyg_priority_t      priority;       /* current thread priority */
-    
-#elif defined(CYGSEM_KERNEL_SCHED_MLQUEUE)
-
-    cyg_thread *next;
-    cyg_thread *prev;
-
-    cyg_priority_t      priority;       /* current thread priority */
-
-#ifdef CYGPKG_KERNEL_SMP_SUPPORT
-    cyg_uint32          cpu;            // CPU id of cpu currently running
-#endif
-    
-#ifdef CYGSEM_KERNEL_SCHED_TIMESLICE_ENABLE
-    cyg_bool            timeslice_enabled; /* per-thread timeslice enable */
-#endif    
-#elif defined(CYGSEM_KERNEL_SCHED_LOTTERY)
-
-    cyg_thread *next;
-    cyg_thread *prev;
-
-    cyg_priority_t      priority;       /* current thread priority */
+    CYG_SCHEDTHREAD_MEMBERS
+} cyg_schedthread;
 
-    cyg_priority_t      compensation_tickets;   /* sleep compensation */
-    
-#else
-
-#error Undefined scheduler type
-    
-#endif    
-
-    cyg_threadqueue     *queue;
+#define CYG_THREADTIMER_MEMBERS \
+    CYG_ALARM_MEMBERS           \
+    cyg_thread          *thread;
 
-#ifdef CYGSEM_KERNEL_SCHED_ASR_SUPPORT
-    volatile cyg_bool   asr_inhibit;    // If true, blocks calls to ASRs
-    volatile cyg_bool   asr_pending;    // If true, this thread's ASR should be called.
-#ifndef CYGSEM_KERNEL_SCHED_ASR_GLOBAL
-    void              (*asr)(CYG_ADDRWORD);   // ASR function
-#endif    
-#ifndef CYGSEM_KERNEL_SCHED_ASR_DATA_GLOBAL
-    CYG_ADDRWORD        asr_data;       // ASR data pointer
-#endif    
-#endif    
-#ifdef CYGSEM_KERNEL_SYNCH_MUTEX_PRIORITY_INVERSION_PROTOCOL
-    cyg_count32         mutex_count;
-#ifdef CYGSEM_KERNEL_SYNCH_MUTEX_PRIORITY_INVERSION_PROTOCOL_SIMPLE
-    cyg_priority_t      original_priority;
-    cyg_bool            priority_inherited;
-#endif
-#endif
-
-} cyg_schedthread;
+/*---------------------------------------------------------------------------*/
+/* Thread structure                                                          */
 
 typedef struct 
 {
-    cyg_alarm           alarm;
-    cyg_thread          *thread;
+    CYG_THREADTIMER_MEMBERS
 } cyg_threadtimer;
 
 
 typedef int cyg_reason_t; /* cyg_reason is originally an enum */
 
-struct cyg_thread
-{
-    cyg_hardwarethread  hwthread;
-    cyg_schedthread     schedthread;
-
-    cyg_uint32                  state;      
-    cyg_ucount32                suspend_count;
-    cyg_ucount32                wakeup_count;
-    CYG_ADDRWORD                wait_info;
-    cyg_uint16                  unique_id;
-    
-
 #if defined(CYGPKG_KERNEL_EXCEPTIONS) && !defined(CYGSEM_KERNEL_EXCEPTIONS_GLOBAL)
-    
+# define CYG_THREAD_EXCEPTION_CONTROL_MEMBER \
     cyg_exception_control       exception_control;
-
+#else
+# define CYG_THREAD_EXCEPTION_CONTROL_MEMBER
 #endif
 
 #ifdef CYGFUN_KERNEL_THREADS_TIMER
+# define CYG_THREAD_TIMER_MEMBER \
     cyg_threadtimer     timer;
+#else
+# define CYG_THREAD_TIMER_MEMBER
 #endif
 
-    cyg_reason_t        sleep_reason;
-    cyg_reason_t        wake_reason;
-
 #ifdef CYGVAR_KERNEL_THREADS_DATA
-
+# define CYG_THREAD_THREAD_DATA_MEMBER \
     CYG_ADDRWORD        thread_data[CYGNUM_KERNEL_THREADS_DATA_MAX];
-
+#else
+# define CYG_THREAD_THREAD_DATA_MEMBER
 #endif
 
 #ifdef CYGVAR_KERNEL_THREADS_NAME
-
+# define CYG_THREAD_NAME_MEMBER \
     char                *name;
-
+#else
+# define CYG_THREAD_NAME_MEMBER
 #endif
 
 #ifdef CYGVAR_KERNEL_THREADS_LIST
-
+# define CYG_THREAD_LIST_NEXT_MEMBER \
     cyg_thread          *list_next;
-    
+#else
+# define CYG_THREAD_LIST_NEXT_MEMBER
 #endif
-    
+
+#define CYG_THREAD_MEMBERS                        \
+    CYG_HARDWARETHREAD_MEMBERS                    \
+    CYG_SCHEDTHREAD_MEMBERS                       \
+                                                  \
+    cyg_uint32                  state;            \
+    cyg_ucount32                suspend_count;    \
+    cyg_ucount32                wakeup_count;     \
+    CYG_ADDRWORD                wait_info;        \
+    cyg_uint16                  unique_id;        \
+                                                  \
+    CYG_THREAD_EXCEPTION_CONTROL_MEMBER           \
+    CYG_THREAD_TIMER_MEMBER                       \
+                                                  \
+    cyg_reason_t        sleep_reason;             \
+    cyg_reason_t        wake_reason;              \
+                                                  \
+    CYG_THREAD_THREAD_DATA_MEMBER                 \
+    CYG_THREAD_NAME_MEMBER                        \
+    CYG_THREAD_LIST_NEXT_MEMBER                   
+
+
+struct cyg_thread
+{
+    CYG_THREAD_MEMBERS
 };
 
 /*---------------------------------------------------------------------------*/