xref: /illumos-gate/usr/src/uts/intel/sys/acpi/actypes.h (revision db2bae30)
17c478bd9Sstevel@tonic-gate /******************************************************************************
27c478bd9Sstevel@tonic-gate  *
37c478bd9Sstevel@tonic-gate  * Name: actypes.h - Common data types for the entire ACPI subsystem
4*db2bae30SDana Myers  *       $Revision: 1.323 $
57c478bd9Sstevel@tonic-gate  *
67c478bd9Sstevel@tonic-gate  *****************************************************************************/
77c478bd9Sstevel@tonic-gate 
87c478bd9Sstevel@tonic-gate /******************************************************************************
97c478bd9Sstevel@tonic-gate  *
107c478bd9Sstevel@tonic-gate  * 1. Copyright Notice
117c478bd9Sstevel@tonic-gate  *
12*db2bae30SDana Myers  * Some or all of this work - Copyright (c) 1999 - 2008, Intel Corp.
137c478bd9Sstevel@tonic-gate  * All rights reserved.
147c478bd9Sstevel@tonic-gate  *
157c478bd9Sstevel@tonic-gate  * 2. License
167c478bd9Sstevel@tonic-gate  *
177c478bd9Sstevel@tonic-gate  * 2.1. This is your license from Intel Corp. under its intellectual property
187c478bd9Sstevel@tonic-gate  * rights.  You may have additional license terms from the party that provided
197c478bd9Sstevel@tonic-gate  * you this software, covering your right to use that party's intellectual
207c478bd9Sstevel@tonic-gate  * property rights.
217c478bd9Sstevel@tonic-gate  *
227c478bd9Sstevel@tonic-gate  * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a
237c478bd9Sstevel@tonic-gate  * copy of the source code appearing in this file ("Covered Code") an
247c478bd9Sstevel@tonic-gate  * irrevocable, perpetual, worldwide license under Intel's copyrights in the
257c478bd9Sstevel@tonic-gate  * base code distributed originally by Intel ("Original Intel Code") to copy,
267c478bd9Sstevel@tonic-gate  * make derivatives, distribute, use and display any portion of the Covered
277c478bd9Sstevel@tonic-gate  * Code in any form, with the right to sublicense such rights; and
287c478bd9Sstevel@tonic-gate  *
297c478bd9Sstevel@tonic-gate  * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent
307c478bd9Sstevel@tonic-gate  * license (with the right to sublicense), under only those claims of Intel
317c478bd9Sstevel@tonic-gate  * patents that are infringed by the Original Intel Code, to make, use, sell,
327c478bd9Sstevel@tonic-gate  * offer to sell, and import the Covered Code and derivative works thereof
337c478bd9Sstevel@tonic-gate  * solely to the minimum extent necessary to exercise the above copyright
347c478bd9Sstevel@tonic-gate  * license, and in no event shall the patent license extend to any additions
357c478bd9Sstevel@tonic-gate  * to or modifications of the Original Intel Code.  No other license or right
367c478bd9Sstevel@tonic-gate  * is granted directly or by implication, estoppel or otherwise;
377c478bd9Sstevel@tonic-gate  *
387c478bd9Sstevel@tonic-gate  * The above copyright and patent license is granted only if the following
397c478bd9Sstevel@tonic-gate  * conditions are met:
407c478bd9Sstevel@tonic-gate  *
417c478bd9Sstevel@tonic-gate  * 3. Conditions
427c478bd9Sstevel@tonic-gate  *
437c478bd9Sstevel@tonic-gate  * 3.1. Redistribution of Source with Rights to Further Distribute Source.
447c478bd9Sstevel@tonic-gate  * Redistribution of source code of any substantial portion of the Covered
457c478bd9Sstevel@tonic-gate  * Code or modification with rights to further distribute source must include
467c478bd9Sstevel@tonic-gate  * the above Copyright Notice, the above License, this list of Conditions,
477c478bd9Sstevel@tonic-gate  * and the following Disclaimer and Export Compliance provision.  In addition,
487c478bd9Sstevel@tonic-gate  * Licensee must cause all Covered Code to which Licensee contributes to
497c478bd9Sstevel@tonic-gate  * contain a file documenting the changes Licensee made to create that Covered
507c478bd9Sstevel@tonic-gate  * Code and the date of any change.  Licensee must include in that file the
517c478bd9Sstevel@tonic-gate  * documentation of any changes made by any predecessor Licensee.  Licensee
527c478bd9Sstevel@tonic-gate  * must include a prominent statement that the modification is derived,
537c478bd9Sstevel@tonic-gate  * directly or indirectly, from Original Intel Code.
547c478bd9Sstevel@tonic-gate  *
557c478bd9Sstevel@tonic-gate  * 3.2. Redistribution of Source with no Rights to Further Distribute Source.
567c478bd9Sstevel@tonic-gate  * Redistribution of source code of any substantial portion of the Covered
577c478bd9Sstevel@tonic-gate  * Code or modification without rights to further distribute source must
587c478bd9Sstevel@tonic-gate  * include the following Disclaimer and Export Compliance provision in the
597c478bd9Sstevel@tonic-gate  * documentation and/or other materials provided with distribution.  In
607c478bd9Sstevel@tonic-gate  * addition, Licensee may not authorize further sublicense of source of any
617c478bd9Sstevel@tonic-gate  * portion of the Covered Code, and must include terms to the effect that the
627c478bd9Sstevel@tonic-gate  * license from Licensee to its licensee is limited to the intellectual
637c478bd9Sstevel@tonic-gate  * property embodied in the software Licensee provides to its licensee, and
647c478bd9Sstevel@tonic-gate  * not to intellectual property embodied in modifications its licensee may
657c478bd9Sstevel@tonic-gate  * make.
667c478bd9Sstevel@tonic-gate  *
677c478bd9Sstevel@tonic-gate  * 3.3. Redistribution of Executable. Redistribution in executable form of any
687c478bd9Sstevel@tonic-gate  * substantial portion of the Covered Code or modification must reproduce the
697c478bd9Sstevel@tonic-gate  * above Copyright Notice, and the following Disclaimer and Export Compliance
707c478bd9Sstevel@tonic-gate  * provision in the documentation and/or other materials provided with the
717c478bd9Sstevel@tonic-gate  * distribution.
727c478bd9Sstevel@tonic-gate  *
737c478bd9Sstevel@tonic-gate  * 3.4. Intel retains all right, title, and interest in and to the Original
747c478bd9Sstevel@tonic-gate  * Intel Code.
757c478bd9Sstevel@tonic-gate  *
767c478bd9Sstevel@tonic-gate  * 3.5. Neither the name Intel nor any other trademark owned or controlled by
777c478bd9Sstevel@tonic-gate  * Intel shall be used in advertising or otherwise to promote the sale, use or
787c478bd9Sstevel@tonic-gate  * other dealings in products derived from or relating to the Covered Code
797c478bd9Sstevel@tonic-gate  * without prior written authorization from Intel.
807c478bd9Sstevel@tonic-gate  *
817c478bd9Sstevel@tonic-gate  * 4. Disclaimer and Export Compliance
827c478bd9Sstevel@tonic-gate  *
837c478bd9Sstevel@tonic-gate  * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED
847c478bd9Sstevel@tonic-gate  * HERE.  ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE
857c478bd9Sstevel@tonic-gate  * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT,  ASSISTANCE,
867c478bd9Sstevel@tonic-gate  * INSTALLATION, TRAINING OR OTHER SERVICES.  INTEL WILL NOT PROVIDE ANY
877c478bd9Sstevel@tonic-gate  * UPDATES, ENHANCEMENTS OR EXTENSIONS.  INTEL SPECIFICALLY DISCLAIMS ANY
887c478bd9Sstevel@tonic-gate  * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A
897c478bd9Sstevel@tonic-gate  * PARTICULAR PURPOSE.
907c478bd9Sstevel@tonic-gate  *
917c478bd9Sstevel@tonic-gate  * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES
927c478bd9Sstevel@tonic-gate  * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR
937c478bd9Sstevel@tonic-gate  * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT,
947c478bd9Sstevel@tonic-gate  * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY
957c478bd9Sstevel@tonic-gate  * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL
967c478bd9Sstevel@tonic-gate  * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.  THESE LIMITATIONS
977c478bd9Sstevel@tonic-gate  * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY
987c478bd9Sstevel@tonic-gate  * LIMITED REMEDY.
997c478bd9Sstevel@tonic-gate  *
1007c478bd9Sstevel@tonic-gate  * 4.3. Licensee shall not export, either directly or indirectly, any of this
1017c478bd9Sstevel@tonic-gate  * software or system incorporating such software without first obtaining any
1027c478bd9Sstevel@tonic-gate  * required license or other approval from the U. S. Department of Commerce or
1037c478bd9Sstevel@tonic-gate  * any other agency or department of the United States Government.  In the
1047c478bd9Sstevel@tonic-gate  * event Licensee exports any such software from the United States or
1057c478bd9Sstevel@tonic-gate  * re-exports any such software from a foreign destination, Licensee shall
1067c478bd9Sstevel@tonic-gate  * ensure that the distribution and export/re-export of the software is in
1077c478bd9Sstevel@tonic-gate  * compliance with all laws, regulations, orders, or other restrictions of the
1087c478bd9Sstevel@tonic-gate  * U.S. Export Administration Regulations. Licensee agrees that neither it nor
1097c478bd9Sstevel@tonic-gate  * any of its subsidiaries will export/re-export any technical data, process,
1107c478bd9Sstevel@tonic-gate  * software, or service, directly or indirectly, to any country for which the
1117c478bd9Sstevel@tonic-gate  * United States government or any agency thereof requires an export license,
1127c478bd9Sstevel@tonic-gate  * other governmental approval, or letter of assurance, without first obtaining
1137c478bd9Sstevel@tonic-gate  * such license, approval or letter.
1147c478bd9Sstevel@tonic-gate  *
1157c478bd9Sstevel@tonic-gate  *****************************************************************************/
1167c478bd9Sstevel@tonic-gate 
1177c478bd9Sstevel@tonic-gate #ifndef __ACTYPES_H__
1187c478bd9Sstevel@tonic-gate #define __ACTYPES_H__
1197c478bd9Sstevel@tonic-gate 
12027f7c583Smyers /* acpisrc:StructDefs -- for acpisrc conversion */
12127f7c583Smyers 
12230082d0cSmyers /*
12330082d0cSmyers  * ACPI_MACHINE_WIDTH must be specified in an OS- or compiler-dependent header
124*db2bae30SDana Myers  * and must be either 32 or 64. 16-bit ACPICA is no longer supported, as of
125*db2bae30SDana Myers  * 12/2006.
12630082d0cSmyers  */
12730082d0cSmyers #ifndef ACPI_MACHINE_WIDTH
12830082d0cSmyers #error ACPI_MACHINE_WIDTH not defined
12930082d0cSmyers #endif
1307c478bd9Sstevel@tonic-gate 
13130082d0cSmyers /*! [Begin] no source code translation */
1327c478bd9Sstevel@tonic-gate 
1337c478bd9Sstevel@tonic-gate /*
1347c478bd9Sstevel@tonic-gate  * Data type ranges
1357c478bd9Sstevel@tonic-gate  * Note: These macros are designed to be compiler independent as well as
1367c478bd9Sstevel@tonic-gate  * working around problems that some 32-bit compilers have with 64-bit
1377c478bd9Sstevel@tonic-gate  * constants.
1387c478bd9Sstevel@tonic-gate  */
1397c478bd9Sstevel@tonic-gate #define ACPI_UINT8_MAX                  (UINT8) (~((UINT8)  0)) /* 0xFF               */
1407c478bd9Sstevel@tonic-gate #define ACPI_UINT16_MAX                 (UINT16)(~((UINT16) 0)) /* 0xFFFF             */
1417c478bd9Sstevel@tonic-gate #define ACPI_UINT32_MAX                 (UINT32)(~((UINT32) 0)) /* 0xFFFFFFFF         */
1427c478bd9Sstevel@tonic-gate #define ACPI_UINT64_MAX                 (UINT64)(~((UINT64) 0)) /* 0xFFFFFFFFFFFFFFFF */
1437c478bd9Sstevel@tonic-gate #define ACPI_ASCII_MAX                  0x7F
1447c478bd9Sstevel@tonic-gate 
1457c478bd9Sstevel@tonic-gate 
1467c478bd9Sstevel@tonic-gate /*
14730082d0cSmyers  * Architecture-specific ACPICA Subsystem Data Types
14830082d0cSmyers  *
14930082d0cSmyers  * The goal of these types is to provide source code portability across
15030082d0cSmyers  * 16-bit, 32-bit, and 64-bit targets.
15130082d0cSmyers  *
15230082d0cSmyers  * 1) The following types are of fixed size for all targets (16/32/64):
15330082d0cSmyers  *
15430082d0cSmyers  * BOOLEAN      Logical boolean
15530082d0cSmyers  *
15630082d0cSmyers  * UINT8        8-bit  (1 byte) unsigned value
15730082d0cSmyers  * UINT16       16-bit (2 byte) unsigned value
15830082d0cSmyers  * UINT32       32-bit (4 byte) unsigned value
15930082d0cSmyers  * UINT64       64-bit (8 byte) unsigned value
16030082d0cSmyers  *
16130082d0cSmyers  * INT16        16-bit (2 byte) signed value
16230082d0cSmyers  * INT32        32-bit (4 byte) signed value
16330082d0cSmyers  * INT64        64-bit (8 byte) signed value
16430082d0cSmyers  *
16530082d0cSmyers  * COMPILER_DEPENDENT_UINT64/INT64 - These types are defined in the
16630082d0cSmyers  * compiler-dependent header(s) and were introduced because there is no common
16730082d0cSmyers  * 64-bit integer type across the various compilation models, as shown in
16830082d0cSmyers  * the table below.
16930082d0cSmyers  *
17030082d0cSmyers  * Datatype  LP64 ILP64 LLP64 ILP32 LP32 16bit
17130082d0cSmyers  * char      8    8     8     8     8    8
17230082d0cSmyers  * short     16   16    16    16    16   16
17330082d0cSmyers  * _int32         32
17430082d0cSmyers  * int       32   64    32    32    16   16
17530082d0cSmyers  * long      64   64    32    32    32   32
17630082d0cSmyers  * long long            64    64
17730082d0cSmyers  * pointer   64   64    64    32    32   32
17830082d0cSmyers  *
17930082d0cSmyers  * Note: ILP64 and LP32 are currently not supported.
18030082d0cSmyers  *
18130082d0cSmyers  *
18230082d0cSmyers  * 2) These types represent the native word size of the target mode of the
18330082d0cSmyers  * processor, and may be 16-bit, 32-bit, or 64-bit as required. They are
18430082d0cSmyers  * usually used for memory allocation, efficient loop counters, and array
18530082d0cSmyers  * indexes. The types are similar to the size_t type in the C library and are
18630082d0cSmyers  * required because there is no C type that consistently represents the native
187*db2bae30SDana Myers  * data width. ACPI_SIZE is needed because there is no guarantee that a
188*db2bae30SDana Myers  * kernel-level C library is present.
18930082d0cSmyers  *
19030082d0cSmyers  * ACPI_SIZE        16/32/64-bit unsigned value
19130082d0cSmyers  * ACPI_NATIVE_INT  16/32/64-bit signed value
19230082d0cSmyers  *
1937c478bd9Sstevel@tonic-gate  */
1947c478bd9Sstevel@tonic-gate 
19530082d0cSmyers /*******************************************************************************
19630082d0cSmyers  *
19730082d0cSmyers  * Common types for all compilers, all targets
19830082d0cSmyers  *
19930082d0cSmyers  ******************************************************************************/
2007c478bd9Sstevel@tonic-gate 
20130082d0cSmyers typedef unsigned char                   BOOLEAN;
20230082d0cSmyers typedef unsigned char                   UINT8;
20330082d0cSmyers typedef unsigned short                  UINT16;
20430082d0cSmyers typedef COMPILER_DEPENDENT_UINT64       UINT64;
20530082d0cSmyers typedef COMPILER_DEPENDENT_INT64        INT64;
2067c478bd9Sstevel@tonic-gate 
20730082d0cSmyers /*! [End] no source code translation !*/
2087c478bd9Sstevel@tonic-gate 
20930082d0cSmyers 
21030082d0cSmyers /*******************************************************************************
21130082d0cSmyers  *
21230082d0cSmyers  * Types specific to 64-bit targets
21330082d0cSmyers  *
21430082d0cSmyers  ******************************************************************************/
2157c478bd9Sstevel@tonic-gate 
2167c478bd9Sstevel@tonic-gate #if ACPI_MACHINE_WIDTH == 64
2177c478bd9Sstevel@tonic-gate 
21830082d0cSmyers /*! [Begin] no source code translation (keep the typedefs as-is) */
2197c478bd9Sstevel@tonic-gate 
2207c478bd9Sstevel@tonic-gate typedef unsigned int                    UINT32;
22130082d0cSmyers typedef int                             INT32;
2227c478bd9Sstevel@tonic-gate 
2237c478bd9Sstevel@tonic-gate /*! [End] no source code translation !*/
2247c478bd9Sstevel@tonic-gate 
22530082d0cSmyers 
22630082d0cSmyers typedef INT64                           ACPI_NATIVE_INT;
2277c478bd9Sstevel@tonic-gate 
228*db2bae30SDana Myers typedef UINT64                          ACPI_SIZE;
2297c478bd9Sstevel@tonic-gate typedef UINT64                          ACPI_IO_ADDRESS;
2307c478bd9Sstevel@tonic-gate typedef UINT64                          ACPI_PHYSICAL_ADDRESS;
2317c478bd9Sstevel@tonic-gate 
2327c478bd9Sstevel@tonic-gate #define ACPI_MAX_PTR                    ACPI_UINT64_MAX
2337c478bd9Sstevel@tonic-gate #define ACPI_SIZE_MAX                   ACPI_UINT64_MAX
2347c478bd9Sstevel@tonic-gate 
23530082d0cSmyers #define ACPI_USE_NATIVE_DIVIDE          /* Has native 64-bit integer support */
2367c478bd9Sstevel@tonic-gate 
2377c478bd9Sstevel@tonic-gate /*
23830082d0cSmyers  * In the case of the Itanium Processor Family (IPF), the hardware does not
23930082d0cSmyers  * support misaligned memory transfers. Set the MISALIGNMENT_NOT_SUPPORTED flag
24030082d0cSmyers  * to indicate that special precautions must be taken to avoid alignment faults.
24130082d0cSmyers  * (IA64 or ia64 is currently used by existing compilers to indicate IPF.)
24230082d0cSmyers  *
24330082d0cSmyers  * Note: EM64T and other X86-64 processors support misaligned transfers,
24430082d0cSmyers  * so there is no need to define this flag.
2457c478bd9Sstevel@tonic-gate  */
24630082d0cSmyers #if defined (__IA64__) || defined (__ia64__)
24730082d0cSmyers #define ACPI_MISALIGNMENT_NOT_SUPPORTED
24830082d0cSmyers #endif
2497c478bd9Sstevel@tonic-gate 
2507c478bd9Sstevel@tonic-gate 
25130082d0cSmyers /*******************************************************************************
25230082d0cSmyers  *
25330082d0cSmyers  * Types specific to 32-bit targets
25430082d0cSmyers  *
25530082d0cSmyers  ******************************************************************************/
25630082d0cSmyers 
25730082d0cSmyers #elif ACPI_MACHINE_WIDTH == 32
25830082d0cSmyers 
25930082d0cSmyers /*! [Begin] no source code translation (keep the typedefs as-is) */
26030082d0cSmyers 
26130082d0cSmyers typedef unsigned int                    UINT32;
26230082d0cSmyers typedef int                             INT32;
26330082d0cSmyers 
26430082d0cSmyers /*! [End] no source code translation !*/
26530082d0cSmyers 
26630082d0cSmyers 
26730082d0cSmyers typedef INT32                           ACPI_NATIVE_INT;
26830082d0cSmyers 
269*db2bae30SDana Myers typedef UINT32                          ACPI_SIZE;
27030082d0cSmyers typedef UINT32                          ACPI_IO_ADDRESS;
271*db2bae30SDana Myers typedef UINT32                          ACPI_PHYSICAL_ADDRESS;
27230082d0cSmyers 
27330082d0cSmyers #define ACPI_MAX_PTR                    ACPI_UINT32_MAX
27430082d0cSmyers #define ACPI_SIZE_MAX                   ACPI_UINT32_MAX
27530082d0cSmyers 
27630082d0cSmyers #else
2777c478bd9Sstevel@tonic-gate 
278*db2bae30SDana Myers /* ACPI_MACHINE_WIDTH must be either 64 or 32 */
2797c478bd9Sstevel@tonic-gate 
28030082d0cSmyers #error unknown ACPI_MACHINE_WIDTH
28130082d0cSmyers #endif
2827c478bd9Sstevel@tonic-gate 
2837c478bd9Sstevel@tonic-gate 
28430082d0cSmyers /*******************************************************************************
28530082d0cSmyers  *
28627f7c583Smyers  * OS-dependent and compiler-dependent types
28730082d0cSmyers  *
28827f7c583Smyers  * If the defaults below are not appropriate for the host system, they can
28930082d0cSmyers  * be defined in the compiler-specific or OS-specific header, and this will
29030082d0cSmyers  * take precedence.
29130082d0cSmyers  *
29230082d0cSmyers  ******************************************************************************/
29330082d0cSmyers 
29430082d0cSmyers 
29527f7c583Smyers /* Value returned by AcpiOsGetThreadId */
29627f7c583Smyers 
29727f7c583Smyers #ifndef ACPI_THREAD_ID
298*db2bae30SDana Myers #define ACPI_THREAD_ID                  ACPI_SIZE
2997c478bd9Sstevel@tonic-gate #endif
3007c478bd9Sstevel@tonic-gate 
30127f7c583Smyers /* Object returned from AcpiOsCreateLock */
30227f7c583Smyers 
30327f7c583Smyers #ifndef ACPI_SPINLOCK
30427f7c583Smyers #define ACPI_SPINLOCK                   void *
30530082d0cSmyers #endif
3067c478bd9Sstevel@tonic-gate 
30727f7c583Smyers /* Flags for AcpiOsAcquireLock/AcpiOsReleaseLock */
30827f7c583Smyers 
30930082d0cSmyers #ifndef ACPI_CPU_FLAGS
310*db2bae30SDana Myers #define ACPI_CPU_FLAGS                  ACPI_SIZE
31130082d0cSmyers #endif
31230082d0cSmyers 
31327f7c583Smyers /* Object returned from AcpiOsCreateCache */
31427f7c583Smyers 
31527f7c583Smyers #ifndef ACPI_CACHE_T
31627f7c583Smyers #define ACPI_CACHE_T                    ACPI_MEMORY_LIST
31727f7c583Smyers #endif
31827f7c583Smyers 
31927f7c583Smyers /* Use C99 uintptr_t for pointer casting if available, "void *" otherwise */
32027f7c583Smyers 
32127f7c583Smyers #ifndef ACPI_UINTPTR_T
32227f7c583Smyers #define ACPI_UINTPTR_T                  void *
32327f7c583Smyers #endif
32427f7c583Smyers 
32530082d0cSmyers /*
32630082d0cSmyers  * ACPI_PRINTF_LIKE is used to tag functions as "printf-like" because
32730082d0cSmyers  * some compilers can catch printf format string problems
32830082d0cSmyers  */
32930082d0cSmyers #ifndef ACPI_PRINTF_LIKE
33030082d0cSmyers #define ACPI_PRINTF_LIKE(c)
33130082d0cSmyers #endif
33230082d0cSmyers 
33330082d0cSmyers /*
33430082d0cSmyers  * Some compilers complain about unused variables. Sometimes we don't want to
33530082d0cSmyers  * use all the variables (for example, _AcpiModuleName). This allows us
33630082d0cSmyers  * to to tell the compiler in a per-variable manner that a variable
33730082d0cSmyers  * is unused
33830082d0cSmyers  */
33930082d0cSmyers #ifndef ACPI_UNUSED_VAR
34030082d0cSmyers #define ACPI_UNUSED_VAR
34130082d0cSmyers #endif
34230082d0cSmyers 
34327f7c583Smyers /*
34427f7c583Smyers  * All ACPICA functions that are available to the rest of the kernel are
34527f7c583Smyers  * tagged with this macro which can be defined as appropriate for the host.
34627f7c583Smyers  */
34727f7c583Smyers #ifndef ACPI_EXPORT_SYMBOL
34827f7c583Smyers #define ACPI_EXPORT_SYMBOL(Symbol)
34927f7c583Smyers #endif
35027f7c583Smyers 
35130082d0cSmyers 
35230082d0cSmyers /*******************************************************************************
35330082d0cSmyers  *
35430082d0cSmyers  * Independent types
35530082d0cSmyers  *
35630082d0cSmyers  ******************************************************************************/
3577c478bd9Sstevel@tonic-gate 
35830082d0cSmyers /* Logical defines and NULL */
35930082d0cSmyers 
3607c478bd9Sstevel@tonic-gate #ifdef FALSE
3617c478bd9Sstevel@tonic-gate #undef FALSE
3627c478bd9Sstevel@tonic-gate #endif
3637c478bd9Sstevel@tonic-gate #define FALSE                           (1 == 0)
3647c478bd9Sstevel@tonic-gate 
3657c478bd9Sstevel@tonic-gate #ifdef TRUE
3667c478bd9Sstevel@tonic-gate #undef TRUE
3677c478bd9Sstevel@tonic-gate #endif
3687c478bd9Sstevel@tonic-gate #define TRUE                            (1 == 1)
3697c478bd9Sstevel@tonic-gate 
3707c478bd9Sstevel@tonic-gate #ifndef NULL
3717c478bd9Sstevel@tonic-gate #define NULL                            (void *) 0
3727c478bd9Sstevel@tonic-gate #endif
3737c478bd9Sstevel@tonic-gate 
3747c478bd9Sstevel@tonic-gate 
3757c478bd9Sstevel@tonic-gate /*
37630082d0cSmyers  * Mescellaneous types
3777c478bd9Sstevel@tonic-gate  */
3787c478bd9Sstevel@tonic-gate typedef UINT32                          ACPI_STATUS;    /* All ACPI Exceptions */
3797c478bd9Sstevel@tonic-gate typedef UINT32                          ACPI_NAME;      /* 4-byte ACPI name */
3807c478bd9Sstevel@tonic-gate typedef char *                          ACPI_STRING;    /* Null terminated ASCII string */
38130082d0cSmyers typedef void *                          ACPI_HANDLE;    /* Actually a ptr to a NS Node */
3827c478bd9Sstevel@tonic-gate 
3837c478bd9Sstevel@tonic-gate typedef struct uint64_struct
3847c478bd9Sstevel@tonic-gate {
38527f7c583Smyers     UINT32                          Lo;
38627f7c583Smyers     UINT32                          Hi;
3877c478bd9Sstevel@tonic-gate 
3887c478bd9Sstevel@tonic-gate } UINT64_STRUCT;
3897c478bd9Sstevel@tonic-gate 
3907c478bd9Sstevel@tonic-gate typedef union uint64_overlay
3917c478bd9Sstevel@tonic-gate {
39227f7c583Smyers     UINT64                          Full;
39327f7c583Smyers     UINT64_STRUCT                   Part;
3947c478bd9Sstevel@tonic-gate 
3957c478bd9Sstevel@tonic-gate } UINT64_OVERLAY;
3967c478bd9Sstevel@tonic-gate 
3977c478bd9Sstevel@tonic-gate typedef struct uint32_struct
3987c478bd9Sstevel@tonic-gate {
39927f7c583Smyers     UINT32                          Lo;
40027f7c583Smyers     UINT32                          Hi;
4017c478bd9Sstevel@tonic-gate 
4027c478bd9Sstevel@tonic-gate } UINT32_STRUCT;
4037c478bd9Sstevel@tonic-gate 
4047c478bd9Sstevel@tonic-gate 
40527f7c583Smyers /* Synchronization objects */
40627f7c583Smyers 
40727f7c583Smyers #define ACPI_MUTEX                      void *
40827f7c583Smyers #define ACPI_SEMAPHORE                  void *
40927f7c583Smyers 
41027f7c583Smyers 
4117c478bd9Sstevel@tonic-gate /*
412*db2bae30SDana Myers  * Acpi integer width. In ACPI version 1, integers are 32 bits.  In ACPI
413*db2bae30SDana Myers  * version 2, integers are 64 bits. Note that this pertains to the ACPI integer
414*db2bae30SDana Myers  * type only, not other integers used in the implementation of the ACPI CA
4157c478bd9Sstevel@tonic-gate  * subsystem.
4167c478bd9Sstevel@tonic-gate  */
4177c478bd9Sstevel@tonic-gate typedef UINT64                          ACPI_INTEGER;
4187c478bd9Sstevel@tonic-gate #define ACPI_INTEGER_MAX                ACPI_UINT64_MAX
4197c478bd9Sstevel@tonic-gate #define ACPI_INTEGER_BIT_SIZE           64
4207c478bd9Sstevel@tonic-gate #define ACPI_MAX_DECIMAL_DIGITS         20  /* 2^64 = 18,446,744,073,709,551,616 */
4217c478bd9Sstevel@tonic-gate 
4227c478bd9Sstevel@tonic-gate 
4237c478bd9Sstevel@tonic-gate #if ACPI_MACHINE_WIDTH == 64
4247c478bd9Sstevel@tonic-gate #define ACPI_USE_NATIVE_DIVIDE          /* Use compiler native 64-bit divide */
4257c478bd9Sstevel@tonic-gate #endif
4267c478bd9Sstevel@tonic-gate 
4277c478bd9Sstevel@tonic-gate #define ACPI_MAX64_DECIMAL_DIGITS       20
4287c478bd9Sstevel@tonic-gate #define ACPI_MAX32_DECIMAL_DIGITS       10
4297c478bd9Sstevel@tonic-gate #define ACPI_MAX16_DECIMAL_DIGITS        5
4307c478bd9Sstevel@tonic-gate #define ACPI_MAX8_DECIMAL_DIGITS         3
4317c478bd9Sstevel@tonic-gate 
4327c478bd9Sstevel@tonic-gate /*
4337c478bd9Sstevel@tonic-gate  * Constants with special meanings
4347c478bd9Sstevel@tonic-gate  */
43530082d0cSmyers #define ACPI_ROOT_OBJECT                ACPI_ADD_PTR (ACPI_HANDLE, NULL, ACPI_MAX_PTR)
4367c478bd9Sstevel@tonic-gate 
4377c478bd9Sstevel@tonic-gate 
4387c478bd9Sstevel@tonic-gate /*
4397c478bd9Sstevel@tonic-gate  * Initialization sequence
4407c478bd9Sstevel@tonic-gate  */
4417c478bd9Sstevel@tonic-gate #define ACPI_FULL_INITIALIZATION        0x00
4427c478bd9Sstevel@tonic-gate #define ACPI_NO_ADDRESS_SPACE_INIT      0x01
4437c478bd9Sstevel@tonic-gate #define ACPI_NO_HARDWARE_INIT           0x02
4447c478bd9Sstevel@tonic-gate #define ACPI_NO_EVENT_INIT              0x04
4457c478bd9Sstevel@tonic-gate #define ACPI_NO_HANDLER_INIT            0x08
4467c478bd9Sstevel@tonic-gate #define ACPI_NO_ACPI_ENABLE             0x10
4477c478bd9Sstevel@tonic-gate #define ACPI_NO_DEVICE_INIT             0x20
4487c478bd9Sstevel@tonic-gate #define ACPI_NO_OBJECT_INIT             0x40
4497c478bd9Sstevel@tonic-gate 
4507c478bd9Sstevel@tonic-gate /*
4517c478bd9Sstevel@tonic-gate  * Initialization state
4527c478bd9Sstevel@tonic-gate  */
453*db2bae30SDana Myers #define ACPI_SUBSYSTEM_INITIALIZE       0x01
454*db2bae30SDana Myers #define ACPI_INITIALIZED_OK             0x02
4557c478bd9Sstevel@tonic-gate 
4567c478bd9Sstevel@tonic-gate /*
4577c478bd9Sstevel@tonic-gate  * Power state values
4587c478bd9Sstevel@tonic-gate  */
4597c478bd9Sstevel@tonic-gate #define ACPI_STATE_UNKNOWN              (UINT8) 0xFF
4607c478bd9Sstevel@tonic-gate 
4617c478bd9Sstevel@tonic-gate #define ACPI_STATE_S0                   (UINT8) 0
4627c478bd9Sstevel@tonic-gate #define ACPI_STATE_S1                   (UINT8) 1
4637c478bd9Sstevel@tonic-gate #define ACPI_STATE_S2                   (UINT8) 2
4647c478bd9Sstevel@tonic-gate #define ACPI_STATE_S3                   (UINT8) 3
4657c478bd9Sstevel@tonic-gate #define ACPI_STATE_S4                   (UINT8) 4
4667c478bd9Sstevel@tonic-gate #define ACPI_STATE_S5                   (UINT8) 5
4677c478bd9Sstevel@tonic-gate #define ACPI_S_STATES_MAX               ACPI_STATE_S5
4687c478bd9Sstevel@tonic-gate #define ACPI_S_STATE_COUNT              6
4697c478bd9Sstevel@tonic-gate 
4707c478bd9Sstevel@tonic-gate #define ACPI_STATE_D0                   (UINT8) 0
4717c478bd9Sstevel@tonic-gate #define ACPI_STATE_D1                   (UINT8) 1
4727c478bd9Sstevel@tonic-gate #define ACPI_STATE_D2                   (UINT8) 2
4737c478bd9Sstevel@tonic-gate #define ACPI_STATE_D3                   (UINT8) 3
4747c478bd9Sstevel@tonic-gate #define ACPI_D_STATES_MAX               ACPI_STATE_D3
4757c478bd9Sstevel@tonic-gate #define ACPI_D_STATE_COUNT              4
4767c478bd9Sstevel@tonic-gate 
4777c478bd9Sstevel@tonic-gate #define ACPI_STATE_C0                   (UINT8) 0
4787c478bd9Sstevel@tonic-gate #define ACPI_STATE_C1                   (UINT8) 1
4797c478bd9Sstevel@tonic-gate #define ACPI_STATE_C2                   (UINT8) 2
4807c478bd9Sstevel@tonic-gate #define ACPI_STATE_C3                   (UINT8) 3
4817c478bd9Sstevel@tonic-gate #define ACPI_C_STATES_MAX               ACPI_STATE_C3
4827c478bd9Sstevel@tonic-gate #define ACPI_C_STATE_COUNT              4
4837c478bd9Sstevel@tonic-gate 
4847c478bd9Sstevel@tonic-gate /*
4857c478bd9Sstevel@tonic-gate  * Sleep type invalid value
4867c478bd9Sstevel@tonic-gate  */
4877c478bd9Sstevel@tonic-gate #define ACPI_SLEEP_TYPE_MAX             0x7
4887c478bd9Sstevel@tonic-gate #define ACPI_SLEEP_TYPE_INVALID         0xFF
4897c478bd9Sstevel@tonic-gate 
4907c478bd9Sstevel@tonic-gate /*
4917c478bd9Sstevel@tonic-gate  * Standard notify values
4927c478bd9Sstevel@tonic-gate  */
493*db2bae30SDana Myers #define ACPI_NOTIFY_BUS_CHECK           (UINT8) 0x00
494*db2bae30SDana Myers #define ACPI_NOTIFY_DEVICE_CHECK        (UINT8) 0x01
495*db2bae30SDana Myers #define ACPI_NOTIFY_DEVICE_WAKE         (UINT8) 0x02
496*db2bae30SDana Myers #define ACPI_NOTIFY_EJECT_REQUEST       (UINT8) 0x03
497*db2bae30SDana Myers #define ACPI_NOTIFY_DEVICE_CHECK_LIGHT  (UINT8) 0x04
498*db2bae30SDana Myers #define ACPI_NOTIFY_FREQUENCY_MISMATCH  (UINT8) 0x05
499*db2bae30SDana Myers #define ACPI_NOTIFY_BUS_MODE_MISMATCH   (UINT8) 0x06
500*db2bae30SDana Myers #define ACPI_NOTIFY_POWER_FAULT         (UINT8) 0x07
501*db2bae30SDana Myers #define ACPI_NOTIFY_CAPABILITIES_CHECK  (UINT8) 0x08
502*db2bae30SDana Myers #define ACPI_NOTIFY_DEVICE_PLD_CHECK    (UINT8) 0x09
503*db2bae30SDana Myers #define ACPI_NOTIFY_RESERVED            (UINT8) 0x0A
504*db2bae30SDana Myers #define ACPI_NOTIFY_LOCALITY_UPDATE     (UINT8) 0x0B
505*db2bae30SDana Myers 
506*db2bae30SDana Myers #define ACPI_NOTIFY_MAX                 0x0B
5077c478bd9Sstevel@tonic-gate 
5087c478bd9Sstevel@tonic-gate /*
5097c478bd9Sstevel@tonic-gate  * Types associated with ACPI names and objects.  The first group of
5107c478bd9Sstevel@tonic-gate  * values (up to ACPI_TYPE_EXTERNAL_MAX) correspond to the definition
5117c478bd9Sstevel@tonic-gate  * of the ACPI ObjectType() operator (See the ACPI Spec).  Therefore,
5127c478bd9Sstevel@tonic-gate  * only add to the first group if the spec changes.
5137c478bd9Sstevel@tonic-gate  *
5147c478bd9Sstevel@tonic-gate  * NOTE: Types must be kept in sync with the global AcpiNsProperties
5157c478bd9Sstevel@tonic-gate  * and AcpiNsTypeNames arrays.
5167c478bd9Sstevel@tonic-gate  */
5177c478bd9Sstevel@tonic-gate typedef UINT32                          ACPI_OBJECT_TYPE;
5187c478bd9Sstevel@tonic-gate 
5197c478bd9Sstevel@tonic-gate #define ACPI_TYPE_ANY                   0x00
5207c478bd9Sstevel@tonic-gate #define ACPI_TYPE_INTEGER               0x01  /* Byte/Word/Dword/Zero/One/Ones */
5217c478bd9Sstevel@tonic-gate #define ACPI_TYPE_STRING                0x02
5227c478bd9Sstevel@tonic-gate #define ACPI_TYPE_BUFFER                0x03
5237c478bd9Sstevel@tonic-gate #define ACPI_TYPE_PACKAGE               0x04  /* ByteConst, multiple DataTerm/Constant/SuperName */
5247c478bd9Sstevel@tonic-gate #define ACPI_TYPE_FIELD_UNIT            0x05
5257c478bd9Sstevel@tonic-gate #define ACPI_TYPE_DEVICE                0x06  /* Name, multiple Node */
5267c478bd9Sstevel@tonic-gate #define ACPI_TYPE_EVENT                 0x07
5277c478bd9Sstevel@tonic-gate #define ACPI_TYPE_METHOD                0x08  /* Name, ByteConst, multiple Code */
5287c478bd9Sstevel@tonic-gate #define ACPI_TYPE_MUTEX                 0x09
5297c478bd9Sstevel@tonic-gate #define ACPI_TYPE_REGION                0x0A
5307c478bd9Sstevel@tonic-gate #define ACPI_TYPE_POWER                 0x0B  /* Name,ByteConst,WordConst,multi Node */
5317c478bd9Sstevel@tonic-gate #define ACPI_TYPE_PROCESSOR             0x0C  /* Name,ByteConst,DWordConst,ByteConst,multi NmO */
5327c478bd9Sstevel@tonic-gate #define ACPI_TYPE_THERMAL               0x0D  /* Name, multiple Node */
5337c478bd9Sstevel@tonic-gate #define ACPI_TYPE_BUFFER_FIELD          0x0E
5347c478bd9Sstevel@tonic-gate #define ACPI_TYPE_DDB_HANDLE            0x0F
5357c478bd9Sstevel@tonic-gate #define ACPI_TYPE_DEBUG_OBJECT          0x10
5367c478bd9Sstevel@tonic-gate 
5377c478bd9Sstevel@tonic-gate #define ACPI_TYPE_EXTERNAL_MAX          0x10
5387c478bd9Sstevel@tonic-gate 
5397c478bd9Sstevel@tonic-gate /*
5407c478bd9Sstevel@tonic-gate  * These are object types that do not map directly to the ACPI
5417c478bd9Sstevel@tonic-gate  * ObjectType() operator. They are used for various internal purposes only.
5427c478bd9Sstevel@tonic-gate  * If new predefined ACPI_TYPEs are added (via the ACPI specification), these
5437c478bd9Sstevel@tonic-gate  * internal types must move upwards. (There is code that depends on these
5447c478bd9Sstevel@tonic-gate  * values being contiguous with the external types above.)
5457c478bd9Sstevel@tonic-gate  */
5467c478bd9Sstevel@tonic-gate #define ACPI_TYPE_LOCAL_REGION_FIELD    0x11
5477c478bd9Sstevel@tonic-gate #define ACPI_TYPE_LOCAL_BANK_FIELD      0x12
5487c478bd9Sstevel@tonic-gate #define ACPI_TYPE_LOCAL_INDEX_FIELD     0x13
5497c478bd9Sstevel@tonic-gate #define ACPI_TYPE_LOCAL_REFERENCE       0x14  /* Arg#, Local#, Name, Debug, RefOf, Index */
5507c478bd9Sstevel@tonic-gate #define ACPI_TYPE_LOCAL_ALIAS           0x15
5517c478bd9Sstevel@tonic-gate #define ACPI_TYPE_LOCAL_METHOD_ALIAS    0x16
5527c478bd9Sstevel@tonic-gate #define ACPI_TYPE_LOCAL_NOTIFY          0x17
5537c478bd9Sstevel@tonic-gate #define ACPI_TYPE_LOCAL_ADDRESS_HANDLER 0x18
5547c478bd9Sstevel@tonic-gate #define ACPI_TYPE_LOCAL_RESOURCE        0x19
5557c478bd9Sstevel@tonic-gate #define ACPI_TYPE_LOCAL_RESOURCE_FIELD  0x1A
5567c478bd9Sstevel@tonic-gate #define ACPI_TYPE_LOCAL_SCOPE           0x1B  /* 1 Name, multiple ObjectList Nodes */
5577c478bd9Sstevel@tonic-gate 
5587c478bd9Sstevel@tonic-gate #define ACPI_TYPE_NS_NODE_MAX           0x1B  /* Last typecode used within a NS Node */
5597c478bd9Sstevel@tonic-gate 
5607c478bd9Sstevel@tonic-gate /*
5617c478bd9Sstevel@tonic-gate  * These are special object types that never appear in
5627c478bd9Sstevel@tonic-gate  * a Namespace node, only in an ACPI_OPERAND_OBJECT
5637c478bd9Sstevel@tonic-gate  */
5647c478bd9Sstevel@tonic-gate #define ACPI_TYPE_LOCAL_EXTRA           0x1C
5657c478bd9Sstevel@tonic-gate #define ACPI_TYPE_LOCAL_DATA            0x1D
5667c478bd9Sstevel@tonic-gate 
5677c478bd9Sstevel@tonic-gate #define ACPI_TYPE_LOCAL_MAX             0x1D
5687c478bd9Sstevel@tonic-gate 
5697c478bd9Sstevel@tonic-gate /* All types above here are invalid */
5707c478bd9Sstevel@tonic-gate 
5717c478bd9Sstevel@tonic-gate #define ACPI_TYPE_INVALID               0x1E
5727c478bd9Sstevel@tonic-gate #define ACPI_TYPE_NOT_FOUND             0xFF
5737c478bd9Sstevel@tonic-gate 
574*db2bae30SDana Myers #define ACPI_NUM_NS_TYPES               (ACPI_TYPE_INVALID + 1)
575*db2bae30SDana Myers 
576*db2bae30SDana Myers 
5777c478bd9Sstevel@tonic-gate /*
5787c478bd9Sstevel@tonic-gate  * All I/O
5797c478bd9Sstevel@tonic-gate  */
5807c478bd9Sstevel@tonic-gate #define ACPI_READ                       0
5817c478bd9Sstevel@tonic-gate #define ACPI_WRITE                      1
5827c478bd9Sstevel@tonic-gate #define ACPI_IO_MASK                    1
5837c478bd9Sstevel@tonic-gate 
5847c478bd9Sstevel@tonic-gate /*
5857c478bd9Sstevel@tonic-gate  * Event Types: Fixed & General Purpose
5867c478bd9Sstevel@tonic-gate  */
5877c478bd9Sstevel@tonic-gate typedef UINT32                          ACPI_EVENT_TYPE;
5887c478bd9Sstevel@tonic-gate 
5897c478bd9Sstevel@tonic-gate /*
5907c478bd9Sstevel@tonic-gate  * Fixed events
5917c478bd9Sstevel@tonic-gate  */
5927c478bd9Sstevel@tonic-gate #define ACPI_EVENT_PMTIMER              0
5937c478bd9Sstevel@tonic-gate #define ACPI_EVENT_GLOBAL               1
5947c478bd9Sstevel@tonic-gate #define ACPI_EVENT_POWER_BUTTON         2
5957c478bd9Sstevel@tonic-gate #define ACPI_EVENT_SLEEP_BUTTON         3
5967c478bd9Sstevel@tonic-gate #define ACPI_EVENT_RTC                  4
5977c478bd9Sstevel@tonic-gate #define ACPI_EVENT_MAX                  4
5987c478bd9Sstevel@tonic-gate #define ACPI_NUM_FIXED_EVENTS           ACPI_EVENT_MAX + 1
5997c478bd9Sstevel@tonic-gate 
6007c478bd9Sstevel@tonic-gate /*
6017c478bd9Sstevel@tonic-gate  * Event Status - Per event
6027c478bd9Sstevel@tonic-gate  * -------------
6037c478bd9Sstevel@tonic-gate  * The encoding of ACPI_EVENT_STATUS is illustrated below.
6047c478bd9Sstevel@tonic-gate  * Note that a set bit (1) indicates the property is TRUE
6057c478bd9Sstevel@tonic-gate  * (e.g. if bit 0 is set then the event is enabled).
6067c478bd9Sstevel@tonic-gate  * +-------------+-+-+-+
6077c478bd9Sstevel@tonic-gate  * |   Bits 31:3 |2|1|0|
6087c478bd9Sstevel@tonic-gate  * +-------------+-+-+-+
6097c478bd9Sstevel@tonic-gate  *          |     | | |
6107c478bd9Sstevel@tonic-gate  *          |     | | +- Enabled?
6117c478bd9Sstevel@tonic-gate  *          |     | +--- Enabled for wake?
6127c478bd9Sstevel@tonic-gate  *          |     +----- Set?
6137c478bd9Sstevel@tonic-gate  *          +----------- <Reserved>
6147c478bd9Sstevel@tonic-gate  */
6157c478bd9Sstevel@tonic-gate typedef UINT32                          ACPI_EVENT_STATUS;
6167c478bd9Sstevel@tonic-gate 
6177c478bd9Sstevel@tonic-gate #define ACPI_EVENT_FLAG_DISABLED        (ACPI_EVENT_STATUS) 0x00
6187c478bd9Sstevel@tonic-gate #define ACPI_EVENT_FLAG_ENABLED         (ACPI_EVENT_STATUS) 0x01
6197c478bd9Sstevel@tonic-gate #define ACPI_EVENT_FLAG_WAKE_ENABLED    (ACPI_EVENT_STATUS) 0x02
6207c478bd9Sstevel@tonic-gate #define ACPI_EVENT_FLAG_SET             (ACPI_EVENT_STATUS) 0x04
6217c478bd9Sstevel@tonic-gate 
6227c478bd9Sstevel@tonic-gate /*
6237c478bd9Sstevel@tonic-gate  * General Purpose Events (GPE)
6247c478bd9Sstevel@tonic-gate  */
6257c478bd9Sstevel@tonic-gate #define ACPI_GPE_INVALID                0xFF
6267c478bd9Sstevel@tonic-gate #define ACPI_GPE_MAX                    0xFF
6277c478bd9Sstevel@tonic-gate #define ACPI_NUM_GPE                    256
6287c478bd9Sstevel@tonic-gate 
6297c478bd9Sstevel@tonic-gate #define ACPI_GPE_ENABLE                 0
6307c478bd9Sstevel@tonic-gate #define ACPI_GPE_DISABLE                1
6317c478bd9Sstevel@tonic-gate 
6327c478bd9Sstevel@tonic-gate 
6337c478bd9Sstevel@tonic-gate /*
6347c478bd9Sstevel@tonic-gate  * GPE info flags - Per GPE
6357c478bd9Sstevel@tonic-gate  * +-+-+-+---+---+-+
6367c478bd9Sstevel@tonic-gate  * |7|6|5|4:3|2:1|0|
6377c478bd9Sstevel@tonic-gate  * +-+-+-+---+---+-+
6387c478bd9Sstevel@tonic-gate  *  | | |  |   |  |
6397c478bd9Sstevel@tonic-gate  *  | | |  |   |  +--- Interrupt type: Edge or Level Triggered
6407c478bd9Sstevel@tonic-gate  *  | | |  |   +--- Type: Wake-only, Runtime-only, or wake/runtime
6417c478bd9Sstevel@tonic-gate  *  | | |  +--- Type of dispatch -- to method, handler, or none
6427c478bd9Sstevel@tonic-gate  *  | | +--- Enabled for runtime?
6437c478bd9Sstevel@tonic-gate  *  | +--- Enabled for wake?
644*db2bae30SDana Myers  *  +--- Unused
6457c478bd9Sstevel@tonic-gate  */
6467c478bd9Sstevel@tonic-gate #define ACPI_GPE_XRUPT_TYPE_MASK        (UINT8) 0x01
6477c478bd9Sstevel@tonic-gate #define ACPI_GPE_LEVEL_TRIGGERED        (UINT8) 0x01
6487c478bd9Sstevel@tonic-gate #define ACPI_GPE_EDGE_TRIGGERED         (UINT8) 0x00
6497c478bd9Sstevel@tonic-gate 
6507c478bd9Sstevel@tonic-gate #define ACPI_GPE_TYPE_MASK              (UINT8) 0x06
6517c478bd9Sstevel@tonic-gate #define ACPI_GPE_TYPE_WAKE_RUN          (UINT8) 0x06
6527c478bd9Sstevel@tonic-gate #define ACPI_GPE_TYPE_WAKE              (UINT8) 0x02
6537c478bd9Sstevel@tonic-gate #define ACPI_GPE_TYPE_RUNTIME           (UINT8) 0x04    /* Default */
6547c478bd9Sstevel@tonic-gate 
6557c478bd9Sstevel@tonic-gate #define ACPI_GPE_DISPATCH_MASK          (UINT8) 0x18
6567c478bd9Sstevel@tonic-gate #define ACPI_GPE_DISPATCH_HANDLER       (UINT8) 0x08
6577c478bd9Sstevel@tonic-gate #define ACPI_GPE_DISPATCH_METHOD        (UINT8) 0x10
6587c478bd9Sstevel@tonic-gate #define ACPI_GPE_DISPATCH_NOT_USED      (UINT8) 0x00    /* Default */
6597c478bd9Sstevel@tonic-gate 
6607c478bd9Sstevel@tonic-gate #define ACPI_GPE_RUN_ENABLE_MASK        (UINT8) 0x20
6617c478bd9Sstevel@tonic-gate #define ACPI_GPE_RUN_ENABLED            (UINT8) 0x20
6627c478bd9Sstevel@tonic-gate #define ACPI_GPE_RUN_DISABLED           (UINT8) 0x00    /* Default */
6637c478bd9Sstevel@tonic-gate 
6647c478bd9Sstevel@tonic-gate #define ACPI_GPE_WAKE_ENABLE_MASK       (UINT8) 0x40
6657c478bd9Sstevel@tonic-gate #define ACPI_GPE_WAKE_ENABLED           (UINT8) 0x40
6667c478bd9Sstevel@tonic-gate #define ACPI_GPE_WAKE_DISABLED          (UINT8) 0x00    /* Default */
6677c478bd9Sstevel@tonic-gate 
6687c478bd9Sstevel@tonic-gate #define ACPI_GPE_ENABLE_MASK            (UINT8) 0x60    /* Both run/wake */
6697c478bd9Sstevel@tonic-gate 
6707c478bd9Sstevel@tonic-gate /*
6717c478bd9Sstevel@tonic-gate  * Flags for GPE and Lock interfaces
6727c478bd9Sstevel@tonic-gate  */
6737c478bd9Sstevel@tonic-gate #define ACPI_EVENT_WAKE_ENABLE          0x2             /* AcpiGpeEnable */
6747c478bd9Sstevel@tonic-gate #define ACPI_EVENT_WAKE_DISABLE         0x2             /* AcpiGpeDisable */
6757c478bd9Sstevel@tonic-gate 
6767c478bd9Sstevel@tonic-gate #define ACPI_NOT_ISR                    0x1
6777c478bd9Sstevel@tonic-gate #define ACPI_ISR                        0x0
6787c478bd9Sstevel@tonic-gate 
6797c478bd9Sstevel@tonic-gate 
6807c478bd9Sstevel@tonic-gate /* Notify types */
6817c478bd9Sstevel@tonic-gate 
6827c478bd9Sstevel@tonic-gate #define ACPI_SYSTEM_NOTIFY              0x1
6837c478bd9Sstevel@tonic-gate #define ACPI_DEVICE_NOTIFY              0x2
684*db2bae30SDana Myers #define ACPI_ALL_NOTIFY                 (ACPI_SYSTEM_NOTIFY | ACPI_DEVICE_NOTIFY)
6857c478bd9Sstevel@tonic-gate #define ACPI_MAX_NOTIFY_HANDLER_TYPE    0x3
6867c478bd9Sstevel@tonic-gate 
6877c478bd9Sstevel@tonic-gate #define ACPI_MAX_SYS_NOTIFY             0x7f
6887c478bd9Sstevel@tonic-gate 
6897c478bd9Sstevel@tonic-gate 
6907c478bd9Sstevel@tonic-gate /* Address Space (Operation Region) Types */
6917c478bd9Sstevel@tonic-gate 
6927c478bd9Sstevel@tonic-gate typedef UINT8                           ACPI_ADR_SPACE_TYPE;
6937c478bd9Sstevel@tonic-gate 
6947c478bd9Sstevel@tonic-gate #define ACPI_ADR_SPACE_SYSTEM_MEMORY    (ACPI_ADR_SPACE_TYPE) 0
6957c478bd9Sstevel@tonic-gate #define ACPI_ADR_SPACE_SYSTEM_IO        (ACPI_ADR_SPACE_TYPE) 1
6967c478bd9Sstevel@tonic-gate #define ACPI_ADR_SPACE_PCI_CONFIG       (ACPI_ADR_SPACE_TYPE) 2
6977c478bd9Sstevel@tonic-gate #define ACPI_ADR_SPACE_EC               (ACPI_ADR_SPACE_TYPE) 3
6987c478bd9Sstevel@tonic-gate #define ACPI_ADR_SPACE_SMBUS            (ACPI_ADR_SPACE_TYPE) 4
6997c478bd9Sstevel@tonic-gate #define ACPI_ADR_SPACE_CMOS             (ACPI_ADR_SPACE_TYPE) 5
7007c478bd9Sstevel@tonic-gate #define ACPI_ADR_SPACE_PCI_BAR_TARGET   (ACPI_ADR_SPACE_TYPE) 6
7017c478bd9Sstevel@tonic-gate #define ACPI_ADR_SPACE_DATA_TABLE       (ACPI_ADR_SPACE_TYPE) 7
7027c478bd9Sstevel@tonic-gate #define ACPI_ADR_SPACE_FIXED_HARDWARE   (ACPI_ADR_SPACE_TYPE) 127
7037c478bd9Sstevel@tonic-gate 
7047c478bd9Sstevel@tonic-gate 
7057c478bd9Sstevel@tonic-gate /*
7067c478bd9Sstevel@tonic-gate  * BitRegister IDs
7077c478bd9Sstevel@tonic-gate  * These are bitfields defined within the full ACPI registers
7087c478bd9Sstevel@tonic-gate  */
7097c478bd9Sstevel@tonic-gate #define ACPI_BITREG_TIMER_STATUS                0x00
7107c478bd9Sstevel@tonic-gate #define ACPI_BITREG_BUS_MASTER_STATUS           0x01
7117c478bd9Sstevel@tonic-gate #define ACPI_BITREG_GLOBAL_LOCK_STATUS          0x02
7127c478bd9Sstevel@tonic-gate #define ACPI_BITREG_POWER_BUTTON_STATUS         0x03
7137c478bd9Sstevel@tonic-gate #define ACPI_BITREG_SLEEP_BUTTON_STATUS         0x04
7147c478bd9Sstevel@tonic-gate #define ACPI_BITREG_RT_CLOCK_STATUS             0x05
7157c478bd9Sstevel@tonic-gate #define ACPI_BITREG_WAKE_STATUS                 0x06
7167c478bd9Sstevel@tonic-gate #define ACPI_BITREG_PCIEXP_WAKE_STATUS          0x07
7177c478bd9Sstevel@tonic-gate 
7187c478bd9Sstevel@tonic-gate #define ACPI_BITREG_TIMER_ENABLE                0x08
7197c478bd9Sstevel@tonic-gate #define ACPI_BITREG_GLOBAL_LOCK_ENABLE          0x09
7207c478bd9Sstevel@tonic-gate #define ACPI_BITREG_POWER_BUTTON_ENABLE         0x0A
7217c478bd9Sstevel@tonic-gate #define ACPI_BITREG_SLEEP_BUTTON_ENABLE         0x0B
7227c478bd9Sstevel@tonic-gate #define ACPI_BITREG_RT_CLOCK_ENABLE             0x0C
7237c478bd9Sstevel@tonic-gate #define ACPI_BITREG_WAKE_ENABLE                 0x0D
7247c478bd9Sstevel@tonic-gate #define ACPI_BITREG_PCIEXP_WAKE_DISABLE         0x0E
7257c478bd9Sstevel@tonic-gate 
7267c478bd9Sstevel@tonic-gate #define ACPI_BITREG_SCI_ENABLE                  0x0F
7277c478bd9Sstevel@tonic-gate #define ACPI_BITREG_BUS_MASTER_RLD              0x10
7287c478bd9Sstevel@tonic-gate #define ACPI_BITREG_GLOBAL_LOCK_RELEASE         0x11
7297c478bd9Sstevel@tonic-gate #define ACPI_BITREG_SLEEP_TYPE_A                0x12
7307c478bd9Sstevel@tonic-gate #define ACPI_BITREG_SLEEP_TYPE_B                0x13
7317c478bd9Sstevel@tonic-gate #define ACPI_BITREG_SLEEP_ENABLE                0x14
7327c478bd9Sstevel@tonic-gate 
7337c478bd9Sstevel@tonic-gate #define ACPI_BITREG_ARB_DISABLE                 0x15
7347c478bd9Sstevel@tonic-gate 
7357c478bd9Sstevel@tonic-gate #define ACPI_BITREG_MAX                         0x15
7367c478bd9Sstevel@tonic-gate #define ACPI_NUM_BITREG                         ACPI_BITREG_MAX + 1
7377c478bd9Sstevel@tonic-gate 
7387c478bd9Sstevel@tonic-gate 
7397c478bd9Sstevel@tonic-gate /*
7407c478bd9Sstevel@tonic-gate  * External ACPI object definition
7417c478bd9Sstevel@tonic-gate  */
742*db2bae30SDana Myers 
743*db2bae30SDana Myers /*
744*db2bae30SDana Myers  * Note: Type == ACPI_TYPE_ANY (0) is used to indicate a NULL package element
745*db2bae30SDana Myers  * or an unresolved named reference.
746*db2bae30SDana Myers  */
7477c478bd9Sstevel@tonic-gate typedef union acpi_object
7487c478bd9Sstevel@tonic-gate {
74927f7c583Smyers     ACPI_OBJECT_TYPE                Type;   /* See definition of AcpiNsType for values */
7507c478bd9Sstevel@tonic-gate     struct
7517c478bd9Sstevel@tonic-gate     {
752*db2bae30SDana Myers         ACPI_OBJECT_TYPE                Type;       /* ACPI_TYPE_INTEGER */
75327f7c583Smyers         ACPI_INTEGER                    Value;      /* The actual number */
7547c478bd9Sstevel@tonic-gate     } Integer;
7557c478bd9Sstevel@tonic-gate 
7567c478bd9Sstevel@tonic-gate     struct
7577c478bd9Sstevel@tonic-gate     {
758*db2bae30SDana Myers         ACPI_OBJECT_TYPE                Type;       /* ACPI_TYPE_STRING */
75927f7c583Smyers         UINT32                          Length;     /* # of bytes in string, excluding trailing null */
76027f7c583Smyers         char                            *Pointer;   /* points to the string value */
7617c478bd9Sstevel@tonic-gate     } String;
7627c478bd9Sstevel@tonic-gate 
7637c478bd9Sstevel@tonic-gate     struct
7647c478bd9Sstevel@tonic-gate     {
765*db2bae30SDana Myers         ACPI_OBJECT_TYPE                Type;       /* ACPI_TYPE_BUFFER */
76627f7c583Smyers         UINT32                          Length;     /* # of bytes in buffer */
76727f7c583Smyers         UINT8                           *Pointer;   /* points to the buffer */
7687c478bd9Sstevel@tonic-gate     } Buffer;
7697c478bd9Sstevel@tonic-gate 
7707c478bd9Sstevel@tonic-gate     struct
7717c478bd9Sstevel@tonic-gate     {
772*db2bae30SDana Myers         ACPI_OBJECT_TYPE                Type;       /* ACPI_TYPE_PACKAGE */
77327f7c583Smyers         UINT32                          Count;      /* # of elements in package */
77427f7c583Smyers         union acpi_object               *Elements;  /* Pointer to an array of ACPI_OBJECTs */
7757c478bd9Sstevel@tonic-gate     } Package;
7767c478bd9Sstevel@tonic-gate 
7777c478bd9Sstevel@tonic-gate     struct
7787c478bd9Sstevel@tonic-gate     {
779*db2bae30SDana Myers         ACPI_OBJECT_TYPE                Type;       /* ACPI_TYPE_LOCAL_REFERENCE */
780*db2bae30SDana Myers         ACPI_OBJECT_TYPE                ActualType; /* Type associated with the Handle */
781*db2bae30SDana Myers         ACPI_HANDLE                     Handle;     /* object reference */
782*db2bae30SDana Myers     } Reference;
783*db2bae30SDana Myers 
784*db2bae30SDana Myers     struct
785*db2bae30SDana Myers     {
786*db2bae30SDana Myers         ACPI_OBJECT_TYPE                Type;       /* ACPI_TYPE_PROCESSOR */
78727f7c583Smyers         UINT32                          ProcId;
78827f7c583Smyers         ACPI_IO_ADDRESS                 PblkAddress;
78927f7c583Smyers         UINT32                          PblkLength;
7907c478bd9Sstevel@tonic-gate     } Processor;
7917c478bd9Sstevel@tonic-gate 
7927c478bd9Sstevel@tonic-gate     struct
7937c478bd9Sstevel@tonic-gate     {
794*db2bae30SDana Myers         ACPI_OBJECT_TYPE                Type;       /* ACPI_TYPE_POWER */
79527f7c583Smyers         UINT32                          SystemLevel;
79627f7c583Smyers         UINT32                          ResourceOrder;
7977c478bd9Sstevel@tonic-gate     } PowerResource;
7987c478bd9Sstevel@tonic-gate 
7997c478bd9Sstevel@tonic-gate } ACPI_OBJECT;
8007c478bd9Sstevel@tonic-gate 
8017c478bd9Sstevel@tonic-gate 
8027c478bd9Sstevel@tonic-gate /*
8037c478bd9Sstevel@tonic-gate  * List of objects, used as a parameter list for control method evaluation
8047c478bd9Sstevel@tonic-gate  */
8057c478bd9Sstevel@tonic-gate typedef struct acpi_object_list
8067c478bd9Sstevel@tonic-gate {
80727f7c583Smyers     UINT32                          Count;
80827f7c583Smyers     ACPI_OBJECT                     *Pointer;
8097c478bd9Sstevel@tonic-gate 
8107c478bd9Sstevel@tonic-gate } ACPI_OBJECT_LIST;
8117c478bd9Sstevel@tonic-gate 
8127c478bd9Sstevel@tonic-gate 
8137c478bd9Sstevel@tonic-gate /*
8147c478bd9Sstevel@tonic-gate  * Miscellaneous common Data Structures used by the interfaces
8157c478bd9Sstevel@tonic-gate  */
8167c478bd9Sstevel@tonic-gate #define ACPI_NO_BUFFER              0
8177c478bd9Sstevel@tonic-gate #define ACPI_ALLOCATE_BUFFER        (ACPI_SIZE) (-1)
8187c478bd9Sstevel@tonic-gate #define ACPI_ALLOCATE_LOCAL_BUFFER  (ACPI_SIZE) (-2)
8197c478bd9Sstevel@tonic-gate 
8207c478bd9Sstevel@tonic-gate typedef struct acpi_buffer
8217c478bd9Sstevel@tonic-gate {
82227f7c583Smyers     ACPI_SIZE                       Length;         /* Length in bytes of the buffer */
82327f7c583Smyers     void                            *Pointer;       /* pointer to buffer */
8247c478bd9Sstevel@tonic-gate 
8257c478bd9Sstevel@tonic-gate } ACPI_BUFFER;
8267c478bd9Sstevel@tonic-gate 
8277c478bd9Sstevel@tonic-gate 
8287c478bd9Sstevel@tonic-gate /*
8297c478bd9Sstevel@tonic-gate  * NameType for AcpiGetName
8307c478bd9Sstevel@tonic-gate  */
8317c478bd9Sstevel@tonic-gate #define ACPI_FULL_PATHNAME              0
8327c478bd9Sstevel@tonic-gate #define ACPI_SINGLE_NAME                1
8337c478bd9Sstevel@tonic-gate #define ACPI_NAME_TYPE_MAX              1
8347c478bd9Sstevel@tonic-gate 
8357c478bd9Sstevel@tonic-gate 
8367c478bd9Sstevel@tonic-gate /*
8377c478bd9Sstevel@tonic-gate  * Structure and flags for AcpiGetSystemInfo
8387c478bd9Sstevel@tonic-gate  */
8397c478bd9Sstevel@tonic-gate #define ACPI_SYS_MODE_UNKNOWN           0x0000
8407c478bd9Sstevel@tonic-gate #define ACPI_SYS_MODE_ACPI              0x0001
8417c478bd9Sstevel@tonic-gate #define ACPI_SYS_MODE_LEGACY            0x0002
8427c478bd9Sstevel@tonic-gate #define ACPI_SYS_MODES_MASK             0x0003
8437c478bd9Sstevel@tonic-gate 
8447c478bd9Sstevel@tonic-gate 
8457c478bd9Sstevel@tonic-gate /*
8467c478bd9Sstevel@tonic-gate  * System info returned by AcpiGetSystemInfo()
8477c478bd9Sstevel@tonic-gate  */
8487c478bd9Sstevel@tonic-gate typedef struct acpi_system_info
8497c478bd9Sstevel@tonic-gate {
85027f7c583Smyers     UINT32                          AcpiCaVersion;
85127f7c583Smyers     UINT32                          Flags;
85227f7c583Smyers     UINT32                          TimerResolution;
85327f7c583Smyers     UINT32                          Reserved1;
85427f7c583Smyers     UINT32                          Reserved2;
85527f7c583Smyers     UINT32                          DebugLevel;
85627f7c583Smyers     UINT32                          DebugLayer;
8577c478bd9Sstevel@tonic-gate 
8587c478bd9Sstevel@tonic-gate } ACPI_SYSTEM_INFO;
8597c478bd9Sstevel@tonic-gate 
8607c478bd9Sstevel@tonic-gate 
861*db2bae30SDana Myers /*
862*db2bae30SDana Myers  * System statistecs returned by AcpiGetStatistics()
863*db2bae30SDana Myers  */
864*db2bae30SDana Myers typedef struct acpi_statistics
865*db2bae30SDana Myers {
866*db2bae30SDana Myers     UINT32                          SciCount;
867*db2bae30SDana Myers     UINT32                          GpeCount;
868*db2bae30SDana Myers     UINT32                          FixedEventCount[ACPI_NUM_FIXED_EVENTS];
869*db2bae30SDana Myers     UINT32                          MethodCount;
870*db2bae30SDana Myers 
871*db2bae30SDana Myers } ACPI_STATISTICS;
872*db2bae30SDana Myers 
873*db2bae30SDana Myers 
874*db2bae30SDana Myers /* Table Event Types */
875*db2bae30SDana Myers 
876*db2bae30SDana Myers #define ACPI_TABLE_EVENT_LOAD           0x0
877*db2bae30SDana Myers #define ACPI_TABLE_EVENT_UNLOAD         0x1
878*db2bae30SDana Myers #define ACPI_NUM_TABLE_EVENTS           2
879*db2bae30SDana Myers 
880*db2bae30SDana Myers 
8817c478bd9Sstevel@tonic-gate /*
8827c478bd9Sstevel@tonic-gate  * Types specific to the OS service interfaces
8837c478bd9Sstevel@tonic-gate  */
8847c478bd9Sstevel@tonic-gate typedef UINT32
8857c478bd9Sstevel@tonic-gate (ACPI_SYSTEM_XFACE *ACPI_OSD_HANDLER) (
88627f7c583Smyers     void                            *Context);
8877c478bd9Sstevel@tonic-gate 
8887c478bd9Sstevel@tonic-gate typedef void
8897c478bd9Sstevel@tonic-gate (ACPI_SYSTEM_XFACE *ACPI_OSD_EXEC_CALLBACK) (
89027f7c583Smyers     void                            *Context);
8917c478bd9Sstevel@tonic-gate 
8927c478bd9Sstevel@tonic-gate /*
8937c478bd9Sstevel@tonic-gate  * Various handlers and callback procedures
8947c478bd9Sstevel@tonic-gate  */
8957c478bd9Sstevel@tonic-gate typedef
8967c478bd9Sstevel@tonic-gate UINT32 (*ACPI_EVENT_HANDLER) (
89727f7c583Smyers     void                            *Context);
8987c478bd9Sstevel@tonic-gate 
8997c478bd9Sstevel@tonic-gate typedef
9007c478bd9Sstevel@tonic-gate void (*ACPI_NOTIFY_HANDLER) (
90127f7c583Smyers     ACPI_HANDLE                     Device,
90227f7c583Smyers     UINT32                          Value,
90327f7c583Smyers     void                            *Context);
9047c478bd9Sstevel@tonic-gate 
9057c478bd9Sstevel@tonic-gate typedef
9067c478bd9Sstevel@tonic-gate void (*ACPI_OBJECT_HANDLER) (
90727f7c583Smyers     ACPI_HANDLE                     Object,
90827f7c583Smyers     UINT32                          Function,
90927f7c583Smyers     void                            *Data);
9107c478bd9Sstevel@tonic-gate 
9117c478bd9Sstevel@tonic-gate typedef
9127c478bd9Sstevel@tonic-gate ACPI_STATUS (*ACPI_INIT_HANDLER) (
91327f7c583Smyers     ACPI_HANDLE                     Object,
91427f7c583Smyers     UINT32                          Function);
9157c478bd9Sstevel@tonic-gate 
9167c478bd9Sstevel@tonic-gate #define ACPI_INIT_DEVICE_INI        1
9177c478bd9Sstevel@tonic-gate 
9187c478bd9Sstevel@tonic-gate typedef
9197c478bd9Sstevel@tonic-gate ACPI_STATUS (*ACPI_EXCEPTION_HANDLER) (
92027f7c583Smyers     ACPI_STATUS                     AmlStatus,
92127f7c583Smyers     ACPI_NAME                       Name,
92227f7c583Smyers     UINT16                          Opcode,
92327f7c583Smyers     UINT32                          AmlOffset,
92427f7c583Smyers     void                            *Context);
9257c478bd9Sstevel@tonic-gate 
926*db2bae30SDana Myers /* Table Event handler (Load, LoadTable etc) and types */
927*db2bae30SDana Myers 
928*db2bae30SDana Myers typedef
929*db2bae30SDana Myers ACPI_STATUS (*ACPI_TABLE_HANDLER) (
930*db2bae30SDana Myers     UINT32                          Event,
931*db2bae30SDana Myers     void                            *Table,
932*db2bae30SDana Myers     void                            *Context);
933*db2bae30SDana Myers 
934*db2bae30SDana Myers #define ACPI_TABLE_LOAD             0x0
935*db2bae30SDana Myers #define ACPI_TABLE_UNLOAD           0x1
936*db2bae30SDana Myers #define ACPI_NUM_TABLE_EVENTS       2
937*db2bae30SDana Myers 
9387c478bd9Sstevel@tonic-gate 
9397c478bd9Sstevel@tonic-gate /* Address Spaces (For Operation Regions) */
9407c478bd9Sstevel@tonic-gate 
9417c478bd9Sstevel@tonic-gate typedef
9427c478bd9Sstevel@tonic-gate ACPI_STATUS (*ACPI_ADR_SPACE_HANDLER) (
94327f7c583Smyers     UINT32                          Function,
94427f7c583Smyers     ACPI_PHYSICAL_ADDRESS           Address,
94527f7c583Smyers     UINT32                          BitWidth,
94627f7c583Smyers     ACPI_INTEGER                    *Value,
94727f7c583Smyers     void                            *HandlerContext,
94827f7c583Smyers     void                            *RegionContext);
9497c478bd9Sstevel@tonic-gate 
95027f7c583Smyers #define ACPI_DEFAULT_HANDLER            NULL
9517c478bd9Sstevel@tonic-gate 
9527c478bd9Sstevel@tonic-gate 
9537c478bd9Sstevel@tonic-gate typedef
9547c478bd9Sstevel@tonic-gate ACPI_STATUS (*ACPI_ADR_SPACE_SETUP) (
95527f7c583Smyers     ACPI_HANDLE                     RegionHandle,
95627f7c583Smyers     UINT32                          Function,
95727f7c583Smyers     void                            *HandlerContext,
95827f7c583Smyers     void                            **RegionContext);
9597c478bd9Sstevel@tonic-gate 
9607c478bd9Sstevel@tonic-gate #define ACPI_REGION_ACTIVATE    0
9617c478bd9Sstevel@tonic-gate #define ACPI_REGION_DEACTIVATE  1
9627c478bd9Sstevel@tonic-gate 
9637c478bd9Sstevel@tonic-gate typedef
9647c478bd9Sstevel@tonic-gate ACPI_STATUS (*ACPI_WALK_CALLBACK) (
96527f7c583Smyers     ACPI_HANDLE                     ObjHandle,
96627f7c583Smyers     UINT32                          NestingLevel,
96727f7c583Smyers     void                            *Context,
96827f7c583Smyers     void                            **ReturnValue);
9697c478bd9Sstevel@tonic-gate 
9707c478bd9Sstevel@tonic-gate 
9717c478bd9Sstevel@tonic-gate /* Interrupt handler return values */
9727c478bd9Sstevel@tonic-gate 
9737c478bd9Sstevel@tonic-gate #define ACPI_INTERRUPT_NOT_HANDLED      0x00
9747c478bd9Sstevel@tonic-gate #define ACPI_INTERRUPT_HANDLED          0x01
9757c478bd9Sstevel@tonic-gate 
9767c478bd9Sstevel@tonic-gate 
9777c478bd9Sstevel@tonic-gate /* Common string version of device HIDs and UIDs */
9787c478bd9Sstevel@tonic-gate 
9797c478bd9Sstevel@tonic-gate typedef struct acpi_device_id
9807c478bd9Sstevel@tonic-gate {
98127f7c583Smyers     char                            Value[ACPI_DEVICE_ID_LENGTH];
9827c478bd9Sstevel@tonic-gate 
9837c478bd9Sstevel@tonic-gate } ACPI_DEVICE_ID;
9847c478bd9Sstevel@tonic-gate 
9857c478bd9Sstevel@tonic-gate /* Common string version of device CIDs */
9867c478bd9Sstevel@tonic-gate 
9877c478bd9Sstevel@tonic-gate typedef struct acpi_compatible_id
9887c478bd9Sstevel@tonic-gate {
98927f7c583Smyers     char                            Value[ACPI_MAX_CID_LENGTH];
9907c478bd9Sstevel@tonic-gate 
9917c478bd9Sstevel@tonic-gate } ACPI_COMPATIBLE_ID;
9927c478bd9Sstevel@tonic-gate 
9937c478bd9Sstevel@tonic-gate typedef struct acpi_compatible_id_list
9947c478bd9Sstevel@tonic-gate {
99527f7c583Smyers     UINT32                          Count;
99627f7c583Smyers     UINT32                          Size;
99727f7c583Smyers     ACPI_COMPATIBLE_ID              Id[1];
9987c478bd9Sstevel@tonic-gate 
9997c478bd9Sstevel@tonic-gate } ACPI_COMPATIBLE_ID_LIST;
10007c478bd9Sstevel@tonic-gate 
10017c478bd9Sstevel@tonic-gate 
10027c478bd9Sstevel@tonic-gate /* Structure and flags for AcpiGetObjectInfo */
10037c478bd9Sstevel@tonic-gate 
10047c478bd9Sstevel@tonic-gate #define ACPI_VALID_STA                  0x0001
10057c478bd9Sstevel@tonic-gate #define ACPI_VALID_ADR                  0x0002
10067c478bd9Sstevel@tonic-gate #define ACPI_VALID_HID                  0x0004
10077c478bd9Sstevel@tonic-gate #define ACPI_VALID_UID                  0x0008
10087c478bd9Sstevel@tonic-gate #define ACPI_VALID_CID                  0x0010
10097c478bd9Sstevel@tonic-gate #define ACPI_VALID_SXDS                 0x0020
10107c478bd9Sstevel@tonic-gate 
101130082d0cSmyers /* Flags for _STA method */
101230082d0cSmyers 
101330082d0cSmyers #define ACPI_STA_DEVICE_PRESENT         0x01
101430082d0cSmyers #define ACPI_STA_DEVICE_ENABLED         0x02
101530082d0cSmyers #define ACPI_STA_DEVICE_UI              0x04
101627f7c583Smyers #define ACPI_STA_DEVICE_FUNCTIONING     0x08
101727f7c583Smyers #define ACPI_STA_DEVICE_OK              0x08 /* Synonym */
101830082d0cSmyers #define ACPI_STA_BATTERY_PRESENT        0x10
101930082d0cSmyers 
10207c478bd9Sstevel@tonic-gate 
10217c478bd9Sstevel@tonic-gate #define ACPI_COMMON_OBJ_INFO \
102227f7c583Smyers     ACPI_OBJECT_TYPE                Type;           /* ACPI object type */ \
102327f7c583Smyers     ACPI_NAME                       Name            /* ACPI object Name */
10247c478bd9Sstevel@tonic-gate 
10257c478bd9Sstevel@tonic-gate 
10267c478bd9Sstevel@tonic-gate typedef struct acpi_obj_info_header
10277c478bd9Sstevel@tonic-gate {
10287c478bd9Sstevel@tonic-gate     ACPI_COMMON_OBJ_INFO;
10297c478bd9Sstevel@tonic-gate 
10307c478bd9Sstevel@tonic-gate } ACPI_OBJ_INFO_HEADER;
10317c478bd9Sstevel@tonic-gate 
10327c478bd9Sstevel@tonic-gate 
10337c478bd9Sstevel@tonic-gate /* Structure returned from Get Object Info */
10347c478bd9Sstevel@tonic-gate 
10357c478bd9Sstevel@tonic-gate typedef struct acpi_device_info
10367c478bd9Sstevel@tonic-gate {
10377c478bd9Sstevel@tonic-gate     ACPI_COMMON_OBJ_INFO;
10387c478bd9Sstevel@tonic-gate 
1039*db2bae30SDana Myers     UINT32                          ParamCount;         /* If a method, required parameter count */
104027f7c583Smyers     UINT32                          Valid;              /* Indicates which fields below are valid */
104127f7c583Smyers     UINT32                          CurrentStatus;      /* _STA value */
104227f7c583Smyers     ACPI_INTEGER                    Address;            /* _ADR value if any */
104327f7c583Smyers     ACPI_DEVICE_ID                  HardwareId;         /* _HID value if any */
104427f7c583Smyers     ACPI_DEVICE_ID                  UniqueId;           /* _UID value if any */
104527f7c583Smyers     UINT8                           HighestDstates[4];  /* _SxD values: 0xFF indicates not valid */
104627f7c583Smyers     ACPI_COMPATIBLE_ID_LIST         CompatibilityId;    /* List of _CIDs if any */
10477c478bd9Sstevel@tonic-gate 
10487c478bd9Sstevel@tonic-gate } ACPI_DEVICE_INFO;
10497c478bd9Sstevel@tonic-gate 
10507c478bd9Sstevel@tonic-gate 
10517c478bd9Sstevel@tonic-gate /* Context structs for address space handlers */
10527c478bd9Sstevel@tonic-gate 
10537c478bd9Sstevel@tonic-gate typedef struct acpi_pci_id
10547c478bd9Sstevel@tonic-gate {
105527f7c583Smyers     UINT16                          Segment;
105627f7c583Smyers     UINT16                          Bus;
105727f7c583Smyers     UINT16                          Device;
105827f7c583Smyers     UINT16                          Function;
10597c478bd9Sstevel@tonic-gate 
10607c478bd9Sstevel@tonic-gate } ACPI_PCI_ID;
10617c478bd9Sstevel@tonic-gate 
10627c478bd9Sstevel@tonic-gate 
10637c478bd9Sstevel@tonic-gate typedef struct acpi_mem_space_context
10647c478bd9Sstevel@tonic-gate {
106527f7c583Smyers     UINT32                          Length;
106627f7c583Smyers     ACPI_PHYSICAL_ADDRESS           Address;
106727f7c583Smyers     ACPI_PHYSICAL_ADDRESS           MappedPhysicalAddress;
106827f7c583Smyers     UINT8                           *MappedLogicalAddress;
106927f7c583Smyers     ACPI_SIZE                       MappedLength;
10707c478bd9Sstevel@tonic-gate 
10717c478bd9Sstevel@tonic-gate } ACPI_MEM_SPACE_CONTEXT;
10727c478bd9Sstevel@tonic-gate 
10737c478bd9Sstevel@tonic-gate 
10747c478bd9Sstevel@tonic-gate /*
10757c478bd9Sstevel@tonic-gate  * Definitions for Resource Attributes
10767c478bd9Sstevel@tonic-gate  */
107730082d0cSmyers typedef UINT16                          ACPI_RS_LENGTH;    /* Resource Length field is fixed at 16 bits */
107830082d0cSmyers typedef UINT32                          ACPI_RSDESC_SIZE;  /* Max Resource Descriptor size is (Length+3) = (64K-1)+3 */
10797c478bd9Sstevel@tonic-gate 
10807c478bd9Sstevel@tonic-gate /*
10817c478bd9Sstevel@tonic-gate  *  Memory Attributes
10827c478bd9Sstevel@tonic-gate  */
10837c478bd9Sstevel@tonic-gate #define ACPI_READ_ONLY_MEMORY           (UINT8) 0x00
10847c478bd9Sstevel@tonic-gate #define ACPI_READ_WRITE_MEMORY          (UINT8) 0x01
10857c478bd9Sstevel@tonic-gate 
10867c478bd9Sstevel@tonic-gate #define ACPI_NON_CACHEABLE_MEMORY       (UINT8) 0x00
10877c478bd9Sstevel@tonic-gate #define ACPI_CACHABLE_MEMORY            (UINT8) 0x01
10887c478bd9Sstevel@tonic-gate #define ACPI_WRITE_COMBINING_MEMORY     (UINT8) 0x02
10897c478bd9Sstevel@tonic-gate #define ACPI_PREFETCHABLE_MEMORY        (UINT8) 0x03
10907c478bd9Sstevel@tonic-gate 
10917c478bd9Sstevel@tonic-gate /*
10927c478bd9Sstevel@tonic-gate  *  IO Attributes
10937c478bd9Sstevel@tonic-gate  *  The ISA IO ranges are:     n000-n0FFh,  n400-n4FFh, n800-n8FFh, nC00-nCFFh.
10947c478bd9Sstevel@tonic-gate  *  The non-ISA IO ranges are: n100-n3FFh,  n500-n7FFh, n900-nBFFh, nCD0-nFFFh.
10957c478bd9Sstevel@tonic-gate  */
10967c478bd9Sstevel@tonic-gate #define ACPI_NON_ISA_ONLY_RANGES        (UINT8) 0x01
10977c478bd9Sstevel@tonic-gate #define ACPI_ISA_ONLY_RANGES            (UINT8) 0x02
10987c478bd9Sstevel@tonic-gate #define ACPI_ENTIRE_RANGE               (ACPI_NON_ISA_ONLY_RANGES | ACPI_ISA_ONLY_RANGES)
10997c478bd9Sstevel@tonic-gate 
110030082d0cSmyers /* Type of translation - 1=Sparse, 0=Dense */
110130082d0cSmyers 
110230082d0cSmyers #define ACPI_SPARSE_TRANSLATION         (UINT8) 0x01
11037c478bd9Sstevel@tonic-gate 
11047c478bd9Sstevel@tonic-gate /*
11057c478bd9Sstevel@tonic-gate  *  IO Port Descriptor Decode
11067c478bd9Sstevel@tonic-gate  */
11077c478bd9Sstevel@tonic-gate #define ACPI_DECODE_10                  (UINT8) 0x00    /* 10-bit IO address decode */
11087c478bd9Sstevel@tonic-gate #define ACPI_DECODE_16                  (UINT8) 0x01    /* 16-bit IO address decode */
11097c478bd9Sstevel@tonic-gate 
11107c478bd9Sstevel@tonic-gate /*
11117c478bd9Sstevel@tonic-gate  *  IRQ Attributes
11127c478bd9Sstevel@tonic-gate  */
111330082d0cSmyers #define ACPI_LEVEL_SENSITIVE            (UINT8) 0x00
111430082d0cSmyers #define ACPI_EDGE_SENSITIVE             (UINT8) 0x01
11157c478bd9Sstevel@tonic-gate 
11167c478bd9Sstevel@tonic-gate #define ACPI_ACTIVE_HIGH                (UINT8) 0x00
11177c478bd9Sstevel@tonic-gate #define ACPI_ACTIVE_LOW                 (UINT8) 0x01
11187c478bd9Sstevel@tonic-gate 
11197c478bd9Sstevel@tonic-gate #define ACPI_EXCLUSIVE                  (UINT8) 0x00
11207c478bd9Sstevel@tonic-gate #define ACPI_SHARED                     (UINT8) 0x01
11217c478bd9Sstevel@tonic-gate 
11227c478bd9Sstevel@tonic-gate /*
11237c478bd9Sstevel@tonic-gate  *  DMA Attributes
11247c478bd9Sstevel@tonic-gate  */
11257c478bd9Sstevel@tonic-gate #define ACPI_COMPATIBILITY              (UINT8) 0x00
11267c478bd9Sstevel@tonic-gate #define ACPI_TYPE_A                     (UINT8) 0x01
11277c478bd9Sstevel@tonic-gate #define ACPI_TYPE_B                     (UINT8) 0x02
11287c478bd9Sstevel@tonic-gate #define ACPI_TYPE_F                     (UINT8) 0x03
11297c478bd9Sstevel@tonic-gate 
11307c478bd9Sstevel@tonic-gate #define ACPI_NOT_BUS_MASTER             (UINT8) 0x00
11317c478bd9Sstevel@tonic-gate #define ACPI_BUS_MASTER                 (UINT8) 0x01
11327c478bd9Sstevel@tonic-gate 
11337c478bd9Sstevel@tonic-gate #define ACPI_TRANSFER_8                 (UINT8) 0x00
11347c478bd9Sstevel@tonic-gate #define ACPI_TRANSFER_8_16              (UINT8) 0x01
11357c478bd9Sstevel@tonic-gate #define ACPI_TRANSFER_16                (UINT8) 0x02
11367c478bd9Sstevel@tonic-gate 
11377c478bd9Sstevel@tonic-gate /*
11387c478bd9Sstevel@tonic-gate  * Start Dependent Functions Priority definitions
11397c478bd9Sstevel@tonic-gate  */
11407c478bd9Sstevel@tonic-gate #define ACPI_GOOD_CONFIGURATION         (UINT8) 0x00
11417c478bd9Sstevel@tonic-gate #define ACPI_ACCEPTABLE_CONFIGURATION   (UINT8) 0x01
11427c478bd9Sstevel@tonic-gate #define ACPI_SUB_OPTIMAL_CONFIGURATION  (UINT8) 0x02
11437c478bd9Sstevel@tonic-gate 
11447c478bd9Sstevel@tonic-gate /*
11457c478bd9Sstevel@tonic-gate  *  16, 32 and 64-bit Address Descriptor resource types
11467c478bd9Sstevel@tonic-gate  */
11477c478bd9Sstevel@tonic-gate #define ACPI_MEMORY_RANGE               (UINT8) 0x00
11487c478bd9Sstevel@tonic-gate #define ACPI_IO_RANGE                   (UINT8) 0x01
11497c478bd9Sstevel@tonic-gate #define ACPI_BUS_NUMBER_RANGE           (UINT8) 0x02
11507c478bd9Sstevel@tonic-gate 
11517c478bd9Sstevel@tonic-gate #define ACPI_ADDRESS_NOT_FIXED          (UINT8) 0x00
11527c478bd9Sstevel@tonic-gate #define ACPI_ADDRESS_FIXED              (UINT8) 0x01
11537c478bd9Sstevel@tonic-gate 
11547c478bd9Sstevel@tonic-gate #define ACPI_POS_DECODE                 (UINT8) 0x00
11557c478bd9Sstevel@tonic-gate #define ACPI_SUB_DECODE                 (UINT8) 0x01
11567c478bd9Sstevel@tonic-gate 
11577c478bd9Sstevel@tonic-gate #define ACPI_PRODUCER                   (UINT8) 0x00
11587c478bd9Sstevel@tonic-gate #define ACPI_CONSUMER                   (UINT8) 0x01
11597c478bd9Sstevel@tonic-gate 
11607c478bd9Sstevel@tonic-gate 
116130082d0cSmyers /*
116230082d0cSmyers  * If possible, pack the following structures to byte alignment
116330082d0cSmyers  */
116430082d0cSmyers #ifndef ACPI_MISALIGNMENT_NOT_SUPPORTED
116530082d0cSmyers #pragma pack(1)
116630082d0cSmyers #endif
116730082d0cSmyers 
116830082d0cSmyers /* UUID data structures for use in vendor-defined resource descriptors */
116930082d0cSmyers 
117030082d0cSmyers typedef struct acpi_uuid
117130082d0cSmyers {
117227f7c583Smyers     UINT8                           Data[ACPI_UUID_LENGTH];
117330082d0cSmyers } ACPI_UUID;
117430082d0cSmyers 
117530082d0cSmyers typedef struct acpi_vendor_uuid
117630082d0cSmyers {
117727f7c583Smyers     UINT8                           Subtype;
117827f7c583Smyers     UINT8                           Data[ACPI_UUID_LENGTH];
117930082d0cSmyers 
118030082d0cSmyers } ACPI_VENDOR_UUID;
118130082d0cSmyers 
11827c478bd9Sstevel@tonic-gate /*
11837c478bd9Sstevel@tonic-gate  *  Structures used to describe device resources
11847c478bd9Sstevel@tonic-gate  */
11857c478bd9Sstevel@tonic-gate typedef struct acpi_resource_irq
11867c478bd9Sstevel@tonic-gate {
1187*db2bae30SDana Myers     UINT8                           DescriptorLength;
118827f7c583Smyers     UINT8                           Triggering;
118927f7c583Smyers     UINT8                           Polarity;
119027f7c583Smyers     UINT8                           Sharable;
119127f7c583Smyers     UINT8                           InterruptCount;
119227f7c583Smyers     UINT8                           Interrupts[1];
11937c478bd9Sstevel@tonic-gate 
11947c478bd9Sstevel@tonic-gate } ACPI_RESOURCE_IRQ;
11957c478bd9Sstevel@tonic-gate 
11967c478bd9Sstevel@tonic-gate typedef struct ACPI_RESOURCE_DMA
11977c478bd9Sstevel@tonic-gate {
119827f7c583Smyers     UINT8                           Type;
119927f7c583Smyers     UINT8                           BusMaster;
120027f7c583Smyers     UINT8                           Transfer;
120127f7c583Smyers     UINT8                           ChannelCount;
120227f7c583Smyers     UINT8                           Channels[1];
12037c478bd9Sstevel@tonic-gate 
12047c478bd9Sstevel@tonic-gate } ACPI_RESOURCE_DMA;
12057c478bd9Sstevel@tonic-gate 
1206186507a7Smyers typedef struct acpi_resource_start_dependent
12077c478bd9Sstevel@tonic-gate {
1208*db2bae30SDana Myers     UINT8                           DescriptorLength;
120927f7c583Smyers     UINT8                           CompatibilityPriority;
121027f7c583Smyers     UINT8                           PerformanceRobustness;
12117c478bd9Sstevel@tonic-gate 
1212186507a7Smyers } ACPI_RESOURCE_START_DEPENDENT;
1213186507a7Smyers 
12147c478bd9Sstevel@tonic-gate 
12157c478bd9Sstevel@tonic-gate /*
12167c478bd9Sstevel@tonic-gate  * END_DEPENDENT_FUNCTIONS_RESOURCE struct is not
12177c478bd9Sstevel@tonic-gate  * needed because it has no fields
12187c478bd9Sstevel@tonic-gate  */
12197c478bd9Sstevel@tonic-gate 
1220186507a7Smyers 
12217c478bd9Sstevel@tonic-gate typedef struct acpi_resource_io
12227c478bd9Sstevel@tonic-gate {
122327f7c583Smyers     UINT8                           IoDecode;
122427f7c583Smyers     UINT8                           Alignment;
122527f7c583Smyers     UINT8                           AddressLength;
122627f7c583Smyers     UINT16                          Minimum;
122727f7c583Smyers     UINT16                          Maximum;
12287c478bd9Sstevel@tonic-gate 
12297c478bd9Sstevel@tonic-gate } ACPI_RESOURCE_IO;
12307c478bd9Sstevel@tonic-gate 
12317c478bd9Sstevel@tonic-gate typedef struct acpi_resource_fixed_io
12327c478bd9Sstevel@tonic-gate {
123327f7c583Smyers     UINT16                          Address;
123427f7c583Smyers     UINT8                           AddressLength;
12357c478bd9Sstevel@tonic-gate 
12367c478bd9Sstevel@tonic-gate } ACPI_RESOURCE_FIXED_IO;
12377c478bd9Sstevel@tonic-gate 
12387c478bd9Sstevel@tonic-gate typedef struct acpi_resource_vendor
12397c478bd9Sstevel@tonic-gate {
124027f7c583Smyers     UINT16                          ByteLength;
124127f7c583Smyers     UINT8                           ByteData[1];
12427c478bd9Sstevel@tonic-gate 
12437c478bd9Sstevel@tonic-gate } ACPI_RESOURCE_VENDOR;
12447c478bd9Sstevel@tonic-gate 
124530082d0cSmyers /* Vendor resource with UUID info (introduced in ACPI 3.0) */
124630082d0cSmyers 
124730082d0cSmyers typedef struct acpi_resource_vendor_typed
124830082d0cSmyers {
124927f7c583Smyers     UINT16                          ByteLength;
125027f7c583Smyers     UINT8                           UuidSubtype;
125127f7c583Smyers     UINT8                           Uuid[ACPI_UUID_LENGTH];
125227f7c583Smyers     UINT8                           ByteData[1];
125330082d0cSmyers 
125430082d0cSmyers } ACPI_RESOURCE_VENDOR_TYPED;
125530082d0cSmyers 
12567c478bd9Sstevel@tonic-gate typedef struct acpi_resource_end_tag
12577c478bd9Sstevel@tonic-gate {
125827f7c583Smyers     UINT8                           Checksum;
12597c478bd9Sstevel@tonic-gate 
12607c478bd9Sstevel@tonic-gate } ACPI_RESOURCE_END_TAG;
12617c478bd9Sstevel@tonic-gate 
1262186507a7Smyers typedef struct acpi_resource_memory24
12637c478bd9Sstevel@tonic-gate {
126427f7c583Smyers     UINT8                           WriteProtect;
126527f7c583Smyers     UINT16                          Minimum;
126627f7c583Smyers     UINT16                          Maximum;
126727f7c583Smyers     UINT16                          Alignment;
126827f7c583Smyers     UINT16                          AddressLength;
12697c478bd9Sstevel@tonic-gate 
1270186507a7Smyers } ACPI_RESOURCE_MEMORY24;
12717c478bd9Sstevel@tonic-gate 
1272186507a7Smyers typedef struct acpi_resource_memory32
12737c478bd9Sstevel@tonic-gate {
127427f7c583Smyers     UINT8                           WriteProtect;
127527f7c583Smyers     UINT32                          Minimum;
127627f7c583Smyers     UINT32                          Maximum;
127727f7c583Smyers     UINT32                          Alignment;
127827f7c583Smyers     UINT32                          AddressLength;
12797c478bd9Sstevel@tonic-gate 
1280186507a7Smyers } ACPI_RESOURCE_MEMORY32;
12817c478bd9Sstevel@tonic-gate 
1282186507a7Smyers typedef struct acpi_resource_fixed_memory32
12837c478bd9Sstevel@tonic-gate {
128427f7c583Smyers     UINT8                           WriteProtect;
128527f7c583Smyers     UINT32                          Address;
128627f7c583Smyers     UINT32                          AddressLength;
12877c478bd9Sstevel@tonic-gate 
1288186507a7Smyers } ACPI_RESOURCE_FIXED_MEMORY32;
12897c478bd9Sstevel@tonic-gate 
12907c478bd9Sstevel@tonic-gate typedef struct acpi_memory_attribute
12917c478bd9Sstevel@tonic-gate {
129227f7c583Smyers     UINT8                           WriteProtect;
129327f7c583Smyers     UINT8                           Caching;
129427f7c583Smyers     UINT8                           RangeType;
129527f7c583Smyers     UINT8                           Translation;
12967c478bd9Sstevel@tonic-gate 
12977c478bd9Sstevel@tonic-gate } ACPI_MEMORY_ATTRIBUTE;
12987c478bd9Sstevel@tonic-gate 
12997c478bd9Sstevel@tonic-gate typedef struct acpi_io_attribute
13007c478bd9Sstevel@tonic-gate {
130127f7c583Smyers     UINT8                           RangeType;
130227f7c583Smyers     UINT8                           Translation;
130327f7c583Smyers     UINT8                           TranslationType;
130427f7c583Smyers     UINT8                           Reserved1;
13057c478bd9Sstevel@tonic-gate 
13067c478bd9Sstevel@tonic-gate } ACPI_IO_ATTRIBUTE;
13077c478bd9Sstevel@tonic-gate 
13087c478bd9Sstevel@tonic-gate typedef union acpi_resource_attribute
13097c478bd9Sstevel@tonic-gate {
131027f7c583Smyers     ACPI_MEMORY_ATTRIBUTE           Mem;
131127f7c583Smyers     ACPI_IO_ATTRIBUTE               Io;
131230082d0cSmyers 
131330082d0cSmyers     /* Used for the *WordSpace macros */
131430082d0cSmyers 
131527f7c583Smyers     UINT8                           TypeSpecific;
13167c478bd9Sstevel@tonic-gate 
13177c478bd9Sstevel@tonic-gate } ACPI_RESOURCE_ATTRIBUTE;
13187c478bd9Sstevel@tonic-gate 
13197c478bd9Sstevel@tonic-gate typedef struct acpi_resource_source
13207c478bd9Sstevel@tonic-gate {
132127f7c583Smyers     UINT8                           Index;
132227f7c583Smyers     UINT16                          StringLength;
132327f7c583Smyers     char                            *StringPtr;
13247c478bd9Sstevel@tonic-gate 
13257c478bd9Sstevel@tonic-gate } ACPI_RESOURCE_SOURCE;
13267c478bd9Sstevel@tonic-gate 
1327186507a7Smyers /* Fields common to all address descriptors, 16/32/64 bit */
1328186507a7Smyers 
1329186507a7Smyers #define ACPI_RESOURCE_ADDRESS_COMMON \
133027f7c583Smyers     UINT8                           ResourceType; \
133127f7c583Smyers     UINT8                           ProducerConsumer; \
133227f7c583Smyers     UINT8                           Decode; \
133327f7c583Smyers     UINT8                           MinAddressFixed; \
133427f7c583Smyers     UINT8                           MaxAddressFixed; \
133527f7c583Smyers     ACPI_RESOURCE_ATTRIBUTE         Info;
1336186507a7Smyers 
1337186507a7Smyers typedef struct acpi_resource_address
1338186507a7Smyers {
1339186507a7Smyers     ACPI_RESOURCE_ADDRESS_COMMON
1340186507a7Smyers 
1341186507a7Smyers } ACPI_RESOURCE_ADDRESS;
1342186507a7Smyers 
13437c478bd9Sstevel@tonic-gate typedef struct acpi_resource_address16
13447c478bd9Sstevel@tonic-gate {
1345186507a7Smyers     ACPI_RESOURCE_ADDRESS_COMMON
134627f7c583Smyers     UINT16                          Granularity;
134727f7c583Smyers     UINT16                          Minimum;
134827f7c583Smyers     UINT16                          Maximum;
134927f7c583Smyers     UINT16                          TranslationOffset;
135027f7c583Smyers     UINT16                          AddressLength;
135127f7c583Smyers     ACPI_RESOURCE_SOURCE            ResourceSource;
13527c478bd9Sstevel@tonic-gate 
13537c478bd9Sstevel@tonic-gate } ACPI_RESOURCE_ADDRESS16;
13547c478bd9Sstevel@tonic-gate 
13557c478bd9Sstevel@tonic-gate typedef struct acpi_resource_address32
13567c478bd9Sstevel@tonic-gate {
1357186507a7Smyers     ACPI_RESOURCE_ADDRESS_COMMON
135827f7c583Smyers     UINT32                          Granularity;
135927f7c583Smyers     UINT32                          Minimum;
136027f7c583Smyers     UINT32                          Maximum;
136127f7c583Smyers     UINT32                          TranslationOffset;
136227f7c583Smyers     UINT32                          AddressLength;
136327f7c583Smyers     ACPI_RESOURCE_SOURCE            ResourceSource;
13647c478bd9Sstevel@tonic-gate 
13657c478bd9Sstevel@tonic-gate } ACPI_RESOURCE_ADDRESS32;
13667c478bd9Sstevel@tonic-gate 
13677c478bd9Sstevel@tonic-gate typedef struct acpi_resource_address64
13687c478bd9Sstevel@tonic-gate {
1369186507a7Smyers     ACPI_RESOURCE_ADDRESS_COMMON
137027f7c583Smyers     UINT64                          Granularity;
137127f7c583Smyers     UINT64                          Minimum;
137227f7c583Smyers     UINT64                          Maximum;
137327f7c583Smyers     UINT64                          TranslationOffset;
137427f7c583Smyers     UINT64                          AddressLength;
137527f7c583Smyers     ACPI_RESOURCE_SOURCE            ResourceSource;
13767c478bd9Sstevel@tonic-gate 
13777c478bd9Sstevel@tonic-gate } ACPI_RESOURCE_ADDRESS64;
13787c478bd9Sstevel@tonic-gate 
1379186507a7Smyers typedef struct acpi_resource_extended_address64
1380186507a7Smyers {
1381186507a7Smyers     ACPI_RESOURCE_ADDRESS_COMMON
138227f7c583Smyers     UINT8                           RevisionID;
138327f7c583Smyers     UINT64                          Granularity;
138427f7c583Smyers     UINT64                          Minimum;
138527f7c583Smyers     UINT64                          Maximum;
138627f7c583Smyers     UINT64                          TranslationOffset;
138727f7c583Smyers     UINT64                          AddressLength;
138827f7c583Smyers     UINT64                          TypeSpecific;
1389186507a7Smyers 
1390186507a7Smyers } ACPI_RESOURCE_EXTENDED_ADDRESS64;
1391186507a7Smyers 
1392186507a7Smyers typedef struct acpi_resource_extended_irq
13937c478bd9Sstevel@tonic-gate {
139427f7c583Smyers     UINT8                           ProducerConsumer;
139527f7c583Smyers     UINT8                           Triggering;
139627f7c583Smyers     UINT8                           Polarity;
139727f7c583Smyers     UINT8                           Sharable;
139827f7c583Smyers     UINT8                           InterruptCount;
139927f7c583Smyers     ACPI_RESOURCE_SOURCE            ResourceSource;
140027f7c583Smyers     UINT32                          Interrupts[1];
14017c478bd9Sstevel@tonic-gate 
1402186507a7Smyers } ACPI_RESOURCE_EXTENDED_IRQ;
1403186507a7Smyers 
1404186507a7Smyers typedef struct acpi_resource_generic_register
1405186507a7Smyers {
140627f7c583Smyers     UINT8                           SpaceId;
140727f7c583Smyers     UINT8                           BitWidth;
140827f7c583Smyers     UINT8                           BitOffset;
140927f7c583Smyers     UINT8                           AccessSize;
141027f7c583Smyers     UINT64                          Address;
1411186507a7Smyers 
1412186507a7Smyers } ACPI_RESOURCE_GENERIC_REGISTER;
14137c478bd9Sstevel@tonic-gate 
14147c478bd9Sstevel@tonic-gate 
14157c478bd9Sstevel@tonic-gate /* ACPI_RESOURCE_TYPEs */
14167c478bd9Sstevel@tonic-gate 
1417186507a7Smyers #define ACPI_RESOURCE_TYPE_IRQ                  0
1418186507a7Smyers #define ACPI_RESOURCE_TYPE_DMA                  1
1419186507a7Smyers #define ACPI_RESOURCE_TYPE_START_DEPENDENT      2
1420186507a7Smyers #define ACPI_RESOURCE_TYPE_END_DEPENDENT        3
1421186507a7Smyers #define ACPI_RESOURCE_TYPE_IO                   4
1422186507a7Smyers #define ACPI_RESOURCE_TYPE_FIXED_IO             5
1423186507a7Smyers #define ACPI_RESOURCE_TYPE_VENDOR               6
1424186507a7Smyers #define ACPI_RESOURCE_TYPE_END_TAG              7
1425186507a7Smyers #define ACPI_RESOURCE_TYPE_MEMORY24             8
1426186507a7Smyers #define ACPI_RESOURCE_TYPE_MEMORY32             9
1427186507a7Smyers #define ACPI_RESOURCE_TYPE_FIXED_MEMORY32       10
1428186507a7Smyers #define ACPI_RESOURCE_TYPE_ADDRESS16            11
1429186507a7Smyers #define ACPI_RESOURCE_TYPE_ADDRESS32            12
1430186507a7Smyers #define ACPI_RESOURCE_TYPE_ADDRESS64            13
1431186507a7Smyers #define ACPI_RESOURCE_TYPE_EXTENDED_ADDRESS64   14  /* ACPI 3.0 */
1432186507a7Smyers #define ACPI_RESOURCE_TYPE_EXTENDED_IRQ         15
1433186507a7Smyers #define ACPI_RESOURCE_TYPE_GENERIC_REGISTER     16
1434186507a7Smyers #define ACPI_RESOURCE_TYPE_MAX                  16
1435186507a7Smyers 
14367c478bd9Sstevel@tonic-gate 
14377c478bd9Sstevel@tonic-gate typedef union acpi_resource_data
14387c478bd9Sstevel@tonic-gate {
143927f7c583Smyers     ACPI_RESOURCE_IRQ                       Irq;
144027f7c583Smyers     ACPI_RESOURCE_DMA                       Dma;
144127f7c583Smyers     ACPI_RESOURCE_START_DEPENDENT           StartDpf;
144227f7c583Smyers     ACPI_RESOURCE_IO                        Io;
144327f7c583Smyers     ACPI_RESOURCE_FIXED_IO                  FixedIo;
144427f7c583Smyers     ACPI_RESOURCE_VENDOR                    Vendor;
144527f7c583Smyers     ACPI_RESOURCE_VENDOR_TYPED              VendorTyped;
144627f7c583Smyers     ACPI_RESOURCE_END_TAG                   EndTag;
144727f7c583Smyers     ACPI_RESOURCE_MEMORY24                  Memory24;
144827f7c583Smyers     ACPI_RESOURCE_MEMORY32                  Memory32;
144927f7c583Smyers     ACPI_RESOURCE_FIXED_MEMORY32            FixedMemory32;
145027f7c583Smyers     ACPI_RESOURCE_ADDRESS16                 Address16;
145127f7c583Smyers     ACPI_RESOURCE_ADDRESS32                 Address32;
145227f7c583Smyers     ACPI_RESOURCE_ADDRESS64                 Address64;
145327f7c583Smyers     ACPI_RESOURCE_EXTENDED_ADDRESS64        ExtAddress64;
145427f7c583Smyers     ACPI_RESOURCE_EXTENDED_IRQ              ExtendedIrq;
145527f7c583Smyers     ACPI_RESOURCE_GENERIC_REGISTER          GenericReg;
1456186507a7Smyers 
1457186507a7Smyers     /* Common fields */
1458186507a7Smyers 
145927f7c583Smyers     ACPI_RESOURCE_ADDRESS                   Address;        /* Common 16/32/64 address fields */
14607c478bd9Sstevel@tonic-gate 
14617c478bd9Sstevel@tonic-gate } ACPI_RESOURCE_DATA;
14627c478bd9Sstevel@tonic-gate 
1463186507a7Smyers 
14647c478bd9Sstevel@tonic-gate typedef struct acpi_resource
14657c478bd9Sstevel@tonic-gate {
146627f7c583Smyers     UINT32                          Type;
146727f7c583Smyers     UINT32                          Length;
146827f7c583Smyers     ACPI_RESOURCE_DATA              Data;
14697c478bd9Sstevel@tonic-gate 
14707c478bd9Sstevel@tonic-gate } ACPI_RESOURCE;
14717c478bd9Sstevel@tonic-gate 
147230082d0cSmyers /* restore default alignment */
1473186507a7Smyers 
147430082d0cSmyers #pragma pack()
14757c478bd9Sstevel@tonic-gate 
14767c478bd9Sstevel@tonic-gate 
147730082d0cSmyers #define ACPI_RS_SIZE_NO_DATA                8       /* Id + Length fields */
1478*db2bae30SDana Myers #define ACPI_RS_SIZE_MIN                    (UINT32) ACPI_ROUND_UP_TO_NATIVE_WORD (12)
147930082d0cSmyers #define ACPI_RS_SIZE(Type)                  (UINT32) (ACPI_RS_SIZE_NO_DATA + sizeof (Type))
14807c478bd9Sstevel@tonic-gate 
148130082d0cSmyers #define ACPI_NEXT_RESOURCE(Res)             (ACPI_RESOURCE *)((UINT8 *) Res + Res->Length)
14827c478bd9Sstevel@tonic-gate 
14837c478bd9Sstevel@tonic-gate 
14847c478bd9Sstevel@tonic-gate typedef struct acpi_pci_routing_table
14857c478bd9Sstevel@tonic-gate {
148627f7c583Smyers     UINT32                          Length;
148727f7c583Smyers     UINT32                          Pin;
148827f7c583Smyers     ACPI_INTEGER                    Address;        /* here for 64-bit alignment */
148927f7c583Smyers     UINT32                          SourceIndex;
149027f7c583Smyers     char                            Source[4];      /* pad to 64 bits so sizeof() works in all cases */
14917c478bd9Sstevel@tonic-gate 
14927c478bd9Sstevel@tonic-gate } ACPI_PCI_ROUTING_TABLE;
14937c478bd9Sstevel@tonic-gate 
14947c478bd9Sstevel@tonic-gate 
14957c478bd9Sstevel@tonic-gate #endif /* __ACTYPES_H__ */
1496