Additional ACPI updates for 4.18-rc1
- Update the ACPICA code in the kernel to upstream revision 20180531 including: * AML parser fix to continue loading tables after detecting an AML error (Erik Schmauss). * AML parser debug option to dump parse trees (Bob Moore). * Debugger updates (Bob Moore). * Initial bits of Unload () operator deprecation (Bob Moore). * Updates related to the IORT table (Robin Murphy). - Make Linux respond to the "Windows 2017.2" _OSI string which allows native Thunderbolt enumeration to be used on Dell systems and was unsafe before recent changes in the PCI subsystem (Mario Limonciello). - Update the ACPI method customization feature documentation (Erik Schmauss). -----BEGIN PGP SIGNATURE----- Version: GnuPG v2 iQIcBAABCAAGBQJbIOh2AAoJEILEb/54YlRxLCQP/j4rm5Z2lsup6OTggXI8fd1r EUUkcsFFn5Wd/7l9zflARdaCQpSQ6JWTOg+VElTQWzErkIqVpU+putUJmD/G5aE2 Qa6XmhCqPyEFynS2GAyJv66/F1VI40U3MJV7jrAi77EmtOW0L2wFGHLrMpI+FYH2 frZg66ja6RwWg+71FhSjXJCV95WjZD/0/xDRzcZY7pWmxL23w7SnOt7TAc+Kqs6g xV2kHCwRISwH9ss+uXU6uJ7rZhcHNrF8kmH3uEc+ANmbY6ChatC9oOv1KZgtIxdc xt+R/CNn+5KIo6Em6Zn+nlJpdYMz0tjY0A65OQGKIB0/7LPA+u/b7Zb18pyz21NB BGOOnCE+NKUk5VMPuvAlTeABX32qtFPEvC1/qMfwNPADOLW1zmEywAmoqWGO9E+v EbX0ETrnHC/wFjEx5Qx3HHTmr+l1zSTzS6JRVW75WmrOVz7GGLcJST4FNtYkn/bz H/qu2QfmyswDsw3YUyPK6j6ZxVOb0dyizlp56eA6DHC0bSXdPhgOLc8bq1QX1BG2 ctPnU3Ee8V/D2ashFp04lRUledTatkfkSSNA5wW892PpCqC4kcAJ23PZf7sprvIW oHbq/WQAH2NWoUH8SA2yHSKNNxHFaDp3Uf+iOviNWb8jnPO9t3FSKmt5wcyKNw8o Qwkrcp904VAu0vvMSYla =FPpd -----END PGP SIGNATURE----- Merge tag 'acpi-4.18-rc1-2' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm Pull additional ACPI updates from Rafael Wysocki: "These update the ACPICA code in the kernel to upstream revision 20180531 including one important AML parser fix and updates related to the IORT table, make the kernel recognize the "Windows 2017.2" _OSI string and update the customized methods documentation. Specifics: - Update the ACPICA code in the kernel to upstream revision 20180531 including: * AML parser fix to continue loading tables after detecting an AML error (Erik Schmauss). * AML parser debug option to dump parse trees (Bob Moore). * Debugger updates (Bob Moore). * Initial bits of Unload () operator deprecation (Bob Moore). * Updates related to the IORT table (Robin Murphy). - Make Linux respond to the "Windows 2017.2" _OSI string which allows native Thunderbolt enumeration to be used on Dell systems and was unsafe before recent changes in the PCI subsystem (Mario Limonciello) - Update the ACPI method customization feature documentation (Erik Schmauss)" * tag 'acpi-4.18-rc1-2' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm: ACPICA: Recognize the _OSI string "Windows 2017.2" ACPICA: Update version to 20180531 ACPICA: Interpreter: Begin deprecation of Unload operator ACPICA: AML parser: attempt to continue loading table after error ACPICA: Debugger: Reduce verbosity for module-level code errors. ACPICA: AML Parser: Add debug option to dump parse trees ACPICA: Debugger: Add count of namespace nodes after namespace dump ACPICA: IORT: Add PMCG node supprt ACPICA: IORT: Update for revision D ACPI / Documentation: update ACPI customize method feature docs
This commit is contained in:
commit
d290ef9305
|
@ -16,7 +16,8 @@ control method rather than override the entire DSDT, because kernel
|
||||||
rebuild/reboot is not needed and test result can be got in minutes.
|
rebuild/reboot is not needed and test result can be got in minutes.
|
||||||
|
|
||||||
Note: Only ACPI METHOD can be overridden, any other object types like
|
Note: Only ACPI METHOD can be overridden, any other object types like
|
||||||
"Device", "OperationRegion", are not recognized.
|
"Device", "OperationRegion", are not recognized. Methods
|
||||||
|
declared inside scope operators are also not supported.
|
||||||
Note: The same ACPI control method can be overridden for many times,
|
Note: The same ACPI control method can be overridden for many times,
|
||||||
and it's always the latest one that used by Linux/kernel.
|
and it's always the latest one that used by Linux/kernel.
|
||||||
Note: To get the ACPI debug object output (Store (AAAA, Debug)),
|
Note: To get the ACPI debug object output (Store (AAAA, Debug)),
|
||||||
|
@ -32,8 +33,6 @@ Note: To get the ACPI debug object output (Store (AAAA, Debug)),
|
||||||
|
|
||||||
DefinitionBlock ("", "SSDT", 1, "", "", 0x20080715)
|
DefinitionBlock ("", "SSDT", 1, "", "", 0x20080715)
|
||||||
{
|
{
|
||||||
External (ACON)
|
|
||||||
|
|
||||||
Method (\_SB_.AC._PSR, 0, NotSerialized)
|
Method (\_SB_.AC._PSR, 0, NotSerialized)
|
||||||
{
|
{
|
||||||
Store ("In AC _PSR", Debug)
|
Store ("In AC _PSR", Debug)
|
||||||
|
@ -42,9 +41,10 @@ Note: To get the ACPI debug object output (Store (AAAA, Debug)),
|
||||||
}
|
}
|
||||||
Note that the full pathname of the method in ACPI namespace
|
Note that the full pathname of the method in ACPI namespace
|
||||||
should be used.
|
should be used.
|
||||||
And remember to use "External" to declare external objects.
|
|
||||||
e) assemble the file to generate the AML code of the method.
|
e) assemble the file to generate the AML code of the method.
|
||||||
e.g. "iasl psr.asl" (psr.aml is generated as a result)
|
e.g. "iasl -vw 6084 psr.asl" (psr.aml is generated as a result)
|
||||||
|
If parameter "-vw 6084" is not supported by your iASL compiler,
|
||||||
|
please try a newer version.
|
||||||
f) mount debugfs by "mount -t debugfs none /sys/kernel/debug"
|
f) mount debugfs by "mount -t debugfs none /sys/kernel/debug"
|
||||||
g) override the old method via the debugfs by running
|
g) override the old method via the debugfs by running
|
||||||
"cat /tmp/psr.aml > /sys/kernel/debug/acpi/custom_method"
|
"cat /tmp/psr.aml > /sys/kernel/debug/acpi/custom_method"
|
||||||
|
|
|
@ -322,6 +322,7 @@ acpi_db_walk_and_match_name(acpi_handle obj_handle,
|
||||||
acpi_os_printf("Could Not get pathname for object %p\n",
|
acpi_os_printf("Could Not get pathname for object %p\n",
|
||||||
obj_handle);
|
obj_handle);
|
||||||
} else {
|
} else {
|
||||||
|
info.count = 0;
|
||||||
info.owner_id = ACPI_OWNER_ID_MAX;
|
info.owner_id = ACPI_OWNER_ID_MAX;
|
||||||
info.debug_level = ACPI_UINT32_MAX;
|
info.debug_level = ACPI_UINT32_MAX;
|
||||||
info.display_type = ACPI_DISPLAY_SUMMARY | ACPI_DISPLAY_SHORT;
|
info.display_type = ACPI_DISPLAY_SUMMARY | ACPI_DISPLAY_SHORT;
|
||||||
|
|
|
@ -35,6 +35,15 @@ void
|
||||||
acpi_db_dump_method_info(acpi_status status, struct acpi_walk_state *walk_state)
|
acpi_db_dump_method_info(acpi_status status, struct acpi_walk_state *walk_state)
|
||||||
{
|
{
|
||||||
struct acpi_thread_state *thread;
|
struct acpi_thread_state *thread;
|
||||||
|
struct acpi_namespace_node *node;
|
||||||
|
|
||||||
|
node = walk_state->method_node;
|
||||||
|
|
||||||
|
/* There are no locals or arguments for the module-level code case */
|
||||||
|
|
||||||
|
if (node == acpi_gbl_root_node) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
/* Ignore control codes, they are not errors */
|
/* Ignore control codes, they are not errors */
|
||||||
|
|
||||||
|
@ -384,8 +393,14 @@ void acpi_db_decode_locals(struct acpi_walk_state *walk_state)
|
||||||
struct acpi_namespace_node *node;
|
struct acpi_namespace_node *node;
|
||||||
u8 display_locals = FALSE;
|
u8 display_locals = FALSE;
|
||||||
|
|
||||||
obj_desc = walk_state->method_desc;
|
|
||||||
node = walk_state->method_node;
|
node = walk_state->method_node;
|
||||||
|
obj_desc = walk_state->method_desc;
|
||||||
|
|
||||||
|
/* There are no locals for the module-level code case */
|
||||||
|
|
||||||
|
if (node == acpi_gbl_root_node) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (!node) {
|
if (!node) {
|
||||||
acpi_os_printf
|
acpi_os_printf
|
||||||
|
@ -452,6 +467,12 @@ void acpi_db_decode_arguments(struct acpi_walk_state *walk_state)
|
||||||
node = walk_state->method_node;
|
node = walk_state->method_node;
|
||||||
obj_desc = walk_state->method_desc;
|
obj_desc = walk_state->method_desc;
|
||||||
|
|
||||||
|
/* There are no arguments for the module-level code case */
|
||||||
|
|
||||||
|
if (node == acpi_gbl_root_node) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (!node) {
|
if (!node) {
|
||||||
acpi_os_printf
|
acpi_os_printf
|
||||||
("No method node (Executing subtree for buffer or opregion)\n");
|
("No method node (Executing subtree for buffer or opregion)\n");
|
||||||
|
|
|
@ -162,9 +162,15 @@ acpi_ds_dump_method_stack(acpi_status status,
|
||||||
op->common.next = NULL;
|
op->common.next = NULL;
|
||||||
|
|
||||||
#ifdef ACPI_DISASSEMBLER
|
#ifdef ACPI_DISASSEMBLER
|
||||||
|
if (walk_state->method_node !=
|
||||||
|
acpi_gbl_root_node) {
|
||||||
|
|
||||||
|
/* More verbose if not module-level code */
|
||||||
|
|
||||||
acpi_os_printf("Failed at ");
|
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
|
||||||
op->common.next = next;
|
op->common.next = next;
|
||||||
}
|
}
|
||||||
|
|
|
@ -489,6 +489,17 @@ acpi_status acpi_ex_unload_table(union acpi_operand_object *ddb_handle)
|
||||||
*/
|
*/
|
||||||
ACPI_WARNING((AE_INFO, "Received request to unload an ACPI table"));
|
ACPI_WARNING((AE_INFO, "Received request to unload an ACPI table"));
|
||||||
|
|
||||||
|
/*
|
||||||
|
* May 2018: Unload is no longer supported for the following reasons:
|
||||||
|
* 1) A correct implementation on some hosts may not be possible.
|
||||||
|
* 2) Other ACPI implementations do not correctly/fully support it.
|
||||||
|
* 3) It requires host device driver support which does not exist.
|
||||||
|
* (To properly support namespace unload out from underneath.)
|
||||||
|
* 4) This AML operator has never been seen in the field.
|
||||||
|
*/
|
||||||
|
ACPI_EXCEPTION((AE_INFO, AE_NOT_IMPLEMENTED,
|
||||||
|
"AML Unload operator is not supported"));
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Validate the handle
|
* Validate the handle
|
||||||
* Although the handle is partially validated in acpi_ex_reconfiguration()
|
* Although the handle is partially validated in acpi_ex_reconfiguration()
|
||||||
|
|
|
@ -170,6 +170,7 @@ acpi_ns_dump_one_object(acpi_handle obj_handle,
|
||||||
}
|
}
|
||||||
|
|
||||||
type = this_node->type;
|
type = this_node->type;
|
||||||
|
info->count++;
|
||||||
|
|
||||||
/* Check if the owner matches */
|
/* Check if the owner matches */
|
||||||
|
|
||||||
|
@ -639,6 +640,7 @@ acpi_ns_dump_objects(acpi_object_type type,
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
info.count = 0;
|
||||||
info.debug_level = ACPI_LV_TABLES;
|
info.debug_level = ACPI_LV_TABLES;
|
||||||
info.owner_id = owner_id;
|
info.owner_id = owner_id;
|
||||||
info.display_type = display_type;
|
info.display_type = display_type;
|
||||||
|
@ -649,6 +651,7 @@ acpi_ns_dump_objects(acpi_object_type type,
|
||||||
acpi_ns_dump_one_object, NULL,
|
acpi_ns_dump_one_object, NULL,
|
||||||
(void *)&info, NULL);
|
(void *)&info, NULL);
|
||||||
|
|
||||||
|
acpi_os_printf("\nNamespace node count: %u\n\n", info.count);
|
||||||
(void)acpi_ut_release_mutex(ACPI_MTX_NAMESPACE);
|
(void)acpi_ut_release_mutex(ACPI_MTX_NAMESPACE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -515,6 +515,22 @@ acpi_status acpi_ps_parse_loop(struct acpi_walk_state *walk_state)
|
||||||
if (ACPI_FAILURE(status)) {
|
if (ACPI_FAILURE(status)) {
|
||||||
return_ACPI_STATUS(status);
|
return_ACPI_STATUS(status);
|
||||||
}
|
}
|
||||||
|
if (walk_state->opcode == AML_SCOPE_OP) {
|
||||||
|
/*
|
||||||
|
* If the scope op fails to parse, skip the body of the
|
||||||
|
* scope op because the parse failure indicates that the
|
||||||
|
* device may not exist.
|
||||||
|
*/
|
||||||
|
walk_state->parser_state.aml =
|
||||||
|
walk_state->aml + 1;
|
||||||
|
walk_state->parser_state.aml =
|
||||||
|
acpi_ps_get_next_package_end
|
||||||
|
(&walk_state->parser_state);
|
||||||
|
walk_state->aml =
|
||||||
|
walk_state->parser_state.aml;
|
||||||
|
ACPI_ERROR((AE_INFO,
|
||||||
|
"Skipping Scope block"));
|
||||||
|
}
|
||||||
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
@ -557,7 +573,40 @@ acpi_status acpi_ps_parse_loop(struct acpi_walk_state *walk_state)
|
||||||
if (ACPI_FAILURE(status)) {
|
if (ACPI_FAILURE(status)) {
|
||||||
return_ACPI_STATUS(status);
|
return_ACPI_STATUS(status);
|
||||||
}
|
}
|
||||||
|
if ((walk_state->control_state) &&
|
||||||
|
((walk_state->control_state->control.
|
||||||
|
opcode == AML_IF_OP)
|
||||||
|
|| (walk_state->control_state->control.
|
||||||
|
opcode == AML_WHILE_OP))) {
|
||||||
|
/*
|
||||||
|
* If the if/while op fails to parse, we will skip parsing
|
||||||
|
* the body of the op.
|
||||||
|
*/
|
||||||
|
parser_state->aml =
|
||||||
|
walk_state->control_state->control.
|
||||||
|
aml_predicate_start + 1;
|
||||||
|
parser_state->aml =
|
||||||
|
acpi_ps_get_next_package_end
|
||||||
|
(parser_state);
|
||||||
|
walk_state->aml = parser_state->aml;
|
||||||
|
|
||||||
|
ACPI_ERROR((AE_INFO,
|
||||||
|
"Skipping While/If block"));
|
||||||
|
if (*walk_state->aml == AML_ELSE_OP) {
|
||||||
|
ACPI_ERROR((AE_INFO,
|
||||||
|
"Skipping Else block"));
|
||||||
|
walk_state->parser_state.aml =
|
||||||
|
walk_state->aml + 1;
|
||||||
|
walk_state->parser_state.aml =
|
||||||
|
acpi_ps_get_next_package_end
|
||||||
|
(parser_state);
|
||||||
|
walk_state->aml =
|
||||||
|
parser_state->aml;
|
||||||
|
}
|
||||||
|
ACPI_FREE(acpi_ut_pop_generic_state
|
||||||
|
(&walk_state->control_state));
|
||||||
|
}
|
||||||
|
op = NULL;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -12,6 +12,7 @@
|
||||||
#include "acparser.h"
|
#include "acparser.h"
|
||||||
#include "amlcode.h"
|
#include "amlcode.h"
|
||||||
#include "acconvert.h"
|
#include "acconvert.h"
|
||||||
|
#include "acnamesp.h"
|
||||||
|
|
||||||
#define _COMPONENT ACPI_PARSER
|
#define _COMPONENT ACPI_PARSER
|
||||||
ACPI_MODULE_NAME("psobject")
|
ACPI_MODULE_NAME("psobject")
|
||||||
|
@ -549,6 +550,21 @@ acpi_ps_complete_op(struct acpi_walk_state *walk_state,
|
||||||
|
|
||||||
do {
|
do {
|
||||||
if (*op) {
|
if (*op) {
|
||||||
|
/*
|
||||||
|
* These Opcodes need to be removed from the namespace because they
|
||||||
|
* get created even if these opcodes cannot be created due to
|
||||||
|
* errors.
|
||||||
|
*/
|
||||||
|
if (((*op)->common.aml_opcode == AML_REGION_OP)
|
||||||
|
|| ((*op)->common.aml_opcode ==
|
||||||
|
AML_DATA_REGION_OP)) {
|
||||||
|
acpi_ns_delete_children((*op)->common.
|
||||||
|
node);
|
||||||
|
acpi_ns_remove_node((*op)->common.node);
|
||||||
|
(*op)->common.node = NULL;
|
||||||
|
acpi_ps_delete_parse_tree(*op);
|
||||||
|
}
|
||||||
|
|
||||||
status2 =
|
status2 =
|
||||||
acpi_ps_complete_this_op(walk_state, *op);
|
acpi_ps_complete_this_op(walk_state, *op);
|
||||||
if (ACPI_FAILURE(status2)) {
|
if (ACPI_FAILURE(status2)) {
|
||||||
|
@ -574,6 +590,20 @@ acpi_ps_complete_op(struct acpi_walk_state *walk_state,
|
||||||
#endif
|
#endif
|
||||||
walk_state->prev_op = NULL;
|
walk_state->prev_op = NULL;
|
||||||
walk_state->prev_arg_types = walk_state->arg_types;
|
walk_state->prev_arg_types = walk_state->arg_types;
|
||||||
|
|
||||||
|
if (walk_state->parse_flags & ACPI_PARSE_MODULE_LEVEL) {
|
||||||
|
/*
|
||||||
|
* There was something that went wrong while executing code at the
|
||||||
|
* module-level. We need to skip parsing whatever caused the
|
||||||
|
* error and keep going. One runtime error during the table load
|
||||||
|
* should not cause the entire table to not be loaded. This is
|
||||||
|
* because there could be correct AML beyond the parts that caused
|
||||||
|
* the runtime error.
|
||||||
|
*/
|
||||||
|
ACPI_ERROR((AE_INFO,
|
||||||
|
"Ignore error and continue table load"));
|
||||||
|
return_ACPI_STATUS(AE_OK);
|
||||||
|
}
|
||||||
return_ACPI_STATUS(status);
|
return_ACPI_STATUS(status);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -25,22 +25,48 @@ ACPI_MODULE_NAME("pswalk")
|
||||||
* DESCRIPTION: Delete a portion of or an entire parse tree.
|
* DESCRIPTION: Delete a portion of or an entire parse tree.
|
||||||
*
|
*
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
|
#include "amlcode.h"
|
||||||
void acpi_ps_delete_parse_tree(union acpi_parse_object *subtree_root)
|
void acpi_ps_delete_parse_tree(union acpi_parse_object *subtree_root)
|
||||||
{
|
{
|
||||||
union acpi_parse_object *op = subtree_root;
|
union acpi_parse_object *op = subtree_root;
|
||||||
union acpi_parse_object *next = NULL;
|
union acpi_parse_object *next = NULL;
|
||||||
union acpi_parse_object *parent = NULL;
|
union acpi_parse_object *parent = NULL;
|
||||||
|
u32 level = 0;
|
||||||
|
|
||||||
ACPI_FUNCTION_TRACE_PTR(ps_delete_parse_tree, subtree_root);
|
ACPI_FUNCTION_TRACE_PTR(ps_delete_parse_tree, subtree_root);
|
||||||
|
|
||||||
|
ACPI_DEBUG_PRINT((ACPI_DB_PARSE_TREES, " root %p\n", subtree_root));
|
||||||
|
|
||||||
/* Visit all nodes in the subtree */
|
/* Visit all nodes in the subtree */
|
||||||
|
|
||||||
while (op) {
|
while (op) {
|
||||||
|
|
||||||
/* Check if we are not ascending */
|
|
||||||
|
|
||||||
if (op != parent) {
|
if (op != parent) {
|
||||||
|
|
||||||
|
/* This is the descending case */
|
||||||
|
|
||||||
|
if (ACPI_IS_DEBUG_ENABLED
|
||||||
|
(ACPI_LV_PARSE_TREES, _COMPONENT)) {
|
||||||
|
|
||||||
|
/* This debug option will print the entire parse tree */
|
||||||
|
|
||||||
|
acpi_os_printf(" %*.s%s %p", (level * 4),
|
||||||
|
" ",
|
||||||
|
acpi_ps_get_opcode_name(op->
|
||||||
|
common.
|
||||||
|
aml_opcode),
|
||||||
|
op);
|
||||||
|
|
||||||
|
if (op->named.aml_opcode == AML_INT_NAMEPATH_OP) {
|
||||||
|
acpi_os_printf(" %4.4s",
|
||||||
|
op->common.value.string);
|
||||||
|
}
|
||||||
|
if (op->named.aml_opcode == AML_STRING_OP) {
|
||||||
|
acpi_os_printf(" %s",
|
||||||
|
op->common.value.string);
|
||||||
|
}
|
||||||
|
acpi_os_printf("\n");
|
||||||
|
}
|
||||||
|
|
||||||
/* Look for an argument or child of the current op */
|
/* Look for an argument or child of the current op */
|
||||||
|
|
||||||
next = acpi_ps_get_arg(op, 0);
|
next = acpi_ps_get_arg(op, 0);
|
||||||
|
@ -49,6 +75,7 @@ void acpi_ps_delete_parse_tree(union acpi_parse_object *subtree_root)
|
||||||
/* Still going downward in tree (Op is not completed yet) */
|
/* Still going downward in tree (Op is not completed yet) */
|
||||||
|
|
||||||
op = next;
|
op = next;
|
||||||
|
level++;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -69,6 +96,7 @@ void acpi_ps_delete_parse_tree(union acpi_parse_object *subtree_root)
|
||||||
if (next) {
|
if (next) {
|
||||||
op = next;
|
op = next;
|
||||||
} else {
|
} else {
|
||||||
|
level--;
|
||||||
op = parent;
|
op = parent;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -182,20 +182,20 @@ acpi_ut_prefixed_namespace_error(const char *module_name,
|
||||||
switch (lookup_status) {
|
switch (lookup_status) {
|
||||||
case AE_ALREADY_EXISTS:
|
case AE_ALREADY_EXISTS:
|
||||||
|
|
||||||
acpi_os_printf(ACPI_MSG_BIOS_ERROR);
|
acpi_os_printf("\n" ACPI_MSG_BIOS_ERROR);
|
||||||
message = "Failure creating";
|
message = "Failure creating";
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case AE_NOT_FOUND:
|
case AE_NOT_FOUND:
|
||||||
|
|
||||||
acpi_os_printf(ACPI_MSG_BIOS_ERROR);
|
acpi_os_printf("\n" ACPI_MSG_BIOS_ERROR);
|
||||||
message = "Failure looking up";
|
message = "Could not resolve";
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
|
||||||
acpi_os_printf(ACPI_MSG_ERROR);
|
acpi_os_printf("\n" ACPI_MSG_ERROR);
|
||||||
message = "Failure looking up";
|
message = "Failure resolving";
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -69,6 +69,7 @@ static struct acpi_interface_info acpi_default_supported_interfaces[] = {
|
||||||
{"Windows 2015", NULL, 0, ACPI_OSI_WIN_10}, /* Windows 10 - Added 03/2015 */
|
{"Windows 2015", NULL, 0, ACPI_OSI_WIN_10}, /* Windows 10 - Added 03/2015 */
|
||||||
{"Windows 2016", NULL, 0, ACPI_OSI_WIN_10_RS1}, /* Windows 10 version 1607 - Added 12/2017 */
|
{"Windows 2016", NULL, 0, ACPI_OSI_WIN_10_RS1}, /* Windows 10 version 1607 - Added 12/2017 */
|
||||||
{"Windows 2017", NULL, 0, ACPI_OSI_WIN_10_RS2}, /* Windows 10 version 1703 - Added 12/2017 */
|
{"Windows 2017", NULL, 0, ACPI_OSI_WIN_10_RS2}, /* Windows 10 version 1703 - Added 12/2017 */
|
||||||
|
{"Windows 2017.2", NULL, 0, ACPI_OSI_WIN_10_RS3}, /* Windows 10 version 1709 - Added 02/2018 */
|
||||||
|
|
||||||
/* Feature Group Strings */
|
/* Feature Group Strings */
|
||||||
|
|
||||||
|
|
|
@ -80,7 +80,8 @@
|
||||||
#define ACPI_LV_ALLOCATIONS 0x00100000
|
#define ACPI_LV_ALLOCATIONS 0x00100000
|
||||||
#define ACPI_LV_FUNCTIONS 0x00200000
|
#define ACPI_LV_FUNCTIONS 0x00200000
|
||||||
#define ACPI_LV_OPTIMIZATIONS 0x00400000
|
#define ACPI_LV_OPTIMIZATIONS 0x00400000
|
||||||
#define ACPI_LV_VERBOSITY2 0x00700000 | ACPI_LV_VERBOSITY1
|
#define ACPI_LV_PARSE_TREES 0x00800000
|
||||||
|
#define ACPI_LV_VERBOSITY2 0x00F00000 | ACPI_LV_VERBOSITY1
|
||||||
#define ACPI_LV_ALL ACPI_LV_VERBOSITY2
|
#define ACPI_LV_ALL ACPI_LV_VERBOSITY2
|
||||||
|
|
||||||
/* Trace verbosity level 3 [Threading, I/O, and Interrupts] */
|
/* Trace verbosity level 3 [Threading, I/O, and Interrupts] */
|
||||||
|
@ -131,6 +132,7 @@
|
||||||
#define ACPI_DB_TABLES ACPI_DEBUG_LEVEL (ACPI_LV_TABLES)
|
#define ACPI_DB_TABLES ACPI_DEBUG_LEVEL (ACPI_LV_TABLES)
|
||||||
#define ACPI_DB_FUNCTIONS ACPI_DEBUG_LEVEL (ACPI_LV_FUNCTIONS)
|
#define ACPI_DB_FUNCTIONS ACPI_DEBUG_LEVEL (ACPI_LV_FUNCTIONS)
|
||||||
#define ACPI_DB_OPTIMIZATIONS ACPI_DEBUG_LEVEL (ACPI_LV_OPTIMIZATIONS)
|
#define ACPI_DB_OPTIMIZATIONS ACPI_DEBUG_LEVEL (ACPI_LV_OPTIMIZATIONS)
|
||||||
|
#define ACPI_DB_PARSE_TREES ACPI_DEBUG_LEVEL (ACPI_LV_PARSE_TREES)
|
||||||
#define ACPI_DB_VALUES ACPI_DEBUG_LEVEL (ACPI_LV_VALUES)
|
#define ACPI_DB_VALUES ACPI_DEBUG_LEVEL (ACPI_LV_VALUES)
|
||||||
#define ACPI_DB_OBJECTS ACPI_DEBUG_LEVEL (ACPI_LV_OBJECTS)
|
#define ACPI_DB_OBJECTS ACPI_DEBUG_LEVEL (ACPI_LV_OBJECTS)
|
||||||
#define ACPI_DB_ALLOCATIONS ACPI_DEBUG_LEVEL (ACPI_LV_ALLOCATIONS)
|
#define ACPI_DB_ALLOCATIONS ACPI_DEBUG_LEVEL (ACPI_LV_ALLOCATIONS)
|
||||||
|
|
|
@ -12,7 +12,7 @@
|
||||||
|
|
||||||
/* Current ACPICA subsystem version in YYYYMMDD format */
|
/* Current ACPICA subsystem version in YYYYMMDD format */
|
||||||
|
|
||||||
#define ACPI_CA_VERSION 0x20180508
|
#define ACPI_CA_VERSION 0x20180531
|
||||||
|
|
||||||
#include <acpi/acconfig.h>
|
#include <acpi/acconfig.h>
|
||||||
#include <acpi/actypes.h>
|
#include <acpi/actypes.h>
|
||||||
|
|
|
@ -67,7 +67,7 @@
|
||||||
* IORT - IO Remapping Table
|
* IORT - IO Remapping Table
|
||||||
*
|
*
|
||||||
* Conforms to "IO Remapping Table System Software on ARM Platforms",
|
* Conforms to "IO Remapping Table System Software on ARM Platforms",
|
||||||
* Document number: ARM DEN 0049C, May 2017
|
* Document number: ARM DEN 0049D, March 2018
|
||||||
*
|
*
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
|
|
||||||
|
@ -98,7 +98,8 @@ enum acpi_iort_node_type {
|
||||||
ACPI_IORT_NODE_NAMED_COMPONENT = 0x01,
|
ACPI_IORT_NODE_NAMED_COMPONENT = 0x01,
|
||||||
ACPI_IORT_NODE_PCI_ROOT_COMPLEX = 0x02,
|
ACPI_IORT_NODE_PCI_ROOT_COMPLEX = 0x02,
|
||||||
ACPI_IORT_NODE_SMMU = 0x03,
|
ACPI_IORT_NODE_SMMU = 0x03,
|
||||||
ACPI_IORT_NODE_SMMU_V3 = 0x04
|
ACPI_IORT_NODE_SMMU_V3 = 0x04,
|
||||||
|
ACPI_IORT_NODE_PMCG = 0x05
|
||||||
};
|
};
|
||||||
|
|
||||||
struct acpi_iort_id_mapping {
|
struct acpi_iort_id_mapping {
|
||||||
|
@ -152,10 +153,17 @@ struct acpi_iort_named_component {
|
||||||
char device_name[1]; /* Path of namespace object */
|
char device_name[1]; /* Path of namespace object */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/* Masks for Flags field above */
|
||||||
|
|
||||||
|
#define ACPI_IORT_NC_STALL_SUPPORTED (1)
|
||||||
|
#define ACPI_IORT_NC_PASID_BITS (31<<1)
|
||||||
|
|
||||||
struct acpi_iort_root_complex {
|
struct acpi_iort_root_complex {
|
||||||
u64 memory_properties; /* Memory access properties */
|
u64 memory_properties; /* Memory access properties */
|
||||||
u32 ats_attribute;
|
u32 ats_attribute;
|
||||||
u32 pci_segment_number;
|
u32 pci_segment_number;
|
||||||
|
u8 memory_address_limit; /* Memory address size limit */
|
||||||
|
u8 reserved[3]; /* Reserved, must be zero */
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Values for ats_attribute field above */
|
/* Values for ats_attribute field above */
|
||||||
|
@ -209,9 +217,7 @@ struct acpi_iort_smmu_v3 {
|
||||||
u32 pri_gsiv;
|
u32 pri_gsiv;
|
||||||
u32 gerr_gsiv;
|
u32 gerr_gsiv;
|
||||||
u32 sync_gsiv;
|
u32 sync_gsiv;
|
||||||
u8 pxm;
|
u32 pxm;
|
||||||
u8 reserved1;
|
|
||||||
u16 reserved2;
|
|
||||||
u32 id_mapping_index;
|
u32 id_mapping_index;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -224,9 +230,16 @@ struct acpi_iort_smmu_v3 {
|
||||||
/* Masks for Flags field above */
|
/* Masks for Flags field above */
|
||||||
|
|
||||||
#define ACPI_IORT_SMMU_V3_COHACC_OVERRIDE (1)
|
#define ACPI_IORT_SMMU_V3_COHACC_OVERRIDE (1)
|
||||||
#define ACPI_IORT_SMMU_V3_HTTU_OVERRIDE (1<<1)
|
#define ACPI_IORT_SMMU_V3_HTTU_OVERRIDE (3<<1)
|
||||||
#define ACPI_IORT_SMMU_V3_PXM_VALID (1<<3)
|
#define ACPI_IORT_SMMU_V3_PXM_VALID (1<<3)
|
||||||
|
|
||||||
|
struct acpi_iort_pmcg {
|
||||||
|
u64 page0_base_address;
|
||||||
|
u32 overflow_gsiv;
|
||||||
|
u32 node_reference;
|
||||||
|
u64 page1_base_address;
|
||||||
|
};
|
||||||
|
|
||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
*
|
*
|
||||||
* IVRS - I/O Virtualization Reporting Structure
|
* IVRS - I/O Virtualization Reporting Structure
|
||||||
|
|
|
@ -1272,6 +1272,7 @@ typedef enum {
|
||||||
#define ACPI_OSI_WIN_10 0x0D
|
#define ACPI_OSI_WIN_10 0x0D
|
||||||
#define ACPI_OSI_WIN_10_RS1 0x0E
|
#define ACPI_OSI_WIN_10_RS1 0x0E
|
||||||
#define ACPI_OSI_WIN_10_RS2 0x0F
|
#define ACPI_OSI_WIN_10_RS2 0x0F
|
||||||
|
#define ACPI_OSI_WIN_10_RS3 0x10
|
||||||
|
|
||||||
/* Definitions of getopt */
|
/* Definitions of getopt */
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue