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