Loading drivers/acpi/acpica/actables.h +9 −9 Original line number Diff line number Diff line Loading @@ -91,7 +91,7 @@ acpi_tb_release_table(struct acpi_table_header *table, u32 table_length, u8 table_flags); acpi_status acpi_tb_install_non_fixed_table(acpi_physical_address address, acpi_tb_install_standard_table(acpi_physical_address address, u8 flags, u8 reload, u8 override, u32 *table_index); Loading Loading @@ -137,12 +137,12 @@ void acpi_tb_check_dsdt_header(void); struct acpi_table_header *acpi_tb_copy_dsdt(u32 table_index); void acpi_tb_install_table(struct acpi_table_desc *table_desc, acpi_tb_init_table_descriptor(struct acpi_table_desc *table_desc, acpi_physical_address address, u8 flags, struct acpi_table_header *table); void acpi_tb_install_and_override_table(u32 table_index, acpi_tb_install_table_with_override(u32 table_index, struct acpi_table_desc *new_table_desc, u8 override); Loading drivers/acpi/acpica/exconfig.c +5 −3 Original line number Diff line number Diff line Loading @@ -482,9 +482,11 @@ acpi_ex_load_op(union acpi_operand_object *obj_desc, ACPI_INFO((AE_INFO, "Dynamic OEM Table Load:")); (void)acpi_ut_acquire_mutex(ACPI_MTX_TABLES); status = acpi_tb_install_non_fixed_table(ACPI_PTR_TO_PHYSADDR(table), ACPI_TABLE_ORIGIN_INTERN_VIRTUAL, status = acpi_tb_install_standard_table(ACPI_PTR_TO_PHYSADDR(table), ACPI_TABLE_ORIGIN_INTERNAL_VIRTUAL, TRUE, TRUE, &table_index); (void)acpi_ut_release_mutex(ACPI_MTX_TABLES); if (ACPI_FAILURE(status)) { Loading drivers/acpi/acpica/tbinstal.c +95 −84 Original line number Diff line number Diff line Loading @@ -51,12 +51,12 @@ ACPI_MODULE_NAME("tbinstal") /* Local prototypes */ static acpi_status acpi_tb_acquire_temporal_table(struct acpi_table_desc *table_desc, acpi_tb_acquire_temp_table(struct acpi_table_desc *table_desc, acpi_physical_address address, u8 flags); static void acpi_tb_release_temporal_table(struct acpi_table_desc *table_desc); static void acpi_tb_release_temp_table(struct acpi_table_desc *table_desc); static acpi_status acpi_tb_acquire_root_table_entry(u32 *table_index); static acpi_status acpi_tb_get_root_table_entry(u32 *table_index); static u8 acpi_tb_is_equivalent_table(struct acpi_table_desc *table_desc, Loading @@ -73,8 +73,8 @@ acpi_tb_is_equivalent_table(struct acpi_table_desc *table_desc, * * RETURN: Status * * DESCRIPTION: Acquire a table. It can be used for tables not maintained in * acpi_gbl_root_table_list. * DESCRIPTION: Acquire an ACPI table. It can be used for tables not * maintained in the acpi_gbl_root_table_list. * ******************************************************************************/ Loading @@ -86,14 +86,14 @@ acpi_tb_acquire_table(struct acpi_table_desc *table_desc, struct acpi_table_header *table = NULL; switch (table_desc->flags & ACPI_TABLE_ORIGIN_MASK) { case ACPI_TABLE_ORIGIN_INTERN_PHYSICAL: case ACPI_TABLE_ORIGIN_INTERNAL_PHYSICAL: table = acpi_os_map_memory(table_desc->address, table_desc->length); break; case ACPI_TABLE_ORIGIN_INTERN_VIRTUAL: case ACPI_TABLE_ORIGIN_EXTERN_VIRTUAL: case ACPI_TABLE_ORIGIN_INTERNAL_VIRTUAL: case ACPI_TABLE_ORIGIN_EXTERNAL_VIRTUAL: table = ACPI_CAST_PTR(struct acpi_table_header, Loading @@ -116,7 +116,6 @@ acpi_tb_acquire_table(struct acpi_table_desc *table_desc, *table_ptr = table; *table_length = table_desc->length; *table_flags = table_desc->flags; return (AE_OK); } Loading @@ -130,7 +129,7 @@ acpi_tb_acquire_table(struct acpi_table_desc *table_desc, * * RETURN: None * * DESCRIPTION: Release a table. The reversal of acpi_tb_acquire_table(). * DESCRIPTION: Release a table. The inverse of acpi_tb_acquire_table(). * ******************************************************************************/ Loading @@ -138,14 +137,15 @@ void acpi_tb_release_table(struct acpi_table_header *table, u32 table_length, u8 table_flags) { switch (table_flags & ACPI_TABLE_ORIGIN_MASK) { case ACPI_TABLE_ORIGIN_INTERN_PHYSICAL: case ACPI_TABLE_ORIGIN_INTERNAL_PHYSICAL: acpi_os_unmap_memory(table, table_length); break; case ACPI_TABLE_ORIGIN_INTERN_VIRTUAL: case ACPI_TABLE_ORIGIN_EXTERN_VIRTUAL: case ACPI_TABLE_ORIGIN_INTERNAL_VIRTUAL: case ACPI_TABLE_ORIGIN_EXTERNAL_VIRTUAL: default: break; Loading Loading @@ -193,7 +193,7 @@ acpi_status acpi_tb_validate_table(struct acpi_table_desc *table_desc) * * RETURN: None * * DESCRIPTION: Invalidate one internal ACPI table, this is reversal of * DESCRIPTION: Invalidate one internal ACPI table, this is the inverse of * acpi_tb_validate_table(). * ******************************************************************************/ Loading Loading @@ -278,7 +278,7 @@ acpi_tb_verify_table(struct acpi_table_desc *table_desc, char *signature) /******************************************************************************* * * FUNCTION: acpi_tb_install_table * FUNCTION: acpi_tb_init_table_descriptor * * PARAMETERS: table_desc - Table descriptor * address - Physical address of the table Loading @@ -287,17 +287,18 @@ acpi_tb_verify_table(struct acpi_table_desc *table_desc, char *signature) * * RETURN: None * * DESCRIPTION: Install an ACPI table into the global data structure. * DESCRIPTION: Initialize a new table descriptor * ******************************************************************************/ void acpi_tb_install_table(struct acpi_table_desc *table_desc, acpi_tb_init_table_descriptor(struct acpi_table_desc *table_desc, acpi_physical_address address, u8 flags, struct acpi_table_header *table) { /* * Initialize the table entry. Set the pointer to NULL, since the * Initialize the table descriptor. Set the pointer to NULL, since the * table is not fully mapped at this time. */ ACPI_MEMSET(table_desc, 0, sizeof(struct acpi_table_desc)); Loading @@ -309,7 +310,7 @@ acpi_tb_install_table(struct acpi_table_desc *table_desc, /******************************************************************************* * * FUNCTION: acpi_tb_acquire_temporal_table * FUNCTION: acpi_tb_acquire_temp_table * * PARAMETERS: table_desc - Table descriptor to be acquired * address - Address of the table Loading @@ -319,21 +320,21 @@ acpi_tb_install_table(struct acpi_table_desc *table_desc, * * DESCRIPTION: This function validates the table header to obtain the length * of a table and fills the table descriptor to make its state as * "INSTALLED". Such table descriptor is only used for verified * "INSTALLED". Such a table descriptor is only used for verified * installation. * ******************************************************************************/ static acpi_status acpi_tb_acquire_temporal_table(struct acpi_table_desc *table_desc, acpi_tb_acquire_temp_table(struct acpi_table_desc *table_desc, acpi_physical_address address, u8 flags) { struct acpi_table_header *table_header; switch (flags & ACPI_TABLE_ORIGIN_MASK) { case ACPI_TABLE_ORIGIN_INTERN_PHYSICAL: case ACPI_TABLE_ORIGIN_INTERNAL_PHYSICAL: /* Try to obtain the length of the table */ /* Get the length of the full table from the header */ table_header = acpi_os_map_memory(address, Loading @@ -341,19 +342,23 @@ acpi_tb_acquire_temporal_table(struct acpi_table_desc *table_desc, if (!table_header) { return (AE_NO_MEMORY); } acpi_tb_install_table(table_desc, address, flags, table_header); acpi_tb_init_table_descriptor(table_desc, address, flags, table_header); acpi_os_unmap_memory(table_header, sizeof(struct acpi_table_header)); return (AE_OK); case ACPI_TABLE_ORIGIN_INTERN_VIRTUAL: case ACPI_TABLE_ORIGIN_EXTERN_VIRTUAL: case ACPI_TABLE_ORIGIN_INTERNAL_VIRTUAL: case ACPI_TABLE_ORIGIN_EXTERNAL_VIRTUAL: table_header = ACPI_CAST_PTR(struct acpi_table_header, address); if (!table_header) { return (AE_NO_MEMORY); } acpi_tb_install_table(table_desc, address, flags, table_header); acpi_tb_init_table_descriptor(table_desc, address, flags, table_header); return (AE_OK); default: Loading @@ -368,21 +373,22 @@ acpi_tb_acquire_temporal_table(struct acpi_table_desc *table_desc, /******************************************************************************* * * FUNCTION: acpi_tb_release_temporal_table * FUNCTION: acpi_tb_release_temp_table * * PARAMETERS: table_desc - Table descriptor to be released * * RETURN: Status * * DESCRIPTION: The reversal of acpi_tb_acquire_temporal_table(). * DESCRIPTION: The inverse of acpi_tb_acquire_temp_table(). * ******************************************************************************/ static void acpi_tb_release_temporal_table(struct acpi_table_desc *table_desc) static void acpi_tb_release_temp_table(struct acpi_table_desc *table_desc) { /* * Note that the .Address is maintained by the callers of * acpi_tb_acquire_temporal_table(), thus do not invoke acpi_tb_uninstall_table() * acpi_tb_acquire_temp_table(), thus do not invoke acpi_tb_uninstall_table() * where .Address will be freed. */ acpi_tb_invalidate_table(table_desc); Loading @@ -390,7 +396,7 @@ static void acpi_tb_release_temporal_table(struct acpi_table_desc *table_desc) /******************************************************************************* * * FUNCTION: acpi_tb_install_and_override_table * FUNCTION: acpi_tb_install_table_with_override * * PARAMETERS: table_index - Index into root table array * new_table_desc - New table descriptor to install Loading @@ -406,10 +412,11 @@ static void acpi_tb_release_temporal_table(struct acpi_table_desc *table_desc) ******************************************************************************/ void acpi_tb_install_and_override_table(u32 table_index, acpi_tb_install_table_with_override(u32 table_index, struct acpi_table_desc *new_table_desc, u8 override) { if (table_index >= acpi_gbl_root_table_list.current_table_count) { return; } Loading @@ -425,8 +432,10 @@ acpi_tb_install_and_override_table(u32 table_index, acpi_tb_override_table(new_table_desc); } acpi_tb_install_table(&acpi_gbl_root_table_list.tables[table_index], new_table_desc->address, new_table_desc->flags, acpi_tb_init_table_descriptor(&acpi_gbl_root_table_list. tables[table_index], new_table_desc->address, new_table_desc->flags, new_table_desc->pointer); acpi_tb_print_table_header(new_table_desc->address, Loading Loading @@ -473,8 +482,8 @@ acpi_tb_install_fixed_table(acpi_physical_address address, /* Fill a table descriptor for validation */ status = acpi_tb_acquire_temporal_table(&new_table_desc, address, ACPI_TABLE_ORIGIN_INTERN_PHYSICAL); status = acpi_tb_acquire_temp_table(&new_table_desc, address, ACPI_TABLE_ORIGIN_INTERNAL_PHYSICAL); if (ACPI_FAILURE(status)) { ACPI_ERROR((AE_INFO, "Could not acquire table length at %p", ACPI_CAST_PTR(void, address))); Loading @@ -488,13 +497,13 @@ acpi_tb_install_fixed_table(acpi_physical_address address, goto release_and_exit; } acpi_tb_install_and_override_table(table_index, &new_table_desc, TRUE); acpi_tb_install_table_with_override(table_index, &new_table_desc, TRUE); release_and_exit: /* Release the temporal table descriptor */ /* Release the temporary table descriptor */ acpi_tb_release_temporal_table(&new_table_desc); acpi_tb_release_temp_table(&new_table_desc); return_ACPI_STATUS(status); } Loading Loading @@ -539,13 +548,12 @@ acpi_tb_is_equivalent_table(struct acpi_table_desc *table_desc, u32 table_index) /* Release the acquired table */ acpi_tb_release_table(table, table_length, table_flags); return (is_equivalent); } /******************************************************************************* * * FUNCTION: acpi_tb_install_non_fixed_table * FUNCTION: acpi_tb_install_standard_table * * PARAMETERS: address - Address of the table (might be a virtual * address depending on the table_flags) Loading @@ -557,7 +565,7 @@ acpi_tb_is_equivalent_table(struct acpi_table_desc *table_desc, u32 table_index) * RETURN: Status * * DESCRIPTION: This function is called to install an ACPI table that is * neither DSDT nor FACS. * neither DSDT nor FACS (a "standard" table.) * When this function is called by "Load" or "LoadTable" opcodes, * or by acpi_load_table() API, the "Reload" parameter is set. * After sucessfully returning from this function, table is Loading @@ -566,7 +574,7 @@ acpi_tb_is_equivalent_table(struct acpi_table_desc *table_desc, u32 table_index) ******************************************************************************/ acpi_status acpi_tb_install_non_fixed_table(acpi_physical_address address, acpi_tb_install_standard_table(acpi_physical_address address, u8 flags, u8 reload, u8 override, u32 *table_index) { Loading @@ -574,12 +582,11 @@ acpi_tb_install_non_fixed_table(acpi_physical_address address, acpi_status status = AE_OK; struct acpi_table_desc new_table_desc; ACPI_FUNCTION_TRACE(tb_install_non_fixed_table); ACPI_FUNCTION_TRACE(tb_install_standard_table); /* Acquire a temporal table descriptor for validation */ /* Acquire a temporary table descriptor for validation */ status = acpi_tb_acquire_temporal_table(&new_table_desc, address, flags); status = acpi_tb_acquire_temp_table(&new_table_desc, address, flags); if (ACPI_FAILURE(status)) { ACPI_ERROR((AE_INFO, "Could not acquire table length at %p", ACPI_CAST_PTR(void, address))); Loading @@ -590,7 +597,8 @@ acpi_tb_install_non_fixed_table(acpi_physical_address address, * Optionally do not load any SSDTs from the RSDT/XSDT. This can * be useful for debugging ACPI problems on some machines. */ if (!reload && acpi_gbl_disable_ssdt_table_install && if (!reload && acpi_gbl_disable_ssdt_table_install && ACPI_COMPARE_NAME(&new_table_desc.signature, ACPI_SIG_SSDT)) { ACPI_INFO((AE_INFO, "Ignoring installation of %4.4s at %p", new_table_desc.signature.ascii, ACPI_CAST_PTR(void, Loading Loading @@ -675,7 +683,7 @@ acpi_tb_install_non_fixed_table(acpi_physical_address address, * As we are going to return AE_OK to the caller, we should * take the responsibility of freeing the input descriptor. * Refill the input descriptor to ensure * acpi_tb_install_and_override_table() can be called again to * acpi_tb_install_table_with_override() can be called again to * indicate the re-installation. */ acpi_tb_uninstall_table(&new_table_desc); Loading @@ -688,18 +696,19 @@ acpi_tb_install_non_fixed_table(acpi_physical_address address, /* Add the table to the global root table list */ status = acpi_tb_acquire_root_table_entry(&i); status = acpi_tb_get_root_table_entry(&i); if (ACPI_FAILURE(status)) { goto release_and_exit; } *table_index = i; acpi_tb_install_and_override_table(i, &new_table_desc, override); acpi_tb_install_table_with_override(i, &new_table_desc, override); release_and_exit: /* Release the temporal table descriptor */ /* Release the temporary table descriptor */ acpi_tb_release_temporal_table(&new_table_desc); acpi_tb_release_temp_table(&new_table_desc); return_ACPI_STATUS(status); } Loading Loading @@ -733,9 +742,9 @@ void acpi_tb_override_table(struct acpi_table_desc *old_table_desc) status = acpi_os_table_override(old_table_desc->pointer, &table); if (ACPI_SUCCESS(status) && table) { acpi_tb_acquire_temporal_table(&new_table_desc, acpi_tb_acquire_temp_table(&new_table_desc, ACPI_PTR_TO_PHYSADDR(table), ACPI_TABLE_ORIGIN_EXTERN_VIRTUAL); ACPI_TABLE_ORIGIN_EXTERNAL_VIRTUAL); override_type = "Logical"; goto finish_override; } Loading @@ -745,8 +754,8 @@ void acpi_tb_override_table(struct acpi_table_desc *old_table_desc) status = acpi_os_physical_table_override(old_table_desc->pointer, &address, &length); if (ACPI_SUCCESS(status) && address && length) { acpi_tb_acquire_temporal_table(&new_table_desc, address, ACPI_TABLE_ORIGIN_INTERN_PHYSICAL); acpi_tb_acquire_temp_table(&new_table_desc, address, ACPI_TABLE_ORIGIN_INTERNAL_PHYSICAL); override_type = "Physical"; goto finish_override; } Loading Loading @@ -776,13 +785,14 @@ void acpi_tb_override_table(struct acpi_table_desc *old_table_desc) * Replace the original table descriptor and keep its state as * "VALIDATED". */ acpi_tb_install_table(old_table_desc, new_table_desc.address, new_table_desc.flags, new_table_desc.pointer); acpi_tb_init_table_descriptor(old_table_desc, new_table_desc.address, new_table_desc.flags, new_table_desc.pointer); acpi_tb_validate_table(old_table_desc); /* Release the temporal table descriptor */ /* Release the temporary table descriptor */ acpi_tb_release_temporal_table(&new_table_desc); acpi_tb_release_temp_table(&new_table_desc); } /******************************************************************************* Loading Loading @@ -851,7 +861,7 @@ acpi_status acpi_tb_resize_root_table_list(void) /******************************************************************************* * * FUNCTION: acpi_tb_acquire_root_table_entry * FUNCTION: acpi_tb_get_root_table_entry * * PARAMETERS: table_index - Where table index is returned * Loading @@ -861,7 +871,7 @@ acpi_status acpi_tb_resize_root_table_list(void) * ******************************************************************************/ static acpi_status acpi_tb_acquire_root_table_entry(u32 *table_index) static acpi_status acpi_tb_get_root_table_entry(u32 *table_index) { acpi_status status; Loading @@ -887,7 +897,8 @@ static acpi_status acpi_tb_acquire_root_table_entry(u32 *table_index) * PARAMETERS: address - Table address * table - Table header * length - Table length * flags - flags * flags - Install flags * table_index - Where the table index is returned * * RETURN: Status and table index. * Loading @@ -903,7 +914,7 @@ acpi_tb_store_table(acpi_physical_address address, acpi_status status; struct acpi_table_desc *table_desc; status = acpi_tb_acquire_root_table_entry(table_index); status = acpi_tb_get_root_table_entry(table_index); if (ACPI_FAILURE(status)) { return (status); } Loading @@ -911,9 +922,8 @@ acpi_tb_store_table(acpi_physical_address address, /* Initialize added table */ table_desc = &acpi_gbl_root_table_list.tables[*table_index]; acpi_tb_install_table(table_desc, address, flags, table); acpi_tb_init_table_descriptor(table_desc, address, flags, table); table_desc->pointer = table; return (AE_OK); } Loading Loading @@ -943,12 +953,11 @@ void acpi_tb_uninstall_table(struct acpi_table_desc *table_desc) acpi_tb_invalidate_table(table_desc); if ((table_desc->flags & ACPI_TABLE_ORIGIN_MASK) == ACPI_TABLE_ORIGIN_INTERN_VIRTUAL) { ACPI_TABLE_ORIGIN_INTERNAL_VIRTUAL) { ACPI_FREE(ACPI_CAST_PTR(void, table_desc->address)); } table_desc->address = ACPI_PTR_TO_PHYSADDR(NULL); return_VOID; } Loading Loading @@ -991,8 +1000,8 @@ void acpi_tb_terminate(void) acpi_gbl_root_table_list.current_table_count = 0; ACPI_DEBUG_PRINT((ACPI_DB_INFO, "ACPI Tables freed\n")); (void)acpi_ut_release_mutex(ACPI_MTX_TABLES); (void)acpi_ut_release_mutex(ACPI_MTX_TABLES); return_VOID; } Loading Loading @@ -1074,8 +1083,10 @@ acpi_status acpi_tb_allocate_owner_id(u32 table_index) (void)acpi_ut_acquire_mutex(ACPI_MTX_TABLES); if (table_index < acpi_gbl_root_table_list.current_table_count) { status = acpi_ut_allocate_owner_id (&(acpi_gbl_root_table_list.tables[table_index].owner_id)); status = acpi_ut_allocate_owner_id(& (acpi_gbl_root_table_list. tables[table_index].owner_id)); } (void)acpi_ut_release_mutex(ACPI_MTX_TABLES); Loading Loading @@ -1146,7 +1157,7 @@ acpi_status acpi_tb_get_owner_id(u32 table_index, acpi_owner_id * owner_id) * * FUNCTION: acpi_tb_is_table_loaded * * PARAMETERS: table_index - Table index * PARAMETERS: table_index - Index into the root table * * RETURN: Table Loaded Flag * Loading drivers/acpi/acpica/tbutils.c +11 −9 Original line number Diff line number Diff line Loading @@ -179,10 +179,12 @@ struct acpi_table_header *acpi_tb_copy_dsdt(u32 table_index) ACPI_MEMCPY(new_table, table_desc->pointer, table_desc->length); acpi_tb_uninstall_table(table_desc); acpi_tb_install_table(&acpi_gbl_root_table_list. acpi_tb_init_table_descriptor(&acpi_gbl_root_table_list. tables[ACPI_TABLE_INDEX_DSDT], ACPI_PTR_TO_PHYSADDR(new_table), ACPI_TABLE_ORIGIN_INTERN_VIRTUAL, new_table); ACPI_TABLE_ORIGIN_INTERNAL_VIRTUAL, new_table); ACPI_INFO((AE_INFO, "Forced DSDT copy: length 0x%05X copied locally, original unmapped", Loading Loading @@ -470,10 +472,10 @@ acpi_status __init acpi_tb_parse_root_table(acpi_physical_address rsdp_address) /* Get the table physical address (32-bit for RSDT, 64-bit for XSDT) */ status = acpi_tb_install_non_fixed_table(acpi_tb_get_root_table_entry acpi_tb_install_standard_table(acpi_tb_get_root_table_entry (table_entry, table_entry_size), ACPI_TABLE_ORIGIN_INTERN_PHYSICAL, ACPI_TABLE_ORIGIN_INTERNAL_PHYSICAL, FALSE, TRUE, &table_index); if (ACPI_SUCCESS(status) && Loading drivers/acpi/acpica/tbxface.c +1 −1 Original line number Diff line number Diff line Loading @@ -233,7 +233,7 @@ acpi_get_table_header(char *signature, if (!acpi_gbl_root_table_list.tables[i].pointer) { if ((acpi_gbl_root_table_list.tables[i].flags & ACPI_TABLE_ORIGIN_MASK) == ACPI_TABLE_ORIGIN_INTERN_PHYSICAL) { ACPI_TABLE_ORIGIN_INTERNAL_PHYSICAL) { header = acpi_os_map_memory(acpi_gbl_root_table_list. tables[i].address, Loading Loading
drivers/acpi/acpica/actables.h +9 −9 Original line number Diff line number Diff line Loading @@ -91,7 +91,7 @@ acpi_tb_release_table(struct acpi_table_header *table, u32 table_length, u8 table_flags); acpi_status acpi_tb_install_non_fixed_table(acpi_physical_address address, acpi_tb_install_standard_table(acpi_physical_address address, u8 flags, u8 reload, u8 override, u32 *table_index); Loading Loading @@ -137,12 +137,12 @@ void acpi_tb_check_dsdt_header(void); struct acpi_table_header *acpi_tb_copy_dsdt(u32 table_index); void acpi_tb_install_table(struct acpi_table_desc *table_desc, acpi_tb_init_table_descriptor(struct acpi_table_desc *table_desc, acpi_physical_address address, u8 flags, struct acpi_table_header *table); void acpi_tb_install_and_override_table(u32 table_index, acpi_tb_install_table_with_override(u32 table_index, struct acpi_table_desc *new_table_desc, u8 override); Loading
drivers/acpi/acpica/exconfig.c +5 −3 Original line number Diff line number Diff line Loading @@ -482,9 +482,11 @@ acpi_ex_load_op(union acpi_operand_object *obj_desc, ACPI_INFO((AE_INFO, "Dynamic OEM Table Load:")); (void)acpi_ut_acquire_mutex(ACPI_MTX_TABLES); status = acpi_tb_install_non_fixed_table(ACPI_PTR_TO_PHYSADDR(table), ACPI_TABLE_ORIGIN_INTERN_VIRTUAL, status = acpi_tb_install_standard_table(ACPI_PTR_TO_PHYSADDR(table), ACPI_TABLE_ORIGIN_INTERNAL_VIRTUAL, TRUE, TRUE, &table_index); (void)acpi_ut_release_mutex(ACPI_MTX_TABLES); if (ACPI_FAILURE(status)) { Loading
drivers/acpi/acpica/tbinstal.c +95 −84 Original line number Diff line number Diff line Loading @@ -51,12 +51,12 @@ ACPI_MODULE_NAME("tbinstal") /* Local prototypes */ static acpi_status acpi_tb_acquire_temporal_table(struct acpi_table_desc *table_desc, acpi_tb_acquire_temp_table(struct acpi_table_desc *table_desc, acpi_physical_address address, u8 flags); static void acpi_tb_release_temporal_table(struct acpi_table_desc *table_desc); static void acpi_tb_release_temp_table(struct acpi_table_desc *table_desc); static acpi_status acpi_tb_acquire_root_table_entry(u32 *table_index); static acpi_status acpi_tb_get_root_table_entry(u32 *table_index); static u8 acpi_tb_is_equivalent_table(struct acpi_table_desc *table_desc, Loading @@ -73,8 +73,8 @@ acpi_tb_is_equivalent_table(struct acpi_table_desc *table_desc, * * RETURN: Status * * DESCRIPTION: Acquire a table. It can be used for tables not maintained in * acpi_gbl_root_table_list. * DESCRIPTION: Acquire an ACPI table. It can be used for tables not * maintained in the acpi_gbl_root_table_list. * ******************************************************************************/ Loading @@ -86,14 +86,14 @@ acpi_tb_acquire_table(struct acpi_table_desc *table_desc, struct acpi_table_header *table = NULL; switch (table_desc->flags & ACPI_TABLE_ORIGIN_MASK) { case ACPI_TABLE_ORIGIN_INTERN_PHYSICAL: case ACPI_TABLE_ORIGIN_INTERNAL_PHYSICAL: table = acpi_os_map_memory(table_desc->address, table_desc->length); break; case ACPI_TABLE_ORIGIN_INTERN_VIRTUAL: case ACPI_TABLE_ORIGIN_EXTERN_VIRTUAL: case ACPI_TABLE_ORIGIN_INTERNAL_VIRTUAL: case ACPI_TABLE_ORIGIN_EXTERNAL_VIRTUAL: table = ACPI_CAST_PTR(struct acpi_table_header, Loading @@ -116,7 +116,6 @@ acpi_tb_acquire_table(struct acpi_table_desc *table_desc, *table_ptr = table; *table_length = table_desc->length; *table_flags = table_desc->flags; return (AE_OK); } Loading @@ -130,7 +129,7 @@ acpi_tb_acquire_table(struct acpi_table_desc *table_desc, * * RETURN: None * * DESCRIPTION: Release a table. The reversal of acpi_tb_acquire_table(). * DESCRIPTION: Release a table. The inverse of acpi_tb_acquire_table(). * ******************************************************************************/ Loading @@ -138,14 +137,15 @@ void acpi_tb_release_table(struct acpi_table_header *table, u32 table_length, u8 table_flags) { switch (table_flags & ACPI_TABLE_ORIGIN_MASK) { case ACPI_TABLE_ORIGIN_INTERN_PHYSICAL: case ACPI_TABLE_ORIGIN_INTERNAL_PHYSICAL: acpi_os_unmap_memory(table, table_length); break; case ACPI_TABLE_ORIGIN_INTERN_VIRTUAL: case ACPI_TABLE_ORIGIN_EXTERN_VIRTUAL: case ACPI_TABLE_ORIGIN_INTERNAL_VIRTUAL: case ACPI_TABLE_ORIGIN_EXTERNAL_VIRTUAL: default: break; Loading Loading @@ -193,7 +193,7 @@ acpi_status acpi_tb_validate_table(struct acpi_table_desc *table_desc) * * RETURN: None * * DESCRIPTION: Invalidate one internal ACPI table, this is reversal of * DESCRIPTION: Invalidate one internal ACPI table, this is the inverse of * acpi_tb_validate_table(). * ******************************************************************************/ Loading Loading @@ -278,7 +278,7 @@ acpi_tb_verify_table(struct acpi_table_desc *table_desc, char *signature) /******************************************************************************* * * FUNCTION: acpi_tb_install_table * FUNCTION: acpi_tb_init_table_descriptor * * PARAMETERS: table_desc - Table descriptor * address - Physical address of the table Loading @@ -287,17 +287,18 @@ acpi_tb_verify_table(struct acpi_table_desc *table_desc, char *signature) * * RETURN: None * * DESCRIPTION: Install an ACPI table into the global data structure. * DESCRIPTION: Initialize a new table descriptor * ******************************************************************************/ void acpi_tb_install_table(struct acpi_table_desc *table_desc, acpi_tb_init_table_descriptor(struct acpi_table_desc *table_desc, acpi_physical_address address, u8 flags, struct acpi_table_header *table) { /* * Initialize the table entry. Set the pointer to NULL, since the * Initialize the table descriptor. Set the pointer to NULL, since the * table is not fully mapped at this time. */ ACPI_MEMSET(table_desc, 0, sizeof(struct acpi_table_desc)); Loading @@ -309,7 +310,7 @@ acpi_tb_install_table(struct acpi_table_desc *table_desc, /******************************************************************************* * * FUNCTION: acpi_tb_acquire_temporal_table * FUNCTION: acpi_tb_acquire_temp_table * * PARAMETERS: table_desc - Table descriptor to be acquired * address - Address of the table Loading @@ -319,21 +320,21 @@ acpi_tb_install_table(struct acpi_table_desc *table_desc, * * DESCRIPTION: This function validates the table header to obtain the length * of a table and fills the table descriptor to make its state as * "INSTALLED". Such table descriptor is only used for verified * "INSTALLED". Such a table descriptor is only used for verified * installation. * ******************************************************************************/ static acpi_status acpi_tb_acquire_temporal_table(struct acpi_table_desc *table_desc, acpi_tb_acquire_temp_table(struct acpi_table_desc *table_desc, acpi_physical_address address, u8 flags) { struct acpi_table_header *table_header; switch (flags & ACPI_TABLE_ORIGIN_MASK) { case ACPI_TABLE_ORIGIN_INTERN_PHYSICAL: case ACPI_TABLE_ORIGIN_INTERNAL_PHYSICAL: /* Try to obtain the length of the table */ /* Get the length of the full table from the header */ table_header = acpi_os_map_memory(address, Loading @@ -341,19 +342,23 @@ acpi_tb_acquire_temporal_table(struct acpi_table_desc *table_desc, if (!table_header) { return (AE_NO_MEMORY); } acpi_tb_install_table(table_desc, address, flags, table_header); acpi_tb_init_table_descriptor(table_desc, address, flags, table_header); acpi_os_unmap_memory(table_header, sizeof(struct acpi_table_header)); return (AE_OK); case ACPI_TABLE_ORIGIN_INTERN_VIRTUAL: case ACPI_TABLE_ORIGIN_EXTERN_VIRTUAL: case ACPI_TABLE_ORIGIN_INTERNAL_VIRTUAL: case ACPI_TABLE_ORIGIN_EXTERNAL_VIRTUAL: table_header = ACPI_CAST_PTR(struct acpi_table_header, address); if (!table_header) { return (AE_NO_MEMORY); } acpi_tb_install_table(table_desc, address, flags, table_header); acpi_tb_init_table_descriptor(table_desc, address, flags, table_header); return (AE_OK); default: Loading @@ -368,21 +373,22 @@ acpi_tb_acquire_temporal_table(struct acpi_table_desc *table_desc, /******************************************************************************* * * FUNCTION: acpi_tb_release_temporal_table * FUNCTION: acpi_tb_release_temp_table * * PARAMETERS: table_desc - Table descriptor to be released * * RETURN: Status * * DESCRIPTION: The reversal of acpi_tb_acquire_temporal_table(). * DESCRIPTION: The inverse of acpi_tb_acquire_temp_table(). * ******************************************************************************/ static void acpi_tb_release_temporal_table(struct acpi_table_desc *table_desc) static void acpi_tb_release_temp_table(struct acpi_table_desc *table_desc) { /* * Note that the .Address is maintained by the callers of * acpi_tb_acquire_temporal_table(), thus do not invoke acpi_tb_uninstall_table() * acpi_tb_acquire_temp_table(), thus do not invoke acpi_tb_uninstall_table() * where .Address will be freed. */ acpi_tb_invalidate_table(table_desc); Loading @@ -390,7 +396,7 @@ static void acpi_tb_release_temporal_table(struct acpi_table_desc *table_desc) /******************************************************************************* * * FUNCTION: acpi_tb_install_and_override_table * FUNCTION: acpi_tb_install_table_with_override * * PARAMETERS: table_index - Index into root table array * new_table_desc - New table descriptor to install Loading @@ -406,10 +412,11 @@ static void acpi_tb_release_temporal_table(struct acpi_table_desc *table_desc) ******************************************************************************/ void acpi_tb_install_and_override_table(u32 table_index, acpi_tb_install_table_with_override(u32 table_index, struct acpi_table_desc *new_table_desc, u8 override) { if (table_index >= acpi_gbl_root_table_list.current_table_count) { return; } Loading @@ -425,8 +432,10 @@ acpi_tb_install_and_override_table(u32 table_index, acpi_tb_override_table(new_table_desc); } acpi_tb_install_table(&acpi_gbl_root_table_list.tables[table_index], new_table_desc->address, new_table_desc->flags, acpi_tb_init_table_descriptor(&acpi_gbl_root_table_list. tables[table_index], new_table_desc->address, new_table_desc->flags, new_table_desc->pointer); acpi_tb_print_table_header(new_table_desc->address, Loading Loading @@ -473,8 +482,8 @@ acpi_tb_install_fixed_table(acpi_physical_address address, /* Fill a table descriptor for validation */ status = acpi_tb_acquire_temporal_table(&new_table_desc, address, ACPI_TABLE_ORIGIN_INTERN_PHYSICAL); status = acpi_tb_acquire_temp_table(&new_table_desc, address, ACPI_TABLE_ORIGIN_INTERNAL_PHYSICAL); if (ACPI_FAILURE(status)) { ACPI_ERROR((AE_INFO, "Could not acquire table length at %p", ACPI_CAST_PTR(void, address))); Loading @@ -488,13 +497,13 @@ acpi_tb_install_fixed_table(acpi_physical_address address, goto release_and_exit; } acpi_tb_install_and_override_table(table_index, &new_table_desc, TRUE); acpi_tb_install_table_with_override(table_index, &new_table_desc, TRUE); release_and_exit: /* Release the temporal table descriptor */ /* Release the temporary table descriptor */ acpi_tb_release_temporal_table(&new_table_desc); acpi_tb_release_temp_table(&new_table_desc); return_ACPI_STATUS(status); } Loading Loading @@ -539,13 +548,12 @@ acpi_tb_is_equivalent_table(struct acpi_table_desc *table_desc, u32 table_index) /* Release the acquired table */ acpi_tb_release_table(table, table_length, table_flags); return (is_equivalent); } /******************************************************************************* * * FUNCTION: acpi_tb_install_non_fixed_table * FUNCTION: acpi_tb_install_standard_table * * PARAMETERS: address - Address of the table (might be a virtual * address depending on the table_flags) Loading @@ -557,7 +565,7 @@ acpi_tb_is_equivalent_table(struct acpi_table_desc *table_desc, u32 table_index) * RETURN: Status * * DESCRIPTION: This function is called to install an ACPI table that is * neither DSDT nor FACS. * neither DSDT nor FACS (a "standard" table.) * When this function is called by "Load" or "LoadTable" opcodes, * or by acpi_load_table() API, the "Reload" parameter is set. * After sucessfully returning from this function, table is Loading @@ -566,7 +574,7 @@ acpi_tb_is_equivalent_table(struct acpi_table_desc *table_desc, u32 table_index) ******************************************************************************/ acpi_status acpi_tb_install_non_fixed_table(acpi_physical_address address, acpi_tb_install_standard_table(acpi_physical_address address, u8 flags, u8 reload, u8 override, u32 *table_index) { Loading @@ -574,12 +582,11 @@ acpi_tb_install_non_fixed_table(acpi_physical_address address, acpi_status status = AE_OK; struct acpi_table_desc new_table_desc; ACPI_FUNCTION_TRACE(tb_install_non_fixed_table); ACPI_FUNCTION_TRACE(tb_install_standard_table); /* Acquire a temporal table descriptor for validation */ /* Acquire a temporary table descriptor for validation */ status = acpi_tb_acquire_temporal_table(&new_table_desc, address, flags); status = acpi_tb_acquire_temp_table(&new_table_desc, address, flags); if (ACPI_FAILURE(status)) { ACPI_ERROR((AE_INFO, "Could not acquire table length at %p", ACPI_CAST_PTR(void, address))); Loading @@ -590,7 +597,8 @@ acpi_tb_install_non_fixed_table(acpi_physical_address address, * Optionally do not load any SSDTs from the RSDT/XSDT. This can * be useful for debugging ACPI problems on some machines. */ if (!reload && acpi_gbl_disable_ssdt_table_install && if (!reload && acpi_gbl_disable_ssdt_table_install && ACPI_COMPARE_NAME(&new_table_desc.signature, ACPI_SIG_SSDT)) { ACPI_INFO((AE_INFO, "Ignoring installation of %4.4s at %p", new_table_desc.signature.ascii, ACPI_CAST_PTR(void, Loading Loading @@ -675,7 +683,7 @@ acpi_tb_install_non_fixed_table(acpi_physical_address address, * As we are going to return AE_OK to the caller, we should * take the responsibility of freeing the input descriptor. * Refill the input descriptor to ensure * acpi_tb_install_and_override_table() can be called again to * acpi_tb_install_table_with_override() can be called again to * indicate the re-installation. */ acpi_tb_uninstall_table(&new_table_desc); Loading @@ -688,18 +696,19 @@ acpi_tb_install_non_fixed_table(acpi_physical_address address, /* Add the table to the global root table list */ status = acpi_tb_acquire_root_table_entry(&i); status = acpi_tb_get_root_table_entry(&i); if (ACPI_FAILURE(status)) { goto release_and_exit; } *table_index = i; acpi_tb_install_and_override_table(i, &new_table_desc, override); acpi_tb_install_table_with_override(i, &new_table_desc, override); release_and_exit: /* Release the temporal table descriptor */ /* Release the temporary table descriptor */ acpi_tb_release_temporal_table(&new_table_desc); acpi_tb_release_temp_table(&new_table_desc); return_ACPI_STATUS(status); } Loading Loading @@ -733,9 +742,9 @@ void acpi_tb_override_table(struct acpi_table_desc *old_table_desc) status = acpi_os_table_override(old_table_desc->pointer, &table); if (ACPI_SUCCESS(status) && table) { acpi_tb_acquire_temporal_table(&new_table_desc, acpi_tb_acquire_temp_table(&new_table_desc, ACPI_PTR_TO_PHYSADDR(table), ACPI_TABLE_ORIGIN_EXTERN_VIRTUAL); ACPI_TABLE_ORIGIN_EXTERNAL_VIRTUAL); override_type = "Logical"; goto finish_override; } Loading @@ -745,8 +754,8 @@ void acpi_tb_override_table(struct acpi_table_desc *old_table_desc) status = acpi_os_physical_table_override(old_table_desc->pointer, &address, &length); if (ACPI_SUCCESS(status) && address && length) { acpi_tb_acquire_temporal_table(&new_table_desc, address, ACPI_TABLE_ORIGIN_INTERN_PHYSICAL); acpi_tb_acquire_temp_table(&new_table_desc, address, ACPI_TABLE_ORIGIN_INTERNAL_PHYSICAL); override_type = "Physical"; goto finish_override; } Loading Loading @@ -776,13 +785,14 @@ void acpi_tb_override_table(struct acpi_table_desc *old_table_desc) * Replace the original table descriptor and keep its state as * "VALIDATED". */ acpi_tb_install_table(old_table_desc, new_table_desc.address, new_table_desc.flags, new_table_desc.pointer); acpi_tb_init_table_descriptor(old_table_desc, new_table_desc.address, new_table_desc.flags, new_table_desc.pointer); acpi_tb_validate_table(old_table_desc); /* Release the temporal table descriptor */ /* Release the temporary table descriptor */ acpi_tb_release_temporal_table(&new_table_desc); acpi_tb_release_temp_table(&new_table_desc); } /******************************************************************************* Loading Loading @@ -851,7 +861,7 @@ acpi_status acpi_tb_resize_root_table_list(void) /******************************************************************************* * * FUNCTION: acpi_tb_acquire_root_table_entry * FUNCTION: acpi_tb_get_root_table_entry * * PARAMETERS: table_index - Where table index is returned * Loading @@ -861,7 +871,7 @@ acpi_status acpi_tb_resize_root_table_list(void) * ******************************************************************************/ static acpi_status acpi_tb_acquire_root_table_entry(u32 *table_index) static acpi_status acpi_tb_get_root_table_entry(u32 *table_index) { acpi_status status; Loading @@ -887,7 +897,8 @@ static acpi_status acpi_tb_acquire_root_table_entry(u32 *table_index) * PARAMETERS: address - Table address * table - Table header * length - Table length * flags - flags * flags - Install flags * table_index - Where the table index is returned * * RETURN: Status and table index. * Loading @@ -903,7 +914,7 @@ acpi_tb_store_table(acpi_physical_address address, acpi_status status; struct acpi_table_desc *table_desc; status = acpi_tb_acquire_root_table_entry(table_index); status = acpi_tb_get_root_table_entry(table_index); if (ACPI_FAILURE(status)) { return (status); } Loading @@ -911,9 +922,8 @@ acpi_tb_store_table(acpi_physical_address address, /* Initialize added table */ table_desc = &acpi_gbl_root_table_list.tables[*table_index]; acpi_tb_install_table(table_desc, address, flags, table); acpi_tb_init_table_descriptor(table_desc, address, flags, table); table_desc->pointer = table; return (AE_OK); } Loading Loading @@ -943,12 +953,11 @@ void acpi_tb_uninstall_table(struct acpi_table_desc *table_desc) acpi_tb_invalidate_table(table_desc); if ((table_desc->flags & ACPI_TABLE_ORIGIN_MASK) == ACPI_TABLE_ORIGIN_INTERN_VIRTUAL) { ACPI_TABLE_ORIGIN_INTERNAL_VIRTUAL) { ACPI_FREE(ACPI_CAST_PTR(void, table_desc->address)); } table_desc->address = ACPI_PTR_TO_PHYSADDR(NULL); return_VOID; } Loading Loading @@ -991,8 +1000,8 @@ void acpi_tb_terminate(void) acpi_gbl_root_table_list.current_table_count = 0; ACPI_DEBUG_PRINT((ACPI_DB_INFO, "ACPI Tables freed\n")); (void)acpi_ut_release_mutex(ACPI_MTX_TABLES); (void)acpi_ut_release_mutex(ACPI_MTX_TABLES); return_VOID; } Loading Loading @@ -1074,8 +1083,10 @@ acpi_status acpi_tb_allocate_owner_id(u32 table_index) (void)acpi_ut_acquire_mutex(ACPI_MTX_TABLES); if (table_index < acpi_gbl_root_table_list.current_table_count) { status = acpi_ut_allocate_owner_id (&(acpi_gbl_root_table_list.tables[table_index].owner_id)); status = acpi_ut_allocate_owner_id(& (acpi_gbl_root_table_list. tables[table_index].owner_id)); } (void)acpi_ut_release_mutex(ACPI_MTX_TABLES); Loading Loading @@ -1146,7 +1157,7 @@ acpi_status acpi_tb_get_owner_id(u32 table_index, acpi_owner_id * owner_id) * * FUNCTION: acpi_tb_is_table_loaded * * PARAMETERS: table_index - Table index * PARAMETERS: table_index - Index into the root table * * RETURN: Table Loaded Flag * Loading
drivers/acpi/acpica/tbutils.c +11 −9 Original line number Diff line number Diff line Loading @@ -179,10 +179,12 @@ struct acpi_table_header *acpi_tb_copy_dsdt(u32 table_index) ACPI_MEMCPY(new_table, table_desc->pointer, table_desc->length); acpi_tb_uninstall_table(table_desc); acpi_tb_install_table(&acpi_gbl_root_table_list. acpi_tb_init_table_descriptor(&acpi_gbl_root_table_list. tables[ACPI_TABLE_INDEX_DSDT], ACPI_PTR_TO_PHYSADDR(new_table), ACPI_TABLE_ORIGIN_INTERN_VIRTUAL, new_table); ACPI_TABLE_ORIGIN_INTERNAL_VIRTUAL, new_table); ACPI_INFO((AE_INFO, "Forced DSDT copy: length 0x%05X copied locally, original unmapped", Loading Loading @@ -470,10 +472,10 @@ acpi_status __init acpi_tb_parse_root_table(acpi_physical_address rsdp_address) /* Get the table physical address (32-bit for RSDT, 64-bit for XSDT) */ status = acpi_tb_install_non_fixed_table(acpi_tb_get_root_table_entry acpi_tb_install_standard_table(acpi_tb_get_root_table_entry (table_entry, table_entry_size), ACPI_TABLE_ORIGIN_INTERN_PHYSICAL, ACPI_TABLE_ORIGIN_INTERNAL_PHYSICAL, FALSE, TRUE, &table_index); if (ACPI_SUCCESS(status) && Loading
drivers/acpi/acpica/tbxface.c +1 −1 Original line number Diff line number Diff line Loading @@ -233,7 +233,7 @@ acpi_get_table_header(char *signature, if (!acpi_gbl_root_table_list.tables[i].pointer) { if ((acpi_gbl_root_table_list.tables[i].flags & ACPI_TABLE_ORIGIN_MASK) == ACPI_TABLE_ORIGIN_INTERN_PHYSICAL) { ACPI_TABLE_ORIGIN_INTERNAL_PHYSICAL) { header = acpi_os_map_memory(acpi_gbl_root_table_list. tables[i].address, Loading