]>
Commit | Line | Data |
---|---|---|
1da177e4 LT |
1 | /* BSDI osd_util.h,v 1.8 1998/06/03 19:14:58 karels Exp */ |
2 | ||
3 | /* | |
4 | * Copyright (c) 1996-1999 Distributed Processing Technology Corporation | |
5 | * All rights reserved. | |
6 | * | |
7 | * Redistribution and use in source form, with or without modification, are | |
8 | * permitted provided that redistributions of source code must retain the | |
9 | * above copyright notice, this list of conditions and the following disclaimer. | |
10 | * | |
11 | * This software is provided `as is' by Distributed Processing Technology and | |
12 | * any express or implied warranties, including, but not limited to, the | |
13 | * implied warranties of merchantability and fitness for a particular purpose, | |
14 | * are disclaimed. In no event shall Distributed Processing Technology be | |
15 | * liable for any direct, indirect, incidental, special, exemplary or | |
16 | * consequential damages (including, but not limited to, procurement of | |
17 | * substitute goods or services; loss of use, data, or profits; or business | |
18 | * interruptions) however caused and on any theory of liability, whether in | |
19 | * contract, strict liability, or tort (including negligence or otherwise) | |
20 | * arising in any way out of the use of this driver software, even if advised | |
21 | * of the possibility of such damage. | |
22 | * | |
23 | */ | |
24 | ||
25 | #ifndef __OSD_UTIL_H | |
26 | #define __OSD_UTIL_H | |
27 | ||
28 | /*File - OSD_UTIL.H | |
29 | **************************************************************************** | |
30 | * | |
31 | *Description: | |
32 | * | |
33 | * This file contains defines and function prototypes that are | |
34 | *operating system dependent. The resources defined in this file | |
35 | *are not specific to any particular application. | |
36 | * | |
37 | *Copyright Distributed Processing Technology, Corp. | |
38 | * 140 Candace Dr. | |
39 | * Maitland, Fl. 32751 USA | |
40 | * Phone: (407) 830-5522 Fax: (407) 260-5366 | |
41 | * All Rights Reserved | |
42 | * | |
43 | *Author: Doug Anderson | |
44 | *Date: 1/7/94 | |
45 | * | |
46 | *Editors: | |
47 | * | |
48 | *Remarks: | |
49 | * | |
50 | * | |
51 | *****************************************************************************/ | |
52 | ||
53 | ||
54 | /*Definitions - Defines & Constants ----------------------------------------- */ | |
55 | ||
56 | /*----------------------------- */ | |
57 | /* Operating system selections: */ | |
58 | /*----------------------------- */ | |
59 | ||
60 | /*#define _DPT_MSDOS */ | |
61 | /*#define _DPT_WIN_3X */ | |
62 | /*#define _DPT_WIN_4X */ | |
63 | /*#define _DPT_WIN_NT */ | |
64 | /*#define _DPT_NETWARE */ | |
65 | /*#define _DPT_OS2 */ | |
66 | /*#define _DPT_SCO */ | |
67 | /*#define _DPT_UNIXWARE */ | |
68 | /*#define _DPT_SOLARIS */ | |
69 | /*#define _DPT_NEXTSTEP */ | |
70 | /*#define _DPT_BANYAN */ | |
71 | ||
72 | /*-------------------------------- */ | |
73 | /* Include the OS specific defines */ | |
74 | /*-------------------------------- */ | |
75 | ||
76 | /*#define OS_SELECTION From Above List */ | |
77 | /*#define SEMAPHORE_T ??? */ | |
78 | /*#define DLL_HANDLE_T ??? */ | |
79 | ||
80 | #if (defined(KERNEL) && (defined(__FreeBSD__) || defined(__bsdi__))) | |
81 | # include "i386/isa/dpt_osd_defs.h" | |
82 | #else | |
83 | # include "osd_defs.h" | |
84 | #endif | |
85 | ||
86 | #ifndef DPT_UNALIGNED | |
87 | #define DPT_UNALIGNED | |
88 | #endif | |
89 | ||
90 | #ifndef DPT_EXPORT | |
91 | #define DPT_EXPORT | |
92 | #endif | |
93 | ||
94 | #ifndef DPT_IMPORT | |
95 | #define DPT_IMPORT | |
96 | #endif | |
97 | ||
98 | #ifndef DPT_RUNTIME_IMPORT | |
99 | #define DPT_RUNTIME_IMPORT DPT_IMPORT | |
100 | #endif | |
101 | ||
102 | /*--------------------- */ | |
103 | /* OS dependent defines */ | |
104 | /*--------------------- */ | |
105 | ||
106 | #if defined (_DPT_MSDOS) || defined (_DPT_WIN_3X) | |
107 | #define _DPT_16_BIT | |
108 | #else | |
109 | #define _DPT_32_BIT | |
110 | #endif | |
111 | ||
112 | #if defined (_DPT_SCO) || defined (_DPT_UNIXWARE) || defined (_DPT_SOLARIS) || defined (_DPT_AIX) || defined (SNI_MIPS) || defined (_DPT_BSDI) || defined (_DPT_FREE_BSD) || defined(_DPT_LINUX) | |
113 | #define _DPT_UNIX | |
114 | #endif | |
115 | ||
116 | #if defined (_DPT_WIN_3x) || defined (_DPT_WIN_4X) || defined (_DPT_WIN_NT) \ | |
117 | || defined (_DPT_OS2) | |
118 | #define _DPT_DLL_SUPPORT | |
119 | #endif | |
120 | ||
121 | #if !defined (_DPT_MSDOS) && !defined (_DPT_WIN_3X) && !defined (_DPT_NETWARE) | |
122 | #define _DPT_PREEMPTIVE | |
123 | #endif | |
124 | ||
125 | #if !defined (_DPT_MSDOS) && !defined (_DPT_WIN_3X) | |
126 | #define _DPT_MULTI_THREADED | |
127 | #endif | |
128 | ||
129 | #if !defined (_DPT_MSDOS) | |
130 | #define _DPT_MULTI_TASKING | |
131 | #endif | |
132 | ||
133 | /* These exist for platforms that */ | |
134 | /* chunk when accessing mis-aligned */ | |
135 | /* data */ | |
136 | #if defined (SNI_MIPS) || defined (_DPT_SOLARIS) | |
137 | #if defined (_DPT_BIG_ENDIAN) | |
138 | #if !defined (_DPT_STRICT_ALIGN) | |
139 | #define _DPT_STRICT_ALIGN | |
140 | #endif | |
141 | #endif | |
142 | #endif | |
143 | ||
144 | /* Determine if in C or C++ mode */ | |
145 | #ifdef __cplusplus | |
146 | #define _DPT_CPP | |
147 | #else | |
148 | #define _DPT_C | |
149 | #endif | |
150 | ||
151 | /*-------------------------------------------------------------------*/ | |
152 | /* Under Solaris the compiler refuses to accept code like: */ | |
153 | /* { {"DPT"}, 0, NULL .... }, */ | |
154 | /* and complains about the {"DPT"} part by saying "cannot use { } */ | |
155 | /* to initialize char*". */ | |
156 | /* */ | |
157 | /* By defining these ugly macros we can get around this and also */ | |
158 | /* not have to copy and #ifdef large sections of code. I know that */ | |
159 | /* these macros are *really* ugly, but they should help reduce */ | |
160 | /* maintenance in the long run. */ | |
161 | /* */ | |
162 | /*-------------------------------------------------------------------*/ | |
163 | #if !defined (DPTSQO) | |
164 | #if defined (_DPT_SOLARIS) | |
165 | #define DPTSQO | |
166 | #define DPTSQC | |
167 | #else | |
168 | #define DPTSQO { | |
169 | #define DPTSQC } | |
170 | #endif /* solaris */ | |
171 | #endif /* DPTSQO */ | |
172 | ||
173 | ||
174 | /*---------------------- */ | |
175 | /* OS dependent typedefs */ | |
176 | /*---------------------- */ | |
177 | ||
178 | #if defined (_DPT_MSDOS) || defined (_DPT_SCO) | |
179 | #define BYTE unsigned char | |
180 | #define WORD unsigned short | |
181 | #endif | |
182 | ||
183 | #ifndef _DPT_TYPEDEFS | |
184 | #define _DPT_TYPEDEFS | |
185 | typedef unsigned char uCHAR; | |
186 | typedef unsigned short uSHORT; | |
187 | typedef unsigned int uINT; | |
188 | typedef unsigned long uLONG; | |
189 | ||
190 | typedef union { | |
191 | uCHAR u8[4]; | |
192 | uSHORT u16[2]; | |
193 | uLONG u32; | |
194 | } access_U; | |
195 | #endif | |
196 | ||
197 | #if !defined (NULL) | |
198 | #define NULL 0 | |
199 | #endif | |
200 | ||
201 | ||
202 | /*Prototypes - function ----------------------------------------------------- */ | |
203 | ||
204 | #ifdef __cplusplus | |
205 | extern "C" { /* Declare all these functions as "C" functions */ | |
206 | #endif | |
207 | ||
208 | /*------------------------ */ | |
209 | /* Byte reversal functions */ | |
210 | /*------------------------ */ | |
211 | ||
212 | /* Reverses the byte ordering of a 2 byte variable */ | |
213 | #if (!defined(osdSwap2)) | |
214 | uSHORT osdSwap2(DPT_UNALIGNED uSHORT *); | |
215 | #endif // !osdSwap2 | |
216 | ||
217 | /* Reverses the byte ordering of a 4 byte variable and shifts left 8 bits */ | |
218 | #if (!defined(osdSwap3)) | |
219 | uLONG osdSwap3(DPT_UNALIGNED uLONG *); | |
220 | #endif // !osdSwap3 | |
221 | ||
222 | ||
223 | #ifdef _DPT_NETWARE | |
224 | #include "novpass.h" /* For DPT_Bswapl() prototype */ | |
225 | /* Inline the byte swap */ | |
226 | #ifdef __cplusplus | |
227 | inline uLONG osdSwap4(uLONG *inLong) { | |
228 | return *inLong = DPT_Bswapl(*inLong); | |
229 | } | |
230 | #else | |
231 | #define osdSwap4(inLong) DPT_Bswapl(inLong) | |
232 | #endif // cplusplus | |
233 | #else | |
234 | /* Reverses the byte ordering of a 4 byte variable */ | |
235 | # if (!defined(osdSwap4)) | |
236 | uLONG osdSwap4(DPT_UNALIGNED uLONG *); | |
237 | # endif // !osdSwap4 | |
238 | ||
239 | /* The following functions ALWAYS swap regardless of the * | |
240 | * presence of DPT_BIG_ENDIAN */ | |
241 | ||
242 | uSHORT trueSwap2(DPT_UNALIGNED uSHORT *); | |
243 | uLONG trueSwap4(DPT_UNALIGNED uLONG *); | |
244 | ||
245 | #endif // netware | |
246 | ||
247 | ||
248 | /*-------------------------------------* | |
249 | * Network order swap functions * | |
250 | * * | |
251 | * These functions/macros will be used * | |
252 | * by the structure insert()/extract() * | |
253 | * functions. * | |
254 | * | |
255 | * We will enclose all structure * | |
256 | * portability modifications inside * | |
257 | * #ifdefs. When we are ready, we * | |
258 | * will #define DPT_PORTABLE to begin * | |
259 | * using the modifications. * | |
260 | *-------------------------------------*/ | |
261 | uLONG netSwap4(uLONG val); | |
262 | ||
263 | #if defined (_DPT_BIG_ENDIAN) | |
264 | ||
265 | // for big-endian we need to swap | |
266 | ||
267 | #ifndef NET_SWAP_2 | |
268 | #define NET_SWAP_2(x) (((x) >> 8) | ((x) << 8)) | |
269 | #endif // NET_SWAP_2 | |
270 | ||
271 | #ifndef NET_SWAP_4 | |
272 | #define NET_SWAP_4(x) netSwap4((x)) | |
273 | #endif // NET_SWAP_4 | |
274 | ||
275 | #else | |
276 | ||
277 | // for little-endian we don't need to do anything | |
278 | ||
279 | #ifndef NET_SWAP_2 | |
280 | #define NET_SWAP_2(x) (x) | |
281 | #endif // NET_SWAP_2 | |
282 | ||
283 | #ifndef NET_SWAP_4 | |
284 | #define NET_SWAP_4(x) (x) | |
285 | #endif // NET_SWAP_4 | |
286 | ||
287 | #endif // big endian | |
288 | ||
289 | ||
290 | ||
291 | /*----------------------------------- */ | |
292 | /* Run-time loadable module functions */ | |
293 | /*----------------------------------- */ | |
294 | ||
295 | /* Loads the specified run-time loadable DLL */ | |
296 | DLL_HANDLE_T osdLoadModule(uCHAR *); | |
297 | /* Unloads the specified run-time loadable DLL */ | |
298 | uSHORT osdUnloadModule(DLL_HANDLE_T); | |
299 | /* Returns a pointer to a function inside a run-time loadable DLL */ | |
300 | void * osdGetFnAddr(DLL_HANDLE_T,uCHAR *); | |
301 | ||
302 | /*--------------------------------------- */ | |
303 | /* Mutually exclusive semaphore functions */ | |
304 | /*--------------------------------------- */ | |
305 | ||
306 | /* Create a named semaphore */ | |
307 | SEMAPHORE_T osdCreateNamedSemaphore(char *); | |
308 | /* Create a mutually exlusive semaphore */ | |
309 | SEMAPHORE_T osdCreateSemaphore(void); | |
310 | /* create an event semaphore */ | |
311 | SEMAPHORE_T osdCreateEventSemaphore(void); | |
312 | /* create a named event semaphore */ | |
313 | SEMAPHORE_T osdCreateNamedEventSemaphore(char *); | |
314 | ||
315 | /* Destroy the specified mutually exclusive semaphore object */ | |
316 | uSHORT osdDestroySemaphore(SEMAPHORE_T); | |
317 | /* Request access to the specified mutually exclusive semaphore */ | |
318 | uLONG osdRequestSemaphore(SEMAPHORE_T,uLONG); | |
319 | /* Release access to the specified mutually exclusive semaphore */ | |
320 | uSHORT osdReleaseSemaphore(SEMAPHORE_T); | |
321 | /* wait for a event to happen */ | |
322 | uLONG osdWaitForEventSemaphore(SEMAPHORE_T, uLONG); | |
323 | /* signal an event */ | |
324 | uLONG osdSignalEventSemaphore(SEMAPHORE_T); | |
325 | /* reset the event */ | |
326 | uLONG osdResetEventSemaphore(SEMAPHORE_T); | |
327 | ||
328 | /*----------------- */ | |
329 | /* Thread functions */ | |
330 | /*----------------- */ | |
331 | ||
332 | /* Releases control to the task switcher in non-preemptive */ | |
333 | /* multitasking operating systems. */ | |
334 | void osdSwitchThreads(void); | |
335 | ||
336 | /* Starts a thread function */ | |
337 | uLONG osdStartThread(void *,void *); | |
338 | ||
339 | /* what is my thread id */ | |
340 | uLONG osdGetThreadID(void); | |
341 | ||
342 | /* wakes up the specifed thread */ | |
343 | void osdWakeThread(uLONG); | |
344 | ||
19af5cdb | 345 | /* osd sleep for x milliseconds */ |
1da177e4 LT |
346 | void osdSleep(uLONG); |
347 | ||
348 | #define DPT_THREAD_PRIORITY_LOWEST 0x00 | |
349 | #define DPT_THREAD_PRIORITY_NORMAL 0x01 | |
350 | #define DPT_THREAD_PRIORITY_HIGHEST 0x02 | |
351 | ||
352 | uCHAR osdSetThreadPriority(uLONG tid, uCHAR priority); | |
353 | ||
354 | #ifdef __cplusplus | |
355 | } /* end the xtern "C" declaration */ | |
356 | #endif | |
357 | ||
358 | #endif /* osd_util_h */ |