359 lines
		
	
	
	
		
			10 KiB
			
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			359 lines
		
	
	
	
		
			10 KiB
			
		
	
	
	
		
			C
		
	
	
	
	
	
|   | /*	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 miliseconds */ | ||
|  | 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 */
 |