diff options
Diffstat (limited to 'sys/contrib/dev/acpica/acobject.h')
-rw-r--r-- | sys/contrib/dev/acpica/acobject.h | 131 |
1 files changed, 77 insertions, 54 deletions
diff --git a/sys/contrib/dev/acpica/acobject.h b/sys/contrib/dev/acpica/acobject.h index d873b11..104644d 100644 --- a/sys/contrib/dev/acpica/acobject.h +++ b/sys/contrib/dev/acpica/acobject.h @@ -2,7 +2,7 @@ /****************************************************************************** * * Name: acobject.h - Definition of ACPI_OPERAND_OBJECT (Internal object only) - * $Revision: 78 $ + * $Revision: 89 $ * *****************************************************************************/ @@ -149,7 +149,7 @@ */ -#define ACPI_OBJECT_COMMON_HEADER /* 32-bits plus 8-bit flag */\ +#define ACPI_OBJECT_COMMON_HEADER /* SIZE/ALIGNMENT: 32-bits plus trailing 8-bit flag */\ UINT8 DataType; /* To differentiate various internal objs */\ UINT8 Type; /* ACPI_OBJECT_TYPE */\ UINT16 ReferenceCount; /* For object deletion management */\ @@ -164,16 +164,27 @@ /* * Common bitfield for the field objects + * "Field Datum" -- a datum from the actual field object + * "Buffer Datum" -- a datum from a user buffer, read from or to be written to the field */ -#define ACPI_COMMON_FIELD_INFO /* Three 32-bit values plus 8*/\ - UINT8 Granularity;\ - UINT16 Length; \ - UINT32 Offset; /* Byte offset within containing object */\ - UINT8 BitOffset; /* Bit offset within min read/write data unit */\ - UINT8 Access; /* AccessType */\ - UINT8 LockRule;\ - UINT8 UpdateRule;\ - UINT8 AccessAttribute; +#define ACPI_COMMON_FIELD_INFO /* SIZE/ALIGNMENT: 24 bits + three 32-bit values */\ + UINT8 AccessFlags;\ + UINT16 BitLength; /* Length of field in bits */\ + UINT32 BaseByteOffset; /* Byte offset within containing object */\ + UINT8 AccessBitWidth; /* Read/Write size in bits (from ASL AccessType)*/\ + UINT8 AccessByteWidth; /* Read/Write size in bytes */\ + UINT8 UpdateRule; /* How neighboring field bits are handled */\ + UINT8 LockRule; /* Global Lock: 1 = "Must Lock" */\ + UINT8 StartFieldBitOffset;/* Bit offset within first field datum (0-63) */\ + UINT8 DatumValidBits; /* Valid bit in first "Field datum" */\ + UINT8 EndFieldValidBits; /* Valid bits in the last "field datum" */\ + UINT8 EndBufferValidBits; /* Valid bits in the last "buffer datum" */\ + UINT32 Value; /* Value to store into the Bank or Index register */ + + +/* Access flag bits */ + +#define AFIELD_SINGLE_DATUM 0x1 /****************************************************************************** @@ -212,7 +223,7 @@ typedef struct /* STRING - has length and pointer - Null terminated, ASCII chara ACPI_OBJECT_COMMON_HEADER UINT32 Length; - NATIVE_CHAR *Pointer; /* String value in AML stream or in allocated space */ + NATIVE_CHAR *Pointer; /* String value in AML stream or in allocated space */ } ACPI_OBJECT_STRING; @@ -222,7 +233,7 @@ typedef struct /* BUFFER - has length and pointer - not null terminated */ ACPI_OBJECT_COMMON_HEADER UINT32 Length; - UINT8 *Pointer; /* points to the buffer in allocated space */ + UINT8 *Pointer; /* points to the buffer in allocated space */ } ACPI_OBJECT_BUFFER; @@ -231,27 +242,14 @@ typedef struct /* PACKAGE - has count, elements, next element */ { ACPI_OBJECT_COMMON_HEADER - UINT32 Count; /* # of elements in package */ + UINT32 Count; /* # of elements in package */ - union acpi_operand_obj **Elements; /* Array of pointers to AcpiObjects */ - union acpi_operand_obj **NextElement; /* used only while initializing */ + union acpi_operand_obj **Elements; /* Array of pointers to AcpiObjects */ + union acpi_operand_obj **NextElement; /* used only while initializing */ } ACPI_OBJECT_PACKAGE; -typedef struct /* FIELD UNIT */ -{ - ACPI_OBJECT_COMMON_HEADER - - ACPI_COMMON_FIELD_INFO - - union acpi_operand_obj *Extra; /* Pointer to executable AML (in field definition) */ - ACPI_NAMESPACE_NODE *Node; /* containing object */ - union acpi_operand_obj *Container; /* Containing object (Buffer) */ - -} ACPI_OBJECT_FIELD_UNIT; - - typedef struct /* DEVICE - has handle and notification handler/context */ { ACPI_OBJECT_COMMON_HEADER @@ -266,7 +264,6 @@ typedef struct /* DEVICE - has handle and notification handler/context */ typedef struct /* EVENT */ { ACPI_OBJECT_COMMON_HEADER - void *Semaphore; } ACPI_OBJECT_EVENT; @@ -292,12 +289,16 @@ typedef struct /* METHOD */ } ACPI_OBJECT_METHOD; -typedef struct /* MUTEX */ +typedef struct acpi_obj_mutex /* MUTEX */ { ACPI_OBJECT_COMMON_HEADER UINT16 SyncLevel; + UINT16 AcquisitionDepth; void *Semaphore; + void *Owner; + union acpi_operand_obj *Prev; /* Link for list of acquired mutexes */ + union acpi_operand_obj *Next; /* Link for list of acquired mutexes */ } ACPI_OBJECT_MUTEX; @@ -358,57 +359,78 @@ typedef struct /* THERMAL ZONE - has Handle and Handler/Context */ /* - * Internal types + * Fields. All share a common header/info field. */ - -typedef struct /* FIELD */ +typedef struct /* COMMON FIELD (for BUFFER, REGION, BANK, and INDEX fields) */ { ACPI_OBJECT_COMMON_HEADER - ACPI_COMMON_FIELD_INFO + union acpi_operand_obj *RegionObj; /* Containing Operation Region object */ + /* (REGION/BANK fields only) */ +} ACPI_OBJECT_FIELD_COMMON; - union acpi_operand_obj *Container; /* Containing object */ -} ACPI_OBJECT_FIELD; +typedef struct /* REGION FIELD */ +{ + ACPI_OBJECT_COMMON_HEADER + ACPI_COMMON_FIELD_INFO + union acpi_operand_obj *RegionObj; /* Containing OpRegion object */ + +} ACPI_OBJECT_REGION_FIELD; typedef struct /* BANK FIELD */ { ACPI_OBJECT_COMMON_HEADER - ACPI_COMMON_FIELD_INFO - UINT32 Value; /* Value to store into BankSelect */ - ACPI_HANDLE BankSelect; /* Bank select register */ - union acpi_operand_obj *Container; /* Containing object */ + union acpi_operand_obj *RegionObj; /* Containing OpRegion object */ + union acpi_operand_obj *BankRegisterObj; /* BankSelect Register object */ } ACPI_OBJECT_BANK_FIELD; typedef struct /* INDEX FIELD */ { + ACPI_OBJECT_COMMON_HEADER + ACPI_COMMON_FIELD_INFO + /* - * No container pointer needed since the index and data register definitions - * will define how to access the respective registers + * No "RegionObj" pointer needed since the Index and Data registers + * are each field definitions unto themselves. */ - ACPI_OBJECT_COMMON_HEADER + union acpi_operand_obj *IndexObj; /* Index register */ + union acpi_operand_obj *DataObj; /* Data register */ + + +} ACPI_OBJECT_INDEX_FIELD; + +/* The BufferField is different in that it is part of a Buffer, not an OpRegion */ + +typedef struct /* BUFFER FIELD */ +{ + ACPI_OBJECT_COMMON_HEADER ACPI_COMMON_FIELD_INFO - UINT32 Value; /* Value to store into Index register */ - ACPI_HANDLE Index; /* Index register */ - ACPI_HANDLE Data; /* Data register */ + union acpi_operand_obj *Extra; /* Pointer to executable AML (in field definition) */ + ACPI_NAMESPACE_NODE *Node; /* Parent (containing) object node */ + union acpi_operand_obj *BufferObj; /* Containing Buffer object */ + +} ACPI_OBJECT_BUFFER_FIELD; -} ACPI_OBJECT_INDEX_FIELD; +/* + * Handlers + */ typedef struct /* NOTIFY HANDLER */ { ACPI_OBJECT_COMMON_HEADER ACPI_NAMESPACE_NODE *Node; /* Parent device */ - NOTIFY_HANDLER Handler; + ACPI_NOTIFY_HANDLER Handler; void *Context; } ACPI_OBJECT_NOTIFY_HANDLER; @@ -425,11 +447,11 @@ typedef struct /* ADDRESS HANDLER */ UINT8 SpaceId; UINT16 Hflags; - ADDRESS_SPACE_HANDLER Handler; + ACPI_ADR_SPACE_HANDLER Handler; ACPI_NAMESPACE_NODE *Node; /* Parent device */ void *Context; - ADDRESS_SPACE_SETUP Setup; + ACPI_ADR_SPACE_SETUP Setup; union acpi_operand_obj *RegionList; /* regions using this handler */ union acpi_operand_obj *Next; @@ -446,7 +468,7 @@ typedef struct /* Reference - Local object type */ ACPI_OBJECT_COMMON_HEADER UINT8 TargetType; /* Used for IndexOp */ - UINT16 OpCode; + UINT16 Opcode; UINT32 Offset; /* Used for ArgOp, LocalOp, and IndexOp */ void *Object; /* NameOp=>HANDLE to obj, IndexOp=>ACPI_OPERAND_OBJECT */ @@ -491,7 +513,7 @@ typedef union acpi_operand_obj ACPI_OBJECT_STRING String; ACPI_OBJECT_BUFFER Buffer; ACPI_OBJECT_PACKAGE Package; - ACPI_OBJECT_FIELD_UNIT FieldUnit; + ACPI_OBJECT_BUFFER_FIELD BufferField; ACPI_OBJECT_DEVICE Device; ACPI_OBJECT_EVENT Event; ACPI_OBJECT_METHOD Method; @@ -500,7 +522,8 @@ typedef union acpi_operand_obj ACPI_OBJECT_POWER_RESOURCE PowerResource; ACPI_OBJECT_PROCESSOR Processor; ACPI_OBJECT_THERMAL_ZONE ThermalZone; - ACPI_OBJECT_FIELD Field; + ACPI_OBJECT_FIELD_COMMON CommonField; + ACPI_OBJECT_REGION_FIELD Field; ACPI_OBJECT_BANK_FIELD BankField; ACPI_OBJECT_INDEX_FIELD IndexField; ACPI_OBJECT_REFERENCE Reference; |