| /* 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 */ |