1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
13:
14: 15: 16: 17:
18:
19: #ifndef _KERNEL_
20: #define _KERNEL_
21:
22: #include <sys/machine.h>
23: #include <sys/queue.h>
24:
25: #include <tk/typedef.h>
26: #include <tk/errno.h>
27: #include <tk/syscall.h>
28: #include <tk/dbgspt.h>
29:
30: #include "tstdlib.h"
31:
32: typedef struct task_control_block TCB;
33:
34: #include "../tkernel/timer.h"
35: #include "../tkernel/winfo.h"
36: #include "../tkernel/mutex.h"
37:
38: #include "../sysdepend/sys_msg.h"
39: #include "../sysdepend/cpu_status.h"
40:
41: #define SYSCALL EXPORT
42:
43:
44: # define CallUserHandlerP1( p1, hdr, cb) (*(hdr))(p1)
45: # define CallUserHandlerP2( p1, p2, hdr, cb) (*(hdr))(p1, p2)
46: # define CallUserHandlerP3( p1, p2, p3, hdr, cb) (*(hdr))(p1, p2, p3)
47:
48: 49: 50:
51: struct task_control_block {
52: QUEUE tskque;
53: ID tskid;
54: void *exinf;
55: ATR tskatr;
56: FP task;
57: CTXB tskctxb;
58: W sstksz;
59:
60: B isysmode;
61: H sysmode;
62:
63: UB ipriority;
64: UB bpriority;
65: UB priority;
66:
67: UB state;
68:
69: BOOL klockwait:1;
70: BOOL klocked:1;
71:
72: CONST WSPEC *wspec;
73: ID wid;
74: INT wupcnt;
75: INT suscnt;
76: ER *wercd;
77: WINFO winfo;
78: TMEB wtmeb;
79:
80: void *isstack;
81:
82: #if USE_LEGACY_API && USE_RENDEZVOUS
83: RNO wrdvno;
84: #endif
85: #if USE_MUTEX == 1
86: MTXCB *mtxlist;
87: #endif
88:
89: #if USE_DBGSPT && defined(USE_FUNC_TD_INF_TSK)
90: UW stime;
91: UW utime;
92: #endif
93:
94: #if USE_OBJECT_NAME
95: UB name[OBJECT_NAME_LENGTH];
96: #endif
97: };
98:
99:
100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 112: 113: 114: 115: 116:
117: #define DDS_ENABLE (0)
118: #define DDS_DISABLE_IMPLICIT (1)
119: #define DDS_DISABLE (2)
120: IMPORT INT knl_dispatch_disabled;
121:
122: 123: 124: 125: 126: 127: 128:
129: IMPORT TCB *knl_ctxtsk;
130:
131: 132: 133: 134: 135: 136:
137: IMPORT TCB *knl_schedtsk;
138:
139: 140: 141:
142: IMPORT ER knl_task_initialize( void );
143: IMPORT ER knl_semaphore_initialize( void );
144: IMPORT ER knl_eventflag_initialize( void );
145: IMPORT ER knl_mailbox_initialize( void );
146: IMPORT ER knl_messagebuffer_initialize( void );
147: IMPORT ER knl_rendezvous_initialize( void );
148: IMPORT ER knl_mutex_initialize( void );
149: IMPORT ER knl_memorypool_initialize( void );
150: IMPORT ER knl_fix_memorypool_initialize( void );
151: IMPORT ER knl_cyclichandler_initialize( void );
152: IMPORT ER knl_alarmhandler_initialize( void );
153: IMPORT ER knl_subsystem_initialize( void );
154:
155: 156: 157:
158: IMPORT ER knl_init_object(void);
159:
160: 161: 162:
163: IMPORT ER knl_initialize_devmgr( void );
164:
165: 166: 167:
168: IMPORT ER knl_timer_startup( void );
169: IMPORT void knl_timer_shutdown( void );
170: IMPORT void knl_timer_handler( void );
171:
172: 173: 174:
175: IMPORT void knl_signal_all_mutex( TCB *tcb );
176: IMPORT INT knl_chg_pri_mutex( TCB *tcb, INT priority );
177:
178: 179: 180:
181: IMPORT ER knl_init_Imalloc( void );
182: IMPORT void* knl_Imalloc( SZ size );
183: IMPORT void* knl_Icalloc( SZ nmemb, SZ size );
184: IMPORT void* knl_Irealloc( void *ptr, SZ size );
185: IMPORT void knl_Ifree( void *ptr );
186:
187: 188: 189:
190: IMPORT const T_CTSK knl_init_ctsk;
191:
192: 193: 194:
195: IMPORT INT usermain( void );
196:
197: 198: 199:
200: IMPORT UINT knl_lowpow_discnt;
201:
202:
203:
204: 205: 206:
207:
208:
209: IMPORT void *knl_lowmem_top, *knl_lowmem_limit;
210:
211: 212: 213:
214: IMPORT void knl_startup_hw(void);
215: IMPORT void knl_shutdown_hw( void );
216: IMPORT ER knl_restart_hw( W mode );
217:
218: 219: 220:
221: #if TK_SUPPORT_REGOPS
222: IMPORT void knl_set_reg( TCB *tcb, CONST T_REGS *regs, CONST T_EIT *eit, CONST T_CREGS *cregs );
223: IMPORT void knl_get_reg( TCB *tcb, T_REGS *regs, T_EIT *eit, T_CREGS *cregs );
224: #endif
225:
226: #if NUM_COPROCESSOR > 0
227: IMPORT ER knl_get_cpr( TCB *tcb, INT copno, T_COPREGS *copregs);
228: IMPORT ER knl_set_cpr( TCB *tcb, INT copno, CONST T_COPREGS *copregs);
229: #endif
230:
231: 232: 233:
234: IMPORT void knl_force_dispatch( void );
235: IMPORT void knl_dispatch( void );
236:
237: 238: 239:
240: IMPORT ER knl_init_interrupt( void );
241: IMPORT ER knl_define_inthdr( INT intno, ATR intatr, FP inthdr );
242: IMPORT void knl_return_inthdr(void);
243:
244: 245: 246:
247: IMPORT ER knl_init_device( void );
248: IMPORT ER knl_start_device( void );
249: IMPORT ER knl_finish_device( void );
250:
251: 252: 253:
254: IMPORT INT main(void);
255: IMPORT void knl_tkernel_exit( void );
256:
257: 258: 259:
260: IMPORT void knl_call_entry( void );
261:
262: 263: 264:
265: IMPORT void low_pow( void );
266: IMPORT void off_pow( void );
267:
268: #endif