actypes.h revision 87031
1169689Skan/******************************************************************************
2169689Skan *
3169689Skan * Name: actypes.h - Common data types for the entire ACPI subsystem
4169689Skan *       $Revision: 199 $
5169689Skan *
6169689Skan *****************************************************************************/
7169689Skan
8169689Skan/******************************************************************************
9169689Skan *
10169689Skan * 1. Copyright Notice
11169689Skan *
12169689Skan * Some or all of this work - Copyright (c) 1999, 2000, 2001, Intel Corp.
13169689Skan * All rights reserved.
14169689Skan *
15169689Skan * 2. License
16169689Skan *
17169689Skan * 2.1. This is your license from Intel Corp. under its intellectual property
18169689Skan * rights.  You may have additional license terms from the party that provided
19169689Skan * you this software, covering your right to use that party's intellectual
20169689Skan * property rights.
21169689Skan *
22169689Skan * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a
23169689Skan * copy of the source code appearing in this file ("Covered Code") an
24169689Skan * irrevocable, perpetual, worldwide license under Intel's copyrights in the
25169689Skan * base code distributed originally by Intel ("Original Intel Code") to copy,
26169689Skan * make derivatives, distribute, use and display any portion of the Covered
27169689Skan * Code in any form, with the right to sublicense such rights; and
28169689Skan *
29169689Skan * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent
30169689Skan * license (with the right to sublicense), under only those claims of Intel
31169689Skan * patents that are infringed by the Original Intel Code, to make, use, sell,
32169689Skan * offer to sell, and import the Covered Code and derivative works thereof
33169689Skan * solely to the minimum extent necessary to exercise the above copyright
34169689Skan * license, and in no event shall the patent license extend to any additions
35169689Skan * to or modifications of the Original Intel Code.  No other license or right
36169689Skan * is granted directly or by implication, estoppel or otherwise;
37169689Skan *
38169689Skan * The above copyright and patent license is granted only if the following
39169689Skan * conditions are met:
40169689Skan *
41169689Skan * 3. Conditions
42169689Skan *
43169689Skan * 3.1. Redistribution of Source with Rights to Further Distribute Source.
44169689Skan * Redistribution of source code of any substantial portion of the Covered
45169689Skan * Code or modification with rights to further distribute source must include
46169689Skan * the above Copyright Notice, the above License, this list of Conditions,
47169689Skan * and the following Disclaimer and Export Compliance provision.  In addition,
48169689Skan * Licensee must cause all Covered Code to which Licensee contributes to
49169689Skan * contain a file documenting the changes Licensee made to create that Covered
50169689Skan * Code and the date of any change.  Licensee must include in that file the
51169689Skan * documentation of any changes made by any predecessor Licensee.  Licensee
52169689Skan * must include a prominent statement that the modification is derived,
53169689Skan * directly or indirectly, from Original Intel Code.
54169689Skan *
55169689Skan * 3.2. Redistribution of Source with no Rights to Further Distribute Source.
56169689Skan * Redistribution of source code of any substantial portion of the Covered
57169689Skan * Code or modification without rights to further distribute source must
58169689Skan * include the following Disclaimer and Export Compliance provision in the
59169689Skan * documentation and/or other materials provided with distribution.  In
60169689Skan * addition, Licensee may not authorize further sublicense of source of any
61169689Skan * portion of the Covered Code, and must include terms to the effect that the
62169689Skan * license from Licensee to its licensee is limited to the intellectual
63169689Skan * property embodied in the software Licensee provides to its licensee, and
64169689Skan * not to intellectual property embodied in modifications its licensee may
65169689Skan * make.
66169689Skan *
67169689Skan * 3.3. Redistribution of Executable. Redistribution in executable form of any
68169689Skan * substantial portion of the Covered Code or modification must reproduce the
69169689Skan * above Copyright Notice, and the following Disclaimer and Export Compliance
70169689Skan * provision in the documentation and/or other materials provided with the
71169689Skan * distribution.
72169689Skan *
73169689Skan * 3.4. Intel retains all right, title, and interest in and to the Original
74169689Skan * Intel Code.
75169689Skan *
76169689Skan * 3.5. Neither the name Intel nor any other trademark owned or controlled by
77169689Skan * Intel shall be used in advertising or otherwise to promote the sale, use or
78169689Skan * other dealings in products derived from or relating to the Covered Code
79169689Skan * without prior written authorization from Intel.
80169689Skan *
81169689Skan * 4. Disclaimer and Export Compliance
82169689Skan *
83169689Skan * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED
84169689Skan * HERE.  ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE
85169689Skan * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT,  ASSISTANCE,
86169689Skan * INSTALLATION, TRAINING OR OTHER SERVICES.  INTEL WILL NOT PROVIDE ANY
87169689Skan * UPDATES, ENHANCEMENTS OR EXTENSIONS.  INTEL SPECIFICALLY DISCLAIMS ANY
88169689Skan * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A
89169689Skan * PARTICULAR PURPOSE.
90169689Skan *
91169689Skan * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES
92169689Skan * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR
93169689Skan * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT,
94169689Skan * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY
95169689Skan * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL
96169689Skan * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.  THESE LIMITATIONS
97169689Skan * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY
98169689Skan * LIMITED REMEDY.
99169689Skan *
100169689Skan * 4.3. Licensee shall not export, either directly or indirectly, any of this
101169689Skan * software or system incorporating such software without first obtaining any
102169689Skan * required license or other approval from the U. S. Department of Commerce or
103169689Skan * any other agency or department of the United States Government.  In the
104169689Skan * event Licensee exports any such software from the United States or
105169689Skan * re-exports any such software from a foreign destination, Licensee shall
106169689Skan * ensure that the distribution and export/re-export of the software is in
107169689Skan * compliance with all laws, regulations, orders, or other restrictions of the
108169689Skan * U.S. Export Administration Regulations. Licensee agrees that neither it nor
109169689Skan * any of its subsidiaries will export/re-export any technical data, process,
110169689Skan * software, or service, directly or indirectly, to any country for which the
111169689Skan * United States government or any agency thereof requires an export license,
112169689Skan * other governmental approval, or letter of assurance, without first obtaining
113169689Skan * such license, approval or letter.
114169689Skan *
115169689Skan *****************************************************************************/
116169689Skan
117169689Skan#ifndef __ACTYPES_H__
118169689Skan#define __ACTYPES_H__
119169689Skan
120169689Skan/*! [Begin] no source code translation (keep the typedefs) */
121169689Skan
122169689Skan/*
123169689Skan * Data types - Fixed across all compilation models
124169689Skan *
125169689Skan * BOOLEAN      Logical Boolean.
126169689Skan *              1 byte value containing a 0 for FALSE or a 1 for TRUE.
127169689Skan *              Other values are undefined.
128169689Skan *
129169689Skan * INT8         8-bit  (1 byte) signed value
130169689Skan * UINT8        8-bit  (1 byte) unsigned value
131169689Skan * INT16        16-bit (2 byte) signed value
132169689Skan * UINT16       16-bit (2 byte) unsigned value
133169689Skan * INT32        32-bit (4 byte) signed value
134169689Skan * UINT32       32-bit (4 byte) unsigned value
135169689Skan * INT64        64-bit (8 byte) signed value
136169689Skan * UINT64       64-bit (8 byte) unsigned value
137169689Skan * NATIVE_INT   32-bit on IA-32, 64-bit on IA-64 signed value
138169689Skan * NATIVE_UINT  32-bit on IA-32, 64-bit on IA-64 unsigned value
139169689Skan * UCHAR        Character. 1 byte unsigned value.
140169689Skan */
141169689Skan
142169689Skan
143169689Skan#ifdef _IA64
144169689Skan/*
145169689Skan * 64-bit type definitions
146169689Skan */
147169689Skantypedef unsigned char                   UINT8;
148169689Skantypedef unsigned char                   BOOLEAN;
149169689Skantypedef unsigned char                   UCHAR;
150169689Skantypedef unsigned short                  UINT16;
151169689Skantypedef int                             INT32;
152169689Skantypedef unsigned int                    UINT32;
153169689Skantypedef COMPILER_DEPENDENT_UINT64       UINT64;
154169689Skan
155169689Skantypedef UINT64                          NATIVE_UINT;
156169689Skantypedef INT64                           NATIVE_INT;
157169689Skan
158169689Skantypedef NATIVE_UINT                     ACPI_TBLPTR;
159169689Skantypedef UINT64                          ACPI_IO_ADDRESS;
160169689Skantypedef UINT64                          ACPI_PHYSICAL_ADDRESS;
161169689Skan
162169689Skan#define ALIGNED_ADDRESS_BOUNDARY        0x00000008      /* No hardware alignment support in IA64 */
163169689Skan#define ACPI_USE_NATIVE_DIVIDE                          /* Native 64-bit integer support */
164169689Skan
165169689Skan
166169689Skan#elif _IA16
167169689Skan/*
168169689Skan * 16-bit type definitions
169169689Skan */
170169689Skantypedef unsigned char                   UINT8;
171169689Skantypedef unsigned char                   BOOLEAN;
172169689Skantypedef unsigned char                   UCHAR;
173169689Skantypedef unsigned int                    UINT16;
174169689Skantypedef long                            INT32;
175169689Skantypedef int                             INT16;
176169689Skantypedef unsigned long                   UINT32;
177169689Skan
178169689Skantypedef struct
179169689Skan{
180169689Skan    UINT32                                  Lo;
181169689Skan    UINT32                                  Hi;
182169689Skan
183169689Skan} UINT64;
184169689Skan
185169689Skantypedef UINT16                          NATIVE_UINT;
186169689Skantypedef INT16                           NATIVE_INT;
187169689Skan
188169689Skantypedef UINT32                          ACPI_TBLPTR;
189169689Skantypedef UINT32                          ACPI_IO_ADDRESS;
190169689Skantypedef char                            *ACPI_PHYSICAL_ADDRESS;
191169689Skan
192169689Skan#define ALIGNED_ADDRESS_BOUNDARY        0x00000002
193169689Skan#define _HW_ALIGNMENT_SUPPORT
194169689Skan#define ACPI_USE_NATIVE_DIVIDE                          /* No 64-bit integers, ok to use native divide */
195169689Skan
196169689Skan/*
197169689Skan * (16-bit only) internal integers must be 32-bits, so
198169689Skan * 64-bit integers cannot be supported
199169689Skan */
200169689Skan#define ACPI_NO_INTEGER64_SUPPORT
201169689Skan
202169689Skan
203169689Skan#else
204169689Skan/*
205169689Skan * 32-bit type definitions (default)
206169689Skan */
207169689Skantypedef unsigned char                   UINT8;
208169689Skantypedef unsigned char                   BOOLEAN;
209169689Skantypedef unsigned char                   UCHAR;
210169689Skantypedef unsigned short                  UINT16;
211169689Skantypedef int                             INT32;
212169689Skantypedef unsigned int                    UINT32;
213169689Skantypedef COMPILER_DEPENDENT_UINT64       UINT64;
214169689Skan
215169689Skantypedef UINT32                          NATIVE_UINT;
216169689Skantypedef INT32                           NATIVE_INT;
217169689Skan
218169689Skantypedef NATIVE_UINT                     ACPI_TBLPTR;
219169689Skantypedef UINT32                          ACPI_IO_ADDRESS;
220169689Skantypedef UINT64                          ACPI_PHYSICAL_ADDRESS;
221169689Skan
222169689Skan#define ALIGNED_ADDRESS_BOUNDARY        0x00000004
223169689Skan#define _HW_ALIGNMENT_SUPPORT
224169689Skan#endif
225169689Skan
226169689Skan
227169689Skan
228169689Skan/*
229169689Skan * Miscellaneous common types
230169689Skan */
231169689Skan
232169689Skantypedef UINT32                          UINT32_BIT;
233169689Skantypedef NATIVE_UINT                     ACPI_PTRDIFF;
234169689Skantypedef char                            NATIVE_CHAR;
235169689Skan
236169689Skan
237169689Skan/*
238169689Skan * Data type ranges
239169689Skan */
240169689Skan
241169689Skan#define ACPI_UINT8_MAX                  (UINT8)  0xFF
242169689Skan#define ACPI_UINT16_MAX                 (UINT16) 0xFFFF
243169689Skan#define ACPI_UINT32_MAX                 (UINT32) 0xFFFFFFFF
244169689Skan#define ACPI_UINT64_MAX                 (UINT64) 0xFFFFFFFFFFFFFFFF
245169689Skan
246169689Skan
247169689Skan#ifdef DEFINE_ALTERNATE_TYPES
248169689Skan/*
249169689Skan * Types used only in translated source
250169689Skan */
251169689Skantypedef INT32                           s32;
252169689Skantypedef UINT8                           u8;
253169689Skantypedef UINT16                          u16;
254169689Skantypedef UINT32                          u32;
255169689Skantypedef UINT64                          u64;
256169689Skan#endif
257169689Skan/*! [End] no source code translation !*/
258169689Skan
259169689Skan
260169689Skan/*
261169689Skan * Useful defines
262169689Skan */
263169689Skan
264169689Skan#ifdef FALSE
265169689Skan#undef FALSE
266169689Skan#endif
267169689Skan#define FALSE                           (1 == 0)
268169689Skan
269169689Skan#ifdef TRUE
270169689Skan#undef TRUE
271169689Skan#endif
272169689Skan#define TRUE                            (1 == 1)
273169689Skan
274169689Skan#ifndef NULL
275169689Skan#define NULL                            (void *) 0
276169689Skan#endif
277169689Skan
278169689Skan
279169689Skan/*
280169689Skan * Local datatypes
281169689Skan */
282169689Skan
283169689Skantypedef UINT32                          ACPI_STATUS;    /* All ACPI Exceptions */
284169689Skantypedef UINT32                          ACPI_NAME;      /* 4-byte ACPI name */
285169689Skantypedef char*                           ACPI_STRING;    /* Null terminated ASCII string */
286169689Skantypedef void*                           ACPI_HANDLE;    /* Actually a ptr to an Node */
287169689Skan
288169689Skantypedef struct
289169689Skan{
290169689Skan    UINT32                      Lo;
291169689Skan    UINT32                      Hi;
292169689Skan
293169689Skan} UINT64_STRUCT;
294169689Skan
295169689Skantypedef union
296169689Skan{
297169689Skan    UINT64                      Full;
298169689Skan    UINT64_STRUCT               Part;
299169689Skan
300169689Skan} UINT64_OVERLAY;
301169689Skan
302169689Skan
303169689Skan/*
304169689Skan * Acpi integer width. In ACPI version 1, integers are
305169689Skan * 32 bits.  In ACPI version 2, integers are 64 bits.
306169689Skan * Note that this pertains to the ACPI integer type only, not
307169689Skan * other integers used in the implementation of the ACPI CA
308169689Skan * subsystem.
309169689Skan */
310169689Skan#ifdef ACPI_NO_INTEGER64_SUPPORT
311169689Skan
312169689Skan/* 32-bit integers only, no 64-bit support */
313169689Skan
314169689Skantypedef UINT32                          ACPI_INTEGER;
315169689Skan#define ACPI_INTEGER_MAX                ACPI_UINT32_MAX
316169689Skan#define ACPI_INTEGER_BIT_SIZE           32
317169689Skan#define ACPI_MAX_BCD_VALUE              99999999
318169689Skan#define ACPI_MAX_BCD_DIGITS             8
319169689Skan#define ACPI_MAX_DECIMAL_DIGITS         10
320169689Skan
321169689Skan#define ACPI_USE_NATIVE_DIVIDE          /* Use compiler native 32-bit divide */
322169689Skan
323169689Skan
324169689Skan#else
325169689Skan
326169689Skan/* 64-bit integers */
327169689Skan
328169689Skantypedef UINT64                          ACPI_INTEGER;
329169689Skan#define ACPI_INTEGER_MAX                ACPI_UINT64_MAX
330169689Skan#define ACPI_INTEGER_BIT_SIZE           64
331169689Skan#define ACPI_MAX_BCD_VALUE              9999999999999999
332169689Skan#define ACPI_MAX_BCD_DIGITS             16
333169689Skan#define ACPI_MAX_DECIMAL_DIGITS         19
334169689Skan
335169689Skan#ifdef _IA64
336169689Skan#define ACPI_USE_NATIVE_DIVIDE          /* Use compiler native 64-bit divide */
337169689Skan#endif
338169689Skan#endif
339169689Skan
340169689Skan
341169689Skan/*
342169689Skan * Constants with special meanings
343169689Skan */
344169689Skan
345169689Skan#define ACPI_ROOT_OBJECT                (ACPI_HANDLE)(-1)
346169689Skan
347169689Skan
348169689Skan/*
349169689Skan * Initialization sequence
350169689Skan */
351169689Skan#define ACPI_FULL_INITIALIZATION        0x00
352169689Skan#define ACPI_NO_ADDRESS_SPACE_INIT      0x01
353169689Skan#define ACPI_NO_HARDWARE_INIT           0x02
354169689Skan#define ACPI_NO_EVENT_INIT              0x04
355169689Skan#define ACPI_NO_ACPI_ENABLE             0x08
356169689Skan#define ACPI_NO_DEVICE_INIT             0x10
357169689Skan#define ACPI_NO_OBJECT_INIT             0x20
358169689Skan
359169689Skan/*
360169689Skan * Initialization state
361169689Skan */
362169689Skan#define ACPI_INITIALIZED_OK             0x01
363169689Skan
364169689Skan/*
365169689Skan * Power state values
366169689Skan */
367169689Skan
368169689Skan#define ACPI_STATE_UNKNOWN              (UINT8) 0xFF
369169689Skan
370169689Skan#define ACPI_STATE_S0                   (UINT8) 0
371169689Skan#define ACPI_STATE_S1                   (UINT8) 1
372169689Skan#define ACPI_STATE_S2                   (UINT8) 2
373169689Skan#define ACPI_STATE_S3                   (UINT8) 3
374169689Skan#define ACPI_STATE_S4                   (UINT8) 4
375169689Skan#define ACPI_STATE_S5                   (UINT8) 5
376169689Skan#define ACPI_S_STATES_MAX               ACPI_STATE_S5
377169689Skan#define ACPI_S_STATE_COUNT              6
378169689Skan
379169689Skan#define ACPI_STATE_D0                   (UINT8) 0
380169689Skan#define ACPI_STATE_D1                   (UINT8) 1
381169689Skan#define ACPI_STATE_D2                   (UINT8) 2
382169689Skan#define ACPI_STATE_D3                   (UINT8) 3
383169689Skan#define ACPI_D_STATES_MAX               ACPI_STATE_D3
384169689Skan#define ACPI_D_STATE_COUNT              4
385169689Skan
386169689Skan/*
387169689Skan * Sleep type invalid value
388169689Skan */
389169689Skan#define ACPI_SLEEP_TYPE_MAX             0x7
390169689Skan#define ACPI_SLEEP_TYPE_INVALID         0xFF
391169689Skan
392169689Skan/*
393169689Skan * Standard notify values
394169689Skan */
395169689Skan#define ACPI_NOTIFY_BUS_CHECK           (UINT8) 0
396169689Skan#define ACPI_NOTIFY_DEVICE_CHECK        (UINT8) 1
397169689Skan#define ACPI_NOTIFY_DEVICE_WAKE         (UINT8) 2
398169689Skan#define ACPI_NOTIFY_EJECT_REQUEST       (UINT8) 3
399169689Skan#define ACPI_NOTIFY_DEVICE_CHECK_LIGHT  (UINT8) 4
400169689Skan#define ACPI_NOTIFY_FREQUENCY_MISMATCH  (UINT8) 5
401169689Skan#define ACPI_NOTIFY_BUS_MODE_MISMATCH   (UINT8) 6
402169689Skan#define ACPI_NOTIFY_POWER_FAULT         (UINT8) 7
403169689Skan
404169689Skan
405169689Skan/*
406169689Skan *  Table types.  These values are passed to the table related APIs
407169689Skan */
408169689Skan
409169689Skantypedef UINT32                          ACPI_TABLE_TYPE;
410169689Skan
411169689Skan#define ACPI_TABLE_RSDP                 (ACPI_TABLE_TYPE) 0
412169689Skan#define ACPI_TABLE_DSDT                 (ACPI_TABLE_TYPE) 1
413169689Skan#define ACPI_TABLE_FADT                 (ACPI_TABLE_TYPE) 2
414169689Skan#define ACPI_TABLE_FACS                 (ACPI_TABLE_TYPE) 3
415169689Skan#define ACPI_TABLE_PSDT                 (ACPI_TABLE_TYPE) 4
416169689Skan#define ACPI_TABLE_SSDT                 (ACPI_TABLE_TYPE) 5
417169689Skan#define ACPI_TABLE_XSDT                 (ACPI_TABLE_TYPE) 6
418169689Skan#define ACPI_TABLE_MAX                  6
419169689Skan#define NUM_ACPI_TABLES                 (ACPI_TABLE_MAX+1)
420169689Skan
421169689Skan
422169689Skan/*
423169689Skan * Types associated with names.  The first group of
424169689Skan * values correspond to the definition of the ACPI
425169689Skan * ObjectType operator (See the ACPI Spec).  Therefore,
426169689Skan * only add to the first group if the spec changes!
427169689Skan *
428169689Skan * Types must be kept in sync with the AcpiNsProperties
429169689Skan * and AcpiNsTypeNames arrays
430169689Skan */
431169689Skan
432169689Skantypedef UINT32                          ACPI_OBJECT_TYPE;
433169689Skantypedef UINT8                           ACPI_OBJECT_TYPE8;
434169689Skan
435169689Skan
436169689Skan#define ACPI_TYPE_ANY                   0x00
437169689Skan#define ACPI_TYPE_INTEGER               0x01  /* Byte/Word/Dword/Zero/One/Ones */
438169689Skan#define ACPI_TYPE_STRING                0x02
439169689Skan#define ACPI_TYPE_BUFFER                0x03
440169689Skan#define ACPI_TYPE_PACKAGE               0x04  /* ByteConst, multiple DataTerm/Constant/SuperName */
441169689Skan#define ACPI_TYPE_FIELD_UNIT            0x05
442169689Skan#define ACPI_TYPE_DEVICE                0x06  /* Name, multiple Node */
443169689Skan#define ACPI_TYPE_EVENT                 0x07
444169689Skan#define ACPI_TYPE_METHOD                0x08  /* Name, ByteConst, multiple Code */
445169689Skan#define ACPI_TYPE_MUTEX                 0x09
446169689Skan#define ACPI_TYPE_REGION                0x0A
447169689Skan#define ACPI_TYPE_POWER                 0x0B  /* Name,ByteConst,WordConst,multi Node */
448169689Skan#define ACPI_TYPE_PROCESSOR             0x0C  /* Name,ByteConst,DWordConst,ByteConst,multi NmO */
449169689Skan#define ACPI_TYPE_THERMAL               0x0D  /* Name, multiple Node */
450169689Skan#define ACPI_TYPE_BUFFER_FIELD          0x0E
451169689Skan#define ACPI_TYPE_DDB_HANDLE            0x0F
452169689Skan#define ACPI_TYPE_DEBUG_OBJECT          0x10
453169689Skan
454169689Skan#define ACPI_TYPE_MAX                   0x10
455169689Skan
456169689Skan/*
457169689Skan * This section contains object types that do not relate to the ACPI ObjectType operator.
458169689Skan * They are used for various internal purposes only.  If new predefined ACPI_TYPEs are
459169689Skan * added (via the ACPI specification), these internal types must move upwards.
460169689Skan * Also, values exceeding the largest official ACPI ObjectType must not overlap with
461169689Skan * defined AML opcodes.
462169689Skan */
463169689Skan#define INTERNAL_TYPE_BEGIN             0x11
464169689Skan
465169689Skan#define INTERNAL_TYPE_REGION_FIELD      0x11
466169689Skan#define INTERNAL_TYPE_BANK_FIELD        0x12
467169689Skan#define INTERNAL_TYPE_INDEX_FIELD       0x13
468169689Skan#define INTERNAL_TYPE_REFERENCE         0x14  /* Arg#, Local#, Name, Debug; used only in descriptors */
469169689Skan#define INTERNAL_TYPE_ALIAS             0x15
470169689Skan#define INTERNAL_TYPE_NOTIFY            0x16
471169689Skan#define INTERNAL_TYPE_ADDRESS_HANDLER   0x17
472169689Skan#define INTERNAL_TYPE_RESOURCE          0x18
473169689Skan#define INTERNAL_TYPE_RESOURCE_FIELD    0x19
474169689Skan
475169689Skan
476169689Skan#define INTERNAL_TYPE_NODE_MAX          0x19
477169689Skan
478169689Skan/* These are pseudo-types because there are never any namespace nodes with these types */
479169689Skan
480169689Skan#define INTERNAL_TYPE_FIELD_DEFN        0x1A  /* Name, ByteConst, multiple FieldElement */
481169689Skan#define INTERNAL_TYPE_BANK_FIELD_DEFN   0x1B  /* 2 Name,DWordConst,ByteConst,multi FieldElement */
482169689Skan#define INTERNAL_TYPE_INDEX_FIELD_DEFN  0x1C  /* 2 Name, ByteConst, multiple FieldElement */
483169689Skan#define INTERNAL_TYPE_IF                0x1D
484169689Skan#define INTERNAL_TYPE_ELSE              0x1E
485169689Skan#define INTERNAL_TYPE_WHILE             0x1F
486169689Skan#define INTERNAL_TYPE_SCOPE             0x20  /* Name, multiple Node */
487169689Skan#define INTERNAL_TYPE_DEF_ANY           0x21  /* type is Any, suppress search of enclosing scopes */
488169689Skan#define INTERNAL_TYPE_EXTRA             0x22
489169689Skan#define INTERNAL_TYPE_DATA              0x23
490169689Skan
491169689Skan#define INTERNAL_TYPE_MAX               0x23
492169689Skan
493169689Skan#define INTERNAL_TYPE_INVALID           0x24
494169689Skan#define ACPI_TYPE_NOT_FOUND             0xFF
495169689Skan
496169689Skan
497169689Skan/*
498169689Skan * Bitmapped ACPI types
499169689Skan * Used internally only
500169689Skan */
501169689Skan#define ACPI_BTYPE_ANY                  0x00000000
502169689Skan#define ACPI_BTYPE_INTEGER              0x00000001
503169689Skan#define ACPI_BTYPE_STRING               0x00000002
504169689Skan#define ACPI_BTYPE_BUFFER               0x00000004
505169689Skan#define ACPI_BTYPE_PACKAGE              0x00000008
506169689Skan#define ACPI_BTYPE_FIELD_UNIT           0x00000010
507169689Skan#define ACPI_BTYPE_DEVICE               0x00000020
508169689Skan#define ACPI_BTYPE_EVENT                0x00000040
509169689Skan#define ACPI_BTYPE_METHOD               0x00000080
510169689Skan#define ACPI_BTYPE_MUTEX                0x00000100
511169689Skan#define ACPI_BTYPE_REGION               0x00000200
512169689Skan#define ACPI_BTYPE_POWER                0x00000400
513169689Skan#define ACPI_BTYPE_PROCESSOR            0x00000800
514169689Skan#define ACPI_BTYPE_THERMAL              0x00001000
515169689Skan#define ACPI_BTYPE_BUFFER_FIELD         0x00002000
516169689Skan#define ACPI_BTYPE_DDB_HANDLE           0x00004000
517169689Skan#define ACPI_BTYPE_DEBUG_OBJECT         0x00008000
518169689Skan#define ACPI_BTYPE_REFERENCE            0x00010000
519169689Skan#define ACPI_BTYPE_RESOURCE             0x00020000
520169689Skan
521169689Skan#define ACPI_BTYPE_COMPUTE_DATA         (ACPI_BTYPE_INTEGER | ACPI_BTYPE_STRING | ACPI_BTYPE_BUFFER)
522169689Skan
523169689Skan#define ACPI_BTYPE_DATA                 (ACPI_BTYPE_COMPUTE_DATA  | ACPI_BTYPE_PACKAGE)
524169689Skan#define ACPI_BTYPE_DATA_REFERENCE       (ACPI_BTYPE_DATA | ACPI_BTYPE_REFERENCE | ACPI_BTYPE_DDB_HANDLE)
525169689Skan#define ACPI_BTYPE_DEVICE_OBJECTS       (ACPI_BTYPE_DEVICE | ACPI_BTYPE_THERMAL | ACPI_BTYPE_PROCESSOR)
526169689Skan#define ACPI_BTYPE_OBJECTS_AND_REFS     0x0001FFFF  /* ARG or LOCAL */
527169689Skan#define ACPI_BTYPE_ALL_OBJECTS          0x0000FFFF
528169689Skan
529169689Skan/*
530169689Skan * All I/O
531169689Skan */
532169689Skan#define ACPI_READ                       0
533169689Skan#define ACPI_WRITE                      1
534169689Skan
535169689Skan
536169689Skan/*
537169689Skan * AcpiEvent Types:
538169689Skan * ------------
539169689Skan * Fixed & general purpose...
540169689Skan */
541169689Skan
542169689Skantypedef UINT32                          ACPI_EVENT_TYPE;
543169689Skan
544169689Skan#define ACPI_EVENT_FIXED                (ACPI_EVENT_TYPE) 0
545169689Skan#define ACPI_EVENT_GPE                  (ACPI_EVENT_TYPE) 1
546169689Skan
547169689Skan/*
548169689Skan * Fixed events
549169689Skan */
550169689Skan
551169689Skan#define ACPI_EVENT_PMTIMER              (ACPI_EVENT_TYPE) 0
552169689Skan    /*
553169689Skan     * There's no bus master event so index 1 is used for IRQ's that are not
554169689Skan     * handled by the SCI handler
555169689Skan     */
556169689Skan#define ACPI_EVENT_NOT_USED             (ACPI_EVENT_TYPE) 1
557169689Skan#define ACPI_EVENT_GLOBAL               (ACPI_EVENT_TYPE) 2
558169689Skan#define ACPI_EVENT_POWER_BUTTON         (ACPI_EVENT_TYPE) 3
559169689Skan#define ACPI_EVENT_SLEEP_BUTTON         (ACPI_EVENT_TYPE) 4
560169689Skan#define ACPI_EVENT_RTC                  (ACPI_EVENT_TYPE) 5
561169689Skan#define ACPI_EVENT_GENERAL              (ACPI_EVENT_TYPE) 6
562169689Skan#define ACPI_EVENT_MAX                  6
563169689Skan#define ACPI_NUM_FIXED_EVENTS           (ACPI_EVENT_TYPE) 7
564169689Skan
565169689Skan#define ACPI_GPE_INVALID                0xFF
566169689Skan#define ACPI_GPE_MAX                    0xFF
567169689Skan#define ACPI_NUM_GPE                    256
568169689Skan
569169689Skan#define ACPI_EVENT_LEVEL_TRIGGERED      (ACPI_EVENT_TYPE) 1
570169689Skan#define ACPI_EVENT_EDGE_TRIGGERED       (ACPI_EVENT_TYPE) 2
571169689Skan
572169689Skan/*
573169689Skan * GPEs
574169689Skan */
575169689Skan#define ACPI_EVENT_ENABLE               0x1
576169689Skan#define ACPI_EVENT_WAKE_ENABLE          0x2
577169689Skan
578169689Skan#define ACPI_EVENT_DISABLE              0x1
579169689Skan#define ACPI_EVENT_WAKE_DISABLE         0x2
580169689Skan
581169689Skan
582169689Skan/*
583169689Skan * AcpiEvent Status:
584169689Skan * -------------
585169689Skan * The encoding of ACPI_EVENT_STATUS is illustrated below.
586169689Skan * Note that a set bit (1) indicates the property is TRUE
587169689Skan * (e.g. if bit 0 is set then the event is enabled).
588169689Skan * +-------------+-+-+-+
589169689Skan * |   Bits 31:3 |2|1|0|
590169689Skan * +-------------+-+-+-+
591169689Skan *          |     | | |
592169689Skan *          |     | | +- Enabled?
593169689Skan *          |     | +--- Enabled for wake?
594169689Skan *          |     +----- Set?
595169689Skan *          +----------- <Reserved>
596169689Skan */
597169689Skantypedef UINT32                          ACPI_EVENT_STATUS;
598169689Skan
599169689Skan#define ACPI_EVENT_FLAG_DISABLED        (ACPI_EVENT_STATUS) 0x00
600169689Skan#define ACPI_EVENT_FLAG_ENABLED         (ACPI_EVENT_STATUS) 0x01
601169689Skan#define ACPI_EVENT_FLAG_WAKE_ENABLED    (ACPI_EVENT_STATUS) 0x02
602169689Skan#define ACPI_EVENT_FLAG_SET             (ACPI_EVENT_STATUS) 0x04
603169689Skan
604169689Skan
605169689Skan/* Notify types */
606169689Skan
607169689Skan#define ACPI_SYSTEM_NOTIFY              0
608169689Skan#define ACPI_DEVICE_NOTIFY              1
609169689Skan#define ACPI_MAX_NOTIFY_HANDLER_TYPE    1
610169689Skan
611169689Skan#define MAX_SYS_NOTIFY                  0x7f
612169689Skan
613169689Skan
614169689Skan/* Address Space (Operation Region) Types */
615169689Skan
616169689Skantypedef UINT8                           ACPI_ADR_SPACE_TYPE;
617169689Skan
618169689Skan#define ACPI_ADR_SPACE_SYSTEM_MEMORY    (ACPI_ADR_SPACE_TYPE) 0
619169689Skan#define ACPI_ADR_SPACE_SYSTEM_IO        (ACPI_ADR_SPACE_TYPE) 1
620169689Skan#define ACPI_ADR_SPACE_PCI_CONFIG       (ACPI_ADR_SPACE_TYPE) 2
621169689Skan#define ACPI_ADR_SPACE_EC               (ACPI_ADR_SPACE_TYPE) 3
622169689Skan#define ACPI_ADR_SPACE_SMBUS            (ACPI_ADR_SPACE_TYPE) 4
623169689Skan#define ACPI_ADR_SPACE_CMOS             (ACPI_ADR_SPACE_TYPE) 5
624169689Skan#define ACPI_ADR_SPACE_PCI_BAR_TARGET   (ACPI_ADR_SPACE_TYPE) 6
625169689Skan
626169689Skan
627169689Skan/*
628169689Skan * External ACPI object definition
629169689Skan */
630169689Skan
631169689Skantypedef union AcpiObj
632169689Skan{
633169689Skan    ACPI_OBJECT_TYPE            Type;   /* See definition of AcpiNsType for values */
634169689Skan    struct
635169689Skan    {
636169689Skan        ACPI_OBJECT_TYPE            Type;
637169689Skan        ACPI_INTEGER                Value;      /* The actual number */
638169689Skan    } Integer;
639169689Skan
640169689Skan    struct
641169689Skan    {
642169689Skan        ACPI_OBJECT_TYPE            Type;
643169689Skan        UINT32                      Length;     /* # of bytes in string, excluding trailing null */
644169689Skan        NATIVE_CHAR                 *Pointer;   /* points to the string value */
645169689Skan    } String;
646169689Skan
647169689Skan    struct
648169689Skan    {
649169689Skan        ACPI_OBJECT_TYPE            Type;
650169689Skan        UINT32                      Length;     /* # of bytes in buffer */
651169689Skan        UINT8                       *Pointer;   /* points to the buffer */
652169689Skan    } Buffer;
653169689Skan
654169689Skan    struct
655169689Skan    {
656169689Skan        ACPI_OBJECT_TYPE            Type;
657169689Skan        UINT32                      Fill1;
658169689Skan        ACPI_HANDLE                 Handle;     /* object reference */
659169689Skan    } Reference;
660169689Skan
661169689Skan    struct
662169689Skan    {
663169689Skan        ACPI_OBJECT_TYPE            Type;
664169689Skan        UINT32                      Count;      /* # of elements in package */
665169689Skan        union AcpiObj               *Elements;  /* Pointer to an array of ACPI_OBJECTs */
666169689Skan    } Package;
667169689Skan
668169689Skan    struct
669169689Skan    {
670169689Skan        ACPI_OBJECT_TYPE            Type;
671169689Skan        UINT32                      ProcId;
672169689Skan        ACPI_IO_ADDRESS             PblkAddress;
673169689Skan        UINT32                      PblkLength;
674169689Skan    } Processor;
675169689Skan
676169689Skan    struct
677169689Skan    {
678169689Skan        ACPI_OBJECT_TYPE            Type;
679169689Skan        UINT32                      SystemLevel;
680169689Skan        UINT32                      ResourceOrder;
681169689Skan    } PowerResource;
682169689Skan
683169689Skan} ACPI_OBJECT, *PACPI_OBJECT;
684169689Skan
685169689Skan
686169689Skan/*
687169689Skan * List of objects, used as a parameter list for control method evaluation
688169689Skan */
689169689Skan
690169689Skantypedef struct AcpiObjList
691169689Skan{
692169689Skan    UINT32                      Count;
693169689Skan    ACPI_OBJECT                 *Pointer;
694169689Skan
695169689Skan} ACPI_OBJECT_LIST, *PACPI_OBJECT_LIST;
696169689Skan
697169689Skan
698169689Skan/*
699169689Skan * Miscellaneous common Data Structures used by the interfaces
700169689Skan */
701169689Skan
702169689Skantypedef struct
703169689Skan{
704169689Skan    UINT32                      Length;         /* Length in bytes of the buffer */
705169689Skan    void                        *Pointer;       /* pointer to buffer */
706169689Skan
707169689Skan} ACPI_BUFFER;
708169689Skan
709169689Skan
710169689Skan/*
711169689Skan * NameType for AcpiGetName
712169689Skan */
713169689Skan
714169689Skan#define ACPI_FULL_PATHNAME              0
715169689Skan#define ACPI_SINGLE_NAME                1
716169689Skan#define ACPI_NAME_TYPE_MAX              1
717169689Skan
718169689Skan
719169689Skan/*
720169689Skan * Structure and flags for AcpiGetSystemInfo
721169689Skan */
722169689Skan
723169689Skan#define SYS_MODE_UNKNOWN                0x0000
724169689Skan#define SYS_MODE_ACPI                   0x0001
725169689Skan#define SYS_MODE_LEGACY                 0x0002
726169689Skan#define SYS_MODES_MASK                  0x0003
727169689Skan
728169689Skan
729169689Skan/*
730169689Skan * ACPI Table Info.  One per ACPI table _type_
731169689Skan */
732169689Skantypedef struct AcpiTableInfo
733169689Skan{
734169689Skan    UINT32                      Count;
735169689Skan
736169689Skan} ACPI_TABLE_INFO;
737169689Skan
738169689Skan
739169689Skan/*
740169689Skan * System info returned by AcpiGetSystemInfo()
741169689Skan */
742169689Skan
743169689Skantypedef struct _AcpiSysInfo
744169689Skan{
745169689Skan    UINT32                      AcpiCaVersion;
746169689Skan    UINT32                      Flags;
747169689Skan    UINT32                      TimerResolution;
748169689Skan    UINT32                      Reserved1;
749169689Skan    UINT32                      Reserved2;
750169689Skan    UINT32                      DebugLevel;
751169689Skan    UINT32                      DebugLayer;
752169689Skan    UINT32                      NumTableTypes;
753169689Skan    ACPI_TABLE_INFO             TableInfo [NUM_ACPI_TABLES];
754169689Skan
755169689Skan} ACPI_SYSTEM_INFO;
756169689Skan
757169689Skan
758169689Skan/*
759169689Skan * Various handlers and callback procedures
760169689Skan */
761169689Skan
762169689Skantypedef
763169689SkanUINT32 (*ACPI_EVENT_HANDLER) (
764169689Skan    void                        *Context);
765169689Skan
766169689Skantypedef
767169689Skanvoid (*ACPI_GPE_HANDLER) (
768169689Skan    void                        *Context);
769169689Skan
770169689Skantypedef
771169689Skanvoid (*ACPI_NOTIFY_HANDLER) (
772169689Skan    ACPI_HANDLE                 Device,
773169689Skan    UINT32                      Value,
774169689Skan    void                        *Context);
775169689Skan
776169689Skantypedef
777169689Skanvoid (*ACPI_OBJECT_HANDLER) (
778169689Skan    ACPI_HANDLE                 Object,
779169689Skan    UINT32                      Function,
780169689Skan    void                        *Data);
781169689Skan
782169689Skan
783169689Skan/* Address Spaces (Operation Regions */
784169689Skan
785169689Skantypedef
786169689SkanACPI_STATUS (*ACPI_ADR_SPACE_HANDLER) (
787169689Skan    UINT32                      Function,
788169689Skan    ACPI_PHYSICAL_ADDRESS       Address,
789169689Skan    UINT32                      BitWidth,
790169689Skan    ACPI_INTEGER                *Value,
791169689Skan    void                        *HandlerContext,
792169689Skan    void                        *RegionContext);
793169689Skan
794169689Skan#define ACPI_DEFAULT_HANDLER            ((ACPI_ADR_SPACE_HANDLER) NULL)
795169689Skan
796169689Skan
797169689Skantypedef
798169689SkanACPI_STATUS (*ACPI_ADR_SPACE_SETUP) (
799169689Skan    ACPI_HANDLE                 RegionHandle,
800169689Skan    UINT32                      Function,
801169689Skan    void                        *HandlerContext,
802169689Skan    void                        **RegionContext);
803169689Skan
804169689Skan#define ACPI_REGION_ACTIVATE    0
805169689Skan#define ACPI_REGION_DEACTIVATE  1
806169689Skan
807169689Skantypedef
808169689SkanACPI_STATUS (*ACPI_WALK_CALLBACK) (
809169689Skan    ACPI_HANDLE                 ObjHandle,
810169689Skan    UINT32                      NestingLevel,
811169689Skan    void                        *Context,
812169689Skan    void                        **ReturnValue);
813169689Skan
814169689Skan
815169689Skan/* Interrupt handler return values */
816169689Skan
817169689Skan#define INTERRUPT_NOT_HANDLED           0x00
818169689Skan#define INTERRUPT_HANDLED               0x01
819169689Skan
820169689Skan
821169689Skan/* Structure and flags for AcpiGetDeviceInfo */
822169689Skan
823169689Skan#define ACPI_VALID_HID                  0x1
824169689Skan#define ACPI_VALID_UID                  0x2
825169689Skan#define ACPI_VALID_ADR                  0x4
826169689Skan#define ACPI_VALID_STA                  0x8
827169689Skan
828169689Skan
829169689Skan#define ACPI_COMMON_OBJ_INFO \
830169689Skan    ACPI_OBJECT_TYPE            Type;           /* ACPI object type */ \
831169689Skan    ACPI_NAME                   Name            /* ACPI object Name */
832169689Skan
833169689Skan
834169689Skantypedef struct
835169689Skan{
836169689Skan    ACPI_COMMON_OBJ_INFO;
837169689Skan} ACPI_OBJ_INFO_HEADER;
838169689Skan
839169689Skan
840169689Skantypedef struct
841169689Skan{
842169689Skan    ACPI_COMMON_OBJ_INFO;
843169689Skan
844169689Skan    UINT32                      Valid;              /*  Are the next bits legit? */
845169689Skan    NATIVE_CHAR                 HardwareId[9];      /*  _HID value if any */
846169689Skan    NATIVE_CHAR                 UniqueId[9];        /*  _UID value if any */
847169689Skan    ACPI_INTEGER                Address;            /*  _ADR value if any */
848169689Skan    UINT32                      CurrentStatus;      /*  _STA value */
849169689Skan} ACPI_DEVICE_INFO;
850169689Skan
851169689Skan
852169689Skan/* Context structs for address space handlers */
853169689Skan
854169689Skantypedef struct
855169689Skan{
856169689Skan    UINT16                      Segment;
857169689Skan    UINT16                      Bus;
858169689Skan    UINT16                      Device;
859169689Skan    UINT16                      Function;
860169689Skan} ACPI_PCI_ID;
861169689Skan
862169689Skan
863169689Skantypedef struct
864169689Skan{
865169689Skan    ACPI_PHYSICAL_ADDRESS       MappedPhysicalAddress;
866169689Skan    UINT8                       *MappedLogicalAddress;
867169689Skan    UINT32                      MappedLength;
868169689Skan} ACPI_MEM_SPACE_CONTEXT;
869169689Skan
870169689Skan
871169689Skan/* Sleep states */
872169689Skan
873169689Skan#define ACPI_NUM_SLEEP_STATES           7
874169689Skan
875169689Skan
876169689Skan/*
877169689Skan * Definitions for Resource Attributes
878169689Skan */
879169689Skan
880169689Skan/*
881169689Skan *  Memory Attributes
882169689Skan */
883169689Skan#define READ_ONLY_MEMORY                (UINT8) 0x00
884169689Skan#define READ_WRITE_MEMORY               (UINT8) 0x01
885169689Skan
886169689Skan#define NON_CACHEABLE_MEMORY            (UINT8) 0x00
887169689Skan#define CACHABLE_MEMORY                 (UINT8) 0x01
888169689Skan#define WRITE_COMBINING_MEMORY          (UINT8) 0x02
889169689Skan#define PREFETCHABLE_MEMORY             (UINT8) 0x03
890169689Skan
891169689Skan/*
892169689Skan *  IO Attributes
893169689Skan *  The ISA IO ranges are:     n000-n0FFh,  n400-n4FFh, n800-n8FFh, nC00-nCFFh.
894169689Skan *  The non-ISA IO ranges are: n100-n3FFh,  n500-n7FFh, n900-nBFFh, nCD0-nFFFh.
895169689Skan */
896169689Skan#define NON_ISA_ONLY_RANGES             (UINT8) 0x01
897169689Skan#define ISA_ONLY_RANGES                 (UINT8) 0x02
898169689Skan#define ENTIRE_RANGE                    (NON_ISA_ONLY_RANGES | ISA_ONLY_RANGES)
899169689Skan
900169689Skan/*
901169689Skan *  IO Port Descriptor Decode
902169689Skan */
903169689Skan#define DECODE_10                       (UINT8) 0x00    /* 10-bit IO address decode */
904169689Skan#define DECODE_16                       (UINT8) 0x01    /* 16-bit IO address decode */
905169689Skan
906169689Skan/*
907169689Skan *  IRQ Attributes
908169689Skan */
909169689Skan#define EDGE_SENSITIVE                  (UINT8) 0x00
910169689Skan#define LEVEL_SENSITIVE                 (UINT8) 0x01
911169689Skan
912169689Skan#define ACTIVE_HIGH                     (UINT8) 0x00
913169689Skan#define ACTIVE_LOW                      (UINT8) 0x01
914169689Skan
915169689Skan#define EXCLUSIVE                       (UINT8) 0x00
916169689Skan#define SHARED                          (UINT8) 0x01
917169689Skan
918169689Skan/*
919169689Skan *  DMA Attributes
920169689Skan */
921169689Skan#define COMPATIBILITY                   (UINT8) 0x00
922169689Skan#define TYPE_A                          (UINT8) 0x01
923169689Skan#define TYPE_B                          (UINT8) 0x02
924169689Skan#define TYPE_F                          (UINT8) 0x03
925169689Skan
926169689Skan#define NOT_BUS_MASTER                  (UINT8) 0x00
927169689Skan#define BUS_MASTER                      (UINT8) 0x01
928169689Skan
929169689Skan#define TRANSFER_8                      (UINT8) 0x00
930169689Skan#define TRANSFER_8_16                   (UINT8) 0x01
931169689Skan#define TRANSFER_16                     (UINT8) 0x02
932169689Skan
933169689Skan/*
934169689Skan * Start Dependent Functions Priority definitions
935169689Skan */
936169689Skan#define GOOD_CONFIGURATION              (UINT8) 0x00
937169689Skan#define ACCEPTABLE_CONFIGURATION        (UINT8) 0x01
938169689Skan#define SUB_OPTIMAL_CONFIGURATION       (UINT8) 0x02
939169689Skan
940169689Skan/*
941169689Skan *  16, 32 and 64-bit Address Descriptor resource types
942169689Skan */
943169689Skan#define MEMORY_RANGE                    (UINT8) 0x00
944169689Skan#define IO_RANGE                        (UINT8) 0x01
945169689Skan#define BUS_NUMBER_RANGE                (UINT8) 0x02
946169689Skan
947169689Skan#define ADDRESS_NOT_FIXED               (UINT8) 0x00
948169689Skan#define ADDRESS_FIXED                   (UINT8) 0x01
949169689Skan
950169689Skan#define POS_DECODE                      (UINT8) 0x00
951169689Skan#define SUB_DECODE                      (UINT8) 0x01
952169689Skan
953169689Skan#define PRODUCER                        (UINT8) 0x00
954169689Skan#define CONSUMER                        (UINT8) 0x01
955169689Skan
956169689Skan
957169689Skan/*
958169689Skan *  Structures used to describe device resources
959169689Skan */
960169689Skantypedef struct
961169689Skan{
962169689Skan    UINT32                      EdgeLevel;
963169689Skan    UINT32                      ActiveHighLow;
964169689Skan    UINT32                      SharedExclusive;
965169689Skan    UINT32                      NumberOfInterrupts;
966169689Skan    UINT32                      Interrupts[1];
967169689Skan
968169689Skan} ACPI_RESOURCE_IRQ;
969169689Skan
970169689Skantypedef struct
971169689Skan{
972169689Skan    UINT32                      Type;
973169689Skan    UINT32                      BusMaster;
974169689Skan    UINT32                      Transfer;
975169689Skan    UINT32                      NumberOfChannels;
976169689Skan    UINT32                      Channels[1];
977169689Skan
978169689Skan} ACPI_RESOURCE_DMA;
979169689Skan
980169689Skantypedef struct
981169689Skan{
982169689Skan    UINT32                      CompatibilityPriority;
983169689Skan    UINT32                      PerformanceRobustness;
984169689Skan
985169689Skan} ACPI_RESOURCE_START_DPF;
986169689Skan
987169689Skan/*
988169689Skan * END_DEPENDENT_FUNCTIONS_RESOURCE struct is not
989169689Skan *  needed because it has no fields
990169689Skan */
991169689Skan
992169689Skantypedef struct
993169689Skan{
994169689Skan    UINT32                      IoDecode;
995169689Skan    UINT32                      MinBaseAddress;
996169689Skan    UINT32                      MaxBaseAddress;
997169689Skan    UINT32                      Alignment;
998169689Skan    UINT32                      RangeLength;
999169689Skan
1000169689Skan} ACPI_RESOURCE_IO;
1001169689Skan
1002169689Skantypedef struct
1003169689Skan{
1004169689Skan    UINT32                      BaseAddress;
1005169689Skan    UINT32                      RangeLength;
1006169689Skan
1007169689Skan} ACPI_RESOURCE_FIXED_IO;
1008169689Skan
1009169689Skantypedef struct
1010169689Skan{
1011169689Skan    UINT32                      Length;
1012169689Skan    UINT8                       Reserved[1];
1013169689Skan
1014169689Skan} ACPI_RESOURCE_VENDOR;
1015169689Skan
1016169689Skantypedef struct
1017169689Skan{
1018169689Skan    UINT32                      ReadWriteAttribute;
1019169689Skan    UINT32                      MinBaseAddress;
1020169689Skan    UINT32                      MaxBaseAddress;
1021169689Skan    UINT32                      Alignment;
1022169689Skan    UINT32                      RangeLength;
1023169689Skan
1024169689Skan} ACPI_RESOURCE_MEM24;
1025169689Skan
1026169689Skantypedef struct
1027169689Skan{
1028169689Skan    UINT32                      ReadWriteAttribute;
1029169689Skan    UINT32                      MinBaseAddress;
1030169689Skan    UINT32                      MaxBaseAddress;
1031169689Skan    UINT32                      Alignment;
1032169689Skan    UINT32                      RangeLength;
1033169689Skan
1034169689Skan} ACPI_RESOURCE_MEM32;
1035169689Skan
1036169689Skantypedef struct
1037169689Skan{
1038169689Skan    UINT32                      ReadWriteAttribute;
1039169689Skan    UINT32                      RangeBaseAddress;
1040169689Skan    UINT32                      RangeLength;
1041169689Skan
1042169689Skan} ACPI_RESOURCE_FIXED_MEM32;
1043169689Skan
1044169689Skantypedef struct
1045169689Skan{
1046169689Skan    UINT16                      CacheAttribute;
1047169689Skan    UINT16                      ReadWriteAttribute;
1048169689Skan
1049169689Skan} ACPI_MEMORY_ATTRIBUTE;
1050169689Skan
1051169689Skantypedef struct
1052169689Skan{
1053169689Skan    UINT16                      RangeAttribute;
1054169689Skan    UINT16                      Reserved;
1055169689Skan
1056169689Skan} ACPI_IO_ATTRIBUTE;
1057169689Skan
1058169689Skantypedef struct
1059169689Skan{
1060169689Skan    UINT16                      Reserved1;
1061169689Skan    UINT16                      Reserved2;
1062169689Skan
1063169689Skan} ACPI_BUS_ATTRIBUTE;
1064169689Skan
1065169689Skantypedef union
1066169689Skan{
1067169689Skan    ACPI_MEMORY_ATTRIBUTE       Memory;
1068169689Skan    ACPI_IO_ATTRIBUTE           Io;
1069169689Skan    ACPI_BUS_ATTRIBUTE          Bus;
1070169689Skan
1071169689Skan} ACPI_RESOURCE_ATTRIBUTE;
1072169689Skan
1073169689Skantypedef struct
1074169689Skan{
1075169689Skan    UINT32                      Index;
1076169689Skan    UINT32                      StringLength;
1077169689Skan    NATIVE_CHAR                 *StringPtr;
1078169689Skan
1079169689Skan} ACPI_RESOURCE_SOURCE;
1080169689Skan
1081169689Skantypedef struct
1082169689Skan{
1083169689Skan    UINT32                      ResourceType;
1084169689Skan    UINT32                      ProducerConsumer;
1085169689Skan    UINT32                      Decode;
1086169689Skan    UINT32                      MinAddressFixed;
1087169689Skan    UINT32                      MaxAddressFixed;
1088169689Skan    ACPI_RESOURCE_ATTRIBUTE     Attribute;
1089169689Skan    UINT32                      Granularity;
1090169689Skan    UINT32                      MinAddressRange;
1091169689Skan    UINT32                      MaxAddressRange;
1092169689Skan    UINT32                      AddressTranslationOffset;
1093169689Skan    UINT32                      AddressLength;
1094169689Skan    ACPI_RESOURCE_SOURCE        ResourceSource;
1095169689Skan
1096169689Skan} ACPI_RESOURCE_ADDRESS16;
1097169689Skan
1098169689Skantypedef struct
1099169689Skan{
1100169689Skan    UINT32                      ResourceType;
1101169689Skan    UINT32                      ProducerConsumer;
1102169689Skan    UINT32                      Decode;
1103169689Skan    UINT32                      MinAddressFixed;
1104169689Skan    UINT32                      MaxAddressFixed;
1105169689Skan    ACPI_RESOURCE_ATTRIBUTE     Attribute;
1106169689Skan    UINT32                      Granularity;
1107169689Skan    UINT32                      MinAddressRange;
1108169689Skan    UINT32                      MaxAddressRange;
1109169689Skan    UINT32                      AddressTranslationOffset;
1110169689Skan    UINT32                      AddressLength;
1111169689Skan    ACPI_RESOURCE_SOURCE        ResourceSource;
1112169689Skan
1113169689Skan} ACPI_RESOURCE_ADDRESS32;
1114169689Skan
1115169689Skantypedef struct
1116169689Skan{
1117169689Skan    UINT32                      ResourceType;
1118169689Skan    UINT32                      ProducerConsumer;
1119169689Skan    UINT32                      Decode;
1120169689Skan    UINT32                      MinAddressFixed;
1121169689Skan    UINT32                      MaxAddressFixed;
1122169689Skan    ACPI_RESOURCE_ATTRIBUTE     Attribute;
1123169689Skan    UINT64                      Granularity;
1124169689Skan    UINT64                      MinAddressRange;
1125169689Skan    UINT64                      MaxAddressRange;
1126169689Skan    UINT64                      AddressTranslationOffset;
1127169689Skan    UINT64                      AddressLength;
1128169689Skan    ACPI_RESOURCE_SOURCE        ResourceSource;
1129169689Skan
1130169689Skan} ACPI_RESOURCE_ADDRESS64;
1131169689Skan
1132169689Skantypedef struct
1133169689Skan{
1134169689Skan    UINT32                      ProducerConsumer;
1135169689Skan    UINT32                      EdgeLevel;
1136169689Skan    UINT32                      ActiveHighLow;
1137169689Skan    UINT32                      SharedExclusive;
1138169689Skan    UINT32                      NumberOfInterrupts;
1139169689Skan    ACPI_RESOURCE_SOURCE        ResourceSource;
1140169689Skan    UINT32                      Interrupts[1];
1141169689Skan
1142169689Skan} ACPI_RESOURCE_EXT_IRQ;
1143169689Skan
1144169689Skan
1145169689Skan/* ACPI_RESOURCE_TYPEs */
1146169689Skan
1147169689Skan#define ACPI_RSTYPE_IRQ                 0
1148169689Skan#define ACPI_RSTYPE_DMA                 1
1149169689Skan#define ACPI_RSTYPE_START_DPF           2
1150169689Skan#define ACPI_RSTYPE_END_DPF             3
1151169689Skan#define ACPI_RSTYPE_IO                  4
1152169689Skan#define ACPI_RSTYPE_FIXED_IO            5
1153169689Skan#define ACPI_RSTYPE_VENDOR              6
1154169689Skan#define ACPI_RSTYPE_END_TAG             7
1155169689Skan#define ACPI_RSTYPE_MEM24               8
1156169689Skan#define ACPI_RSTYPE_MEM32               9
1157169689Skan#define ACPI_RSTYPE_FIXED_MEM32         10
1158169689Skan#define ACPI_RSTYPE_ADDRESS16           11
1159169689Skan#define ACPI_RSTYPE_ADDRESS32           12
1160169689Skan#define ACPI_RSTYPE_ADDRESS64           13
1161169689Skan#define ACPI_RSTYPE_EXT_IRQ             14
1162169689Skan
1163169689Skantypedef UINT32                  ACPI_RESOURCE_TYPE;
1164169689Skan
1165169689Skantypedef union
1166169689Skan{
1167169689Skan    ACPI_RESOURCE_IRQ           Irq;
1168169689Skan    ACPI_RESOURCE_DMA           Dma;
1169169689Skan    ACPI_RESOURCE_START_DPF     StartDpf;
1170169689Skan    ACPI_RESOURCE_IO            Io;
1171169689Skan    ACPI_RESOURCE_FIXED_IO      FixedIo;
1172169689Skan    ACPI_RESOURCE_VENDOR        VendorSpecific;
1173169689Skan    ACPI_RESOURCE_MEM24         Memory24;
1174169689Skan    ACPI_RESOURCE_MEM32         Memory32;
1175169689Skan    ACPI_RESOURCE_FIXED_MEM32   FixedMemory32;
1176169689Skan    ACPI_RESOURCE_ADDRESS16     Address16;
1177169689Skan    ACPI_RESOURCE_ADDRESS32     Address32;
1178169689Skan    ACPI_RESOURCE_ADDRESS64     Address64;
1179169689Skan    ACPI_RESOURCE_EXT_IRQ       ExtendedIrq;
1180169689Skan
1181169689Skan} ACPI_RESOURCE_DATA;
1182169689Skan
1183169689Skantypedef struct AcpiResource
1184169689Skan{
1185169689Skan    ACPI_RESOURCE_TYPE          Id;
1186169689Skan    UINT32                      Length;
1187169689Skan    ACPI_RESOURCE_DATA          Data;
1188169689Skan
1189169689Skan} ACPI_RESOURCE;
1190169689Skan
1191169689Skan#define ACPI_RESOURCE_LENGTH            12
1192169689Skan#define ACPI_RESOURCE_LENGTH_NO_DATA    8       /* Id + Length fields */
1193169689Skan
1194169689Skan#define SIZEOF_RESOURCE(Type)   (ACPI_RESOURCE_LENGTH_NO_DATA + sizeof (Type))
1195169689Skan
1196169689Skan#define NEXT_RESOURCE(Res)      (ACPI_RESOURCE *)((UINT8 *) Res + Res->length)
1197169689Skan
1198169689Skan
1199169689Skan/*
1200169689Skan * END: Definitions for Resource Attributes
1201169689Skan */
1202169689Skan
1203169689Skan
1204169689Skantypedef struct pci_routing_table
1205169689Skan{
1206169689Skan    UINT32                      Length;
1207169689Skan    UINT32                      Pin;
1208169689Skan    ACPI_INTEGER                Address;        /* here for 64-bit alignment */
1209169689Skan    UINT32                      SourceIndex;
1210169689Skan    NATIVE_CHAR                 Source[4];      /* pad to 64 bits so sizeof() works in all cases */
1211169689Skan
1212169689Skan} PCI_ROUTING_TABLE;
1213169689Skan
1214169689Skan
1215169689Skan/*
1216169689Skan * END: Definitions for PCI Routing tables
1217169689Skan */
1218169689Skan
1219169689Skan#endif /* __ACTYPES_H__ */
1220169689Skan