root/drivers/scsi/dpt/osd_util.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


DEFINITIONS

This source file includes following definitions.
  1. osdSwap4

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

/* [<][>][^][v][top][bottom][index][help] */