cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

osd_util.h (10746B)


      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
    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 *-------------------------------------*/
    261uLONG	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 */
    296DLL_HANDLE_T    osdLoadModule(uCHAR *);
    297  /* Unloads the specified run-time loadable DLL */
    298uSHORT          osdUnloadModule(DLL_HANDLE_T);
    299  /* Returns a pointer to a function inside a run-time loadable DLL */
    300void *          osdGetFnAddr(DLL_HANDLE_T,uCHAR *);
    301
    302/*--------------------------------------- */
    303/* Mutually exclusive semaphore functions */
    304/*--------------------------------------- */
    305
    306  /* Create a named semaphore */
    307SEMAPHORE_T     osdCreateNamedSemaphore(char *);
    308  /* Create a mutually exlusive semaphore */
    309SEMAPHORE_T     osdCreateSemaphore(void);
    310	/* create an event semaphore */
    311SEMAPHORE_T              osdCreateEventSemaphore(void);
    312	/* create a named event semaphore */
    313SEMAPHORE_T             osdCreateNamedEventSemaphore(char *);
    314
    315  /* Destroy the specified mutually exclusive semaphore object */
    316uSHORT          osdDestroySemaphore(SEMAPHORE_T);
    317  /* Request access to the specified mutually exclusive semaphore */
    318uLONG           osdRequestSemaphore(SEMAPHORE_T,uLONG);
    319  /* Release access to the specified mutually exclusive semaphore */
    320uSHORT          osdReleaseSemaphore(SEMAPHORE_T);
    321	/* wait for a event to happen */
    322uLONG                            osdWaitForEventSemaphore(SEMAPHORE_T, uLONG);
    323	/* signal an event */
    324uLONG                            osdSignalEventSemaphore(SEMAPHORE_T);
    325	/* reset the event */
    326uLONG                            osdResetEventSemaphore(SEMAPHORE_T);
    327
    328/*----------------- */
    329/* Thread functions */
    330/*----------------- */
    331
    332  /* Releases control to the task switcher in non-preemptive */
    333  /* multitasking operating systems. */
    334void            osdSwitchThreads(void);
    335
    336  /* Starts a thread function */
    337uLONG   osdStartThread(void *,void *);
    338
    339/* what is my thread id */
    340uLONG osdGetThreadID(void);
    341
    342/* wakes up the specifed thread */
    343void osdWakeThread(uLONG);
    344
    345/* osd sleep for x milliseconds */
    346void 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
    352uCHAR osdSetThreadPriority(uLONG tid, uCHAR priority);
    353
    354#ifdef __cplusplus
    355   }    /* end the xtern "C" declaration */
    356#endif
    357
    358#endif  /* osd_util_h */