1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
13:
14: 15: 16: 17:
18:
19: #ifndef _SYSMGR_
20: #define _SYSMGR_
21:
22: #include <tk/tkernel.h>
23: #include <sys/queue.h>
24:
25: #include "kernel.h"
26:
27:
28:
29: 30: 31:
32:
33: 34: 35:
36: IMPORT FastMLock knl_DevMgrLock;
37: #define LockDM() MLock(&knl_DevMgrLock, 0)
38: #define UnlockDM() MUnlock(&knl_DevMgrLock, 0)
39:
40: 41: 42:
43: #define LockREG() MLock(&knl_DevMgrLock, 1)
44: #define UnlockREG() MUnlock(&knl_DevMgrLock, 1)
45:
46: 47: 48:
49: typedef struct DeviceControlBlock {
50: QUEUE q;
51: UB devnm[L_DEVNM+1];
52: T_DDEV ddev;
53: QUEUE openq;
54: } DevCB;
55:
56: IMPORT DevCB knl_DevCBtbl[]; 57:
58: IMPORT QUEUE knl_UsedDevCB;
59:
60: #define DID(devcb) ( ((devcb) - knl_DevCBtbl + 1) << 8 )
61: #define DEVID(devcb, unitno) ( DID(devcb) + (unitno) )
62: #define DEVCB(devid) ( knl_DevCBtbl + (((devid) >> 8) - 1) )
63: #define UNITNO(devid) ( (devid) & 0xff )
64:
65: 66: 67:
68: typedef struct OpenControlBlock {
69: QUEUE q;
70: QUEUE resq; 71:
72: ID resid;
73: DevCB *devcb;
74: INT unitno; 75:
76: UINT omode;
77: QUEUE requestq;
78: UH waitone; 79:
80: T_DEVREQ *waireqlst;
81: INT nwaireq;
82: ID abort_tskid;
83: INT abort_cnt; 84:
85: ID abort_semid;
86: } OpnCB;
87:
88: #define RESQ_OPNCB(rq) ( (OpnCB*)((B*)(rq) - offsetof(OpnCB, resq)) )
89:
90: 91: 92:
93: typedef struct RequestControlBlock {
94: QUEUE q;
95: OpnCB *opncb;
96: ID tskid;
97: T_DEVREQ req;
98: } ReqCB;
99:
100: 101: 102:
103: typedef struct ResourceControlBlock {
104: QUEUE openq;
105: INT dissus;
106: } ResCB;
107:
108: 109: 110:
111:
112: typedef ER (*OPNFN)( ID devid, UINT omode, void *exinf );
113: typedef ER (*ABTFN)( ID tskid, T_DEVREQ *devreq, INT nreq, void *exinf );
114: typedef INT (*WAIFN)( T_DEVREQ *devreq, INT nreq, TMO tmout, void *exinf );
115: typedef INT (*EVTFN)( INT evttyp, void *evtinf, void *exinf );
116: typedef ER (*CLSFN)( ID devid, UINT option, void *exinf );
117: typedef ER (*EXCFN)( T_DEVREQ *devreq, TMO tmout, void *exinf );
118:
119:
120:
121: #define IMPORT_DEFINE 1
122: #if IMPORT_DEFINE
123:
124: IMPORT FastMLock knl_DevMgrLock;
125: IMPORT DevCB knl_DevCBtbl[];
126: IMPORT QUEUE knl_UsedDevCB;
127: IMPORT DevCB* knl_searchDevCB( CONST UB *devnm );
128: IMPORT INT knl_phydevnm( UB *pdevnm, CONST UB *ldevnm );
129: IMPORT ER knl_initialize_devmgr( void );
130: IMPORT ER knl_finish_devmgr( void );
131:
132: IMPORT ER knl_check_devdesc( ID dd, UINT mode, OpnCB **p_opncb );
133: IMPORT void knl_devmgr_startup( void );
134: IMPORT void knl_devmgr_cleanup( void );
135: IMPORT ER knl_initDevIO( void );
136: IMPORT ER knl_finishDevIO( void );
137:
138: #endif
139:
140: #endif