1302 lines · 41.9 KB · C
RawDownload
/****************************************************************************** * * Name: actypes.h - Common data types for the entire ACPI subsystem * *****************************************************************************/ /* * Copyright (C) 2000 - 2005, R. Byron Moore * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright *    notice, this list of conditions, and the following disclaimer, *    without modification. * 2. Redistributions in binary form must reproduce at minimum a disclaimer *    substantially similar to the "NO WARRANTY" disclaimer below *    ("Disclaimer") and any redistribution must be conditioned upon *    including a substantially similar Disclaimer requirement for further *    binary redistribution. * 3. Neither the names of the above-listed copyright holders nor the names *    of any contributors may be used to endorse or promote products derived *    from this software without specific prior written permission. * * Alternatively, this software may be distributed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * * NO WARRANTY * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGES. */ #ifndef __ACTYPES_H__#define __ACTYPES_H__ /*! [Begin] no source code translation (keep the typedefs) */   /* * Data type ranges * Note: These macros are designed to be compiler independent as well as * working around problems that some 32-bit compilers have with 64-bit * constants. */#define ACPI_UINT8_MAX                  (UINT8) (~((UINT8)  0)) /* 0xFF               */#define ACPI_UINT16_MAX                 (UINT16)(~((UINT16) 0)) /* 0xFFFF             */#define ACPI_UINT32_MAX                 (UINT32)(~((UINT32) 0)) /* 0xFFFFFFFF         */#define ACPI_UINT64_MAX                 (UINT64)(~((UINT64) 0)) /* 0xFFFFFFFFFFFFFFFF */#define ACPI_ASCII_MAX                  0x7F  #ifdef DEFINE_ALTERNATE_TYPES/* * Types used only in translated source, defined here to enable * cross-platform compilation only. */typedef int                             s32;typedef unsigned char                   u8;typedef unsigned short                  u16;typedef unsigned int                    u32;typedef COMPILER_DEPENDENT_UINT64       u64; #endif  /* * Data types - Fixed across all compilation models (16/32/64) * * BOOLEAN          Logical Boolean. * INT8             8-bit  (1 byte) signed value * UINT8            8-bit  (1 byte) unsigned value * INT16            16-bit (2 byte) signed value * UINT16           16-bit (2 byte) unsigned value * INT32            32-bit (4 byte) signed value * UINT32           32-bit (4 byte) unsigned value * INT64            64-bit (8 byte) signed value * UINT64           64-bit (8 byte) unsigned value * ACPI_NATIVE_INT  32-bit on IA-32, 64-bit on IA-64 signed value * ACPI_NATIVE_UINT 32-bit on IA-32, 64-bit on IA-64 unsigned value */ #ifndef ACPI_MACHINE_WIDTH#error ACPI_MACHINE_WIDTH not defined#endif #if ACPI_MACHINE_WIDTH == 64 /*! [Begin] no source code translation (keep the typedefs) */ /* * 64-bit type definitions */typedef unsigned char                   UINT8;typedef unsigned char                   BOOLEAN;typedef unsigned short                  UINT16;typedef int                             INT32;typedef unsigned int                    UINT32;typedef COMPILER_DEPENDENT_INT64        INT64;typedef COMPILER_DEPENDENT_UINT64       UINT64; /*! [End] no source code translation !*/ typedef s64                                     acpi_native_int;typedef u64                                     acpi_native_uint; typedef u64                                     acpi_table_ptr;typedef u64                                     acpi_io_address;typedef u64                                     acpi_physical_address;typedef u64                                     acpi_size; #define ALIGNED_ADDRESS_BOUNDARY        0x00000008      /* No hardware alignment support in IA64 */#define ACPI_USE_NATIVE_DIVIDE                          /* Native 64-bit integer support */#define ACPI_MAX_PTR                    ACPI_UINT64_MAX#define ACPI_SIZE_MAX                   ACPI_UINT64_MAX  #elif ACPI_MACHINE_WIDTH == 16 /*! [Begin] no source code translation (keep the typedefs) */ /* * 16-bit type definitions */typedef unsigned char                   UINT8;typedef unsigned char                   BOOLEAN;typedef unsigned int                    UINT16;typedef long                            INT32;typedef int                             INT16;typedef unsigned long                   UINT32; struct{	UINT32                                  Lo;	UINT32                                  Hi;}; /*! [End] no source code translation !*/ typedef u16                                     acpi_native_uint;typedef s16                                     acpi_native_int; typedef u32                                     acpi_table_ptr;typedef u32                                     acpi_io_address;typedef char                                    *acpi_physical_address;typedef u16                                     acpi_size; #define ALIGNED_ADDRESS_BOUNDARY        0x00000002#define ACPI_MISALIGNED_TRANSFERS#define ACPI_USE_NATIVE_DIVIDE                          /* No 64-bit integers, ok to use native divide */#define ACPI_MAX_PTR                    ACPI_UINT16_MAX#define ACPI_SIZE_MAX                   ACPI_UINT16_MAX /* * (16-bit only) internal integers must be 32-bits, so * 64-bit integers cannot be supported */#define ACPI_NO_INTEGER64_SUPPORT  #elif ACPI_MACHINE_WIDTH == 32 /*! [Begin] no source code translation (keep the typedefs) */ /* * 32-bit type definitions (default) */typedef unsigned char                   UINT8;typedef unsigned char                   BOOLEAN;typedef unsigned short                  UINT16;typedef int                             INT32;typedef unsigned int                    UINT32;typedef COMPILER_DEPENDENT_INT64        INT64;typedef COMPILER_DEPENDENT_UINT64       UINT64; /*! [End] no source code translation !*/ typedef s32                                     acpi_native_int;typedef u32                                     acpi_native_uint; typedef u64                                     acpi_table_ptr;typedef u32                                     acpi_io_address;typedef u64                                     acpi_physical_address;typedef u32                                     acpi_size; #define ALIGNED_ADDRESS_BOUNDARY        0x00000004#define ACPI_MISALIGNED_TRANSFERS#define ACPI_MAX_PTR                    ACPI_UINT32_MAX#define ACPI_SIZE_MAX                   ACPI_UINT32_MAX #else#error unknown ACPI_MACHINE_WIDTH#endif  /* * Miscellaneous common types */typedef u16                                     UINT16_BIT;typedef u32                                     UINT32_BIT;typedef acpi_native_uint                        ACPI_PTRDIFF; /* * Pointer overlays to avoid lots of typecasting for * code that accepts both physical and logical pointers. */union acpi_pointers{	acpi_physical_address               physical;	void                                *logical;	acpi_table_ptr                      value;}; struct acpi_pointer{	u32                                 pointer_type;	union acpi_pointers                 pointer;}; /* pointer_types for above */ #define ACPI_PHYSICAL_POINTER           0x01#define ACPI_LOGICAL_POINTER            0x02 /* Processor mode */ #define ACPI_PHYSICAL_ADDRESSING        0x04#define ACPI_LOGICAL_ADDRESSING         0x08#define ACPI_MEMORY_MODE                0x0C #define ACPI_PHYSMODE_PHYSPTR           ACPI_PHYSICAL_ADDRESSING | ACPI_PHYSICAL_POINTER#define ACPI_LOGMODE_PHYSPTR            ACPI_LOGICAL_ADDRESSING  | ACPI_PHYSICAL_POINTER#define ACPI_LOGMODE_LOGPTR             ACPI_LOGICAL_ADDRESSING  | ACPI_LOGICAL_POINTER  /* * Useful defines */#ifdef FALSE#undef FALSE#endif#define FALSE                           (1 == 0) #ifdef TRUE#undef TRUE#endif#define TRUE                            (1 == 1) #ifndef NULL#define NULL                            (void *) 0#endif  /* * Local datatypes */typedef u32                                     acpi_status;    /* All ACPI Exceptions */typedef u32                                     acpi_name;      /* 4-byte ACPI name */typedef char *                                  acpi_string;    /* Null terminated ASCII string */typedef void *                                  acpi_handle;    /* Actually a ptr to an Node */ struct uint64_struct{	u32                                 lo;	u32                                 hi;}; union uint64_overlay{	u64                                 full;	struct uint64_struct                part;}; struct uint32_struct{	u32                                 lo;	u32                                 hi;};  /* * Acpi integer width. In ACPI version 1, integers are * 32 bits.  In ACPI version 2, integers are 64 bits. * Note that this pertains to the ACPI integer type only, not * other integers used in the implementation of the ACPI CA * subsystem. */#ifdef ACPI_NO_INTEGER64_SUPPORT /* 32-bit integers only, no 64-bit support */ typedef u32                                     acpi_integer;#define ACPI_INTEGER_MAX                ACPI_UINT32_MAX#define ACPI_INTEGER_BIT_SIZE           32#define ACPI_MAX_DECIMAL_DIGITS         10  /* 2^32 = 4,294,967,296 */ #define ACPI_USE_NATIVE_DIVIDE          /* Use compiler native 32-bit divide */  #else /* 64-bit integers */ typedef u64                                     acpi_integer;#define ACPI_INTEGER_MAX                ACPI_UINT64_MAX#define ACPI_INTEGER_BIT_SIZE           64#define ACPI_MAX_DECIMAL_DIGITS         20  /* 2^64 = 18,446,744,073,709,551,616 */  #if ACPI_MACHINE_WIDTH == 64#define ACPI_USE_NATIVE_DIVIDE          /* Use compiler native 64-bit divide */#endif#endif #define ACPI_MAX64_DECIMAL_DIGITS       20#define ACPI_MAX32_DECIMAL_DIGITS       10#define ACPI_MAX16_DECIMAL_DIGITS        5#define ACPI_MAX8_DECIMAL_DIGITS         3 /* * Constants with special meanings */#define ACPI_ROOT_OBJECT                (acpi_handle) ACPI_PTR_ADD (char, NULL, ACPI_MAX_PTR)  /* * Initialization sequence */#define ACPI_FULL_INITIALIZATION        0x00#define ACPI_NO_ADDRESS_SPACE_INIT      0x01#define ACPI_NO_HARDWARE_INIT           0x02#define ACPI_NO_EVENT_INIT              0x04#define ACPI_NO_HANDLER_INIT            0x08#define ACPI_NO_ACPI_ENABLE             0x10#define ACPI_NO_DEVICE_INIT             0x20#define ACPI_NO_OBJECT_INIT             0x40 /* * Initialization state */#define ACPI_INITIALIZED_OK             0x01 /* * Power state values */#define ACPI_STATE_UNKNOWN              (u8) 0xFF #define ACPI_STATE_S0                   (u8) 0#define ACPI_STATE_S1                   (u8) 1#define ACPI_STATE_S2                   (u8) 2#define ACPI_STATE_S3                   (u8) 3#define ACPI_STATE_S4                   (u8) 4#define ACPI_STATE_S5                   (u8) 5#define ACPI_S_STATES_MAX               ACPI_STATE_S5#define ACPI_S_STATE_COUNT              6 #define ACPI_STATE_D0                   (u8) 0#define ACPI_STATE_D1                   (u8) 1#define ACPI_STATE_D2                   (u8) 2#define ACPI_STATE_D3                   (u8) 3#define ACPI_D_STATES_MAX               ACPI_STATE_D3#define ACPI_D_STATE_COUNT              4 #define ACPI_STATE_C0                   (u8) 0#define ACPI_STATE_C1                   (u8) 1#define ACPI_STATE_C2                   (u8) 2#define ACPI_STATE_C3                   (u8) 3#define ACPI_C_STATES_MAX               ACPI_STATE_C3#define ACPI_C_STATE_COUNT              4 /* * Sleep type invalid value */#define ACPI_SLEEP_TYPE_MAX             0x7#define ACPI_SLEEP_TYPE_INVALID         0xFF /* * Standard notify values */#define ACPI_NOTIFY_BUS_CHECK           (u8) 0#define ACPI_NOTIFY_DEVICE_CHECK        (u8) 1#define ACPI_NOTIFY_DEVICE_WAKE         (u8) 2#define ACPI_NOTIFY_EJECT_REQUEST       (u8) 3#define ACPI_NOTIFY_DEVICE_CHECK_LIGHT  (u8) 4#define ACPI_NOTIFY_FREQUENCY_MISMATCH  (u8) 5#define ACPI_NOTIFY_BUS_MODE_MISMATCH   (u8) 6#define ACPI_NOTIFY_POWER_FAULT         (u8) 7 /* *  Table types.  These values are passed to the table related APIs */typedef u32                                     acpi_table_type; #define ACPI_TABLE_RSDP                 (acpi_table_type) 0#define ACPI_TABLE_DSDT                 (acpi_table_type) 1#define ACPI_TABLE_FADT                 (acpi_table_type) 2#define ACPI_TABLE_FACS                 (acpi_table_type) 3#define ACPI_TABLE_PSDT                 (acpi_table_type) 4#define ACPI_TABLE_SSDT                 (acpi_table_type) 5#define ACPI_TABLE_XSDT                 (acpi_table_type) 6#define ACPI_TABLE_MAX                  6#define NUM_ACPI_TABLE_TYPES            (ACPI_TABLE_MAX+1) /* * Types associated with ACPI names and objects.  The first group of * values (up to ACPI_TYPE_EXTERNAL_MAX) correspond to the definition * of the ACPI object_type() operator (See the ACPI Spec). Therefore, * only add to the first group if the spec changes. * * NOTE: Types must be kept in sync with the global acpi_ns_properties * and acpi_ns_type_names arrays. */typedef u32                                     acpi_object_type; #define ACPI_TYPE_ANY                   0x00#define ACPI_TYPE_INTEGER               0x01  /* Byte/Word/Dword/Zero/One/Ones */#define ACPI_TYPE_STRING                0x02#define ACPI_TYPE_BUFFER                0x03#define ACPI_TYPE_PACKAGE               0x04  /* byte_const, multiple data_term/Constant/super_name */#define ACPI_TYPE_FIELD_UNIT            0x05#define ACPI_TYPE_DEVICE                0x06  /* Name, multiple Node */#define ACPI_TYPE_EVENT                 0x07#define ACPI_TYPE_METHOD                0x08  /* Name, byte_const, multiple Code */#define ACPI_TYPE_MUTEX                 0x09#define ACPI_TYPE_REGION                0x0A#define ACPI_TYPE_POWER                 0x0B  /* Name,byte_const,word_const,multi Node */#define ACPI_TYPE_PROCESSOR             0x0C  /* Name,byte_const,Dword_const,byte_const,multi nm_o */#define ACPI_TYPE_THERMAL               0x0D  /* Name, multiple Node */#define ACPI_TYPE_BUFFER_FIELD          0x0E#define ACPI_TYPE_DDB_HANDLE            0x0F#define ACPI_TYPE_DEBUG_OBJECT          0x10 #define ACPI_TYPE_EXTERNAL_MAX          0x10 /* * These are object types that do not map directly to the ACPI * object_type() operator. They are used for various internal purposes only. * If new predefined ACPI_TYPEs are added (via the ACPI specification), these * internal types must move upwards. (There is code that depends on these * values being contiguous with the external types above.) */#define ACPI_TYPE_LOCAL_REGION_FIELD    0x11#define ACPI_TYPE_LOCAL_BANK_FIELD      0x12#define ACPI_TYPE_LOCAL_INDEX_FIELD     0x13#define ACPI_TYPE_LOCAL_REFERENCE       0x14  /* Arg#, Local#, Name, Debug, ref_of, Index */#define ACPI_TYPE_LOCAL_ALIAS           0x15#define ACPI_TYPE_LOCAL_METHOD_ALIAS    0x16#define ACPI_TYPE_LOCAL_NOTIFY          0x17#define ACPI_TYPE_LOCAL_ADDRESS_HANDLER 0x18#define ACPI_TYPE_LOCAL_RESOURCE        0x19#define ACPI_TYPE_LOCAL_RESOURCE_FIELD  0x1A#define ACPI_TYPE_LOCAL_SCOPE           0x1B  /* 1 Name, multiple object_list Nodes */ #define ACPI_TYPE_NS_NODE_MAX           0x1B  /* Last typecode used within a NS Node */ /* * These are special object types that never appear in * a Namespace node, only in an union acpi_operand_object */#define ACPI_TYPE_LOCAL_EXTRA           0x1C#define ACPI_TYPE_LOCAL_DATA            0x1D #define ACPI_TYPE_LOCAL_MAX             0x1D /* All types above here are invalid */ #define ACPI_TYPE_INVALID               0x1E#define ACPI_TYPE_NOT_FOUND             0xFF /* * Bitmapped ACPI types.  Used internally only */#define ACPI_BTYPE_ANY                  0x00000000#define ACPI_BTYPE_INTEGER              0x00000001#define ACPI_BTYPE_STRING               0x00000002#define ACPI_BTYPE_BUFFER               0x00000004#define ACPI_BTYPE_PACKAGE              0x00000008#define ACPI_BTYPE_FIELD_UNIT           0x00000010#define ACPI_BTYPE_DEVICE               0x00000020#define ACPI_BTYPE_EVENT                0x00000040#define ACPI_BTYPE_METHOD               0x00000080#define ACPI_BTYPE_MUTEX                0x00000100#define ACPI_BTYPE_REGION               0x00000200#define ACPI_BTYPE_POWER                0x00000400#define ACPI_BTYPE_PROCESSOR            0x00000800#define ACPI_BTYPE_THERMAL              0x00001000#define ACPI_BTYPE_BUFFER_FIELD         0x00002000#define ACPI_BTYPE_DDB_HANDLE           0x00004000#define ACPI_BTYPE_DEBUG_OBJECT         0x00008000

Lines 1–500 of 1302.