| 1 | /****************************************************************************** | 
| 2 |  * | 
| 3 |  * Name: acobject.h - Definition of ACPI_OPERAND_OBJECT  (Internal object only) | 
| 4 |  * | 
| 5 |  *****************************************************************************/ | 
| 6 |  | 
| 7 | /* | 
| 8 |  * Copyright (C) 2000 - 2019, Intel Corp. | 
| 9 |  * All rights reserved. | 
| 10 |  * | 
| 11 |  * Redistribution and use in source and binary forms, with or without | 
| 12 |  * modification, are permitted provided that the following conditions | 
| 13 |  * are met: | 
| 14 |  * 1. Redistributions of source code must retain the above copyright | 
| 15 |  *    notice, this list of conditions, and the following disclaimer, | 
| 16 |  *    without modification. | 
| 17 |  * 2. Redistributions in binary form must reproduce at minimum a disclaimer | 
| 18 |  *    substantially similar to the "NO WARRANTY" disclaimer below | 
| 19 |  *    ("Disclaimer") and any redistribution must be conditioned upon | 
| 20 |  *    including a substantially similar Disclaimer requirement for further | 
| 21 |  *    binary redistribution. | 
| 22 |  * 3. Neither the names of the above-listed copyright holders nor the names | 
| 23 |  *    of any contributors may be used to endorse or promote products derived | 
| 24 |  *    from this software without specific prior written permission. | 
| 25 |  * | 
| 26 |  * Alternatively, this software may be distributed under the terms of the | 
| 27 |  * GNU General Public License ("GPL") version 2 as published by the Free | 
| 28 |  * Software Foundation. | 
| 29 |  * | 
| 30 |  * NO WARRANTY | 
| 31 |  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | 
| 32 |  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | 
| 33 |  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR | 
| 34 |  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT | 
| 35 |  * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | 
| 36 |  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS | 
| 37 |  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | 
| 38 |  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, | 
| 39 |  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING | 
| 40 |  * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE | 
| 41 |  * POSSIBILITY OF SUCH DAMAGES. | 
| 42 |  */ | 
| 43 |  | 
| 44 | #ifndef _ACOBJECT_H | 
| 45 | #define _ACOBJECT_H | 
| 46 |  | 
| 47 | /* acpisrc:StructDefs -- for acpisrc conversion */ | 
| 48 |  | 
| 49 |  | 
| 50 | /* | 
| 51 |  * The ACPI_OPERAND_OBJECT is used to pass AML operands from the dispatcher | 
| 52 |  * to the interpreter, and to keep track of the various handlers such as | 
| 53 |  * address space handlers and notify handlers. The object is a constant | 
| 54 |  * size in order to allow it to be cached and reused. | 
| 55 |  * | 
| 56 |  * Note: The object is optimized to be aligned and will not work if it is | 
| 57 |  * byte-packed. | 
| 58 |  */ | 
| 59 | #if ACPI_MACHINE_WIDTH == 64 | 
| 60 | #pragma pack(8) | 
| 61 | #else | 
| 62 | #pragma pack(4) | 
| 63 | #endif | 
| 64 |  | 
| 65 | /******************************************************************************* | 
| 66 |  * | 
| 67 |  * Common Descriptors | 
| 68 |  * | 
| 69 |  ******************************************************************************/ | 
| 70 |  | 
| 71 | /* | 
| 72 |  * Common area for all objects. | 
| 73 |  * | 
| 74 |  * DescriptorType is used to differentiate between internal descriptors, and | 
| 75 |  * must be in the same place across all descriptors | 
| 76 |  * | 
| 77 |  * Note: The DescriptorType and Type fields must appear in the identical | 
| 78 |  * position in both the ACPI_NAMESPACE_NODE and ACPI_OPERAND_OBJECT | 
| 79 |  * structures. | 
| 80 |  */ | 
| 81 | #define  \ | 
| 82 |     union acpi_operand_object       *;        /* Objects linked to parent NS node */\ | 
| 83 |     UINT8                           ;     /* To differentiate various internal objs */\ | 
| 84 |     UINT8                           ;               /* ACPI_OBJECT_TYPE */\ | 
| 85 |     UINT16                          ;     /* For object deletion management */\ | 
| 86 |     UINT8                           ; | 
| 87 |     /* | 
| 88 |      * Note: There are 3 bytes available here before the | 
| 89 |      * next natural alignment boundary (for both 32/64 cases) | 
| 90 |      */ | 
| 91 |  | 
| 92 | /* Values for Flag byte above */ | 
| 93 |  | 
| 94 | #define AOPOBJ_AML_CONSTANT         0x01    /* Integer is an AML constant */ | 
| 95 | #define AOPOBJ_STATIC_POINTER       0x02    /* Data is part of an ACPI table, don't delete */ | 
| 96 | #define AOPOBJ_DATA_VALID           0x04    /* Object is initialized and data is valid */ | 
| 97 | #define AOPOBJ_OBJECT_INITIALIZED   0x08    /* Region is initialized */ | 
| 98 | #define AOPOBJ_REG_CONNECTED        0x10    /* _REG was run */ | 
| 99 | #define AOPOBJ_SETUP_COMPLETE       0x20    /* Region setup is complete */ | 
| 100 | #define AOPOBJ_INVALID              0x40    /* Host OS won't allow a Region address */ | 
| 101 |  | 
| 102 |  | 
| 103 | /****************************************************************************** | 
| 104 |  * | 
| 105 |  * Basic data types | 
| 106 |  * | 
| 107 |  *****************************************************************************/ | 
| 108 |  | 
| 109 | typedef struct acpi_object_common | 
| 110 | { | 
| 111 |     ACPI_OBJECT_COMMON_HEADER | 
| 112 |  | 
| 113 | } ACPI_OBJECT_COMMON; | 
| 114 |  | 
| 115 |  | 
| 116 | typedef struct acpi_object_integer | 
| 117 | { | 
| 118 |     ACPI_OBJECT_COMMON_HEADER | 
| 119 |     UINT8                           Fill[3];            /* Prevent warning on some compilers */ | 
| 120 |     UINT64                          Value; | 
| 121 |  | 
| 122 | } ACPI_OBJECT_INTEGER; | 
| 123 |  | 
| 124 |  | 
| 125 | /* | 
| 126 |  * Note: The String and Buffer object must be identical through the | 
| 127 |  * pointer and length elements. There is code that depends on this. | 
| 128 |  * | 
| 129 |  * Fields common to both Strings and Buffers | 
| 130 |  */ | 
| 131 | #define ACPI_COMMON_BUFFER_INFO(_Type) \ | 
| 132 |     _Type                           *Pointer; \ | 
| 133 |     UINT32                          Length; | 
| 134 |  | 
| 135 |  | 
| 136 | /* Null terminated, ASCII characters only */ | 
| 137 |  | 
| 138 | typedef struct acpi_object_string | 
| 139 | { | 
| 140 |     ACPI_OBJECT_COMMON_HEADER | 
| 141 |     ACPI_COMMON_BUFFER_INFO         (char)              /* String in AML stream or allocated string */ | 
| 142 |  | 
| 143 | } ACPI_OBJECT_STRING; | 
| 144 |  | 
| 145 |  | 
| 146 | typedef struct acpi_object_buffer | 
| 147 | { | 
| 148 |     ACPI_OBJECT_COMMON_HEADER | 
| 149 |     ACPI_COMMON_BUFFER_INFO         (UINT8)             /* Buffer in AML stream or allocated buffer */ | 
| 150 |     UINT32                          AmlLength; | 
| 151 |     UINT8                           *AmlStart; | 
| 152 |     ACPI_NAMESPACE_NODE             *Node;              /* Link back to parent node */ | 
| 153 |  | 
| 154 | } ACPI_OBJECT_BUFFER; | 
| 155 |  | 
| 156 |  | 
| 157 | typedef struct acpi_object_package | 
| 158 | { | 
| 159 |     ACPI_OBJECT_COMMON_HEADER | 
| 160 |     ACPI_NAMESPACE_NODE             *Node;              /* Link back to parent node */ | 
| 161 |     union acpi_operand_object       **Elements;         /* Array of pointers to AcpiObjects */ | 
| 162 |     UINT8                           *AmlStart; | 
| 163 |     UINT32                          AmlLength; | 
| 164 |     UINT32                          Count;              /* # of elements in package */ | 
| 165 |  | 
| 166 | } ACPI_OBJECT_PACKAGE; | 
| 167 |  | 
| 168 |  | 
| 169 | /****************************************************************************** | 
| 170 |  * | 
| 171 |  * Complex data types | 
| 172 |  * | 
| 173 |  *****************************************************************************/ | 
| 174 |  | 
| 175 | typedef struct acpi_object_event | 
| 176 | { | 
| 177 |     ACPI_OBJECT_COMMON_HEADER | 
| 178 |     ACPI_SEMAPHORE                  OsSemaphore;        /* Actual OS synchronization object */ | 
| 179 |  | 
| 180 | } ACPI_OBJECT_EVENT; | 
| 181 |  | 
| 182 |  | 
| 183 | typedef struct acpi_object_mutex | 
| 184 | { | 
| 185 |     ACPI_OBJECT_COMMON_HEADER | 
| 186 |     UINT8                           SyncLevel;          /* 0-15, specified in Mutex() call */ | 
| 187 |     UINT16                          AcquisitionDepth;   /* Allow multiple Acquires, same thread */ | 
| 188 |     ACPI_MUTEX                      OsMutex;            /* Actual OS synchronization object */ | 
| 189 |     ACPI_THREAD_ID                  ThreadId;           /* Current owner of the mutex */ | 
| 190 |     struct acpi_thread_state        *OwnerThread;       /* Current owner of the mutex */ | 
| 191 |     union acpi_operand_object       *Prev;              /* Link for list of acquired mutexes */ | 
| 192 |     union acpi_operand_object       *Next;              /* Link for list of acquired mutexes */ | 
| 193 |     ACPI_NAMESPACE_NODE             *Node;              /* Containing namespace node */ | 
| 194 |     UINT8                           OriginalSyncLevel;  /* Owner's original sync level (0-15) */ | 
| 195 |  | 
| 196 | } ACPI_OBJECT_MUTEX; | 
| 197 |  | 
| 198 |  | 
| 199 | typedef struct acpi_object_region | 
| 200 | { | 
| 201 |     ACPI_OBJECT_COMMON_HEADER | 
| 202 |     UINT8                           SpaceId; | 
| 203 |     ACPI_NAMESPACE_NODE             *Node;              /* Containing namespace node */ | 
| 204 |     union acpi_operand_object       *Handler;           /* Handler for region access */ | 
| 205 |     union acpi_operand_object       *Next; | 
| 206 |     ACPI_PHYSICAL_ADDRESS           Address; | 
| 207 |     UINT32                          Length; | 
| 208 |  | 
| 209 | } ACPI_OBJECT_REGION; | 
| 210 |  | 
| 211 |  | 
| 212 | typedef struct acpi_object_method | 
| 213 | { | 
| 214 |     ACPI_OBJECT_COMMON_HEADER | 
| 215 |     UINT8                           InfoFlags; | 
| 216 |     UINT8                           ParamCount; | 
| 217 |     UINT8                           SyncLevel; | 
| 218 |     union acpi_operand_object       *Mutex; | 
| 219 |     union acpi_operand_object       *Node; | 
| 220 |     UINT8                           *AmlStart; | 
| 221 |     union | 
| 222 |     { | 
| 223 |         ACPI_INTERNAL_METHOD            Implementation; | 
| 224 |         union acpi_operand_object       *Handler; | 
| 225 |     } Dispatch; | 
| 226 |  | 
| 227 |     UINT32                          AmlLength; | 
| 228 |     UINT8                           ThreadCount; | 
| 229 |     ACPI_OWNER_ID                   OwnerId; | 
| 230 |  | 
| 231 | } ACPI_OBJECT_METHOD; | 
| 232 |  | 
| 233 | /* Flags for InfoFlags field above */ | 
| 234 |  | 
| 235 | #define ACPI_METHOD_MODULE_LEVEL        0x01    /* Method is actually module-level code */ | 
| 236 | #define ACPI_METHOD_INTERNAL_ONLY       0x02    /* Method is implemented internally (_OSI) */ | 
| 237 | #define ACPI_METHOD_SERIALIZED          0x04    /* Method is serialized */ | 
| 238 | #define ACPI_METHOD_SERIALIZED_PENDING  0x08    /* Method is to be marked serialized */ | 
| 239 | #define ACPI_METHOD_IGNORE_SYNC_LEVEL   0x10    /* Method was auto-serialized at table load time */ | 
| 240 | #define ACPI_METHOD_MODIFIED_NAMESPACE  0x20    /* Method modified the namespace */ | 
| 241 |  | 
| 242 |  | 
| 243 | /****************************************************************************** | 
| 244 |  * | 
| 245 |  * Objects that can be notified. All share a common NotifyInfo area. | 
| 246 |  * | 
| 247 |  *****************************************************************************/ | 
| 248 |  | 
| 249 | /* | 
| 250 |  * Common fields for objects that support ASL notifications | 
| 251 |  */ | 
| 252 | #define ACPI_COMMON_NOTIFY_INFO \ | 
| 253 |     union acpi_operand_object       *NotifyList[2];     /* Handlers for system/device notifies */\ | 
| 254 |     union acpi_operand_object       *Handler;           /* Handler for Address space */ | 
| 255 |  | 
| 256 | /* COMMON NOTIFY for POWER, PROCESSOR, DEVICE, and THERMAL */ | 
| 257 |  | 
| 258 | typedef struct acpi_object_notify_common | 
| 259 | { | 
| 260 |     ACPI_OBJECT_COMMON_HEADER | 
| 261 |     ACPI_COMMON_NOTIFY_INFO | 
| 262 |  | 
| 263 | } ACPI_OBJECT_NOTIFY_COMMON; | 
| 264 |  | 
| 265 |  | 
| 266 | typedef struct acpi_object_device | 
| 267 | { | 
| 268 |     ACPI_OBJECT_COMMON_HEADER | 
| 269 |     ACPI_COMMON_NOTIFY_INFO | 
| 270 |     ACPI_GPE_BLOCK_INFO             *GpeBlock; | 
| 271 |  | 
| 272 | } ACPI_OBJECT_DEVICE; | 
| 273 |  | 
| 274 |  | 
| 275 | typedef struct acpi_object_power_resource | 
| 276 | { | 
| 277 |     ACPI_OBJECT_COMMON_HEADER | 
| 278 |     ACPI_COMMON_NOTIFY_INFO | 
| 279 |     UINT32                          SystemLevel; | 
| 280 |     UINT32                          ResourceOrder; | 
| 281 |  | 
| 282 | } ACPI_OBJECT_POWER_RESOURCE; | 
| 283 |  | 
| 284 |  | 
| 285 | typedef struct acpi_object_processor | 
| 286 | { | 
| 287 |     ACPI_OBJECT_COMMON_HEADER | 
| 288 |  | 
| 289 |     /* The next two fields take advantage of the 3-byte space before NOTIFY_INFO */ | 
| 290 |  | 
| 291 |     UINT8                           ProcId; | 
| 292 |     UINT8                           Length; | 
| 293 |     ACPI_COMMON_NOTIFY_INFO | 
| 294 |     ACPI_IO_ADDRESS                 Address; | 
| 295 |  | 
| 296 | } ACPI_OBJECT_PROCESSOR; | 
| 297 |  | 
| 298 |  | 
| 299 | typedef struct acpi_object_thermal_zone | 
| 300 | { | 
| 301 |     ACPI_OBJECT_COMMON_HEADER | 
| 302 |     ACPI_COMMON_NOTIFY_INFO | 
| 303 |  | 
| 304 | } ACPI_OBJECT_THERMAL_ZONE; | 
| 305 |  | 
| 306 |  | 
| 307 | /****************************************************************************** | 
| 308 |  * | 
| 309 |  * Fields. All share a common header/info field. | 
| 310 |  * | 
| 311 |  *****************************************************************************/ | 
| 312 |  | 
| 313 | /* | 
| 314 |  * Common bitfield for the field objects | 
| 315 |  * "Field Datum"  -- a datum from the actual field object | 
| 316 |  * "Buffer Datum" -- a datum from a user buffer, read from or to be written to the field | 
| 317 |  */ | 
| 318 | #define ACPI_COMMON_FIELD_INFO \ | 
| 319 |     UINT8                           FieldFlags;         /* Access, update, and lock bits */\ | 
| 320 |     UINT8                           Attribute;          /* From AccessAs keyword */\ | 
| 321 |     UINT8                           AccessByteWidth;    /* Read/Write size in bytes */\ | 
| 322 |     ACPI_NAMESPACE_NODE             *Node;              /* Link back to parent node */\ | 
| 323 |     UINT32                          BitLength;          /* Length of field in bits */\ | 
| 324 |     UINT32                          BaseByteOffset;     /* Byte offset within containing object */\ | 
| 325 |     UINT32                          Value;              /* Value to store into the Bank or Index register */\ | 
| 326 |     UINT8                           StartFieldBitOffset;/* Bit offset within first field datum (0-63) */\ | 
| 327 |     UINT8                           AccessLength;       /* For serial regions/fields */ | 
| 328 |  | 
| 329 | /* COMMON FIELD (for BUFFER, REGION, BANK, and INDEX fields) */ | 
| 330 |  | 
| 331 | typedef struct acpi_object_field_common | 
| 332 | { | 
| 333 |     ACPI_OBJECT_COMMON_HEADER | 
| 334 |     ACPI_COMMON_FIELD_INFO | 
| 335 |     union acpi_operand_object       *RegionObj;         /* Parent Operation Region object (REGION/BANK fields only) */ | 
| 336 |  | 
| 337 | } ACPI_OBJECT_FIELD_COMMON; | 
| 338 |  | 
| 339 |  | 
| 340 | typedef struct acpi_object_region_field | 
| 341 | { | 
| 342 |     ACPI_OBJECT_COMMON_HEADER | 
| 343 |     ACPI_COMMON_FIELD_INFO | 
| 344 |     UINT16                          ResourceLength; | 
| 345 |     union acpi_operand_object       *RegionObj;         /* Containing OpRegion object */ | 
| 346 |     UINT8                           *ResourceBuffer;    /* ResourceTemplate for serial regions/fields */ | 
| 347 |     UINT16                          PinNumberIndex;     /* Index relative to previous Connection/Template */ | 
| 348 |     UINT8                           *InternalPccBuffer; /* Internal buffer for fields associated with PCC */ | 
| 349 |  | 
| 350 | } ACPI_OBJECT_REGION_FIELD; | 
| 351 |  | 
| 352 |  | 
| 353 | typedef struct acpi_object_bank_field | 
| 354 | { | 
| 355 |     ACPI_OBJECT_COMMON_HEADER | 
| 356 |     ACPI_COMMON_FIELD_INFO | 
| 357 |     union acpi_operand_object       *RegionObj;         /* Containing OpRegion object */ | 
| 358 |     union acpi_operand_object       *BankObj;           /* BankSelect Register object */ | 
| 359 |  | 
| 360 | } ACPI_OBJECT_BANK_FIELD; | 
| 361 |  | 
| 362 |  | 
| 363 | typedef struct acpi_object_index_field | 
| 364 | { | 
| 365 |     ACPI_OBJECT_COMMON_HEADER | 
| 366 |     ACPI_COMMON_FIELD_INFO | 
| 367 |  | 
| 368 |     /* | 
| 369 |      * No "RegionObj" pointer needed since the Index and Data registers | 
| 370 |      * are each field definitions unto themselves. | 
| 371 |      */ | 
| 372 |     union acpi_operand_object       *IndexObj;          /* Index register */ | 
| 373 |     union acpi_operand_object       *DataObj;           /* Data register */ | 
| 374 |  | 
| 375 | } ACPI_OBJECT_INDEX_FIELD; | 
| 376 |  | 
| 377 |  | 
| 378 | /* The BufferField is different in that it is part of a Buffer, not an OpRegion */ | 
| 379 |  | 
| 380 | typedef struct acpi_object_buffer_field | 
| 381 | { | 
| 382 |     ACPI_OBJECT_COMMON_HEADER | 
| 383 |     ACPI_COMMON_FIELD_INFO | 
| 384 |     union acpi_operand_object       *BufferObj;         /* Containing Buffer object */ | 
| 385 |  | 
| 386 | } ACPI_OBJECT_BUFFER_FIELD; | 
| 387 |  | 
| 388 |  | 
| 389 | /****************************************************************************** | 
| 390 |  * | 
| 391 |  * Objects for handlers | 
| 392 |  * | 
| 393 |  *****************************************************************************/ | 
| 394 |  | 
| 395 | typedef struct acpi_object_notify_handler | 
| 396 | { | 
| 397 |     ACPI_OBJECT_COMMON_HEADER | 
| 398 |     ACPI_NAMESPACE_NODE             *Node;              /* Parent device */ | 
| 399 |     UINT32                          HandlerType;        /* Type: Device/System/Both */ | 
| 400 |     ACPI_NOTIFY_HANDLER             Handler;            /* Handler address */ | 
| 401 |     void                            *Context; | 
| 402 |     union acpi_operand_object       *Next[2];           /* Device and System handler lists */ | 
| 403 |  | 
| 404 | } ACPI_OBJECT_NOTIFY_HANDLER; | 
| 405 |  | 
| 406 |  | 
| 407 | typedef struct acpi_object_addr_handler | 
| 408 | { | 
| 409 |     ACPI_OBJECT_COMMON_HEADER | 
| 410 |     UINT8                           SpaceId; | 
| 411 |     UINT8                           HandlerFlags; | 
| 412 |     ACPI_ADR_SPACE_HANDLER          Handler; | 
| 413 |     ACPI_NAMESPACE_NODE             *Node;              /* Parent device */ | 
| 414 |     void                            *Context; | 
| 415 |     ACPI_ADR_SPACE_SETUP            Setup; | 
| 416 |     union acpi_operand_object       *RegionList;        /* Regions using this handler */ | 
| 417 |     union acpi_operand_object       *Next; | 
| 418 |  | 
| 419 | } ACPI_OBJECT_ADDR_HANDLER; | 
| 420 |  | 
| 421 | /* Flags for address handler (HandlerFlags) */ | 
| 422 |  | 
| 423 | #define ACPI_ADDR_HANDLER_DEFAULT_INSTALLED  0x01 | 
| 424 |  | 
| 425 |  | 
| 426 | /****************************************************************************** | 
| 427 |  * | 
| 428 |  * Special internal objects | 
| 429 |  * | 
| 430 |  *****************************************************************************/ | 
| 431 |  | 
| 432 | /* | 
| 433 |  * The Reference object is used for these opcodes: | 
| 434 |  * Arg[0-6], Local[0-7], IndexOp, NameOp, RefOfOp, LoadOp, LoadTableOp, DebugOp | 
| 435 |  * The Reference.Class differentiates these types. | 
| 436 |  */ | 
| 437 | typedef struct acpi_object_reference | 
| 438 | { | 
| 439 |     ACPI_OBJECT_COMMON_HEADER | 
| 440 |     UINT8                           Class;              /* Reference Class */ | 
| 441 |     UINT8                           TargetType;         /* Used for Index Op */ | 
| 442 |     UINT8                           Resolved;           /* Reference has been resolved to a value */ | 
| 443 |     void                            *Object;            /* NameOp=>HANDLE to obj, IndexOp=>ACPI_OPERAND_OBJECT */ | 
| 444 |     ACPI_NAMESPACE_NODE             *Node;              /* RefOf or Namepath */ | 
| 445 |     union acpi_operand_object       **Where;            /* Target of Index */ | 
| 446 |     UINT8                           *IndexPointer;      /* Used for Buffers and Strings */ | 
| 447 |     UINT8                           *Aml;               /* Used for deferred resolution of the ref */ | 
| 448 |     UINT32                          Value;              /* Used for Local/Arg/Index/DdbHandle */ | 
| 449 |  | 
| 450 | } ACPI_OBJECT_REFERENCE; | 
| 451 |  | 
| 452 | /* Values for Reference.Class above */ | 
| 453 |  | 
| 454 | typedef enum | 
| 455 | { | 
| 456 |     ACPI_REFCLASS_LOCAL             = 0,        /* Method local */ | 
| 457 |     ACPI_REFCLASS_ARG               = 1,        /* Method argument */ | 
| 458 |     ACPI_REFCLASS_REFOF             = 2,        /* Result of RefOf() TBD: Split to Ref/Node and Ref/OperandObj? */ | 
| 459 |     ACPI_REFCLASS_INDEX             = 3,        /* Result of Index() */ | 
| 460 |     ACPI_REFCLASS_TABLE             = 4,        /* DdbHandle - Load(), LoadTable() */ | 
| 461 |     ACPI_REFCLASS_NAME              = 5,        /* Reference to a named object */ | 
| 462 |     ACPI_REFCLASS_DEBUG             = 6,        /* Debug object */ | 
| 463 |  | 
| 464 |     ACPI_REFCLASS_MAX               = 6 | 
| 465 |  | 
| 466 | } ACPI_REFERENCE_CLASSES; | 
| 467 |  | 
| 468 | /* | 
| 469 |  * Extra object is used as additional storage for types that | 
| 470 |  * have AML code in their declarations (TermArgs) that must be | 
| 471 |  * evaluated at run time. | 
| 472 |  * | 
| 473 |  * Currently: Region and FieldUnit types | 
| 474 |  */ | 
| 475 | typedef struct  | 
| 476 | { | 
| 477 |     ACPI_OBJECT_COMMON_HEADER | 
| 478 |     ACPI_NAMESPACE_NODE             *;        /* _REG method for this region (if any) */ | 
| 479 |     ACPI_NAMESPACE_NODE             *; | 
| 480 |     void                            *;     /* Region-specific data */ | 
| 481 |     UINT8                           *; | 
| 482 |     UINT32                          ; | 
| 483 |  | 
| 484 | } ; | 
| 485 |  | 
| 486 |  | 
| 487 | /* Additional data that can be attached to namespace nodes */ | 
| 488 |  | 
| 489 | typedef struct acpi_object_data | 
| 490 | { | 
| 491 |     ACPI_OBJECT_COMMON_HEADER | 
| 492 |     ACPI_OBJECT_HANDLER             Handler; | 
| 493 |     void                            *Pointer; | 
| 494 |  | 
| 495 | } ACPI_OBJECT_DATA; | 
| 496 |  | 
| 497 |  | 
| 498 | /* Structure used when objects are cached for reuse */ | 
| 499 |  | 
| 500 | typedef struct acpi_object_cache_list | 
| 501 | { | 
| 502 |     ACPI_OBJECT_COMMON_HEADER | 
| 503 |     union acpi_operand_object       *Next;              /* Link for object cache and internal lists*/ | 
| 504 |  | 
| 505 | } ACPI_OBJECT_CACHE_LIST; | 
| 506 |  | 
| 507 |  | 
| 508 | /****************************************************************************** | 
| 509 |  * | 
| 510 |  * ACPI_OPERAND_OBJECT Descriptor - a giant union of all of the above | 
| 511 |  * | 
| 512 |  *****************************************************************************/ | 
| 513 |  | 
| 514 | typedef union acpi_operand_object | 
| 515 | { | 
| 516 |     ACPI_OBJECT_COMMON                  Common; | 
| 517 |     ACPI_OBJECT_INTEGER                 Integer; | 
| 518 |     ACPI_OBJECT_STRING                  String; | 
| 519 |     ACPI_OBJECT_BUFFER                  Buffer; | 
| 520 |     ACPI_OBJECT_PACKAGE                 Package; | 
| 521 |     ACPI_OBJECT_EVENT                   Event; | 
| 522 |     ACPI_OBJECT_METHOD                  Method; | 
| 523 |     ACPI_OBJECT_MUTEX                   Mutex; | 
| 524 |     ACPI_OBJECT_REGION                  Region; | 
| 525 |     ACPI_OBJECT_NOTIFY_COMMON           CommonNotify; | 
| 526 |     ACPI_OBJECT_DEVICE                  Device; | 
| 527 |     ACPI_OBJECT_POWER_RESOURCE          PowerResource; | 
| 528 |     ACPI_OBJECT_PROCESSOR               Processor; | 
| 529 |     ACPI_OBJECT_THERMAL_ZONE            ThermalZone; | 
| 530 |     ACPI_OBJECT_FIELD_COMMON            CommonField; | 
| 531 |     ACPI_OBJECT_REGION_FIELD            Field; | 
| 532 |     ACPI_OBJECT_BUFFER_FIELD            BufferField; | 
| 533 |     ACPI_OBJECT_BANK_FIELD              BankField; | 
| 534 |     ACPI_OBJECT_INDEX_FIELD             IndexField; | 
| 535 |     ACPI_OBJECT_NOTIFY_HANDLER          Notify; | 
| 536 |     ACPI_OBJECT_ADDR_HANDLER            AddressSpace; | 
| 537 |     ACPI_OBJECT_REFERENCE               Reference; | 
| 538 |     ACPI_OBJECT_EXTRA                   Extra; | 
| 539 |     ACPI_OBJECT_DATA                    Data; | 
| 540 |     ACPI_OBJECT_CACHE_LIST              Cache; | 
| 541 |  | 
| 542 |     /* | 
| 543 |      * Add namespace node to union in order to simplify code that accepts both | 
| 544 |      * ACPI_OPERAND_OBJECTs and ACPI_NAMESPACE_NODEs. The structures share | 
| 545 |      * a common DescriptorType field in order to differentiate them. | 
| 546 |      */ | 
| 547 |     ACPI_NAMESPACE_NODE                 Node; | 
| 548 |  | 
| 549 | } ACPI_OPERAND_OBJECT; | 
| 550 |  | 
| 551 |  | 
| 552 | /****************************************************************************** | 
| 553 |  * | 
| 554 |  * ACPI_DESCRIPTOR - objects that share a common descriptor identifier | 
| 555 |  * | 
| 556 |  *****************************************************************************/ | 
| 557 |  | 
| 558 | /* Object descriptor types */ | 
| 559 |  | 
| 560 | #define ACPI_DESC_TYPE_CACHED           0x01        /* Used only when object is cached */ | 
| 561 | #define ACPI_DESC_TYPE_STATE            0x02 | 
| 562 | #define ACPI_DESC_TYPE_STATE_UPDATE     0x03 | 
| 563 | #define ACPI_DESC_TYPE_STATE_PACKAGE    0x04 | 
| 564 | #define ACPI_DESC_TYPE_STATE_CONTROL    0x05 | 
| 565 | #define ACPI_DESC_TYPE_STATE_RPSCOPE    0x06 | 
| 566 | #define ACPI_DESC_TYPE_STATE_PSCOPE     0x07 | 
| 567 | #define ACPI_DESC_TYPE_STATE_WSCOPE     0x08 | 
| 568 | #define ACPI_DESC_TYPE_STATE_RESULT     0x09 | 
| 569 | #define ACPI_DESC_TYPE_STATE_NOTIFY     0x0A | 
| 570 | #define ACPI_DESC_TYPE_STATE_THREAD     0x0B | 
| 571 | #define ACPI_DESC_TYPE_WALK             0x0C | 
| 572 | #define ACPI_DESC_TYPE_PARSER           0x0D | 
| 573 | #define ACPI_DESC_TYPE_OPERAND          0x0E | 
| 574 | #define ACPI_DESC_TYPE_NAMED            0x0F | 
| 575 | #define ACPI_DESC_TYPE_MAX              0x0F | 
| 576 |  | 
| 577 |  | 
| 578 | typedef struct acpi_common_descriptor | 
| 579 | { | 
| 580 |     void                            *CommonPointer; | 
| 581 |     UINT8                           DescriptorType; /* To differentiate various internal objs */ | 
| 582 |  | 
| 583 | } ACPI_COMMON_DESCRIPTOR; | 
| 584 |  | 
| 585 | typedef union acpi_descriptor | 
| 586 | { | 
| 587 |     ACPI_COMMON_DESCRIPTOR          Common; | 
| 588 |     ACPI_OPERAND_OBJECT             Object; | 
| 589 |     ACPI_NAMESPACE_NODE             Node; | 
| 590 |     ACPI_PARSE_OBJECT               Op; | 
| 591 |  | 
| 592 | } ACPI_DESCRIPTOR; | 
| 593 |  | 
| 594 | #pragma pack() | 
| 595 |  | 
| 596 | #endif /* _ACOBJECT_H */ | 
| 597 |  |