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)
81typedef 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
99
100
101typedef long (IM_FTYPE *ODYSSEYHOOKFCTPTR)(PODYSSEY_HOOK_LIST pHookList) IM_LFTYPE;
102
103#if defined(_IM_HOST_OS_LINUX) && !defined(_IM_HOST_OS_LINUX_DRIVER)
104struct 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)
168IM_EXTC HANDLE IM_FTYPE OdysseyGetHandleEvent(PODYSSEY_HOOK_LIST pOdysseyHookFunction) IM_LFTYPE;
169#elif defined(_IM_HOST_OS_NTO) || defined(_IM_HOST_OS_LINUX)
170IM_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
177IM_EXTC PODYSSEY_HOOK_LIST IM_FTYPE OdysseyGetHookList(long NodeId, long InterruptType) IM_LFTYPE;
178IM_EXTC ODYSSEYHOOKFCTPTR IM_FTYPE OdysseyGetFuncPtr(PODYSSEY_HOOK_LIST pOdysseyHookFunction) IM_LFTYPE;
179IM_EXTC void * IM_FTYPE OdysseyGetUsrDataPtr(PODYSSEY_HOOK_LIST pOdysseyHookFunction) IM_LFTYPE;
180IM_EXTC long IM_FTYPE OdysseyGetInterruptType(PODYSSEY_HOOK_LIST pOdysseyHookFunction) IM_LFTYPE;
181#if defined(_IM_HOST_OS_NT)
182IM_EXTC long IM_FTYPE OdysseyHookInterruptFunction(long NodeId, ODYSSEYHOOKFCTPTR InterruptFunctionPtr, unsigned long InterruptType, HANDLE hSema, void *UserDataPtr) IM_LFTYPE;
183#else
184IM_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
190struct 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
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
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 void *IM_FTYPE OdysseyGetUsrDataPtr(PODYSSEY_HOOK_LIST pOdysseyHookFunction) IM_LFTYPE
IM_EXTC long IM_FTYPE OdysseyGetInterruptType(PODYSSEY_HOOK_LIST pOdysseyHookFunction) IM_LFTYPE
HANDLE PID_HANDLE
Definition: im_nt.h:100
#define INTERRUPT_CIRCULAR_QUEUE_SIZE
Definition: im_irqio.h:71
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