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