tbinstal.c
来自「linux 内核源代码」· C语言 代码 · 共 540 行 · 第 1/2 页
C
540 行
/* Initialize added table */ acpi_gbl_root_table_list.tables[acpi_gbl_root_table_list.count]. address = address; acpi_gbl_root_table_list.tables[acpi_gbl_root_table_list.count]. pointer = table; acpi_gbl_root_table_list.tables[acpi_gbl_root_table_list.count].length = length; acpi_gbl_root_table_list.tables[acpi_gbl_root_table_list.count]. owner_id = 0; acpi_gbl_root_table_list.tables[acpi_gbl_root_table_list.count].flags = flags; ACPI_MOVE_32_TO_32(& (acpi_gbl_root_table_list. tables[acpi_gbl_root_table_list.count].signature), table->signature); *table_index = acpi_gbl_root_table_list.count; acpi_gbl_root_table_list.count++; return (status);}/******************************************************************************* * * FUNCTION: acpi_tb_delete_table * * PARAMETERS: table_index - Table index * * RETURN: None * * DESCRIPTION: Delete one internal ACPI table * ******************************************************************************/void acpi_tb_delete_table(struct acpi_table_desc *table_desc){ /* Table must be mapped or allocated */ if (!table_desc->pointer) { return; } switch (table_desc->flags & ACPI_TABLE_ORIGIN_MASK) { case ACPI_TABLE_ORIGIN_MAPPED: acpi_os_unmap_memory(table_desc->pointer, table_desc->length); break; case ACPI_TABLE_ORIGIN_ALLOCATED: ACPI_FREE(table_desc->pointer); break; default:; } table_desc->pointer = NULL;}/******************************************************************************* * * FUNCTION: acpi_tb_terminate * * PARAMETERS: None * * RETURN: None * * DESCRIPTION: Delete all internal ACPI tables * ******************************************************************************/void acpi_tb_terminate(void){ acpi_native_uint i; ACPI_FUNCTION_TRACE(tb_terminate); (void)acpi_ut_acquire_mutex(ACPI_MTX_TABLES); /* Delete the individual tables */ for (i = 0; i < acpi_gbl_root_table_list.count; ++i) { acpi_tb_delete_table(&acpi_gbl_root_table_list.tables[i]); } /* * Delete the root table array if allocated locally. Array cannot be * mapped, so we don't need to check for that flag. */ if (acpi_gbl_root_table_list.flags & ACPI_ROOT_ORIGIN_ALLOCATED) { ACPI_FREE(acpi_gbl_root_table_list.tables); } acpi_gbl_root_table_list.tables = NULL; acpi_gbl_root_table_list.flags = 0; acpi_gbl_root_table_list.count = 0; ACPI_DEBUG_PRINT((ACPI_DB_INFO, "ACPI Tables freed\n")); (void)acpi_ut_release_mutex(ACPI_MTX_TABLES);}/******************************************************************************* * * FUNCTION: acpi_tb_delete_namespace_by_owner * * PARAMETERS: table_index - Table index * * RETURN: None * * DESCRIPTION: Delete all namespace objects created when this table was loaded. * ******************************************************************************/void acpi_tb_delete_namespace_by_owner(acpi_native_uint table_index){ acpi_owner_id owner_id; (void)acpi_ut_acquire_mutex(ACPI_MTX_TABLES); if (table_index < acpi_gbl_root_table_list.count) { owner_id = acpi_gbl_root_table_list.tables[table_index].owner_id; } else { (void)acpi_ut_release_mutex(ACPI_MTX_TABLES); return; } (void)acpi_ut_release_mutex(ACPI_MTX_TABLES); acpi_ns_delete_namespace_by_owner(owner_id);}/******************************************************************************* * * FUNCTION: acpi_tb_allocate_owner_id * * PARAMETERS: table_index - Table index * * RETURN: Status * * DESCRIPTION: Allocates owner_id in table_desc * ******************************************************************************/acpi_status acpi_tb_allocate_owner_id(acpi_native_uint table_index){ acpi_status status = AE_BAD_PARAMETER; ACPI_FUNCTION_TRACE(tb_allocate_owner_id); (void)acpi_ut_acquire_mutex(ACPI_MTX_TABLES); if (table_index < acpi_gbl_root_table_list.count) { status = acpi_ut_allocate_owner_id (&(acpi_gbl_root_table_list.tables[table_index].owner_id)); } (void)acpi_ut_release_mutex(ACPI_MTX_TABLES); return_ACPI_STATUS(status);}/******************************************************************************* * * FUNCTION: acpi_tb_release_owner_id * * PARAMETERS: table_index - Table index * * RETURN: Status * * DESCRIPTION: Releases owner_id in table_desc * ******************************************************************************/acpi_status acpi_tb_release_owner_id(acpi_native_uint table_index){ acpi_status status = AE_BAD_PARAMETER; ACPI_FUNCTION_TRACE(tb_release_owner_id); (void)acpi_ut_acquire_mutex(ACPI_MTX_TABLES); if (table_index < acpi_gbl_root_table_list.count) { acpi_ut_release_owner_id(& (acpi_gbl_root_table_list. tables[table_index].owner_id)); status = AE_OK; } (void)acpi_ut_release_mutex(ACPI_MTX_TABLES); return_ACPI_STATUS(status);}/******************************************************************************* * * FUNCTION: acpi_tb_get_owner_id * * PARAMETERS: table_index - Table index * owner_id - Where the table owner_id is returned * * RETURN: Status * * DESCRIPTION: returns owner_id for the ACPI table * ******************************************************************************/acpi_statusacpi_tb_get_owner_id(acpi_native_uint table_index, acpi_owner_id * owner_id){ acpi_status status = AE_BAD_PARAMETER; ACPI_FUNCTION_TRACE(tb_get_owner_id); (void)acpi_ut_acquire_mutex(ACPI_MTX_TABLES); if (table_index < acpi_gbl_root_table_list.count) { *owner_id = acpi_gbl_root_table_list.tables[table_index].owner_id; status = AE_OK; } (void)acpi_ut_release_mutex(ACPI_MTX_TABLES); return_ACPI_STATUS(status);}/******************************************************************************* * * FUNCTION: acpi_tb_is_table_loaded * * PARAMETERS: table_index - Table index * * RETURN: Table Loaded Flag * ******************************************************************************/u8 acpi_tb_is_table_loaded(acpi_native_uint table_index){ u8 is_loaded = FALSE; (void)acpi_ut_acquire_mutex(ACPI_MTX_TABLES); if (table_index < acpi_gbl_root_table_list.count) { is_loaded = (u8) (acpi_gbl_root_table_list.tables[table_index]. flags & ACPI_TABLE_IS_LOADED); } (void)acpi_ut_release_mutex(ACPI_MTX_TABLES); return (is_loaded);}/******************************************************************************* * * FUNCTION: acpi_tb_set_table_loaded_flag * * PARAMETERS: table_index - Table index * is_loaded - TRUE if table is loaded, FALSE otherwise * * RETURN: None * * DESCRIPTION: Sets the table loaded flag to either TRUE or FALSE. * ******************************************************************************/void acpi_tb_set_table_loaded_flag(acpi_native_uint table_index, u8 is_loaded){ (void)acpi_ut_acquire_mutex(ACPI_MTX_TABLES); if (table_index < acpi_gbl_root_table_list.count) { if (is_loaded) { acpi_gbl_root_table_list.tables[table_index].flags |= ACPI_TABLE_IS_LOADED; } else { acpi_gbl_root_table_list.tables[table_index].flags &= ~ACPI_TABLE_IS_LOADED; } } (void)acpi_ut_release_mutex(ACPI_MTX_TABLES);}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?