| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 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 |  | 
| Martin Olsson | 19af5cd | 2009-04-23 11:37:37 +0200 | [diff] [blame] | 345 | /* osd sleep for x milliseconds */ | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 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 */ |