FEDRA emulsion software from the OPERA Collaboration
im_irqio.h
Go to the documentation of this file.
1 /*******************************************************************
2  *
3  * COPYRIGHT (c) 2000 Matrox Electronic Systems Ltd.
4  * All Rights Reserved
5  *
6  *******************************************************************/
7 
8 /*******************************************************************
9  *
10  * Synopsis: General definitions for interrupt and IO mechanisms.
11  *
12  * Notes:
13  *
14  *******************************************************************/
15 
16 #ifndef __IM_IRQIO_H__
17 #define __IM_IRQIO_H__
18 
19 #if defined(SHOW_INCLUDE_FILE)
20 #pragma message ("#include "__FILE__)
21 #endif
22 
23 /* ---------------------------------------------------------------------- */
24 #if defined(_IM_COMP_MICROSOFT)
25 
26 #if defined(_IM_HOST_OS_NT_KERNEL)
27 #define DISABLE_INTERRUPT() ;
28 #define ENABLE_INTERRUPT() ;
29 #elif defined(_IM_HOST_OS_NT)
30 #include <conio.h>
31 #define OUTP(adr, data) _outp(adr, data)
32 #define INP(adr) _inp(adr)
33 #define DISABLE_INTERRUPT() ;
34 #define ENABLE_INTERRUPT() ;
35 #define IRQ_STACKSIZE 512
36 #else
37 #error ERROR: __IM_IRQIO_H__ for _IM_COMP_MICROSOFT
38 #endif
39 
40 
41 /* ---------------------------------------------------------------------- */
42 #elif defined(_IM_COMP_WATCOM)
43 #include <conio.h>
44 #include <i86.h>
45 #define OUTP(adr, data) outp(adr, data)
46 #define INP(adr) inp(adr)
47 #define DISABLE_INTERRUPT() _disable()
48 #define ENABLE_INTERRUPT() _enable()
49 #define IRQ_STACKSIZE 512
50 
51 
52 /* ---------------------------------------------------------------------- */
53 
54 /* ---------------------------------------------------------------------- */
55 #elif defined(_IM_COMP_GNUC) && defined(_IM_HOST_OS_LINUX_DRIVER)
56 
57 #define OUTP(adr,data) outb(adr, data)
58 #define INP(adr) inb(adr)
59 #define DISABLE_INTERRUPT() cli()
60 #define ENABLE_INTERRUPT() sti()
61 #define IRQ_STACKSIZE 512
62 
63 #endif
64 
65 /* ------------------------------------------------------------------------------ */
66 #define INTERRUPT_SUB_QUEUE_SIZE 256
67 
68 #if defined(_IM_HOST_OS_NT_KERNEL)
69 #define INTERRUPT_CIRCULAR_QUEUE_SIZE 256
70 #else
71 #define INTERRUPT_CIRCULAR_QUEUE_SIZE 512
72 #endif
73 
74 #if defined(_IM_COMP_GNUC)
75 #pragma pack(1)
76 #else
77 #pragma pack(push,1)
78 #endif
79 
80 #if defined(_IM_HOST_OS_NT_KERNEL)
81 typedef struct _ODYSSEY_ISR_QUEUE
82 {
84  unsigned long DpcIn;
85  unsigned long DpcOut;
86 
87 } ODYSSEY_ISR_QUEUE;
88 #endif
89 
90 
91 #if !defined(_IM_HOST_OS_NT_KERNEL)
92 /* ------------------------------------------------------------------------------ */
93 
96 
97 typedef struct _ODYSSEY_ISR_INFO ODYSSEY_ISR_INFO;
99 
100 
101 typedef long (IM_FTYPE *ODYSSEYHOOKFCTPTR)(PODYSSEY_HOOK_LIST pHookList) IM_LFTYPE;
102 
103 #if defined(_IM_HOST_OS_LINUX) && !defined(_IM_HOST_OS_LINUX_DRIVER)
104 struct LINUX_EVENT
105 {
106  long autoCreate;
107  sem_t event;
108 };
109 #endif
110 
111 /* ------------------------------------------------------------------------------ */
112 
114 {
116 
117  unsigned long InterruptType;
118 
120  void *UserDataPtr;
121 #if defined(_IM_HOST_OS_NT)
122  HANDLE hSema;
123 #elif defined(_IM_HOST_OS_NTO) || defined(_IM_HOST_OS_LINUX)
124  sem_t * hSema;
125  sem_t * hEventTerminateThread;
126  sem_t * hEventStartedThread;
127  sem_t * hEventInterruptThreadCompleted;
128  pthread_t hInterruptThread;
129  PID_HANDLE hProcessPid;
130 #endif
131 
134 #if defined(_IM_HOST_OS_NT)
135  HANDLE hEventTerminateThread;
136  HANDLE hEventStartedThread;
137 
138  unsigned InterruptThreadId;
139  HANDLE hInterruptThread;
140  HANDLE hEventInterruptThreadCompleted;
141 
142 #endif
143 };
144 
145 
147 {
148  long NodeId;
150 
151 #if defined(_IM_HOST_OS_LINUX)
152  PID_HANDLE hProcessThread;
153  char *threadStack;
154 
155 #endif
156 
159 };
160 
161 #endif
162 
163 
164 
165 #if !defined(_IM_DRIVER_CODE)
166 
167 #if defined(_IM_HOST_OS_NT)
168 IM_EXTC HANDLE IM_FTYPE OdysseyGetHandleEvent(PODYSSEY_HOOK_LIST pOdysseyHookFunction) IM_LFTYPE;
169 #elif defined(_IM_HOST_OS_NTO) || defined(_IM_HOST_OS_LINUX)
170 IM_EXTC sem_t* IM_FTYPE OdysseyGetHandleEvent(PODYSSEY_HOOK_LIST pOdysseyHookFunction) IM_LFTYPE;
171 #endif
172 
173 #endif
174 
175 #if !defined(_IM_HOST_OS_NT_KERNEL)
176 
177 IM_EXTC PODYSSEY_HOOK_LIST IM_FTYPE OdysseyGetHookList(long NodeId, long InterruptType) IM_LFTYPE;
178 IM_EXTC ODYSSEYHOOKFCTPTR IM_FTYPE OdysseyGetFuncPtr(PODYSSEY_HOOK_LIST pOdysseyHookFunction) IM_LFTYPE;
179 IM_EXTC void * IM_FTYPE OdysseyGetUsrDataPtr(PODYSSEY_HOOK_LIST pOdysseyHookFunction) IM_LFTYPE;
180 IM_EXTC long IM_FTYPE OdysseyGetInterruptType(PODYSSEY_HOOK_LIST pOdysseyHookFunction) IM_LFTYPE;
181 #if defined(_IM_HOST_OS_NT)
182 IM_EXTC long IM_FTYPE OdysseyHookInterruptFunction(long NodeId, ODYSSEYHOOKFCTPTR InterruptFunctionPtr, unsigned long InterruptType, HANDLE hSema, void *UserDataPtr) IM_LFTYPE;
183 #else
184 IM_EXTC long IM_FTYPE OdysseyHookInterruptFunction(long NodeId, ODYSSEYHOOKFCTPTR InterruptFunctionPtr, unsigned long InterruptType, sem_t* hSema, void *UserDataPtr) IM_LFTYPE;
185 #endif
186 #endif
187 
188 #if defined(_IM_HOST_OS_LINUX)
189 
190 struct MsgIrq
191 {
192  int msgID;
193  int irqNbr;
194  ODYSSEYHOOKFCTPTR InterruptFunctionPtr;
195  unsigned long InterruptType;
196 };
197 
198 #endif
199 
200 #if defined(_IM_COMP_GNUC)
201 #pragma pack()
202 #else
203 #pragma pack(pop)
204 #endif
205 
206 #endif /* __IM_IRQIO_H__ */
MFTYPE32 long void MPTYPE * UserDataPtr
Definition: Milproto.h:645
IM_EXTC ODYSSEYHOOKFCTPTR IM_FTYPE OdysseyGetFuncPtr(PODYSSEY_HOOK_LIST pOdysseyHookFunction) IM_LFTYPE
IM_EXTC long IM_FTYPE OdysseyHookInterruptFunction(long NodeId, ODYSSEYHOOKFCTPTR InterruptFunctionPtr, unsigned long InterruptType, sem_t *hSema, void *UserDataPtr) IM_LFTYPE
IM_EXTC void *IM_FTYPE OdysseyGetUsrDataPtr(PODYSSEY_HOOK_LIST pOdysseyHookFunction) IM_LFTYPE
struct _ODYSSEY_HOOK_LIST * PODYSSEY_HOOK_LIST
Definition: im_irqio.h:95
IM_EXTC PODYSSEY_HOOK_LIST IM_FTYPE OdysseyGetHookList(long NodeId, long InterruptType) IM_LFTYPE
#define INTERRUPT_CIRCULAR_QUEUE_SIZE
Definition: im_irqio.h:71
struct _ODYSSEY_ISR_INFO * PODYSSEY_ISR_INFO
Definition: im_irqio.h:98
long(IM_FTYPE * ODYSSEYHOOKFCTPTR)(PODYSSEY_HOOK_LIST pHookList) IM_LFTYPE
Definition: im_irqio.h:101
IM_EXTC long IM_FTYPE OdysseyGetInterruptType(PODYSSEY_HOOK_LIST pOdysseyHookFunction) IM_LFTYPE
HANDLE PID_HANDLE
Definition: im_nt.h:100
MFTYPE32 long(MFTYPE MPTYPE *MOCRHOOKFCTPTR)(long HookType
Definition: milocr.h:32
int event
Definition: shower_tr.C:25
Definition: im_irqio.h:114
PODYSSEY_ISR_INFO pOdysseyIsrInfo
Definition: im_irqio.h:115
PODYSSEY_HOOK_LIST previous
Definition: im_irqio.h:133
ODYSSEYHOOKFCTPTR InterruptFunctionPtr
Definition: im_irqio.h:119
unsigned long InterruptType
Definition: im_irqio.h:117
void * UserDataPtr
Definition: im_irqio.h:120
PODYSSEY_HOOK_LIST next
Definition: im_irqio.h:132
Definition: im_irqio.h:147
PODYSSEY_ISR_INFO previous
Definition: im_irqio.h:158
PODYSSEY_HOOK_LIST pOdysseyHookList
Definition: im_irqio.h:149
long NodeId
Definition: im_irqio.h:148
PODYSSEY_ISR_INFO next
Definition: im_irqio.h:157