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 osdSwap4(uLONG * inLong)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 345 /* osd sleep for x milliseconds */ 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 */ 359