mirror of https://gitee.com/openkylin/linux.git
Merge branch 'acpica'
ACPICA update to upstream revision 20180531 (including an important AML parser fix and updates related to IORT) and a change to start responding to the "Windows 2017.2" _OSI string. * acpica: 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
This commit is contained in:
commit
674455326e
|
@ -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
|
||||||
acpi_os_printf("Failed at ");
|
if (walk_state->method_node !=
|
||||||
acpi_dm_disassemble(next_walk_state, op,
|
acpi_gbl_root_node) {
|
||||||
ACPI_UINT32_MAX);
|
|
||||||
|
/* More verbose if not module-level code */
|
||||||
|
|
||||||
|
acpi_os_printf("Failed at ");
|
||||||
|
acpi_dm_disassemble(next_walk_state, op,
|
||||||
|
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