mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-10-05 08:26:59 +00:00
Merge branch 'acpica'
* acpica: (53 commits) ACPICA: Use designated initializers ACPICA: Update version to 20170531 ACPICA: Update a couple of debug output messages ACPICA: acpiexec: enhance local signal handler ACPICA: Simplify output for the ACPI Debug Object ACPICA: Unix application OSL: Correctly handle control-c (EINTR) ACPICA: Improvements for debug output only ACPICA: Disassembler: allow conflicting external declarations to be emitted. ACPICA: Disassembler: add external op to namespace on first pass ACPICA: Disassembler: prevent external op's from opening a new scope ACPICA: Changed Gbl_disasm_flag to acpi_gbl_disasm_flag ACPICA: Changing External to a named object ACPICA: Update two error messages to emit control method name ACPICA: Fix for Device/Thermal objects with ObjectType and DerefOf ACPICA: Comment update: spelling/format. No functional change ACPICA: Update comments, no functional change ACPICA: Split resource descriptor decode strings to a new file ACPICA: Remove extraneous status check ACPICA: Export the public mutex interfaces ACPICA: Disassembler: Abort on an invalid/unknown AML opcode ...
This commit is contained in:
commit
80abc82e6c
61 changed files with 2032 additions and 435 deletions
|
@ -172,6 +172,7 @@ acpi-y += \
|
||||||
utosi.o \
|
utosi.o \
|
||||||
utownerid.o \
|
utownerid.o \
|
||||||
utpredef.o \
|
utpredef.o \
|
||||||
|
utresdecode.o \
|
||||||
utresrc.o \
|
utresrc.o \
|
||||||
utstate.o \
|
utstate.o \
|
||||||
utstring.o \
|
utstring.o \
|
||||||
|
|
|
@ -158,7 +158,7 @@ acpi_dm_finish_namespace_load(union acpi_parse_object *parse_tree_root,
|
||||||
acpi_owner_id owner_id);
|
acpi_owner_id owner_id);
|
||||||
|
|
||||||
void
|
void
|
||||||
acpi_dm_convert_resource_indexes(union acpi_parse_object *parse_tree_root,
|
acpi_dm_convert_parse_objects(union acpi_parse_object *parse_tree_root,
|
||||||
struct acpi_namespace_node *namespace_root);
|
struct acpi_namespace_node *namespace_root);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -315,6 +315,7 @@ ACPI_INIT_GLOBAL(u8, acpi_gbl_force_aml_disassembly, FALSE);
|
||||||
ACPI_INIT_GLOBAL(u8, acpi_gbl_dm_opt_verbose, TRUE);
|
ACPI_INIT_GLOBAL(u8, acpi_gbl_dm_opt_verbose, TRUE);
|
||||||
ACPI_INIT_GLOBAL(u8, acpi_gbl_dm_emit_external_opcodes, FALSE);
|
ACPI_INIT_GLOBAL(u8, acpi_gbl_dm_emit_external_opcodes, FALSE);
|
||||||
ACPI_INIT_GLOBAL(u8, acpi_gbl_do_disassembler_optimizations, TRUE);
|
ACPI_INIT_GLOBAL(u8, acpi_gbl_do_disassembler_optimizations, TRUE);
|
||||||
|
ACPI_INIT_GLOBAL(ACPI_PARSE_OBJECT_LIST, *acpi_gbl_temp_list_head, NULL);
|
||||||
|
|
||||||
ACPI_GLOBAL(u8, acpi_gbl_dm_opt_disasm);
|
ACPI_GLOBAL(u8, acpi_gbl_dm_opt_disasm);
|
||||||
ACPI_GLOBAL(u8, acpi_gbl_dm_opt_listing);
|
ACPI_GLOBAL(u8, acpi_gbl_dm_opt_listing);
|
||||||
|
@ -368,6 +369,8 @@ ACPI_GLOBAL(const char, *acpi_gbl_pld_vertical_position_list[]);
|
||||||
ACPI_GLOBAL(const char, *acpi_gbl_pld_horizontal_position_list[]);
|
ACPI_GLOBAL(const char, *acpi_gbl_pld_horizontal_position_list[]);
|
||||||
ACPI_GLOBAL(const char, *acpi_gbl_pld_shape_list[]);
|
ACPI_GLOBAL(const char, *acpi_gbl_pld_shape_list[]);
|
||||||
|
|
||||||
|
ACPI_INIT_GLOBAL(u8, acpi_gbl_disasm_flag, FALSE);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -859,7 +859,7 @@ ACPI_PARSE_COMMON};
|
||||||
* and bytelists.
|
* and bytelists.
|
||||||
*/
|
*/
|
||||||
struct acpi_parse_obj_named {
|
struct acpi_parse_obj_named {
|
||||||
ACPI_PARSE_COMMON u8 *path;
|
ACPI_PARSE_COMMON char *path;
|
||||||
u8 *data; /* AML body or bytelist data */
|
u8 *data; /* AML body or bytelist data */
|
||||||
u32 length; /* AML length */
|
u32 length; /* AML length */
|
||||||
u32 name; /* 4-byte name or zero if no name */
|
u32 name; /* 4-byte name or zero if no name */
|
||||||
|
@ -1142,8 +1142,13 @@ struct acpi_port_info {
|
||||||
#define ACPI_RESOURCE_NAME_ADDRESS64 0x8A
|
#define ACPI_RESOURCE_NAME_ADDRESS64 0x8A
|
||||||
#define ACPI_RESOURCE_NAME_EXTENDED_ADDRESS64 0x8B
|
#define ACPI_RESOURCE_NAME_EXTENDED_ADDRESS64 0x8B
|
||||||
#define ACPI_RESOURCE_NAME_GPIO 0x8C
|
#define ACPI_RESOURCE_NAME_GPIO 0x8C
|
||||||
|
#define ACPI_RESOURCE_NAME_PIN_FUNCTION 0x8D
|
||||||
#define ACPI_RESOURCE_NAME_SERIAL_BUS 0x8E
|
#define ACPI_RESOURCE_NAME_SERIAL_BUS 0x8E
|
||||||
#define ACPI_RESOURCE_NAME_LARGE_MAX 0x8E
|
#define ACPI_RESOURCE_NAME_PIN_CONFIG 0x8F
|
||||||
|
#define ACPI_RESOURCE_NAME_PIN_GROUP 0x90
|
||||||
|
#define ACPI_RESOURCE_NAME_PIN_GROUP_FUNCTION 0x91
|
||||||
|
#define ACPI_RESOURCE_NAME_PIN_GROUP_CONFIG 0x92
|
||||||
|
#define ACPI_RESOURCE_NAME_LARGE_MAX 0x92
|
||||||
|
|
||||||
/*****************************************************************************
|
/*****************************************************************************
|
||||||
*
|
*
|
||||||
|
@ -1176,12 +1181,18 @@ struct acpi_external_list {
|
||||||
#define ACPI_EXT_INTERNAL_PATH_ALLOCATED 0x04 /* Deallocate internal path on completion */
|
#define ACPI_EXT_INTERNAL_PATH_ALLOCATED 0x04 /* Deallocate internal path on completion */
|
||||||
#define ACPI_EXT_EXTERNAL_EMITTED 0x08 /* External() statement has been emitted */
|
#define ACPI_EXT_EXTERNAL_EMITTED 0x08 /* External() statement has been emitted */
|
||||||
#define ACPI_EXT_ORIGIN_FROM_OPCODE 0x10 /* External came from a External() opcode */
|
#define ACPI_EXT_ORIGIN_FROM_OPCODE 0x10 /* External came from a External() opcode */
|
||||||
|
#define ACPI_EXT_CONFLICTING_DECLARATION 0x20 /* External has a conflicting declaration within AML */
|
||||||
|
|
||||||
struct acpi_external_file {
|
struct acpi_external_file {
|
||||||
char *path;
|
char *path;
|
||||||
struct acpi_external_file *next;
|
struct acpi_external_file *next;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct acpi_parse_object_list {
|
||||||
|
union acpi_parse_object *op;
|
||||||
|
struct acpi_parse_object_list *next;
|
||||||
|
};
|
||||||
|
|
||||||
/*****************************************************************************
|
/*****************************************************************************
|
||||||
*
|
*
|
||||||
* Debugger
|
* Debugger
|
||||||
|
|
|
@ -112,7 +112,7 @@
|
||||||
#define ARGP_DWORD_OP ARGP_LIST1 (ARGP_DWORDDATA)
|
#define ARGP_DWORD_OP ARGP_LIST1 (ARGP_DWORDDATA)
|
||||||
#define ARGP_ELSE_OP ARGP_LIST2 (ARGP_PKGLENGTH, ARGP_TERMLIST)
|
#define ARGP_ELSE_OP ARGP_LIST2 (ARGP_PKGLENGTH, ARGP_TERMLIST)
|
||||||
#define ARGP_EVENT_OP ARGP_LIST1 (ARGP_NAME)
|
#define ARGP_EVENT_OP ARGP_LIST1 (ARGP_NAME)
|
||||||
#define ARGP_EXTERNAL_OP ARGP_LIST3 (ARGP_NAMESTRING, ARGP_BYTEDATA, ARGP_BYTEDATA)
|
#define ARGP_EXTERNAL_OP ARGP_LIST3 (ARGP_NAME, ARGP_BYTEDATA, ARGP_BYTEDATA)
|
||||||
#define ARGP_FATAL_OP ARGP_LIST3 (ARGP_BYTEDATA, ARGP_DWORDDATA, ARGP_TERMARG)
|
#define ARGP_FATAL_OP ARGP_LIST3 (ARGP_BYTEDATA, ARGP_DWORDDATA, ARGP_TERMARG)
|
||||||
#define ARGP_FIELD_OP ARGP_LIST4 (ARGP_PKGLENGTH, ARGP_NAMESTRING, ARGP_BYTEDATA, ARGP_FIELDLIST)
|
#define ARGP_FIELD_OP ARGP_LIST4 (ARGP_PKGLENGTH, ARGP_NAMESTRING, ARGP_BYTEDATA, ARGP_FIELDLIST)
|
||||||
#define ARGP_FIND_SET_LEFT_BIT_OP ARGP_LIST2 (ARGP_TERMARG, ARGP_TARGET)
|
#define ARGP_FIND_SET_LEFT_BIT_OP ARGP_LIST2 (ARGP_TERMARG, ARGP_TARGET)
|
||||||
|
|
|
@ -581,6 +581,9 @@ const union acpi_predefined_info acpi_gbl_predefined_methods[] = {
|
||||||
{{"_HID", METHOD_0ARGS,
|
{{"_HID", METHOD_0ARGS,
|
||||||
METHOD_RETURNS(ACPI_RTYPE_INTEGER | ACPI_RTYPE_STRING)}},
|
METHOD_RETURNS(ACPI_RTYPE_INTEGER | ACPI_RTYPE_STRING)}},
|
||||||
|
|
||||||
|
{{"_HMA", METHOD_0ARGS,
|
||||||
|
METHOD_RETURNS(ACPI_RTYPE_BUFFER)}},
|
||||||
|
|
||||||
{{"_HOT", METHOD_0ARGS,
|
{{"_HOT", METHOD_0ARGS,
|
||||||
METHOD_RETURNS(ACPI_RTYPE_INTEGER)}},
|
METHOD_RETURNS(ACPI_RTYPE_INTEGER)}},
|
||||||
|
|
||||||
|
@ -626,6 +629,19 @@ const union acpi_predefined_info acpi_gbl_predefined_methods[] = {
|
||||||
ACPI_RTYPE_INTEGER | ACPI_RTYPE_BUFFER | ACPI_RTYPE_STRING,
|
ACPI_RTYPE_INTEGER | ACPI_RTYPE_BUFFER | ACPI_RTYPE_STRING,
|
||||||
10, 0),
|
10, 0),
|
||||||
|
|
||||||
|
{{"_LSI", METHOD_0ARGS,
|
||||||
|
METHOD_RETURNS(ACPI_RTYPE_PACKAGE)}},
|
||||||
|
PACKAGE_INFO(ACPI_PTYPE1_FIXED, ACPI_RTYPE_INTEGER, 3, 0, 0, 0),
|
||||||
|
|
||||||
|
{{"_LSR", METHOD_2ARGS(ACPI_TYPE_INTEGER, ACPI_TYPE_INTEGER),
|
||||||
|
METHOD_RETURNS(ACPI_RTYPE_PACKAGE)}},
|
||||||
|
PACKAGE_INFO(ACPI_PTYPE1_FIXED, ACPI_RTYPE_INTEGER, 1,
|
||||||
|
ACPI_RTYPE_BUFFER, 1, 0),
|
||||||
|
|
||||||
|
{{"_LSW",
|
||||||
|
METHOD_3ARGS(ACPI_TYPE_INTEGER, ACPI_TYPE_INTEGER, ACPI_TYPE_BUFFER),
|
||||||
|
METHOD_RETURNS(ACPI_RTYPE_INTEGER)}},
|
||||||
|
|
||||||
{{"_MAT", METHOD_0ARGS,
|
{{"_MAT", METHOD_0ARGS,
|
||||||
METHOD_RETURNS(ACPI_RTYPE_BUFFER)}},
|
METHOD_RETURNS(ACPI_RTYPE_BUFFER)}},
|
||||||
|
|
||||||
|
|
|
@ -148,7 +148,10 @@ typedef enum {
|
||||||
ACPI_RSD_UINT16,
|
ACPI_RSD_UINT16,
|
||||||
ACPI_RSD_UINT32,
|
ACPI_RSD_UINT32,
|
||||||
ACPI_RSD_UINT64,
|
ACPI_RSD_UINT64,
|
||||||
ACPI_RSD_WORDLIST
|
ACPI_RSD_WORDLIST,
|
||||||
|
ACPI_RSD_LABEL,
|
||||||
|
ACPI_RSD_SOURCE_LABEL,
|
||||||
|
|
||||||
} ACPI_RSDUMP_OPCODES;
|
} ACPI_RSDUMP_OPCODES;
|
||||||
|
|
||||||
/* restore default alignment */
|
/* restore default alignment */
|
||||||
|
@ -329,6 +332,11 @@ extern struct acpi_rsconvert_info acpi_rs_convert_fixed_dma[];
|
||||||
extern struct acpi_rsconvert_info acpi_rs_convert_i2c_serial_bus[];
|
extern struct acpi_rsconvert_info acpi_rs_convert_i2c_serial_bus[];
|
||||||
extern struct acpi_rsconvert_info acpi_rs_convert_spi_serial_bus[];
|
extern struct acpi_rsconvert_info acpi_rs_convert_spi_serial_bus[];
|
||||||
extern struct acpi_rsconvert_info acpi_rs_convert_uart_serial_bus[];
|
extern struct acpi_rsconvert_info acpi_rs_convert_uart_serial_bus[];
|
||||||
|
extern struct acpi_rsconvert_info acpi_rs_convert_pin_function[];
|
||||||
|
extern struct acpi_rsconvert_info acpi_rs_convert_pin_config[];
|
||||||
|
extern struct acpi_rsconvert_info acpi_rs_convert_pin_group[];
|
||||||
|
extern struct acpi_rsconvert_info acpi_rs_convert_pin_group_function[];
|
||||||
|
extern struct acpi_rsconvert_info acpi_rs_convert_pin_group_config[];
|
||||||
|
|
||||||
/* These resources require separate get/set tables */
|
/* These resources require separate get/set tables */
|
||||||
|
|
||||||
|
@ -372,12 +380,17 @@ extern struct acpi_rsdump_info acpi_rs_dump_ext_address64[];
|
||||||
extern struct acpi_rsdump_info acpi_rs_dump_ext_irq[];
|
extern struct acpi_rsdump_info acpi_rs_dump_ext_irq[];
|
||||||
extern struct acpi_rsdump_info acpi_rs_dump_generic_reg[];
|
extern struct acpi_rsdump_info acpi_rs_dump_generic_reg[];
|
||||||
extern struct acpi_rsdump_info acpi_rs_dump_gpio[];
|
extern struct acpi_rsdump_info acpi_rs_dump_gpio[];
|
||||||
|
extern struct acpi_rsdump_info acpi_rs_dump_pin_function[];
|
||||||
extern struct acpi_rsdump_info acpi_rs_dump_fixed_dma[];
|
extern struct acpi_rsdump_info acpi_rs_dump_fixed_dma[];
|
||||||
extern struct acpi_rsdump_info acpi_rs_dump_common_serial_bus[];
|
extern struct acpi_rsdump_info acpi_rs_dump_common_serial_bus[];
|
||||||
extern struct acpi_rsdump_info acpi_rs_dump_i2c_serial_bus[];
|
extern struct acpi_rsdump_info acpi_rs_dump_i2c_serial_bus[];
|
||||||
extern struct acpi_rsdump_info acpi_rs_dump_spi_serial_bus[];
|
extern struct acpi_rsdump_info acpi_rs_dump_spi_serial_bus[];
|
||||||
extern struct acpi_rsdump_info acpi_rs_dump_uart_serial_bus[];
|
extern struct acpi_rsdump_info acpi_rs_dump_uart_serial_bus[];
|
||||||
extern struct acpi_rsdump_info acpi_rs_dump_general_flags[];
|
extern struct acpi_rsdump_info acpi_rs_dump_general_flags[];
|
||||||
|
extern struct acpi_rsdump_info acpi_rs_dump_pin_config[];
|
||||||
|
extern struct acpi_rsdump_info acpi_rs_dump_pin_group[];
|
||||||
|
extern struct acpi_rsdump_info acpi_rs_dump_pin_group_function[];
|
||||||
|
extern struct acpi_rsdump_info acpi_rs_dump_pin_group_config[];
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif /* __ACRESRC_H__ */
|
#endif /* __ACRESRC_H__ */
|
||||||
|
|
|
@ -85,6 +85,7 @@ extern const char *acpi_gbl_bpb_decode[];
|
||||||
extern const char *acpi_gbl_sb_decode[];
|
extern const char *acpi_gbl_sb_decode[];
|
||||||
extern const char *acpi_gbl_fc_decode[];
|
extern const char *acpi_gbl_fc_decode[];
|
||||||
extern const char *acpi_gbl_pt_decode[];
|
extern const char *acpi_gbl_pt_decode[];
|
||||||
|
extern const char *acpi_gbl_ptyp_decode[];
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -313,6 +313,11 @@
|
||||||
* #A is the number of required arguments
|
* #A is the number of required arguments
|
||||||
* #T is the number of target operands
|
* #T is the number of target operands
|
||||||
* #R indicates whether there is a return value
|
* #R indicates whether there is a return value
|
||||||
|
*
|
||||||
|
* These types are used for the top-level dispatch of the AML
|
||||||
|
* opcode. They group similar operators that can share common
|
||||||
|
* front-end code before dispatch to the final code that implements
|
||||||
|
* the operator.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -353,42 +358,42 @@
|
||||||
* The opcode Type is used in a dispatch table, do not change
|
* The opcode Type is used in a dispatch table, do not change
|
||||||
* or add anything new without updating the table.
|
* or add anything new without updating the table.
|
||||||
*/
|
*/
|
||||||
#define AML_TYPE_EXEC_0A_0T_1R 0x00
|
#define AML_TYPE_EXEC_0A_0T_1R 0x00 /* 0 Args, 0 Target, 1 ret_val */
|
||||||
#define AML_TYPE_EXEC_1A_0T_0R 0x01 /* Monadic1 */
|
#define AML_TYPE_EXEC_1A_0T_0R 0x01 /* 1 Args, 0 Target, 0 ret_val */
|
||||||
#define AML_TYPE_EXEC_1A_0T_1R 0x02 /* Monadic2 */
|
#define AML_TYPE_EXEC_1A_0T_1R 0x02 /* 1 Args, 0 Target, 1 ret_val */
|
||||||
#define AML_TYPE_EXEC_1A_1T_0R 0x03
|
#define AML_TYPE_EXEC_1A_1T_0R 0x03 /* 1 Args, 1 Target, 0 ret_val */
|
||||||
#define AML_TYPE_EXEC_1A_1T_1R 0x04 /* monadic2_r */
|
#define AML_TYPE_EXEC_1A_1T_1R 0x04 /* 1 Args, 1 Target, 1 ret_val */
|
||||||
#define AML_TYPE_EXEC_2A_0T_0R 0x05 /* Dyadic1 */
|
#define AML_TYPE_EXEC_2A_0T_0R 0x05 /* 2 Args, 0 Target, 0 ret_val */
|
||||||
#define AML_TYPE_EXEC_2A_0T_1R 0x06 /* Dyadic2 */
|
#define AML_TYPE_EXEC_2A_0T_1R 0x06 /* 2 Args, 0 Target, 1 ret_val */
|
||||||
#define AML_TYPE_EXEC_2A_1T_1R 0x07 /* dyadic2_r */
|
#define AML_TYPE_EXEC_2A_1T_1R 0x07 /* 2 Args, 1 Target, 1 ret_val */
|
||||||
#define AML_TYPE_EXEC_2A_2T_1R 0x08
|
#define AML_TYPE_EXEC_2A_2T_1R 0x08 /* 2 Args, 2 Target, 1 ret_val */
|
||||||
#define AML_TYPE_EXEC_3A_0T_0R 0x09
|
#define AML_TYPE_EXEC_3A_0T_0R 0x09 /* 3 Args, 0 Target, 0 ret_val */
|
||||||
#define AML_TYPE_EXEC_3A_1T_1R 0x0A
|
#define AML_TYPE_EXEC_3A_1T_1R 0x0A /* 3 Args, 1 Target, 1 ret_val */
|
||||||
#define AML_TYPE_EXEC_6A_0T_1R 0x0B
|
#define AML_TYPE_EXEC_6A_0T_1R 0x0B /* 6 Args, 0 Target, 1 ret_val */
|
||||||
/* End of types used in dispatch table */
|
/* End of types used in dispatch table */
|
||||||
|
|
||||||
#define AML_TYPE_LITERAL 0x0B
|
#define AML_TYPE_LITERAL 0x0C
|
||||||
#define AML_TYPE_CONSTANT 0x0C
|
#define AML_TYPE_CONSTANT 0x0D
|
||||||
#define AML_TYPE_METHOD_ARGUMENT 0x0D
|
#define AML_TYPE_METHOD_ARGUMENT 0x0E
|
||||||
#define AML_TYPE_LOCAL_VARIABLE 0x0E
|
#define AML_TYPE_LOCAL_VARIABLE 0x0F
|
||||||
#define AML_TYPE_DATA_TERM 0x0F
|
#define AML_TYPE_DATA_TERM 0x10
|
||||||
|
|
||||||
/* Generic for an op that returns a value */
|
/* Generic for an op that returns a value */
|
||||||
|
|
||||||
#define AML_TYPE_METHOD_CALL 0x10
|
#define AML_TYPE_METHOD_CALL 0x11
|
||||||
|
|
||||||
/* Miscellaneous types */
|
/* Miscellaneous types */
|
||||||
|
|
||||||
#define AML_TYPE_CREATE_FIELD 0x11
|
#define AML_TYPE_CREATE_FIELD 0x12
|
||||||
#define AML_TYPE_CREATE_OBJECT 0x12
|
#define AML_TYPE_CREATE_OBJECT 0x13
|
||||||
#define AML_TYPE_CONTROL 0x13
|
#define AML_TYPE_CONTROL 0x14
|
||||||
#define AML_TYPE_NAMED_NO_OBJ 0x14
|
#define AML_TYPE_NAMED_NO_OBJ 0x15
|
||||||
#define AML_TYPE_NAMED_FIELD 0x15
|
#define AML_TYPE_NAMED_FIELD 0x16
|
||||||
#define AML_TYPE_NAMED_SIMPLE 0x16
|
#define AML_TYPE_NAMED_SIMPLE 0x17
|
||||||
#define AML_TYPE_NAMED_COMPLEX 0x17
|
#define AML_TYPE_NAMED_COMPLEX 0x18
|
||||||
#define AML_TYPE_RETURN 0x18
|
#define AML_TYPE_RETURN 0x19
|
||||||
#define AML_TYPE_UNDEFINED 0x19
|
#define AML_TYPE_UNDEFINED 0x1A
|
||||||
#define AML_TYPE_BOGUS 0x1A
|
#define AML_TYPE_BOGUS 0x1B
|
||||||
|
|
||||||
/* AML Package Length encodings */
|
/* AML Package Length encodings */
|
||||||
|
|
||||||
|
|
|
@ -65,6 +65,7 @@
|
||||||
#define ACPI_RESTAG_DRIVESTRENGTH "_DRS"
|
#define ACPI_RESTAG_DRIVESTRENGTH "_DRS"
|
||||||
#define ACPI_RESTAG_ENDIANNESS "_END"
|
#define ACPI_RESTAG_ENDIANNESS "_END"
|
||||||
#define ACPI_RESTAG_FLOWCONTROL "_FLC"
|
#define ACPI_RESTAG_FLOWCONTROL "_FLC"
|
||||||
|
#define ACPI_RESTAG_FUNCTION "_FUN"
|
||||||
#define ACPI_RESTAG_GRANULARITY "_GRA"
|
#define ACPI_RESTAG_GRANULARITY "_GRA"
|
||||||
#define ACPI_RESTAG_INTERRUPT "_INT"
|
#define ACPI_RESTAG_INTERRUPT "_INT"
|
||||||
#define ACPI_RESTAG_INTERRUPTLEVEL "_LL_" /* active_lo(1), active_hi(0) */
|
#define ACPI_RESTAG_INTERRUPTLEVEL "_LL_" /* active_lo(1), active_hi(0) */
|
||||||
|
@ -84,6 +85,8 @@
|
||||||
#define ACPI_RESTAG_PHASE "_PHA"
|
#define ACPI_RESTAG_PHASE "_PHA"
|
||||||
#define ACPI_RESTAG_PIN "_PIN"
|
#define ACPI_RESTAG_PIN "_PIN"
|
||||||
#define ACPI_RESTAG_PINCONFIG "_PPI"
|
#define ACPI_RESTAG_PINCONFIG "_PPI"
|
||||||
|
#define ACPI_RESTAG_PINCONFIG_TYPE "_TYP"
|
||||||
|
#define ACPI_RESTAG_PINCONFIG_VALUE "_VAL"
|
||||||
#define ACPI_RESTAG_POLARITY "_POL"
|
#define ACPI_RESTAG_POLARITY "_POL"
|
||||||
#define ACPI_RESTAG_REGISTERBITOFFSET "_RBO"
|
#define ACPI_RESTAG_REGISTERBITOFFSET "_RBO"
|
||||||
#define ACPI_RESTAG_REGISTERBITWIDTH "_RBW"
|
#define ACPI_RESTAG_REGISTERBITWIDTH "_RBW"
|
||||||
|
@ -404,6 +407,102 @@ struct aml_resource_uart_serialbus {
|
||||||
#define AML_RESOURCE_UART_TYPE_REVISION 1 /* ACPI 5.0 */
|
#define AML_RESOURCE_UART_TYPE_REVISION 1 /* ACPI 5.0 */
|
||||||
#define AML_RESOURCE_UART_MIN_DATA_LEN 10
|
#define AML_RESOURCE_UART_MIN_DATA_LEN 10
|
||||||
|
|
||||||
|
struct aml_resource_pin_function {
|
||||||
|
AML_RESOURCE_LARGE_HEADER_COMMON u8 revision_id;
|
||||||
|
u16 flags;
|
||||||
|
u8 pin_config;
|
||||||
|
u16 function_number;
|
||||||
|
u16 pin_table_offset;
|
||||||
|
u8 res_source_index;
|
||||||
|
u16 res_source_offset;
|
||||||
|
u16 vendor_offset;
|
||||||
|
u16 vendor_length;
|
||||||
|
/*
|
||||||
|
* Optional fields follow immediately:
|
||||||
|
* 1) PIN list (Words)
|
||||||
|
* 2) Resource Source String
|
||||||
|
* 3) Vendor Data bytes
|
||||||
|
*/
|
||||||
|
};
|
||||||
|
|
||||||
|
#define AML_RESOURCE_PIN_FUNCTION_REVISION 1 /* ACPI 6.2 */
|
||||||
|
|
||||||
|
struct aml_resource_pin_config {
|
||||||
|
AML_RESOURCE_LARGE_HEADER_COMMON u8 revision_id;
|
||||||
|
u16 flags;
|
||||||
|
u8 pin_config_type;
|
||||||
|
u32 pin_config_value;
|
||||||
|
u16 pin_table_offset;
|
||||||
|
u8 res_source_index;
|
||||||
|
u16 res_source_offset;
|
||||||
|
u16 vendor_offset;
|
||||||
|
u16 vendor_length;
|
||||||
|
/*
|
||||||
|
* Optional fields follow immediately:
|
||||||
|
* 1) PIN list (Words)
|
||||||
|
* 2) Resource Source String
|
||||||
|
* 3) Vendor Data bytes
|
||||||
|
*/
|
||||||
|
};
|
||||||
|
|
||||||
|
#define AML_RESOURCE_PIN_CONFIG_REVISION 1 /* ACPI 6.2 */
|
||||||
|
|
||||||
|
struct aml_resource_pin_group {
|
||||||
|
AML_RESOURCE_LARGE_HEADER_COMMON u8 revision_id;
|
||||||
|
u16 flags;
|
||||||
|
u16 pin_table_offset;
|
||||||
|
u16 label_offset;
|
||||||
|
u16 vendor_offset;
|
||||||
|
u16 vendor_length;
|
||||||
|
/*
|
||||||
|
* Optional fields follow immediately:
|
||||||
|
* 1) PIN list (Words)
|
||||||
|
* 2) Resource Label String
|
||||||
|
* 3) Vendor Data bytes
|
||||||
|
*/
|
||||||
|
};
|
||||||
|
|
||||||
|
#define AML_RESOURCE_PIN_GROUP_REVISION 1 /* ACPI 6.2 */
|
||||||
|
|
||||||
|
struct aml_resource_pin_group_function {
|
||||||
|
AML_RESOURCE_LARGE_HEADER_COMMON u8 revision_id;
|
||||||
|
u16 flags;
|
||||||
|
u16 function_number;
|
||||||
|
u8 res_source_index;
|
||||||
|
u16 res_source_offset;
|
||||||
|
u16 res_source_label_offset;
|
||||||
|
u16 vendor_offset;
|
||||||
|
u16 vendor_length;
|
||||||
|
/*
|
||||||
|
* Optional fields follow immediately:
|
||||||
|
* 1) Resource Source String
|
||||||
|
* 2) Resource Source Label String
|
||||||
|
* 3) Vendor Data bytes
|
||||||
|
*/
|
||||||
|
};
|
||||||
|
|
||||||
|
#define AML_RESOURCE_PIN_GROUP_FUNCTION_REVISION 1 /* ACPI 6.2 */
|
||||||
|
|
||||||
|
struct aml_resource_pin_group_config {
|
||||||
|
AML_RESOURCE_LARGE_HEADER_COMMON u8 revision_id;
|
||||||
|
u16 flags;
|
||||||
|
u8 pin_config_type;
|
||||||
|
u32 pin_config_value;
|
||||||
|
u8 res_source_index;
|
||||||
|
u16 res_source_offset;
|
||||||
|
u16 res_source_label_offset;
|
||||||
|
u16 vendor_offset;
|
||||||
|
u16 vendor_length;
|
||||||
|
/*
|
||||||
|
* Optional fields follow immediately:
|
||||||
|
* 1) Resource Source String
|
||||||
|
* 2) Resource Source Label String
|
||||||
|
* 3) Vendor Data bytes
|
||||||
|
*/
|
||||||
|
};
|
||||||
|
|
||||||
|
#define AML_RESOURCE_PIN_GROUP_CONFIG_REVISION 1 /* ACPI 6.2 */
|
||||||
|
|
||||||
/* restore default alignment */
|
/* restore default alignment */
|
||||||
|
|
||||||
#pragma pack()
|
#pragma pack()
|
||||||
|
@ -446,6 +545,11 @@ union aml_resource {
|
||||||
struct aml_resource_spi_serialbus spi_serial_bus;
|
struct aml_resource_spi_serialbus spi_serial_bus;
|
||||||
struct aml_resource_uart_serialbus uart_serial_bus;
|
struct aml_resource_uart_serialbus uart_serial_bus;
|
||||||
struct aml_resource_common_serialbus common_serial_bus;
|
struct aml_resource_common_serialbus common_serial_bus;
|
||||||
|
struct aml_resource_pin_function pin_function;
|
||||||
|
struct aml_resource_pin_config pin_config;
|
||||||
|
struct aml_resource_pin_group pin_group;
|
||||||
|
struct aml_resource_pin_group_function pin_group_function;
|
||||||
|
struct aml_resource_pin_group_config pin_group_config;
|
||||||
|
|
||||||
/* Utility overlays */
|
/* Utility overlays */
|
||||||
|
|
||||||
|
|
|
@ -181,6 +181,18 @@ acpi_db_execute_method(struct acpi_db_method_info *info,
|
||||||
acpi_gbl_method_executing = FALSE;
|
acpi_gbl_method_executing = FALSE;
|
||||||
|
|
||||||
if (ACPI_FAILURE(status)) {
|
if (ACPI_FAILURE(status)) {
|
||||||
|
if ((status == AE_ABORT_METHOD) || acpi_gbl_abort_method) {
|
||||||
|
|
||||||
|
/* Clear the abort and fall back to the debugger prompt */
|
||||||
|
|
||||||
|
ACPI_EXCEPTION((AE_INFO, status,
|
||||||
|
"Aborting top-level method"));
|
||||||
|
|
||||||
|
acpi_gbl_abort_method = FALSE;
|
||||||
|
status = AE_OK;
|
||||||
|
goto cleanup;
|
||||||
|
}
|
||||||
|
|
||||||
ACPI_EXCEPTION((AE_INFO, status,
|
ACPI_EXCEPTION((AE_INFO, status,
|
||||||
"while executing %s from debugger",
|
"while executing %s from debugger",
|
||||||
info->pathname));
|
info->pathname));
|
||||||
|
|
|
@ -448,7 +448,7 @@ void acpi_db_decode_locals(struct acpi_walk_state *walk_state)
|
||||||
|
|
||||||
if (display_locals) {
|
if (display_locals) {
|
||||||
acpi_os_printf
|
acpi_os_printf
|
||||||
("\nInitialized Local Variables for method [%4.4s]:\n",
|
("\nInitialized Local Variables for Method [%4.4s]:\n",
|
||||||
acpi_ut_get_node_name(node));
|
acpi_ut_get_node_name(node));
|
||||||
|
|
||||||
for (i = 0; i < ACPI_METHOD_NUM_LOCALS; i++) {
|
for (i = 0; i < ACPI_METHOD_NUM_LOCALS; i++) {
|
||||||
|
@ -461,7 +461,7 @@ void acpi_db_decode_locals(struct acpi_walk_state *walk_state)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
acpi_os_printf
|
acpi_os_printf
|
||||||
("No Local Variables are initialized for method [%4.4s]\n",
|
("No Local Variables are initialized for Method [%4.4s]\n",
|
||||||
acpi_ut_get_node_name(node));
|
acpi_ut_get_node_name(node));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -515,7 +515,7 @@ void acpi_db_decode_arguments(struct acpi_walk_state *walk_state)
|
||||||
acpi_os_printf("Initialized Arguments for Method [%4.4s]: "
|
acpi_os_printf("Initialized Arguments for Method [%4.4s]: "
|
||||||
"(%X arguments defined for method invocation)\n",
|
"(%X arguments defined for method invocation)\n",
|
||||||
acpi_ut_get_node_name(node),
|
acpi_ut_get_node_name(node),
|
||||||
obj_desc->method.param_count);
|
node->object->method.param_count);
|
||||||
|
|
||||||
for (i = 0; i < ACPI_METHOD_NUM_ARGS; i++) {
|
for (i = 0; i < ACPI_METHOD_NUM_ARGS; i++) {
|
||||||
obj_desc = walk_state->arguments[i].object;
|
obj_desc = walk_state->arguments[i].object;
|
||||||
|
|
|
@ -244,7 +244,7 @@ acpi_db_single_step(struct acpi_walk_state *walk_state,
|
||||||
if ((acpi_gbl_db_output_to_file) ||
|
if ((acpi_gbl_db_output_to_file) ||
|
||||||
(acpi_dbg_level & ACPI_LV_PARSE)) {
|
(acpi_dbg_level & ACPI_LV_PARSE)) {
|
||||||
acpi_os_printf
|
acpi_os_printf
|
||||||
("\n[AmlDebug] Next AML Opcode to execute:\n");
|
("\nAML Debug: Next AML Opcode to execute:\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -82,7 +82,7 @@ acpi_ds_execute_arguments(struct acpi_namespace_node *node,
|
||||||
union acpi_parse_object *op;
|
union acpi_parse_object *op;
|
||||||
struct acpi_walk_state *walk_state;
|
struct acpi_walk_state *walk_state;
|
||||||
|
|
||||||
ACPI_FUNCTION_TRACE(ds_execute_arguments);
|
ACPI_FUNCTION_TRACE_PTR(ds_execute_arguments, aml_start);
|
||||||
|
|
||||||
/* Allocate a new parser op to be the root of the parsed tree */
|
/* Allocate a new parser op to be the root of the parsed tree */
|
||||||
|
|
||||||
|
@ -338,7 +338,8 @@ acpi_status acpi_ds_get_package_arguments(union acpi_operand_object *obj_desc)
|
||||||
return_ACPI_STATUS(AE_AML_INTERNAL);
|
return_ACPI_STATUS(AE_AML_INTERNAL);
|
||||||
}
|
}
|
||||||
|
|
||||||
ACPI_DEBUG_PRINT((ACPI_DB_EXEC, "Package Arg Init\n"));
|
ACPI_DEBUG_PRINT((ACPI_DB_EXEC, "Package Argument Init, AML Ptr: %p\n",
|
||||||
|
obj_desc->package.aml_start));
|
||||||
|
|
||||||
/* Execute the AML code for the term_arg arguments */
|
/* Execute the AML code for the term_arg arguments */
|
||||||
|
|
||||||
|
|
|
@ -196,6 +196,7 @@ acpi_ds_dump_method_stack(acpi_status status,
|
||||||
op->common.next = NULL;
|
op->common.next = NULL;
|
||||||
|
|
||||||
#ifdef ACPI_DISASSEMBLER
|
#ifdef ACPI_DISASSEMBLER
|
||||||
|
acpi_os_printf("Failed at ");
|
||||||
acpi_dm_disassemble(next_walk_state, op,
|
acpi_dm_disassemble(next_walk_state, op,
|
||||||
ACPI_UINT32_MAX);
|
ACPI_UINT32_MAX);
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -212,6 +212,7 @@ acpi_status
|
||||||
acpi_ds_method_error(acpi_status status, struct acpi_walk_state *walk_state)
|
acpi_ds_method_error(acpi_status status, struct acpi_walk_state *walk_state)
|
||||||
{
|
{
|
||||||
u32 aml_offset;
|
u32 aml_offset;
|
||||||
|
acpi_name name = 0;
|
||||||
|
|
||||||
ACPI_FUNCTION_ENTRY();
|
ACPI_FUNCTION_ENTRY();
|
||||||
|
|
||||||
|
@ -237,10 +238,13 @@ acpi_ds_method_error(acpi_status status, struct acpi_walk_state *walk_state)
|
||||||
walk_state->parser_state.
|
walk_state->parser_state.
|
||||||
aml_start);
|
aml_start);
|
||||||
|
|
||||||
status = acpi_gbl_exception_handler(status,
|
if (walk_state->method_node) {
|
||||||
walk_state->method_node ?
|
name = walk_state->method_node->name.integer;
|
||||||
walk_state->method_node->
|
} else if (walk_state->deferred_node) {
|
||||||
name.integer : 0,
|
name = walk_state->deferred_node->name.integer;
|
||||||
|
}
|
||||||
|
|
||||||
|
status = acpi_gbl_exception_handler(status, name,
|
||||||
walk_state->opcode,
|
walk_state->opcode,
|
||||||
aml_offset, NULL);
|
aml_offset, NULL);
|
||||||
acpi_ex_enter_interpreter();
|
acpi_ex_enter_interpreter();
|
||||||
|
|
|
@ -227,13 +227,12 @@ acpi_ds_init_buffer_field(u16 aml_opcode,
|
||||||
|
|
||||||
/* Entire field must fit within the current length of the buffer */
|
/* Entire field must fit within the current length of the buffer */
|
||||||
|
|
||||||
if ((bit_offset + bit_count) > (8 * (u32) buffer_desc->buffer.length)) {
|
if ((bit_offset + bit_count) > (8 * (u32)buffer_desc->buffer.length)) {
|
||||||
ACPI_ERROR((AE_INFO,
|
ACPI_ERROR((AE_INFO,
|
||||||
"Field [%4.4s] at %u exceeds Buffer [%4.4s] size %u (bits)",
|
"Field [%4.4s] at bit offset/length %u/%u "
|
||||||
acpi_ut_get_node_name(result_desc),
|
"exceeds size of target Buffer (%u bits)",
|
||||||
bit_offset + bit_count,
|
acpi_ut_get_node_name(result_desc), bit_offset,
|
||||||
acpi_ut_get_node_name(buffer_desc->buffer.node),
|
bit_count, 8 * (u32)buffer_desc->buffer.length));
|
||||||
8 * (u32) buffer_desc->buffer.length));
|
|
||||||
status = AE_AML_BUFFER_LIMIT;
|
status = AE_AML_BUFFER_LIMIT;
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
|
|
|
@ -633,15 +633,6 @@ acpi_ds_create_operand(struct acpi_walk_state *walk_state,
|
||||||
|
|
||||||
if ((op_info->flags & AML_HAS_RETVAL) ||
|
if ((op_info->flags & AML_HAS_RETVAL) ||
|
||||||
(arg->common.flags & ACPI_PARSEOP_IN_STACK)) {
|
(arg->common.flags & ACPI_PARSEOP_IN_STACK)) {
|
||||||
ACPI_DEBUG_PRINT((ACPI_DB_DISPATCH,
|
|
||||||
"Argument previously created, already stacked\n"));
|
|
||||||
|
|
||||||
acpi_db_display_argument_object(walk_state->
|
|
||||||
operands[walk_state->
|
|
||||||
num_operands -
|
|
||||||
1],
|
|
||||||
walk_state);
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Use value that was already previously returned
|
* Use value that was already previously returned
|
||||||
* by the evaluation of this argument
|
* by the evaluation of this argument
|
||||||
|
|
|
@ -576,8 +576,8 @@ acpi_status acpi_ds_exec_end_op(struct acpi_walk_state *walk_state)
|
||||||
case AML_TYPE_CREATE_OBJECT:
|
case AML_TYPE_CREATE_OBJECT:
|
||||||
|
|
||||||
ACPI_DEBUG_PRINT((ACPI_DB_EXEC,
|
ACPI_DEBUG_PRINT((ACPI_DB_EXEC,
|
||||||
"Executing CreateObject (Buffer/Package) Op=%p\n",
|
"Executing CreateObject (Buffer/Package) Op=%p AMLPtr=%p\n",
|
||||||
op));
|
op, op->named.data));
|
||||||
|
|
||||||
switch (op->common.parent->common.aml_opcode) {
|
switch (op->common.parent->common.aml_opcode) {
|
||||||
case AML_NAME_OP:
|
case AML_NAME_OP:
|
||||||
|
|
|
@ -397,7 +397,7 @@ acpi_ds_load1_begin_op(struct acpi_walk_state *walk_state,
|
||||||
/* Initialize the op */
|
/* Initialize the op */
|
||||||
|
|
||||||
#if (defined (ACPI_NO_METHOD_EXECUTION) || defined (ACPI_CONSTANT_EVAL_ONLY))
|
#if (defined (ACPI_NO_METHOD_EXECUTION) || defined (ACPI_CONSTANT_EVAL_ONLY))
|
||||||
op->named.path = ACPI_CAST_PTR(u8, path);
|
op->named.path = path;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (node) {
|
if (node) {
|
||||||
|
@ -434,6 +434,10 @@ acpi_status acpi_ds_load1_end_op(struct acpi_walk_state *walk_state)
|
||||||
acpi_object_type object_type;
|
acpi_object_type object_type;
|
||||||
acpi_status status = AE_OK;
|
acpi_status status = AE_OK;
|
||||||
|
|
||||||
|
#ifdef ACPI_ASL_COMPILER
|
||||||
|
u8 param_count;
|
||||||
|
#endif
|
||||||
|
|
||||||
ACPI_FUNCTION_TRACE(ds_load1_end_op);
|
ACPI_FUNCTION_TRACE(ds_load1_end_op);
|
||||||
|
|
||||||
op = walk_state->op;
|
op = walk_state->op;
|
||||||
|
@ -514,6 +518,38 @@ acpi_status acpi_ds_load1_end_op(struct acpi_walk_state *walk_state)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#ifdef ACPI_ASL_COMPILER
|
||||||
|
/*
|
||||||
|
* For external opcode, get the object type from the argument and
|
||||||
|
* get the parameter count from the argument's next.
|
||||||
|
*/
|
||||||
|
if (acpi_gbl_disasm_flag &&
|
||||||
|
op->common.node && op->common.aml_opcode == AML_EXTERNAL_OP) {
|
||||||
|
/*
|
||||||
|
* Note, if this external is not a method
|
||||||
|
* Op->Common.Value.Arg->Common.Next->Common.Value.Integer == 0
|
||||||
|
* Therefore, param_count will be 0.
|
||||||
|
*/
|
||||||
|
param_count =
|
||||||
|
(u8)op->common.value.arg->common.next->common.value.integer;
|
||||||
|
object_type = (u8)op->common.value.arg->common.value.integer;
|
||||||
|
op->common.node->flags |= ANOBJ_IS_EXTERNAL;
|
||||||
|
op->common.node->type = (u8)object_type;
|
||||||
|
|
||||||
|
acpi_dm_create_subobject_for_external((u8)object_type,
|
||||||
|
&op->common.node,
|
||||||
|
param_count);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Add the external to the external list because we may be
|
||||||
|
* emitting code based off of the items within the external list.
|
||||||
|
*/
|
||||||
|
acpi_dm_add_op_to_external_list(op, op->named.path,
|
||||||
|
(u8)object_type, param_count,
|
||||||
|
ACPI_EXT_ORIGIN_FROM_OPCODE |
|
||||||
|
ACPI_EXT_RESOLVED_REFERENCE);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* If we are executing a method, do not create any namespace objects
|
* If we are executing a method, do not create any namespace objects
|
||||||
|
@ -563,7 +599,9 @@ acpi_status acpi_ds_load1_end_op(struct acpi_walk_state *walk_state)
|
||||||
|
|
||||||
/* Pop the scope stack (only if loading a table) */
|
/* Pop the scope stack (only if loading a table) */
|
||||||
|
|
||||||
if (!walk_state->method_node && acpi_ns_opens_scope(object_type)) {
|
if (!walk_state->method_node &&
|
||||||
|
op->common.aml_opcode != AML_EXTERNAL_OP &&
|
||||||
|
acpi_ns_opens_scope(object_type)) {
|
||||||
ACPI_DEBUG_PRINT((ACPI_DB_DISPATCH,
|
ACPI_DEBUG_PRINT((ACPI_DB_DISPATCH,
|
||||||
"(%s): Popping scope for Op %p\n",
|
"(%s): Popping scope for Op %p\n",
|
||||||
acpi_ut_get_type_name(object_type), op));
|
acpi_ut_get_type_name(object_type), op));
|
||||||
|
|
|
@ -310,6 +310,22 @@ acpi_ds_load2_begin_op(struct acpi_walk_state *walk_state,
|
||||||
flags |= ACPI_NS_TEMPORARY;
|
flags |= ACPI_NS_TEMPORARY;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#ifdef ACPI_ASL_COMPILER
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Do not open a scope for AML_EXTERNAL_OP
|
||||||
|
* acpi_ns_lookup can open a new scope based on the object type
|
||||||
|
* of this op. AML_EXTERNAL_OP is a declaration rather than a
|
||||||
|
* definition. In the case that this external is a method object,
|
||||||
|
* acpi_ns_lookup will open a new scope. However, an AML_EXTERNAL_OP
|
||||||
|
* associated with the ACPI_TYPE_METHOD is a declaration, rather than
|
||||||
|
* a definition. Flags is set to avoid opening a scope for any
|
||||||
|
* AML_EXTERNAL_OP.
|
||||||
|
*/
|
||||||
|
if (walk_state->opcode == AML_EXTERNAL_OP) {
|
||||||
|
flags |= ACPI_NS_DONT_OPEN_SCOPE;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Add new entry or lookup existing entry */
|
/* Add new entry or lookup existing entry */
|
||||||
|
|
||||||
|
|
|
@ -180,6 +180,12 @@ acpi_status acpi_enable_event(u32 event, u32 flags)
|
||||||
|
|
||||||
ACPI_FUNCTION_TRACE(acpi_enable_event);
|
ACPI_FUNCTION_TRACE(acpi_enable_event);
|
||||||
|
|
||||||
|
/* If Hardware Reduced flag is set, there are no fixed events */
|
||||||
|
|
||||||
|
if (acpi_gbl_reduced_hardware) {
|
||||||
|
return_ACPI_STATUS(AE_OK);
|
||||||
|
}
|
||||||
|
|
||||||
/* Decode the Fixed Event */
|
/* Decode the Fixed Event */
|
||||||
|
|
||||||
if (event > ACPI_EVENT_MAX) {
|
if (event > ACPI_EVENT_MAX) {
|
||||||
|
@ -237,6 +243,12 @@ acpi_status acpi_disable_event(u32 event, u32 flags)
|
||||||
|
|
||||||
ACPI_FUNCTION_TRACE(acpi_disable_event);
|
ACPI_FUNCTION_TRACE(acpi_disable_event);
|
||||||
|
|
||||||
|
/* If Hardware Reduced flag is set, there are no fixed events */
|
||||||
|
|
||||||
|
if (acpi_gbl_reduced_hardware) {
|
||||||
|
return_ACPI_STATUS(AE_OK);
|
||||||
|
}
|
||||||
|
|
||||||
/* Decode the Fixed Event */
|
/* Decode the Fixed Event */
|
||||||
|
|
||||||
if (event > ACPI_EVENT_MAX) {
|
if (event > ACPI_EVENT_MAX) {
|
||||||
|
@ -290,6 +302,12 @@ acpi_status acpi_clear_event(u32 event)
|
||||||
|
|
||||||
ACPI_FUNCTION_TRACE(acpi_clear_event);
|
ACPI_FUNCTION_TRACE(acpi_clear_event);
|
||||||
|
|
||||||
|
/* If Hardware Reduced flag is set, there are no fixed events */
|
||||||
|
|
||||||
|
if (acpi_gbl_reduced_hardware) {
|
||||||
|
return_ACPI_STATUS(AE_OK);
|
||||||
|
}
|
||||||
|
|
||||||
/* Decode the Fixed Event */
|
/* Decode the Fixed Event */
|
||||||
|
|
||||||
if (event > ACPI_EVENT_MAX) {
|
if (event > ACPI_EVENT_MAX) {
|
||||||
|
|
|
@ -117,10 +117,10 @@ acpi_ex_do_debug_object(union acpi_operand_object *source_desc,
|
||||||
timer = ((u32)acpi_os_get_timer() / 10);
|
timer = ((u32)acpi_os_get_timer() / 10);
|
||||||
timer &= 0x03FFFFFF;
|
timer &= 0x03FFFFFF;
|
||||||
|
|
||||||
acpi_os_printf("[ACPI Debug T=0x%8.8X] %*s", timer,
|
acpi_os_printf("ACPI Debug: T=0x%8.8X %*s", timer,
|
||||||
level, " ");
|
level, " ");
|
||||||
} else {
|
} else {
|
||||||
acpi_os_printf("[ACPI Debug] %*s", level, " ");
|
acpi_os_printf("ACPI Debug: %*s", level, " ");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -645,10 +645,12 @@ void acpi_ex_dump_operand(union acpi_operand_object *obj_desc, u32 depth)
|
||||||
/* obj_desc is a valid object */
|
/* obj_desc is a valid object */
|
||||||
|
|
||||||
if (depth > 0) {
|
if (depth > 0) {
|
||||||
ACPI_DEBUG_PRINT((ACPI_DB_EXEC, "%*s[%u] %p ",
|
ACPI_DEBUG_PRINT((ACPI_DB_EXEC, "%*s[%u] %p Refs=%u ",
|
||||||
depth, " ", depth, obj_desc));
|
depth, " ", depth, obj_desc,
|
||||||
|
obj_desc->common.reference_count));
|
||||||
} else {
|
} else {
|
||||||
ACPI_DEBUG_PRINT((ACPI_DB_EXEC, "%p ", obj_desc));
|
ACPI_DEBUG_PRINT((ACPI_DB_EXEC, "%p Refs=%u ",
|
||||||
|
obj_desc, obj_desc->common.reference_count));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Decode object type */
|
/* Decode object type */
|
||||||
|
@ -690,8 +692,11 @@ void acpi_ex_dump_operand(union acpi_operand_object *obj_desc, u32 depth)
|
||||||
|
|
||||||
case ACPI_REFCLASS_NAME:
|
case ACPI_REFCLASS_NAME:
|
||||||
|
|
||||||
acpi_os_printf("- [%4.4s]\n",
|
acpi_ut_repair_name(obj_desc->reference.node->name.
|
||||||
obj_desc->reference.node->name.ascii);
|
ascii);
|
||||||
|
acpi_os_printf("- [%4.4s] (Node %p)\n",
|
||||||
|
obj_desc->reference.node->name.ascii,
|
||||||
|
obj_desc->reference.node);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ACPI_REFCLASS_ARG:
|
case ACPI_REFCLASS_ARG:
|
||||||
|
@ -999,9 +1004,15 @@ static void acpi_ex_dump_reference_obj(union acpi_operand_object *obj_desc)
|
||||||
status = acpi_ns_handle_to_pathname(obj_desc->reference.node,
|
status = acpi_ns_handle_to_pathname(obj_desc->reference.node,
|
||||||
&ret_buf, TRUE);
|
&ret_buf, TRUE);
|
||||||
if (ACPI_FAILURE(status)) {
|
if (ACPI_FAILURE(status)) {
|
||||||
acpi_os_printf(" Could not convert name to pathname\n");
|
acpi_os_printf
|
||||||
|
(" Could not convert name to pathname: %s\n",
|
||||||
|
acpi_format_exception(status));
|
||||||
} else {
|
} else {
|
||||||
acpi_os_printf("%s\n", (char *)ret_buf.pointer);
|
acpi_os_printf("%s: %s\n",
|
||||||
|
acpi_ut_get_type_name(obj_desc->
|
||||||
|
reference.node->
|
||||||
|
type),
|
||||||
|
(char *)ret_buf.pointer);
|
||||||
ACPI_FREE(ret_buf.pointer);
|
ACPI_FREE(ret_buf.pointer);
|
||||||
}
|
}
|
||||||
} else if (obj_desc->reference.object) {
|
} else if (obj_desc->reference.object) {
|
||||||
|
@ -1111,9 +1122,8 @@ acpi_ex_dump_package_obj(union acpi_operand_object *obj_desc,
|
||||||
|
|
||||||
case ACPI_TYPE_LOCAL_REFERENCE:
|
case ACPI_TYPE_LOCAL_REFERENCE:
|
||||||
|
|
||||||
acpi_os_printf("[Object Reference] Type [%s] %2.2X",
|
acpi_os_printf("[Object Reference] Class [%s]",
|
||||||
acpi_ut_get_reference_name(obj_desc),
|
acpi_ut_get_reference_name(obj_desc));
|
||||||
obj_desc->reference.class);
|
|
||||||
acpi_ex_dump_reference_obj(obj_desc);
|
acpi_ex_dump_reference_obj(obj_desc);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|
|
@ -921,13 +921,26 @@ acpi_status acpi_ex_opcode_1A_0T_1R(struct acpi_walk_state *walk_state)
|
||||||
* This is a deref_of (object_reference)
|
* This is a deref_of (object_reference)
|
||||||
* Get the actual object from the Node (This is the dereference).
|
* Get the actual object from the Node (This is the dereference).
|
||||||
* This case may only happen when a local_x or arg_x is
|
* This case may only happen when a local_x or arg_x is
|
||||||
* dereferenced above.
|
* dereferenced above, or for references to device and
|
||||||
|
* thermal objects.
|
||||||
*/
|
*/
|
||||||
return_desc = acpi_ns_get_attached_object((struct
|
switch (((struct acpi_namespace_node *)operand[0])->
|
||||||
acpi_namespace_node
|
type) {
|
||||||
*)
|
case ACPI_TYPE_DEVICE:
|
||||||
operand[0]);
|
case ACPI_TYPE_THERMAL:
|
||||||
|
|
||||||
|
/* These types have no node subobject, return the NS node */
|
||||||
|
|
||||||
|
return_desc = operand[0];
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
/* For most types, get the object attached to the node */
|
||||||
|
|
||||||
|
return_desc = acpi_ns_get_attached_object((struct acpi_namespace_node *)operand[0]);
|
||||||
acpi_ut_add_reference(return_desc);
|
acpi_ut_add_reference(return_desc);
|
||||||
|
break;
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
/*
|
/*
|
||||||
* This must be a reference object produced by either the
|
* This must be a reference object produced by either the
|
||||||
|
|
|
@ -368,6 +368,17 @@ acpi_ex_resolve_multiple(struct acpi_walk_state *walk_state,
|
||||||
*)obj_desc);
|
*)obj_desc);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
switch (type) {
|
||||||
|
case ACPI_TYPE_DEVICE:
|
||||||
|
case ACPI_TYPE_THERMAL:
|
||||||
|
|
||||||
|
/* These types have no attached subobject */
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
|
||||||
|
/* All other types require a subobject */
|
||||||
|
|
||||||
if (!obj_desc) {
|
if (!obj_desc) {
|
||||||
ACPI_ERROR((AE_INFO,
|
ACPI_ERROR((AE_INFO,
|
||||||
"[%4.4s] Node is unresolved or uninitialized",
|
"[%4.4s] Node is unresolved or uninitialized",
|
||||||
|
@ -375,6 +386,8 @@ acpi_ex_resolve_multiple(struct acpi_walk_state *walk_state,
|
||||||
return_ACPI_STATUS(AE_AML_UNINITIALIZED_NODE);
|
return_ACPI_STATUS(AE_AML_UNINITIALIZED_NODE);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
return_ACPI_STATUS(AE_AML_OPERAND_TYPE);
|
return_ACPI_STATUS(AE_AML_OPERAND_TYPE);
|
||||||
|
|
|
@ -70,11 +70,15 @@ static acpi_status acpi_hw_sleep_dispatch(u8 sleep_state, u32 function_id);
|
||||||
/* Legacy functions are optional, based upon ACPI_REDUCED_HARDWARE */
|
/* Legacy functions are optional, based upon ACPI_REDUCED_HARDWARE */
|
||||||
|
|
||||||
static struct acpi_sleep_functions acpi_sleep_dispatch[] = {
|
static struct acpi_sleep_functions acpi_sleep_dispatch[] = {
|
||||||
{ACPI_HW_OPTIONAL_FUNCTION(acpi_hw_legacy_sleep),
|
{ACPI_STRUCT_INIT(legacy_function,
|
||||||
acpi_hw_extended_sleep},
|
ACPI_HW_OPTIONAL_FUNCTION(acpi_hw_legacy_sleep)),
|
||||||
{ACPI_HW_OPTIONAL_FUNCTION(acpi_hw_legacy_wake_prep),
|
ACPI_STRUCT_INIT(extended_function, acpi_hw_extended_sleep) },
|
||||||
acpi_hw_extended_wake_prep},
|
{ACPI_STRUCT_INIT(legacy_function,
|
||||||
{ACPI_HW_OPTIONAL_FUNCTION(acpi_hw_legacy_wake), acpi_hw_extended_wake}
|
ACPI_HW_OPTIONAL_FUNCTION(acpi_hw_legacy_wake_prep)),
|
||||||
|
ACPI_STRUCT_INIT(extended_function, acpi_hw_extended_wake_prep) },
|
||||||
|
{ACPI_STRUCT_INIT(legacy_function,
|
||||||
|
ACPI_HW_OPTIONAL_FUNCTION(acpi_hw_legacy_wake)),
|
||||||
|
ACPI_STRUCT_INIT(extended_function, acpi_hw_extended_wake) }
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -47,6 +47,10 @@
|
||||||
#include "acnamesp.h"
|
#include "acnamesp.h"
|
||||||
#include "acdispat.h"
|
#include "acdispat.h"
|
||||||
|
|
||||||
|
#ifdef ACPI_ASL_COMPILER
|
||||||
|
#include "acdisasm.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
#define _COMPONENT ACPI_NAMESPACE
|
#define _COMPONENT ACPI_NAMESPACE
|
||||||
ACPI_MODULE_NAME("nsaccess")
|
ACPI_MODULE_NAME("nsaccess")
|
||||||
|
|
||||||
|
@ -580,6 +584,29 @@ acpi_ns_lookup(union acpi_generic_state *scope_info,
|
||||||
(char *)¤t_node->name,
|
(char *)¤t_node->name,
|
||||||
current_node));
|
current_node));
|
||||||
}
|
}
|
||||||
|
#ifdef ACPI_ASL_COMPILER
|
||||||
|
/*
|
||||||
|
* If this ACPI name already exists within the namespace as an
|
||||||
|
* external declaration, then mark the external as a conflicting
|
||||||
|
* declaration and proceed to process the current node as if it did
|
||||||
|
* not exist in the namespace. If this node is not processed as
|
||||||
|
* normal, then it could cause improper namespace resolution
|
||||||
|
* by failing to open a new scope.
|
||||||
|
*/
|
||||||
|
if (acpi_gbl_disasm_flag &&
|
||||||
|
(status == AE_ALREADY_EXISTS) &&
|
||||||
|
((this_node->flags & ANOBJ_IS_EXTERNAL) ||
|
||||||
|
(walk_state
|
||||||
|
&& walk_state->opcode == AML_EXTERNAL_OP))) {
|
||||||
|
this_node->flags &= ~ANOBJ_IS_EXTERNAL;
|
||||||
|
this_node->type = (u8)this_search_type;
|
||||||
|
if (walk_state->opcode != AML_EXTERNAL_OP) {
|
||||||
|
acpi_dm_mark_external_conflict
|
||||||
|
(this_node);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
*return_node = this_node;
|
*return_node = this_node;
|
||||||
return_ACPI_STATUS(status);
|
return_ACPI_STATUS(status);
|
||||||
|
|
|
@ -190,9 +190,6 @@ acpi_ns_handle_to_pathname(acpi_handle target_handle,
|
||||||
|
|
||||||
(void)acpi_ns_build_normalized_path(node, buffer->pointer,
|
(void)acpi_ns_build_normalized_path(node, buffer->pointer,
|
||||||
required_size, no_trailing);
|
required_size, no_trailing);
|
||||||
if (ACPI_FAILURE(status)) {
|
|
||||||
return_ACPI_STATUS(status);
|
|
||||||
}
|
|
||||||
|
|
||||||
ACPI_DEBUG_PRINT((ACPI_DB_EXEC, "%s [%X]\n",
|
ACPI_DEBUG_PRINT((ACPI_DB_EXEC, "%s [%X]\n",
|
||||||
(char *)buffer->pointer, (u32) required_size));
|
(char *)buffer->pointer, (u32) required_size));
|
||||||
|
|
|
@ -89,7 +89,7 @@ acpi_ns_print_node_pathname(struct acpi_namespace_node *node,
|
||||||
acpi_os_printf("%s ", message);
|
acpi_os_printf("%s ", message);
|
||||||
}
|
}
|
||||||
|
|
||||||
acpi_os_printf("[%s] (Node %p)", (char *)buffer.pointer, node);
|
acpi_os_printf("%s", (char *)buffer.pointer);
|
||||||
ACPI_FREE(buffer.pointer);
|
ACPI_FREE(buffer.pointer);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -85,6 +85,8 @@ acpi_evaluate_object_typed(acpi_handle handle,
|
||||||
{
|
{
|
||||||
acpi_status status;
|
acpi_status status;
|
||||||
u8 free_buffer_on_error = FALSE;
|
u8 free_buffer_on_error = FALSE;
|
||||||
|
acpi_handle target_handle;
|
||||||
|
char *full_pathname;
|
||||||
|
|
||||||
ACPI_FUNCTION_TRACE(acpi_evaluate_object_typed);
|
ACPI_FUNCTION_TRACE(acpi_evaluate_object_typed);
|
||||||
|
|
||||||
|
@ -98,38 +100,51 @@ acpi_evaluate_object_typed(acpi_handle handle,
|
||||||
free_buffer_on_error = TRUE;
|
free_buffer_on_error = TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Evaluate the object */
|
status = acpi_get_handle(handle, pathname, &target_handle);
|
||||||
|
|
||||||
status = acpi_evaluate_object(handle, pathname,
|
|
||||||
external_params, return_buffer);
|
|
||||||
if (ACPI_FAILURE(status)) {
|
if (ACPI_FAILURE(status)) {
|
||||||
return_ACPI_STATUS(status);
|
return_ACPI_STATUS(status);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Type ANY means "don't care" */
|
full_pathname = acpi_ns_get_external_pathname(target_handle);
|
||||||
|
if (!full_pathname) {
|
||||||
|
return_ACPI_STATUS(AE_NO_MEMORY);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Evaluate the object */
|
||||||
|
|
||||||
|
status = acpi_evaluate_object(target_handle, NULL, external_params,
|
||||||
|
return_buffer);
|
||||||
|
if (ACPI_FAILURE(status)) {
|
||||||
|
goto exit;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Type ANY means "don't care about return value type" */
|
||||||
|
|
||||||
if (return_type == ACPI_TYPE_ANY) {
|
if (return_type == ACPI_TYPE_ANY) {
|
||||||
return_ACPI_STATUS(AE_OK);
|
goto exit;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (return_buffer->length == 0) {
|
if (return_buffer->length == 0) {
|
||||||
|
|
||||||
/* Error because caller specifically asked for a return value */
|
/* Error because caller specifically asked for a return value */
|
||||||
|
|
||||||
ACPI_ERROR((AE_INFO, "No return value"));
|
ACPI_ERROR((AE_INFO, "%s did not return any object",
|
||||||
return_ACPI_STATUS(AE_NULL_OBJECT);
|
full_pathname));
|
||||||
|
status = AE_NULL_OBJECT;
|
||||||
|
goto exit;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Examine the object type returned from evaluate_object */
|
/* Examine the object type returned from evaluate_object */
|
||||||
|
|
||||||
if (((union acpi_object *)return_buffer->pointer)->type == return_type) {
|
if (((union acpi_object *)return_buffer->pointer)->type == return_type) {
|
||||||
return_ACPI_STATUS(AE_OK);
|
goto exit;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Return object type does not match requested type */
|
/* Return object type does not match requested type */
|
||||||
|
|
||||||
ACPI_ERROR((AE_INFO,
|
ACPI_ERROR((AE_INFO,
|
||||||
"Incorrect return type [%s] requested [%s]",
|
"Incorrect return type from %s - received [%s], requested [%s]",
|
||||||
|
full_pathname,
|
||||||
acpi_ut_get_type_name(((union acpi_object *)return_buffer->
|
acpi_ut_get_type_name(((union acpi_object *)return_buffer->
|
||||||
pointer)->type),
|
pointer)->type),
|
||||||
acpi_ut_get_type_name(return_type)));
|
acpi_ut_get_type_name(return_type)));
|
||||||
|
@ -147,7 +162,11 @@ acpi_evaluate_object_typed(acpi_handle handle,
|
||||||
}
|
}
|
||||||
|
|
||||||
return_buffer->length = 0;
|
return_buffer->length = 0;
|
||||||
return_ACPI_STATUS(AE_TYPE);
|
status = AE_TYPE;
|
||||||
|
|
||||||
|
exit:
|
||||||
|
ACPI_FREE(full_pathname);
|
||||||
|
return_ACPI_STATUS(status);
|
||||||
}
|
}
|
||||||
|
|
||||||
ACPI_EXPORT_SYMBOL(acpi_evaluate_object_typed)
|
ACPI_EXPORT_SYMBOL(acpi_evaluate_object_typed)
|
||||||
|
|
|
@ -122,6 +122,9 @@ static acpi_status acpi_ps_get_aml_opcode(struct acpi_walk_state *walk_state)
|
||||||
(u32)(aml_offset +
|
(u32)(aml_offset +
|
||||||
sizeof(struct acpi_table_header)));
|
sizeof(struct acpi_table_header)));
|
||||||
|
|
||||||
|
ACPI_ERROR((AE_INFO,
|
||||||
|
"Aborting disassembly, AML byte code is corrupt"));
|
||||||
|
|
||||||
/* Dump the context surrounding the invalid opcode */
|
/* Dump the context surrounding the invalid opcode */
|
||||||
|
|
||||||
acpi_ut_dump_buffer(((u8 *)walk_state->parser_state.
|
acpi_ut_dump_buffer(((u8 *)walk_state->parser_state.
|
||||||
|
@ -130,6 +133,14 @@ static acpi_status acpi_ps_get_aml_opcode(struct acpi_walk_state *walk_state)
|
||||||
sizeof(struct acpi_table_header) -
|
sizeof(struct acpi_table_header) -
|
||||||
16));
|
16));
|
||||||
acpi_os_printf(" */\n");
|
acpi_os_printf(" */\n");
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Just abort the disassembly, cannot continue because the
|
||||||
|
* parser is essentially lost. The disassembler can then
|
||||||
|
* randomly fail because an ill-constructed parse tree
|
||||||
|
* can result.
|
||||||
|
*/
|
||||||
|
return_ACPI_STATUS(AE_AML_BAD_OPCODE);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -331,6 +342,9 @@ acpi_ps_create_op(struct acpi_walk_state *walk_state,
|
||||||
if (status == AE_CTRL_PARSE_CONTINUE) {
|
if (status == AE_CTRL_PARSE_CONTINUE) {
|
||||||
return_ACPI_STATUS(AE_CTRL_PARSE_CONTINUE);
|
return_ACPI_STATUS(AE_CTRL_PARSE_CONTINUE);
|
||||||
}
|
}
|
||||||
|
if (ACPI_FAILURE(status)) {
|
||||||
|
return_ACPI_STATUS(status);
|
||||||
|
}
|
||||||
|
|
||||||
/* Create Op structure and append to parent's argument list */
|
/* Create Op structure and append to parent's argument list */
|
||||||
|
|
||||||
|
|
|
@ -650,9 +650,11 @@ const struct acpi_opcode_info acpi_gbl_aml_op_info[AML_NUM_OPCODES] = {
|
||||||
|
|
||||||
/* ACPI 6.0 opcodes */
|
/* ACPI 6.0 opcodes */
|
||||||
|
|
||||||
/* 81 */ ACPI_OP("External", ARGP_EXTERNAL_OP, ARGI_EXTERNAL_OP,
|
/* 81 */ ACPI_OP("External", ARGP_EXTERNAL_OP, ARGI_EXTERNAL_OP,
|
||||||
ACPI_TYPE_ANY, AML_CLASS_EXECUTE, /* ? */
|
ACPI_TYPE_ANY, AML_CLASS_NAMED_OBJECT,
|
||||||
AML_TYPE_EXEC_3A_0T_0R, AML_FLAGS_EXEC_3A_0T_0R),
|
AML_TYPE_NAMED_SIMPLE,
|
||||||
|
AML_HAS_ARGS | AML_NSOBJECT | AML_NSOPCODE |
|
||||||
|
AML_NSNODE | AML_NAMED),
|
||||||
/* 82 */ ACPI_OP("Comment", ARGP_COMMENT_OP, ARGI_COMMENT_OP,
|
/* 82 */ ACPI_OP("Comment", ARGP_COMMENT_OP, ARGI_COMMENT_OP,
|
||||||
ACPI_TYPE_STRING, AML_CLASS_ARGUMENT,
|
ACPI_TYPE_STRING, AML_CLASS_ARGUMENT,
|
||||||
AML_TYPE_LITERAL, AML_CONSTANT)
|
AML_TYPE_LITERAL, AML_CONSTANT)
|
||||||
|
|
|
@ -56,6 +56,7 @@
|
||||||
#include "acdispat.h"
|
#include "acdispat.h"
|
||||||
#include "amlcode.h"
|
#include "amlcode.h"
|
||||||
#include "acinterp.h"
|
#include "acinterp.h"
|
||||||
|
#include "acnamesp.h"
|
||||||
|
|
||||||
#define _COMPONENT ACPI_PARSER
|
#define _COMPONENT ACPI_PARSER
|
||||||
ACPI_MODULE_NAME("psparse")
|
ACPI_MODULE_NAME("psparse")
|
||||||
|
@ -538,9 +539,16 @@ acpi_status acpi_ps_parse_aml(struct acpi_walk_state *walk_state)
|
||||||
/* Either the method parse or actual execution failed */
|
/* Either the method parse or actual execution failed */
|
||||||
|
|
||||||
acpi_ex_exit_interpreter();
|
acpi_ex_exit_interpreter();
|
||||||
ACPI_ERROR_METHOD("Method parse/execution failed",
|
if (status == AE_ABORT_METHOD) {
|
||||||
walk_state->method_node, NULL,
|
acpi_ns_print_node_pathname(walk_state->
|
||||||
status);
|
method_node,
|
||||||
|
"Method aborted:");
|
||||||
|
acpi_os_printf("\n");
|
||||||
|
} else {
|
||||||
|
ACPI_ERROR_METHOD
|
||||||
|
("Method parse/execution failed",
|
||||||
|
walk_state->method_node, NULL, status);
|
||||||
|
}
|
||||||
acpi_ex_enter_interpreter();
|
acpi_ex_enter_interpreter();
|
||||||
|
|
||||||
/* Check for possible multi-thread reentrancy problem */
|
/* Check for possible multi-thread reentrancy problem */
|
||||||
|
|
|
@ -340,6 +340,22 @@ acpi_rs_get_aml_length(struct acpi_resource *resource,
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case ACPI_RESOURCE_TYPE_PIN_FUNCTION:
|
||||||
|
|
||||||
|
total_size = (acpi_rs_length)(total_size +
|
||||||
|
(resource->data.
|
||||||
|
pin_function.
|
||||||
|
pin_table_length * 2) +
|
||||||
|
resource->data.
|
||||||
|
pin_function.
|
||||||
|
resource_source.
|
||||||
|
string_length +
|
||||||
|
resource->data.
|
||||||
|
pin_function.
|
||||||
|
vendor_length);
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
case ACPI_RESOURCE_TYPE_SERIAL_BUS:
|
case ACPI_RESOURCE_TYPE_SERIAL_BUS:
|
||||||
|
|
||||||
total_size =
|
total_size =
|
||||||
|
@ -359,6 +375,67 @@ acpi_rs_get_aml_length(struct acpi_resource *resource,
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case ACPI_RESOURCE_TYPE_PIN_CONFIG:
|
||||||
|
|
||||||
|
total_size = (acpi_rs_length)(total_size +
|
||||||
|
(resource->data.
|
||||||
|
pin_config.
|
||||||
|
pin_table_length * 2) +
|
||||||
|
resource->data.pin_config.
|
||||||
|
resource_source.
|
||||||
|
string_length +
|
||||||
|
resource->data.pin_config.
|
||||||
|
vendor_length);
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
case ACPI_RESOURCE_TYPE_PIN_GROUP:
|
||||||
|
|
||||||
|
total_size = (acpi_rs_length)(total_size +
|
||||||
|
(resource->data.pin_group.
|
||||||
|
pin_table_length * 2) +
|
||||||
|
resource->data.pin_group.
|
||||||
|
resource_label.
|
||||||
|
string_length +
|
||||||
|
resource->data.pin_group.
|
||||||
|
vendor_length);
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
case ACPI_RESOURCE_TYPE_PIN_GROUP_FUNCTION:
|
||||||
|
|
||||||
|
total_size = (acpi_rs_length)(total_size +
|
||||||
|
resource->data.
|
||||||
|
pin_group_function.
|
||||||
|
resource_source.
|
||||||
|
string_length +
|
||||||
|
resource->data.
|
||||||
|
pin_group_function.
|
||||||
|
resource_source_label.
|
||||||
|
string_length +
|
||||||
|
resource->data.
|
||||||
|
pin_group_function.
|
||||||
|
vendor_length);
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
case ACPI_RESOURCE_TYPE_PIN_GROUP_CONFIG:
|
||||||
|
|
||||||
|
total_size = (acpi_rs_length)(total_size +
|
||||||
|
resource->data.
|
||||||
|
pin_group_config.
|
||||||
|
resource_source.
|
||||||
|
string_length +
|
||||||
|
resource->data.
|
||||||
|
pin_group_config.
|
||||||
|
resource_source_label.
|
||||||
|
string_length +
|
||||||
|
resource->data.
|
||||||
|
pin_group_config.
|
||||||
|
vendor_length);
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
@ -537,6 +614,24 @@ acpi_rs_get_list_length(u8 *aml_buffer,
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case ACPI_RESOURCE_NAME_PIN_FUNCTION:
|
||||||
|
|
||||||
|
/* Vendor data is optional */
|
||||||
|
|
||||||
|
if (aml_resource->pin_function.vendor_length) {
|
||||||
|
extra_struct_bytes +=
|
||||||
|
aml_resource->pin_function.vendor_offset -
|
||||||
|
aml_resource->pin_function.
|
||||||
|
pin_table_offset +
|
||||||
|
aml_resource->pin_function.vendor_length;
|
||||||
|
} else {
|
||||||
|
extra_struct_bytes +=
|
||||||
|
aml_resource->large_header.resource_length +
|
||||||
|
sizeof(struct aml_resource_large_header) -
|
||||||
|
aml_resource->pin_function.pin_table_offset;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
case ACPI_RESOURCE_NAME_SERIAL_BUS:
|
case ACPI_RESOURCE_NAME_SERIAL_BUS:
|
||||||
|
|
||||||
minimum_aml_resource_length =
|
minimum_aml_resource_length =
|
||||||
|
@ -547,6 +642,50 @@ acpi_rs_get_list_length(u8 *aml_buffer,
|
||||||
minimum_aml_resource_length;
|
minimum_aml_resource_length;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case ACPI_RESOURCE_NAME_PIN_CONFIG:
|
||||||
|
|
||||||
|
/* Vendor data is optional */
|
||||||
|
|
||||||
|
if (aml_resource->pin_config.vendor_length) {
|
||||||
|
extra_struct_bytes +=
|
||||||
|
aml_resource->pin_config.vendor_offset -
|
||||||
|
aml_resource->pin_config.pin_table_offset +
|
||||||
|
aml_resource->pin_config.vendor_length;
|
||||||
|
} else {
|
||||||
|
extra_struct_bytes +=
|
||||||
|
aml_resource->large_header.resource_length +
|
||||||
|
sizeof(struct aml_resource_large_header) -
|
||||||
|
aml_resource->pin_config.pin_table_offset;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case ACPI_RESOURCE_NAME_PIN_GROUP:
|
||||||
|
|
||||||
|
extra_struct_bytes +=
|
||||||
|
aml_resource->pin_group.vendor_offset -
|
||||||
|
aml_resource->pin_group.pin_table_offset +
|
||||||
|
aml_resource->pin_group.vendor_length;
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
case ACPI_RESOURCE_NAME_PIN_GROUP_FUNCTION:
|
||||||
|
|
||||||
|
extra_struct_bytes +=
|
||||||
|
aml_resource->pin_group_function.vendor_offset -
|
||||||
|
aml_resource->pin_group_function.res_source_offset +
|
||||||
|
aml_resource->pin_group_function.vendor_length;
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
case ACPI_RESOURCE_NAME_PIN_GROUP_CONFIG:
|
||||||
|
|
||||||
|
extra_struct_bytes +=
|
||||||
|
aml_resource->pin_group_config.vendor_offset -
|
||||||
|
aml_resource->pin_group_config.res_source_offset +
|
||||||
|
aml_resource->pin_group_config.vendor_length;
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -75,6 +75,10 @@ static void acpi_rs_dump_short_byte_list(u8 length, u8 *data);
|
||||||
static void
|
static void
|
||||||
acpi_rs_dump_resource_source(struct acpi_resource_source *resource_source);
|
acpi_rs_dump_resource_source(struct acpi_resource_source *resource_source);
|
||||||
|
|
||||||
|
static void
|
||||||
|
acpi_rs_dump_resource_label(char *title,
|
||||||
|
struct acpi_resource_label *resource_label);
|
||||||
|
|
||||||
static void acpi_rs_dump_address_common(union acpi_resource_data *resource);
|
static void acpi_rs_dump_address_common(union acpi_resource_data *resource);
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -371,6 +375,26 @@ acpi_rs_dump_descriptor(void *resource, struct acpi_rsdump_info *table)
|
||||||
target));
|
target));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case ACPI_RSD_LABEL:
|
||||||
|
/*
|
||||||
|
* resource_label
|
||||||
|
*/
|
||||||
|
acpi_rs_dump_resource_label("Resource Label",
|
||||||
|
ACPI_CAST_PTR(struct
|
||||||
|
acpi_resource_label,
|
||||||
|
target));
|
||||||
|
break;
|
||||||
|
|
||||||
|
case ACPI_RSD_SOURCE_LABEL:
|
||||||
|
/*
|
||||||
|
* resource_source_label
|
||||||
|
*/
|
||||||
|
acpi_rs_dump_resource_label("Resource Source Label",
|
||||||
|
ACPI_CAST_PTR(struct
|
||||||
|
acpi_resource_label,
|
||||||
|
target));
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
|
||||||
acpi_os_printf("**** Invalid table opcode [%X] ****\n",
|
acpi_os_printf("**** Invalid table opcode [%X] ****\n",
|
||||||
|
@ -412,6 +436,30 @@ acpi_rs_dump_resource_source(struct acpi_resource_source *resource_source)
|
||||||
resource_source->string_ptr : "[Not Specified]");
|
resource_source->string_ptr : "[Not Specified]");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*******************************************************************************
|
||||||
|
*
|
||||||
|
* FUNCTION: acpi_rs_dump_resource_label
|
||||||
|
*
|
||||||
|
* PARAMETERS: title - Title of the dumped resource field
|
||||||
|
* resource_label - Pointer to a Resource Label struct
|
||||||
|
*
|
||||||
|
* RETURN: None
|
||||||
|
*
|
||||||
|
* DESCRIPTION: Common routine for dumping the resource_label
|
||||||
|
*
|
||||||
|
******************************************************************************/
|
||||||
|
|
||||||
|
static void
|
||||||
|
acpi_rs_dump_resource_label(char *title,
|
||||||
|
struct acpi_resource_label *resource_label)
|
||||||
|
{
|
||||||
|
ACPI_FUNCTION_ENTRY();
|
||||||
|
|
||||||
|
acpi_rs_out_string(title,
|
||||||
|
resource_label->string_ptr ?
|
||||||
|
resource_label->string_ptr : "[Not Specified]");
|
||||||
|
}
|
||||||
|
|
||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
*
|
*
|
||||||
* FUNCTION: acpi_rs_dump_address_common
|
* FUNCTION: acpi_rs_dump_address_common
|
||||||
|
|
|
@ -314,6 +314,120 @@ struct acpi_rsdump_info acpi_rs_dump_gpio[16] = {
|
||||||
NULL},
|
NULL},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct acpi_rsdump_info acpi_rs_dump_pin_function[10] = {
|
||||||
|
{ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE(acpi_rs_dump_pin_function),
|
||||||
|
"PinFunction", NULL},
|
||||||
|
{ACPI_RSD_UINT8, ACPI_RSD_OFFSET(pin_function.revision_id),
|
||||||
|
"RevisionId", NULL},
|
||||||
|
{ACPI_RSD_UINT8, ACPI_RSD_OFFSET(pin_function.pin_config), "PinConfig",
|
||||||
|
acpi_gbl_ppc_decode},
|
||||||
|
{ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET(pin_function.sharable), "Sharing",
|
||||||
|
acpi_gbl_shr_decode},
|
||||||
|
{ACPI_RSD_UINT16, ACPI_RSD_OFFSET(pin_function.function_number),
|
||||||
|
"FunctionNumber", NULL},
|
||||||
|
{ACPI_RSD_SOURCE, ACPI_RSD_OFFSET(pin_function.resource_source),
|
||||||
|
"ResourceSource", NULL},
|
||||||
|
{ACPI_RSD_UINT16, ACPI_RSD_OFFSET(pin_function.pin_table_length),
|
||||||
|
"PinTableLength", NULL},
|
||||||
|
{ACPI_RSD_WORDLIST, ACPI_RSD_OFFSET(pin_function.pin_table), "PinTable",
|
||||||
|
NULL},
|
||||||
|
{ACPI_RSD_UINT16, ACPI_RSD_OFFSET(pin_function.vendor_length),
|
||||||
|
"VendorLength", NULL},
|
||||||
|
{ACPI_RSD_SHORTLISTX, ACPI_RSD_OFFSET(pin_function.vendor_data),
|
||||||
|
"VendorData", NULL},
|
||||||
|
};
|
||||||
|
|
||||||
|
struct acpi_rsdump_info acpi_rs_dump_pin_config[11] = {
|
||||||
|
{ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE(acpi_rs_dump_pin_config),
|
||||||
|
"PinConfig", NULL},
|
||||||
|
{ACPI_RSD_UINT8, ACPI_RSD_OFFSET(pin_config.revision_id), "RevisionId",
|
||||||
|
NULL},
|
||||||
|
{ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET(pin_config.producer_consumer),
|
||||||
|
"ProducerConsumer", acpi_gbl_consume_decode},
|
||||||
|
{ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET(pin_config.sharable), "Sharing",
|
||||||
|
acpi_gbl_shr_decode},
|
||||||
|
{ACPI_RSD_UINT8, ACPI_RSD_OFFSET(pin_config.pin_config_type),
|
||||||
|
"PinConfigType", NULL},
|
||||||
|
{ACPI_RSD_UINT32, ACPI_RSD_OFFSET(pin_config.pin_config_value),
|
||||||
|
"PinConfigValue", NULL},
|
||||||
|
{ACPI_RSD_SOURCE, ACPI_RSD_OFFSET(pin_config.resource_source),
|
||||||
|
"ResourceSource", NULL},
|
||||||
|
{ACPI_RSD_UINT16, ACPI_RSD_OFFSET(pin_config.pin_table_length),
|
||||||
|
"PinTableLength", NULL},
|
||||||
|
{ACPI_RSD_WORDLIST, ACPI_RSD_OFFSET(pin_config.pin_table), "PinTable",
|
||||||
|
NULL},
|
||||||
|
{ACPI_RSD_UINT16, ACPI_RSD_OFFSET(pin_config.vendor_length),
|
||||||
|
"VendorLength", NULL},
|
||||||
|
{ACPI_RSD_SHORTLISTX, ACPI_RSD_OFFSET(pin_config.vendor_data),
|
||||||
|
"VendorData", NULL},
|
||||||
|
};
|
||||||
|
|
||||||
|
struct acpi_rsdump_info acpi_rs_dump_pin_group[8] = {
|
||||||
|
{ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE(acpi_rs_dump_pin_group),
|
||||||
|
"PinGroup", NULL},
|
||||||
|
{ACPI_RSD_UINT8, ACPI_RSD_OFFSET(pin_group.revision_id), "RevisionId",
|
||||||
|
NULL},
|
||||||
|
{ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET(pin_group.producer_consumer),
|
||||||
|
"ProducerConsumer", acpi_gbl_consume_decode},
|
||||||
|
{ACPI_RSD_UINT16, ACPI_RSD_OFFSET(pin_group.pin_table_length),
|
||||||
|
"PinTableLength", NULL},
|
||||||
|
{ACPI_RSD_WORDLIST, ACPI_RSD_OFFSET(pin_group.pin_table), "PinTable",
|
||||||
|
NULL},
|
||||||
|
{ACPI_RSD_LABEL, ACPI_RSD_OFFSET(pin_group.resource_label),
|
||||||
|
"ResourceLabel", NULL},
|
||||||
|
{ACPI_RSD_UINT16, ACPI_RSD_OFFSET(pin_group.vendor_length),
|
||||||
|
"VendorLength", NULL},
|
||||||
|
{ACPI_RSD_SHORTLISTX, ACPI_RSD_OFFSET(pin_group.vendor_data),
|
||||||
|
"VendorData", NULL},
|
||||||
|
};
|
||||||
|
|
||||||
|
struct acpi_rsdump_info acpi_rs_dump_pin_group_function[9] = {
|
||||||
|
{ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE(acpi_rs_dump_pin_group_function),
|
||||||
|
"PinGroupFunction", NULL},
|
||||||
|
{ACPI_RSD_UINT8, ACPI_RSD_OFFSET(pin_group_function.revision_id),
|
||||||
|
"RevisionId", NULL},
|
||||||
|
{ACPI_RSD_1BITFLAG,
|
||||||
|
ACPI_RSD_OFFSET(pin_group_function.producer_consumer),
|
||||||
|
"ProducerConsumer", acpi_gbl_consume_decode},
|
||||||
|
{ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET(pin_group_function.sharable),
|
||||||
|
"Sharing", acpi_gbl_shr_decode},
|
||||||
|
{ACPI_RSD_UINT16, ACPI_RSD_OFFSET(pin_group_function.function_number),
|
||||||
|
"FunctionNumber", NULL},
|
||||||
|
{ACPI_RSD_SOURCE_LABEL,
|
||||||
|
ACPI_RSD_OFFSET(pin_group_function.resource_source_label),
|
||||||
|
"ResourceSourceLabel", NULL},
|
||||||
|
{ACPI_RSD_SOURCE, ACPI_RSD_OFFSET(pin_group_function.resource_source),
|
||||||
|
"ResourceSource", NULL},
|
||||||
|
{ACPI_RSD_UINT16, ACPI_RSD_OFFSET(pin_group_function.vendor_length),
|
||||||
|
"VendorLength", NULL},
|
||||||
|
{ACPI_RSD_SHORTLISTX, ACPI_RSD_OFFSET(pin_group_function.vendor_data),
|
||||||
|
"VendorData", NULL},
|
||||||
|
};
|
||||||
|
|
||||||
|
struct acpi_rsdump_info acpi_rs_dump_pin_group_config[10] = {
|
||||||
|
{ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE(acpi_rs_dump_pin_group_config),
|
||||||
|
"PinGroupConfig", NULL},
|
||||||
|
{ACPI_RSD_UINT8, ACPI_RSD_OFFSET(pin_group_config.revision_id),
|
||||||
|
"RevisionId", NULL},
|
||||||
|
{ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET(pin_group_config.producer_consumer),
|
||||||
|
"ProducerConsumer", acpi_gbl_consume_decode},
|
||||||
|
{ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET(pin_group_config.sharable),
|
||||||
|
"Sharing", acpi_gbl_shr_decode},
|
||||||
|
{ACPI_RSD_UINT8, ACPI_RSD_OFFSET(pin_group_config.pin_config_type),
|
||||||
|
"PinConfigType", NULL},
|
||||||
|
{ACPI_RSD_UINT32, ACPI_RSD_OFFSET(pin_group_config.pin_config_value),
|
||||||
|
"PinConfigValue", NULL},
|
||||||
|
{ACPI_RSD_SOURCE_LABEL,
|
||||||
|
ACPI_RSD_OFFSET(pin_group_config.resource_source_label),
|
||||||
|
"ResourceSourceLabel", NULL},
|
||||||
|
{ACPI_RSD_SOURCE, ACPI_RSD_OFFSET(pin_group_config.resource_source),
|
||||||
|
"ResourceSource", NULL},
|
||||||
|
{ACPI_RSD_UINT16, ACPI_RSD_OFFSET(pin_group_config.vendor_length),
|
||||||
|
"VendorLength", NULL},
|
||||||
|
{ACPI_RSD_SHORTLISTX, ACPI_RSD_OFFSET(pin_group_config.vendor_data),
|
||||||
|
"VendorData", NULL},
|
||||||
|
};
|
||||||
|
|
||||||
struct acpi_rsdump_info acpi_rs_dump_fixed_dma[4] = {
|
struct acpi_rsdump_info acpi_rs_dump_fixed_dma[4] = {
|
||||||
{ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE(acpi_rs_dump_fixed_dma),
|
{ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE(acpi_rs_dump_fixed_dma),
|
||||||
"FixedDma", NULL},
|
"FixedDma", NULL},
|
||||||
|
|
|
@ -80,6 +80,11 @@ struct acpi_rsconvert_info *acpi_gbl_set_resource_dispatch[] = {
|
||||||
acpi_rs_convert_gpio, /* 0x11, ACPI_RESOURCE_TYPE_GPIO */
|
acpi_rs_convert_gpio, /* 0x11, ACPI_RESOURCE_TYPE_GPIO */
|
||||||
acpi_rs_convert_fixed_dma, /* 0x12, ACPI_RESOURCE_TYPE_FIXED_DMA */
|
acpi_rs_convert_fixed_dma, /* 0x12, ACPI_RESOURCE_TYPE_FIXED_DMA */
|
||||||
NULL, /* 0x13, ACPI_RESOURCE_TYPE_SERIAL_BUS - Use subtype table below */
|
NULL, /* 0x13, ACPI_RESOURCE_TYPE_SERIAL_BUS - Use subtype table below */
|
||||||
|
acpi_rs_convert_pin_function, /* 0x14, ACPI_RESOURCE_TYPE_PIN_FUNCTION */
|
||||||
|
acpi_rs_convert_pin_config, /* 0x15, ACPI_RESOURCE_TYPE_PIN_CONFIG */
|
||||||
|
acpi_rs_convert_pin_group, /* 0x16, ACPI_RESOURCE_TYPE_PIN_GROUP */
|
||||||
|
acpi_rs_convert_pin_group_function, /* 0x17, ACPI_RESOURCE_TYPE_PIN_GROUP_FUNCTION */
|
||||||
|
acpi_rs_convert_pin_group_config, /* 0x18, ACPI_RESOURCE_TYPE_PIN_GROUP_CONFIG */
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Dispatch tables for AML-to-resource (Get Resource) conversion functions */
|
/* Dispatch tables for AML-to-resource (Get Resource) conversion functions */
|
||||||
|
@ -119,8 +124,12 @@ struct acpi_rsconvert_info *acpi_gbl_get_resource_dispatch[] = {
|
||||||
acpi_rs_convert_address64, /* 0x0A, ACPI_RESOURCE_NAME_ADDRESS64 */
|
acpi_rs_convert_address64, /* 0x0A, ACPI_RESOURCE_NAME_ADDRESS64 */
|
||||||
acpi_rs_convert_ext_address64, /* 0x0B, ACPI_RESOURCE_NAME_EXTENDED_ADDRESS64 */
|
acpi_rs_convert_ext_address64, /* 0x0B, ACPI_RESOURCE_NAME_EXTENDED_ADDRESS64 */
|
||||||
acpi_rs_convert_gpio, /* 0x0C, ACPI_RESOURCE_NAME_GPIO */
|
acpi_rs_convert_gpio, /* 0x0C, ACPI_RESOURCE_NAME_GPIO */
|
||||||
NULL, /* 0x0D, Reserved */
|
acpi_rs_convert_pin_function, /* 0x0D, ACPI_RESOURCE_NAME_PIN_FUNCTION */
|
||||||
NULL, /* 0x0E, ACPI_RESOURCE_NAME_SERIAL_BUS - Use subtype table below */
|
NULL, /* 0x0E, ACPI_RESOURCE_NAME_SERIAL_BUS - Use subtype table below */
|
||||||
|
acpi_rs_convert_pin_config, /* 0x0F, ACPI_RESOURCE_NAME_PIN_CONFIG */
|
||||||
|
acpi_rs_convert_pin_group, /* 0x10, ACPI_RESOURCE_NAME_PIN_GROUP */
|
||||||
|
acpi_rs_convert_pin_group_function, /* 0x11, ACPI_RESOURCE_NAME_PIN_GROUP_FUNCTION */
|
||||||
|
acpi_rs_convert_pin_group_config, /* 0x12, ACPI_RESOURCE_NAME_PIN_GROUP_CONFIG */
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Subtype table for serial_bus -- I2C, SPI, and UART */
|
/* Subtype table for serial_bus -- I2C, SPI, and UART */
|
||||||
|
@ -157,6 +166,11 @@ struct acpi_rsdump_info *acpi_gbl_dump_resource_dispatch[] = {
|
||||||
acpi_rs_dump_gpio, /* ACPI_RESOURCE_TYPE_GPIO */
|
acpi_rs_dump_gpio, /* ACPI_RESOURCE_TYPE_GPIO */
|
||||||
acpi_rs_dump_fixed_dma, /* ACPI_RESOURCE_TYPE_FIXED_DMA */
|
acpi_rs_dump_fixed_dma, /* ACPI_RESOURCE_TYPE_FIXED_DMA */
|
||||||
NULL, /* ACPI_RESOURCE_TYPE_SERIAL_BUS */
|
NULL, /* ACPI_RESOURCE_TYPE_SERIAL_BUS */
|
||||||
|
acpi_rs_dump_pin_function, /* ACPI_RESOURCE_TYPE_PIN_FUNCTION */
|
||||||
|
acpi_rs_dump_pin_config, /* ACPI_RESOURCE_TYPE_PIN_CONFIG */
|
||||||
|
acpi_rs_dump_pin_group, /* ACPI_RESOURCE_TYPE_PIN_GROUP */
|
||||||
|
acpi_rs_dump_pin_group_function, /* ACPI_RESOURCE_TYPE_PIN_GROUP_FUNCTION */
|
||||||
|
acpi_rs_dump_pin_group_config, /* ACPI_RESOURCE_TYPE_PIN_GROUP_CONFIG */
|
||||||
};
|
};
|
||||||
|
|
||||||
struct acpi_rsdump_info *acpi_gbl_dump_serial_bus_dispatch[] = {
|
struct acpi_rsdump_info *acpi_gbl_dump_serial_bus_dispatch[] = {
|
||||||
|
@ -193,6 +207,11 @@ const u8 acpi_gbl_aml_resource_sizes[] = {
|
||||||
sizeof(struct aml_resource_gpio), /* ACPI_RESOURCE_TYPE_GPIO */
|
sizeof(struct aml_resource_gpio), /* ACPI_RESOURCE_TYPE_GPIO */
|
||||||
sizeof(struct aml_resource_fixed_dma), /* ACPI_RESOURCE_TYPE_FIXED_DMA */
|
sizeof(struct aml_resource_fixed_dma), /* ACPI_RESOURCE_TYPE_FIXED_DMA */
|
||||||
sizeof(struct aml_resource_common_serialbus), /* ACPI_RESOURCE_TYPE_SERIAL_BUS */
|
sizeof(struct aml_resource_common_serialbus), /* ACPI_RESOURCE_TYPE_SERIAL_BUS */
|
||||||
|
sizeof(struct aml_resource_pin_function), /* ACPI_RESOURCE_TYPE_PIN_FUNCTION */
|
||||||
|
sizeof(struct aml_resource_pin_config), /* ACPI_RESOURCE_TYPE_PIN_CONFIG */
|
||||||
|
sizeof(struct aml_resource_pin_group), /* ACPI_RESOURCE_TYPE_PIN_GROUP */
|
||||||
|
sizeof(struct aml_resource_pin_group_function), /* ACPI_RESOURCE_TYPE_PIN_GROUP_FUNCTION */
|
||||||
|
sizeof(struct aml_resource_pin_group_config), /* ACPI_RESOURCE_TYPE_PIN_GROUP_CONFIG */
|
||||||
};
|
};
|
||||||
|
|
||||||
const u8 acpi_gbl_resource_struct_sizes[] = {
|
const u8 acpi_gbl_resource_struct_sizes[] = {
|
||||||
|
@ -230,7 +249,12 @@ const u8 acpi_gbl_resource_struct_sizes[] = {
|
||||||
ACPI_RS_SIZE(struct acpi_resource_address64),
|
ACPI_RS_SIZE(struct acpi_resource_address64),
|
||||||
ACPI_RS_SIZE(struct acpi_resource_extended_address64),
|
ACPI_RS_SIZE(struct acpi_resource_extended_address64),
|
||||||
ACPI_RS_SIZE(struct acpi_resource_gpio),
|
ACPI_RS_SIZE(struct acpi_resource_gpio),
|
||||||
ACPI_RS_SIZE(struct acpi_resource_common_serialbus)
|
ACPI_RS_SIZE(struct acpi_resource_pin_function),
|
||||||
|
ACPI_RS_SIZE(struct acpi_resource_common_serialbus),
|
||||||
|
ACPI_RS_SIZE(struct acpi_resource_pin_config),
|
||||||
|
ACPI_RS_SIZE(struct acpi_resource_pin_group),
|
||||||
|
ACPI_RS_SIZE(struct acpi_resource_pin_group_function),
|
||||||
|
ACPI_RS_SIZE(struct acpi_resource_pin_group_config),
|
||||||
};
|
};
|
||||||
|
|
||||||
const u8 acpi_gbl_aml_resource_serial_bus_sizes[] = {
|
const u8 acpi_gbl_aml_resource_serial_bus_sizes[] = {
|
||||||
|
|
|
@ -596,9 +596,7 @@ acpi_rs_convert_resource_to_aml(struct acpi_resource *resource,
|
||||||
|
|
||||||
/* Set vendor offset only if there is vendor data */
|
/* Set vendor offset only if there is vendor data */
|
||||||
|
|
||||||
if (resource->data.gpio.vendor_length) {
|
|
||||||
ACPI_SET16(target, aml_length);
|
ACPI_SET16(target, aml_length);
|
||||||
}
|
|
||||||
|
|
||||||
acpi_rs_set_resource_length(aml_length, aml);
|
acpi_rs_set_resource_length(aml_length, aml);
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -145,6 +145,82 @@ struct acpi_rsconvert_info acpi_rs_convert_gpio[18] = {
|
||||||
0},
|
0},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/*******************************************************************************
|
||||||
|
*
|
||||||
|
* acpi_rs_convert_pinfunction
|
||||||
|
*
|
||||||
|
******************************************************************************/
|
||||||
|
|
||||||
|
struct acpi_rsconvert_info acpi_rs_convert_pin_function[13] = {
|
||||||
|
{ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_PIN_FUNCTION,
|
||||||
|
ACPI_RS_SIZE(struct acpi_resource_pin_function),
|
||||||
|
ACPI_RSC_TABLE_SIZE(acpi_rs_convert_pin_function)},
|
||||||
|
|
||||||
|
{ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_PIN_FUNCTION,
|
||||||
|
sizeof(struct aml_resource_pin_function),
|
||||||
|
0},
|
||||||
|
|
||||||
|
{ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.pin_function.revision_id),
|
||||||
|
AML_OFFSET(pin_function.revision_id),
|
||||||
|
1},
|
||||||
|
|
||||||
|
{ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.pin_function.sharable),
|
||||||
|
AML_OFFSET(pin_function.flags),
|
||||||
|
0},
|
||||||
|
|
||||||
|
{ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.pin_function.pin_config),
|
||||||
|
AML_OFFSET(pin_function.pin_config),
|
||||||
|
1},
|
||||||
|
|
||||||
|
{ACPI_RSC_MOVE16, ACPI_RS_OFFSET(data.pin_function.function_number),
|
||||||
|
AML_OFFSET(pin_function.function_number),
|
||||||
|
2},
|
||||||
|
|
||||||
|
/* Pin Table */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* It is OK to use GPIO operations here because none of them refer GPIO
|
||||||
|
* structures directly but instead use offsets given here.
|
||||||
|
*/
|
||||||
|
|
||||||
|
{ACPI_RSC_COUNT_GPIO_PIN,
|
||||||
|
ACPI_RS_OFFSET(data.pin_function.pin_table_length),
|
||||||
|
AML_OFFSET(pin_function.pin_table_offset),
|
||||||
|
AML_OFFSET(pin_function.res_source_offset)},
|
||||||
|
|
||||||
|
{ACPI_RSC_MOVE_GPIO_PIN, ACPI_RS_OFFSET(data.pin_function.pin_table),
|
||||||
|
AML_OFFSET(pin_function.pin_table_offset),
|
||||||
|
0},
|
||||||
|
|
||||||
|
/* Resource Source */
|
||||||
|
|
||||||
|
{ACPI_RSC_MOVE8,
|
||||||
|
ACPI_RS_OFFSET(data.pin_function.resource_source.index),
|
||||||
|
AML_OFFSET(pin_function.res_source_index),
|
||||||
|
1},
|
||||||
|
|
||||||
|
{ACPI_RSC_COUNT_GPIO_RES,
|
||||||
|
ACPI_RS_OFFSET(data.pin_function.resource_source.string_length),
|
||||||
|
AML_OFFSET(pin_function.res_source_offset),
|
||||||
|
AML_OFFSET(pin_function.vendor_offset)},
|
||||||
|
|
||||||
|
{ACPI_RSC_MOVE_GPIO_RES,
|
||||||
|
ACPI_RS_OFFSET(data.pin_function.resource_source.string_ptr),
|
||||||
|
AML_OFFSET(pin_function.res_source_offset),
|
||||||
|
0},
|
||||||
|
|
||||||
|
/* Vendor Data */
|
||||||
|
|
||||||
|
{ACPI_RSC_COUNT_GPIO_VEN,
|
||||||
|
ACPI_RS_OFFSET(data.pin_function.vendor_length),
|
||||||
|
AML_OFFSET(pin_function.vendor_length),
|
||||||
|
1},
|
||||||
|
|
||||||
|
{ACPI_RSC_MOVE_GPIO_RES, ACPI_RS_OFFSET(data.pin_function.vendor_data),
|
||||||
|
AML_OFFSET(pin_function.vendor_offset),
|
||||||
|
0},
|
||||||
|
};
|
||||||
|
|
||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
*
|
*
|
||||||
* acpi_rs_convert_i2c_serial_bus
|
* acpi_rs_convert_i2c_serial_bus
|
||||||
|
@ -458,3 +534,300 @@ struct acpi_rsconvert_info acpi_rs_convert_uart_serial_bus[23] = {
|
||||||
AML_OFFSET(uart_serial_bus.default_baud_rate),
|
AML_OFFSET(uart_serial_bus.default_baud_rate),
|
||||||
1},
|
1},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/*******************************************************************************
|
||||||
|
*
|
||||||
|
* acpi_rs_convert_pin_config
|
||||||
|
*
|
||||||
|
******************************************************************************/
|
||||||
|
|
||||||
|
struct acpi_rsconvert_info acpi_rs_convert_pin_config[14] = {
|
||||||
|
{ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_PIN_CONFIG,
|
||||||
|
ACPI_RS_SIZE(struct acpi_resource_pin_config),
|
||||||
|
ACPI_RSC_TABLE_SIZE(acpi_rs_convert_pin_config)},
|
||||||
|
|
||||||
|
{ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_PIN_CONFIG,
|
||||||
|
sizeof(struct aml_resource_pin_config),
|
||||||
|
0},
|
||||||
|
|
||||||
|
{ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.pin_config.revision_id),
|
||||||
|
AML_OFFSET(pin_config.revision_id),
|
||||||
|
1},
|
||||||
|
|
||||||
|
{ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.pin_config.sharable),
|
||||||
|
AML_OFFSET(pin_config.flags),
|
||||||
|
0},
|
||||||
|
|
||||||
|
{ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.pin_config.producer_consumer),
|
||||||
|
AML_OFFSET(pin_config.flags),
|
||||||
|
1},
|
||||||
|
|
||||||
|
{ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.pin_config.pin_config_type),
|
||||||
|
AML_OFFSET(pin_config.pin_config_type),
|
||||||
|
1},
|
||||||
|
|
||||||
|
{ACPI_RSC_MOVE32, ACPI_RS_OFFSET(data.pin_config.pin_config_value),
|
||||||
|
AML_OFFSET(pin_config.pin_config_value),
|
||||||
|
1},
|
||||||
|
|
||||||
|
/* Pin Table */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* It is OK to use GPIO operations here because none of them refer GPIO
|
||||||
|
* structures directly but instead use offsets given here.
|
||||||
|
*/
|
||||||
|
|
||||||
|
{ACPI_RSC_COUNT_GPIO_PIN,
|
||||||
|
ACPI_RS_OFFSET(data.pin_config.pin_table_length),
|
||||||
|
AML_OFFSET(pin_config.pin_table_offset),
|
||||||
|
AML_OFFSET(pin_config.res_source_offset)},
|
||||||
|
|
||||||
|
{ACPI_RSC_MOVE_GPIO_PIN, ACPI_RS_OFFSET(data.pin_config.pin_table),
|
||||||
|
AML_OFFSET(pin_config.pin_table_offset),
|
||||||
|
0},
|
||||||
|
|
||||||
|
/* Resource Source */
|
||||||
|
|
||||||
|
{ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.pin_config.resource_source.index),
|
||||||
|
AML_OFFSET(pin_config.res_source_index),
|
||||||
|
1},
|
||||||
|
|
||||||
|
{ACPI_RSC_COUNT_GPIO_RES,
|
||||||
|
ACPI_RS_OFFSET(data.pin_config.resource_source.string_length),
|
||||||
|
AML_OFFSET(pin_config.res_source_offset),
|
||||||
|
AML_OFFSET(pin_config.vendor_offset)},
|
||||||
|
|
||||||
|
{ACPI_RSC_MOVE_GPIO_RES,
|
||||||
|
ACPI_RS_OFFSET(data.pin_config.resource_source.string_ptr),
|
||||||
|
AML_OFFSET(pin_config.res_source_offset),
|
||||||
|
0},
|
||||||
|
|
||||||
|
/* Vendor Data */
|
||||||
|
|
||||||
|
{ACPI_RSC_COUNT_GPIO_VEN, ACPI_RS_OFFSET(data.pin_config.vendor_length),
|
||||||
|
AML_OFFSET(pin_config.vendor_length),
|
||||||
|
1},
|
||||||
|
|
||||||
|
{ACPI_RSC_MOVE_GPIO_RES, ACPI_RS_OFFSET(data.pin_config.vendor_data),
|
||||||
|
AML_OFFSET(pin_config.vendor_offset),
|
||||||
|
0},
|
||||||
|
};
|
||||||
|
|
||||||
|
/*******************************************************************************
|
||||||
|
*
|
||||||
|
* acpi_rs_convert_pin_group
|
||||||
|
*
|
||||||
|
******************************************************************************/
|
||||||
|
|
||||||
|
struct acpi_rsconvert_info acpi_rs_convert_pin_group[10] = {
|
||||||
|
{ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_PIN_GROUP,
|
||||||
|
ACPI_RS_SIZE(struct acpi_resource_pin_group),
|
||||||
|
ACPI_RSC_TABLE_SIZE(acpi_rs_convert_pin_group)},
|
||||||
|
|
||||||
|
{ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_PIN_GROUP,
|
||||||
|
sizeof(struct aml_resource_pin_group),
|
||||||
|
0},
|
||||||
|
|
||||||
|
{ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.pin_group.revision_id),
|
||||||
|
AML_OFFSET(pin_group.revision_id),
|
||||||
|
1},
|
||||||
|
|
||||||
|
{ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.pin_group.producer_consumer),
|
||||||
|
AML_OFFSET(pin_group.flags),
|
||||||
|
0},
|
||||||
|
|
||||||
|
/* Pin Table */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* It is OK to use GPIO operations here because none of them refer GPIO
|
||||||
|
* structures directly but instead use offsets given here.
|
||||||
|
*/
|
||||||
|
|
||||||
|
{ACPI_RSC_COUNT_GPIO_PIN,
|
||||||
|
ACPI_RS_OFFSET(data.pin_group.pin_table_length),
|
||||||
|
AML_OFFSET(pin_group.pin_table_offset),
|
||||||
|
AML_OFFSET(pin_group.label_offset)},
|
||||||
|
|
||||||
|
{ACPI_RSC_MOVE_GPIO_PIN, ACPI_RS_OFFSET(data.pin_group.pin_table),
|
||||||
|
AML_OFFSET(pin_group.pin_table_offset),
|
||||||
|
0},
|
||||||
|
|
||||||
|
/* Resource Label */
|
||||||
|
|
||||||
|
{ACPI_RSC_COUNT_GPIO_RES,
|
||||||
|
ACPI_RS_OFFSET(data.pin_group.resource_label.string_length),
|
||||||
|
AML_OFFSET(pin_group.label_offset),
|
||||||
|
AML_OFFSET(pin_group.vendor_offset)},
|
||||||
|
|
||||||
|
{ACPI_RSC_MOVE_GPIO_RES,
|
||||||
|
ACPI_RS_OFFSET(data.pin_group.resource_label.string_ptr),
|
||||||
|
AML_OFFSET(pin_group.label_offset),
|
||||||
|
0},
|
||||||
|
|
||||||
|
/* Vendor Data */
|
||||||
|
|
||||||
|
{ACPI_RSC_COUNT_GPIO_VEN, ACPI_RS_OFFSET(data.pin_group.vendor_length),
|
||||||
|
AML_OFFSET(pin_group.vendor_length),
|
||||||
|
1},
|
||||||
|
|
||||||
|
{ACPI_RSC_MOVE_GPIO_RES, ACPI_RS_OFFSET(data.pin_group.vendor_data),
|
||||||
|
AML_OFFSET(pin_group.vendor_offset),
|
||||||
|
0},
|
||||||
|
};
|
||||||
|
|
||||||
|
/*******************************************************************************
|
||||||
|
*
|
||||||
|
* acpi_rs_convert_pin_group_function
|
||||||
|
*
|
||||||
|
******************************************************************************/
|
||||||
|
|
||||||
|
struct acpi_rsconvert_info acpi_rs_convert_pin_group_function[13] = {
|
||||||
|
{ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_PIN_GROUP_FUNCTION,
|
||||||
|
ACPI_RS_SIZE(struct acpi_resource_pin_group_function),
|
||||||
|
ACPI_RSC_TABLE_SIZE(acpi_rs_convert_pin_group_function)},
|
||||||
|
|
||||||
|
{ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_PIN_GROUP_FUNCTION,
|
||||||
|
sizeof(struct aml_resource_pin_group_function),
|
||||||
|
0},
|
||||||
|
|
||||||
|
{ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.pin_group_function.revision_id),
|
||||||
|
AML_OFFSET(pin_group_function.revision_id),
|
||||||
|
1},
|
||||||
|
|
||||||
|
{ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.pin_group_function.sharable),
|
||||||
|
AML_OFFSET(pin_group_function.flags),
|
||||||
|
0},
|
||||||
|
|
||||||
|
{ACPI_RSC_1BITFLAG,
|
||||||
|
ACPI_RS_OFFSET(data.pin_group_function.producer_consumer),
|
||||||
|
AML_OFFSET(pin_group_function.flags),
|
||||||
|
1},
|
||||||
|
|
||||||
|
{ACPI_RSC_MOVE16,
|
||||||
|
ACPI_RS_OFFSET(data.pin_group_function.function_number),
|
||||||
|
AML_OFFSET(pin_group_function.function_number),
|
||||||
|
1},
|
||||||
|
|
||||||
|
/* Resource Source */
|
||||||
|
|
||||||
|
{ACPI_RSC_MOVE8,
|
||||||
|
ACPI_RS_OFFSET(data.pin_group_function.resource_source.index),
|
||||||
|
AML_OFFSET(pin_group_function.res_source_index),
|
||||||
|
1},
|
||||||
|
|
||||||
|
{ACPI_RSC_COUNT_GPIO_RES,
|
||||||
|
ACPI_RS_OFFSET(data.pin_group_function.resource_source.string_length),
|
||||||
|
AML_OFFSET(pin_group_function.res_source_offset),
|
||||||
|
AML_OFFSET(pin_group_function.res_source_label_offset)},
|
||||||
|
|
||||||
|
{ACPI_RSC_MOVE_GPIO_RES,
|
||||||
|
ACPI_RS_OFFSET(data.pin_group_function.resource_source.string_ptr),
|
||||||
|
AML_OFFSET(pin_group_function.res_source_offset),
|
||||||
|
0},
|
||||||
|
|
||||||
|
/* Resource Source Label */
|
||||||
|
|
||||||
|
{ACPI_RSC_COUNT_GPIO_RES,
|
||||||
|
ACPI_RS_OFFSET(data.pin_group_function.resource_source_label.
|
||||||
|
string_length),
|
||||||
|
AML_OFFSET(pin_group_function.res_source_label_offset),
|
||||||
|
AML_OFFSET(pin_group_function.vendor_offset)},
|
||||||
|
|
||||||
|
{ACPI_RSC_MOVE_GPIO_RES,
|
||||||
|
ACPI_RS_OFFSET(data.pin_group_function.resource_source_label.
|
||||||
|
string_ptr),
|
||||||
|
AML_OFFSET(pin_group_function.res_source_label_offset),
|
||||||
|
0},
|
||||||
|
|
||||||
|
/* Vendor Data */
|
||||||
|
|
||||||
|
{ACPI_RSC_COUNT_GPIO_VEN,
|
||||||
|
ACPI_RS_OFFSET(data.pin_group_function.vendor_length),
|
||||||
|
AML_OFFSET(pin_group_function.vendor_length),
|
||||||
|
1},
|
||||||
|
|
||||||
|
{ACPI_RSC_MOVE_GPIO_RES,
|
||||||
|
ACPI_RS_OFFSET(data.pin_group_function.vendor_data),
|
||||||
|
AML_OFFSET(pin_group_function.vendor_offset),
|
||||||
|
0},
|
||||||
|
};
|
||||||
|
|
||||||
|
/*******************************************************************************
|
||||||
|
*
|
||||||
|
* acpi_rs_convert_pin_group_config
|
||||||
|
*
|
||||||
|
******************************************************************************/
|
||||||
|
|
||||||
|
struct acpi_rsconvert_info acpi_rs_convert_pin_group_config[14] = {
|
||||||
|
{ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_PIN_GROUP_CONFIG,
|
||||||
|
ACPI_RS_SIZE(struct acpi_resource_pin_group_config),
|
||||||
|
ACPI_RSC_TABLE_SIZE(acpi_rs_convert_pin_group_config)},
|
||||||
|
|
||||||
|
{ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_PIN_GROUP_CONFIG,
|
||||||
|
sizeof(struct aml_resource_pin_group_config),
|
||||||
|
0},
|
||||||
|
|
||||||
|
{ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.pin_group_config.revision_id),
|
||||||
|
AML_OFFSET(pin_group_config.revision_id),
|
||||||
|
1},
|
||||||
|
|
||||||
|
{ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.pin_group_config.sharable),
|
||||||
|
AML_OFFSET(pin_group_config.flags),
|
||||||
|
0},
|
||||||
|
|
||||||
|
{ACPI_RSC_1BITFLAG,
|
||||||
|
ACPI_RS_OFFSET(data.pin_group_config.producer_consumer),
|
||||||
|
AML_OFFSET(pin_group_config.flags),
|
||||||
|
1},
|
||||||
|
|
||||||
|
{ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.pin_group_config.pin_config_type),
|
||||||
|
AML_OFFSET(pin_group_config.pin_config_type),
|
||||||
|
1},
|
||||||
|
|
||||||
|
{ACPI_RSC_MOVE32,
|
||||||
|
ACPI_RS_OFFSET(data.pin_group_config.pin_config_value),
|
||||||
|
AML_OFFSET(pin_group_config.pin_config_value),
|
||||||
|
1},
|
||||||
|
|
||||||
|
/* Resource Source */
|
||||||
|
|
||||||
|
{ACPI_RSC_MOVE8,
|
||||||
|
ACPI_RS_OFFSET(data.pin_group_config.resource_source.index),
|
||||||
|
AML_OFFSET(pin_group_config.res_source_index),
|
||||||
|
1},
|
||||||
|
|
||||||
|
{ACPI_RSC_COUNT_GPIO_RES,
|
||||||
|
ACPI_RS_OFFSET(data.pin_group_config.resource_source.string_length),
|
||||||
|
AML_OFFSET(pin_group_config.res_source_offset),
|
||||||
|
AML_OFFSET(pin_group_config.res_source_label_offset)},
|
||||||
|
|
||||||
|
{ACPI_RSC_MOVE_GPIO_RES,
|
||||||
|
ACPI_RS_OFFSET(data.pin_group_config.resource_source.string_ptr),
|
||||||
|
AML_OFFSET(pin_group_config.res_source_offset),
|
||||||
|
0},
|
||||||
|
|
||||||
|
/* Resource Source Label */
|
||||||
|
|
||||||
|
{ACPI_RSC_COUNT_GPIO_RES,
|
||||||
|
ACPI_RS_OFFSET(data.pin_group_config.resource_source_label.
|
||||||
|
string_length),
|
||||||
|
AML_OFFSET(pin_group_config.res_source_label_offset),
|
||||||
|
AML_OFFSET(pin_group_config.vendor_offset)},
|
||||||
|
|
||||||
|
{ACPI_RSC_MOVE_GPIO_RES,
|
||||||
|
ACPI_RS_OFFSET(data.pin_group_config.resource_source_label.string_ptr),
|
||||||
|
AML_OFFSET(pin_group_config.res_source_label_offset),
|
||||||
|
0},
|
||||||
|
|
||||||
|
/* Vendor Data */
|
||||||
|
|
||||||
|
{ACPI_RSC_COUNT_GPIO_VEN,
|
||||||
|
ACPI_RS_OFFSET(data.pin_group_config.vendor_length),
|
||||||
|
AML_OFFSET(pin_group_config.vendor_length),
|
||||||
|
1},
|
||||||
|
|
||||||
|
{ACPI_RSC_MOVE_GPIO_RES,
|
||||||
|
ACPI_RS_OFFSET(data.pin_group_config.vendor_data),
|
||||||
|
AML_OFFSET(pin_group_config.vendor_offset),
|
||||||
|
0},
|
||||||
|
};
|
||||||
|
|
|
@ -449,8 +449,8 @@ void acpi_tb_create_local_fadt(struct acpi_table_header *table, u32 length)
|
||||||
* The 64-bit X fields are optional extensions to the original 32-bit FADT
|
* The 64-bit X fields are optional extensions to the original 32-bit FADT
|
||||||
* V1.0 fields. Even if they are present in the FADT, they are optional and
|
* V1.0 fields. Even if they are present in the FADT, they are optional and
|
||||||
* are unused if the BIOS sets them to zero. Therefore, we must copy/expand
|
* are unused if the BIOS sets them to zero. Therefore, we must copy/expand
|
||||||
* 32-bit V1.0 fields to the 64-bit X fields if the the 64-bit X field is
|
* 32-bit V1.0 fields to the 64-bit X fields if the 64-bit X field is originally
|
||||||
* originally zero.
|
* zero.
|
||||||
*
|
*
|
||||||
* For ACPI 1.0 FADTs (that contain no 64-bit addresses), all 32-bit address
|
* For ACPI 1.0 FADTs (that contain no 64-bit addresses), all 32-bit address
|
||||||
* fields are expanded to the corresponding 64-bit X fields in the internal
|
* fields are expanded to the corresponding 64-bit X fields in the internal
|
||||||
|
|
|
@ -141,9 +141,9 @@ void acpi_tb_check_dsdt_header(void)
|
||||||
*
|
*
|
||||||
* FUNCTION: acpi_tb_copy_dsdt
|
* FUNCTION: acpi_tb_copy_dsdt
|
||||||
*
|
*
|
||||||
* PARAMETERS: table_desc - Installed table to copy
|
* PARAMETERS: table_index - Index of installed table to copy
|
||||||
*
|
*
|
||||||
* RETURN: None
|
* RETURN: The copied DSDT
|
||||||
*
|
*
|
||||||
* DESCRIPTION: Implements a subsystem option to copy the DSDT to local memory.
|
* DESCRIPTION: Implements a subsystem option to copy the DSDT to local memory.
|
||||||
* Some very bad BIOSs are known to either corrupt the DSDT or
|
* Some very bad BIOSs are known to either corrupt the DSDT or
|
||||||
|
@ -239,7 +239,7 @@ acpi_tb_get_root_table_entry(u8 *table_entry, u32 table_entry_size)
|
||||||
*
|
*
|
||||||
* FUNCTION: acpi_tb_parse_root_table
|
* FUNCTION: acpi_tb_parse_root_table
|
||||||
*
|
*
|
||||||
* PARAMETERS: rsdp - Pointer to the RSDP
|
* PARAMETERS: rsdp_address - Pointer to the RSDP
|
||||||
*
|
*
|
||||||
* RETURN: Status
|
* RETURN: Status
|
||||||
*
|
*
|
||||||
|
|
|
@ -460,9 +460,11 @@ static const char *acpi_gbl_generic_notify[ACPI_GENERIC_NOTIFY_MAX + 1] = {
|
||||||
/* 09 */ "Device PLD Check",
|
/* 09 */ "Device PLD Check",
|
||||||
/* 0A */ "Reserved",
|
/* 0A */ "Reserved",
|
||||||
/* 0B */ "System Locality Update",
|
/* 0B */ "System Locality Update",
|
||||||
/* 0C */ "Shutdown Request",
|
/* 0C */ "Reserved (was previously Shutdown Request)",
|
||||||
/* Reserved in ACPI 6.0 */
|
/* Reserved in ACPI 6.0 */
|
||||||
/* 0D */ "System Resource Affinity Update"
|
/* 0D */ "System Resource Affinity Update",
|
||||||
|
/* 0E */ "Heterogeneous Memory Attributes Update"
|
||||||
|
/* ACPI 6.2 */
|
||||||
};
|
};
|
||||||
|
|
||||||
static const char *acpi_gbl_device_notify[5] = {
|
static const char *acpi_gbl_device_notify[5] = {
|
||||||
|
|
|
@ -104,13 +104,19 @@ acpi_status acpi_ut_allocate_owner_id(acpi_owner_id *owner_id)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!(acpi_gbl_owner_id_mask[j] & (1 << k))) {
|
/*
|
||||||
|
* Note: the u32 cast ensures that 1 is stored as a unsigned
|
||||||
|
* integer. Omitting the cast may result in 1 being stored as an
|
||||||
|
* int. Some compilers or runtime error detection may flag this as
|
||||||
|
* an error.
|
||||||
|
*/
|
||||||
|
if (!(acpi_gbl_owner_id_mask[j] & ((u32)1 << k))) {
|
||||||
/*
|
/*
|
||||||
* Found a free ID. The actual ID is the bit index plus one,
|
* Found a free ID. The actual ID is the bit index plus one,
|
||||||
* making zero an invalid Owner ID. Save this as the last ID
|
* making zero an invalid Owner ID. Save this as the last ID
|
||||||
* allocated and update the global ID mask.
|
* allocated and update the global ID mask.
|
||||||
*/
|
*/
|
||||||
acpi_gbl_owner_id_mask[j] |= (1 << k);
|
acpi_gbl_owner_id_mask[j] |= ((u32)1 << k);
|
||||||
|
|
||||||
acpi_gbl_last_owner_id_index = (u8)j;
|
acpi_gbl_last_owner_id_index = (u8)j;
|
||||||
acpi_gbl_next_owner_id_offset = (u8)(k + 1);
|
acpi_gbl_next_owner_id_offset = (u8)(k + 1);
|
||||||
|
@ -201,7 +207,7 @@ void acpi_ut_release_owner_id(acpi_owner_id *owner_id_ptr)
|
||||||
/* Decode ID to index/offset pair */
|
/* Decode ID to index/offset pair */
|
||||||
|
|
||||||
index = ACPI_DIV_32(owner_id);
|
index = ACPI_DIV_32(owner_id);
|
||||||
bit = 1 << ACPI_MOD_32(owner_id);
|
bit = (u32)1 << ACPI_MOD_32(owner_id);
|
||||||
|
|
||||||
/* Free the owner ID only if it is valid */
|
/* Free the owner ID only if it is valid */
|
||||||
|
|
||||||
|
|
315
drivers/acpi/acpica/utresdecode.c
Normal file
315
drivers/acpi/acpica/utresdecode.c
Normal file
|
@ -0,0 +1,315 @@
|
||||||
|
/*******************************************************************************
|
||||||
|
*
|
||||||
|
* Module Name: utresdecode - Resource descriptor keyword strings
|
||||||
|
*
|
||||||
|
******************************************************************************/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2000 - 2017, Intel Corp.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
* 1. Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions, and the following disclaimer,
|
||||||
|
* without modification.
|
||||||
|
* 2. Redistributions in binary form must reproduce at minimum a disclaimer
|
||||||
|
* substantially similar to the "NO WARRANTY" disclaimer below
|
||||||
|
* ("Disclaimer") and any redistribution must be conditioned upon
|
||||||
|
* including a substantially similar Disclaimer requirement for further
|
||||||
|
* binary redistribution.
|
||||||
|
* 3. Neither the names of the above-listed copyright holders nor the names
|
||||||
|
* of any contributors may be used to endorse or promote products derived
|
||||||
|
* from this software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* Alternatively, this software may be distributed under the terms of the
|
||||||
|
* GNU General Public License ("GPL") version 2 as published by the Free
|
||||||
|
* Software Foundation.
|
||||||
|
*
|
||||||
|
* NO WARRANTY
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
|
||||||
|
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||||
|
* HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||||
|
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||||
|
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||||
|
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
||||||
|
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
|
||||||
|
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGES.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <acpi/acpi.h>
|
||||||
|
#include "accommon.h"
|
||||||
|
#include "acresrc.h"
|
||||||
|
|
||||||
|
#define _COMPONENT ACPI_UTILITIES
|
||||||
|
ACPI_MODULE_NAME("utresdecode")
|
||||||
|
|
||||||
|
#if defined (ACPI_DEBUG_OUTPUT) || \
|
||||||
|
defined (ACPI_DISASSEMBLER) || \
|
||||||
|
defined (ACPI_DEBUGGER)
|
||||||
|
/*
|
||||||
|
* Strings used to decode resource descriptors.
|
||||||
|
* Used by both the disassembler and the debugger resource dump routines
|
||||||
|
*/
|
||||||
|
const char *acpi_gbl_bm_decode[] = {
|
||||||
|
"NotBusMaster",
|
||||||
|
"BusMaster"
|
||||||
|
};
|
||||||
|
|
||||||
|
const char *acpi_gbl_config_decode[] = {
|
||||||
|
"0 - Good Configuration",
|
||||||
|
"1 - Acceptable Configuration",
|
||||||
|
"2 - Suboptimal Configuration",
|
||||||
|
"3 - ***Invalid Configuration***",
|
||||||
|
};
|
||||||
|
|
||||||
|
const char *acpi_gbl_consume_decode[] = {
|
||||||
|
"ResourceProducer",
|
||||||
|
"ResourceConsumer"
|
||||||
|
};
|
||||||
|
|
||||||
|
const char *acpi_gbl_dec_decode[] = {
|
||||||
|
"PosDecode",
|
||||||
|
"SubDecode"
|
||||||
|
};
|
||||||
|
|
||||||
|
const char *acpi_gbl_he_decode[] = {
|
||||||
|
"Level",
|
||||||
|
"Edge"
|
||||||
|
};
|
||||||
|
|
||||||
|
const char *acpi_gbl_io_decode[] = {
|
||||||
|
"Decode10",
|
||||||
|
"Decode16"
|
||||||
|
};
|
||||||
|
|
||||||
|
const char *acpi_gbl_ll_decode[] = {
|
||||||
|
"ActiveHigh",
|
||||||
|
"ActiveLow",
|
||||||
|
"ActiveBoth",
|
||||||
|
"Reserved"
|
||||||
|
};
|
||||||
|
|
||||||
|
const char *acpi_gbl_max_decode[] = {
|
||||||
|
"MaxNotFixed",
|
||||||
|
"MaxFixed"
|
||||||
|
};
|
||||||
|
|
||||||
|
const char *acpi_gbl_mem_decode[] = {
|
||||||
|
"NonCacheable",
|
||||||
|
"Cacheable",
|
||||||
|
"WriteCombining",
|
||||||
|
"Prefetchable"
|
||||||
|
};
|
||||||
|
|
||||||
|
const char *acpi_gbl_min_decode[] = {
|
||||||
|
"MinNotFixed",
|
||||||
|
"MinFixed"
|
||||||
|
};
|
||||||
|
|
||||||
|
const char *acpi_gbl_mtp_decode[] = {
|
||||||
|
"AddressRangeMemory",
|
||||||
|
"AddressRangeReserved",
|
||||||
|
"AddressRangeACPI",
|
||||||
|
"AddressRangeNVS"
|
||||||
|
};
|
||||||
|
|
||||||
|
const char *acpi_gbl_rng_decode[] = {
|
||||||
|
"InvalidRanges",
|
||||||
|
"NonISAOnlyRanges",
|
||||||
|
"ISAOnlyRanges",
|
||||||
|
"EntireRange"
|
||||||
|
};
|
||||||
|
|
||||||
|
const char *acpi_gbl_rw_decode[] = {
|
||||||
|
"ReadOnly",
|
||||||
|
"ReadWrite"
|
||||||
|
};
|
||||||
|
|
||||||
|
const char *acpi_gbl_shr_decode[] = {
|
||||||
|
"Exclusive",
|
||||||
|
"Shared",
|
||||||
|
"ExclusiveAndWake", /* ACPI 5.0 */
|
||||||
|
"SharedAndWake" /* ACPI 5.0 */
|
||||||
|
};
|
||||||
|
|
||||||
|
const char *acpi_gbl_siz_decode[] = {
|
||||||
|
"Transfer8",
|
||||||
|
"Transfer8_16",
|
||||||
|
"Transfer16",
|
||||||
|
"InvalidSize"
|
||||||
|
};
|
||||||
|
|
||||||
|
const char *acpi_gbl_trs_decode[] = {
|
||||||
|
"DenseTranslation",
|
||||||
|
"SparseTranslation"
|
||||||
|
};
|
||||||
|
|
||||||
|
const char *acpi_gbl_ttp_decode[] = {
|
||||||
|
"TypeStatic",
|
||||||
|
"TypeTranslation"
|
||||||
|
};
|
||||||
|
|
||||||
|
const char *acpi_gbl_typ_decode[] = {
|
||||||
|
"Compatibility",
|
||||||
|
"TypeA",
|
||||||
|
"TypeB",
|
||||||
|
"TypeF"
|
||||||
|
};
|
||||||
|
|
||||||
|
const char *acpi_gbl_ppc_decode[] = {
|
||||||
|
"PullDefault",
|
||||||
|
"PullUp",
|
||||||
|
"PullDown",
|
||||||
|
"PullNone"
|
||||||
|
};
|
||||||
|
|
||||||
|
const char *acpi_gbl_ior_decode[] = {
|
||||||
|
"IoRestrictionNone",
|
||||||
|
"IoRestrictionInputOnly",
|
||||||
|
"IoRestrictionOutputOnly",
|
||||||
|
"IoRestrictionNoneAndPreserve"
|
||||||
|
};
|
||||||
|
|
||||||
|
const char *acpi_gbl_dts_decode[] = {
|
||||||
|
"Width8bit",
|
||||||
|
"Width16bit",
|
||||||
|
"Width32bit",
|
||||||
|
"Width64bit",
|
||||||
|
"Width128bit",
|
||||||
|
"Width256bit",
|
||||||
|
};
|
||||||
|
|
||||||
|
/* GPIO connection type */
|
||||||
|
|
||||||
|
const char *acpi_gbl_ct_decode[] = {
|
||||||
|
"Interrupt",
|
||||||
|
"I/O"
|
||||||
|
};
|
||||||
|
|
||||||
|
/* Serial bus type */
|
||||||
|
|
||||||
|
const char *acpi_gbl_sbt_decode[] = {
|
||||||
|
"/* UNKNOWN serial bus type */",
|
||||||
|
"I2C",
|
||||||
|
"SPI",
|
||||||
|
"UART"
|
||||||
|
};
|
||||||
|
|
||||||
|
/* I2C serial bus access mode */
|
||||||
|
|
||||||
|
const char *acpi_gbl_am_decode[] = {
|
||||||
|
"AddressingMode7Bit",
|
||||||
|
"AddressingMode10Bit"
|
||||||
|
};
|
||||||
|
|
||||||
|
/* I2C serial bus slave mode */
|
||||||
|
|
||||||
|
const char *acpi_gbl_sm_decode[] = {
|
||||||
|
"ControllerInitiated",
|
||||||
|
"DeviceInitiated"
|
||||||
|
};
|
||||||
|
|
||||||
|
/* SPI serial bus wire mode */
|
||||||
|
|
||||||
|
const char *acpi_gbl_wm_decode[] = {
|
||||||
|
"FourWireMode",
|
||||||
|
"ThreeWireMode"
|
||||||
|
};
|
||||||
|
|
||||||
|
/* SPI serial clock phase */
|
||||||
|
|
||||||
|
const char *acpi_gbl_cph_decode[] = {
|
||||||
|
"ClockPhaseFirst",
|
||||||
|
"ClockPhaseSecond"
|
||||||
|
};
|
||||||
|
|
||||||
|
/* SPI serial bus clock polarity */
|
||||||
|
|
||||||
|
const char *acpi_gbl_cpo_decode[] = {
|
||||||
|
"ClockPolarityLow",
|
||||||
|
"ClockPolarityHigh"
|
||||||
|
};
|
||||||
|
|
||||||
|
/* SPI serial bus device polarity */
|
||||||
|
|
||||||
|
const char *acpi_gbl_dp_decode[] = {
|
||||||
|
"PolarityLow",
|
||||||
|
"PolarityHigh"
|
||||||
|
};
|
||||||
|
|
||||||
|
/* UART serial bus endian */
|
||||||
|
|
||||||
|
const char *acpi_gbl_ed_decode[] = {
|
||||||
|
"LittleEndian",
|
||||||
|
"BigEndian"
|
||||||
|
};
|
||||||
|
|
||||||
|
/* UART serial bus bits per byte */
|
||||||
|
|
||||||
|
const char *acpi_gbl_bpb_decode[] = {
|
||||||
|
"DataBitsFive",
|
||||||
|
"DataBitsSix",
|
||||||
|
"DataBitsSeven",
|
||||||
|
"DataBitsEight",
|
||||||
|
"DataBitsNine",
|
||||||
|
"/* UNKNOWN Bits per byte */",
|
||||||
|
"/* UNKNOWN Bits per byte */",
|
||||||
|
"/* UNKNOWN Bits per byte */"
|
||||||
|
};
|
||||||
|
|
||||||
|
/* UART serial bus stop bits */
|
||||||
|
|
||||||
|
const char *acpi_gbl_sb_decode[] = {
|
||||||
|
"StopBitsZero",
|
||||||
|
"StopBitsOne",
|
||||||
|
"StopBitsOnePlusHalf",
|
||||||
|
"StopBitsTwo"
|
||||||
|
};
|
||||||
|
|
||||||
|
/* UART serial bus flow control */
|
||||||
|
|
||||||
|
const char *acpi_gbl_fc_decode[] = {
|
||||||
|
"FlowControlNone",
|
||||||
|
"FlowControlHardware",
|
||||||
|
"FlowControlXON",
|
||||||
|
"/* UNKNOWN flow control keyword */"
|
||||||
|
};
|
||||||
|
|
||||||
|
/* UART serial bus parity type */
|
||||||
|
|
||||||
|
const char *acpi_gbl_pt_decode[] = {
|
||||||
|
"ParityTypeNone",
|
||||||
|
"ParityTypeEven",
|
||||||
|
"ParityTypeOdd",
|
||||||
|
"ParityTypeMark",
|
||||||
|
"ParityTypeSpace",
|
||||||
|
"/* UNKNOWN parity keyword */",
|
||||||
|
"/* UNKNOWN parity keyword */",
|
||||||
|
"/* UNKNOWN parity keyword */"
|
||||||
|
};
|
||||||
|
|
||||||
|
/* pin_config type */
|
||||||
|
|
||||||
|
const char *acpi_gbl_ptyp_decode[] = {
|
||||||
|
"Default",
|
||||||
|
"Bias Pull-up",
|
||||||
|
"Bias Pull-down",
|
||||||
|
"Bias Default",
|
||||||
|
"Bias Disable",
|
||||||
|
"Bias High Impedance",
|
||||||
|
"Bias Bus Hold",
|
||||||
|
"Drive Open Drain",
|
||||||
|
"Drive Open Source",
|
||||||
|
"Drive Push Pull",
|
||||||
|
"Drive Strength",
|
||||||
|
"Slew Rate",
|
||||||
|
"Input Debounce",
|
||||||
|
"Input Schmitt Trigger",
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
|
@ -48,251 +48,6 @@
|
||||||
#define _COMPONENT ACPI_UTILITIES
|
#define _COMPONENT ACPI_UTILITIES
|
||||||
ACPI_MODULE_NAME("utresrc")
|
ACPI_MODULE_NAME("utresrc")
|
||||||
|
|
||||||
#if defined(ACPI_DEBUG_OUTPUT) || defined (ACPI_DISASSEMBLER) || defined (ACPI_DEBUGGER)
|
|
||||||
/*
|
|
||||||
* Strings used to decode resource descriptors.
|
|
||||||
* Used by both the disassembler and the debugger resource dump routines
|
|
||||||
*/
|
|
||||||
const char *acpi_gbl_bm_decode[] = {
|
|
||||||
"NotBusMaster",
|
|
||||||
"BusMaster"
|
|
||||||
};
|
|
||||||
|
|
||||||
const char *acpi_gbl_config_decode[] = {
|
|
||||||
"0 - Good Configuration",
|
|
||||||
"1 - Acceptable Configuration",
|
|
||||||
"2 - Suboptimal Configuration",
|
|
||||||
"3 - ***Invalid Configuration***",
|
|
||||||
};
|
|
||||||
|
|
||||||
const char *acpi_gbl_consume_decode[] = {
|
|
||||||
"ResourceProducer",
|
|
||||||
"ResourceConsumer"
|
|
||||||
};
|
|
||||||
|
|
||||||
const char *acpi_gbl_dec_decode[] = {
|
|
||||||
"PosDecode",
|
|
||||||
"SubDecode"
|
|
||||||
};
|
|
||||||
|
|
||||||
const char *acpi_gbl_he_decode[] = {
|
|
||||||
"Level",
|
|
||||||
"Edge"
|
|
||||||
};
|
|
||||||
|
|
||||||
const char *acpi_gbl_io_decode[] = {
|
|
||||||
"Decode10",
|
|
||||||
"Decode16"
|
|
||||||
};
|
|
||||||
|
|
||||||
const char *acpi_gbl_ll_decode[] = {
|
|
||||||
"ActiveHigh",
|
|
||||||
"ActiveLow",
|
|
||||||
"ActiveBoth",
|
|
||||||
"Reserved"
|
|
||||||
};
|
|
||||||
|
|
||||||
const char *acpi_gbl_max_decode[] = {
|
|
||||||
"MaxNotFixed",
|
|
||||||
"MaxFixed"
|
|
||||||
};
|
|
||||||
|
|
||||||
const char *acpi_gbl_mem_decode[] = {
|
|
||||||
"NonCacheable",
|
|
||||||
"Cacheable",
|
|
||||||
"WriteCombining",
|
|
||||||
"Prefetchable"
|
|
||||||
};
|
|
||||||
|
|
||||||
const char *acpi_gbl_min_decode[] = {
|
|
||||||
"MinNotFixed",
|
|
||||||
"MinFixed"
|
|
||||||
};
|
|
||||||
|
|
||||||
const char *acpi_gbl_mtp_decode[] = {
|
|
||||||
"AddressRangeMemory",
|
|
||||||
"AddressRangeReserved",
|
|
||||||
"AddressRangeACPI",
|
|
||||||
"AddressRangeNVS"
|
|
||||||
};
|
|
||||||
|
|
||||||
const char *acpi_gbl_rng_decode[] = {
|
|
||||||
"InvalidRanges",
|
|
||||||
"NonISAOnlyRanges",
|
|
||||||
"ISAOnlyRanges",
|
|
||||||
"EntireRange"
|
|
||||||
};
|
|
||||||
|
|
||||||
const char *acpi_gbl_rw_decode[] = {
|
|
||||||
"ReadOnly",
|
|
||||||
"ReadWrite"
|
|
||||||
};
|
|
||||||
|
|
||||||
const char *acpi_gbl_shr_decode[] = {
|
|
||||||
"Exclusive",
|
|
||||||
"Shared",
|
|
||||||
"ExclusiveAndWake", /* ACPI 5.0 */
|
|
||||||
"SharedAndWake" /* ACPI 5.0 */
|
|
||||||
};
|
|
||||||
|
|
||||||
const char *acpi_gbl_siz_decode[] = {
|
|
||||||
"Transfer8",
|
|
||||||
"Transfer8_16",
|
|
||||||
"Transfer16",
|
|
||||||
"InvalidSize"
|
|
||||||
};
|
|
||||||
|
|
||||||
const char *acpi_gbl_trs_decode[] = {
|
|
||||||
"DenseTranslation",
|
|
||||||
"SparseTranslation"
|
|
||||||
};
|
|
||||||
|
|
||||||
const char *acpi_gbl_ttp_decode[] = {
|
|
||||||
"TypeStatic",
|
|
||||||
"TypeTranslation"
|
|
||||||
};
|
|
||||||
|
|
||||||
const char *acpi_gbl_typ_decode[] = {
|
|
||||||
"Compatibility",
|
|
||||||
"TypeA",
|
|
||||||
"TypeB",
|
|
||||||
"TypeF"
|
|
||||||
};
|
|
||||||
|
|
||||||
const char *acpi_gbl_ppc_decode[] = {
|
|
||||||
"PullDefault",
|
|
||||||
"PullUp",
|
|
||||||
"PullDown",
|
|
||||||
"PullNone"
|
|
||||||
};
|
|
||||||
|
|
||||||
const char *acpi_gbl_ior_decode[] = {
|
|
||||||
"IoRestrictionNone",
|
|
||||||
"IoRestrictionInputOnly",
|
|
||||||
"IoRestrictionOutputOnly",
|
|
||||||
"IoRestrictionNoneAndPreserve"
|
|
||||||
};
|
|
||||||
|
|
||||||
const char *acpi_gbl_dts_decode[] = {
|
|
||||||
"Width8bit",
|
|
||||||
"Width16bit",
|
|
||||||
"Width32bit",
|
|
||||||
"Width64bit",
|
|
||||||
"Width128bit",
|
|
||||||
"Width256bit",
|
|
||||||
};
|
|
||||||
|
|
||||||
/* GPIO connection type */
|
|
||||||
|
|
||||||
const char *acpi_gbl_ct_decode[] = {
|
|
||||||
"Interrupt",
|
|
||||||
"I/O"
|
|
||||||
};
|
|
||||||
|
|
||||||
/* Serial bus type */
|
|
||||||
|
|
||||||
const char *acpi_gbl_sbt_decode[] = {
|
|
||||||
"/* UNKNOWN serial bus type */",
|
|
||||||
"I2C",
|
|
||||||
"SPI",
|
|
||||||
"UART"
|
|
||||||
};
|
|
||||||
|
|
||||||
/* I2C serial bus access mode */
|
|
||||||
|
|
||||||
const char *acpi_gbl_am_decode[] = {
|
|
||||||
"AddressingMode7Bit",
|
|
||||||
"AddressingMode10Bit"
|
|
||||||
};
|
|
||||||
|
|
||||||
/* I2C serial bus slave mode */
|
|
||||||
|
|
||||||
const char *acpi_gbl_sm_decode[] = {
|
|
||||||
"ControllerInitiated",
|
|
||||||
"DeviceInitiated"
|
|
||||||
};
|
|
||||||
|
|
||||||
/* SPI serial bus wire mode */
|
|
||||||
|
|
||||||
const char *acpi_gbl_wm_decode[] = {
|
|
||||||
"FourWireMode",
|
|
||||||
"ThreeWireMode"
|
|
||||||
};
|
|
||||||
|
|
||||||
/* SPI serial clock phase */
|
|
||||||
|
|
||||||
const char *acpi_gbl_cph_decode[] = {
|
|
||||||
"ClockPhaseFirst",
|
|
||||||
"ClockPhaseSecond"
|
|
||||||
};
|
|
||||||
|
|
||||||
/* SPI serial bus clock polarity */
|
|
||||||
|
|
||||||
const char *acpi_gbl_cpo_decode[] = {
|
|
||||||
"ClockPolarityLow",
|
|
||||||
"ClockPolarityHigh"
|
|
||||||
};
|
|
||||||
|
|
||||||
/* SPI serial bus device polarity */
|
|
||||||
|
|
||||||
const char *acpi_gbl_dp_decode[] = {
|
|
||||||
"PolarityLow",
|
|
||||||
"PolarityHigh"
|
|
||||||
};
|
|
||||||
|
|
||||||
/* UART serial bus endian */
|
|
||||||
|
|
||||||
const char *acpi_gbl_ed_decode[] = {
|
|
||||||
"LittleEndian",
|
|
||||||
"BigEndian"
|
|
||||||
};
|
|
||||||
|
|
||||||
/* UART serial bus bits per byte */
|
|
||||||
|
|
||||||
const char *acpi_gbl_bpb_decode[] = {
|
|
||||||
"DataBitsFive",
|
|
||||||
"DataBitsSix",
|
|
||||||
"DataBitsSeven",
|
|
||||||
"DataBitsEight",
|
|
||||||
"DataBitsNine",
|
|
||||||
"/* UNKNOWN Bits per byte */",
|
|
||||||
"/* UNKNOWN Bits per byte */",
|
|
||||||
"/* UNKNOWN Bits per byte */"
|
|
||||||
};
|
|
||||||
|
|
||||||
/* UART serial bus stop bits */
|
|
||||||
|
|
||||||
const char *acpi_gbl_sb_decode[] = {
|
|
||||||
"StopBitsZero",
|
|
||||||
"StopBitsOne",
|
|
||||||
"StopBitsOnePlusHalf",
|
|
||||||
"StopBitsTwo"
|
|
||||||
};
|
|
||||||
|
|
||||||
/* UART serial bus flow control */
|
|
||||||
|
|
||||||
const char *acpi_gbl_fc_decode[] = {
|
|
||||||
"FlowControlNone",
|
|
||||||
"FlowControlHardware",
|
|
||||||
"FlowControlXON",
|
|
||||||
"/* UNKNOWN flow control keyword */"
|
|
||||||
};
|
|
||||||
|
|
||||||
/* UART serial bus parity type */
|
|
||||||
|
|
||||||
const char *acpi_gbl_pt_decode[] = {
|
|
||||||
"ParityTypeNone",
|
|
||||||
"ParityTypeEven",
|
|
||||||
"ParityTypeOdd",
|
|
||||||
"ParityTypeMark",
|
|
||||||
"ParityTypeSpace",
|
|
||||||
"/* UNKNOWN parity keyword */",
|
|
||||||
"/* UNKNOWN parity keyword */",
|
|
||||||
"/* UNKNOWN parity keyword */"
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Base sizes of the raw AML resource descriptors, indexed by resource type.
|
* Base sizes of the raw AML resource descriptors, indexed by resource type.
|
||||||
* Zero indicates a reserved (and therefore invalid) resource type.
|
* Zero indicates a reserved (and therefore invalid) resource type.
|
||||||
|
@ -332,8 +87,12 @@ const u8 acpi_gbl_resource_aml_sizes[] = {
|
||||||
ACPI_AML_SIZE_LARGE(struct aml_resource_address64),
|
ACPI_AML_SIZE_LARGE(struct aml_resource_address64),
|
||||||
ACPI_AML_SIZE_LARGE(struct aml_resource_extended_address64),
|
ACPI_AML_SIZE_LARGE(struct aml_resource_extended_address64),
|
||||||
ACPI_AML_SIZE_LARGE(struct aml_resource_gpio),
|
ACPI_AML_SIZE_LARGE(struct aml_resource_gpio),
|
||||||
0,
|
ACPI_AML_SIZE_LARGE(struct aml_resource_pin_function),
|
||||||
ACPI_AML_SIZE_LARGE(struct aml_resource_common_serialbus),
|
ACPI_AML_SIZE_LARGE(struct aml_resource_common_serialbus),
|
||||||
|
ACPI_AML_SIZE_LARGE(struct aml_resource_pin_config),
|
||||||
|
ACPI_AML_SIZE_LARGE(struct aml_resource_pin_group),
|
||||||
|
ACPI_AML_SIZE_LARGE(struct aml_resource_pin_group_function),
|
||||||
|
ACPI_AML_SIZE_LARGE(struct aml_resource_pin_group_config),
|
||||||
};
|
};
|
||||||
|
|
||||||
const u8 acpi_gbl_resource_aml_serial_bus_sizes[] = {
|
const u8 acpi_gbl_resource_aml_serial_bus_sizes[] = {
|
||||||
|
@ -384,8 +143,12 @@ static const u8 acpi_gbl_resource_types[] = {
|
||||||
ACPI_VARIABLE_LENGTH, /* 0A Qword* address */
|
ACPI_VARIABLE_LENGTH, /* 0A Qword* address */
|
||||||
ACPI_FIXED_LENGTH, /* 0B Extended* address */
|
ACPI_FIXED_LENGTH, /* 0B Extended* address */
|
||||||
ACPI_VARIABLE_LENGTH, /* 0C Gpio* */
|
ACPI_VARIABLE_LENGTH, /* 0C Gpio* */
|
||||||
0,
|
ACPI_VARIABLE_LENGTH, /* 0D pin_function */
|
||||||
ACPI_VARIABLE_LENGTH /* 0E *serial_bus */
|
ACPI_VARIABLE_LENGTH, /* 0E *serial_bus */
|
||||||
|
ACPI_VARIABLE_LENGTH, /* 0F pin_config */
|
||||||
|
ACPI_VARIABLE_LENGTH, /* 10 pin_group */
|
||||||
|
ACPI_VARIABLE_LENGTH, /* 11 pin_group_function */
|
||||||
|
ACPI_VARIABLE_LENGTH, /* 12 pin_group_config */
|
||||||
};
|
};
|
||||||
|
|
||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
|
|
|
@ -151,6 +151,8 @@ acpi_acquire_mutex(acpi_handle handle, acpi_string pathname, u16 timeout)
|
||||||
return (status);
|
return (status);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ACPI_EXPORT_SYMBOL(acpi_acquire_mutex)
|
||||||
|
|
||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
*
|
*
|
||||||
* FUNCTION: acpi_release_mutex
|
* FUNCTION: acpi_release_mutex
|
||||||
|
@ -167,7 +169,6 @@ acpi_acquire_mutex(acpi_handle handle, acpi_string pathname, u16 timeout)
|
||||||
* not both.
|
* not both.
|
||||||
*
|
*
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
|
|
||||||
acpi_status acpi_release_mutex(acpi_handle handle, acpi_string pathname)
|
acpi_status acpi_release_mutex(acpi_handle handle, acpi_string pathname)
|
||||||
{
|
{
|
||||||
acpi_status status;
|
acpi_status status;
|
||||||
|
@ -185,3 +186,5 @@ acpi_status acpi_release_mutex(acpi_handle handle, acpi_string pathname)
|
||||||
acpi_os_release_mutex(mutex_obj->mutex.os_mutex);
|
acpi_os_release_mutex(mutex_obj->mutex.os_mutex);
|
||||||
return (AE_OK);
|
return (AE_OK);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ACPI_EXPORT_SYMBOL(acpi_release_mutex)
|
||||||
|
|
|
@ -564,12 +564,12 @@ static int crb_acpi_add(struct acpi_device *device)
|
||||||
sm == ACPI_TPM2_COMMAND_BUFFER_WITH_START_METHOD)
|
sm == ACPI_TPM2_COMMAND_BUFFER_WITH_START_METHOD)
|
||||||
priv->flags |= CRB_FL_ACPI_START;
|
priv->flags |= CRB_FL_ACPI_START;
|
||||||
|
|
||||||
if (sm == ACPI_TPM2_COMMAND_BUFFER_WITH_SMC) {
|
if (sm == ACPI_TPM2_COMMAND_BUFFER_WITH_ARM_SMC) {
|
||||||
if (buf->header.length < (sizeof(*buf) + sizeof(*crb_smc))) {
|
if (buf->header.length < (sizeof(*buf) + sizeof(*crb_smc))) {
|
||||||
dev_err(dev,
|
dev_err(dev,
|
||||||
FW_BUG "TPM2 ACPI table has wrong size %u for start method type %d\n",
|
FW_BUG "TPM2 ACPI table has wrong size %u for start method type %d\n",
|
||||||
buf->header.length,
|
buf->header.length,
|
||||||
ACPI_TPM2_COMMAND_BUFFER_WITH_SMC);
|
ACPI_TPM2_COMMAND_BUFFER_WITH_ARM_SMC);
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
crb_smc = ACPI_ADD_PTR(struct tpm2_crb_smc, buf, sizeof(*buf));
|
crb_smc = ACPI_ADD_PTR(struct tpm2_crb_smc, buf, sizeof(*buf));
|
||||||
|
|
|
@ -203,7 +203,7 @@ static irqreturn_t pcc_mbox_irq(int irq, void *p)
|
||||||
struct acpi_pcct_hw_reduced_type2 *pcct2_ss = chan->con_priv;
|
struct acpi_pcct_hw_reduced_type2 *pcct2_ss = chan->con_priv;
|
||||||
u32 id = chan - pcc_mbox_channels;
|
u32 id = chan - pcc_mbox_channels;
|
||||||
|
|
||||||
doorbell_ack = &pcct2_ss->doorbell_ack_register;
|
doorbell_ack = &pcct2_ss->platform_ack_register;
|
||||||
doorbell_ack_preserve = pcct2_ss->ack_preserve_mask;
|
doorbell_ack_preserve = pcct2_ss->ack_preserve_mask;
|
||||||
doorbell_ack_write = pcct2_ss->ack_write_mask;
|
doorbell_ack_write = pcct2_ss->ack_write_mask;
|
||||||
|
|
||||||
|
@ -416,11 +416,11 @@ static int parse_pcc_subspace(struct acpi_subtable_header *header,
|
||||||
static int pcc_parse_subspace_irq(int id,
|
static int pcc_parse_subspace_irq(int id,
|
||||||
struct acpi_pcct_hw_reduced *pcct_ss)
|
struct acpi_pcct_hw_reduced *pcct_ss)
|
||||||
{
|
{
|
||||||
pcc_doorbell_irq[id] = pcc_map_interrupt(pcct_ss->doorbell_interrupt,
|
pcc_doorbell_irq[id] = pcc_map_interrupt(pcct_ss->platform_interrupt,
|
||||||
(u32)pcct_ss->flags);
|
(u32)pcct_ss->flags);
|
||||||
if (pcc_doorbell_irq[id] <= 0) {
|
if (pcc_doorbell_irq[id] <= 0) {
|
||||||
pr_err("PCC GSI %d not registered\n",
|
pr_err("PCC GSI %d not registered\n",
|
||||||
pcct_ss->doorbell_interrupt);
|
pcct_ss->platform_interrupt);
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -429,8 +429,8 @@ static int pcc_parse_subspace_irq(int id,
|
||||||
struct acpi_pcct_hw_reduced_type2 *pcct2_ss = (void *)pcct_ss;
|
struct acpi_pcct_hw_reduced_type2 *pcct2_ss = (void *)pcct_ss;
|
||||||
|
|
||||||
pcc_doorbell_ack_vaddr[id] = acpi_os_ioremap(
|
pcc_doorbell_ack_vaddr[id] = acpi_os_ioremap(
|
||||||
pcct2_ss->doorbell_ack_register.address,
|
pcct2_ss->platform_ack_register.address,
|
||||||
pcct2_ss->doorbell_ack_register.bit_width / 8);
|
pcct2_ss->platform_ack_register.bit_width / 8);
|
||||||
if (!pcc_doorbell_ack_vaddr[id]) {
|
if (!pcc_doorbell_ack_vaddr[id]) {
|
||||||
pr_err("Failed to ioremap PCC ACK register\n");
|
pr_err("Failed to ioremap PCC ACK register\n");
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
|
|
@ -46,7 +46,7 @@
|
||||||
|
|
||||||
/* Current ACPICA subsystem version in YYYYMMDD format */
|
/* Current ACPICA subsystem version in YYYYMMDD format */
|
||||||
|
|
||||||
#define ACPI_CA_VERSION 0x20170303
|
#define ACPI_CA_VERSION 0x20170531
|
||||||
|
|
||||||
#include <acpi/acconfig.h>
|
#include <acpi/acconfig.h>
|
||||||
#include <acpi/actypes.h>
|
#include <acpi/actypes.h>
|
||||||
|
|
|
@ -289,6 +289,11 @@ union acpi_resource_attribute {
|
||||||
u8 type_specific;
|
u8 type_specific;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct acpi_resource_label {
|
||||||
|
u16 string_length;
|
||||||
|
char *string_ptr;
|
||||||
|
};
|
||||||
|
|
||||||
struct acpi_resource_source {
|
struct acpi_resource_source {
|
||||||
u8 index;
|
u8 index;
|
||||||
u16 string_length;
|
u16 string_length;
|
||||||
|
@ -534,6 +539,81 @@ struct acpi_resource_uart_serialbus {
|
||||||
#define ACPI_UART_CLEAR_TO_SEND (1<<6)
|
#define ACPI_UART_CLEAR_TO_SEND (1<<6)
|
||||||
#define ACPI_UART_REQUEST_TO_SEND (1<<7)
|
#define ACPI_UART_REQUEST_TO_SEND (1<<7)
|
||||||
|
|
||||||
|
struct acpi_resource_pin_function {
|
||||||
|
u8 revision_id;
|
||||||
|
u8 pin_config;
|
||||||
|
u8 sharable; /* For values, see Interrupt Attributes above */
|
||||||
|
u16 function_number;
|
||||||
|
u16 pin_table_length;
|
||||||
|
u16 vendor_length;
|
||||||
|
struct acpi_resource_source resource_source;
|
||||||
|
u16 *pin_table;
|
||||||
|
u8 *vendor_data;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct acpi_resource_pin_config {
|
||||||
|
u8 revision_id;
|
||||||
|
u8 producer_consumer; /* For values, see Producer/Consumer above */
|
||||||
|
u8 sharable; /* For values, see Interrupt Attributes above */
|
||||||
|
u8 pin_config_type;
|
||||||
|
u32 pin_config_value;
|
||||||
|
u16 pin_table_length;
|
||||||
|
u16 vendor_length;
|
||||||
|
struct acpi_resource_source resource_source;
|
||||||
|
u16 *pin_table;
|
||||||
|
u8 *vendor_data;
|
||||||
|
};
|
||||||
|
|
||||||
|
/* Values for pin_config_type field above */
|
||||||
|
|
||||||
|
#define ACPI_PIN_CONFIG_DEFAULT 0
|
||||||
|
#define ACPI_PIN_CONFIG_BIAS_PULL_UP 1
|
||||||
|
#define ACPI_PIN_CONFIG_BIAS_PULL_DOWN 2
|
||||||
|
#define ACPI_PIN_CONFIG_BIAS_DEFAULT 3
|
||||||
|
#define ACPI_PIN_CONFIG_BIAS_DISABLE 4
|
||||||
|
#define ACPI_PIN_CONFIG_BIAS_HIGH_IMPEDANCE 5
|
||||||
|
#define ACPI_PIN_CONFIG_BIAS_BUS_HOLD 6
|
||||||
|
#define ACPI_PIN_CONFIG_DRIVE_OPEN_DRAIN 7
|
||||||
|
#define ACPI_PIN_CONFIG_DRIVE_OPEN_SOURCE 8
|
||||||
|
#define ACPI_PIN_CONFIG_DRIVE_PUSH_PULL 9
|
||||||
|
#define ACPI_PIN_CONFIG_DRIVE_STRENGTH 10
|
||||||
|
#define ACPI_PIN_CONFIG_SLEW_RATE 11
|
||||||
|
#define ACPI_PIN_CONFIG_INPUT_DEBOUNCE 12
|
||||||
|
#define ACPI_PIN_CONFIG_INPUT_SCHMITT_TRIGGER 13
|
||||||
|
|
||||||
|
struct acpi_resource_pin_group {
|
||||||
|
u8 revision_id;
|
||||||
|
u8 producer_consumer; /* For values, see Producer/Consumer above */
|
||||||
|
u16 pin_table_length;
|
||||||
|
u16 vendor_length;
|
||||||
|
u16 *pin_table;
|
||||||
|
struct acpi_resource_label resource_label;
|
||||||
|
u8 *vendor_data;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct acpi_resource_pin_group_function {
|
||||||
|
u8 revision_id;
|
||||||
|
u8 producer_consumer; /* For values, see Producer/Consumer above */
|
||||||
|
u8 sharable; /* For values, see Interrupt Attributes above */
|
||||||
|
u16 function_number;
|
||||||
|
u16 vendor_length;
|
||||||
|
struct acpi_resource_source resource_source;
|
||||||
|
struct acpi_resource_label resource_source_label;
|
||||||
|
u8 *vendor_data;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct acpi_resource_pin_group_config {
|
||||||
|
u8 revision_id;
|
||||||
|
u8 producer_consumer; /* For values, see Producer/Consumer above */
|
||||||
|
u8 sharable; /* For values, see Interrupt Attributes above */
|
||||||
|
u8 pin_config_type; /* For values, see pin_config_type above */
|
||||||
|
u32 pin_config_value;
|
||||||
|
u16 vendor_length;
|
||||||
|
struct acpi_resource_source resource_source;
|
||||||
|
struct acpi_resource_label resource_source_label;
|
||||||
|
u8 *vendor_data;
|
||||||
|
};
|
||||||
|
|
||||||
/* ACPI_RESOURCE_TYPEs */
|
/* ACPI_RESOURCE_TYPEs */
|
||||||
|
|
||||||
#define ACPI_RESOURCE_TYPE_IRQ 0
|
#define ACPI_RESOURCE_TYPE_IRQ 0
|
||||||
|
@ -556,7 +636,12 @@ struct acpi_resource_uart_serialbus {
|
||||||
#define ACPI_RESOURCE_TYPE_GPIO 17 /* ACPI 5.0 */
|
#define ACPI_RESOURCE_TYPE_GPIO 17 /* ACPI 5.0 */
|
||||||
#define ACPI_RESOURCE_TYPE_FIXED_DMA 18 /* ACPI 5.0 */
|
#define ACPI_RESOURCE_TYPE_FIXED_DMA 18 /* ACPI 5.0 */
|
||||||
#define ACPI_RESOURCE_TYPE_SERIAL_BUS 19 /* ACPI 5.0 */
|
#define ACPI_RESOURCE_TYPE_SERIAL_BUS 19 /* ACPI 5.0 */
|
||||||
#define ACPI_RESOURCE_TYPE_MAX 19
|
#define ACPI_RESOURCE_TYPE_PIN_FUNCTION 20 /* ACPI 6.2 */
|
||||||
|
#define ACPI_RESOURCE_TYPE_PIN_CONFIG 21 /* ACPI 6.2 */
|
||||||
|
#define ACPI_RESOURCE_TYPE_PIN_GROUP 22 /* ACPI 6.2 */
|
||||||
|
#define ACPI_RESOURCE_TYPE_PIN_GROUP_FUNCTION 23 /* ACPI 6.2 */
|
||||||
|
#define ACPI_RESOURCE_TYPE_PIN_GROUP_CONFIG 24 /* ACPI 6.2 */
|
||||||
|
#define ACPI_RESOURCE_TYPE_MAX 24
|
||||||
|
|
||||||
/* Master union for resource descriptors */
|
/* Master union for resource descriptors */
|
||||||
|
|
||||||
|
@ -584,6 +669,11 @@ union acpi_resource_data {
|
||||||
struct acpi_resource_spi_serialbus spi_serial_bus;
|
struct acpi_resource_spi_serialbus spi_serial_bus;
|
||||||
struct acpi_resource_uart_serialbus uart_serial_bus;
|
struct acpi_resource_uart_serialbus uart_serial_bus;
|
||||||
struct acpi_resource_common_serialbus common_serial_bus;
|
struct acpi_resource_common_serialbus common_serial_bus;
|
||||||
|
struct acpi_resource_pin_function pin_function;
|
||||||
|
struct acpi_resource_pin_config pin_config;
|
||||||
|
struct acpi_resource_pin_group pin_group;
|
||||||
|
struct acpi_resource_pin_group_function pin_group_function;
|
||||||
|
struct acpi_resource_pin_group_config pin_group_config;
|
||||||
|
|
||||||
/* Common fields */
|
/* Common fields */
|
||||||
|
|
||||||
|
|
|
@ -65,9 +65,11 @@
|
||||||
#define ACPI_SIG_ECDT "ECDT" /* Embedded Controller Boot Resources Table */
|
#define ACPI_SIG_ECDT "ECDT" /* Embedded Controller Boot Resources Table */
|
||||||
#define ACPI_SIG_EINJ "EINJ" /* Error Injection table */
|
#define ACPI_SIG_EINJ "EINJ" /* Error Injection table */
|
||||||
#define ACPI_SIG_ERST "ERST" /* Error Record Serialization Table */
|
#define ACPI_SIG_ERST "ERST" /* Error Record Serialization Table */
|
||||||
|
#define ACPI_SIG_HMAT "HMAT" /* Heterogeneous Memory Attributes Table */
|
||||||
#define ACPI_SIG_HEST "HEST" /* Hardware Error Source Table */
|
#define ACPI_SIG_HEST "HEST" /* Hardware Error Source Table */
|
||||||
#define ACPI_SIG_MADT "APIC" /* Multiple APIC Description Table */
|
#define ACPI_SIG_MADT "APIC" /* Multiple APIC Description Table */
|
||||||
#define ACPI_SIG_MSCT "MSCT" /* Maximum System Characteristics Table */
|
#define ACPI_SIG_MSCT "MSCT" /* Maximum System Characteristics Table */
|
||||||
|
#define ACPI_SIG_PPTT "PPTT" /* Processor Properties Topology Table */
|
||||||
#define ACPI_SIG_SBST "SBST" /* Smart Battery Specification Table */
|
#define ACPI_SIG_SBST "SBST" /* Smart Battery Specification Table */
|
||||||
#define ACPI_SIG_SLIT "SLIT" /* System Locality Distance Information Table */
|
#define ACPI_SIG_SLIT "SLIT" /* System Locality Distance Information Table */
|
||||||
#define ACPI_SIG_SRAT "SRAT" /* System Resource Affinity Table */
|
#define ACPI_SIG_SRAT "SRAT" /* System Resource Affinity Table */
|
||||||
|
@ -430,7 +432,8 @@ enum acpi_hest_types {
|
||||||
ACPI_HEST_TYPE_AER_BRIDGE = 8,
|
ACPI_HEST_TYPE_AER_BRIDGE = 8,
|
||||||
ACPI_HEST_TYPE_GENERIC_ERROR = 9,
|
ACPI_HEST_TYPE_GENERIC_ERROR = 9,
|
||||||
ACPI_HEST_TYPE_GENERIC_ERROR_V2 = 10,
|
ACPI_HEST_TYPE_GENERIC_ERROR_V2 = 10,
|
||||||
ACPI_HEST_TYPE_RESERVED = 11 /* 11 and greater are reserved */
|
ACPI_HEST_TYPE_IA32_DEFERRED_CHECK = 11,
|
||||||
|
ACPI_HEST_TYPE_RESERVED = 12 /* 12 and greater are reserved */
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -476,6 +479,7 @@ struct acpi_hest_aer_common {
|
||||||
|
|
||||||
#define ACPI_HEST_FIRMWARE_FIRST (1)
|
#define ACPI_HEST_FIRMWARE_FIRST (1)
|
||||||
#define ACPI_HEST_GLOBAL (1<<1)
|
#define ACPI_HEST_GLOBAL (1<<1)
|
||||||
|
#define ACPI_HEST_GHES_ASSIST (1<<2)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Macros to access the bus/segment numbers in Bus field above:
|
* Macros to access the bus/segment numbers in Bus field above:
|
||||||
|
@ -513,7 +517,8 @@ enum acpi_hest_notify_types {
|
||||||
ACPI_HEST_NOTIFY_SEA = 8, /* ACPI 6.1 */
|
ACPI_HEST_NOTIFY_SEA = 8, /* ACPI 6.1 */
|
||||||
ACPI_HEST_NOTIFY_SEI = 9, /* ACPI 6.1 */
|
ACPI_HEST_NOTIFY_SEI = 9, /* ACPI 6.1 */
|
||||||
ACPI_HEST_NOTIFY_GSIV = 10, /* ACPI 6.1 */
|
ACPI_HEST_NOTIFY_GSIV = 10, /* ACPI 6.1 */
|
||||||
ACPI_HEST_NOTIFY_RESERVED = 11 /* 11 and greater are reserved */
|
ACPI_HEST_NOTIFY_SOFTWARE_DELEGATED = 11, /* ACPI 6.2 */
|
||||||
|
ACPI_HEST_NOTIFY_RESERVED = 12 /* 12 and greater are reserved */
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Values for config_write_enable bitfield above */
|
/* Values for config_write_enable bitfield above */
|
||||||
|
@ -534,7 +539,7 @@ enum acpi_hest_notify_types {
|
||||||
struct acpi_hest_ia_machine_check {
|
struct acpi_hest_ia_machine_check {
|
||||||
struct acpi_hest_header header;
|
struct acpi_hest_header header;
|
||||||
u16 reserved1;
|
u16 reserved1;
|
||||||
u8 flags;
|
u8 flags; /* See flags ACPI_HEST_GLOBAL, etc. above */
|
||||||
u8 enabled;
|
u8 enabled;
|
||||||
u32 records_to_preallocate;
|
u32 records_to_preallocate;
|
||||||
u32 max_sections_per_record;
|
u32 max_sections_per_record;
|
||||||
|
@ -549,7 +554,7 @@ struct acpi_hest_ia_machine_check {
|
||||||
struct acpi_hest_ia_corrected {
|
struct acpi_hest_ia_corrected {
|
||||||
struct acpi_hest_header header;
|
struct acpi_hest_header header;
|
||||||
u16 reserved1;
|
u16 reserved1;
|
||||||
u8 flags;
|
u8 flags; /* See flags ACPI_HEST_GLOBAL, etc. above */
|
||||||
u8 enabled;
|
u8 enabled;
|
||||||
u32 records_to_preallocate;
|
u32 records_to_preallocate;
|
||||||
u32 max_sections_per_record;
|
u32 max_sections_per_record;
|
||||||
|
@ -686,6 +691,136 @@ struct acpi_hest_generic_data_v300 {
|
||||||
#define ACPI_HEST_GEN_VALID_FRU_STRING (1<<1)
|
#define ACPI_HEST_GEN_VALID_FRU_STRING (1<<1)
|
||||||
#define ACPI_HEST_GEN_VALID_TIMESTAMP (1<<2)
|
#define ACPI_HEST_GEN_VALID_TIMESTAMP (1<<2)
|
||||||
|
|
||||||
|
/* 11: IA32 Deferred Machine Check Exception (ACPI 6.2) */
|
||||||
|
|
||||||
|
struct acpi_hest_ia_deferred_check {
|
||||||
|
struct acpi_hest_header header;
|
||||||
|
u16 reserved1;
|
||||||
|
u8 flags; /* See flags ACPI_HEST_GLOBAL, etc. above */
|
||||||
|
u8 enabled;
|
||||||
|
u32 records_to_preallocate;
|
||||||
|
u32 max_sections_per_record;
|
||||||
|
struct acpi_hest_notify notify;
|
||||||
|
u8 num_hardware_banks;
|
||||||
|
u8 reserved2[3];
|
||||||
|
};
|
||||||
|
|
||||||
|
/*******************************************************************************
|
||||||
|
*
|
||||||
|
* HMAT - Heterogeneous Memory Attributes Table (ACPI 6.2)
|
||||||
|
* Version 1
|
||||||
|
*
|
||||||
|
******************************************************************************/
|
||||||
|
|
||||||
|
struct acpi_table_hmat {
|
||||||
|
struct acpi_table_header header; /* Common ACPI table header */
|
||||||
|
u32 reserved;
|
||||||
|
};
|
||||||
|
|
||||||
|
/* Values for HMAT structure types */
|
||||||
|
|
||||||
|
enum acpi_hmat_type {
|
||||||
|
ACPI_HMAT_TYPE_ADDRESS_RANGE = 0, /* Memory subystem address range */
|
||||||
|
ACPI_HMAT_TYPE_LOCALITY = 1, /* System locality latency and bandwidth information */
|
||||||
|
ACPI_HMAT_TYPE_CACHE = 2, /* Memory side cache information */
|
||||||
|
ACPI_HMAT_TYPE_RESERVED = 3 /* 3 and greater are reserved */
|
||||||
|
};
|
||||||
|
|
||||||
|
struct acpi_hmat_structure {
|
||||||
|
u16 type;
|
||||||
|
u16 reserved;
|
||||||
|
u32 length;
|
||||||
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
* HMAT Structures, correspond to Type in struct acpi_hmat_structure
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* 0: Memory subystem address range */
|
||||||
|
|
||||||
|
struct acpi_hmat_address_range {
|
||||||
|
struct acpi_hmat_structure header;
|
||||||
|
u16 flags;
|
||||||
|
u16 reserved1;
|
||||||
|
u32 processor_PD; /* Processor proximity domain */
|
||||||
|
u32 memory_PD; /* Memory proximity domain */
|
||||||
|
u32 reserved2;
|
||||||
|
u64 physical_address_base; /* Physical address range base */
|
||||||
|
u64 physical_address_length; /* Physical address range length */
|
||||||
|
};
|
||||||
|
|
||||||
|
/* Masks for Flags field above */
|
||||||
|
|
||||||
|
#define ACPI_HMAT_PROCESSOR_PD_VALID (1) /* 1: processor_PD field is valid */
|
||||||
|
#define ACPI_HMAT_MEMORY_PD_VALID (1<<1) /* 1: memory_PD field is valid */
|
||||||
|
#define ACPI_HMAT_RESERVATION_HINT (1<<2) /* 1: Reservation hint */
|
||||||
|
|
||||||
|
/* 1: System locality latency and bandwidth information */
|
||||||
|
|
||||||
|
struct acpi_hmat_locality {
|
||||||
|
struct acpi_hmat_structure header;
|
||||||
|
u8 flags;
|
||||||
|
u8 data_type;
|
||||||
|
u16 reserved1;
|
||||||
|
u32 number_of_initiator_Pds;
|
||||||
|
u32 number_of_target_Pds;
|
||||||
|
u32 reserved2;
|
||||||
|
u64 entry_base_unit;
|
||||||
|
};
|
||||||
|
|
||||||
|
/* Masks for Flags field above */
|
||||||
|
|
||||||
|
#define ACPI_HMAT_MEMORY_HIERARCHY (0x0F)
|
||||||
|
|
||||||
|
/* Values for Memory Hierarchy flag */
|
||||||
|
|
||||||
|
#define ACPI_HMAT_MEMORY 0
|
||||||
|
#define ACPI_HMAT_LAST_LEVEL_CACHE 1
|
||||||
|
#define ACPI_HMAT_1ST_LEVEL_CACHE 2
|
||||||
|
#define ACPI_HMAT_2ND_LEVEL_CACHE 3
|
||||||
|
#define ACPI_HMAT_3RD_LEVEL_CACHE 4
|
||||||
|
|
||||||
|
/* Values for data_type field above */
|
||||||
|
|
||||||
|
#define ACPI_HMAT_ACCESS_LATENCY 0
|
||||||
|
#define ACPI_HMAT_READ_LATENCY 1
|
||||||
|
#define ACPI_HMAT_WRITE_LATENCY 2
|
||||||
|
#define ACPI_HMAT_ACCESS_BANDWIDTH 3
|
||||||
|
#define ACPI_HMAT_READ_BANDWIDTH 4
|
||||||
|
#define ACPI_HMAT_WRITE_BANDWIDTH 5
|
||||||
|
|
||||||
|
/* 2: Memory side cache information */
|
||||||
|
|
||||||
|
struct acpi_hmat_cache {
|
||||||
|
struct acpi_hmat_structure header;
|
||||||
|
u32 memory_PD;
|
||||||
|
u32 reserved1;
|
||||||
|
u64 cache_size;
|
||||||
|
u32 cache_attributes;
|
||||||
|
u16 reserved2;
|
||||||
|
u16 number_of_SMBIOShandles;
|
||||||
|
};
|
||||||
|
|
||||||
|
/* Masks for cache_attributes field above */
|
||||||
|
|
||||||
|
#define ACPI_HMAT_TOTAL_CACHE_LEVEL (0x0000000F)
|
||||||
|
#define ACPI_HMAT_CACHE_LEVEL (0x000000F0)
|
||||||
|
#define ACPI_HMAT_CACHE_ASSOCIATIVITY (0x00000F00)
|
||||||
|
#define ACPI_HMAT_WRITE_POLICY (0x0000F000)
|
||||||
|
#define ACPI_HMAT_CACHE_LINE_SIZE (0xFFFF0000)
|
||||||
|
|
||||||
|
/* Values for cache associativity flag */
|
||||||
|
|
||||||
|
#define ACPI_HMAT_CA_NONE (0)
|
||||||
|
#define ACPI_HMAT_CA_DIRECT_MAPPED (1)
|
||||||
|
#define ACPI_HMAT_CA_COMPLEX_CACHE_INDEXING (2)
|
||||||
|
|
||||||
|
/* Values for write policy flag */
|
||||||
|
|
||||||
|
#define ACPI_HMAT_CP_NONE (0)
|
||||||
|
#define ACPI_HMAT_CP_WB (1)
|
||||||
|
#define ACPI_HMAT_CP_WT (2)
|
||||||
|
|
||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
*
|
*
|
||||||
* MADT - Multiple APIC Description Table
|
* MADT - Multiple APIC Description Table
|
||||||
|
@ -705,8 +840,8 @@ struct acpi_table_madt {
|
||||||
|
|
||||||
/* Values for PCATCompat flag */
|
/* Values for PCATCompat flag */
|
||||||
|
|
||||||
#define ACPI_MADT_DUAL_PIC 0
|
#define ACPI_MADT_DUAL_PIC 1
|
||||||
#define ACPI_MADT_MULTIPLE_APIC 1
|
#define ACPI_MADT_MULTIPLE_APIC 0
|
||||||
|
|
||||||
/* Values for MADT subtable type in struct acpi_subtable_header */
|
/* Values for MADT subtable type in struct acpi_subtable_header */
|
||||||
|
|
||||||
|
@ -1145,6 +1280,85 @@ struct acpi_nfit_flush_address {
|
||||||
u64 hint_address[1]; /* Variable length */
|
u64 hint_address[1]; /* Variable length */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/*******************************************************************************
|
||||||
|
*
|
||||||
|
* PPTT - Processor Properties Topology Table (ACPI 6.2)
|
||||||
|
* Version 1
|
||||||
|
*
|
||||||
|
******************************************************************************/
|
||||||
|
|
||||||
|
struct acpi_table_pptt {
|
||||||
|
struct acpi_table_header header; /* Common ACPI table header */
|
||||||
|
};
|
||||||
|
|
||||||
|
/* Values for Type field above */
|
||||||
|
|
||||||
|
enum acpi_pptt_type {
|
||||||
|
ACPI_PPTT_TYPE_PROCESSOR = 0,
|
||||||
|
ACPI_PPTT_TYPE_CACHE = 1,
|
||||||
|
ACPI_PPTT_TYPE_ID = 2,
|
||||||
|
ACPI_PPTT_TYPE_RESERVED = 3
|
||||||
|
};
|
||||||
|
|
||||||
|
/* 0: Processor Hierarchy Node Structure */
|
||||||
|
|
||||||
|
struct acpi_pptt_processor {
|
||||||
|
struct acpi_subtable_header header;
|
||||||
|
u16 reserved;
|
||||||
|
u32 flags;
|
||||||
|
u32 parent;
|
||||||
|
u32 acpi_processor_id;
|
||||||
|
u32 number_of_priv_resources;
|
||||||
|
};
|
||||||
|
|
||||||
|
/* Flags */
|
||||||
|
|
||||||
|
#define ACPI_PPTT_PHYSICAL_PACKAGE (1) /* Physical package */
|
||||||
|
#define ACPI_PPTT_ACPI_PROCESSOR_ID_VALID (2) /* ACPI Processor ID valid */
|
||||||
|
|
||||||
|
/* 1: Cache Type Structure */
|
||||||
|
|
||||||
|
struct acpi_pptt_cache {
|
||||||
|
struct acpi_subtable_header header;
|
||||||
|
u16 reserved;
|
||||||
|
u32 flags;
|
||||||
|
u32 next_level_of_cache;
|
||||||
|
u32 size;
|
||||||
|
u32 number_of_sets;
|
||||||
|
u8 associativity;
|
||||||
|
u8 attributes;
|
||||||
|
u16 line_size;
|
||||||
|
};
|
||||||
|
|
||||||
|
/* Flags */
|
||||||
|
|
||||||
|
#define ACPI_PPTT_SIZE_PROPERTY_VALID (1) /* Physical property valid */
|
||||||
|
#define ACPI_PPTT_NUMBER_OF_SETS_VALID (1<<1) /* Number of sets valid */
|
||||||
|
#define ACPI_PPTT_ASSOCIATIVITY_VALID (1<<2) /* Associativity valid */
|
||||||
|
#define ACPI_PPTT_ALLOCATION_TYPE_VALID (1<<3) /* Allocation type valid */
|
||||||
|
#define ACPI_PPTT_CACHE_TYPE_VALID (1<<4) /* Cache type valid */
|
||||||
|
#define ACPI_PPTT_WRITE_POLICY_VALID (1<<5) /* Write policy valid */
|
||||||
|
#define ACPI_PPTT_LINE_SIZE_VALID (1<<6) /* Line size valid */
|
||||||
|
|
||||||
|
/* Masks for Attributes */
|
||||||
|
|
||||||
|
#define ACPI_PPTT_MASK_ALLOCATION_TYPE (0x03) /* Allocation type */
|
||||||
|
#define ACPI_PPTT_MASK_CACHE_TYPE (0x0C) /* Cache type */
|
||||||
|
#define ACPI_PPTT_MASK_WRITE_POLICY (0x10) /* Write policy */
|
||||||
|
|
||||||
|
/* 2: ID Structure */
|
||||||
|
|
||||||
|
struct acpi_pptt_id {
|
||||||
|
struct acpi_subtable_header header;
|
||||||
|
u16 reserved;
|
||||||
|
u32 vendor_id;
|
||||||
|
u64 level1_id;
|
||||||
|
u64 level2_id;
|
||||||
|
u16 major_rev;
|
||||||
|
u16 minor_rev;
|
||||||
|
u16 spin_rev;
|
||||||
|
};
|
||||||
|
|
||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
*
|
*
|
||||||
* SBST - Smart Battery Specification Table
|
* SBST - Smart Battery Specification Table
|
||||||
|
@ -1192,7 +1406,8 @@ enum acpi_srat_type {
|
||||||
ACPI_SRAT_TYPE_MEMORY_AFFINITY = 1,
|
ACPI_SRAT_TYPE_MEMORY_AFFINITY = 1,
|
||||||
ACPI_SRAT_TYPE_X2APIC_CPU_AFFINITY = 2,
|
ACPI_SRAT_TYPE_X2APIC_CPU_AFFINITY = 2,
|
||||||
ACPI_SRAT_TYPE_GICC_AFFINITY = 3,
|
ACPI_SRAT_TYPE_GICC_AFFINITY = 3,
|
||||||
ACPI_SRAT_TYPE_RESERVED = 4 /* 4 and greater are reserved */
|
ACPI_SRAT_TYPE_GIC_ITS_AFFINITY = 4, /* ACPI 6.2 */
|
||||||
|
ACPI_SRAT_TYPE_RESERVED = 5 /* 5 and greater are reserved */
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -1264,6 +1479,15 @@ struct acpi_srat_gicc_affinity {
|
||||||
|
|
||||||
#define ACPI_SRAT_GICC_ENABLED (1) /* 00: Use affinity structure */
|
#define ACPI_SRAT_GICC_ENABLED (1) /* 00: Use affinity structure */
|
||||||
|
|
||||||
|
/* 4: GCC ITS Affinity (ACPI 6.2) */
|
||||||
|
|
||||||
|
struct acpi_srat_gic_its_affinity {
|
||||||
|
struct acpi_subtable_header header;
|
||||||
|
u32 proximity_domain;
|
||||||
|
u16 reserved;
|
||||||
|
u32 its_id;
|
||||||
|
};
|
||||||
|
|
||||||
/* Reset to default packing */
|
/* Reset to default packing */
|
||||||
|
|
||||||
#pragma pack()
|
#pragma pack()
|
||||||
|
|
|
@ -87,6 +87,7 @@
|
||||||
#define ACPI_SIG_WDAT "WDAT" /* Watchdog Action Table */
|
#define ACPI_SIG_WDAT "WDAT" /* Watchdog Action Table */
|
||||||
#define ACPI_SIG_WDDT "WDDT" /* Watchdog Timer Description Table */
|
#define ACPI_SIG_WDDT "WDDT" /* Watchdog Timer Description Table */
|
||||||
#define ACPI_SIG_WDRT "WDRT" /* Watchdog Resource Table */
|
#define ACPI_SIG_WDRT "WDRT" /* Watchdog Resource Table */
|
||||||
|
#define ACPI_SIG_WSMT "WSMT" /* Windows SMM Security Migrations Table */
|
||||||
#define ACPI_SIG_XXXX "XXXX" /* Intermediate AML header for ASL/ASL+ converter */
|
#define ACPI_SIG_XXXX "XXXX" /* Intermediate AML header for ASL/ASL+ converter */
|
||||||
|
|
||||||
#ifdef ACPI_UNDEFINED_TABLES
|
#ifdef ACPI_UNDEFINED_TABLES
|
||||||
|
@ -1220,7 +1221,8 @@ enum acpi_spmi_interface_types {
|
||||||
* Version 2
|
* Version 2
|
||||||
*
|
*
|
||||||
* Conforms to "TCG ACPI Specification, Family 1.2 and 2.0",
|
* Conforms to "TCG ACPI Specification, Family 1.2 and 2.0",
|
||||||
* December 19, 2014
|
* Version 1.2, Revision 8
|
||||||
|
* February 27, 2017
|
||||||
*
|
*
|
||||||
* NOTE: There are two versions of the table with the same signature --
|
* NOTE: There are two versions of the table with the same signature --
|
||||||
* the client version and the server version. The common platform_class
|
* the client version and the server version. The common platform_class
|
||||||
|
@ -1283,7 +1285,8 @@ struct acpi_table_tcpa_server {
|
||||||
* Version 4
|
* Version 4
|
||||||
*
|
*
|
||||||
* Conforms to "TCG ACPI Specification, Family 1.2 and 2.0",
|
* Conforms to "TCG ACPI Specification, Family 1.2 and 2.0",
|
||||||
* December 19, 2014
|
* Version 1.2, Revision 8
|
||||||
|
* February 27, 2017
|
||||||
*
|
*
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
|
|
||||||
|
@ -1304,7 +1307,36 @@ struct acpi_table_tpm2 {
|
||||||
#define ACPI_TPM2_MEMORY_MAPPED 6
|
#define ACPI_TPM2_MEMORY_MAPPED 6
|
||||||
#define ACPI_TPM2_COMMAND_BUFFER 7
|
#define ACPI_TPM2_COMMAND_BUFFER 7
|
||||||
#define ACPI_TPM2_COMMAND_BUFFER_WITH_START_METHOD 8
|
#define ACPI_TPM2_COMMAND_BUFFER_WITH_START_METHOD 8
|
||||||
#define ACPI_TPM2_COMMAND_BUFFER_WITH_SMC 11
|
#define ACPI_TPM2_COMMAND_BUFFER_WITH_ARM_SMC 11 /* V1.2 Rev 8 */
|
||||||
|
|
||||||
|
/* Trailer appears after any start_method subtables */
|
||||||
|
|
||||||
|
struct acpi_tpm2_trailer {
|
||||||
|
u32 minimum_log_length; /* Minimum length for the event log area */
|
||||||
|
u64 log_address; /* Address of the event log area */
|
||||||
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Subtables (start_method-specific)
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* 11: Start Method for ARM SMC (V1.2 Rev 8) */
|
||||||
|
|
||||||
|
struct acpi_tpm2_arm_smc {
|
||||||
|
u32 global_interrupt;
|
||||||
|
u8 interrupt_flags;
|
||||||
|
u8 operation_flags;
|
||||||
|
u16 reserved;
|
||||||
|
u32 function_id;
|
||||||
|
};
|
||||||
|
|
||||||
|
/* Values for interrupt_flags above */
|
||||||
|
|
||||||
|
#define ACPI_TPM2_INTERRUPT_SUPPORT (1)
|
||||||
|
|
||||||
|
/* Values for operation_flags above */
|
||||||
|
|
||||||
|
#define ACPI_TPM2_IDLE_SUPPORT (1)
|
||||||
|
|
||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
*
|
*
|
||||||
|
@ -1498,6 +1530,27 @@ struct acpi_table_wdrt {
|
||||||
u8 units;
|
u8 units;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/*******************************************************************************
|
||||||
|
*
|
||||||
|
* WSMT - Windows SMM Security Migrations Table
|
||||||
|
* Version 1
|
||||||
|
*
|
||||||
|
* Conforms to "Windows SMM Security Migrations Table",
|
||||||
|
* Version 1.0, April 18, 2016
|
||||||
|
*
|
||||||
|
******************************************************************************/
|
||||||
|
|
||||||
|
struct acpi_table_wsmt {
|
||||||
|
struct acpi_table_header header; /* Common ACPI table header */
|
||||||
|
u32 protection_flags;
|
||||||
|
};
|
||||||
|
|
||||||
|
/* Flags for protection_flags field above */
|
||||||
|
|
||||||
|
#define ACPI_WSMT_FIXED_COMM_BUFFERS (1)
|
||||||
|
#define ACPI_WSMT_COMM_BUFFER_NESTED_PTR_PROTECTION (2)
|
||||||
|
#define ACPI_WSMT_SYSTEM_RESOURCE_PROTECTION (4)
|
||||||
|
|
||||||
/* Reset to default packing */
|
/* Reset to default packing */
|
||||||
|
|
||||||
#pragma pack()
|
#pragma pack()
|
||||||
|
|
|
@ -116,6 +116,11 @@ struct acpi_table_bgrt {
|
||||||
u32 image_offset_y;
|
u32 image_offset_y;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/* Flags for Status field above */
|
||||||
|
|
||||||
|
#define ACPI_BGRT_DISPLAYED (1)
|
||||||
|
#define ACPI_BGRT_ORIENTATION_OFFSET (3 << 1)
|
||||||
|
|
||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
*
|
*
|
||||||
* DRTM - Dynamic Root of Trust for Measurement table
|
* DRTM - Dynamic Root of Trust for Measurement table
|
||||||
|
@ -462,7 +467,7 @@ struct acpi_mpst_shared {
|
||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
*
|
*
|
||||||
* PCCT - Platform Communications Channel Table (ACPI 5.0)
|
* PCCT - Platform Communications Channel Table (ACPI 5.0)
|
||||||
* Version 1
|
* Version 2 (ACPI 6.2)
|
||||||
*
|
*
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
|
|
||||||
|
@ -482,7 +487,9 @@ enum acpi_pcct_type {
|
||||||
ACPI_PCCT_TYPE_GENERIC_SUBSPACE = 0,
|
ACPI_PCCT_TYPE_GENERIC_SUBSPACE = 0,
|
||||||
ACPI_PCCT_TYPE_HW_REDUCED_SUBSPACE = 1,
|
ACPI_PCCT_TYPE_HW_REDUCED_SUBSPACE = 1,
|
||||||
ACPI_PCCT_TYPE_HW_REDUCED_SUBSPACE_TYPE2 = 2, /* ACPI 6.1 */
|
ACPI_PCCT_TYPE_HW_REDUCED_SUBSPACE_TYPE2 = 2, /* ACPI 6.1 */
|
||||||
ACPI_PCCT_TYPE_RESERVED = 3 /* 3 and greater are reserved */
|
ACPI_PCCT_TYPE_EXT_PCC_MASTER_SUBSPACE = 3, /* ACPI 6.2 */
|
||||||
|
ACPI_PCCT_TYPE_EXT_PCC_SLAVE_SUBSPACE = 4, /* ACPI 6.2 */
|
||||||
|
ACPI_PCCT_TYPE_RESERVED = 5 /* 5 and greater are reserved */
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -508,7 +515,7 @@ struct acpi_pcct_subspace {
|
||||||
|
|
||||||
struct acpi_pcct_hw_reduced {
|
struct acpi_pcct_hw_reduced {
|
||||||
struct acpi_subtable_header header;
|
struct acpi_subtable_header header;
|
||||||
u32 doorbell_interrupt;
|
u32 platform_interrupt;
|
||||||
u8 flags;
|
u8 flags;
|
||||||
u8 reserved;
|
u8 reserved;
|
||||||
u64 base_address;
|
u64 base_address;
|
||||||
|
@ -525,7 +532,7 @@ struct acpi_pcct_hw_reduced {
|
||||||
|
|
||||||
struct acpi_pcct_hw_reduced_type2 {
|
struct acpi_pcct_hw_reduced_type2 {
|
||||||
struct acpi_subtable_header header;
|
struct acpi_subtable_header header;
|
||||||
u32 doorbell_interrupt;
|
u32 platform_interrupt;
|
||||||
u8 flags;
|
u8 flags;
|
||||||
u8 reserved;
|
u8 reserved;
|
||||||
u64 base_address;
|
u64 base_address;
|
||||||
|
@ -536,11 +543,67 @@ struct acpi_pcct_hw_reduced_type2 {
|
||||||
u32 latency;
|
u32 latency;
|
||||||
u32 max_access_rate;
|
u32 max_access_rate;
|
||||||
u16 min_turnaround_time;
|
u16 min_turnaround_time;
|
||||||
struct acpi_generic_address doorbell_ack_register;
|
struct acpi_generic_address platform_ack_register;
|
||||||
u64 ack_preserve_mask;
|
u64 ack_preserve_mask;
|
||||||
u64 ack_write_mask;
|
u64 ack_write_mask;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/* 3: Extended PCC Master Subspace Type 3 (ACPI 6.2) */
|
||||||
|
|
||||||
|
struct acpi_pcct_ext_pcc_master {
|
||||||
|
struct acpi_subtable_header header;
|
||||||
|
u32 platform_interrupt;
|
||||||
|
u8 flags;
|
||||||
|
u8 reserved1;
|
||||||
|
u64 base_address;
|
||||||
|
u32 length;
|
||||||
|
struct acpi_generic_address doorbell_register;
|
||||||
|
u64 preserve_mask;
|
||||||
|
u64 write_mask;
|
||||||
|
u32 latency;
|
||||||
|
u32 max_access_rate;
|
||||||
|
u32 min_turnaround_time;
|
||||||
|
struct acpi_generic_address platform_ack_register;
|
||||||
|
u64 ack_preserve_mask;
|
||||||
|
u64 ack_set_mask;
|
||||||
|
u64 reserved2;
|
||||||
|
struct acpi_generic_address cmd_complete_register;
|
||||||
|
u64 cmd_complete_mask;
|
||||||
|
struct acpi_generic_address cmd_update_register;
|
||||||
|
u64 cmd_update_preserve_mask;
|
||||||
|
u64 cmd_update_set_mask;
|
||||||
|
struct acpi_generic_address error_status_register;
|
||||||
|
u64 error_status_mask;
|
||||||
|
};
|
||||||
|
|
||||||
|
/* 4: Extended PCC Slave Subspace Type 4 (ACPI 6.2) */
|
||||||
|
|
||||||
|
struct acpi_pcct_ext_pcc_slave {
|
||||||
|
struct acpi_subtable_header header;
|
||||||
|
u32 platform_interrupt;
|
||||||
|
u8 flags;
|
||||||
|
u8 reserved1;
|
||||||
|
u64 base_address;
|
||||||
|
u32 length;
|
||||||
|
struct acpi_generic_address doorbell_register;
|
||||||
|
u64 preserve_mask;
|
||||||
|
u64 write_mask;
|
||||||
|
u32 latency;
|
||||||
|
u32 max_access_rate;
|
||||||
|
u32 min_turnaround_time;
|
||||||
|
struct acpi_generic_address platform_ack_register;
|
||||||
|
u64 ack_preserve_mask;
|
||||||
|
u64 ack_set_mask;
|
||||||
|
u64 reserved2;
|
||||||
|
struct acpi_generic_address cmd_complete_register;
|
||||||
|
u64 cmd_complete_mask;
|
||||||
|
struct acpi_generic_address cmd_update_register;
|
||||||
|
u64 cmd_update_preserve_mask;
|
||||||
|
u64 cmd_update_set_mask;
|
||||||
|
struct acpi_generic_address error_status_register;
|
||||||
|
u64 error_status_mask;
|
||||||
|
};
|
||||||
|
|
||||||
/* Values for doorbell flags above */
|
/* Values for doorbell flags above */
|
||||||
|
|
||||||
#define ACPI_PCCT_INTERRUPT_POLARITY (1)
|
#define ACPI_PCCT_INTERRUPT_POLARITY (1)
|
||||||
|
@ -558,6 +621,15 @@ struct acpi_pcct_shared_memory {
|
||||||
u16 status;
|
u16 status;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/* Extended PCC Subspace Shared Memory Region (ACPI 6.2) */
|
||||||
|
|
||||||
|
struct acpi_pcct_ext_pcc_shared_memory {
|
||||||
|
u32 signature;
|
||||||
|
u32 flags;
|
||||||
|
u32 length;
|
||||||
|
u32 command;
|
||||||
|
};
|
||||||
|
|
||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
*
|
*
|
||||||
* PMTT - Platform Memory Topology Table (ACPI 5.0)
|
* PMTT - Platform Memory Topology Table (ACPI 5.0)
|
||||||
|
|
|
@ -47,9 +47,9 @@
|
||||||
/* acpisrc:struct_defs -- for acpisrc conversion */
|
/* acpisrc:struct_defs -- for acpisrc conversion */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* ACPI_MACHINE_WIDTH must be specified in an OS- or compiler-dependent header
|
* ACPI_MACHINE_WIDTH must be specified in an OS- or compiler-dependent
|
||||||
* and must be either 32 or 64. 16-bit ACPICA is no longer supported, as of
|
* header and must be either 32 or 64. 16-bit ACPICA is no longer
|
||||||
* 12/2006.
|
* supported, as of 12/2006.
|
||||||
*/
|
*/
|
||||||
#ifndef ACPI_MACHINE_WIDTH
|
#ifndef ACPI_MACHINE_WIDTH
|
||||||
#error ACPI_MACHINE_WIDTH not defined
|
#error ACPI_MACHINE_WIDTH not defined
|
||||||
|
@ -87,9 +87,9 @@
|
||||||
* s64 64-bit (8 byte) signed value
|
* s64 64-bit (8 byte) signed value
|
||||||
*
|
*
|
||||||
* COMPILER_DEPENDENT_UINT64/s64 - These types are defined in the
|
* COMPILER_DEPENDENT_UINT64/s64 - These types are defined in the
|
||||||
* compiler-dependent header(s) and were introduced because there is no common
|
* compiler-dependent header(s) and were introduced because there is no
|
||||||
* 64-bit integer type across the various compilation models, as shown in
|
* common 64-bit integer type across the various compilation models, as
|
||||||
* the table below.
|
* shown in the table below.
|
||||||
*
|
*
|
||||||
* Datatype LP64 ILP64 LLP64 ILP32 LP32 16bit
|
* Datatype LP64 ILP64 LLP64 ILP32 LP32 16bit
|
||||||
* char 8 8 8 8 8 8
|
* char 8 8 8 8 8 8
|
||||||
|
@ -106,10 +106,10 @@
|
||||||
* 2) These types represent the native word size of the target mode of the
|
* 2) These types represent the native word size of the target mode of the
|
||||||
* processor, and may be 16-bit, 32-bit, or 64-bit as required. They are
|
* processor, and may be 16-bit, 32-bit, or 64-bit as required. They are
|
||||||
* usually used for memory allocation, efficient loop counters, and array
|
* usually used for memory allocation, efficient loop counters, and array
|
||||||
* indexes. The types are similar to the size_t type in the C library and are
|
* indexes. The types are similar to the size_t type in the C library and
|
||||||
* required because there is no C type that consistently represents the native
|
* are required because there is no C type that consistently represents the
|
||||||
* data width. acpi_size is needed because there is no guarantee that a
|
* native data width. acpi_size is needed because there is no guarantee
|
||||||
* kernel-level C library is present.
|
* that a kernel-level C library is present.
|
||||||
*
|
*
|
||||||
* acpi_size 16/32/64-bit unsigned value
|
* acpi_size 16/32/64-bit unsigned value
|
||||||
* acpi_native_int 16/32/64-bit signed value
|
* acpi_native_int 16/32/64-bit signed value
|
||||||
|
@ -169,9 +169,10 @@ typedef u64 acpi_physical_address;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* In the case of the Itanium Processor Family (IPF), the hardware does not
|
* In the case of the Itanium Processor Family (IPF), the hardware does not
|
||||||
* support misaligned memory transfers. Set the MISALIGNMENT_NOT_SUPPORTED flag
|
* support misaligned memory transfers. Set the MISALIGNMENT_NOT_SUPPORTED
|
||||||
* to indicate that special precautions must be taken to avoid alignment faults.
|
* flag to indicate that special precautions must be taken to avoid alignment
|
||||||
* (IA64 or ia64 is currently used by existing compilers to indicate IPF.)
|
* faults. (IA64 or ia64 is currently used by existing compilers to indicate
|
||||||
|
* IPF.)
|
||||||
*
|
*
|
||||||
* Note: EM64T and other X86-64 processors support misaligned transfers,
|
* Note: EM64T and other X86-64 processors support misaligned transfers,
|
||||||
* so there is no need to define this flag.
|
* so there is no need to define this flag.
|
||||||
|
@ -309,8 +310,8 @@ typedef u64 acpi_physical_address;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Some compilers complain about unused variables. Sometimes we don't want to
|
* Some compilers complain about unused variables. Sometimes we don't want
|
||||||
* use all the variables (for example, _acpi_module_name). This allows us
|
* to use all the variables (for example, _acpi_module_name). This allows us
|
||||||
* to tell the compiler in a per-variable manner that a variable
|
* to tell the compiler in a per-variable manner that a variable
|
||||||
* is unused
|
* is unused
|
||||||
*/
|
*/
|
||||||
|
@ -319,8 +320,9 @@ typedef u64 acpi_physical_address;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* All ACPICA external functions that are available to the rest of the kernel
|
* All ACPICA external functions that are available to the rest of the
|
||||||
* are tagged with thes macros which can be defined as appropriate for the host.
|
* kernel are tagged with these macros which can be defined as appropriate
|
||||||
|
* for the host.
|
||||||
*
|
*
|
||||||
* Notes:
|
* Notes:
|
||||||
* ACPI_EXPORT_SYMBOL_INIT is used for initialization and termination
|
* ACPI_EXPORT_SYMBOL_INIT is used for initialization and termination
|
||||||
|
@ -383,7 +385,8 @@ typedef u64 acpi_physical_address;
|
||||||
|
|
||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
*
|
*
|
||||||
* ACPI Specification constants (Do not change unless the specification changes)
|
* ACPI Specification constants (Do not change unless the specification
|
||||||
|
* changes)
|
||||||
*
|
*
|
||||||
*****************************************************************************/
|
*****************************************************************************/
|
||||||
|
|
||||||
|
@ -484,10 +487,10 @@ typedef u8 acpi_owner_id;
|
||||||
#define ACPI_DO_NOT_WAIT 0
|
#define ACPI_DO_NOT_WAIT 0
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Obsolete: Acpi integer width. In ACPI version 1 (1996), integers are 32 bits.
|
* Obsolete: Acpi integer width. In ACPI version 1 (1996), integers are
|
||||||
* In ACPI version 2 (2000) and later, integers are 64 bits. Note that this
|
* 32 bits. In ACPI version 2 (2000) and later, integers are max 64 bits.
|
||||||
* pertains to the ACPI integer type only, not to other integers used in the
|
* Note that this pertains to the ACPI integer type only, not to other
|
||||||
* implementation of the ACPICA subsystem.
|
* integers used in the implementation of the ACPICA subsystem.
|
||||||
*
|
*
|
||||||
* 01/2010: This type is obsolete and has been removed from the entire ACPICA
|
* 01/2010: This type is obsolete and has been removed from the entire ACPICA
|
||||||
* code base. It remains here for compatibility with device drivers that use
|
* code base. It remains here for compatibility with device drivers that use
|
||||||
|
@ -629,8 +632,9 @@ typedef u64 acpi_integer;
|
||||||
#define ACPI_NOTIFY_LOCALITY_UPDATE (u8) 0x0B
|
#define ACPI_NOTIFY_LOCALITY_UPDATE (u8) 0x0B
|
||||||
#define ACPI_NOTIFY_SHUTDOWN_REQUEST (u8) 0x0C
|
#define ACPI_NOTIFY_SHUTDOWN_REQUEST (u8) 0x0C
|
||||||
#define ACPI_NOTIFY_AFFINITY_UPDATE (u8) 0x0D
|
#define ACPI_NOTIFY_AFFINITY_UPDATE (u8) 0x0D
|
||||||
|
#define ACPI_NOTIFY_MEMORY_UPDATE (u8) 0x0E
|
||||||
|
|
||||||
#define ACPI_GENERIC_NOTIFY_MAX 0x0D
|
#define ACPI_GENERIC_NOTIFY_MAX 0x0E
|
||||||
#define ACPI_SPECIFIC_NOTIFY_MAX 0x84
|
#define ACPI_SPECIFIC_NOTIFY_MAX 0x84
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -667,10 +671,11 @@ typedef u32 acpi_object_type;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* These are object types that do not map directly to the ACPI
|
* These are object types that do not map directly to the ACPI
|
||||||
* object_type() operator. They are used for various internal purposes only.
|
* object_type() operator. They are used for various internal purposes
|
||||||
* If new predefined ACPI_TYPEs are added (via the ACPI specification), these
|
* only. If new predefined ACPI_TYPEs are added (via the ACPI
|
||||||
* internal types must move upwards. (There is code that depends on these
|
* specification), these internal types must move upwards. (There
|
||||||
* values being contiguous with the external types above.)
|
* is code that depends on these values being contiguous with the
|
||||||
|
* external types above.)
|
||||||
*/
|
*/
|
||||||
#define ACPI_TYPE_LOCAL_REGION_FIELD 0x11
|
#define ACPI_TYPE_LOCAL_REGION_FIELD 0x11
|
||||||
#define ACPI_TYPE_LOCAL_BANK_FIELD 0x12
|
#define ACPI_TYPE_LOCAL_BANK_FIELD 0x12
|
||||||
|
@ -770,7 +775,7 @@ typedef u32 acpi_event_status;
|
||||||
* | | | | +-- Type of dispatch:to method, handler, notify, or none
|
* | | | | +-- Type of dispatch:to method, handler, notify, or none
|
||||||
* | | | +----- Interrupt type: edge or level triggered
|
* | | | +----- Interrupt type: edge or level triggered
|
||||||
* | | +------- Is a Wake GPE
|
* | | +------- Is a Wake GPE
|
||||||
* | +--------- Is GPE masked by the software GPE masking machanism
|
* | +--------- Is GPE masked by the software GPE masking mechanism
|
||||||
* +------------ <Reserved>
|
* +------------ <Reserved>
|
||||||
*/
|
*/
|
||||||
#define ACPI_GPE_DISPATCH_NONE (u8) 0x00
|
#define ACPI_GPE_DISPATCH_NONE (u8) 0x00
|
||||||
|
@ -908,8 +913,8 @@ struct acpi_sleep_functions {
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Note: Type == ACPI_TYPE_ANY (0) is used to indicate a NULL package element
|
* Note: Type == ACPI_TYPE_ANY (0) is used to indicate a NULL package
|
||||||
* or an unresolved named reference.
|
* element or an unresolved named reference.
|
||||||
*/
|
*/
|
||||||
union acpi_object {
|
union acpi_object {
|
||||||
acpi_object_type type; /* See definition of acpi_ns_type for values */
|
acpi_object_type type; /* See definition of acpi_ns_type for values */
|
||||||
|
@ -1166,7 +1171,7 @@ struct acpi_pnp_device_id_list {
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Structure returned from acpi_get_object_info.
|
* Structure returned from acpi_get_object_info.
|
||||||
* Optimized for both 32- and 64-bit builds
|
* Optimized for both 32-bit and 64-bit builds.
|
||||||
*/
|
*/
|
||||||
struct acpi_device_info {
|
struct acpi_device_info {
|
||||||
u32 info_size; /* Size of info, including ID strings */
|
u32 info_size; /* Size of info, including ID strings */
|
||||||
|
|
|
@ -78,6 +78,11 @@
|
||||||
#define UUID_PERSISTENT_VIRTUAL_DISK "5cea02c9-4d07-69d3-269f-4496fbe096f9"
|
#define UUID_PERSISTENT_VIRTUAL_DISK "5cea02c9-4d07-69d3-269f-4496fbe096f9"
|
||||||
#define UUID_PERSISTENT_VIRTUAL_CD "08018188-42cd-bb48-100f-5387d53ded3d"
|
#define UUID_PERSISTENT_VIRTUAL_CD "08018188-42cd-bb48-100f-5387d53ded3d"
|
||||||
|
|
||||||
|
/* Processor Properties (ACPI 6.2) */
|
||||||
|
|
||||||
|
#define UUID_CACHE_PROPERTIES "6DC63E77-257E-4E78-A973-A21F2796898D"
|
||||||
|
#define UUID_PHYSICAL_PROPERTY "DDE4D59A-AA42-4349-B407-EA40F57D9FB7"
|
||||||
|
|
||||||
/* Miscellaneous */
|
/* Miscellaneous */
|
||||||
|
|
||||||
#define UUID_PLATFORM_CAPABILITIES "0811b06e-4a27-44f9-8d60-3cbbc22e7b48"
|
#define UUID_PLATFORM_CAPABILITIES "0811b06e-4a27-44f9-8d60-3cbbc22e7b48"
|
||||||
|
|
|
@ -382,4 +382,8 @@
|
||||||
#define ACPI_INIT_FUNCTION
|
#define ACPI_INIT_FUNCTION
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifndef ACPI_STRUCT_INIT
|
||||||
|
#define ACPI_STRUCT_INIT(field, value) value
|
||||||
|
#endif
|
||||||
|
|
||||||
#endif /* __ACENV_H__ */
|
#endif /* __ACENV_H__ */
|
||||||
|
|
|
@ -48,7 +48,17 @@
|
||||||
* Use compiler specific <stdarg.h> is a good practice for even when
|
* Use compiler specific <stdarg.h> is a good practice for even when
|
||||||
* -nostdinc is specified (i.e., ACPI_USE_STANDARD_HEADERS undefined.
|
* -nostdinc is specified (i.e., ACPI_USE_STANDARD_HEADERS undefined.
|
||||||
*/
|
*/
|
||||||
|
#ifndef va_arg
|
||||||
|
#ifdef ACPI_USE_BUILTIN_STDARG
|
||||||
|
typedef __builtin_va_list va_list;
|
||||||
|
#define va_start(v, l) __builtin_va_start(v, l)
|
||||||
|
#define va_end(v) __builtin_va_end(v)
|
||||||
|
#define va_arg(v, l) __builtin_va_arg(v, l)
|
||||||
|
#define va_copy(d, s) __builtin_va_copy(d, s)
|
||||||
|
#else
|
||||||
#include <stdarg.h>
|
#include <stdarg.h>
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
#define ACPI_INLINE __inline__
|
#define ACPI_INLINE __inline__
|
||||||
|
|
||||||
|
|
|
@ -48,7 +48,9 @@
|
||||||
* Use compiler specific <stdarg.h> is a good practice for even when
|
* Use compiler specific <stdarg.h> is a good practice for even when
|
||||||
* -nostdinc is specified (i.e., ACPI_USE_STANDARD_HEADERS undefined.
|
* -nostdinc is specified (i.e., ACPI_USE_STANDARD_HEADERS undefined.
|
||||||
*/
|
*/
|
||||||
|
#ifndef va_arg
|
||||||
#include <stdarg.h>
|
#include <stdarg.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Configuration specific to Intel 64-bit C compiler */
|
/* Configuration specific to Intel 64-bit C compiler */
|
||||||
|
|
||||||
|
|
|
@ -178,6 +178,8 @@
|
||||||
#define ACPI_MSG_BIOS_ERROR KERN_ERR "ACPI BIOS Error (bug): "
|
#define ACPI_MSG_BIOS_ERROR KERN_ERR "ACPI BIOS Error (bug): "
|
||||||
#define ACPI_MSG_BIOS_WARNING KERN_WARNING "ACPI BIOS Warning (bug): "
|
#define ACPI_MSG_BIOS_WARNING KERN_WARNING "ACPI BIOS Warning (bug): "
|
||||||
|
|
||||||
|
#define ACPI_STRUCT_INIT(field, value) .field = value
|
||||||
|
|
||||||
#else /* !__KERNEL__ */
|
#else /* !__KERNEL__ */
|
||||||
|
|
||||||
#define ACPI_USE_STANDARD_HEADERS
|
#define ACPI_USE_STANDARD_HEADERS
|
||||||
|
|
|
@ -750,9 +750,9 @@ acpi_os_wait_semaphore(acpi_handle handle, u32 units, u16 msec_timeout)
|
||||||
{
|
{
|
||||||
acpi_status status = AE_OK;
|
acpi_status status = AE_OK;
|
||||||
sem_t *sem = (sem_t *) handle;
|
sem_t *sem = (sem_t *) handle;
|
||||||
|
int ret_val;
|
||||||
#ifndef ACPI_USE_ALTERNATE_TIMEOUT
|
#ifndef ACPI_USE_ALTERNATE_TIMEOUT
|
||||||
struct timespec time;
|
struct timespec time;
|
||||||
int ret_val;
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (!sem) {
|
if (!sem) {
|
||||||
|
@ -778,7 +778,10 @@ acpi_os_wait_semaphore(acpi_handle handle, u32 units, u16 msec_timeout)
|
||||||
|
|
||||||
case ACPI_WAIT_FOREVER:
|
case ACPI_WAIT_FOREVER:
|
||||||
|
|
||||||
if (sem_wait(sem)) {
|
while (((ret_val = sem_wait(sem)) == -1) && (errno == EINTR)) {
|
||||||
|
continue; /* Restart if interrupted */
|
||||||
|
}
|
||||||
|
if (ret_val != 0) {
|
||||||
status = (AE_TIME);
|
status = (AE_TIME);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -831,7 +834,8 @@ acpi_os_wait_semaphore(acpi_handle handle, u32 units, u16 msec_timeout)
|
||||||
|
|
||||||
while (((ret_val = sem_timedwait(sem, &time)) == -1)
|
while (((ret_val = sem_timedwait(sem, &time)) == -1)
|
||||||
&& (errno == EINTR)) {
|
&& (errno == EINTR)) {
|
||||||
continue;
|
continue; /* Restart if interrupted */
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ret_val != 0) {
|
if (ret_val != 0) {
|
||||||
|
|
Loading…
Reference in a new issue