| /*	BSDI osd_util.h,v 1.8 1998/06/03 19:14:58 karels Exp	*/ | 
 |  | 
 | /* | 
 |  * Copyright (c) 1996-1999 Distributed Processing Technology Corporation | 
 |  * All rights reserved. | 
 |  * | 
 |  * Redistribution and use in source form, with or without modification, are | 
 |  * permitted provided that redistributions of source code must retain the | 
 |  * above copyright notice, this list of conditions and the following disclaimer. | 
 |  * | 
 |  * This software is provided `as is' by Distributed Processing Technology and | 
 |  * any express or implied warranties, including, but not limited to, the | 
 |  * implied warranties of merchantability and fitness for a particular purpose, | 
 |  * are disclaimed. In no event shall Distributed Processing Technology be | 
 |  * liable for any direct, indirect, incidental, special, exemplary or | 
 |  * consequential damages (including, but not limited to, procurement of | 
 |  * substitute goods or services; loss of use, data, or profits; or business | 
 |  * interruptions) however caused and on any theory of liability, whether in | 
 |  * contract, strict liability, or tort (including negligence or otherwise) | 
 |  * arising in any way out of the use of this driver software, even if advised | 
 |  * of the possibility of such damage. | 
 |  * | 
 |  */ | 
 |  | 
 | #ifndef         __OSD_UTIL_H | 
 | #define         __OSD_UTIL_H | 
 |  | 
 | /*File - OSD_UTIL.H | 
 |  **************************************************************************** | 
 |  * | 
 |  *Description: | 
 |  * | 
 |  *      This file contains defines and function prototypes that are | 
 |  *operating system dependent.  The resources defined in this file | 
 |  *are not specific to any particular application. | 
 |  * | 
 |  *Copyright Distributed Processing Technology, Corp. | 
 |  *        140 Candace Dr. | 
 |  *        Maitland, Fl. 32751   USA | 
 |  *        Phone: (407) 830-5522  Fax: (407) 260-5366 | 
 |  *        All Rights Reserved | 
 |  * | 
 |  *Author:       Doug Anderson | 
 |  *Date:         1/7/94 | 
 |  * | 
 |  *Editors: | 
 |  * | 
 |  *Remarks: | 
 |  * | 
 |  * | 
 |  *****************************************************************************/ | 
 |  | 
 |  | 
 | /*Definitions - Defines & Constants ----------------------------------------- */ | 
 |  | 
 | /*----------------------------- */ | 
 | /* Operating system selections: */ | 
 | /*----------------------------- */ | 
 |  | 
 | /*#define               _DPT_MSDOS      */ | 
 | /*#define               _DPT_WIN_3X     */ | 
 | /*#define               _DPT_WIN_4X     */ | 
 | /*#define               _DPT_WIN_NT     */ | 
 | /*#define               _DPT_NETWARE    */ | 
 | /*#define               _DPT_OS2        */ | 
 | /*#define               _DPT_SCO        */ | 
 | /*#define               _DPT_UNIXWARE   */ | 
 | /*#define               _DPT_SOLARIS    */ | 
 | /*#define               _DPT_NEXTSTEP   */ | 
 | /*#define               _DPT_BANYAN     */ | 
 |  | 
 | /*-------------------------------- */ | 
 | /* Include the OS specific defines */ | 
 | /*-------------------------------- */ | 
 |  | 
 | /*#define       OS_SELECTION    From Above List */ | 
 | /*#define       SEMAPHORE_T     ??? */ | 
 | /*#define       DLL_HANDLE_T    ??? */ | 
 |  | 
 | #if (defined(KERNEL) && (defined(__FreeBSD__) || defined(__bsdi__))) | 
 | # include        "i386/isa/dpt_osd_defs.h" | 
 | #else | 
 | # include        "osd_defs.h" | 
 | #endif | 
 |  | 
 | #ifndef DPT_UNALIGNED | 
 |    #define      DPT_UNALIGNED | 
 | #endif | 
 |  | 
 | #ifndef DPT_EXPORT | 
 |    #define      DPT_EXPORT | 
 | #endif | 
 |  | 
 | #ifndef DPT_IMPORT | 
 |    #define      DPT_IMPORT | 
 | #endif | 
 |  | 
 | #ifndef DPT_RUNTIME_IMPORT | 
 |    #define      DPT_RUNTIME_IMPORT  DPT_IMPORT | 
 | #endif | 
 |  | 
 | /*--------------------- */ | 
 | /* OS dependent defines */ | 
 | /*--------------------- */ | 
 |  | 
 | #if defined (_DPT_MSDOS) || defined (_DPT_WIN_3X) | 
 |    #define      _DPT_16_BIT | 
 | #else | 
 |    #define      _DPT_32_BIT | 
 | #endif | 
 |  | 
 | #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) | 
 |    #define      _DPT_UNIX | 
 | #endif | 
 |  | 
 | #if defined (_DPT_WIN_3x) || defined (_DPT_WIN_4X) || defined (_DPT_WIN_NT) \ | 
 | 	    || defined (_DPT_OS2) | 
 |    #define      _DPT_DLL_SUPPORT | 
 | #endif | 
 |  | 
 | #if !defined (_DPT_MSDOS) && !defined (_DPT_WIN_3X) && !defined (_DPT_NETWARE) | 
 |    #define      _DPT_PREEMPTIVE | 
 | #endif | 
 |  | 
 | #if !defined (_DPT_MSDOS) && !defined (_DPT_WIN_3X) | 
 |    #define      _DPT_MULTI_THREADED | 
 | #endif | 
 |  | 
 | #if !defined (_DPT_MSDOS) | 
 |    #define      _DPT_MULTI_TASKING | 
 | #endif | 
 |  | 
 |   /* These exist for platforms that   */ | 
 |   /* chunk when accessing mis-aligned */ | 
 |   /* data                             */ | 
 | #if defined (SNI_MIPS) || defined (_DPT_SOLARIS) | 
 |    #if defined (_DPT_BIG_ENDIAN) | 
 | 	#if !defined (_DPT_STRICT_ALIGN) | 
 |             #define _DPT_STRICT_ALIGN | 
 | 	#endif | 
 |    #endif | 
 | #endif | 
 |  | 
 |   /* Determine if in C or C++ mode */ | 
 | #ifdef  __cplusplus | 
 |    #define      _DPT_CPP | 
 | #else | 
 |    #define      _DPT_C | 
 | #endif | 
 |  | 
 | /*-------------------------------------------------------------------*/ | 
 | /* Under Solaris the compiler refuses to accept code like:           */ | 
 | /*   { {"DPT"}, 0, NULL .... },                                      */ | 
 | /* and complains about the {"DPT"} part by saying "cannot use { }    */ | 
 | /* to initialize char*".                                             */ | 
 | /*                                                                   */ | 
 | /* By defining these ugly macros we can get around this and also     */ | 
 | /* not have to copy and #ifdef large sections of code.  I know that  */ | 
 | /* these macros are *really* ugly, but they should help reduce       */ | 
 | /* maintenance in the long run.                                      */ | 
 | /*                                                                   */ | 
 | /*-------------------------------------------------------------------*/ | 
 | #if !defined (DPTSQO) | 
 |    #if defined (_DPT_SOLARIS) | 
 |       #define DPTSQO | 
 |       #define DPTSQC | 
 |    #else | 
 |       #define DPTSQO { | 
 |       #define DPTSQC } | 
 |    #endif  /* solaris */ | 
 | #endif  /* DPTSQO */ | 
 |  | 
 |  | 
 | /*---------------------- */ | 
 | /* OS dependent typedefs */ | 
 | /*---------------------- */ | 
 |  | 
 | #if defined (_DPT_MSDOS) || defined (_DPT_SCO) | 
 |    #define BYTE unsigned char | 
 |    #define WORD unsigned short | 
 | #endif | 
 |  | 
 | #ifndef _DPT_TYPEDEFS | 
 |    #define _DPT_TYPEDEFS | 
 |    typedef unsigned char   uCHAR; | 
 |    typedef unsigned short  uSHORT; | 
 |    typedef unsigned int    uINT; | 
 |    typedef unsigned long   uLONG; | 
 |  | 
 |    typedef union { | 
 | 	 uCHAR        u8[4]; | 
 | 	 uSHORT       u16[2]; | 
 | 	 uLONG        u32; | 
 |    } access_U; | 
 | #endif | 
 |  | 
 | #if !defined (NULL) | 
 |    #define      NULL    0 | 
 | #endif | 
 |  | 
 |  | 
 | /*Prototypes - function ----------------------------------------------------- */ | 
 |  | 
 | #ifdef  __cplusplus | 
 |    extern "C" {         /* Declare all these functions as "C" functions */ | 
 | #endif | 
 |  | 
 | /*------------------------ */ | 
 | /* Byte reversal functions */ | 
 | /*------------------------ */ | 
 |  | 
 |   /* Reverses the byte ordering of a 2 byte variable */ | 
 | #if (!defined(osdSwap2)) | 
 |  uSHORT       osdSwap2(DPT_UNALIGNED uSHORT *); | 
 | #endif  // !osdSwap2 | 
 |  | 
 |   /* Reverses the byte ordering of a 4 byte variable and shifts left 8 bits */ | 
 | #if (!defined(osdSwap3)) | 
 |  uLONG        osdSwap3(DPT_UNALIGNED uLONG *); | 
 | #endif  // !osdSwap3 | 
 |  | 
 |  | 
 | #ifdef  _DPT_NETWARE | 
 |    #include "novpass.h" /* For DPT_Bswapl() prototype */ | 
 | 	/* Inline the byte swap */ | 
 |    #ifdef __cplusplus | 
 | 	 inline uLONG osdSwap4(uLONG *inLong) { | 
 | 	 return *inLong = DPT_Bswapl(*inLong); | 
 | 	 } | 
 |    #else | 
 | 	 #define osdSwap4(inLong)       DPT_Bswapl(inLong) | 
 |    #endif  // cplusplus | 
 | #else | 
 | 	/* Reverses the byte ordering of a 4 byte variable */ | 
 | # if (!defined(osdSwap4)) | 
 |    uLONG        osdSwap4(DPT_UNALIGNED uLONG *); | 
 | # endif  // !osdSwap4 | 
 |  | 
 |   /* The following functions ALWAYS swap regardless of the * | 
 |    * presence of DPT_BIG_ENDIAN                            */ | 
 |  | 
 |    uSHORT       trueSwap2(DPT_UNALIGNED uSHORT *); | 
 |    uLONG        trueSwap4(DPT_UNALIGNED uLONG *); | 
 |  | 
 | #endif  // netware | 
 |  | 
 |  | 
 | /*-------------------------------------* | 
 |  * Network order swap functions        * | 
 |  *                                     * | 
 |  * These functions/macros will be used * | 
 |  * by the structure insert()/extract() * | 
 |  * functions.                          * | 
 |  * | 
 |  * We will enclose all structure       * | 
 |  * portability modifications inside    * | 
 |  * #ifdefs.  When we are ready, we     * | 
 |  * will #define DPT_PORTABLE to begin  * | 
 |  * using the modifications.            * | 
 |  *-------------------------------------*/ | 
 | uLONG	netSwap4(uLONG val); | 
 |  | 
 | #if defined (_DPT_BIG_ENDIAN) | 
 |  | 
 | // for big-endian we need to swap | 
 |  | 
 | #ifndef NET_SWAP_2 | 
 | #define NET_SWAP_2(x) (((x) >> 8) | ((x) << 8)) | 
 | #endif  // NET_SWAP_2 | 
 |  | 
 | #ifndef NET_SWAP_4 | 
 | #define NET_SWAP_4(x) netSwap4((x)) | 
 | #endif  // NET_SWAP_4 | 
 |  | 
 | #else | 
 |  | 
 | // for little-endian we don't need to do anything | 
 |  | 
 | #ifndef NET_SWAP_2 | 
 | #define NET_SWAP_2(x) (x) | 
 | #endif  // NET_SWAP_2 | 
 |  | 
 | #ifndef NET_SWAP_4 | 
 | #define NET_SWAP_4(x) (x) | 
 | #endif  // NET_SWAP_4 | 
 |  | 
 | #endif  // big endian | 
 |  | 
 |  | 
 |  | 
 | /*----------------------------------- */ | 
 | /* Run-time loadable module functions */ | 
 | /*----------------------------------- */ | 
 |  | 
 |   /* Loads the specified run-time loadable DLL */ | 
 | DLL_HANDLE_T    osdLoadModule(uCHAR *); | 
 |   /* Unloads the specified run-time loadable DLL */ | 
 | uSHORT          osdUnloadModule(DLL_HANDLE_T); | 
 |   /* Returns a pointer to a function inside a run-time loadable DLL */ | 
 | void *          osdGetFnAddr(DLL_HANDLE_T,uCHAR *); | 
 |  | 
 | /*--------------------------------------- */ | 
 | /* Mutually exclusive semaphore functions */ | 
 | /*--------------------------------------- */ | 
 |  | 
 |   /* Create a named semaphore */ | 
 | SEMAPHORE_T     osdCreateNamedSemaphore(char *); | 
 |   /* Create a mutually exlusive semaphore */ | 
 | SEMAPHORE_T     osdCreateSemaphore(void); | 
 | 	/* create an event semaphore */ | 
 | SEMAPHORE_T              osdCreateEventSemaphore(void); | 
 | 	/* create a named event semaphore */ | 
 | SEMAPHORE_T             osdCreateNamedEventSemaphore(char *); | 
 |  | 
 |   /* Destroy the specified mutually exclusive semaphore object */ | 
 | uSHORT          osdDestroySemaphore(SEMAPHORE_T); | 
 |   /* Request access to the specified mutually exclusive semaphore */ | 
 | uLONG           osdRequestSemaphore(SEMAPHORE_T,uLONG); | 
 |   /* Release access to the specified mutually exclusive semaphore */ | 
 | uSHORT          osdReleaseSemaphore(SEMAPHORE_T); | 
 | 	/* wait for a event to happen */ | 
 | uLONG                            osdWaitForEventSemaphore(SEMAPHORE_T, uLONG); | 
 | 	/* signal an event */ | 
 | uLONG                            osdSignalEventSemaphore(SEMAPHORE_T); | 
 | 	/* reset the event */ | 
 | uLONG                            osdResetEventSemaphore(SEMAPHORE_T); | 
 |  | 
 | /*----------------- */ | 
 | /* Thread functions */ | 
 | /*----------------- */ | 
 |  | 
 |   /* Releases control to the task switcher in non-preemptive */ | 
 |   /* multitasking operating systems. */ | 
 | void            osdSwitchThreads(void); | 
 |  | 
 |   /* Starts a thread function */ | 
 | uLONG   osdStartThread(void *,void *); | 
 |  | 
 | /* what is my thread id */ | 
 | uLONG osdGetThreadID(void); | 
 |  | 
 | /* wakes up the specifed thread */ | 
 | void osdWakeThread(uLONG); | 
 |  | 
 | /* osd sleep for x milliseconds */ | 
 | void osdSleep(uLONG); | 
 |  | 
 | #define DPT_THREAD_PRIORITY_LOWEST 0x00 | 
 | #define DPT_THREAD_PRIORITY_NORMAL 0x01 | 
 | #define DPT_THREAD_PRIORITY_HIGHEST 0x02 | 
 |  | 
 | uCHAR osdSetThreadPriority(uLONG tid, uCHAR priority); | 
 |  | 
 | #ifdef __cplusplus | 
 |    }    /* end the xtern "C" declaration */ | 
 | #endif | 
 |  | 
 | #endif  /* osd_util_h */ |