linux/drivers/scsi/dpt/osd_util.h
<<
>>
Prefs
   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 */
 359