actypes.h revision 192384
146283Sdfr/******************************************************************************
2130803Smarcel *
398944Sobrien * Name: actypes.h - Common data types for the entire ACPI subsystem
446283Sdfr *       $Revision: 1.316 $
598944Sobrien *
646283Sdfr *****************************************************************************/
798944Sobrien
898944Sobrien/******************************************************************************
998944Sobrien *
1098944Sobrien * 1. Copyright Notice
1146283Sdfr *
1298944Sobrien * Some or all of this work - Copyright (c) 1999 - 2007, Intel Corp.
1398944Sobrien * All rights reserved.
1498944Sobrien *
1598944Sobrien * 2. License
1646283Sdfr *
1798944Sobrien * 2.1. This is your license from Intel Corp. under its intellectual property
1898944Sobrien * rights.  You may have additional license terms from the party that provided
1998944Sobrien * you this software, covering your right to use that party's intellectual
2098944Sobrien * property rights.
2146283Sdfr *
2246283Sdfr * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a
2346283Sdfr * copy of the source code appearing in this file ("Covered Code") an
2446283Sdfr * irrevocable, perpetual, worldwide license under Intel's copyrights in the
2546283Sdfr * base code distributed originally by Intel ("Original Intel Code") to copy,
2646283Sdfr * make derivatives, distribute, use and display any portion of the Covered
2746283Sdfr * Code in any form, with the right to sublicense such rights; and
2846283Sdfr *
2946283Sdfr * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent
3046283Sdfr * license (with the right to sublicense), under only those claims of Intel
3146283Sdfr * patents that are infringed by the Original Intel Code, to make, use, sell,
3246283Sdfr * offer to sell, and import the Covered Code and derivative works thereof
3346283Sdfr * solely to the minimum extent necessary to exercise the above copyright
3446283Sdfr * license, and in no event shall the patent license extend to any additions
3546283Sdfr * to or modifications of the Original Intel Code.  No other license or right
3646283Sdfr * is granted directly or by implication, estoppel or otherwise;
3746283Sdfr *
3846283Sdfr * The above copyright and patent license is granted only if the following
3946283Sdfr * conditions are met:
4046283Sdfr *
4146283Sdfr * 3. Conditions
4246283Sdfr *
4346283Sdfr * 3.1. Redistribution of Source with Rights to Further Distribute Source.
4446283Sdfr * Redistribution of source code of any substantial portion of the Covered
4546283Sdfr * Code or modification with rights to further distribute source must include
4646283Sdfr * the above Copyright Notice, the above License, this list of Conditions,
4746283Sdfr * and the following Disclaimer and Export Compliance provision.  In addition,
4846283Sdfr * Licensee must cause all Covered Code to which Licensee contributes to
4946283Sdfr * contain a file documenting the changes Licensee made to create that Covered
5046283Sdfr * Code and the date of any change.  Licensee must include in that file the
5146283Sdfr * documentation of any changes made by any predecessor Licensee.  Licensee
5246283Sdfr * must include a prominent statement that the modification is derived,
5346283Sdfr * directly or indirectly, from Original Intel Code.
5446283Sdfr *
5546283Sdfr * 3.2. Redistribution of Source with no Rights to Further Distribute Source.
5646283Sdfr * Redistribution of source code of any substantial portion of the Covered
5746283Sdfr * Code or modification without rights to further distribute source must
58130803Smarcel * include the following Disclaimer and Export Compliance provision in the
5946283Sdfr * documentation and/or other materials provided with distribution.  In
6046283Sdfr * addition, Licensee may not authorize further sublicense of source of any
6198944Sobrien * portion of the Covered Code, and must include terms to the effect that the
6298944Sobrien * license from Licensee to its licensee is limited to the intellectual
6398944Sobrien * property embodied in the software Licensee provides to its licensee, and
6446283Sdfr * not to intellectual property embodied in modifications its licensee may
65130803Smarcel * make.
66130803Smarcel *
6798944Sobrien * 3.3. Redistribution of Executable. Redistribution in executable form of any
6898944Sobrien * substantial portion of the Covered Code or modification must reproduce the
6946283Sdfr * above Copyright Notice, and the following Disclaimer and Export Compliance
7046283Sdfr * provision in the documentation and/or other materials provided with the
7146283Sdfr * distribution.
7246283Sdfr *
7346283Sdfr * 3.4. Intel retains all right, title, and interest in and to the Original
7446283Sdfr * Intel Code.
7546283Sdfr *
7646283Sdfr * 3.5. Neither the name Intel nor any other trademark owned or controlled by
7798944Sobrien * Intel shall be used in advertising or otherwise to promote the sale, use or
7898944Sobrien * other dealings in products derived from or relating to the Covered Code
7998944Sobrien * without prior written authorization from Intel.
8046283Sdfr *
8198944Sobrien * 4. Disclaimer and Export Compliance
8298944Sobrien *
8346283Sdfr * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED
8446283Sdfr * HERE.  ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE
8546283Sdfr * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT,  ASSISTANCE,
8646283Sdfr * INSTALLATION, TRAINING OR OTHER SERVICES.  INTEL WILL NOT PROVIDE ANY
8746283Sdfr * UPDATES, ENHANCEMENTS OR EXTENSIONS.  INTEL SPECIFICALLY DISCLAIMS ANY
8846283Sdfr * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A
8998944Sobrien * PARTICULAR PURPOSE.
9098944Sobrien *
9198944Sobrien * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES
9246283Sdfr * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR
9346283Sdfr * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT,
9498944Sobrien * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY
9598944Sobrien * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL
9698944Sobrien * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.  THESE LIMITATIONS
9798944Sobrien * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY
9846283Sdfr * LIMITED REMEDY.
9946283Sdfr *
10046283Sdfr * 4.3. Licensee shall not export, either directly or indirectly, any of this
10146283Sdfr * software or system incorporating such software without first obtaining any
10246283Sdfr * required license or other approval from the U. S. Department of Commerce or
10398944Sobrien * any other agency or department of the United States Government.  In the
10498944Sobrien * event Licensee exports any such software from the United States or
10598944Sobrien * re-exports any such software from a foreign destination, Licensee shall
10698944Sobrien * ensure that the distribution and export/re-export of the software is in
10798944Sobrien * compliance with all laws, regulations, orders, or other restrictions of the
10898944Sobrien * U.S. Export Administration Regulations. Licensee agrees that neither it nor
10998944Sobrien * any of its subsidiaries will export/re-export any technical data, process,
11046283Sdfr * software, or service, directly or indirectly, to any country for which the
11198944Sobrien * United States government or any agency thereof requires an export license,
11298944Sobrien * other governmental approval, or letter of assurance, without first obtaining
11346283Sdfr * such license, approval or letter.
114130803Smarcel *
11598944Sobrien *****************************************************************************/
11646283Sdfr
11798944Sobrien#ifndef __ACTYPES_H__
11898944Sobrien#define __ACTYPES_H__
11998944Sobrien
12098944Sobrien/* acpisrc:StructDefs -- for acpisrc conversion */
12198944Sobrien
12298944Sobrien/*
12398944Sobrien * ACPI_MACHINE_WIDTH must be specified in an OS- or compiler-dependent header
12498944Sobrien * and must be either 32 or 64. 16-bit ACPICA is no longer supported, as of
12598944Sobrien * 12/2006.
12698944Sobrien */
12746283Sdfr#ifndef ACPI_MACHINE_WIDTH
12846283Sdfr#error ACPI_MACHINE_WIDTH not defined
12998944Sobrien#endif
130130803Smarcel
13198944Sobrien/*! [Begin] no source code translation */
13298944Sobrien
13398944Sobrien/*
134130803Smarcel * Data type ranges
13598944Sobrien * Note: These macros are designed to be compiler independent as well as
136130803Smarcel * working around problems that some 32-bit compilers have with 64-bit
13798944Sobrien * constants.
138130803Smarcel */
139130803Smarcel#define ACPI_UINT8_MAX                  (UINT8) (~((UINT8)  0)) /* 0xFF               */
14098944Sobrien#define ACPI_UINT16_MAX                 (UINT16)(~((UINT16) 0)) /* 0xFFFF             */
141130803Smarcel#define ACPI_UINT32_MAX                 (UINT32)(~((UINT32) 0)) /* 0xFFFFFFFF         */
142130803Smarcel#define ACPI_UINT64_MAX                 (UINT64)(~((UINT64) 0)) /* 0xFFFFFFFFFFFFFFFF */
143130803Smarcel#define ACPI_ASCII_MAX                  0x7F
14498944Sobrien
145130803Smarcel
146130803Smarcel/*
14798944Sobrien * Architecture-specific ACPICA Subsystem Data Types
14898944Sobrien *
149130803Smarcel * The goal of these types is to provide source code portability across
150130803Smarcel * 16-bit, 32-bit, and 64-bit targets.
15198944Sobrien *
152130803Smarcel * 1) The following types are of fixed size for all targets (16/32/64):
15398944Sobrien *
154130803Smarcel * BOOLEAN      Logical boolean
15598944Sobrien *
156130803Smarcel * UINT8        8-bit  (1 byte) unsigned value
15798944Sobrien * UINT16       16-bit (2 byte) unsigned value
158130803Smarcel * UINT32       32-bit (4 byte) unsigned value
15998944Sobrien * UINT64       64-bit (8 byte) unsigned value
160130803Smarcel *
16198944Sobrien * INT16        16-bit (2 byte) signed value
162130803Smarcel * INT32        32-bit (4 byte) signed value
16398944Sobrien * INT64        64-bit (8 byte) signed value
164130803Smarcel *
165130803Smarcel * COMPILER_DEPENDENT_UINT64/INT64 - These types are defined in the
16698944Sobrien * compiler-dependent header(s) and were introduced because there is no common
167130803Smarcel * 64-bit integer type across the various compilation models, as shown in
16898944Sobrien * the table below.
169130803Smarcel *
17098944Sobrien * Datatype  LP64 ILP64 LLP64 ILP32 LP32 16bit
171130803Smarcel * char      8    8     8     8     8    8
172130803Smarcel * short     16   16    16    16    16   16
17398944Sobrien * _int32         32
174130803Smarcel * int       32   64    32    32    16   16
175130803Smarcel * long      64   64    32    32    32   32
17698944Sobrien * long long            64    64
177130803Smarcel * pointer   64   64    64    32    32   32
17898944Sobrien *
179130803Smarcel * Note: ILP64 and LP32 are currently not supported.
18098944Sobrien *
18198944Sobrien *
18246283Sdfr * 2) These types represent the native word size of the target mode of the
18346283Sdfr * processor, and may be 16-bit, 32-bit, or 64-bit as required. They are
18498944Sobrien * usually used for memory allocation, efficient loop counters, and array
18546283Sdfr * indexes. The types are similar to the size_t type in the C library and are
18698944Sobrien * required because there is no C type that consistently represents the native
18746283Sdfr * data width.
18898944Sobrien *
18946283Sdfr * ACPI_SIZE        16/32/64-bit unsigned value
19098944Sobrien * ACPI_NATIVE_UINT 16/32/64-bit unsigned value
19146283Sdfr * ACPI_NATIVE_INT  16/32/64-bit signed value
19298944Sobrien *
19346283Sdfr */
19498944Sobrien
19598944Sobrien/*******************************************************************************
19646283Sdfr *
19746283Sdfr * Common types for all compilers, all targets
19846283Sdfr *
19946283Sdfr ******************************************************************************/
20098944Sobrien
20146283Sdfrtypedef unsigned char                   BOOLEAN;
20246283Sdfrtypedef unsigned char                   UINT8;
20398944Sobrientypedef unsigned short                  UINT16;
20498944Sobrientypedef COMPILER_DEPENDENT_UINT64       UINT64;
20598944Sobrientypedef COMPILER_DEPENDENT_INT64        INT64;
20698944Sobrien
20798944Sobrien/*! [End] no source code translation !*/
20898944Sobrien
20998944Sobrien
21098944Sobrien/*******************************************************************************
21198944Sobrien *
21298944Sobrien * Types specific to 64-bit targets
21398944Sobrien *
21498944Sobrien ******************************************************************************/
21598944Sobrien
21698944Sobrien#if ACPI_MACHINE_WIDTH == 64
21798944Sobrien
21898944Sobrien/*! [Begin] no source code translation (keep the typedefs as-is) */
21998944Sobrien
22098944Sobrientypedef unsigned int                    UINT32;
22198944Sobrientypedef int                             INT32;
22298944Sobrien
22398944Sobrien/*! [End] no source code translation !*/
22498944Sobrien
22598944Sobrien
22698944Sobrientypedef UINT64                          ACPI_NATIVE_UINT;
22746283Sdfrtypedef INT64                           ACPI_NATIVE_INT;
22846283Sdfr
22946283Sdfrtypedef UINT64                          ACPI_IO_ADDRESS;
23046283Sdfrtypedef UINT64                          ACPI_PHYSICAL_ADDRESS;
23146283Sdfr
23246283Sdfr#define ACPI_MAX_PTR                    ACPI_UINT64_MAX
23346283Sdfr#define ACPI_SIZE_MAX                   ACPI_UINT64_MAX
23498944Sobrien
23546283Sdfr#define ACPI_USE_NATIVE_DIVIDE          /* Has native 64-bit integer support */
23646283Sdfr
23746283Sdfr/*
23846283Sdfr * In the case of the Itanium Processor Family (IPF), the hardware does not
23946283Sdfr * support misaligned memory transfers. Set the MISALIGNMENT_NOT_SUPPORTED flag
24046283Sdfr * to indicate that special precautions must be taken to avoid alignment faults.
24146283Sdfr * (IA64 or ia64 is currently used by existing compilers to indicate IPF.)
24298944Sobrien *
24346283Sdfr * Note: EM64T and other X86-64 processors support misaligned transfers,
24498944Sobrien * so there is no need to define this flag.
24546283Sdfr */
24698944Sobrien#if defined (__IA64__) || defined (__ia64__)
24746283Sdfr#define ACPI_MISALIGNMENT_NOT_SUPPORTED
24898944Sobrien#endif
24946283Sdfr
25098944Sobrien
25146283Sdfr/*******************************************************************************
25298944Sobrien *
25398944Sobrien * Types specific to 32-bit targets
25446283Sdfr *
25546283Sdfr ******************************************************************************/
25646283Sdfr
25746283Sdfr#elif ACPI_MACHINE_WIDTH == 32
25898944Sobrien
25946283Sdfr/*! [Begin] no source code translation (keep the typedefs as-is) */
26046283Sdfr
26198944Sobrientypedef unsigned int                    UINT32;
26298944Sobrientypedef int                             INT32;
26398944Sobrien
26498944Sobrien/*! [End] no source code translation !*/
26598944Sobrien
26698944Sobrien
26798944Sobrientypedef UINT32                          ACPI_NATIVE_UINT;
26898944Sobrientypedef INT32                           ACPI_NATIVE_INT;
26998944Sobrien
27098944Sobrientypedef UINT32                          ACPI_IO_ADDRESS;
27198944Sobrientypedef UINT32                          ACPI_PHYSICAL_ADDRESS;
27246283Sdfr
27346283Sdfr#define ACPI_MAX_PTR                    ACPI_UINT32_MAX
27446283Sdfr#define ACPI_SIZE_MAX                   ACPI_UINT32_MAX
27546283Sdfr
27646283Sdfr#else
27746283Sdfr
27846283Sdfr/* ACPI_MACHINE_WIDTH must be either 64 or 32 */
27998944Sobrien
28046283Sdfr#error unknown ACPI_MACHINE_WIDTH
28146283Sdfr#endif
28246283Sdfr
28346283Sdfr
28446283Sdfr/* Variable-width type, used instead of clib size_t */
28546283Sdfr
28646283Sdfrtypedef ACPI_NATIVE_UINT                ACPI_SIZE;
28798944Sobrien
28846283Sdfr
28998944Sobrien/*******************************************************************************
29046283Sdfr *
29198944Sobrien * OS-dependent and compiler-dependent types
29246283Sdfr *
29398944Sobrien * If the defaults below are not appropriate for the host system, they can
29446283Sdfr * be defined in the compiler-specific or OS-specific header, and this will
29598944Sobrien * take precedence.
29646283Sdfr *
29798944Sobrien ******************************************************************************/
29898944Sobrien
29998944Sobrien
30046283Sdfr/* Value returned by AcpiOsGetThreadId */
30198944Sobrien
30246283Sdfr#ifndef ACPI_THREAD_ID
30398944Sobrien#define ACPI_THREAD_ID                  ACPI_NATIVE_UINT
30446283Sdfr#endif
30546283Sdfr
30646283Sdfr/* Object returned from AcpiOsCreateLock */
30798944Sobrien
30898944Sobrien#ifndef ACPI_SPINLOCK
30946283Sdfr#define ACPI_SPINLOCK                   void *
31046283Sdfr#endif
31146283Sdfr
31246283Sdfr/* Flags for AcpiOsAcquireLock/AcpiOsReleaseLock */
31346283Sdfr
31446283Sdfr#ifndef ACPI_CPU_FLAGS
31598944Sobrien#define ACPI_CPU_FLAGS                  ACPI_NATIVE_UINT
31646283Sdfr#endif
31746283Sdfr
31846283Sdfr/* Object returned from AcpiOsCreateCache */
31946283Sdfr
32046283Sdfr#ifndef ACPI_CACHE_T
32198944Sobrien#define ACPI_CACHE_T                    ACPI_MEMORY_LIST
32246283Sdfr#endif
32346283Sdfr
32446283Sdfr/* Use C99 uintptr_t for pointer casting if available, "void *" otherwise */
32546283Sdfr
32646283Sdfr#ifndef ACPI_UINTPTR_T
32798944Sobrien#define ACPI_UINTPTR_T                  void *
32846283Sdfr#endif
32946283Sdfr
33046283Sdfr/*
33146283Sdfr * ACPI_PRINTF_LIKE is used to tag functions as "printf-like" because
33246283Sdfr * some compilers can catch printf format string problems
33346283Sdfr */
33498944Sobrien#ifndef ACPI_PRINTF_LIKE
33546283Sdfr#define ACPI_PRINTF_LIKE(c)
33646283Sdfr#endif
33746283Sdfr
33846283Sdfr/*
33946283Sdfr * Some compilers complain about unused variables. Sometimes we don't want to
34046283Sdfr * use all the variables (for example, _AcpiModuleName). This allows us
34146283Sdfr * to to tell the compiler in a per-variable manner that a variable
34246283Sdfr * is unused
34346283Sdfr */
34498944Sobrien#ifndef ACPI_UNUSED_VAR
34546283Sdfr#define ACPI_UNUSED_VAR
34698944Sobrien#endif
34746283Sdfr
34898944Sobrien/*
34946283Sdfr * All ACPICA functions that are available to the rest of the kernel are
35098944Sobrien * tagged with this macro which can be defined as appropriate for the host.
35146283Sdfr */
35298944Sobrien#ifndef ACPI_EXPORT_SYMBOL
35346283Sdfr#define ACPI_EXPORT_SYMBOL(Symbol)
35498944Sobrien#endif
35598944Sobrien
35646283Sdfr
35798944Sobrien/*******************************************************************************
35846283Sdfr *
35998944Sobrien * Independent types
36046283Sdfr *
36146283Sdfr ******************************************************************************/
36246283Sdfr
36398944Sobrien/* Logical defines and NULL */
36498944Sobrien
36546283Sdfr#ifdef FALSE
36646283Sdfr#undef FALSE
36746283Sdfr#endif
36846283Sdfr#define FALSE                           (1 == 0)
36946283Sdfr
37046283Sdfr#ifdef TRUE
37146283Sdfr#undef TRUE
37246283Sdfr#endif
37346283Sdfr#define TRUE                            (1 == 1)
37446283Sdfr
37546283Sdfr#ifndef NULL
37698944Sobrien#define NULL                            (void *) 0
37746283Sdfr#endif
37846283Sdfr
37946283Sdfr
38098944Sobrien/*
38146283Sdfr * Mescellaneous types
38246283Sdfr */
38346283Sdfrtypedef UINT32                          ACPI_STATUS;    /* All ACPI Exceptions */
38446283Sdfrtypedef UINT32                          ACPI_NAME;      /* 4-byte ACPI name */
38546283Sdfrtypedef char *                          ACPI_STRING;    /* Null terminated ASCII string */
38698944Sobrientypedef void *                          ACPI_HANDLE;    /* Actually a ptr to a NS Node */
38798944Sobrien
38846283Sdfrtypedef struct uint64_struct
38946283Sdfr{
39046283Sdfr    UINT32                          Lo;
39146283Sdfr    UINT32                          Hi;
39246283Sdfr
39398944Sobrien} UINT64_STRUCT;
39446283Sdfr
39546283Sdfrtypedef union uint64_overlay
39646283Sdfr{
39746283Sdfr    UINT64                          Full;
39846283Sdfr    UINT64_STRUCT                   Part;
39946283Sdfr
40046283Sdfr} UINT64_OVERLAY;
40146283Sdfr
40246283Sdfrtypedef struct uint32_struct
40346283Sdfr{
40446283Sdfr    UINT32                          Lo;
40598944Sobrien    UINT32                          Hi;
40646283Sdfr
40746283Sdfr} UINT32_STRUCT;
40846283Sdfr
40946283Sdfr
41046283Sdfr/* Synchronization objects */
41146283Sdfr
41246283Sdfr#define ACPI_MUTEX                      void *
41346283Sdfr#define ACPI_SEMAPHORE                  void *
41498944Sobrien
41546283Sdfr
41646283Sdfr/*
41798944Sobrien * Acpi integer width. In ACPI version 1, integers are 32 bits.  In ACPI
41846283Sdfr * version 2, integers are 64 bits. Note that this pertains to the ACPI integer
41998944Sobrien * type only, not other integers used in the implementation of the ACPI CA
42098944Sobrien * subsystem.
42146283Sdfr */
42246283Sdfrtypedef UINT64                          ACPI_INTEGER;
42346283Sdfr#define ACPI_INTEGER_MAX                ACPI_UINT64_MAX
42498944Sobrien#define ACPI_INTEGER_BIT_SIZE           64
42546283Sdfr#define ACPI_MAX_DECIMAL_DIGITS         20  /* 2^64 = 18,446,744,073,709,551,616 */
42698944Sobrien
42798944Sobrien
42898944Sobrien#if ACPI_MACHINE_WIDTH == 64
42946283Sdfr#define ACPI_USE_NATIVE_DIVIDE          /* Use compiler native 64-bit divide */
43098944Sobrien#endif
43146283Sdfr
43246283Sdfr#define ACPI_MAX64_DECIMAL_DIGITS       20
43346283Sdfr#define ACPI_MAX32_DECIMAL_DIGITS       10
43446283Sdfr#define ACPI_MAX16_DECIMAL_DIGITS        5
43546283Sdfr#define ACPI_MAX8_DECIMAL_DIGITS         3
43646283Sdfr
43746283Sdfr/*
43846283Sdfr * Constants with special meanings
43946283Sdfr */
44046283Sdfr#define ACPI_ROOT_OBJECT                ACPI_ADD_PTR (ACPI_HANDLE, NULL, ACPI_MAX_PTR)
44146283Sdfr
44246283Sdfr
44346283Sdfr/*
44498944Sobrien * Initialization sequence
44546283Sdfr */
44698944Sobrien#define ACPI_FULL_INITIALIZATION        0x00
44746283Sdfr#define ACPI_NO_ADDRESS_SPACE_INIT      0x01
44846283Sdfr#define ACPI_NO_HARDWARE_INIT           0x02
44946283Sdfr#define ACPI_NO_EVENT_INIT              0x04
45046283Sdfr#define ACPI_NO_HANDLER_INIT            0x08
45146283Sdfr#define ACPI_NO_ACPI_ENABLE             0x10
45246283Sdfr#define ACPI_NO_DEVICE_INIT             0x20
45346283Sdfr#define ACPI_NO_OBJECT_INIT             0x40
45446283Sdfr
45546283Sdfr/*
45646283Sdfr * Initialization state
45798944Sobrien */
45846283Sdfr#define ACPI_SUBSYSTEM_INITIALIZE       0x01
45946283Sdfr#define ACPI_INITIALIZED_OK             0x02
46046283Sdfr
46198944Sobrien/*
46246283Sdfr * Power state values
46398944Sobrien */
46498944Sobrien#define ACPI_STATE_UNKNOWN              (UINT8) 0xFF
46598944Sobrien
46646283Sdfr#define ACPI_STATE_S0                   (UINT8) 0
46798944Sobrien#define ACPI_STATE_S1                   (UINT8) 1
46846283Sdfr#define ACPI_STATE_S2                   (UINT8) 2
46998944Sobrien#define ACPI_STATE_S3                   (UINT8) 3
47046283Sdfr#define ACPI_STATE_S4                   (UINT8) 4
47198944Sobrien#define ACPI_STATE_S5                   (UINT8) 5
47298944Sobrien#define ACPI_S_STATES_MAX               ACPI_STATE_S5
47346283Sdfr#define ACPI_S_STATE_COUNT              6
47498944Sobrien
47598944Sobrien#define ACPI_STATE_D0                   (UINT8) 0
47698944Sobrien#define ACPI_STATE_D1                   (UINT8) 1
47746283Sdfr#define ACPI_STATE_D2                   (UINT8) 2
47846283Sdfr#define ACPI_STATE_D3                   (UINT8) 3
47998944Sobrien#define ACPI_D_STATES_MAX               ACPI_STATE_D3
48046283Sdfr#define ACPI_D_STATE_COUNT              4
48146283Sdfr
48246283Sdfr#define ACPI_STATE_C0                   (UINT8) 0
48346283Sdfr#define ACPI_STATE_C1                   (UINT8) 1
48446283Sdfr#define ACPI_STATE_C2                   (UINT8) 2
48546283Sdfr#define ACPI_STATE_C3                   (UINT8) 3
48646283Sdfr#define ACPI_C_STATES_MAX               ACPI_STATE_C3
48798944Sobrien#define ACPI_C_STATE_COUNT              4
48898944Sobrien
48946283Sdfr/*
49098944Sobrien * Sleep type invalid value
49198944Sobrien */
49246283Sdfr#define ACPI_SLEEP_TYPE_MAX             0x7
49346283Sdfr#define ACPI_SLEEP_TYPE_INVALID         0xFF
49498944Sobrien
49598944Sobrien/*
49646283Sdfr * Standard notify values
49798944Sobrien */
49898944Sobrien#define ACPI_NOTIFY_BUS_CHECK           (UINT8) 0
49998944Sobrien#define ACPI_NOTIFY_DEVICE_CHECK        (UINT8) 1
50046283Sdfr#define ACPI_NOTIFY_DEVICE_WAKE         (UINT8) 2
50198944Sobrien#define ACPI_NOTIFY_EJECT_REQUEST       (UINT8) 3
50246283Sdfr#define ACPI_NOTIFY_DEVICE_CHECK_LIGHT  (UINT8) 4
50398944Sobrien#define ACPI_NOTIFY_FREQUENCY_MISMATCH  (UINT8) 5
50446283Sdfr#define ACPI_NOTIFY_BUS_MODE_MISMATCH   (UINT8) 6
50598944Sobrien#define ACPI_NOTIFY_POWER_FAULT         (UINT8) 7
50698944Sobrien
50746283Sdfr/*
50898944Sobrien * Types associated with ACPI names and objects.  The first group of
50998944Sobrien * values (up to ACPI_TYPE_EXTERNAL_MAX) correspond to the definition
51098944Sobrien * of the ACPI ObjectType() operator (See the ACPI Spec).  Therefore,
51146283Sdfr * only add to the first group if the spec changes.
51246283Sdfr *
51398944Sobrien * NOTE: Types must be kept in sync with the global AcpiNsProperties
51446283Sdfr * and AcpiNsTypeNames arrays.
51546283Sdfr */
51646283Sdfrtypedef UINT32                          ACPI_OBJECT_TYPE;
51746283Sdfr
51846283Sdfr#define ACPI_TYPE_ANY                   0x00
51998944Sobrien#define ACPI_TYPE_INTEGER               0x01  /* Byte/Word/Dword/Zero/One/Ones */
52098944Sobrien#define ACPI_TYPE_STRING                0x02
52146283Sdfr#define ACPI_TYPE_BUFFER                0x03
52246283Sdfr#define ACPI_TYPE_PACKAGE               0x04  /* ByteConst, multiple DataTerm/Constant/SuperName */
52346283Sdfr#define ACPI_TYPE_FIELD_UNIT            0x05
52498944Sobrien#define ACPI_TYPE_DEVICE                0x06  /* Name, multiple Node */
52546283Sdfr#define ACPI_TYPE_EVENT                 0x07
52646283Sdfr#define ACPI_TYPE_METHOD                0x08  /* Name, ByteConst, multiple Code */
52746283Sdfr#define ACPI_TYPE_MUTEX                 0x09
52846283Sdfr#define ACPI_TYPE_REGION                0x0A
52946283Sdfr#define ACPI_TYPE_POWER                 0x0B  /* Name,ByteConst,WordConst,multi Node */
53046283Sdfr#define ACPI_TYPE_PROCESSOR             0x0C  /* Name,ByteConst,DWordConst,ByteConst,multi NmO */
53146283Sdfr#define ACPI_TYPE_THERMAL               0x0D  /* Name, multiple Node */
53246283Sdfr#define ACPI_TYPE_BUFFER_FIELD          0x0E
53346283Sdfr#define ACPI_TYPE_DDB_HANDLE            0x0F
53446283Sdfr#define ACPI_TYPE_DEBUG_OBJECT          0x10
53546283Sdfr
53646283Sdfr#define ACPI_TYPE_EXTERNAL_MAX          0x10
53746283Sdfr
53846283Sdfr/*
53946283Sdfr * These are object types that do not map directly to the ACPI
54046283Sdfr * ObjectType() operator. They are used for various internal purposes only.
54146283Sdfr * If new predefined ACPI_TYPEs are added (via the ACPI specification), these
54298944Sobrien * internal types must move upwards. (There is code that depends on these
54346283Sdfr * values being contiguous with the external types above.)
54446283Sdfr */
54546283Sdfr#define ACPI_TYPE_LOCAL_REGION_FIELD    0x11
54646283Sdfr#define ACPI_TYPE_LOCAL_BANK_FIELD      0x12
54746283Sdfr#define ACPI_TYPE_LOCAL_INDEX_FIELD     0x13
54846283Sdfr#define ACPI_TYPE_LOCAL_REFERENCE       0x14  /* Arg#, Local#, Name, Debug, RefOf, Index */
54946283Sdfr#define ACPI_TYPE_LOCAL_ALIAS           0x15
55046283Sdfr#define ACPI_TYPE_LOCAL_METHOD_ALIAS    0x16
55146283Sdfr#define ACPI_TYPE_LOCAL_NOTIFY          0x17
55246283Sdfr#define ACPI_TYPE_LOCAL_ADDRESS_HANDLER 0x18
55346283Sdfr#define ACPI_TYPE_LOCAL_RESOURCE        0x19
55498944Sobrien#define ACPI_TYPE_LOCAL_RESOURCE_FIELD  0x1A
55598944Sobrien#define ACPI_TYPE_LOCAL_SCOPE           0x1B  /* 1 Name, multiple ObjectList Nodes */
55646283Sdfr
55746283Sdfr#define ACPI_TYPE_NS_NODE_MAX           0x1B  /* Last typecode used within a NS Node */
55846283Sdfr
55946283Sdfr/*
56046283Sdfr * These are special object types that never appear in
56146283Sdfr * a Namespace node, only in an ACPI_OPERAND_OBJECT
56246283Sdfr */
56398944Sobrien#define ACPI_TYPE_LOCAL_EXTRA           0x1C
56446283Sdfr#define ACPI_TYPE_LOCAL_DATA            0x1D
56598944Sobrien
56646283Sdfr#define ACPI_TYPE_LOCAL_MAX             0x1D
56746283Sdfr
56846283Sdfr/* All types above here are invalid */
56946283Sdfr
57046283Sdfr#define ACPI_TYPE_INVALID               0x1E
57146283Sdfr#define ACPI_TYPE_NOT_FOUND             0xFF
57246283Sdfr
57346283Sdfr/*
57446283Sdfr * All I/O
57546283Sdfr */
57646283Sdfr#define ACPI_READ                       0
57746283Sdfr#define ACPI_WRITE                      1
57846283Sdfr#define ACPI_IO_MASK                    1
57946283Sdfr
58046283Sdfr/*
58146283Sdfr * Event Types: Fixed & General Purpose
58246283Sdfr */
58346283Sdfrtypedef UINT32                          ACPI_EVENT_TYPE;
58446283Sdfr
58546283Sdfr/*
58646283Sdfr * Fixed events
58746283Sdfr */
58846283Sdfr#define ACPI_EVENT_PMTIMER              0
58946283Sdfr#define ACPI_EVENT_GLOBAL               1
59046283Sdfr#define ACPI_EVENT_POWER_BUTTON         2
59146283Sdfr#define ACPI_EVENT_SLEEP_BUTTON         3
59246283Sdfr#define ACPI_EVENT_RTC                  4
59346283Sdfr#define ACPI_EVENT_MAX                  4
59446283Sdfr#define ACPI_NUM_FIXED_EVENTS           ACPI_EVENT_MAX + 1
59546283Sdfr
59646283Sdfr/*
59746283Sdfr * Event Status - Per event
59898944Sobrien * -------------
59998944Sobrien * The encoding of ACPI_EVENT_STATUS is illustrated below.
60046283Sdfr * Note that a set bit (1) indicates the property is TRUE
60146283Sdfr * (e.g. if bit 0 is set then the event is enabled).
60246283Sdfr * +-------------+-+-+-+
60346283Sdfr * |   Bits 31:3 |2|1|0|
60446283Sdfr * +-------------+-+-+-+
60546283Sdfr *          |     | | |
60646283Sdfr *          |     | | +- Enabled?
60746283Sdfr *          |     | +--- Enabled for wake?
60846283Sdfr *          |     +----- Set?
60946283Sdfr *          +----------- <Reserved>
61046283Sdfr */
61146283Sdfrtypedef UINT32                          ACPI_EVENT_STATUS;
61246283Sdfr
61346283Sdfr#define ACPI_EVENT_FLAG_DISABLED        (ACPI_EVENT_STATUS) 0x00
61446283Sdfr#define ACPI_EVENT_FLAG_ENABLED         (ACPI_EVENT_STATUS) 0x01
61546283Sdfr#define ACPI_EVENT_FLAG_WAKE_ENABLED    (ACPI_EVENT_STATUS) 0x02
61646283Sdfr#define ACPI_EVENT_FLAG_SET             (ACPI_EVENT_STATUS) 0x04
61746283Sdfr
61846283Sdfr/*
61946283Sdfr * General Purpose Events (GPE)
62098944Sobrien */
62146283Sdfr#define ACPI_GPE_INVALID                0xFF
62246283Sdfr#define ACPI_GPE_MAX                    0xFF
62346283Sdfr#define ACPI_NUM_GPE                    256
62446283Sdfr
62598944Sobrien#define ACPI_GPE_ENABLE                 0
62646283Sdfr#define ACPI_GPE_DISABLE                1
62746283Sdfr
62846283Sdfr
62946283Sdfr/*
63046283Sdfr * GPE info flags - Per GPE
63146283Sdfr * +-+-+-+---+---+-+
63298944Sobrien * |7|6|5|4:3|2:1|0|
63398944Sobrien * +-+-+-+---+---+-+
63446283Sdfr *  | | |  |   |  |
63546283Sdfr *  | | |  |   |  +--- Interrupt type: Edge or Level Triggered
63646283Sdfr *  | | |  |   +--- Type: Wake-only, Runtime-only, or wake/runtime
63746283Sdfr *  | | |  +--- Type of dispatch -- to method, handler, or none
63898944Sobrien *  | | +--- Enabled for runtime?
63946283Sdfr *  | +--- Enabled for wake?
64098944Sobrien *  +--- Unused
64146283Sdfr */
64246283Sdfr#define ACPI_GPE_XRUPT_TYPE_MASK        (UINT8) 0x01
64346283Sdfr#define ACPI_GPE_LEVEL_TRIGGERED        (UINT8) 0x01
64446283Sdfr#define ACPI_GPE_EDGE_TRIGGERED         (UINT8) 0x00
64546283Sdfr
64646283Sdfr#define ACPI_GPE_TYPE_MASK              (UINT8) 0x06
64746283Sdfr#define ACPI_GPE_TYPE_WAKE_RUN          (UINT8) 0x06
64846283Sdfr#define ACPI_GPE_TYPE_WAKE              (UINT8) 0x02
649130803Smarcel#define ACPI_GPE_TYPE_RUNTIME           (UINT8) 0x04    /* Default */
65046283Sdfr
651130803Smarcel#define ACPI_GPE_DISPATCH_MASK          (UINT8) 0x18
652130803Smarcel#define ACPI_GPE_DISPATCH_HANDLER       (UINT8) 0x08
653130803Smarcel#define ACPI_GPE_DISPATCH_METHOD        (UINT8) 0x10
65498944Sobrien#define ACPI_GPE_DISPATCH_NOT_USED      (UINT8) 0x00    /* Default */
65546283Sdfr
65646283Sdfr#define ACPI_GPE_RUN_ENABLE_MASK        (UINT8) 0x20
65746283Sdfr#define ACPI_GPE_RUN_ENABLED            (UINT8) 0x20
65846283Sdfr#define ACPI_GPE_RUN_DISABLED           (UINT8) 0x00    /* Default */
65946283Sdfr
66046283Sdfr#define ACPI_GPE_WAKE_ENABLE_MASK       (UINT8) 0x40
66146283Sdfr#define ACPI_GPE_WAKE_ENABLED           (UINT8) 0x40
66246283Sdfr#define ACPI_GPE_WAKE_DISABLED          (UINT8) 0x00    /* Default */
663130803Smarcel
664130803Smarcel#define ACPI_GPE_ENABLE_MASK            (UINT8) 0x60    /* Both run/wake */
66546283Sdfr
66646283Sdfr/*
66746283Sdfr * Flags for GPE and Lock interfaces
66846283Sdfr */
66946283Sdfr#define ACPI_EVENT_WAKE_ENABLE          0x2             /* AcpiGpeEnable */
67046283Sdfr#define ACPI_EVENT_WAKE_DISABLE         0x2             /* AcpiGpeDisable */
67146283Sdfr
67246283Sdfr#define ACPI_NOT_ISR                    0x1
67346283Sdfr#define ACPI_ISR                        0x0
67446283Sdfr
67546283Sdfr
67646283Sdfr/* Notify types */
67746283Sdfr
67846283Sdfr#define ACPI_SYSTEM_NOTIFY              0x1
67946283Sdfr#define ACPI_DEVICE_NOTIFY              0x2
68046283Sdfr#define ACPI_ALL_NOTIFY                 0x3
68146283Sdfr#define ACPI_MAX_NOTIFY_HANDLER_TYPE    0x3
68246283Sdfr
68346283Sdfr#define ACPI_MAX_SYS_NOTIFY             0x7f
68498944Sobrien
68598944Sobrien
68646283Sdfr/* Address Space (Operation Region) Types */
68798944Sobrien
68846283Sdfrtypedef UINT8                           ACPI_ADR_SPACE_TYPE;
68946283Sdfr
69046283Sdfr#define ACPI_ADR_SPACE_SYSTEM_MEMORY    (ACPI_ADR_SPACE_TYPE) 0
69146283Sdfr#define ACPI_ADR_SPACE_SYSTEM_IO        (ACPI_ADR_SPACE_TYPE) 1
69246283Sdfr#define ACPI_ADR_SPACE_PCI_CONFIG       (ACPI_ADR_SPACE_TYPE) 2
69346283Sdfr#define ACPI_ADR_SPACE_EC               (ACPI_ADR_SPACE_TYPE) 3
69446283Sdfr#define ACPI_ADR_SPACE_SMBUS            (ACPI_ADR_SPACE_TYPE) 4
69546283Sdfr#define ACPI_ADR_SPACE_CMOS             (ACPI_ADR_SPACE_TYPE) 5
69646283Sdfr#define ACPI_ADR_SPACE_PCI_BAR_TARGET   (ACPI_ADR_SPACE_TYPE) 6
69746283Sdfr#define ACPI_ADR_SPACE_DATA_TABLE       (ACPI_ADR_SPACE_TYPE) 7
69846283Sdfr#define ACPI_ADR_SPACE_FIXED_HARDWARE   (ACPI_ADR_SPACE_TYPE) 127
69946283Sdfr
70046283Sdfr
70146283Sdfr/*
70246283Sdfr * BitRegister IDs
70346283Sdfr * These are bitfields defined within the full ACPI registers
70446283Sdfr */
70546283Sdfr#define ACPI_BITREG_TIMER_STATUS                0x00
70646283Sdfr#define ACPI_BITREG_BUS_MASTER_STATUS           0x01
70746283Sdfr#define ACPI_BITREG_GLOBAL_LOCK_STATUS          0x02
70846283Sdfr#define ACPI_BITREG_POWER_BUTTON_STATUS         0x03
70946283Sdfr#define ACPI_BITREG_SLEEP_BUTTON_STATUS         0x04
71046283Sdfr#define ACPI_BITREG_RT_CLOCK_STATUS             0x05
71146283Sdfr#define ACPI_BITREG_WAKE_STATUS                 0x06
71246283Sdfr#define ACPI_BITREG_PCIEXP_WAKE_STATUS          0x07
71346283Sdfr
71446283Sdfr#define ACPI_BITREG_TIMER_ENABLE                0x08
71598944Sobrien#define ACPI_BITREG_GLOBAL_LOCK_ENABLE          0x09
71646283Sdfr#define ACPI_BITREG_POWER_BUTTON_ENABLE         0x0A
71746283Sdfr#define ACPI_BITREG_SLEEP_BUTTON_ENABLE         0x0B
71846283Sdfr#define ACPI_BITREG_RT_CLOCK_ENABLE             0x0C
71946283Sdfr#define ACPI_BITREG_WAKE_ENABLE                 0x0D
72098944Sobrien#define ACPI_BITREG_PCIEXP_WAKE_DISABLE         0x0E
72198944Sobrien
72298944Sobrien#define ACPI_BITREG_SCI_ENABLE                  0x0F
72398944Sobrien#define ACPI_BITREG_BUS_MASTER_RLD              0x10
72498944Sobrien#define ACPI_BITREG_GLOBAL_LOCK_RELEASE         0x11
72598944Sobrien#define ACPI_BITREG_SLEEP_TYPE_A                0x12
72646283Sdfr#define ACPI_BITREG_SLEEP_TYPE_B                0x13
72798944Sobrien#define ACPI_BITREG_SLEEP_ENABLE                0x14
72898944Sobrien
72998944Sobrien#define ACPI_BITREG_ARB_DISABLE                 0x15
73046283Sdfr
73146283Sdfr#define ACPI_BITREG_MAX                         0x15
73246283Sdfr#define ACPI_NUM_BITREG                         ACPI_BITREG_MAX + 1
73346283Sdfr
73498944Sobrien
73546283Sdfr/*
73698944Sobrien * External ACPI object definition
73798944Sobrien */
73898944Sobrientypedef union acpi_object
73946283Sdfr{
74046283Sdfr    ACPI_OBJECT_TYPE                Type;   /* See definition of AcpiNsType for values */
74146283Sdfr    struct
742130803Smarcel    {
74398944Sobrien        ACPI_OBJECT_TYPE                Type;
74446283Sdfr        ACPI_INTEGER                    Value;      /* The actual number */
74546283Sdfr    } Integer;
74698944Sobrien
74746283Sdfr    struct
74846283Sdfr    {
74946283Sdfr        ACPI_OBJECT_TYPE                Type;
75046283Sdfr        UINT32                          Length;     /* # of bytes in string, excluding trailing null */
75146283Sdfr        char                            *Pointer;   /* points to the string value */
75246283Sdfr    } String;
753130803Smarcel
754130803Smarcel    struct
755130803Smarcel    {
756130803Smarcel        ACPI_OBJECT_TYPE                Type;
757130803Smarcel        UINT32                          Length;     /* # of bytes in buffer */
758130803Smarcel        UINT8                           *Pointer;   /* points to the buffer */
759130803Smarcel    } Buffer;
760130803Smarcel
761130803Smarcel    struct
762130803Smarcel    {
763130803Smarcel        ACPI_OBJECT_TYPE                Type;
764130803Smarcel        UINT32                          Fill1;
765130803Smarcel        ACPI_HANDLE                     Handle;     /* object reference */
766130803Smarcel    } Reference;
767130803Smarcel
768130803Smarcel    struct
769130803Smarcel    {
770130803Smarcel        ACPI_OBJECT_TYPE                Type;
771130803Smarcel        UINT32                          Count;      /* # of elements in package */
772130803Smarcel        union acpi_object               *Elements;  /* Pointer to an array of ACPI_OBJECTs */
773130803Smarcel    } Package;
774130803Smarcel
775130803Smarcel    struct
776130803Smarcel    {
777130803Smarcel        ACPI_OBJECT_TYPE                Type;
778130803Smarcel        UINT32                          ProcId;
779130803Smarcel        ACPI_IO_ADDRESS                 PblkAddress;
780130803Smarcel        UINT32                          PblkLength;
781130803Smarcel    } Processor;
782130803Smarcel
783130803Smarcel    struct
78446283Sdfr    {
78546283Sdfr        ACPI_OBJECT_TYPE                Type;
78646283Sdfr        UINT32                          SystemLevel;
78798944Sobrien        UINT32                          ResourceOrder;
78846283Sdfr    } PowerResource;
78946283Sdfr
79046283Sdfr} ACPI_OBJECT;
79146283Sdfr
79246283Sdfr
79398944Sobrien/*
79446283Sdfr * List of objects, used as a parameter list for control method evaluation
79546283Sdfr */
79646283Sdfrtypedef struct acpi_object_list
79746283Sdfr{
79846283Sdfr    UINT32                          Count;
79998944Sobrien    ACPI_OBJECT                     *Pointer;
80046283Sdfr
80198944Sobrien} ACPI_OBJECT_LIST;
80246283Sdfr
80346283Sdfr
80446283Sdfr/*
80546283Sdfr * Miscellaneous common Data Structures used by the interfaces
80646283Sdfr */
80798944Sobrien#define ACPI_NO_BUFFER              0
80846283Sdfr#define ACPI_ALLOCATE_BUFFER        (ACPI_SIZE) (-1)
80946283Sdfr#define ACPI_ALLOCATE_LOCAL_BUFFER  (ACPI_SIZE) (-2)
81046283Sdfr
81198944Sobrientypedef struct acpi_buffer
81246283Sdfr{
81398944Sobrien    ACPI_SIZE                       Length;         /* Length in bytes of the buffer */
81446283Sdfr    void                            *Pointer;       /* pointer to buffer */
81546283Sdfr
81646283Sdfr} ACPI_BUFFER;
81798944Sobrien
81898944Sobrien
81998944Sobrien/*
82046283Sdfr * NameType for AcpiGetName
82198944Sobrien */
82298944Sobrien#define ACPI_FULL_PATHNAME              0
82346283Sdfr#define ACPI_SINGLE_NAME                1
82446283Sdfr#define ACPI_NAME_TYPE_MAX              1
82546283Sdfr
82646283Sdfr
82746283Sdfr/*
82846283Sdfr * Structure and flags for AcpiGetSystemInfo
82946283Sdfr */
83046283Sdfr#define ACPI_SYS_MODE_UNKNOWN           0x0000
83146283Sdfr#define ACPI_SYS_MODE_ACPI              0x0001
832130803Smarcel#define ACPI_SYS_MODE_LEGACY            0x0002
83398944Sobrien#define ACPI_SYS_MODES_MASK             0x0003
83498944Sobrien
83598944Sobrien
83698944Sobrien/*
83798944Sobrien * System info returned by AcpiGetSystemInfo()
83898944Sobrien */
83946283Sdfrtypedef struct acpi_system_info
84098944Sobrien{
84146283Sdfr    UINT32                          AcpiCaVersion;
84246283Sdfr    UINT32                          Flags;
84346283Sdfr    UINT32                          TimerResolution;
84446283Sdfr    UINT32                          Reserved1;
84546283Sdfr    UINT32                          Reserved2;
84646283Sdfr    UINT32                          DebugLevel;
84798944Sobrien    UINT32                          DebugLayer;
84846283Sdfr
84946283Sdfr} ACPI_SYSTEM_INFO;
85046283Sdfr
85146283Sdfr
85298944Sobrien/*
85346283Sdfr * Types specific to the OS service interfaces
85446283Sdfr */
85546283Sdfrtypedef UINT32
85646283Sdfr(ACPI_SYSTEM_XFACE *ACPI_OSD_HANDLER) (
85746283Sdfr    void                            *Context);
85846283Sdfr
85946283Sdfrtypedef void
86098944Sobrien(ACPI_SYSTEM_XFACE *ACPI_OSD_EXEC_CALLBACK) (
86198944Sobrien    void                            *Context);
86298944Sobrien
86398944Sobrien/*
86446283Sdfr * Various handlers and callback procedures
86546283Sdfr */
86646283Sdfrtypedef
86798944SobrienUINT32 (*ACPI_EVENT_HANDLER) (
86846283Sdfr    void                            *Context);
86998944Sobrien
87098944Sobrientypedef
87198944Sobrienvoid (*ACPI_NOTIFY_HANDLER) (
87298944Sobrien    ACPI_HANDLE                     Device,
87346283Sdfr    UINT32                          Value,
87446283Sdfr    void                            *Context);
87598944Sobrien
87698944Sobrientypedef
87798944Sobrienvoid (*ACPI_OBJECT_HANDLER) (
87898944Sobrien    ACPI_HANDLE                     Object,
87946283Sdfr    UINT32                          Function,
88046283Sdfr    void                            *Data);
88146283Sdfr
88246283Sdfrtypedef
88346283SdfrACPI_STATUS (*ACPI_INIT_HANDLER) (
88498944Sobrien    ACPI_HANDLE                     Object,
88546283Sdfr    UINT32                          Function);
88646283Sdfr
88746283Sdfr#define ACPI_INIT_DEVICE_INI        1
88846283Sdfr
88946283Sdfrtypedef
89046283SdfrACPI_STATUS (*ACPI_EXCEPTION_HANDLER) (
89146283Sdfr    ACPI_STATUS                     AmlStatus,
89246283Sdfr    ACPI_NAME                       Name,
89398944Sobrien    UINT16                          Opcode,
89446283Sdfr    UINT32                          AmlOffset,
89546283Sdfr    void                            *Context);
89646283Sdfr
89746283Sdfr
898130803Smarcel/* Address Spaces (For Operation Regions) */
89946283Sdfr
90098944Sobrientypedef
90146283SdfrACPI_STATUS (*ACPI_ADR_SPACE_HANDLER) (
90298944Sobrien    UINT32                          Function,
90346283Sdfr    ACPI_PHYSICAL_ADDRESS           Address,
90498944Sobrien    UINT32                          BitWidth,
90546283Sdfr    ACPI_INTEGER                    *Value,
90698944Sobrien    void                            *HandlerContext,
90746283Sdfr    void                            *RegionContext);
90898944Sobrien
90946283Sdfr#define ACPI_DEFAULT_HANDLER            NULL
91098944Sobrien
91146283Sdfr
91246283Sdfrtypedef
91346283SdfrACPI_STATUS (*ACPI_ADR_SPACE_SETUP) (
91446283Sdfr    ACPI_HANDLE                     RegionHandle,
91598944Sobrien    UINT32                          Function,
91646283Sdfr    void                            *HandlerContext,
91798944Sobrien    void                            **RegionContext);
91846283Sdfr
91946283Sdfr#define ACPI_REGION_ACTIVATE    0
92046283Sdfr#define ACPI_REGION_DEACTIVATE  1
92198944Sobrien
92246283Sdfrtypedef
92398944SobrienACPI_STATUS (*ACPI_WALK_CALLBACK) (
92446283Sdfr    ACPI_HANDLE                     ObjHandle,
92598944Sobrien    UINT32                          NestingLevel,
92646283Sdfr    void                            *Context,
92798944Sobrien    void                            **ReturnValue);
92898944Sobrien
92946283Sdfr
93098944Sobrien/* Interrupt handler return values */
93198944Sobrien
93246283Sdfr#define ACPI_INTERRUPT_NOT_HANDLED      0x00
93346283Sdfr#define ACPI_INTERRUPT_HANDLED          0x01
93498944Sobrien
93546283Sdfr
93698944Sobrien/* Common string version of device HIDs and UIDs */
93746283Sdfr
93846283Sdfrtypedef struct acpi_device_id
93946283Sdfr{
94046283Sdfr    char                            Value[ACPI_DEVICE_ID_LENGTH];
94198944Sobrien
94246283Sdfr} ACPI_DEVICE_ID;
94346283Sdfr
94446283Sdfr/* Common string version of device CIDs */
94546283Sdfr
94646283Sdfrtypedef struct acpi_compatible_id
94746283Sdfr{
94846283Sdfr    char                            Value[ACPI_MAX_CID_LENGTH];
94946283Sdfr
95046283Sdfr} ACPI_COMPATIBLE_ID;
95146283Sdfr
95298944Sobrientypedef struct acpi_compatible_id_list
95398944Sobrien{
95498944Sobrien    UINT32                          Count;
95598944Sobrien    UINT32                          Size;
95698944Sobrien    ACPI_COMPATIBLE_ID              Id[1];
95746283Sdfr
95846283Sdfr} ACPI_COMPATIBLE_ID_LIST;
95946283Sdfr
96046283Sdfr
96146283Sdfr/* Structure and flags for AcpiGetObjectInfo */
96246283Sdfr
96346283Sdfr#define ACPI_VALID_STA                  0x0001
96446283Sdfr#define ACPI_VALID_ADR                  0x0002
96598944Sobrien#define ACPI_VALID_HID                  0x0004
96698944Sobrien#define ACPI_VALID_UID                  0x0008
96798944Sobrien#define ACPI_VALID_CID                  0x0010
96846283Sdfr#define ACPI_VALID_SXDS                 0x0020
96998944Sobrien
97046283Sdfr/* Flags for _STA method */
97198944Sobrien
97298944Sobrien#define ACPI_STA_DEVICE_PRESENT         0x01
97398944Sobrien#define ACPI_STA_DEVICE_ENABLED         0x02
97446283Sdfr#define ACPI_STA_DEVICE_UI              0x04
97598944Sobrien#define ACPI_STA_DEVICE_FUNCTIONING     0x08
97646283Sdfr#define ACPI_STA_DEVICE_OK              0x08 /* Synonym */
97746283Sdfr#define ACPI_STA_BATTERY_PRESENT        0x10
97846283Sdfr
97946283Sdfr
98046283Sdfr#define ACPI_COMMON_OBJ_INFO \
98146283Sdfr    ACPI_OBJECT_TYPE                Type;           /* ACPI object type */ \
98246283Sdfr    ACPI_NAME                       Name            /* ACPI object Name */
98346283Sdfr
98498944Sobrien
98598944Sobrientypedef struct acpi_obj_info_header
98646283Sdfr{
98746283Sdfr    ACPI_COMMON_OBJ_INFO;
98846283Sdfr
98946283Sdfr} ACPI_OBJ_INFO_HEADER;
99046283Sdfr
99146283Sdfr
99298944Sobrien/* Structure returned from Get Object Info */
99398944Sobrien
99446283Sdfrtypedef struct acpi_device_info
99546283Sdfr{
99646283Sdfr    ACPI_COMMON_OBJ_INFO;
99746283Sdfr
99846283Sdfr    UINT32                          Valid;              /* Indicates which fields below are valid */
99946283Sdfr    UINT32                          CurrentStatus;      /* _STA value */
100098944Sobrien    ACPI_INTEGER                    Address;            /* _ADR value if any */
100198944Sobrien    ACPI_DEVICE_ID                  HardwareId;         /* _HID value if any */
100246283Sdfr    ACPI_DEVICE_ID                  UniqueId;           /* _UID value if any */
100346283Sdfr    UINT8                           HighestDstates[4];  /* _SxD values: 0xFF indicates not valid */
100446283Sdfr    ACPI_COMPATIBLE_ID_LIST         CompatibilityId;    /* List of _CIDs if any */
100546283Sdfr
100646283Sdfr} ACPI_DEVICE_INFO;
100746283Sdfr
100898944Sobrien
100998944Sobrien/* Context structs for address space handlers */
101046283Sdfr
101146283Sdfrtypedef struct acpi_pci_id
101246283Sdfr{
101346283Sdfr    UINT16                          Segment;
101446283Sdfr    UINT16                          Bus;
101546283Sdfr    UINT16                          Device;
101698944Sobrien    UINT16                          Function;
101798944Sobrien
101846283Sdfr} ACPI_PCI_ID;
101946283Sdfr
102098944Sobrien
102146283Sdfrtypedef struct acpi_mem_space_context
102246283Sdfr{
102346283Sdfr    UINT32                          Length;
102446283Sdfr    ACPI_PHYSICAL_ADDRESS           Address;
102546283Sdfr    ACPI_PHYSICAL_ADDRESS           MappedPhysicalAddress;
102646283Sdfr    UINT8                           *MappedLogicalAddress;
102746283Sdfr    ACPI_SIZE                       MappedLength;
102846283Sdfr
102946283Sdfr} ACPI_MEM_SPACE_CONTEXT;
103046283Sdfr
103146283Sdfr
103246283Sdfr/*
103346283Sdfr * Definitions for Resource Attributes
103446283Sdfr */
103546283Sdfrtypedef UINT16                          ACPI_RS_LENGTH;    /* Resource Length field is fixed at 16 bits */
103646283Sdfrtypedef UINT32                          ACPI_RSDESC_SIZE;  /* Max Resource Descriptor size is (Length+3) = (64K-1)+3 */
103798944Sobrien
103846283Sdfr/*
103946283Sdfr *  Memory Attributes
104046283Sdfr */
104146283Sdfr#define ACPI_READ_ONLY_MEMORY           (UINT8) 0x00
104298944Sobrien#define ACPI_READ_WRITE_MEMORY          (UINT8) 0x01
104346283Sdfr
104498944Sobrien#define ACPI_NON_CACHEABLE_MEMORY       (UINT8) 0x00
104598944Sobrien#define ACPI_CACHABLE_MEMORY            (UINT8) 0x01
104698944Sobrien#define ACPI_WRITE_COMBINING_MEMORY     (UINT8) 0x02
104746283Sdfr#define ACPI_PREFETCHABLE_MEMORY        (UINT8) 0x03
104846283Sdfr
104998944Sobrien/*
105098944Sobrien *  IO Attributes
105198944Sobrien *  The ISA IO ranges are:     n000-n0FFh,  n400-n4FFh, n800-n8FFh, nC00-nCFFh.
105298944Sobrien *  The non-ISA IO ranges are: n100-n3FFh,  n500-n7FFh, n900-nBFFh, nCD0-nFFFh.
105398944Sobrien */
105498944Sobrien#define ACPI_NON_ISA_ONLY_RANGES        (UINT8) 0x01
105598944Sobrien#define ACPI_ISA_ONLY_RANGES            (UINT8) 0x02
105646283Sdfr#define ACPI_ENTIRE_RANGE               (ACPI_NON_ISA_ONLY_RANGES | ACPI_ISA_ONLY_RANGES)
105746283Sdfr
105846283Sdfr/* Type of translation - 1=Sparse, 0=Dense */
105946283Sdfr
106098944Sobrien#define ACPI_SPARSE_TRANSLATION         (UINT8) 0x01
106146283Sdfr
1062130803Smarcel/*
106398944Sobrien *  IO Port Descriptor Decode
106446283Sdfr */
1065130803Smarcel#define ACPI_DECODE_10                  (UINT8) 0x00    /* 10-bit IO address decode */
106698944Sobrien#define ACPI_DECODE_16                  (UINT8) 0x01    /* 16-bit IO address decode */
106746283Sdfr
106846283Sdfr/*
106946283Sdfr *  IRQ Attributes
107046283Sdfr */
107146283Sdfr#define ACPI_LEVEL_SENSITIVE            (UINT8) 0x00
107246283Sdfr#define ACPI_EDGE_SENSITIVE             (UINT8) 0x01
107346283Sdfr
107446283Sdfr#define ACPI_ACTIVE_HIGH                (UINT8) 0x00
107546283Sdfr#define ACPI_ACTIVE_LOW                 (UINT8) 0x01
107646283Sdfr
107746283Sdfr#define ACPI_EXCLUSIVE                  (UINT8) 0x00
107846283Sdfr#define ACPI_SHARED                     (UINT8) 0x01
107998944Sobrien
108098944Sobrien/*
108198944Sobrien *  DMA Attributes
1082130803Smarcel */
108398944Sobrien#define ACPI_COMPATIBILITY              (UINT8) 0x00
108498944Sobrien#define ACPI_TYPE_A                     (UINT8) 0x01
1085130803Smarcel#define ACPI_TYPE_B                     (UINT8) 0x02
108698944Sobrien#define ACPI_TYPE_F                     (UINT8) 0x03
108798944Sobrien
108898944Sobrien#define ACPI_NOT_BUS_MASTER             (UINT8) 0x00
108998944Sobrien#define ACPI_BUS_MASTER                 (UINT8) 0x01
109098944Sobrien
109198944Sobrien#define ACPI_TRANSFER_8                 (UINT8) 0x00
109298944Sobrien#define ACPI_TRANSFER_8_16              (UINT8) 0x01
109346283Sdfr#define ACPI_TRANSFER_16                (UINT8) 0x02
109446283Sdfr
109546283Sdfr/*
109646283Sdfr * Start Dependent Functions Priority definitions
109746283Sdfr */
109846283Sdfr#define ACPI_GOOD_CONFIGURATION         (UINT8) 0x00
109946283Sdfr#define ACPI_ACCEPTABLE_CONFIGURATION   (UINT8) 0x01
110046283Sdfr#define ACPI_SUB_OPTIMAL_CONFIGURATION  (UINT8) 0x02
110146283Sdfr
110298944Sobrien/*
110398944Sobrien *  16, 32 and 64-bit Address Descriptor resource types
110446283Sdfr */
110598944Sobrien#define ACPI_MEMORY_RANGE               (UINT8) 0x00
110646283Sdfr#define ACPI_IO_RANGE                   (UINT8) 0x01
110746283Sdfr#define ACPI_BUS_NUMBER_RANGE           (UINT8) 0x02
110846283Sdfr
110946283Sdfr#define ACPI_ADDRESS_NOT_FIXED          (UINT8) 0x00
111046283Sdfr#define ACPI_ADDRESS_FIXED              (UINT8) 0x01
111198944Sobrien
111298944Sobrien#define ACPI_POS_DECODE                 (UINT8) 0x00
111346283Sdfr#define ACPI_SUB_DECODE                 (UINT8) 0x01
111498944Sobrien
111546283Sdfr#define ACPI_PRODUCER                   (UINT8) 0x00
111646283Sdfr#define ACPI_CONSUMER                   (UINT8) 0x01
111798944Sobrien
111846283Sdfr
111946283Sdfr/*
112098944Sobrien * If possible, pack the following structures to byte alignment
112198944Sobrien */
112246283Sdfr#ifndef ACPI_MISALIGNMENT_NOT_SUPPORTED
112398944Sobrien#pragma pack(1)
112446283Sdfr#endif
112546283Sdfr
112646283Sdfr/* UUID data structures for use in vendor-defined resource descriptors */
112746283Sdfr
112846283Sdfrtypedef struct acpi_uuid
112998944Sobrien{
113098944Sobrien    UINT8                           Data[ACPI_UUID_LENGTH];
113146283Sdfr} ACPI_UUID;
113298944Sobrien
113346283Sdfrtypedef struct acpi_vendor_uuid
113446283Sdfr{
113598944Sobrien    UINT8                           Subtype;
113646283Sdfr    UINT8                           Data[ACPI_UUID_LENGTH];
113746283Sdfr
113898944Sobrien} ACPI_VENDOR_UUID;
113946283Sdfr
114046283Sdfr/*
114146283Sdfr *  Structures used to describe device resources
114246283Sdfr */
114346283Sdfrtypedef struct acpi_resource_irq
114446283Sdfr{
114546283Sdfr    UINT8                           Triggering;
114698944Sobrien    UINT8                           Polarity;
114746283Sdfr    UINT8                           Sharable;
114898944Sobrien    UINT8                           InterruptCount;
114998944Sobrien    UINT8                           Interrupts[1];
115046283Sdfr
115146283Sdfr} ACPI_RESOURCE_IRQ;
115246283Sdfr
115346283Sdfr
115498944Sobrientypedef struct ACPI_RESOURCE_DMA
115546283Sdfr{
115646283Sdfr    UINT8                           Type;
115746283Sdfr    UINT8                           BusMaster;
115846283Sdfr    UINT8                           Transfer;
115946283Sdfr    UINT8                           ChannelCount;
116046283Sdfr    UINT8                           Channels[1];
116198944Sobrien
116246283Sdfr} ACPI_RESOURCE_DMA;
116346283Sdfr
116446283Sdfr
116546283Sdfrtypedef struct acpi_resource_start_dependent
116646283Sdfr{
116746283Sdfr    UINT8                           CompatibilityPriority;
116846283Sdfr    UINT8                           PerformanceRobustness;
116998944Sobrien
117046283Sdfr} ACPI_RESOURCE_START_DEPENDENT;
117198944Sobrien
117298944Sobrien
117398944Sobrien/*
117446283Sdfr * END_DEPENDENT_FUNCTIONS_RESOURCE struct is not
117546283Sdfr * needed because it has no fields
117646283Sdfr */
117746283Sdfr
117846283Sdfr
117946283Sdfrtypedef struct acpi_resource_io
118046283Sdfr{
118146283Sdfr    UINT8                           IoDecode;
118246283Sdfr    UINT8                           Alignment;
118346283Sdfr    UINT8                           AddressLength;
118498944Sobrien    UINT16                          Minimum;
118598944Sobrien    UINT16                          Maximum;
118646283Sdfr
118798944Sobrien} ACPI_RESOURCE_IO;
118846283Sdfr
118946283Sdfrtypedef struct acpi_resource_fixed_io
119046283Sdfr{
119146283Sdfr    UINT16                          Address;
119246283Sdfr    UINT8                           AddressLength;
119346283Sdfr
119446283Sdfr} ACPI_RESOURCE_FIXED_IO;
119546283Sdfr
119646283Sdfrtypedef struct acpi_resource_vendor
119746283Sdfr{
119846283Sdfr    UINT16                          ByteLength;
119946283Sdfr    UINT8                           ByteData[1];
120046283Sdfr
120146283Sdfr} ACPI_RESOURCE_VENDOR;
120246283Sdfr
120346283Sdfr/* Vendor resource with UUID info (introduced in ACPI 3.0) */
120446283Sdfr
120546283Sdfrtypedef struct acpi_resource_vendor_typed
120646283Sdfr{
120746283Sdfr    UINT16                          ByteLength;
120846283Sdfr    UINT8                           UuidSubtype;
120946283Sdfr    UINT8                           Uuid[ACPI_UUID_LENGTH];
121046283Sdfr    UINT8                           ByteData[1];
121146283Sdfr
121246283Sdfr} ACPI_RESOURCE_VENDOR_TYPED;
121346283Sdfr
121446283Sdfrtypedef struct acpi_resource_end_tag
121546283Sdfr{
121646283Sdfr    UINT8                           Checksum;
121746283Sdfr
121846283Sdfr} ACPI_RESOURCE_END_TAG;
121946283Sdfr
122046283Sdfrtypedef struct acpi_resource_memory24
122146283Sdfr{
122246283Sdfr    UINT8                           WriteProtect;
122346283Sdfr    UINT16                          Minimum;
122446283Sdfr    UINT16                          Maximum;
122546283Sdfr    UINT16                          Alignment;
122646283Sdfr    UINT16                          AddressLength;
122746283Sdfr
122846283Sdfr} ACPI_RESOURCE_MEMORY24;
122946283Sdfr
123046283Sdfrtypedef struct acpi_resource_memory32
123146283Sdfr{
123246283Sdfr    UINT8                           WriteProtect;
123346283Sdfr    UINT32                          Minimum;
123446283Sdfr    UINT32                          Maximum;
123546283Sdfr    UINT32                          Alignment;
123646283Sdfr    UINT32                          AddressLength;
123746283Sdfr
123846283Sdfr} ACPI_RESOURCE_MEMORY32;
123946283Sdfr
124046283Sdfrtypedef struct acpi_resource_fixed_memory32
124146283Sdfr{
124246283Sdfr    UINT8                           WriteProtect;
124346283Sdfr    UINT32                          Address;
124446283Sdfr    UINT32                          AddressLength;
124546283Sdfr
124646283Sdfr} ACPI_RESOURCE_FIXED_MEMORY32;
124746283Sdfr
124846283Sdfrtypedef struct acpi_memory_attribute
124946283Sdfr{
125046283Sdfr    UINT8                           WriteProtect;
125146283Sdfr    UINT8                           Caching;
125246283Sdfr    UINT8                           RangeType;
125346283Sdfr    UINT8                           Translation;
125446283Sdfr
125546283Sdfr} ACPI_MEMORY_ATTRIBUTE;
125646283Sdfr
125746283Sdfrtypedef struct acpi_io_attribute
125846283Sdfr{
125946283Sdfr    UINT8                           RangeType;
126046283Sdfr    UINT8                           Translation;
126146283Sdfr    UINT8                           TranslationType;
126246283Sdfr    UINT8                           Reserved1;
126346283Sdfr
126446283Sdfr} ACPI_IO_ATTRIBUTE;
126546283Sdfr
126646283Sdfrtypedef union acpi_resource_attribute
126746283Sdfr{
126846283Sdfr    ACPI_MEMORY_ATTRIBUTE           Mem;
126946283Sdfr    ACPI_IO_ATTRIBUTE               Io;
127098944Sobrien
127146283Sdfr    /* Used for the *WordSpace macros */
127246283Sdfr
127346283Sdfr    UINT8                           TypeSpecific;
127498944Sobrien
127546283Sdfr} ACPI_RESOURCE_ATTRIBUTE;
127646283Sdfr
127746283Sdfrtypedef struct acpi_resource_source
127898944Sobrien{
127946283Sdfr    UINT8                           Index;
128098944Sobrien    UINT16                          StringLength;
128146283Sdfr    char                            *StringPtr;
128246283Sdfr
128346283Sdfr} ACPI_RESOURCE_SOURCE;
128446283Sdfr
128546283Sdfr/* Fields common to all address descriptors, 16/32/64 bit */
128698944Sobrien
128746283Sdfr#define ACPI_RESOURCE_ADDRESS_COMMON \
128846283Sdfr    UINT8                           ResourceType; \
128946283Sdfr    UINT8                           ProducerConsumer; \
129046283Sdfr    UINT8                           Decode; \
129146283Sdfr    UINT8                           MinAddressFixed; \
129246283Sdfr    UINT8                           MaxAddressFixed; \
129398944Sobrien    ACPI_RESOURCE_ATTRIBUTE         Info;
129446283Sdfr
129546283Sdfrtypedef struct acpi_resource_address
129646283Sdfr{
129798944Sobrien    ACPI_RESOURCE_ADDRESS_COMMON
129846283Sdfr
129946283Sdfr} ACPI_RESOURCE_ADDRESS;
130046283Sdfr
130198944Sobrientypedef struct acpi_resource_address16
130246283Sdfr{
130398944Sobrien    ACPI_RESOURCE_ADDRESS_COMMON
130498944Sobrien    UINT16                          Granularity;
130598944Sobrien    UINT16                          Minimum;
130646283Sdfr    UINT16                          Maximum;
130746283Sdfr    UINT16                          TranslationOffset;
130846283Sdfr    UINT16                          AddressLength;
130946283Sdfr    ACPI_RESOURCE_SOURCE            ResourceSource;
131046283Sdfr
131146283Sdfr} ACPI_RESOURCE_ADDRESS16;
131246283Sdfr
131346283Sdfrtypedef struct acpi_resource_address32
131446283Sdfr{
131546283Sdfr    ACPI_RESOURCE_ADDRESS_COMMON
131698944Sobrien    UINT32                          Granularity;
131798944Sobrien    UINT32                          Minimum;
131898944Sobrien    UINT32                          Maximum;
131998944Sobrien    UINT32                          TranslationOffset;
132098944Sobrien    UINT32                          AddressLength;
132146283Sdfr    ACPI_RESOURCE_SOURCE            ResourceSource;
132298944Sobrien
132398944Sobrien} ACPI_RESOURCE_ADDRESS32;
132498944Sobrien
132598944Sobrientypedef struct acpi_resource_address64
132698944Sobrien{
132798944Sobrien    ACPI_RESOURCE_ADDRESS_COMMON
132898944Sobrien    UINT64                          Granularity;
132998944Sobrien    UINT64                          Minimum;
133098944Sobrien    UINT64                          Maximum;
133146283Sdfr    UINT64                          TranslationOffset;
133298944Sobrien    UINT64                          AddressLength;
133398944Sobrien    ACPI_RESOURCE_SOURCE            ResourceSource;
133498944Sobrien
133546283Sdfr} ACPI_RESOURCE_ADDRESS64;
133698944Sobrien
133746283Sdfrtypedef struct acpi_resource_extended_address64
133898944Sobrien{
133998944Sobrien    ACPI_RESOURCE_ADDRESS_COMMON
134046283Sdfr    UINT8                           RevisionID;
134146283Sdfr    UINT64                          Granularity;
134246283Sdfr    UINT64                          Minimum;
134346283Sdfr    UINT64                          Maximum;
134498944Sobrien    UINT64                          TranslationOffset;
134598944Sobrien    UINT64                          AddressLength;
134698944Sobrien    UINT64                          TypeSpecific;
134746283Sdfr
134898944Sobrien} ACPI_RESOURCE_EXTENDED_ADDRESS64;
134998944Sobrien
135098944Sobrientypedef struct acpi_resource_extended_irq
135198944Sobrien{
135246283Sdfr    UINT8                           ProducerConsumer;
135346283Sdfr    UINT8                           Triggering;
135498944Sobrien    UINT8                           Polarity;
135598944Sobrien    UINT8                           Sharable;
135646283Sdfr    UINT8                           InterruptCount;
135798944Sobrien    ACPI_RESOURCE_SOURCE            ResourceSource;
135898944Sobrien    UINT32                          Interrupts[1];
135946283Sdfr
136098944Sobrien} ACPI_RESOURCE_EXTENDED_IRQ;
136146283Sdfr
136298944Sobrientypedef struct acpi_resource_generic_register
136346283Sdfr{
136446283Sdfr    UINT8                           SpaceId;
136546283Sdfr    UINT8                           BitWidth;
136646283Sdfr    UINT8                           BitOffset;
136746283Sdfr    UINT8                           AccessSize;
136898944Sobrien    UINT64                          Address;
136946283Sdfr
137046283Sdfr} ACPI_RESOURCE_GENERIC_REGISTER;
137146283Sdfr
137246283Sdfr
137346283Sdfr/* ACPI_RESOURCE_TYPEs */
137498944Sobrien
137546283Sdfr#define ACPI_RESOURCE_TYPE_IRQ                  0
137698944Sobrien#define ACPI_RESOURCE_TYPE_DMA                  1
137746283Sdfr#define ACPI_RESOURCE_TYPE_START_DEPENDENT      2
137898944Sobrien#define ACPI_RESOURCE_TYPE_END_DEPENDENT        3
137946283Sdfr#define ACPI_RESOURCE_TYPE_IO                   4
138098944Sobrien#define ACPI_RESOURCE_TYPE_FIXED_IO             5
138146283Sdfr#define ACPI_RESOURCE_TYPE_VENDOR               6
138298944Sobrien#define ACPI_RESOURCE_TYPE_END_TAG              7
138398944Sobrien#define ACPI_RESOURCE_TYPE_MEMORY24             8
138498944Sobrien#define ACPI_RESOURCE_TYPE_MEMORY32             9
138598944Sobrien#define ACPI_RESOURCE_TYPE_FIXED_MEMORY32       10
138646283Sdfr#define ACPI_RESOURCE_TYPE_ADDRESS16            11
138798944Sobrien#define ACPI_RESOURCE_TYPE_ADDRESS32            12
138846283Sdfr#define ACPI_RESOURCE_TYPE_ADDRESS64            13
138998944Sobrien#define ACPI_RESOURCE_TYPE_EXTENDED_ADDRESS64   14  /* ACPI 3.0 */
139098944Sobrien#define ACPI_RESOURCE_TYPE_EXTENDED_IRQ         15
139146283Sdfr#define ACPI_RESOURCE_TYPE_GENERIC_REGISTER     16
139298944Sobrien#define ACPI_RESOURCE_TYPE_MAX                  16
139346283Sdfr
139446283Sdfr
139546283Sdfrtypedef union acpi_resource_data
139646283Sdfr{
139746283Sdfr    ACPI_RESOURCE_IRQ                       Irq;
139846283Sdfr    ACPI_RESOURCE_DMA                       Dma;
139946283Sdfr    ACPI_RESOURCE_START_DEPENDENT           StartDpf;
140046283Sdfr    ACPI_RESOURCE_IO                        Io;
140146283Sdfr    ACPI_RESOURCE_FIXED_IO                  FixedIo;
140246283Sdfr    ACPI_RESOURCE_VENDOR                    Vendor;
140398944Sobrien    ACPI_RESOURCE_VENDOR_TYPED              VendorTyped;
140446283Sdfr    ACPI_RESOURCE_END_TAG                   EndTag;
140546283Sdfr    ACPI_RESOURCE_MEMORY24                  Memory24;
140646283Sdfr    ACPI_RESOURCE_MEMORY32                  Memory32;
140798944Sobrien    ACPI_RESOURCE_FIXED_MEMORY32            FixedMemory32;
140846283Sdfr    ACPI_RESOURCE_ADDRESS16                 Address16;
140998944Sobrien    ACPI_RESOURCE_ADDRESS32                 Address32;
141046283Sdfr    ACPI_RESOURCE_ADDRESS64                 Address64;
141146283Sdfr    ACPI_RESOURCE_EXTENDED_ADDRESS64        ExtAddress64;
141246283Sdfr    ACPI_RESOURCE_EXTENDED_IRQ              ExtendedIrq;
141398944Sobrien    ACPI_RESOURCE_GENERIC_REGISTER          GenericReg;
141498944Sobrien
141598944Sobrien    /* Common fields */
141646283Sdfr
141746283Sdfr    ACPI_RESOURCE_ADDRESS                   Address;        /* Common 16/32/64 address fields */
141846283Sdfr
141946283Sdfr} ACPI_RESOURCE_DATA;
142098944Sobrien
142198944Sobrien
142246283Sdfrtypedef struct acpi_resource
142346283Sdfr{
142446283Sdfr    UINT32                          Type;
142546283Sdfr    UINT32                          Length;
142646283Sdfr    ACPI_RESOURCE_DATA              Data;
142798944Sobrien
142846283Sdfr} ACPI_RESOURCE;
142998944Sobrien
143046283Sdfr/* restore default alignment */
143146283Sdfr
143298944Sobrien#pragma pack()
143398944Sobrien
143446283Sdfr
143546283Sdfr#define ACPI_RS_SIZE_MIN                    12
143646283Sdfr#define ACPI_RS_SIZE_NO_DATA                8       /* Id + Length fields */
143746283Sdfr#define ACPI_RS_SIZE(Type)                  (UINT32) (ACPI_RS_SIZE_NO_DATA + sizeof (Type))
143846283Sdfr
143998944Sobrien#define ACPI_NEXT_RESOURCE(Res)             (ACPI_RESOURCE *)((UINT8 *) Res + Res->Length)
144046283Sdfr
144146283Sdfr
144246283Sdfrtypedef struct acpi_pci_routing_table
144346283Sdfr{
144446283Sdfr    UINT32                          Length;
144598944Sobrien    UINT32                          Pin;
144646283Sdfr    ACPI_INTEGER                    Address;        /* here for 64-bit alignment */
144746283Sdfr    UINT32                          SourceIndex;
144846283Sdfr    char                            Source[4];      /* pad to 64 bits so sizeof() works in all cases */
144946283Sdfr
145046283Sdfr} ACPI_PCI_ROUTING_TABLE;
145198944Sobrien
145246283Sdfr
145346283Sdfr#endif /* __ACTYPES_H__ */
145446283Sdfr