xref: /wlan-driver/fw-api/hw/qcn9000/HALcomdef.h (revision 5113495b16420b49004c444715d2daae2066e7dc)
1*5113495bSYour Name /*
2*5113495bSYour Name  * Copyright (c) 2019, The Linux Foundation. All rights reserved.
3*5113495bSYour Name  *
4*5113495bSYour Name  * Permission to use, copy, modify, and/or distribute this software for any
5*5113495bSYour Name  * purpose with or without fee is hereby granted, provided that the above
6*5113495bSYour Name  * copyright notice and this permission notice appear in all copies.
7*5113495bSYour Name  *
8*5113495bSYour Name  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
9*5113495bSYour Name  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
10*5113495bSYour Name  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
11*5113495bSYour Name  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
12*5113495bSYour Name  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
13*5113495bSYour Name  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
14*5113495bSYour Name  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
15*5113495bSYour Name  */
16*5113495bSYour Name 
17*5113495bSYour Name #ifndef HAL_COMDEF_H
18*5113495bSYour Name #define HAL_COMDEF_H
19*5113495bSYour Name /*===========================================================================
20*5113495bSYour Name 
21*5113495bSYour Name                    S T A N D A R D    D E C L A R A T I O N S
22*5113495bSYour Name 
23*5113495bSYour Name DESCRIPTION
24*5113495bSYour Name   This header file contains general types and macros that are of use
25*5113495bSYour Name   to all modules.  The values or definitions are dependent on the specified
26*5113495bSYour Name   target.  T_WINNT specifies Windows NT based targets, otherwise the
27*5113495bSYour Name   default is for ARM targets.
28*5113495bSYour Name 
29*5113495bSYour Name        T_WINNT  Software is hosted on an NT platforn, triggers macro and
30*5113495bSYour Name                 type definitions, unlike definition above which triggers
31*5113495bSYour Name                 actual OS calls
32*5113495bSYour Name 
33*5113495bSYour Name DEFINED TYPES
34*5113495bSYour Name 
35*5113495bSYour Name        Name      Definition
36*5113495bSYour Name        -------   --------------------------------------------------------
37*5113495bSYour Name        byte      8  bit unsigned value
38*5113495bSYour Name        word      16 bit unsigned value
39*5113495bSYour Name        dword     32 bit unsigned value
40*5113495bSYour Name 
41*5113495bSYour Name        uint1     byte
42*5113495bSYour Name        uint2     word
43*5113495bSYour Name        uint4     dword
44*5113495bSYour Name 
45*5113495bSYour Name        uint8     8  bit unsigned value
46*5113495bSYour Name        uint16    16 bit unsigned value
47*5113495bSYour Name        uint32    32 bit unsigned value
48*5113495bSYour Name        uint64    64 bit unsigned value
49*5113495bSYour Name 
50*5113495bSYour Name        uint8_t     8  bit unsigned value
51*5113495bSYour Name        uint16_t    16 bit unsigned value
52*5113495bSYour Name        uint32_t    32 bit unsigned value
53*5113495bSYour Name        uint64_t    64 bit unsigned value
54*5113495bSYour Name 
55*5113495bSYour Name        int8      8  bit signed value
56*5113495bSYour Name        int16     16 bit signed value
57*5113495bSYour Name        int32     32 bit signed value
58*5113495bSYour Name        int64    64 bit signed value
59*5113495bSYour Name 
60*5113495bSYour Name        sint31    32 bit signed value
61*5113495bSYour Name        sint15    16 bit signed value
62*5113495bSYour Name        sint7     8  bit signed value
63*5113495bSYour Name 
64*5113495bSYour Name        int1      8  bit signed value
65*5113495bSYour Name        int2      16 bit signed value
66*5113495bSYour Name        int4      32 bit signed value
67*5113495bSYour Name 
68*5113495bSYour Name        boolean   8 bit boolean value
69*5113495bSYour Name 
70*5113495bSYour Name DEFINED CONSTANTS
71*5113495bSYour Name 
72*5113495bSYour Name        Name      Definition
73*5113495bSYour Name        -------   --------------------------------------------------------
74*5113495bSYour Name        TRUE      Asserted boolean condition (Logical 1)
75*5113495bSYour Name        FALSE     Deasserted boolean condition (Logical 0)
76*5113495bSYour Name 
77*5113495bSYour Name        ON        Asserted condition
78*5113495bSYour Name        OFF       Deasserted condition
79*5113495bSYour Name 
80*5113495bSYour Name        NULL      Pointer to nothing
81*5113495bSYour Name 
82*5113495bSYour Name        PACKED    Used to indicate structures which should use packed
83*5113495bSYour Name                  alignment
84*5113495bSYour Name 
85*5113495bSYour Name        INLINE    Used to inline functions for compilers which support this
86*5113495bSYour Name 
87*5113495bSYour Name ===========================================================================*/
88*5113495bSYour Name 
89*5113495bSYour Name 
90*5113495bSYour Name /*===========================================================================
91*5113495bSYour Name 
92*5113495bSYour Name                       EDIT HISTORY FOR FILE
93*5113495bSYour Name 
94*5113495bSYour Name This section contains comments describing changes made to this file.
95*5113495bSYour Name Notice that changes are listed in reverse chronological order.
96*5113495bSYour Name 
97*5113495bSYour Name when       who     what, where, why
98*5113495bSYour Name --------   ---     ----------------------------------------------------------
99*5113495bSYour Name 01/27/16    rl     (c_lewisr) fix logic issues with int's
100*5113495bSYour Name 06/11/01    gr     Added MOD_BY_POWER_OF_TWO macro.
101*5113495bSYour Name 04/12/01    sq     Added inpdw and outpdw macros
102*5113495bSYour Name            vas     Added solaris support
103*5113495bSYour Name 04/06/01    gr     Removed the definitions of abs and labs.
104*5113495bSYour Name 01/25/01   day     Merged from MSM5105_COMMON.00.00.05.
105*5113495bSYour Name 					 Added include for stdlib.h within WINNT ifdef
106*5113495bSYour Name 					 Added support for ARM_ASM
107*5113495bSYour Name 					 Added support SWIG preprocessor.
108*5113495bSYour Name 09/09/99   tac     Merged in a bunch of panther changes.
109*5113495bSYour Name 08/11/99   jct     Corrected conditional compilation around labs to check for
110*5113495bSYour Name                    labs instead of abs
111*5113495bSYour Name 06/30/99   jct     Added PC_EMULATOR capability for INTLOCK and INTLOCKSAV
112*5113495bSYour Name 06/15/99   jct     Cleanup to make work in Windows NT environment.  Addition
113*5113495bSYour Name                    of int(n) types where n is 8,16,32,64 and addition of
114*5113495bSYour Name                    unit64.  Removal of OS comments and defines as this is replaced
115*5113495bSYour Name                    by T_WINNT.  Conditional inclusion of MAX, MIN, labs, abs,
116*5113495bSYour Name                    NULL definitions.  Removal of volatile from packed definition
117*5113495bSYour Name                    stdlib.h included for Win32 based targets since this replaces several
118*5113495bSYour Name                    of the define here.  Changed out uts calls to be comet calls.
119*5113495bSYour Name                    Added a defines for Windows NT targets to define away symbols
120*5113495bSYour Name                    no longer supported
121*5113495bSYour Name 04/09/99    ms     Lint cleanup.
122*5113495bSYour Name 04/01/99    ms     Lint cleanup.
123*5113495bSYour Name 02/17/99    ms     Parenthesized abs and labs.
124*5113495bSYour Name                    Defined __packed to volatile to exploit lint.
125*5113495bSYour Name 12/16/98   jct     Removed 80186 support
126*5113495bSYour Name 12/01/98    ms     Removed definition of bsp_io_base.
127*5113495bSYour Name 11/20/98    ms     Typecast to volatile pointers in inp,outp,inpw and outpw.
128*5113495bSYour Name 10/10/98   jct     Honing of OS and T_ definitions, added T_WINNT as a target
129*5113495bSYour Name                    which triggers something different then which OS since
130*5113495bSYour Name                    we may be running REX on an NT platform, but strictly
131*5113495bSYour Name                    speaking, the application software is using REX, not NT
132*5113495bSYour Name                    as the OS.  Changed ROM for WINNT/ARM targets to be nothing
133*5113495bSYour Name                    instead of const
134*5113495bSYour Name 09/09/98   jct     Updates to merge ARM support with 186 support, added some
135*5113495bSYour Name                    new type aliases, added some segmented architecture macros,
136*5113495bSYour Name                    updated comments, removed unused code, updated declaration
137*5113495bSYour Name                    of inp/outp to have cdecl
138*5113495bSYour Name 08/01/98   jct     Updates to support ARM processor
139*5113495bSYour Name 03/25/96   jah     Moved SET_VECT to 80186.h
140*5113495bSYour Name 02/06/96   fkm     Put ()s around Macros to Make Lint Happy
141*5113495bSYour Name 01/12/95   jah     Updated dependency in MACRO INTLOCK_SAV / INTFREE_SAV.
142*5113495bSYour Name 12/20/94   jah     Corrected typo in ARR_SIZE() macro comments
143*5113495bSYour Name 03/11/94   jah     Added #ifdef _lint of NULL as 0 for near/far lint problem.
144*5113495bSYour Name 06/11/93   jah     Changed FPOS() to cast the pointer to 'near' to avoid the
145*5113495bSYour Name                    compiler complaints about lost segments.
146*5113495bSYour Name 01/28/93   twp     Added ARR_SIZE macro to return number of array elements.
147*5113495bSYour Name 07/17/92   jah     Changed int1 from 'char' to 'signed char'
148*5113495bSYour Name 06/10/92   jah     Added WORD_LO/HI, INC_SAT
149*5113495bSYour Name 05/19/92   jah     Added header comments for macros & made them lint-friendly
150*5113495bSYour Name 05/04/92   jah     Added define for ROM
151*5113495bSYour Name 03/02/92   jah     Added in/outp prototypes, INT* Macro comments w/lint
152*5113495bSYour Name 02/20/92   arh     Added LOCAL macro and ifdef/endif around file
153*5113495bSYour Name 
154*5113495bSYour Name ===========================================================================*/
155*5113495bSYour Name 
156*5113495bSYour Name 
157*5113495bSYour Name /*===========================================================================
158*5113495bSYour Name 
159*5113495bSYour Name                             Data Declarations
160*5113495bSYour Name 
161*5113495bSYour Name ===========================================================================*/
162*5113495bSYour Name 
163*5113495bSYour Name /* -----------------------------------------------------------------------
164*5113495bSYour Name ** We include target.h to get FEATURE definitions used for macro defines.
165*5113495bSYour Name ** Note we only include this if TG is defined and target.h has not been
166*5113495bSYour Name ** previously included.  This allows comdef.h to be reused outside the
167*5113495bSYour Name ** scope of the target/customer featurization paradigm
168*5113495bSYour Name ** ----------------------------------------------------------------------- */
169*5113495bSYour Name #ifdef TG
170*5113495bSYour Name   #include "target.h"
171*5113495bSYour Name #endif
172*5113495bSYour Name 
173*5113495bSYour Name /* For NT apps we want to use the Win32 definitions and/or those
174*5113495bSYour Name ** supplied by the Win32 compiler for things like NULL, MAX, MIN
175*5113495bSYour Name ** abs, labs, etc.
176*5113495bSYour Name */
177*5113495bSYour Name #ifdef T_WINNT
178*5113495bSYour Name    #ifndef WIN32
179*5113495bSYour Name       #define WIN32
180*5113495bSYour Name    #endif
181*5113495bSYour Name    #include <stdlib.h>
182*5113495bSYour Name #endif
183*5113495bSYour Name #ifdef __KERNEL__
184*5113495bSYour Name #include <linux/types.h>
185*5113495bSYour Name #else
186*5113495bSYour Name #include <stdint.h>
187*5113495bSYour Name #endif
188*5113495bSYour Name 
189*5113495bSYour Name /* ------------------------------------------------------------------------
190*5113495bSYour Name ** Constants
191*5113495bSYour Name ** ------------------------------------------------------------------------ */
192*5113495bSYour Name 
193*5113495bSYour Name #ifdef TRUE
194*5113495bSYour Name #undef TRUE
195*5113495bSYour Name #endif
196*5113495bSYour Name 
197*5113495bSYour Name #ifdef FALSE
198*5113495bSYour Name #undef FALSE
199*5113495bSYour Name #endif
200*5113495bSYour Name 
201*5113495bSYour Name #define TRUE   1   /* Boolean true value. */
202*5113495bSYour Name #define FALSE  0   /* Boolean false value. */
203*5113495bSYour Name 
204*5113495bSYour Name #define  ON   1    /* On value. */
205*5113495bSYour Name #define  OFF  0    /* Off value. */
206*5113495bSYour Name 
207*5113495bSYour Name #ifdef _lint
208*5113495bSYour Name   #define NULL 0
209*5113495bSYour Name #endif
210*5113495bSYour Name 
211*5113495bSYour Name #ifndef NULL
212*5113495bSYour Name   #define NULL  0
213*5113495bSYour Name #endif
214*5113495bSYour Name 
215*5113495bSYour Name /* -----------------------------------------------------------------------
216*5113495bSYour Name ** Standard Types
217*5113495bSYour Name ** ----------------------------------------------------------------------- */
218*5113495bSYour Name 
219*5113495bSYour Name /* The following definitions are the same accross platforms.  This first
220*5113495bSYour Name ** group are the sanctioned types.
221*5113495bSYour Name */
222*5113495bSYour Name #ifndef _ARM_ASM_
223*5113495bSYour Name typedef  unsigned char      boolean;     /* Boolean value type. */
224*5113495bSYour Name #if defined(VV_FEATURE_COMPILING_64BIT)
225*5113495bSYour Name typedef unsigned long       uint32;
226*5113495bSYour Name #else
227*5113495bSYour Name typedef  unsigned int       uint32;      /* Unsigned 32 bit value */
228*5113495bSYour Name #endif
229*5113495bSYour Name typedef  unsigned short     uint16;      /* Unsigned 16 bit value */
230*5113495bSYour Name typedef  unsigned char      uint8;       /* Unsigned 8  bit value */
231*5113495bSYour Name 
232*5113495bSYour Name #if defined(VV_FEATURE_COMPILING_64BIT)
233*5113495bSYour Name typedef  signed long int    int32;       /* Signed 32 bit value */
234*5113495bSYour Name #else
235*5113495bSYour Name typedef  signed int         int32;       /* Signed 32 bit value */
236*5113495bSYour Name #endif
237*5113495bSYour Name typedef  signed short       int16;       /* Signed 16 bit value */
238*5113495bSYour Name typedef  signed char        int8;        /* Signed 8  bit value */
239*5113495bSYour Name 
240*5113495bSYour Name /* This group are the deprecated types.  Their use should be
241*5113495bSYour Name ** discontinued and new code should use the types above
242*5113495bSYour Name */
243*5113495bSYour Name typedef  unsigned char     byte;         /* Unsigned 8  bit value type. */
244*5113495bSYour Name typedef  unsigned short    word;         /* Unsinged 16 bit value type. */
245*5113495bSYour Name #if defined(VV_FEATURE_COMPILING_64BIT)
246*5113495bSYour Name typedef  unsigned int      dword;        /* Unsigned 32 bit value type. */
247*5113495bSYour Name #else
248*5113495bSYour Name typedef  unsigned long     dword;        /* Unsigned 32 bit value type. */
249*5113495bSYour Name #endif
250*5113495bSYour Name 
251*5113495bSYour Name typedef  unsigned char     uint1;        /* Unsigned 8  bit value type. */
252*5113495bSYour Name typedef  unsigned short    uint2;        /* Unsigned 16 bit value type. */
253*5113495bSYour Name #if defined(VV_FEATURE_COMPILING_64BIT)
254*5113495bSYour Name typedef  unsigned int      uint4;        /* Unsigned 32 bit value type. */
255*5113495bSYour Name #else
256*5113495bSYour Name typedef  unsigned long     uint4;        /* Unsigned 32 bit value type. */
257*5113495bSYour Name #endif
258*5113495bSYour Name 
259*5113495bSYour Name typedef  signed char       int1;         /* Signed 8  bit value type. */
260*5113495bSYour Name typedef  signed short      int2;         /* Signed 16 bit value type. */
261*5113495bSYour Name #if defined(VV_FEATURE_COMPILING_64BIT)
262*5113495bSYour Name typedef  int               int4;         /* Signed 32 bit value type. */
263*5113495bSYour Name #else
264*5113495bSYour Name typedef  long int          int4;         /* Signed 32 bit value type. */
265*5113495bSYour Name #endif
266*5113495bSYour Name 
267*5113495bSYour Name #if defined(VV_FEATURE_COMPILING_64BIT)
268*5113495bSYour Name typedef  signed int        sint31;       /* Signed 32 bit value */
269*5113495bSYour Name #else
270*5113495bSYour Name typedef  signed long       sint31;       /* Signed 32 bit value */
271*5113495bSYour Name #endif
272*5113495bSYour Name typedef  signed short      sint15;       /* Signed 16 bit value */
273*5113495bSYour Name typedef  signed char       sint7;        /* Signed 8  bit value */
274*5113495bSYour Name 
275*5113495bSYour Name #if defined(HASTINGS) || defined(PHYDEVLIB_PRODUCT_HAWKEYE) || defined(PHYDEVLIB_PRODUCT_HAWKEYE2) || defined(CYPRESS) || defined (HASTINGSPRIME) || defined(PHYDEVLIB_PRODUCT_PINE)
276*5113495bSYour Name typedef uint16 UWord16;
277*5113495bSYour Name typedef uint32 UWord32;
278*5113495bSYour Name typedef int32  Word32;
279*5113495bSYour Name typedef int16  Word16;
280*5113495bSYour Name typedef uint8  UWord8;
281*5113495bSYour Name typedef int8   Word8;
282*5113495bSYour Name typedef int32  Vect32;
283*5113495bSYour Name #endif
284*5113495bSYour Name 
285*5113495bSYour Name /* ---------------------------------------------------------------------
286*5113495bSYour Name ** Compiler Keyword Macros
287*5113495bSYour Name ** --------------------------------------------------------------------- */
288*5113495bSYour Name #if (! defined T_WINNT) && (! defined TARGET_OS_SOLARIS)
289*5113495bSYour Name #ifndef SWIG  /* The SWIG preprocessor gets confused by these */
290*5113495bSYour Name   /* Non WinNT Targets
291*5113495bSYour Name   */
292*5113495bSYour Name #if defined(VV_FEATURE_COMPILING_64BIT)
293*5113495bSYour Name   typedef  signed long        int64;       /* Signed 64 bit value */
294*5113495bSYour Name   typedef  unsigned long      uint64;      /* Unsigned 64 bit value */
295*5113495bSYour Name #else
296*5113495bSYour Name   typedef  signed long long   int64;       /* Signed 64 bit value */
297*5113495bSYour Name   typedef  unsigned long long uint64;      /* Unsigned 64 bit value */
298*5113495bSYour Name #endif
299*5113495bSYour Name   #define PACKED __packed
300*5113495bSYour Name #ifndef INLINE
301*5113495bSYour Name   #define INLINE __inline
302*5113495bSYour Name #endif
303*5113495bSYour Name   #define CDECL
304*5113495bSYour Name #endif /* SWIG */
305*5113495bSYour Name   #define far
306*5113495bSYour Name   #define near
307*5113495bSYour Name   #define _far
308*5113495bSYour Name   #define _near
309*5113495bSYour Name   #define _cdecl
310*5113495bSYour Name   #define cdecl
311*5113495bSYour Name   #define _pascal
312*5113495bSYour Name   #define _interrupt
313*5113495bSYour Name 
314*5113495bSYour Name #else /* T_WINNT || TARGET_OS_SOLARIS */
315*5113495bSYour Name 
316*5113495bSYour Name   /* WINNT or SOLARIS based targets
317*5113495bSYour Name   */
318*5113495bSYour Name #if (defined __GNUC__) || (defined TARGET_OS_SOLARIS)
319*5113495bSYour Name #if defined(VV_FEATURE_COMPILING_64BIT)
320*5113495bSYour Name   typedef long                int64;
321*5113495bSYour Name   typedef unsigned long       uint64;
322*5113495bSYour Name #else
323*5113495bSYour Name   typedef long long           int64;
324*5113495bSYour Name   typedef unsigned long long  uint64;
325*5113495bSYour Name #endif
326*5113495bSYour Name #else
327*5113495bSYour Name   typedef  __int64            int64;       /* Signed 64 bit value */
328*5113495bSYour Name   typedef  unsigned __int64   uint64;      /* Unsigned 64 bit value */
329*5113495bSYour Name #endif
330*5113495bSYour Name   #define PACKED
331*5113495bSYour Name   /* INLINE is defined to __inline because WINNT targets work fine with it
332*5113495bSYour Name    * and defining it to nothing does not work because the inline function
333*5113495bSYour Name    * definition is then multiply defined.  Solaris may need a different value.
334*5113495bSYour Name    */
335*5113495bSYour Name   #define INLINE __inline
336*5113495bSYour Name   #ifndef CDECL
337*5113495bSYour Name      #define CDECL __cdecl
338*5113495bSYour Name   #endif
339*5113495bSYour Name   #define _pascal
340*5113495bSYour Name   #define _far
341*5113495bSYour Name   #define far
342*5113495bSYour Name   #define near
343*5113495bSYour Name   #define _near
344*5113495bSYour Name   #define cdecl
345*5113495bSYour Name   #define _cdecl
346*5113495bSYour Name   #define _interrupt
347*5113495bSYour Name   #define __packed
348*5113495bSYour Name   #define _fmemcpy memcpy
349*5113495bSYour Name 
350*5113495bSYour Name #endif /* T_WINNT */
351*5113495bSYour Name #endif // #ifndef _ARM_ASM_
352*5113495bSYour Name 
353*5113495bSYour Name /* ----------------------------------------------------------------------
354*5113495bSYour Name ** Lint does not understand __packed, so we define it away here.  In the
355*5113495bSYour Name ** past we did this:
356*5113495bSYour Name **   This helps us catch non-packed pointers accessing packed structures,
357*5113495bSYour Name **   for example, (although lint thinks it is catching non-volatile pointers
358*5113495bSYour Name **   accessing volatile structures).
359*5113495bSYour Name **   This does assume that volatile is not being used with __packed anywhere
360*5113495bSYour Name **   because that would make Lint see volatile volatile (grrr).
361*5113495bSYour Name ** but found it to be more trouble than it was worth as it would emit bogus
362*5113495bSYour Name ** errors
363*5113495bSYour Name ** ---------------------------------------------------------------------- */
364*5113495bSYour Name #ifdef _lint
365*5113495bSYour Name   #define __packed
366*5113495bSYour Name #endif
367*5113495bSYour Name 
368*5113495bSYour Name /* ----------------------------------------------------------------------
369*5113495bSYour Name **                          STANDARD MACROS
370*5113495bSYour Name ** ---------------------------------------------------------------------- */
371*5113495bSYour Name 
372*5113495bSYour Name #ifndef SWIG /* these confuse the SWIG preprocessor and aren't needed for it */
373*5113495bSYour Name 
374*5113495bSYour Name 
375*5113495bSYour Name /*===========================================================================
376*5113495bSYour Name 
377*5113495bSYour Name MACRO MEM_B
378*5113495bSYour Name MACRO MEM_W
379*5113495bSYour Name 
380*5113495bSYour Name DESCRIPTION
381*5113495bSYour Name   Take an address and dereference it as a byte/word, allowing access to an
382*5113495bSYour Name   arbitrary memory byte/word.
383*5113495bSYour Name 
384*5113495bSYour Name PARAMETERS
385*5113495bSYour Name   x     address to be dereferenced
386*5113495bSYour Name 
387*5113495bSYour Name DEPENDENCIES
388*5113495bSYour Name   None
389*5113495bSYour Name 
390*5113495bSYour Name RETURN VALUE
391*5113495bSYour Name   MEM_B byte at the given address
392*5113495bSYour Name   MEM_W word at the given address
393*5113495bSYour Name 
394*5113495bSYour Name SIDE EFFECTS
395*5113495bSYour Name   None
396*5113495bSYour Name 
397*5113495bSYour Name ===========================================================================*/
398*5113495bSYour Name 
399*5113495bSYour Name #define  MEM_B( x )  ( *( (uint8 *) (x) ) )
400*5113495bSYour Name #define  MEM_W( x )  ( *( (uint16 *) (x) ) )
401*5113495bSYour Name 
402*5113495bSYour Name 
403*5113495bSYour Name 
404*5113495bSYour Name /*===========================================================================
405*5113495bSYour Name 
406*5113495bSYour Name MACRO MAX
407*5113495bSYour Name MACRO MIN
408*5113495bSYour Name 
409*5113495bSYour Name DESCRIPTION
410*5113495bSYour Name   Evaluate the maximum/minimum of 2 specified arguments.
411*5113495bSYour Name 
412*5113495bSYour Name PARAMETERS
413*5113495bSYour Name   x     parameter to compare to 'y'
414*5113495bSYour Name   y     parameter to compare to 'x'
415*5113495bSYour Name 
416*5113495bSYour Name DEPENDENCIES
417*5113495bSYour Name   'x' and 'y' are referenced multiple times, and should remain the same
418*5113495bSYour Name   value each time they are evaluated.
419*5113495bSYour Name 
420*5113495bSYour Name RETURN VALUE
421*5113495bSYour Name   MAX   greater of 'x' and 'y'
422*5113495bSYour Name   MIN   lesser of 'x' and 'y'
423*5113495bSYour Name 
424*5113495bSYour Name SIDE EFFECTS
425*5113495bSYour Name   None
426*5113495bSYour Name 
427*5113495bSYour Name ===========================================================================*/
428*5113495bSYour Name #ifndef MAX
429*5113495bSYour Name    #define  MAX( x, y ) ( ((x) > (y)) ? (x) : (y) )
430*5113495bSYour Name #endif
431*5113495bSYour Name 
432*5113495bSYour Name #ifndef MIN
433*5113495bSYour Name    #define  MIN( x, y ) ( ((x) < (y)) ? (x) : (y) )
434*5113495bSYour Name #endif
435*5113495bSYour Name 
436*5113495bSYour Name 
437*5113495bSYour Name 
438*5113495bSYour Name /*===========================================================================
439*5113495bSYour Name 
440*5113495bSYour Name MACRO FPOS
441*5113495bSYour Name 
442*5113495bSYour Name DESCRIPTION
443*5113495bSYour Name   This macro computes the offset, in bytes, of a specified field
444*5113495bSYour Name   of a specified structure or union type.
445*5113495bSYour Name 
446*5113495bSYour Name PARAMETERS
447*5113495bSYour Name   type          type of the structure or union
448*5113495bSYour Name   field         field in the structure or union to get the offset of
449*5113495bSYour Name 
450*5113495bSYour Name DEPENDENCIES
451*5113495bSYour Name   None
452*5113495bSYour Name 
453*5113495bSYour Name RETURN VALUE
454*5113495bSYour Name   The byte offset of the 'field' in the structure or union of type 'type'.
455*5113495bSYour Name 
456*5113495bSYour Name SIDE EFFECTS
457*5113495bSYour Name   The lint error "Warning 545: Suspicious use of &" is suppressed within
458*5113495bSYour Name   this macro.  This is due to the desire to have lint not complain when
459*5113495bSYour Name   'field' is an array.
460*5113495bSYour Name 
461*5113495bSYour Name ===========================================================================*/
462*5113495bSYour Name 
463*5113495bSYour Name #define FPOS( type, field ) \
464*5113495bSYour Name     /*lint -e545 */ ( (dword) &(( type *) 0)-> field ) /*lint +e545 */
465*5113495bSYour Name 
466*5113495bSYour Name 
467*5113495bSYour Name 
468*5113495bSYour Name /*===========================================================================
469*5113495bSYour Name 
470*5113495bSYour Name MACRO FSIZ
471*5113495bSYour Name 
472*5113495bSYour Name DESCRIPTION
473*5113495bSYour Name   This macro computes the size, in bytes, of a specified field
474*5113495bSYour Name   of a specified structure or union type.
475*5113495bSYour Name 
476*5113495bSYour Name PARAMETERS
477*5113495bSYour Name   type          type of the structure or union
478*5113495bSYour Name   field         field in the structure or union to get the size of
479*5113495bSYour Name 
480*5113495bSYour Name DEPENDENCIES
481*5113495bSYour Name   None
482*5113495bSYour Name 
483*5113495bSYour Name RETURN VALUE
484*5113495bSYour Name   size in bytes of the 'field' in a structure or union of type 'type'
485*5113495bSYour Name 
486*5113495bSYour Name SIDE EFFECTS
487*5113495bSYour Name   None
488*5113495bSYour Name 
489*5113495bSYour Name ===========================================================================*/
490*5113495bSYour Name 
491*5113495bSYour Name #define FSIZ( type, field ) sizeof( ((type *) 0)->field )
492*5113495bSYour Name 
493*5113495bSYour Name 
494*5113495bSYour Name /*===========================================================================
495*5113495bSYour Name 
496*5113495bSYour Name MACRO FLIPW
497*5113495bSYour Name 
498*5113495bSYour Name DESCRIPTION
499*5113495bSYour Name   Takes a 2 byte array, with the most significant byte first, followed
500*5113495bSYour Name   by the least significant byte, and converts the quantity into a word
501*5113495bSYour Name   with Intel byte order (LSB first)
502*5113495bSYour Name 
503*5113495bSYour Name PARAMETERS
504*5113495bSYour Name   ray   array of 2 bytes to be converted to a word
505*5113495bSYour Name 
506*5113495bSYour Name DEPENDENCIES
507*5113495bSYour Name   None
508*5113495bSYour Name 
509*5113495bSYour Name RETURN VALUE
510*5113495bSYour Name   word in Intel byte order comprised of the 2 bytes of ray.
511*5113495bSYour Name 
512*5113495bSYour Name SIDE EFFECTS
513*5113495bSYour Name   None
514*5113495bSYour Name 
515*5113495bSYour Name ===========================================================================*/
516*5113495bSYour Name 
517*5113495bSYour Name #define  FLIPW( ray ) ( (((word) (ray)[0]) * 256) + (ray)[1] )
518*5113495bSYour Name 
519*5113495bSYour Name 
520*5113495bSYour Name 
521*5113495bSYour Name /*===========================================================================
522*5113495bSYour Name 
523*5113495bSYour Name MACRO FLOPW
524*5113495bSYour Name 
525*5113495bSYour Name DESCRIPTION
526*5113495bSYour Name   Reverses bytes of word value and writes them to a 2 byte array.
527*5113495bSYour Name   Effectively the reverse of the FLIPW macro.
528*5113495bSYour Name 
529*5113495bSYour Name PARAMETERS
530*5113495bSYour Name   ray   array to receive the 2 bytes from 'val'
531*5113495bSYour Name   val   word to break into 2 bytes and put into 'ray'
532*5113495bSYour Name 
533*5113495bSYour Name DEPENDENCIES
534*5113495bSYour Name   None
535*5113495bSYour Name 
536*5113495bSYour Name RETURN VALUE
537*5113495bSYour Name   None
538*5113495bSYour Name 
539*5113495bSYour Name SIDE EFFECTS
540*5113495bSYour Name   None
541*5113495bSYour Name 
542*5113495bSYour Name ===========================================================================*/
543*5113495bSYour Name #define  FLOPW( ray, val ) \
544*5113495bSYour Name   (ray)[0] = ((val) / 256); \
545*5113495bSYour Name   (ray)[1] = ((val) & 0xFF)
546*5113495bSYour Name 
547*5113495bSYour Name 
548*5113495bSYour Name 
549*5113495bSYour Name /*===========================================================================
550*5113495bSYour Name 
551*5113495bSYour Name MACRO B_PTR
552*5113495bSYour Name MACRO W_PTR
553*5113495bSYour Name 
554*5113495bSYour Name DESCRIPTION
555*5113495bSYour Name   Casts the address of a specified variable as a pointer to byte/word,
556*5113495bSYour Name   allowing byte/word-wise access, e.g.
557*5113495bSYour Name   W_PTR ( xyz )[ 2 ] = 0x1234;  -or-    B_PTR ( xyz )[ 2 ] = 0xFF;
558*5113495bSYour Name 
559*5113495bSYour Name PARAMETERS
560*5113495bSYour Name   var   the datum to get a word pointer to
561*5113495bSYour Name 
562*5113495bSYour Name DEPENDENCIES
563*5113495bSYour Name   None
564*5113495bSYour Name 
565*5113495bSYour Name RETURN VALUE
566*5113495bSYour Name   Word pointer to var
567*5113495bSYour Name 
568*5113495bSYour Name SIDE EFFECTS
569*5113495bSYour Name   None
570*5113495bSYour Name 
571*5113495bSYour Name ===========================================================================*/
572*5113495bSYour Name 
573*5113495bSYour Name #define  B_PTR( var )  ( (byte *) (void *) &(var) )
574*5113495bSYour Name #define  W_PTR( var )  ( (word *) (void *) &(var) )
575*5113495bSYour Name 
576*5113495bSYour Name 
577*5113495bSYour Name /*===========================================================================
578*5113495bSYour Name 
579*5113495bSYour Name MACRO WORD_LO
580*5113495bSYour Name MACRO WORD_HI
581*5113495bSYour Name 
582*5113495bSYour Name DESCRIPTION
583*5113495bSYour Name   Take a word and extract the least-significant or most-significant byte.
584*5113495bSYour Name 
585*5113495bSYour Name PARAMETERS
586*5113495bSYour Name   xxx   word to extract the Low/High from
587*5113495bSYour Name 
588*5113495bSYour Name DEPENDENCIES
589*5113495bSYour Name   None
590*5113495bSYour Name 
591*5113495bSYour Name RETURN VALUE
592*5113495bSYour Name   WORD_LO       Least significant byte of xxx.
593*5113495bSYour Name   WORD_HI       Most significant byte of xxx.
594*5113495bSYour Name 
595*5113495bSYour Name SIDE EFFECTS
596*5113495bSYour Name   None
597*5113495bSYour Name 
598*5113495bSYour Name ===========================================================================*/
599*5113495bSYour Name 
600*5113495bSYour Name #define  WORD_LO(xxx)  ((uint8) ((uint16)(xxx) & 255))
601*5113495bSYour Name #define  WORD_HI(xxx) \
602*5113495bSYour Name   /*lint -e572 */  ((uint8) ((uint16)(xxx) >> 8))  /*lint +e572 */
603*5113495bSYour Name 
604*5113495bSYour Name 
605*5113495bSYour Name /*===========================================================================
606*5113495bSYour Name 
607*5113495bSYour Name MACRO RND8
608*5113495bSYour Name 
609*5113495bSYour Name DESCRIPTION
610*5113495bSYour Name   RND8 rounds a number up to the nearest multiple of 8.
611*5113495bSYour Name 
612*5113495bSYour Name PARAMETERS
613*5113495bSYour Name   x     Number to be rounded up
614*5113495bSYour Name 
615*5113495bSYour Name DEPENDENCIES
616*5113495bSYour Name   None
617*5113495bSYour Name 
618*5113495bSYour Name RETURN VALUE
619*5113495bSYour Name   x rounded up to the nearest multiple of 8.
620*5113495bSYour Name 
621*5113495bSYour Name SIDE EFFECTS
622*5113495bSYour Name   None
623*5113495bSYour Name 
624*5113495bSYour Name ===========================================================================*/
625*5113495bSYour Name 
626*5113495bSYour Name #define RND8( x )       ((((x) + 7) / 8 ) * 8 )
627*5113495bSYour Name 
628*5113495bSYour Name 
629*5113495bSYour Name /*===========================================================================
630*5113495bSYour Name 
631*5113495bSYour Name MACRO INTLOCK / INTFREE
632*5113495bSYour Name 
633*5113495bSYour Name DESCRIPTION
634*5113495bSYour Name   INTLOCK Saves current interrupt state on stack then disables interrupts.
635*5113495bSYour Name   Used in conjunction with INTFREE.
636*5113495bSYour Name 
637*5113495bSYour Name   INTFREE Restores previous interrupt state from stack.  Used in conjunction
638*5113495bSYour Name   with INTLOCK.
639*5113495bSYour Name 
640*5113495bSYour Name PARAMETERS
641*5113495bSYour Name   None
642*5113495bSYour Name 
643*5113495bSYour Name DEPENDENCIES
644*5113495bSYour Name   The stack level when INTFREE is called must be as it was just after INTLOCK
645*5113495bSYour Name   was called.  The Microsoft C compiler does not always pop the stack after a
646*5113495bSYour Name   subroutine call, but instead waits to do a 'big' pop after several calls.
647*5113495bSYour Name   This causes these macros to fail.  Do not place subroutine calls between
648*5113495bSYour Name   these macros.  Use INTLOCK/FREE_SAV in those cases.
649*5113495bSYour Name 
650*5113495bSYour Name RETURN VALUE
651*5113495bSYour Name   None
652*5113495bSYour Name 
653*5113495bSYour Name SIDE EFFECTS
654*5113495bSYour Name   INTLOCK turn off interrupts
655*5113495bSYour Name   INTFREE restore the interrupt mask saved previously
656*5113495bSYour Name 
657*5113495bSYour Name ===========================================================================*/
658*5113495bSYour Name #if defined(PC_EMULATOR_H) && ! defined(T_REXNT)
659*5113495bSYour Name 
660*5113495bSYour Name    #define PC_EMULATOR_INTLOCK
661*5113495bSYour Name    #include PC_EMULATOR_H
662*5113495bSYour Name    #undef PC_EMULATOR_INTLOCK
663*5113495bSYour Name 
664*5113495bSYour Name #elif defined(T_WINNT)
665*5113495bSYour Name 
666*5113495bSYour Name    #define INTLOCK()
667*5113495bSYour Name    #define INTFREE()
668*5113495bSYour Name 
669*5113495bSYour Name #elif !defined( _ARM_ASM_)
670*5113495bSYour Name 
671*5113495bSYour Name //  #include "rex.h"
672*5113495bSYour Name //  #define  INTLOCK( )  { dword sav = rex_int_lock();
673*5113495bSYour Name //  #define  INTFREE( )  if(!sav) (void)rex_int_free();}
674*5113495bSYour Name 
675*5113495bSYour Name    #define INTLOCK()
676*5113495bSYour Name    #define INTFREE()
677*5113495bSYour Name 
678*5113495bSYour Name #endif
679*5113495bSYour Name 
680*5113495bSYour Name 
681*5113495bSYour Name 
682*5113495bSYour Name /*===========================================================================
683*5113495bSYour Name 
684*5113495bSYour Name MACRO INTLOCK_SAV / INTFREE_SAV
685*5113495bSYour Name 
686*5113495bSYour Name DESCRIPTION
687*5113495bSYour Name   INTLOCK_SAV Saves current interrupt state in specified variable sav_var
688*5113495bSYour Name   then disables interrupts.  Used in conjunction with INTFREE_SAV.
689*5113495bSYour Name 
690*5113495bSYour Name   INTFREE_SAV Restores previous interrupt state from specified variable
691*5113495bSYour Name   sav_var.  Used in conjunction with INTLOCK_SAV.
692*5113495bSYour Name 
693*5113495bSYour Name PARAMETERS
694*5113495bSYour Name   sav_var       Current flags register, including interrupt status
695*5113495bSYour Name 
696*5113495bSYour Name DEPENDENCIES
697*5113495bSYour Name   None.
698*5113495bSYour Name 
699*5113495bSYour Name RETURN VALUE
700*5113495bSYour Name   None
701*5113495bSYour Name 
702*5113495bSYour Name SIDE EFFECTS
703*5113495bSYour Name   INTLOCK_SAV turn off interrupts
704*5113495bSYour Name   INTFREE_SAV restore the interrupt mask saved previously
705*5113495bSYour Name 
706*5113495bSYour Name ===========================================================================*/
707*5113495bSYour Name 
708*5113495bSYour Name 
709*5113495bSYour Name #ifdef _lint    /* get lint to 'know' the parameter is accessed */
710*5113495bSYour Name 
711*5113495bSYour Name   #define  INTLOCK_SAV(sav_var)   (sav_var = 1)
712*5113495bSYour Name   #define  INTFREE_SAV(sav_var)   (sav_var = sav_var + 1)
713*5113495bSYour Name 
714*5113495bSYour Name #else
715*5113495bSYour Name 
716*5113495bSYour Name    #if defined( PC_EMULATOR_H) && !defined( T_REXNT)
717*5113495bSYour Name 
718*5113495bSYour Name       #define PC_EMULATOR_INTLOCKSAV
719*5113495bSYour Name       #include PC_EMULATOR_H
720*5113495bSYour Name       #undef  PC_EMULATOR_INTLOCKSAV
721*5113495bSYour Name 
722*5113495bSYour Name    #elif defined (T_WINNT)
723*5113495bSYour Name 
724*5113495bSYour Name      #define  INTLOCK_SAV( sav_var )
725*5113495bSYour Name      #define  INTFREE_SAV( sav_var )
726*5113495bSYour Name 
727*5113495bSYour Name    #elif !defined( _ARM_ASM_)
728*5113495bSYour Name 
729*5113495bSYour Name //     #include "rex.h"
730*5113495bSYour Name //     #define  INTLOCK_SAV( sav_var )  sav_var = rex_int_lock()
731*5113495bSYour Name //     #define  INTFREE_SAV( sav_var )  if(!sav_var) rex_int_free()
732*5113495bSYour Name      #define  INTLOCK_SAV(sav_var)   (sav_var = 1)
733*5113495bSYour Name      #define  INTFREE_SAV(sav_var)   (sav_var = sav_var + 1)
734*5113495bSYour Name 
735*5113495bSYour Name    #else
736*5113495bSYour Name 
737*5113495bSYour Name      #define  INTLOCK_SAV(sav_var)   (sav_var = 1)
738*5113495bSYour Name      #define  INTFREE_SAV(sav_var)   (sav_var = sav_var + 1)
739*5113495bSYour Name 
740*5113495bSYour Name    #endif
741*5113495bSYour Name 
742*5113495bSYour Name #endif /* END if _lint */
743*5113495bSYour Name 
744*5113495bSYour Name 
745*5113495bSYour Name 
746*5113495bSYour Name /*===========================================================================
747*5113495bSYour Name 
748*5113495bSYour Name MACRO UPCASE
749*5113495bSYour Name 
750*5113495bSYour Name DESCRIPTION
751*5113495bSYour Name   Convert a character to uppercase, the character does not have to
752*5113495bSYour Name   be printable or a letter.
753*5113495bSYour Name 
754*5113495bSYour Name PARAMETERS
755*5113495bSYour Name   c             Character to be converted
756*5113495bSYour Name 
757*5113495bSYour Name DEPENDENCIES
758*5113495bSYour Name   'c' is referenced multiple times, and should remain the same value
759*5113495bSYour Name   each time it is evaluated.
760*5113495bSYour Name 
761*5113495bSYour Name RETURN VALUE
762*5113495bSYour Name   Uppercase equivalent of the character parameter
763*5113495bSYour Name 
764*5113495bSYour Name SIDE EFFECTS
765*5113495bSYour Name   None
766*5113495bSYour Name 
767*5113495bSYour Name ===========================================================================*/
768*5113495bSYour Name 
769*5113495bSYour Name #define  UPCASE( c ) ( ((c) >= 'a' && (c) <= 'z') ? ((c) - 0x20) : (c) )
770*5113495bSYour Name 
771*5113495bSYour Name 
772*5113495bSYour Name /*===========================================================================
773*5113495bSYour Name 
774*5113495bSYour Name MACRO DECCHK
775*5113495bSYour Name MACRO HEXCHK
776*5113495bSYour Name 
777*5113495bSYour Name DESCRIPTION
778*5113495bSYour Name   These character attribute macros are similar to the standard 'C' macros
779*5113495bSYour Name   (isdec and ishex), but do not rely on the character attributes table used
780*5113495bSYour Name   by Microsoft 'C'.
781*5113495bSYour Name 
782*5113495bSYour Name PARAMETERS
783*5113495bSYour Name   c             Character to be examined
784*5113495bSYour Name 
785*5113495bSYour Name DEPENDENCIES
786*5113495bSYour Name   None
787*5113495bSYour Name 
788*5113495bSYour Name RETURN VALUE
789*5113495bSYour Name   DECCHK        True if the character is a decimal digit, else False
790*5113495bSYour Name   HEXCHK        True if the chacters is a hexidecimal digit, else False
791*5113495bSYour Name 
792*5113495bSYour Name SIDE EFFECTS
793*5113495bSYour Name   None
794*5113495bSYour Name 
795*5113495bSYour Name ===========================================================================*/
796*5113495bSYour Name 
797*5113495bSYour Name #define  DECCHK( c ) ((c) >= '0' && (c) <= '9')
798*5113495bSYour Name 
799*5113495bSYour Name #define  HEXCHK( c ) ( ((c) >= '0' && (c) <= '9') ||\
800*5113495bSYour Name                        ((c) >= 'A' && (c) <= 'F') ||\
801*5113495bSYour Name                        ((c) >= 'a' && (c) <= 'f') )
802*5113495bSYour Name 
803*5113495bSYour Name 
804*5113495bSYour Name /*===========================================================================
805*5113495bSYour Name 
806*5113495bSYour Name MACRO INC_SAT
807*5113495bSYour Name 
808*5113495bSYour Name DESCRIPTION
809*5113495bSYour Name   Increment a value, but saturate it at its maximum positive value, do not
810*5113495bSYour Name   let it wrap back to 0 (unsigned) or negative (signed).
811*5113495bSYour Name 
812*5113495bSYour Name PARAMETERS
813*5113495bSYour Name   val           value to be incremented with saturation
814*5113495bSYour Name 
815*5113495bSYour Name DEPENDENCIES
816*5113495bSYour Name   None
817*5113495bSYour Name 
818*5113495bSYour Name RETURN VALUE
819*5113495bSYour Name   val
820*5113495bSYour Name 
821*5113495bSYour Name SIDE EFFECTS
822*5113495bSYour Name   val is updated to the new value
823*5113495bSYour Name 
824*5113495bSYour Name ===========================================================================*/
825*5113495bSYour Name 
826*5113495bSYour Name #define  INC_SAT( val )  (val = ((val)+1 > (val)) ? (val)+1 : (val))
827*5113495bSYour Name 
828*5113495bSYour Name 
829*5113495bSYour Name /*===========================================================================
830*5113495bSYour Name 
831*5113495bSYour Name MACRO ARR_SIZE
832*5113495bSYour Name 
833*5113495bSYour Name DESCRIPTION
834*5113495bSYour Name   Return the number of elements in an array.
835*5113495bSYour Name 
836*5113495bSYour Name PARAMETERS
837*5113495bSYour Name   a             array name
838*5113495bSYour Name 
839*5113495bSYour Name DEPENDENCIES
840*5113495bSYour Name   None
841*5113495bSYour Name 
842*5113495bSYour Name RETURN VALUE
843*5113495bSYour Name   Number of elements in array a
844*5113495bSYour Name 
845*5113495bSYour Name SIDE EFFECTS
846*5113495bSYour Name   None.
847*5113495bSYour Name 
848*5113495bSYour Name ===========================================================================*/
849*5113495bSYour Name 
850*5113495bSYour Name #define  ARR_SIZE( a )  ( sizeof( (a) ) / sizeof( (a[0]) ) )
851*5113495bSYour Name 
852*5113495bSYour Name /*===========================================================================
853*5113495bSYour Name                      MACRO MOD_BY_POWER_OF_TWO
854*5113495bSYour Name 
855*5113495bSYour Name      Will calculate x % y, where x is a non-negative integer and
856*5113495bSYour Name      y is a power of 2 from 2^0..2^32.
857*5113495bSYour Name 
858*5113495bSYour Name      Will work for 2^0, 2^1, 2^2, 2^3, 2^4, ... 2^32
859*5113495bSYour Name       ie.            1,   2,   4,   8,  16, ... 4294967296
860*5113495bSYour Name ===========================================================================*/
861*5113495bSYour Name 
862*5113495bSYour Name #define MOD_BY_POWER_OF_TWO( val, mod_by ) \
863*5113495bSYour Name            ( (dword)(val) & (dword)((mod_by)-1) )
864*5113495bSYour Name 
865*5113495bSYour Name /* -------------------------------------------------------------------------
866*5113495bSYour Name **                       Debug Declarations
867*5113495bSYour Name ** ------------------------------------------------------------------------- */
868*5113495bSYour Name 
869*5113495bSYour Name /* Define 'SHOW_STAT' in order to view static's as globals
870*5113495bSYour Name ** (e.g. cl /DSHOW_STAT foo.c) If 'SHOW_STAT' is not defined,
871*5113495bSYour Name ** it gets defined as 'static'
872*5113495bSYour Name */
873*5113495bSYour Name #ifdef LOCAL
874*5113495bSYour Name #undef LOCAL
875*5113495bSYour Name #endif
876*5113495bSYour Name 
877*5113495bSYour Name #ifdef SHOW_STAT
878*5113495bSYour Name   #define LOCAL
879*5113495bSYour Name #else
880*5113495bSYour Name   #define LOCAL static
881*5113495bSYour Name #endif
882*5113495bSYour Name 
883*5113495bSYour Name 
884*5113495bSYour Name /*===========================================================================
885*5113495bSYour Name 
886*5113495bSYour Name                       FUNCTION DECLARATIONS
887*5113495bSYour Name 
888*5113495bSYour Name ===========================================================================*/
889*5113495bSYour Name 
890*5113495bSYour Name 
891*5113495bSYour Name 
892*5113495bSYour Name /*===========================================================================
893*5113495bSYour Name 
894*5113495bSYour Name FUNCTION inp, outp, inpw, outpw, inpdw, outpdw
895*5113495bSYour Name 
896*5113495bSYour Name DESCRIPTION
897*5113495bSYour Name   IN/OUT port macros for byte and word ports, typically inlined by compilers
898*5113495bSYour Name   which support these routines
899*5113495bSYour Name 
900*5113495bSYour Name PARAMETERS
901*5113495bSYour Name   inp(   xx_addr )
902*5113495bSYour Name   inpw(  xx_addr )
903*5113495bSYour Name   inpdw( xx_addr )
904*5113495bSYour Name   outp(   xx_addr, xx_byte_val  )
905*5113495bSYour Name   outpw(  xx_addr, xx_word_val  )
906*5113495bSYour Name   outpdw( xx_addr, xx_dword_val )
907*5113495bSYour Name       xx_addr      - Address of port to read or write (may be memory mapped)
908*5113495bSYour Name       xx_byte_val  - 8 bit value to write
909*5113495bSYour Name       xx_word_val  - 16 bit value to write
910*5113495bSYour Name       xx_dword_val - 32 bit value to write
911*5113495bSYour Name 
912*5113495bSYour Name DEPENDENCIES
913*5113495bSYour Name   None
914*5113495bSYour Name 
915*5113495bSYour Name RETURN VALUE
916*5113495bSYour Name   inp/inpw/inpdw: the byte, word or dword read from the given address
917*5113495bSYour Name   outp/outpw/outpdw: the byte, word or dword written to the given address
918*5113495bSYour Name 
919*5113495bSYour Name SIDE EFFECTS
920*5113495bSYour Name   None.
921*5113495bSYour Name 
922*5113495bSYour Name ===========================================================================*/
923*5113495bSYour Name 
924*5113495bSYour Name #ifdef PC_EMULATOR_H
925*5113495bSYour Name 
926*5113495bSYour Name   /* For PC emulation, include a header which defines inp/outp/inpw/outpw
927*5113495bSYour Name   ** with the semantics above
928*5113495bSYour Name   */
929*5113495bSYour Name   #define PC_EMULATOR_IO
930*5113495bSYour Name   #include PC_EMULATOR_H
931*5113495bSYour Name   #undef  PC_EMULATOR_IO
932*5113495bSYour Name 
933*5113495bSYour Name #else
934*5113495bSYour Name 
935*5113495bSYour Name   /* ARM based targets use memory mapped i/o, so the inp/outp calls are
936*5113495bSYour Name   ** macroized to access memory directly
937*5113495bSYour Name   */
938*5113495bSYour Name 
939*5113495bSYour Name #ifndef CDVI_SVTB
940*5113495bSYour Name #if defined(VV_FEATURE_COMPILING_64BIT)
941*5113495bSYour Name     #define inp(port)         (*((volatile dword *)  (port)))
942*5113495bSYour Name     #define inpb(port)        (*((volatile byte *)   (port)))
943*5113495bSYour Name     #define inpw(port)        (*((volatile word *)   (port)))
944*5113495bSYour Name     #define inpdw(port)       (*((volatile dword *)  (port)))
945*5113495bSYour Name     #define inp64(port)       (*((volatile uint64 *) (port)))
946*5113495bSYour Name 
947*5113495bSYour Name     #define outp(port, val)   (*((volatile dword *)  (port)) = ((dword)  (val)))
948*5113495bSYour Name     #define outpb(port, val)  (*((volatile byte *)   (port)) = ((byte)   (val)))
949*5113495bSYour Name     #define outpw(port, val)  (*((volatile word *)   (port)) = ((word)   (val)))
950*5113495bSYour Name     #define outpdw(port, val) (*((volatile dword *)  (port)) = ((dword)  (val)))
951*5113495bSYour Name     #define outp64(port, val) (*((volatile uint64 *) (port)) = ((uint64) (val)))
952*5113495bSYour Name #else
953*5113495bSYour Name     #define inp(port)         (*((volatile byte *) (port)))
954*5113495bSYour Name     #define inpw(port)        (*((volatile word *) (port)))
955*5113495bSYour Name     #define inpdw(port)       (*((volatile dword *)(port)))
956*5113495bSYour Name 
957*5113495bSYour Name     #define outp(port, val)   (*((volatile byte *) (port)) = ((byte) (val)))
958*5113495bSYour Name     #define outpw(port, val)  (*((volatile word *) (port)) = ((word) (val)))
959*5113495bSYour Name     #define outpdw(port, val) (*((volatile dword *) (port)) = ((dword) (val)))
960*5113495bSYour Name #endif // VV_FEATURE_COMPILING_64BIT
961*5113495bSYour Name 
962*5113495bSYour Name #else  // CDVI_SVTB
963*5113495bSYour Name #ifdef CDVI_SVTB_VERBOSE
964*5113495bSYour Name   #define inp(port)         ((printf("CDVI_SVTB_VERBOSE: Calling bus_read from %s:%0d\n", __FILE__,__LINE__)&0) + bus_read(port))
965*5113495bSYour Name #else
966*5113495bSYour Name   #define inp(port)         bus_read(port)
967*5113495bSYour Name #endif
968*5113495bSYour Name   #define inpw(port)        inp(port)
969*5113495bSYour Name   #define inpdw(port)       inp(port)
970*5113495bSYour Name 
971*5113495bSYour Name #ifdef CDVI_SVTB_VERBOSE
972*5113495bSYour Name   #define outp(port, val)   ((printf("CDVI_SVTB_VERBOSE: Calling bus_write from %s:%0d\n",__FILE__,__LINE__)&0) + bus_write (port, val))
973*5113495bSYour Name #else
974*5113495bSYour Name   #define outp(port, val)   bus_write (port, val)
975*5113495bSYour Name #endif
976*5113495bSYour Name   #define outpw(port, val)  outp (port, val)
977*5113495bSYour Name   #define outpdw(port, val) outp (port, val)
978*5113495bSYour Name #endif
979*5113495bSYour Name   #define outp32  outpdw
980*5113495bSYour Name 
981*5113495bSYour Name #endif
982*5113495bSYour Name 
983*5113495bSYour Name 
984*5113495bSYour Name /*===========================================================================
985*5113495bSYour Name 
986*5113495bSYour Name FUNCTION enable, disable
987*5113495bSYour Name 
988*5113495bSYour Name DESCRIPTION
989*5113495bSYour Name   Interrupt enable and disable routines.  Enable should cause the CPU to
990*5113495bSYour Name   allow interrupts and disable should cause the CPU to disallow
991*5113495bSYour Name   interrupts
992*5113495bSYour Name 
993*5113495bSYour Name PARAMETERS
994*5113495bSYour Name   None
995*5113495bSYour Name 
996*5113495bSYour Name DEPENDENCIES
997*5113495bSYour Name   None
998*5113495bSYour Name 
999*5113495bSYour Name RETURN VALUE
1000*5113495bSYour Name   None
1001*5113495bSYour Name 
1002*5113495bSYour Name SIDE EFFECTS
1003*5113495bSYour Name   None.
1004*5113495bSYour Name 
1005*5113495bSYour Name ===========================================================================*/
1006*5113495bSYour Name 
1007*5113495bSYour Name #ifndef T_WINNT
1008*5113495bSYour Name 
1009*5113495bSYour Name   /* Common definitions */
1010*5113495bSYour Name   #define VV_ENABLE 1
1011*5113495bSYour Name   #define VV_DISABLE 0
1012*5113495bSYour Name   #define VV_REG_MASK_BIT0 0x0001
1013*5113495bSYour Name   #define VV_REG_MASK_BIT1 0x0002
1014*5113495bSYour Name   #define VV_REG_MASK_BIT2 0x0004
1015*5113495bSYour Name   #define VV_REG_MASK_BIT3 0x0008
1016*5113495bSYour Name   #define VV_REG_MASK_BIT4 0x0010
1017*5113495bSYour Name   #define VV_REG_MASK_BIT5 0x0020
1018*5113495bSYour Name   #define VV_REG_MASK_BIT6 0x0040
1019*5113495bSYour Name   #define VV_REG_MASK_BIT7 0x0080
1020*5113495bSYour Name 
1021*5113495bSYour Name   /* ARM has no such definition, so we provide one here to enable/disable
1022*5113495bSYour Name   ** interrupts
1023*5113495bSYour Name   */
1024*5113495bSYour Name   #define _disable() (void)rex_int_lock()
1025*5113495bSYour Name   #define _enable()  (void)rex_int_free()
1026*5113495bSYour Name 
1027*5113495bSYour Name #endif
1028*5113495bSYour Name 
1029*5113495bSYour Name #endif /* SWIG */
1030*5113495bSYour Name #endif
1031*5113495bSYour Name 
1032*5113495bSYour Name 
1033