Back to home page

Quest Cross Reference

 
 

    


Warning, cross-references for /kernel/include/drivers/acpi/acobject.h need to be fixed.

0001 
0002 /******************************************************************************
0003  *
0004  * Name: acobject.h - Definition of ACPI_OPERAND_OBJECT  (Internal object only)
0005  *
0006  *****************************************************************************/
0007 
0008 /******************************************************************************
0009  *
0010  * 1. Copyright Notice
0011  *
0012  * Some or all of this work - Copyright (c) 1999 - 2009, Intel Corp.
0013  * All rights reserved.
0014  *
0015  * 2. License
0016  *
0017  * 2.1. This is your license from Intel Corp. under its intellectual property
0018  * rights.  You may have additional license terms from the party that provided
0019  * you this software, covering your right to use that party's intellectual
0020  * property rights.
0021  *
0022  * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a
0023  * copy of the source code appearing in this file ("Covered Code") an
0024  * irrevocable, perpetual, worldwide license under Intel's copyrights in the
0025  * base code distributed originally by Intel ("Original Intel Code") to copy,
0026  * make derivatives, distribute, use and display any portion of the Covered
0027  * Code in any form, with the right to sublicense such rights; and
0028  *
0029  * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent
0030  * license (with the right to sublicense), under only those claims of Intel
0031  * patents that are infringed by the Original Intel Code, to make, use, sell,
0032  * offer to sell, and import the Covered Code and derivative works thereof
0033  * solely to the minimum extent necessary to exercise the above copyright
0034  * license, and in no event shall the patent license extend to any additions
0035  * to or modifications of the Original Intel Code.  No other license or right
0036  * is granted directly or by implication, estoppel or otherwise;
0037  *
0038  * The above copyright and patent license is granted only if the following
0039  * conditions are met:
0040  *
0041  * 3. Conditions
0042  *
0043  * 3.1. Redistribution of Source with Rights to Further Distribute Source.
0044  * Redistribution of source code of any substantial portion of the Covered
0045  * Code or modification with rights to further distribute source must include
0046  * the above Copyright Notice, the above License, this list of Conditions,
0047  * and the following Disclaimer and Export Compliance provision.  In addition,
0048  * Licensee must cause all Covered Code to which Licensee contributes to
0049  * contain a file documenting the changes Licensee made to create that Covered
0050  * Code and the date of any change.  Licensee must include in that file the
0051  * documentation of any changes made by any predecessor Licensee.  Licensee
0052  * must include a prominent statement that the modification is derived,
0053  * directly or indirectly, from Original Intel Code.
0054  *
0055  * 3.2. Redistribution of Source with no Rights to Further Distribute Source.
0056  * Redistribution of source code of any substantial portion of the Covered
0057  * Code or modification without rights to further distribute source must
0058  * include the following Disclaimer and Export Compliance provision in the
0059  * documentation and/or other materials provided with distribution.  In
0060  * addition, Licensee may not authorize further sublicense of source of any
0061  * portion of the Covered Code, and must include terms to the effect that the
0062  * license from Licensee to its licensee is limited to the intellectual
0063  * property embodied in the software Licensee provides to its licensee, and
0064  * not to intellectual property embodied in modifications its licensee may
0065  * make.
0066  *
0067  * 3.3. Redistribution of Executable. Redistribution in executable form of any
0068  * substantial portion of the Covered Code or modification must reproduce the
0069  * above Copyright Notice, and the following Disclaimer and Export Compliance
0070  * provision in the documentation and/or other materials provided with the
0071  * distribution.
0072  *
0073  * 3.4. Intel retains all right, title, and interest in and to the Original
0074  * Intel Code.
0075  *
0076  * 3.5. Neither the name Intel nor any other trademark owned or controlled by
0077  * Intel shall be used in advertising or otherwise to promote the sale, use or
0078  * other dealings in products derived from or relating to the Covered Code
0079  * without prior written authorization from Intel.
0080  *
0081  * 4. Disclaimer and Export Compliance
0082  *
0083  * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED
0084  * HERE.  ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE
0085  * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT,  ASSISTANCE,
0086  * INSTALLATION, TRAINING OR OTHER SERVICES.  INTEL WILL NOT PROVIDE ANY
0087  * UPDATES, ENHANCEMENTS OR EXTENSIONS.  INTEL SPECIFICALLY DISCLAIMS ANY
0088  * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A
0089  * PARTICULAR PURPOSE.
0090  *
0091  * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES
0092  * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR
0093  * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT,
0094  * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY
0095  * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL
0096  * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.  THESE LIMITATIONS
0097  * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY
0098  * LIMITED REMEDY.
0099  *
0100  * 4.3. Licensee shall not export, either directly or indirectly, any of this
0101  * software or system incorporating such software without first obtaining any
0102  * required license or other approval from the U. S. Department of Commerce or
0103  * any other agency or department of the United States Government.  In the
0104  * event Licensee exports any such software from the United States or
0105  * re-exports any such software from a foreign destination, Licensee shall
0106  * ensure that the distribution and export/re-export of the software is in
0107  * compliance with all laws, regulations, orders, or other restrictions of the
0108  * U.S. Export Administration Regulations. Licensee agrees that neither it nor
0109  * any of its subsidiaries will export/re-export any technical data, process,
0110  * software, or service, directly or indirectly, to any country for which the
0111  * United States government or any agency thereof requires an export license,
0112  * other governmental approval, or letter of assurance, without first obtaining
0113  * such license, approval or letter.
0114  *
0115  *****************************************************************************/
0116 
0117 #ifndef _ACOBJECT_H
0118 #define _ACOBJECT_H
0119 
0120 /* acpisrc:StructDefs -- for acpisrc conversion */
0121 
0122 
0123 /*
0124  * The ACPI_OPERAND_OBJECT is used to pass AML operands from the dispatcher
0125  * to the interpreter, and to keep track of the various handlers such as
0126  * address space handlers and notify handlers. The object is a constant
0127  * size in order to allow it to be cached and reused.
0128  *
0129  * Note: The object is optimized to be aligned and will not work if it is
0130  * byte-packed.
0131  */
0132 #if ACPI_MACHINE_WIDTH == 64
0133 #pragma pack(8)
0134 #else
0135 #pragma pack(4)
0136 #endif
0137 
0138 /*******************************************************************************
0139  *
0140  * Common Descriptors
0141  *
0142  ******************************************************************************/
0143 
0144 /*
0145  * Common area for all objects.
0146  *
0147  * DescriptorType is used to differentiate between internal descriptors, and
0148  * must be in the same place across all descriptors
0149  *
0150  * Note: The DescriptorType and Type fields must appear in the identical
0151  * position in both the ACPI_NAMESPACE_NODE and ACPI_OPERAND_OBJECT
0152  * structures.
0153  */
0154 #define ACPI_OBJECT_COMMON_HEADER \
0155     union acpi_operand_object       *NextObject;        /* Objects linked to parent NS node */\
0156     UINT8                           DescriptorType;     /* To differentiate various internal objs */\
0157     UINT8                           Type;               /* ACPI_OBJECT_TYPE */\
0158     UINT16                          ReferenceCount;     /* For object deletion management */\
0159     UINT8                           Flags;
0160     /*
0161      * Note: There are 3 bytes available here before the
0162      * next natural alignment boundary (for both 32/64 cases)
0163      */
0164 
0165 /* Values for Flag byte above */
0166 
0167 #define AOPOBJ_AML_CONSTANT         0x01
0168 #define AOPOBJ_STATIC_POINTER       0x02
0169 #define AOPOBJ_DATA_VALID           0x04
0170 #define AOPOBJ_OBJECT_INITIALIZED   0x08
0171 #define AOPOBJ_SETUP_COMPLETE       0x10
0172 #define AOPOBJ_SINGLE_DATUM         0x20
0173 
0174 
0175 /******************************************************************************
0176  *
0177  * Basic data types
0178  *
0179  *****************************************************************************/
0180 
0181 typedef struct acpi_object_common
0182 {
0183     ACPI_OBJECT_COMMON_HEADER
0184 
0185 } ACPI_OBJECT_COMMON;
0186 
0187 
0188 typedef struct acpi_object_integer
0189 {
0190     ACPI_OBJECT_COMMON_HEADER
0191     UINT8                           Fill[3];            /* Prevent warning on some compilers */
0192     ACPI_INTEGER                    Value;
0193 
0194 } ACPI_OBJECT_INTEGER;
0195 
0196 
0197 /*
0198  * Note: The String and Buffer object must be identical through the Pointer
0199  * and length elements.  There is code that depends on this.
0200  *
0201  * Fields common to both Strings and Buffers
0202  */
0203 #define ACPI_COMMON_BUFFER_INFO(_Type) \
0204     _Type                           *Pointer; \
0205     UINT32                          Length;
0206 
0207 
0208 typedef struct acpi_object_string   /* Null terminated, ASCII characters only */
0209 {
0210     ACPI_OBJECT_COMMON_HEADER
0211     ACPI_COMMON_BUFFER_INFO         (char)              /* String in AML stream or allocated string */
0212 
0213 } ACPI_OBJECT_STRING;
0214 
0215 
0216 typedef struct acpi_object_buffer
0217 {
0218     ACPI_OBJECT_COMMON_HEADER
0219     ACPI_COMMON_BUFFER_INFO         (UINT8)             /* Buffer in AML stream or allocated buffer */
0220     UINT32                          AmlLength;
0221     UINT8                           *AmlStart;
0222     ACPI_NAMESPACE_NODE             *Node;              /* Link back to parent node */
0223 
0224 } ACPI_OBJECT_BUFFER;
0225 
0226 
0227 typedef struct acpi_object_package
0228 {
0229     ACPI_OBJECT_COMMON_HEADER
0230     ACPI_NAMESPACE_NODE             *Node;              /* Link back to parent node */
0231     union acpi_operand_object       **Elements;         /* Array of pointers to AcpiObjects */
0232     UINT8                           *AmlStart;
0233     UINT32                          AmlLength;
0234     UINT32                          Count;              /* # of elements in package */
0235 
0236 } ACPI_OBJECT_PACKAGE;
0237 
0238 
0239 /******************************************************************************
0240  *
0241  * Complex data types
0242  *
0243  *****************************************************************************/
0244 
0245 typedef struct acpi_object_event
0246 {
0247     ACPI_OBJECT_COMMON_HEADER
0248     ACPI_SEMAPHORE                  OsSemaphore;        /* Actual OS synchronization object */
0249 
0250 } ACPI_OBJECT_EVENT;
0251 
0252 
0253 typedef struct acpi_object_mutex
0254 {
0255     ACPI_OBJECT_COMMON_HEADER
0256     UINT8                           SyncLevel;          /* 0-15, specified in Mutex() call */
0257     UINT16                          AcquisitionDepth;   /* Allow multiple Acquires, same thread */
0258     ACPI_MUTEX                      OsMutex;            /* Actual OS synchronization object */
0259     ACPI_THREAD_ID                  ThreadId;           /* Current owner of the mutex */
0260     struct acpi_thread_state        *OwnerThread;       /* Current owner of the mutex */
0261     union acpi_operand_object       *Prev;              /* Link for list of acquired mutexes */
0262     union acpi_operand_object       *Next;              /* Link for list of acquired mutexes */
0263     ACPI_NAMESPACE_NODE             *Node;              /* Containing namespace node */
0264     UINT8                           OriginalSyncLevel;  /* Owner's original sync level (0-15) */
0265 
0266 } ACPI_OBJECT_MUTEX;
0267 
0268 
0269 typedef struct acpi_object_region
0270 {
0271     ACPI_OBJECT_COMMON_HEADER
0272     UINT8                           SpaceId;
0273     ACPI_NAMESPACE_NODE             *Node;              /* Containing namespace node */
0274     union acpi_operand_object       *Handler;           /* Handler for region access */
0275     union acpi_operand_object       *Next;
0276     ACPI_PHYSICAL_ADDRESS           Address;
0277     UINT32                          Length;
0278 
0279 } ACPI_OBJECT_REGION;
0280 
0281 
0282 typedef struct acpi_object_method
0283 {
0284     ACPI_OBJECT_COMMON_HEADER
0285     UINT8                           MethodFlags;
0286     UINT8                           ParamCount;
0287     UINT8                           SyncLevel;
0288     union acpi_operand_object       *Mutex;
0289     UINT8                           *AmlStart;
0290     ACPI_INTERNAL_METHOD            Implementation;
0291     UINT32                          AmlLength;
0292     UINT8                           ThreadCount;
0293     ACPI_OWNER_ID                   OwnerId;
0294 
0295 } ACPI_OBJECT_METHOD;
0296 
0297 
0298 /******************************************************************************
0299  *
0300  * Objects that can be notified.  All share a common NotifyInfo area.
0301  *
0302  *****************************************************************************/
0303 
0304 /*
0305  * Common fields for objects that support ASL notifications
0306  */
0307 #define ACPI_COMMON_NOTIFY_INFO \
0308     union acpi_operand_object       *SystemNotify;      /* Handler for system notifies */\
0309     union acpi_operand_object       *DeviceNotify;      /* Handler for driver notifies */\
0310     union acpi_operand_object       *Handler;           /* Handler for Address space */
0311 
0312 
0313 typedef struct acpi_object_notify_common    /* COMMON NOTIFY for POWER, PROCESSOR, DEVICE, and THERMAL */
0314 {
0315     ACPI_OBJECT_COMMON_HEADER
0316     ACPI_COMMON_NOTIFY_INFO
0317 
0318 } ACPI_OBJECT_NOTIFY_COMMON;
0319 
0320 
0321 typedef struct acpi_object_device
0322 {
0323     ACPI_OBJECT_COMMON_HEADER
0324     ACPI_COMMON_NOTIFY_INFO
0325     ACPI_GPE_BLOCK_INFO             *GpeBlock;
0326 
0327 } ACPI_OBJECT_DEVICE;
0328 
0329 
0330 typedef struct acpi_object_power_resource
0331 {
0332     ACPI_OBJECT_COMMON_HEADER
0333     ACPI_COMMON_NOTIFY_INFO
0334     UINT32                          SystemLevel;
0335     UINT32                          ResourceOrder;
0336 
0337 } ACPI_OBJECT_POWER_RESOURCE;
0338 
0339 
0340 typedef struct acpi_object_processor
0341 {
0342     ACPI_OBJECT_COMMON_HEADER
0343 
0344     /* The next two fields take advantage of the 3-byte space before NOTIFY_INFO */
0345 
0346     UINT8                           ProcId;
0347     UINT8                           Length;
0348     ACPI_COMMON_NOTIFY_INFO
0349     ACPI_IO_ADDRESS                 Address;
0350 
0351 } ACPI_OBJECT_PROCESSOR;
0352 
0353 
0354 typedef struct acpi_object_thermal_zone
0355 {
0356     ACPI_OBJECT_COMMON_HEADER
0357     ACPI_COMMON_NOTIFY_INFO
0358 
0359 } ACPI_OBJECT_THERMAL_ZONE;
0360 
0361 
0362 /******************************************************************************
0363  *
0364  * Fields.  All share a common header/info field.
0365  *
0366  *****************************************************************************/
0367 
0368 /*
0369  * Common bitfield for the field objects
0370  * "Field Datum"  -- a datum from the actual field object
0371  * "Buffer Datum" -- a datum from a user buffer, read from or to be written to the field
0372  */
0373 #define ACPI_COMMON_FIELD_INFO \
0374     UINT8                           FieldFlags;         /* Access, update, and lock bits */\
0375     UINT8                           Attribute;          /* From AccessAs keyword */\
0376     UINT8                           AccessByteWidth;    /* Read/Write size in bytes */\
0377     ACPI_NAMESPACE_NODE             *Node;              /* Link back to parent node */\
0378     UINT32                          BitLength;          /* Length of field in bits */\
0379     UINT32                          BaseByteOffset;     /* Byte offset within containing object */\
0380     UINT32                          Value;              /* Value to store into the Bank or Index register */\
0381     UINT8                           StartFieldBitOffset;/* Bit offset within first field datum (0-63) */\
0382     UINT8                           AccessBitWidth;     /* Read/Write size in bits (8-64) */
0383 
0384 
0385 typedef struct acpi_object_field_common                 /* COMMON FIELD (for BUFFER, REGION, BANK, and INDEX fields) */
0386 {
0387     ACPI_OBJECT_COMMON_HEADER
0388     ACPI_COMMON_FIELD_INFO
0389     union acpi_operand_object       *RegionObj;         /* Parent Operation Region object (REGION/BANK fields only) */
0390 
0391 } ACPI_OBJECT_FIELD_COMMON;
0392 
0393 
0394 typedef struct acpi_object_region_field
0395 {
0396     ACPI_OBJECT_COMMON_HEADER
0397     ACPI_COMMON_FIELD_INFO
0398     union acpi_operand_object       *RegionObj;         /* Containing OpRegion object */
0399 
0400 } ACPI_OBJECT_REGION_FIELD;
0401 
0402 
0403 typedef struct acpi_object_bank_field
0404 {
0405     ACPI_OBJECT_COMMON_HEADER
0406     ACPI_COMMON_FIELD_INFO
0407     union acpi_operand_object       *RegionObj;         /* Containing OpRegion object */
0408     union acpi_operand_object       *BankObj;           /* BankSelect Register object */
0409 
0410 } ACPI_OBJECT_BANK_FIELD;
0411 
0412 
0413 typedef struct acpi_object_index_field
0414 {
0415     ACPI_OBJECT_COMMON_HEADER
0416     ACPI_COMMON_FIELD_INFO
0417 
0418     /*
0419      * No "RegionObj" pointer needed since the Index and Data registers
0420      * are each field definitions unto themselves.
0421      */
0422     union acpi_operand_object       *IndexObj;          /* Index register */
0423     union acpi_operand_object       *DataObj;           /* Data register */
0424 
0425 } ACPI_OBJECT_INDEX_FIELD;
0426 
0427 
0428 /* The BufferField is different in that it is part of a Buffer, not an OpRegion */
0429 
0430 typedef struct acpi_object_buffer_field
0431 {
0432     ACPI_OBJECT_COMMON_HEADER
0433     ACPI_COMMON_FIELD_INFO
0434     union acpi_operand_object       *BufferObj;         /* Containing Buffer object */
0435 
0436 } ACPI_OBJECT_BUFFER_FIELD;
0437 
0438 
0439 /******************************************************************************
0440  *
0441  * Objects for handlers
0442  *
0443  *****************************************************************************/
0444 
0445 typedef struct acpi_object_notify_handler
0446 {
0447     ACPI_OBJECT_COMMON_HEADER
0448     ACPI_NAMESPACE_NODE             *Node;              /* Parent device */
0449     ACPI_NOTIFY_HANDLER             Handler;
0450     void                            *Context;
0451 
0452 } ACPI_OBJECT_NOTIFY_HANDLER;
0453 
0454 
0455 typedef struct acpi_object_addr_handler
0456 {
0457     ACPI_OBJECT_COMMON_HEADER
0458     UINT8                           SpaceId;
0459     UINT8                           HandlerFlags;
0460     ACPI_ADR_SPACE_HANDLER          Handler;
0461     ACPI_NAMESPACE_NODE             *Node;              /* Parent device */
0462     void                            *Context;
0463     ACPI_ADR_SPACE_SETUP            Setup;
0464     union acpi_operand_object       *RegionList;        /* regions using this handler */
0465     union acpi_operand_object       *Next;
0466 
0467 } ACPI_OBJECT_ADDR_HANDLER;
0468 
0469 /* Flags for address handler (HandlerFlags) */
0470 
0471 #define ACPI_ADDR_HANDLER_DEFAULT_INSTALLED  0x01
0472 
0473 
0474 /******************************************************************************
0475  *
0476  * Special internal objects
0477  *
0478  *****************************************************************************/
0479 
0480 /*
0481  * The Reference object is used for these opcodes:
0482  * Arg[0-6], Local[0-7], IndexOp, NameOp, RefOfOp, LoadOp, LoadTableOp, DebugOp
0483  * The Reference.Class differentiates these types.
0484  */
0485 typedef struct acpi_object_reference
0486 {
0487     ACPI_OBJECT_COMMON_HEADER
0488      UINT8                           Class;              /* Reference Class */
0489      UINT8                           TargetType;         /* Used for Index Op */
0490      UINT8                           Reserved;
0491      void                            *Object;            /* NameOp=>HANDLE to obj, IndexOp=>ACPI_OPERAND_OBJECT */
0492      ACPI_NAMESPACE_NODE             *Node;              /* RefOf or Namepath */
0493      union acpi_operand_object       **Where;            /* Target of Index */
0494      UINT32                          Value;              /* Used for Local/Arg/Index/DdbHandle */
0495 
0496 } ACPI_OBJECT_REFERENCE;
0497 
0498 /* Values for Reference.Class above */
0499 
0500 typedef enum
0501 {
0502     ACPI_REFCLASS_LOCAL             = 0,        /* Method local */
0503     ACPI_REFCLASS_ARG               = 1,        /* Method argument */
0504     ACPI_REFCLASS_REFOF             = 2,        /* Result of RefOf() TBD: Split to Ref/Node and Ref/OperandObj? */
0505     ACPI_REFCLASS_INDEX             = 3,        /* Result of Index() */
0506     ACPI_REFCLASS_TABLE             = 4,        /* DdbHandle - Load(), LoadTable() */
0507     ACPI_REFCLASS_NAME              = 5,        /* Reference to a named object */
0508     ACPI_REFCLASS_DEBUG             = 6,        /* Debug object */
0509 
0510     ACPI_REFCLASS_MAX               = 6
0511 
0512 } ACPI_REFERENCE_CLASSES;
0513 
0514 
0515 /*
0516  * Extra object is used as additional storage for types that
0517  * have AML code in their declarations (TermArgs) that must be
0518  * evaluated at run time.
0519  *
0520  * Currently: Region and FieldUnit types
0521  */
0522 typedef struct acpi_object_extra
0523 {
0524     ACPI_OBJECT_COMMON_HEADER
0525     ACPI_NAMESPACE_NODE             *Method_REG;        /* _REG method for this region (if any) */
0526     void                            *RegionContext;     /* Region-specific data */
0527     UINT8                           *AmlStart;
0528     UINT32                          AmlLength;
0529 
0530 } ACPI_OBJECT_EXTRA;
0531 
0532 
0533 /* Additional data that can be attached to namespace nodes */
0534 
0535 typedef struct acpi_object_data
0536 {
0537     ACPI_OBJECT_COMMON_HEADER
0538     ACPI_OBJECT_HANDLER             Handler;
0539     void                            *Pointer;
0540 
0541 } ACPI_OBJECT_DATA;
0542 
0543 
0544 /* Structure used when objects are cached for reuse */
0545 
0546 typedef struct acpi_object_cache_list
0547 {
0548     ACPI_OBJECT_COMMON_HEADER
0549     union acpi_operand_object       *Next;              /* Link for object cache and internal lists*/
0550 
0551 } ACPI_OBJECT_CACHE_LIST;
0552 
0553 
0554 /******************************************************************************
0555  *
0556  * ACPI_OPERAND_OBJECT Descriptor - a giant union of all of the above
0557  *
0558  *****************************************************************************/
0559 
0560 typedef union acpi_operand_object
0561 {
0562     ACPI_OBJECT_COMMON                  Common;
0563     ACPI_OBJECT_INTEGER                 Integer;
0564     ACPI_OBJECT_STRING                  String;
0565     ACPI_OBJECT_BUFFER                  Buffer;
0566     ACPI_OBJECT_PACKAGE                 Package;
0567     ACPI_OBJECT_EVENT                   Event;
0568     ACPI_OBJECT_METHOD                  Method;
0569     ACPI_OBJECT_MUTEX                   Mutex;
0570     ACPI_OBJECT_REGION                  Region;
0571     ACPI_OBJECT_NOTIFY_COMMON           CommonNotify;
0572     ACPI_OBJECT_DEVICE                  Device;
0573     ACPI_OBJECT_POWER_RESOURCE          PowerResource;
0574     ACPI_OBJECT_PROCESSOR               Processor;
0575     ACPI_OBJECT_THERMAL_ZONE            ThermalZone;
0576     ACPI_OBJECT_FIELD_COMMON            CommonField;
0577     ACPI_OBJECT_REGION_FIELD            Field;
0578     ACPI_OBJECT_BUFFER_FIELD            BufferField;
0579     ACPI_OBJECT_BANK_FIELD              BankField;
0580     ACPI_OBJECT_INDEX_FIELD             IndexField;
0581     ACPI_OBJECT_NOTIFY_HANDLER          Notify;
0582     ACPI_OBJECT_ADDR_HANDLER            AddressSpace;
0583     ACPI_OBJECT_REFERENCE               Reference;
0584     ACPI_OBJECT_EXTRA                   Extra;
0585     ACPI_OBJECT_DATA                    Data;
0586     ACPI_OBJECT_CACHE_LIST              Cache;
0587 
0588     /*
0589      * Add namespace node to union in order to simplify code that accepts both
0590      * ACPI_OPERAND_OBJECTs and ACPI_NAMESPACE_NODEs. The structures share
0591      * a common DescriptorType field in order to differentiate them.
0592      */
0593     ACPI_NAMESPACE_NODE                 Node;
0594 
0595 } ACPI_OPERAND_OBJECT;
0596 
0597 
0598 /******************************************************************************
0599  *
0600  * ACPI_DESCRIPTOR - objects that share a common descriptor identifier
0601  *
0602  *****************************************************************************/
0603 
0604 /* Object descriptor types */
0605 
0606 #define ACPI_DESC_TYPE_CACHED           0x01        /* Used only when object is cached */
0607 #define ACPI_DESC_TYPE_STATE            0x02
0608 #define ACPI_DESC_TYPE_STATE_UPDATE     0x03
0609 #define ACPI_DESC_TYPE_STATE_PACKAGE    0x04
0610 #define ACPI_DESC_TYPE_STATE_CONTROL    0x05
0611 #define ACPI_DESC_TYPE_STATE_RPSCOPE    0x06
0612 #define ACPI_DESC_TYPE_STATE_PSCOPE     0x07
0613 #define ACPI_DESC_TYPE_STATE_WSCOPE     0x08
0614 #define ACPI_DESC_TYPE_STATE_RESULT     0x09
0615 #define ACPI_DESC_TYPE_STATE_NOTIFY     0x0A
0616 #define ACPI_DESC_TYPE_STATE_THREAD     0x0B
0617 #define ACPI_DESC_TYPE_WALK             0x0C
0618 #define ACPI_DESC_TYPE_PARSER           0x0D
0619 #define ACPI_DESC_TYPE_OPERAND          0x0E
0620 #define ACPI_DESC_TYPE_NAMED            0x0F
0621 #define ACPI_DESC_TYPE_MAX              0x0F
0622 
0623 
0624 typedef struct acpi_common_descriptor
0625 {
0626     void                            *CommonPointer;
0627     UINT8                           DescriptorType; /* To differentiate various internal objs */
0628 
0629 } ACPI_COMMON_DESCRIPTOR;
0630 
0631 typedef union acpi_descriptor
0632 {
0633     ACPI_COMMON_DESCRIPTOR          Common;
0634     ACPI_OPERAND_OBJECT             Object;
0635     ACPI_NAMESPACE_NODE             Node;
0636     ACPI_PARSE_OBJECT               Op;
0637 
0638 } ACPI_DESCRIPTOR;
0639 
0640 #pragma pack()
0641 
0642 #endif /* _ACOBJECT_H */