[PATCH part1 3/5] acpi, acpica: Split acpi_tb_parse_root_table() into two parts.

From: Tang Chen
Date: Wed Aug 07 2013 - 23:41:45 EST


This patch splits acpi_tb_parse_root_table() into two steps, and
introduces two new functions:
acpi_tb_root_table_install() and acpi_tb_root_table_override().

They are just the same as acpi_tb_parse_root_table() if they are
called in sequence.

Signed-off-by: Tang Chen <tangchen@xxxxxxxxxxxxxx>
Reviewed-by: Zhang Yanfei <zhangyanfei@xxxxxxxxxxxxxx>
---
drivers/acpi/acpica/tbutils.c | 57 ++++++++++++++++++++++++++++++++++++++--
1 files changed, 54 insertions(+), 3 deletions(-)

diff --git a/drivers/acpi/acpica/tbutils.c b/drivers/acpi/acpica/tbutils.c
index 9bef44b..8ed9b9a 100644
--- a/drivers/acpi/acpica/tbutils.c
+++ b/drivers/acpi/acpica/tbutils.c
@@ -503,14 +503,16 @@ acpi_tb_get_root_table_entry(u8 *table_entry, u32 table_entry_size)

/*******************************************************************************
*
- * FUNCTION: acpi_tb_parse_root_table
+ * FUNCTION: acpi_tb_root_table_install
*
* PARAMETERS: rsdp - Pointer to the RSDP
*
* RETURN: Status
*
* DESCRIPTION: This function is called to parse the Root System Description
- * Table (RSDT or XSDT)
+ * Table (RSDT or XSDT), and install all the system description
+ * tables defined in the root table into the global root table
+ * list.
*
* NOTE: Tables are mapped (not copied) for efficiency. The FACS must
* be mapped and cannot be copied because it contains the actual
@@ -519,7 +521,7 @@ acpi_tb_get_root_table_entry(u8 *table_entry, u32 table_entry_size)
******************************************************************************/

acpi_status __init
-acpi_tb_parse_root_table(acpi_physical_address rsdp_address)
+acpi_tb_root_table_install(acpi_physical_address rsdp_address)
{
struct acpi_table_rsdp *rsdp;
u32 table_entry_size;
@@ -673,7 +675,31 @@ acpi_tb_parse_root_table(acpi_physical_address rsdp_address)
/* Install tables in firmware into acpi_gbl_root_table_list */
acpi_tb_install_table_firmware(acpi_gbl_root_table_list.
tables[i].address, NULL, i);
+ }
+
+ return_ACPI_STATUS(AE_OK);
+}
+
+/*******************************************************************************
+ *
+ * FUNCTION: acpi_tb_root_table_override
+ *
+ * PARAMETERS: None
+ *
+ * RETURN: None
+ *
+ * DESCRIPTION: This function is called to allow the host OS to replace any
+ * table that has been installed into the global root table
+ * list.
+ *
+ ******************************************************************************/

+void __init
+acpi_tb_root_table_override(void)
+{
+ int i;
+
+ for (i = 2; i < acpi_gbl_root_table_list.current_table_count; i++) {
/* Override the installed tables if any */
acpi_tb_install_table_override(acpi_gbl_root_table_list.
tables[i].address, NULL, i);
@@ -686,6 +712,31 @@ acpi_tb_parse_root_table(acpi_physical_address rsdp_address)
acpi_tb_parse_fadt(i);
}
}
+}
+
+/*******************************************************************************
+ *
+ * FUNCTION: acpi_tb_parse_root_table
+ *
+ * PARAMETERS: rsdp - Pointer to the RSDP
+ *
+ * RETURN: Status
+ *
+ * DESCRIPTION: This function is called to parse the Root System Description
+ * Table (RSDT or XSDT)
+ *
+ ******************************************************************************/
+
+acpi_status __init
+acpi_tb_parse_root_table(acpi_physical_address rsdp_address)
+{
+ acpi_status status;
+
+ status = acpi_tb_root_table_install(rsdp_address);
+ if (ACPI_FAILURE(status))
+ return_ACPI_STATUS(status);
+
+ acpi_tb_root_table_override();

return_ACPI_STATUS(AE_OK);
}
--
1.7.1

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/