0001
0002
0003
0004
0005
0006
0007
0008
0009
0010 #ifndef _ACOBJECT_H
0011 #define _ACOBJECT_H
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024 #if ACPI_MACHINE_WIDTH == 64
0025 #pragma pack(8)
0026 #else
0027 #pragma pack(4)
0028 #endif
0029
0030
0031
0032
0033
0034
0035
0036
0037
0038
0039
0040
0041
0042
0043
0044
0045
0046 #define ACPI_OBJECT_COMMON_HEADER \
0047 union acpi_operand_object *next_object; \
0048 u8 descriptor_type; \
0049 u8 type; \
0050 u16 reference_count; \
0051 u8 flags;
0052
0053
0054
0055
0056
0057
0058
0059 #define AOPOBJ_AML_CONSTANT 0x01
0060 #define AOPOBJ_STATIC_POINTER 0x02
0061 #define AOPOBJ_DATA_VALID 0x04
0062 #define AOPOBJ_OBJECT_INITIALIZED 0x08
0063 #define AOPOBJ_REG_CONNECTED 0x10
0064 #define AOPOBJ_SETUP_COMPLETE 0x20
0065 #define AOPOBJ_INVALID 0x40
0066
0067
0068
0069
0070
0071
0072
0073 struct acpi_object_common {
0074 ACPI_OBJECT_COMMON_HEADER};
0075
0076 struct acpi_object_integer {
0077 ACPI_OBJECT_COMMON_HEADER u8 fill[3];
0078 u64 value;
0079 };
0080
0081
0082
0083
0084
0085
0086
0087 #define ACPI_COMMON_BUFFER_INFO(_type) \
0088 _type *pointer; \
0089 u32 length;
0090
0091
0092
0093 struct acpi_object_string {
0094 ACPI_OBJECT_COMMON_HEADER ACPI_COMMON_BUFFER_INFO(char)
0095 };
0096
0097 struct acpi_object_buffer {
0098 ACPI_OBJECT_COMMON_HEADER ACPI_COMMON_BUFFER_INFO(u8)
0099 u32 aml_length;
0100 u8 *aml_start;
0101 struct acpi_namespace_node *node;
0102 };
0103
0104 struct acpi_object_package {
0105 ACPI_OBJECT_COMMON_HEADER struct acpi_namespace_node *node;
0106 union acpi_operand_object **elements;
0107 u8 *aml_start;
0108 u32 aml_length;
0109 u32 count;
0110 };
0111
0112
0113
0114
0115
0116
0117
0118 struct acpi_object_event {
0119 ACPI_OBJECT_COMMON_HEADER acpi_semaphore os_semaphore;
0120 };
0121
0122 struct acpi_object_mutex {
0123 ACPI_OBJECT_COMMON_HEADER u8 sync_level;
0124 u16 acquisition_depth;
0125 acpi_mutex os_mutex;
0126 acpi_thread_id thread_id;
0127 struct acpi_thread_state *owner_thread;
0128 union acpi_operand_object *prev;
0129 union acpi_operand_object *next;
0130 struct acpi_namespace_node *node;
0131 u8 original_sync_level;
0132 };
0133
0134 struct acpi_object_region {
0135 ACPI_OBJECT_COMMON_HEADER u8 space_id;
0136 struct acpi_namespace_node *node;
0137 union acpi_operand_object *handler;
0138 union acpi_operand_object *next;
0139 acpi_physical_address address;
0140 u32 length;
0141 void *pointer;
0142 };
0143
0144 struct acpi_object_method {
0145 ACPI_OBJECT_COMMON_HEADER u8 info_flags;
0146 u8 param_count;
0147 u8 sync_level;
0148 union acpi_operand_object *mutex;
0149 union acpi_operand_object *node;
0150 u8 *aml_start;
0151 union {
0152 acpi_internal_method implementation;
0153 union acpi_operand_object *handler;
0154 } dispatch;
0155
0156 u32 aml_length;
0157 acpi_owner_id owner_id;
0158 u8 thread_count;
0159 };
0160
0161
0162
0163 #define ACPI_METHOD_MODULE_LEVEL 0x01
0164 #define ACPI_METHOD_INTERNAL_ONLY 0x02
0165 #define ACPI_METHOD_SERIALIZED 0x04
0166 #define ACPI_METHOD_SERIALIZED_PENDING 0x08
0167 #define ACPI_METHOD_IGNORE_SYNC_LEVEL 0x10
0168 #define ACPI_METHOD_MODIFIED_NAMESPACE 0x20
0169
0170
0171
0172
0173
0174
0175
0176
0177
0178
0179 #define ACPI_COMMON_NOTIFY_INFO \
0180 union acpi_operand_object *notify_list[2]; \
0181 union acpi_operand_object *handler;
0182
0183
0184
0185 struct acpi_object_notify_common {
0186 ACPI_OBJECT_COMMON_HEADER ACPI_COMMON_NOTIFY_INFO};
0187
0188 struct acpi_object_device {
0189 ACPI_OBJECT_COMMON_HEADER
0190 ACPI_COMMON_NOTIFY_INFO struct acpi_gpe_block_info *gpe_block;
0191 };
0192
0193 struct acpi_object_power_resource {
0194 ACPI_OBJECT_COMMON_HEADER ACPI_COMMON_NOTIFY_INFO u32 system_level;
0195 u32 resource_order;
0196 };
0197
0198 struct acpi_object_processor {
0199 ACPI_OBJECT_COMMON_HEADER
0200
0201 u8 proc_id;
0202 u8 length;
0203 ACPI_COMMON_NOTIFY_INFO acpi_io_address address;
0204 };
0205
0206 struct acpi_object_thermal_zone {
0207 ACPI_OBJECT_COMMON_HEADER ACPI_COMMON_NOTIFY_INFO};
0208
0209
0210
0211
0212
0213
0214
0215
0216
0217
0218
0219
0220 #define ACPI_COMMON_FIELD_INFO \
0221 u8 field_flags; \
0222 u8 attribute; \
0223 u8 access_byte_width; \
0224 struct acpi_namespace_node *node; \
0225 u32 bit_length; \
0226 u32 base_byte_offset; \
0227 u32 value; \
0228 u8 start_field_bit_offset;\
0229 u8 access_length;
0230
0231
0232
0233
0234 struct acpi_object_field_common {
0235 ACPI_OBJECT_COMMON_HEADER ACPI_COMMON_FIELD_INFO union acpi_operand_object *region_obj;
0236 };
0237
0238 struct acpi_object_region_field {
0239 ACPI_OBJECT_COMMON_HEADER ACPI_COMMON_FIELD_INFO u16 resource_length;
0240 union acpi_operand_object *region_obj;
0241 u8 *resource_buffer;
0242 u16 pin_number_index;
0243 u8 *internal_pcc_buffer;
0244 };
0245
0246 struct acpi_object_bank_field {
0247 ACPI_OBJECT_COMMON_HEADER ACPI_COMMON_FIELD_INFO union acpi_operand_object *region_obj;
0248 union acpi_operand_object *bank_obj;
0249 };
0250
0251 struct acpi_object_index_field {
0252 ACPI_OBJECT_COMMON_HEADER ACPI_COMMON_FIELD_INFO
0253
0254
0255
0256
0257 union acpi_operand_object *index_obj;
0258 union acpi_operand_object *data_obj;
0259 };
0260
0261
0262
0263 struct acpi_object_buffer_field {
0264 ACPI_OBJECT_COMMON_HEADER ACPI_COMMON_FIELD_INFO u8 is_create_field;
0265 union acpi_operand_object *buffer_obj;
0266 };
0267
0268
0269
0270
0271
0272
0273
0274 struct acpi_object_notify_handler {
0275 ACPI_OBJECT_COMMON_HEADER struct acpi_namespace_node *node;
0276 u32 handler_type;
0277 acpi_notify_handler handler;
0278 void *context;
0279 union acpi_operand_object *next[2];
0280 };
0281
0282 struct acpi_object_addr_handler {
0283 ACPI_OBJECT_COMMON_HEADER u8 space_id;
0284 u8 handler_flags;
0285 acpi_adr_space_handler handler;
0286 struct acpi_namespace_node *node;
0287 void *context;
0288 acpi_mutex context_mutex;
0289 acpi_adr_space_setup setup;
0290 union acpi_operand_object *region_list;
0291 union acpi_operand_object *next;
0292 };
0293
0294
0295
0296 #define ACPI_ADDR_HANDLER_DEFAULT_INSTALLED 0x01
0297
0298
0299
0300
0301
0302
0303
0304
0305
0306
0307
0308
0309 struct acpi_object_reference {
0310 ACPI_OBJECT_COMMON_HEADER u8 class;
0311 u8 target_type;
0312 u8 resolved;
0313 void *object;
0314 struct acpi_namespace_node *node;
0315 union acpi_operand_object **where;
0316 u8 *index_pointer;
0317 u8 *aml;
0318 u32 value;
0319 };
0320
0321
0322
0323 typedef enum {
0324 ACPI_REFCLASS_LOCAL = 0,
0325 ACPI_REFCLASS_ARG = 1,
0326 ACPI_REFCLASS_REFOF = 2,
0327 ACPI_REFCLASS_INDEX = 3,
0328 ACPI_REFCLASS_TABLE = 4,
0329 ACPI_REFCLASS_NAME = 5,
0330 ACPI_REFCLASS_DEBUG = 6,
0331
0332 ACPI_REFCLASS_MAX = 6
0333 } ACPI_REFERENCE_CLASSES;
0334
0335
0336
0337
0338
0339
0340
0341
0342 struct acpi_object_extra {
0343 ACPI_OBJECT_COMMON_HEADER struct acpi_namespace_node *method_REG;
0344 struct acpi_namespace_node *scope_node;
0345 void *region_context;
0346 u8 *aml_start;
0347 u32 aml_length;
0348 };
0349
0350
0351
0352 struct acpi_object_data {
0353 ACPI_OBJECT_COMMON_HEADER acpi_object_handler handler;
0354 void *pointer;
0355 };
0356
0357
0358
0359 struct acpi_object_cache_list {
0360 ACPI_OBJECT_COMMON_HEADER union acpi_operand_object *next;
0361 };
0362
0363
0364
0365
0366
0367
0368
0369 union acpi_operand_object {
0370 struct acpi_object_common common;
0371 struct acpi_object_integer integer;
0372 struct acpi_object_string string;
0373 struct acpi_object_buffer buffer;
0374 struct acpi_object_package package;
0375 struct acpi_object_event event;
0376 struct acpi_object_method method;
0377 struct acpi_object_mutex mutex;
0378 struct acpi_object_region region;
0379 struct acpi_object_notify_common common_notify;
0380 struct acpi_object_device device;
0381 struct acpi_object_power_resource power_resource;
0382 struct acpi_object_processor processor;
0383 struct acpi_object_thermal_zone thermal_zone;
0384 struct acpi_object_field_common common_field;
0385 struct acpi_object_region_field field;
0386 struct acpi_object_buffer_field buffer_field;
0387 struct acpi_object_bank_field bank_field;
0388 struct acpi_object_index_field index_field;
0389 struct acpi_object_notify_handler notify;
0390 struct acpi_object_addr_handler address_space;
0391 struct acpi_object_reference reference;
0392 struct acpi_object_extra extra;
0393 struct acpi_object_data data;
0394 struct acpi_object_cache_list cache;
0395
0396
0397
0398
0399
0400
0401 struct acpi_namespace_node node;
0402 };
0403
0404
0405
0406
0407
0408
0409
0410
0411
0412 #define ACPI_DESC_TYPE_CACHED 0x01
0413 #define ACPI_DESC_TYPE_STATE 0x02
0414 #define ACPI_DESC_TYPE_STATE_UPDATE 0x03
0415 #define ACPI_DESC_TYPE_STATE_PACKAGE 0x04
0416 #define ACPI_DESC_TYPE_STATE_CONTROL 0x05
0417 #define ACPI_DESC_TYPE_STATE_RPSCOPE 0x06
0418 #define ACPI_DESC_TYPE_STATE_PSCOPE 0x07
0419 #define ACPI_DESC_TYPE_STATE_WSCOPE 0x08
0420 #define ACPI_DESC_TYPE_STATE_RESULT 0x09
0421 #define ACPI_DESC_TYPE_STATE_NOTIFY 0x0A
0422 #define ACPI_DESC_TYPE_STATE_THREAD 0x0B
0423 #define ACPI_DESC_TYPE_WALK 0x0C
0424 #define ACPI_DESC_TYPE_PARSER 0x0D
0425 #define ACPI_DESC_TYPE_OPERAND 0x0E
0426 #define ACPI_DESC_TYPE_NAMED 0x0F
0427 #define ACPI_DESC_TYPE_MAX 0x0F
0428
0429 struct acpi_common_descriptor {
0430 void *common_pointer;
0431 u8 descriptor_type;
0432 };
0433
0434 union acpi_descriptor {
0435 struct acpi_common_descriptor common;
0436 union acpi_operand_object object;
0437 struct acpi_namespace_node node;
0438 union acpi_parse_object op;
0439 };
0440
0441 #pragma pack()
0442
0443 #endif