📄 tbinstal.c
字号:
* FUNCTION: AcpiTbStoreTable * * PARAMETERS: Address - Table address * Table - Table header * Length - Table length * Flags - flags * * RETURN: Status and table index. * * DESCRIPTION: Add an ACPI table to the global table list * ******************************************************************************/ACPI_STATUSAcpiTbStoreTable ( ACPI_PHYSICAL_ADDRESS Address, ACPI_TABLE_HEADER *Table, UINT32 Length, UINT8 Flags, ACPI_NATIVE_UINT *TableIndex){ ACPI_STATUS Status = AE_OK; /* Ensure that there is room for the table in the Root Table List */ if (AcpiGbl_RootTableList.Count >= AcpiGbl_RootTableList.Size) { Status = AcpiTbResizeRootTableList(); if (ACPI_FAILURE (Status)) { return (Status); } } /* Initialize added table */ AcpiGbl_RootTableList.Tables[AcpiGbl_RootTableList.Count].Address = Address; AcpiGbl_RootTableList.Tables[AcpiGbl_RootTableList.Count].Pointer = Table; AcpiGbl_RootTableList.Tables[AcpiGbl_RootTableList.Count].Length = Length; AcpiGbl_RootTableList.Tables[AcpiGbl_RootTableList.Count].OwnerId = 0; AcpiGbl_RootTableList.Tables[AcpiGbl_RootTableList.Count].Flags = Flags; ACPI_MOVE_32_TO_32 ( &(AcpiGbl_RootTableList.Tables[AcpiGbl_RootTableList.Count].Signature), Table->Signature); *TableIndex = AcpiGbl_RootTableList.Count; AcpiGbl_RootTableList.Count++; return (Status);}/******************************************************************************* * * FUNCTION: AcpiTbDeleteTable * * PARAMETERS: TableIndex - Table index * * RETURN: None * * DESCRIPTION: Delete one internal ACPI table * ******************************************************************************/voidAcpiTbDeleteTable ( ACPI_TABLE_DESC *TableDesc){ /* Table must be mapped or allocated */ if (!TableDesc->Pointer) { return; } switch (TableDesc->Flags & ACPI_TABLE_ORIGIN_MASK) { case ACPI_TABLE_ORIGIN_MAPPED: AcpiOsUnmapMemory (TableDesc->Pointer, TableDesc->Length); break; case ACPI_TABLE_ORIGIN_ALLOCATED: ACPI_FREE (TableDesc->Pointer); break; default: break; } TableDesc->Pointer = NULL;}/******************************************************************************* * * FUNCTION: AcpiTbTerminate * * PARAMETERS: None * * RETURN: None * * DESCRIPTION: Delete all internal ACPI tables * ******************************************************************************/voidAcpiTbTerminate ( void){ ACPI_NATIVE_UINT i; ACPI_FUNCTION_TRACE (TbTerminate); (void) AcpiUtAcquireMutex (ACPI_MTX_TABLES); /* Delete the individual tables */ for (i = 0; i < AcpiGbl_RootTableList.Count; i++) { AcpiTbDeleteTable (&AcpiGbl_RootTableList.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 (AcpiGbl_RootTableList.Flags & ACPI_ROOT_ORIGIN_ALLOCATED) { ACPI_FREE (AcpiGbl_RootTableList.Tables); } AcpiGbl_RootTableList.Tables = NULL; AcpiGbl_RootTableList.Flags = 0; AcpiGbl_RootTableList.Count = 0; ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "ACPI Tables freed\n")); (void) AcpiUtReleaseMutex (ACPI_MTX_TABLES);}/******************************************************************************* * * FUNCTION: AcpiTbDeleteNamespaceByOwner * * PARAMETERS: TableIndex - Table index * * RETURN: None * * DESCRIPTION: Delete all namespace objects created when this table was loaded. * ******************************************************************************/voidAcpiTbDeleteNamespaceByOwner ( ACPI_NATIVE_UINT TableIndex){ ACPI_OWNER_ID OwnerId; (void) AcpiUtAcquireMutex (ACPI_MTX_TABLES); if (TableIndex < AcpiGbl_RootTableList.Count) { OwnerId = AcpiGbl_RootTableList.Tables[TableIndex].OwnerId; } else { (void) AcpiUtReleaseMutex (ACPI_MTX_TABLES); return; } (void) AcpiUtReleaseMutex (ACPI_MTX_TABLES); AcpiNsDeleteNamespaceByOwner (OwnerId);}/******************************************************************************* * * FUNCTION: AcpiTbAllocateOwnerId * * PARAMETERS: TableIndex - Table index * * RETURN: Status * * DESCRIPTION: Allocates OwnerId in TableDesc * ******************************************************************************/ACPI_STATUSAcpiTbAllocateOwnerId ( ACPI_NATIVE_UINT TableIndex){ ACPI_STATUS Status = AE_BAD_PARAMETER; ACPI_FUNCTION_TRACE (TbAllocateOwnerId); (void) AcpiUtAcquireMutex (ACPI_MTX_TABLES); if (TableIndex < AcpiGbl_RootTableList.Count) { Status = AcpiUtAllocateOwnerId (&(AcpiGbl_RootTableList.Tables[TableIndex].OwnerId)); } (void) AcpiUtReleaseMutex (ACPI_MTX_TABLES); return_ACPI_STATUS (Status);}/******************************************************************************* * * FUNCTION: AcpiTbReleaseOwnerId * * PARAMETERS: TableIndex - Table index * * RETURN: Status * * DESCRIPTION: Releases OwnerId in TableDesc * ******************************************************************************/ACPI_STATUSAcpiTbReleaseOwnerId ( ACPI_NATIVE_UINT TableIndex){ ACPI_STATUS Status = AE_BAD_PARAMETER; ACPI_FUNCTION_TRACE (TbReleaseOwnerId); (void) AcpiUtAcquireMutex (ACPI_MTX_TABLES); if (TableIndex < AcpiGbl_RootTableList.Count) { AcpiUtReleaseOwnerId (&(AcpiGbl_RootTableList.Tables[TableIndex].OwnerId)); Status = AE_OK; } (void) AcpiUtReleaseMutex (ACPI_MTX_TABLES); return_ACPI_STATUS (Status);}/******************************************************************************* * * FUNCTION: AcpiTbGetOwnerId * * PARAMETERS: TableIndex - Table index * OwnerId - Where the table OwnerId is returned * * RETURN: Status * * DESCRIPTION: returns OwnerId for the ACPI table * ******************************************************************************/ACPI_STATUSAcpiTbGetOwnerId ( ACPI_NATIVE_UINT TableIndex, ACPI_OWNER_ID *OwnerId){ ACPI_STATUS Status = AE_BAD_PARAMETER; ACPI_FUNCTION_TRACE (TbGetOwnerId); (void) AcpiUtAcquireMutex (ACPI_MTX_TABLES); if (TableIndex < AcpiGbl_RootTableList.Count) { *OwnerId = AcpiGbl_RootTableList.Tables[TableIndex].OwnerId; Status = AE_OK; } (void) AcpiUtReleaseMutex (ACPI_MTX_TABLES); return_ACPI_STATUS (Status);}/******************************************************************************* * * FUNCTION: AcpiTbIsTableLoaded * * PARAMETERS: TableIndex - Table index * * RETURN: Table Loaded Flag * ******************************************************************************/BOOLEANAcpiTbIsTableLoaded ( ACPI_NATIVE_UINT TableIndex){ BOOLEAN IsLoaded = FALSE; (void) AcpiUtAcquireMutex (ACPI_MTX_TABLES); if (TableIndex < AcpiGbl_RootTableList.Count) { IsLoaded = (BOOLEAN) (AcpiGbl_RootTableList.Tables[TableIndex].Flags & ACPI_TABLE_IS_LOADED); } (void) AcpiUtReleaseMutex (ACPI_MTX_TABLES); return (IsLoaded);}/******************************************************************************* * * FUNCTION: AcpiTbSetTableLoadedFlag * * PARAMETERS: TableIndex - Table index * IsLoaded - TRUE if table is loaded, FALSE otherwise * * RETURN: None * * DESCRIPTION: Sets the table loaded flag to either TRUE or FALSE. * ******************************************************************************/voidAcpiTbSetTableLoadedFlag ( ACPI_NATIVE_UINT TableIndex, BOOLEAN IsLoaded){ (void) AcpiUtAcquireMutex (ACPI_MTX_TABLES); if (TableIndex < AcpiGbl_RootTableList.Count) { if (IsLoaded) { AcpiGbl_RootTableList.Tables[TableIndex].Flags |= ACPI_TABLE_IS_LOADED; } else { AcpiGbl_RootTableList.Tables[TableIndex].Flags &= ~ACPI_TABLE_IS_LOADED; } } (void) AcpiUtReleaseMutex (ACPI_MTX_TABLES);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -