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 + -
显示快捷键?