mirror of https://gitee.com/openkylin/linux.git
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 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 */
|