Remove some unneeded definitions of NULL.
[dragonfly/netmp.git] / sys / dev / raid / asr / osd_util.h
blob7d2e6d3e20b89c6085143b1136c7c41febde3875
1 /* $FreeBSD: src/sys/dev/asr/osd_util.h,v 1.1.2.2 2001/08/23 05:21:29 scottl Exp $ */
2 /* $DragonFly: src/sys/dev/raid/asr/osd_util.h,v 1.6 2008/06/05 18:01:49 swildner Exp $ */
3 /*
4 * Copyright (c) 1996-1999 Distributed Processing Technology Corporation
5 * All rights reserved.
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.
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.
25 #ifndef __OSD_UTIL_H
26 #define __OSD_UTIL_H
28 /*File - OSD_UTIL.H
29 ****************************************************************************
31 *Description:
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.
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
43 *Author: Doug Anderson
44 *Date: 1/7/94
46 *Editors:
48 *Remarks:
51 *****************************************************************************/
54 /*Definitions - Defines & Constants ----------------------------------------- */
56 /*----------------------------- */
57 /* Operating system selections: */
58 /*----------------------------- */
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 */
72 /*-------------------------------- */
73 /* Include the OS specific defines */
74 /*-------------------------------- */
76 /*#define OS_SELECTION From Above List */
77 /*#define SEMAPHORE_T ??? */
78 /*#define DLL_HANDLE_T ??? */
80 #if (defined(KERNEL) && defined(__bsdi__))
81 # include "i386/isa/dpt_osd_defs.h"
82 #elif ((defined(KERNEL) || defined(_KERNEL)) && defined(__DragonFly__))
83 # if (KERN_VERSION < 3)
84 # include "i386/isa/dpt_osd_defs.h"
85 # else
86 # include "osd_defs.h"
87 # endif
88 #else
89 # include "osd_defs.h"
90 #endif
92 #ifndef DPT_UNALIGNED
93 #define DPT_UNALIGNED
94 #endif
96 #ifndef DPT_EXPORT
97 #define DPT_EXPORT
98 #endif
100 #ifndef DPT_IMPORT
101 #define DPT_IMPORT
102 #endif
104 #ifndef DPT_RUNTIME_IMPORT
105 #define DPT_RUNTIME_IMPORT DPT_IMPORT
106 #endif
108 /*--------------------- */
109 /* OS dependent defines */
110 /*--------------------- */
112 #if defined (_DPT_MSDOS) || defined (_DPT_WIN_3X)
113 #define _DPT_16_BIT
114 #else
115 #define _DPT_32_BIT
116 #endif
118 #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)
119 #define _DPT_UNIX
120 #endif
122 #if defined (_DPT_WIN_3x) || defined (_DPT_WIN_4X) || defined (_DPT_WIN_NT) \
123 || defined (_DPT_OS2)
124 #define _DPT_DLL_SUPPORT
125 #endif
127 #if !defined (_DPT_MSDOS) && !defined (_DPT_WIN_3X) && !defined (_DPT_NETWARE)
128 #define _DPT_PREEMPTIVE
129 #endif
131 #if !defined (_DPT_MSDOS) && !defined (_DPT_WIN_3X)
132 #define _DPT_MULTI_THREADED
133 #endif
135 #if !defined (_DPT_MSDOS)
136 #define _DPT_MULTI_TASKING
137 #endif
139 /* These exist for platforms that */
140 /* chunk when accessing mis-aligned */
141 /* data */
142 #if defined (SNI_MIPS) || defined (_DPT_SOLARIS)
143 #if defined (_DPT_BIG_ENDIAN)
144 #if !defined (_DPT_STRICT_ALIGN)
145 #define _DPT_STRICT_ALIGN
146 #endif
147 #endif
148 #endif
150 /* Determine if in C or C++ mode */
151 #ifdef __cplusplus
152 #define _DPT_CPP
153 #else
154 #define _DPT_C
155 #endif
157 /*-------------------------------------------------------------------*/
158 /* Under Solaris the compiler refuses to accept code like: */
159 /* { {"DPT"}, 0, NULL .... }, */
160 /* and complains about the {"DPT"} part by saying "cannot use { } */
161 /* to initialize char*". */
162 /* */
163 /* By defining these ugly macros we can get around this and also */
164 /* not have to copy and #ifdef large sections of code. I know that */
165 /* these macros are *really* ugly, but they should help reduce */
166 /* maintenance in the long run. */
167 /* */
168 /* In the meantime, just pray that we can all move to Win32 as soon */
169 /* as possible... */
170 /*-------------------------------------------------------------------*/
171 #if !defined (DPTSQO)
172 #if defined (_DPT_SOLARIS)
173 #define DPTSQO
174 #define DPTSQC
175 #else
176 #define DPTSQO {
177 #define DPTSQC }
178 #endif /* solaris */
179 #endif /* DPTSQO */
182 /*---------------------- */
183 /* OS dependent typedefs */
184 /*---------------------- */
186 #if defined (_DPT_MSDOS) || defined (_DPT_SCO)
187 #define BYTE unsigned char
188 #define WORD unsigned short
189 #endif
191 #ifndef _DPT_TYPEDEFS
192 #define _DPT_TYPEDEFS
193 typedef unsigned char uCHAR;
194 typedef unsigned short uSHORT;
195 typedef unsigned int uINT;
196 typedef unsigned long uLONG;
198 typedef union {
199 uCHAR u8[4];
200 uSHORT u16[2];
201 uLONG u32;
202 } access_U;
203 #endif
206 /*Prototypes - function ----------------------------------------------------- */
208 #ifdef __cplusplus
209 extern "C" { /* Declare all these functions as "C" functions */
210 #endif
212 /*------------------------ */
213 /* Byte reversal functions */
214 /*------------------------ */
216 /* Reverses the byte ordering of a 2 byte variable */
217 #if (!defined(osdSwap2))
218 uSHORT osdSwap2(DPT_UNALIGNED uSHORT *);
219 #endif /* !osdSwap2 */
221 /* Reverses the byte ordering of a 4 byte variable and shifts left 8 bits */
222 #if (!defined(osdSwap3))
223 uLONG osdSwap3(DPT_UNALIGNED uLONG *);
224 #endif /* !osdSwap3 */
227 #ifdef _DPT_NETWARE
228 #include "novpass.h" /* For DPT_Bswapl() prototype */
229 /* Inline the byte swap */
230 #ifdef __cplusplus
231 inline uLONG osdSwap4(uLONG *inLong) {
232 return *inLong = DPT_Bswapl(*inLong);
234 #else
235 #define osdSwap4(inLong) DPT_Bswapl(inLong)
236 #endif /* cplusplus */
237 #else
238 /* Reverses the byte ordering of a 4 byte variable */
239 # if (!defined(osdSwap4))
240 uLONG osdSwap4(DPT_UNALIGNED uLONG *);
241 # endif /* !osdSwap4 */
243 /* The following functions ALWAYS swap regardless of the *
244 * presence of DPT_BIG_ENDIAN */
246 uSHORT trueSwap2(DPT_UNALIGNED uSHORT *);
247 uLONG trueSwap4(DPT_UNALIGNED uLONG *);
249 #endif /* netware */
252 /*-------------------------------------*
253 * Network order swap functions *
255 * These functions/macros will be used *
256 * by the structure insert()/extract() *
257 * functions. *
259 * We will enclose all structure *
260 * portability modifications inside *
261 * #ifdefs. When we are ready, we *
262 * will #define DPT_PORTABLE to begin *
263 * using the modifications. *
264 *-------------------------------------*/
265 uLONG netSwap4(uLONG val);
267 #if defined (_DPT_BIG_ENDIAN)
269 // for big-endian we need to swap
271 #ifndef NET_SWAP_2
272 #define NET_SWAP_2(x) (((x) >> 8) | ((x) << 8))
273 #endif
275 #ifndef NET_SWAP_4
276 #define NET_SWAP_4(x) netSwap4((x))
277 #endif
279 #else
281 /* for little-endian we don't need to do anything */
283 #ifndef NET_SWAP_2
284 #define NET_SWAP_2(x) (x)
285 #endif
287 #ifndef NET_SWAP_4
288 #define NET_SWAP_4(x) (x)
289 #endif
291 #endif /* big endian */
295 /*----------------------------------- */
296 /* Run-time loadable module functions */
297 /*----------------------------------- */
299 /* Loads the specified run-time loadable DLL */
300 DLL_HANDLE_T osdLoadModule(uCHAR *);
301 /* Unloads the specified run-time loadable DLL */
302 uSHORT osdUnloadModule(DLL_HANDLE_T);
303 /* Returns a pointer to a function inside a run-time loadable DLL */
304 void * osdGetFnAddr(DLL_HANDLE_T,uCHAR *);
306 /*--------------------------------------- */
307 /* Mutually exclusive semaphore functions */
308 /*--------------------------------------- */
310 /* Create a named semaphore */
311 SEMAPHORE_T osdCreateNamedSemaphore(char *);
312 /* Create a mutually exlusive semaphore */
313 SEMAPHORE_T osdCreateSemaphore(void);
314 /* create an event semaphore */
315 SEMAPHORE_T osdCreateEventSemaphore(void);
316 /* create a named event semaphore */
317 SEMAPHORE_T osdCreateNamedEventSemaphore(char *);
319 /* Destroy the specified mutually exclusive semaphore object */
320 uSHORT osdDestroySemaphore(SEMAPHORE_T);
321 /* Request access to the specified mutually exclusive semaphore */
322 uLONG osdRequestSemaphore(SEMAPHORE_T,uLONG);
323 /* Release access to the specified mutually exclusive semaphore */
324 uSHORT osdReleaseSemaphore(SEMAPHORE_T);
325 /* wait for a event to happen */
326 uLONG osdWaitForEventSemaphore(SEMAPHORE_T, uLONG);
327 /* signal an event */
328 uLONG osdSignalEventSemaphore(SEMAPHORE_T);
329 /* reset the event */
330 uLONG osdResetEventSemaphore(SEMAPHORE_T);
332 /*----------------- */
333 /* Thread functions */
334 /*----------------- */
336 /* Releases control to the task switcher in non-preemptive */
337 /* multitasking operating systems. */
338 void osdSwitchThreads(void);
340 /* Starts a thread function */
341 uLONG osdStartThread(void *,void *);
343 /* what is my thread id */
344 uLONG osdGetThreadID(void);
346 /* wakes up the specifed thread */
347 void osdWakeThread(uLONG);
349 /* osd sleep for x miliseconds */
350 void osdSleep(uLONG);
352 #define DPT_THREAD_PRIORITY_LOWEST 0x00
353 #define DPT_THREAD_PRIORITY_NORMAL 0x01
354 #define DPT_THREAD_PRIORITY_HIGHEST 0x02
356 uCHAR osdSetThreadPriority(uLONG tid, uCHAR priority);
358 #ifdef __cplusplus
359 } /* end the xtern "C" declaration */
360 #endif
362 #endif /* osd_util_h */