summaryrefslogtreecommitdiffstats
path: root/sys/contrib/dev/acpica/acobject.h
diff options
context:
space:
mode:
Diffstat (limited to 'sys/contrib/dev/acpica/acobject.h')
-rw-r--r--sys/contrib/dev/acpica/acobject.h265
1 files changed, 142 insertions, 123 deletions
diff --git a/sys/contrib/dev/acpica/acobject.h b/sys/contrib/dev/acpica/acobject.h
index b56d4c1..a9d27eb 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: 1.130 $
+ * $Revision: 1.143 $
*
*****************************************************************************/
@@ -10,7 +10,7 @@
*
* 1. Copyright Notice
*
- * Some or all of this work - Copyright (c) 1999 - 2005, Intel Corp.
+ * Some or all of this work - Copyright (c) 1999 - 2007, Intel Corp.
* All rights reserved.
*
* 2. License
@@ -118,13 +118,23 @@
#ifndef _ACOBJECT_H
#define _ACOBJECT_H
+/* acpisrc:StructDefs -- for acpisrc conversion */
+
/*
- * The ACPI_OPERAND_OBJECT is used to pass AML operands from the dispatcher
+ * The ACPI_OPERAND_OBJECT is used to pass AML operands from the dispatcher
* to the interpreter, and to keep track of the various handlers such as
- * address space handlers and notify handlers. The object is a constant
+ * address space handlers and notify handlers. The object is a constant
* size in order to allow it to be cached and reused.
+ *
+ * Note: The object is optimized to be aligned and will not work if it is
+ * byte-packed.
*/
+#if ACPI_MACHINE_WIDTH == 64
+#pragma pack(8)
+#else
+#pragma pack(4)
+#endif
/*******************************************************************************
*
@@ -135,17 +145,25 @@
/*
* Common area for all objects.
*
- * DataType is used to differentiate between internal descriptors, and MUST
- * be the first byte in this structure.
+ * DescriptorType is used to differentiate between internal descriptors, and
+ * must be in the same place across all descriptors
+ *
+ * Note: The DescriptorType and Type fields must appear in the identical
+ * position in both the ACPI_NAMESPACE_NODE and ACPI_OPERAND_OBJECT
+ * structures.
*/
-#define ACPI_OBJECT_COMMON_HEADER /* SIZE/ALIGNMENT: 32 bits, one ptr plus trailing 8-bit flag */\
- UINT8 Descriptor; /* To differentiate various internal objs */\
+#define ACPI_OBJECT_COMMON_HEADER \
+ union acpi_operand_object *NextObject; /* Objects linked to parent NS node */\
+ UINT8 DescriptorType; /* To differentiate various internal objs */\
UINT8 Type; /* ACPI_OBJECT_TYPE */\
UINT16 ReferenceCount; /* For object deletion management */\
- union acpi_operand_object *NextObject; /* Objects linked to parent NS node */\
- UINT8 Flags; \
+ UINT8 Flags;
+ /*
+ * Note: There are 3 bytes available here before the
+ * next natural alignment boundary (for both 32/64 cases)
+ */
-/* Values for flag byte above */
+/* Values for Flag byte above */
#define AOPOBJ_AML_CONSTANT 0x01
#define AOPOBJ_STATIC_POINTER 0x02
@@ -153,39 +171,7 @@
#define AOPOBJ_OBJECT_INITIALIZED 0x08
#define AOPOBJ_SETUP_COMPLETE 0x10
#define AOPOBJ_SINGLE_DATUM 0x20
-
-
-/*
- * 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 /* SIZE/ALIGNMENT: 24 bits + three 32-bit values */\
- UINT8 FieldFlags; /* Access, update, and lock bits */\
- UINT8 Attribute; /* From AccessAs keyword */\
- UINT8 AccessByteWidth; /* Read/Write size in bytes */\
- UINT32 BitLength; /* Length of field in bits */\
- UINT32 BaseByteOffset; /* Byte offset within containing object */\
- UINT8 StartFieldBitOffset;/* Bit offset within first field datum (0-63) */\
- UINT8 AccessBitWidth; /* Read/Write size in bits (8-64) */\
- UINT32 Value; /* Value to store into the Bank or Index register */\
- ACPI_NAMESPACE_NODE *Node; /* Link back to parent node */
-
-
-/*
- * Fields common to both Strings and Buffers
- */
-#define ACPI_COMMON_BUFFER_INFO \
- UINT32 Length;
-
-
-/*
- * Common fields for objects that support ASL notifications
- */
-#define ACPI_COMMON_NOTIFY_INFO \
- union acpi_operand_object *SystemNotify; /* Handler for system notifies */\
- union acpi_operand_object *DeviceNotify; /* Handler for driver notifies */\
- union acpi_operand_object *Handler; /* Handler for Address space */
+#define AOPOBJ_INVALID 0x40 /* Used if host OS won't allow an OpRegion address */
/******************************************************************************
@@ -204,6 +190,7 @@ typedef struct acpi_object_common
typedef struct acpi_object_integer
{
ACPI_OBJECT_COMMON_HEADER
+ UINT8 Fill[3]; /* Prevent warning on some compilers */
ACPI_INTEGER Value;
} ACPI_OBJECT_INTEGER;
@@ -211,13 +198,19 @@ typedef struct acpi_object_integer
/*
* Note: The String and Buffer object must be identical through the Pointer
- * element. There is code that depends on this.
+ * and length elements. There is code that depends on this.
+ *
+ * Fields common to both Strings and Buffers
*/
+#define ACPI_COMMON_BUFFER_INFO(_Type) \
+ _Type *Pointer; \
+ UINT32 Length;
+
+
typedef struct acpi_object_string /* Null terminated, ASCII characters only */
{
ACPI_OBJECT_COMMON_HEADER
- ACPI_COMMON_BUFFER_INFO
- char *Pointer; /* String in AML stream or allocated string */
+ ACPI_COMMON_BUFFER_INFO (char) /* String in AML stream or allocated string */
} ACPI_OBJECT_STRING;
@@ -225,11 +218,10 @@ typedef struct acpi_object_string /* Null terminated, ASCII characters only */
typedef struct acpi_object_buffer
{
ACPI_OBJECT_COMMON_HEADER
- ACPI_COMMON_BUFFER_INFO
- UINT8 *Pointer; /* Buffer in AML stream or allocated buffer */
- ACPI_NAMESPACE_NODE *Node; /* Link back to parent node */
- UINT8 *AmlStart;
+ ACPI_COMMON_BUFFER_INFO (UINT8) /* Buffer in AML stream or allocated buffer */
UINT32 AmlLength;
+ UINT8 *AmlStart;
+ ACPI_NAMESPACE_NODE *Node; /* Link back to parent node */
} ACPI_OBJECT_BUFFER;
@@ -237,12 +229,11 @@ typedef struct acpi_object_buffer
typedef struct acpi_object_package
{
ACPI_OBJECT_COMMON_HEADER
-
- UINT32 Count; /* # of elements in package */
- UINT32 AmlLength;
- UINT8 *AmlStart;
ACPI_NAMESPACE_NODE *Node; /* Link back to parent node */
union acpi_operand_object **Elements; /* Array of pointers to AcpiObjects */
+ UINT8 *AmlStart;
+ UINT32 AmlLength;
+ UINT32 Count; /* # of elements in package */
} ACPI_OBJECT_PACKAGE;
@@ -256,40 +247,19 @@ typedef struct acpi_object_package
typedef struct acpi_object_event
{
ACPI_OBJECT_COMMON_HEADER
- void *Semaphore;
+ ACPI_SEMAPHORE OsSemaphore; /* Actual OS synchronization object */
} ACPI_OBJECT_EVENT;
-#define ACPI_INFINITE_CONCURRENCY 0xFF
-
-typedef
-ACPI_STATUS (*ACPI_INTERNAL_METHOD) (
- struct acpi_walk_state *WalkState);
-
-typedef struct acpi_object_method
-{
- ACPI_OBJECT_COMMON_HEADER
- UINT8 MethodFlags;
- UINT8 ParamCount;
- UINT32 AmlLength;
- void *Semaphore;
- UINT8 *AmlStart;
- ACPI_INTERNAL_METHOD Implementation;
- UINT8 Concurrency;
- UINT8 ThreadCount;
- ACPI_OWNER_ID OwnerId;
-
-} ACPI_OBJECT_METHOD;
-
-
typedef struct acpi_object_mutex
{
ACPI_OBJECT_COMMON_HEADER
UINT8 SyncLevel; /* 0-15, specified in Mutex() call */
UINT16 AcquisitionDepth; /* Allow multiple Acquires, same thread */
+ ACPI_MUTEX OsMutex; /* Actual OS synchronization object */
+ ACPI_THREAD_ID ThreadId; /* Current owner of the mutex */
struct acpi_thread_state *OwnerThread; /* Current owner of the mutex */
- void *Semaphore; /* Actual OS synchronization object */
union acpi_operand_object *Prev; /* Link for list of acquired mutexes */
union acpi_operand_object *Next; /* Link for list of acquired mutexes */
ACPI_NAMESPACE_NODE *Node; /* Containing namespace node */
@@ -301,23 +271,47 @@ typedef struct acpi_object_mutex
typedef struct acpi_object_region
{
ACPI_OBJECT_COMMON_HEADER
-
UINT8 SpaceId;
- union acpi_operand_object *Handler; /* Handler for region access */
ACPI_NAMESPACE_NODE *Node; /* Containing namespace node */
+ union acpi_operand_object *Handler; /* Handler for region access */
union acpi_operand_object *Next;
- UINT32 Length;
ACPI_PHYSICAL_ADDRESS Address;
+ UINT32 Length;
} ACPI_OBJECT_REGION;
+typedef struct acpi_object_method
+{
+ ACPI_OBJECT_COMMON_HEADER
+ UINT8 MethodFlags;
+ UINT8 ParamCount;
+ UINT8 SyncLevel;
+ union acpi_operand_object *Mutex;
+ UINT8 *AmlStart;
+ ACPI_INTERNAL_METHOD Implementation;
+ UINT32 AmlLength;
+ UINT8 ThreadCount;
+ ACPI_OWNER_ID OwnerId;
+
+} ACPI_OBJECT_METHOD;
+
+
/******************************************************************************
*
* Objects that can be notified. All share a common NotifyInfo area.
*
*****************************************************************************/
+/*
+ * Common fields for objects that support ASL notifications
+ */
+#define ACPI_COMMON_NOTIFY_INFO \
+ union acpi_operand_object *SystemNotify; /* Handler for system notifies */\
+ union acpi_operand_object *DeviceNotify; /* Handler for driver notifies */\
+ union acpi_operand_object *Handler; /* Handler for Address space */
+
+
typedef struct acpi_object_notify_common /* COMMON NOTIFY for POWER, PROCESSOR, DEVICE, and THERMAL */
{
ACPI_OBJECT_COMMON_HEADER
@@ -348,9 +342,12 @@ typedef struct acpi_object_power_resource
typedef struct acpi_object_processor
{
ACPI_OBJECT_COMMON_HEADER
+
+ /* The next two fields take advantage of the 3-byte space before NOTIFY_INFO */
+
+ UINT8 ProcId;
+ UINT8 Length;
ACPI_COMMON_NOTIFY_INFO
- UINT32 ProcId;
- UINT32 Length;
ACPI_IO_ADDRESS Address;
} ACPI_OBJECT_PROCESSOR;
@@ -370,12 +367,29 @@ typedef struct acpi_object_thermal_zone
*
*****************************************************************************/
+/*
+ * 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 \
+ UINT8 FieldFlags; /* Access, update, and lock bits */\
+ UINT8 Attribute; /* From AccessAs keyword */\
+ UINT8 AccessByteWidth; /* Read/Write size in bytes */\
+ ACPI_NAMESPACE_NODE *Node; /* Link back to parent node */\
+ UINT32 BitLength; /* Length of field in bits */\
+ UINT32 BaseByteOffset; /* Byte offset within containing object */\
+ UINT32 Value; /* Value to store into the Bank or Index register */\
+ UINT8 StartFieldBitOffset;/* Bit offset within first field datum (0-63) */\
+ UINT8 AccessBitWidth; /* Read/Write size in bits (8-64) */
+
+
typedef struct acpi_object_field_common /* COMMON FIELD (for BUFFER, REGION, BANK, and INDEX fields) */
{
ACPI_OBJECT_COMMON_HEADER
ACPI_COMMON_FIELD_INFO
- union acpi_operand_object *RegionObj; /* Containing Operation Region object */
- /* (REGION/BANK fields only) */
+ union acpi_operand_object *RegionObj; /* Parent Operation Region object (REGION/BANK fields only) */
+
} ACPI_OBJECT_FIELD_COMMON;
@@ -440,16 +454,11 @@ typedef struct acpi_object_notify_handler
} ACPI_OBJECT_NOTIFY_HANDLER;
-/* Flags for address handler */
-
-#define ACPI_ADDR_HANDLER_DEFAULT_INSTALLED 0x1
-
-
typedef struct acpi_object_addr_handler
{
ACPI_OBJECT_COMMON_HEADER
UINT8 SpaceId;
- UINT16 Hflags;
+ UINT8 HandlerFlags;
ACPI_ADR_SPACE_HANDLER Handler;
ACPI_NAMESPACE_NODE *Node; /* Parent device */
void *Context;
@@ -459,6 +468,10 @@ typedef struct acpi_object_addr_handler
} ACPI_OBJECT_ADDR_HANDLER;
+/* Flags for address handler (HandlerFlags) */
+
+#define ACPI_ADDR_HANDLER_DEFAULT_INSTALLED 0x01
+
/******************************************************************************
*
@@ -475,10 +488,10 @@ typedef struct acpi_object_reference
ACPI_OBJECT_COMMON_HEADER
UINT8 TargetType; /* Used for IndexOp */
UINT16 Opcode;
- UINT32 Offset; /* Used for ArgOp, LocalOp, and IndexOp */
void *Object; /* NameOp=>HANDLE to obj, IndexOp=>ACPI_OPERAND_OBJECT */
ACPI_NAMESPACE_NODE *Node;
union acpi_operand_object **Where;
+ UINT32 Offset; /* Used for ArgOp, LocalOp, and IndexOp */
} ACPI_OBJECT_REFERENCE;
@@ -493,12 +506,10 @@ typedef struct acpi_object_reference
typedef struct acpi_object_extra
{
ACPI_OBJECT_COMMON_HEADER
- UINT8 ByteFill1;
- UINT16 WordFill1;
- UINT32 AmlLength;
- UINT8 *AmlStart;
ACPI_NAMESPACE_NODE *Method_REG; /* _REG method for this region (if any) */
void *RegionContext; /* Region-specific data */
+ UINT8 *AmlStart;
+ UINT32 AmlLength;
} ACPI_OBJECT_EXTRA;
@@ -532,31 +543,31 @@ typedef struct acpi_object_cache_list
typedef union acpi_operand_object
{
- ACPI_OBJECT_COMMON Common;
- ACPI_OBJECT_INTEGER Integer;
- ACPI_OBJECT_STRING String;
- ACPI_OBJECT_BUFFER Buffer;
- ACPI_OBJECT_PACKAGE Package;
- ACPI_OBJECT_EVENT Event;
- ACPI_OBJECT_METHOD Method;
- ACPI_OBJECT_MUTEX Mutex;
- ACPI_OBJECT_REGION Region;
- ACPI_OBJECT_NOTIFY_COMMON CommonNotify;
- ACPI_OBJECT_DEVICE Device;
- ACPI_OBJECT_POWER_RESOURCE PowerResource;
- ACPI_OBJECT_PROCESSOR Processor;
- ACPI_OBJECT_THERMAL_ZONE ThermalZone;
- ACPI_OBJECT_FIELD_COMMON CommonField;
- ACPI_OBJECT_REGION_FIELD Field;
- ACPI_OBJECT_BUFFER_FIELD BufferField;
- ACPI_OBJECT_BANK_FIELD BankField;
- ACPI_OBJECT_INDEX_FIELD IndexField;
- ACPI_OBJECT_NOTIFY_HANDLER Notify;
- ACPI_OBJECT_ADDR_HANDLER AddressSpace;
- ACPI_OBJECT_REFERENCE Reference;
- ACPI_OBJECT_EXTRA Extra;
- ACPI_OBJECT_DATA Data;
- ACPI_OBJECT_CACHE_LIST Cache;
+ ACPI_OBJECT_COMMON Common;
+ ACPI_OBJECT_INTEGER Integer;
+ ACPI_OBJECT_STRING String;
+ ACPI_OBJECT_BUFFER Buffer;
+ ACPI_OBJECT_PACKAGE Package;
+ ACPI_OBJECT_EVENT Event;
+ ACPI_OBJECT_METHOD Method;
+ ACPI_OBJECT_MUTEX Mutex;
+ ACPI_OBJECT_REGION Region;
+ ACPI_OBJECT_NOTIFY_COMMON CommonNotify;
+ ACPI_OBJECT_DEVICE Device;
+ ACPI_OBJECT_POWER_RESOURCE PowerResource;
+ ACPI_OBJECT_PROCESSOR Processor;
+ ACPI_OBJECT_THERMAL_ZONE ThermalZone;
+ ACPI_OBJECT_FIELD_COMMON CommonField;
+ ACPI_OBJECT_REGION_FIELD Field;
+ ACPI_OBJECT_BUFFER_FIELD BufferField;
+ ACPI_OBJECT_BANK_FIELD BankField;
+ ACPI_OBJECT_INDEX_FIELD IndexField;
+ ACPI_OBJECT_NOTIFY_HANDLER Notify;
+ ACPI_OBJECT_ADDR_HANDLER AddressSpace;
+ ACPI_OBJECT_REFERENCE Reference;
+ ACPI_OBJECT_EXTRA Extra;
+ ACPI_OBJECT_DATA Data;
+ ACPI_OBJECT_CACHE_LIST Cache;
} ACPI_OPERAND_OBJECT;
@@ -587,14 +598,22 @@ typedef union acpi_operand_object
#define ACPI_DESC_TYPE_MAX 0x0F
+typedef struct acpi_common_descriptor
+{
+ void *CommonPointer;
+ UINT8 DescriptorType; /* To differentiate various internal objs */
+
+} ACPI_COMMON_DESCRIPTOR;
+
typedef union acpi_descriptor
{
- UINT8 DescriptorId; /* To differentiate various internal objs */\
+ ACPI_COMMON_DESCRIPTOR Common;
ACPI_OPERAND_OBJECT Object;
ACPI_NAMESPACE_NODE Node;
ACPI_PARSE_OBJECT Op;
} ACPI_DESCRIPTOR;
+#pragma pack()
#endif /* _ACOBJECT_H */
OpenPOWER on IntegriCloud