7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek/******************************************************************************
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * Module Name: tbdata - Table manager data structure functions
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek *****************************************************************************/
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * Copyright (C) 2000 - 2016, Intel Corp.
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * All rights reserved.
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * Redistribution and use in source and binary forms, with or without
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * modification, are permitted provided that the following conditions
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * 1. Redistributions of source code must retain the above copyright
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * notice, this list of conditions, and the following disclaimer,
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * without modification.
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * 2. Redistributions in binary form must reproduce at minimum a disclaimer
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * substantially similar to the "NO WARRANTY" disclaimer below
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * ("Disclaimer") and any redistribution must be conditioned upon
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * including a substantially similar Disclaimer requirement for further
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * binary redistribution.
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * 3. Neither the names of the above-listed copyright holders nor the names
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * of any contributors may be used to endorse or promote products derived
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * from this software without specific prior written permission.
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * Alternatively, this software may be distributed under the terms of the
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * GNU General Public License ("GPL") version 2 as published by the Free
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * Software Foundation.
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * NO WARRANTY
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * POSSIBILITY OF SUCH DAMAGES.
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek/*******************************************************************************
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * FUNCTION: AcpiTbInitTableDescriptor
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * PARAMETERS: TableDesc - Table descriptor
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * Address - Physical address of the table
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * Flags - Allocation flags of the table
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * Table - Pointer to the table
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * RETURN: None
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * DESCRIPTION: Initialize a new table descriptor
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek ******************************************************************************/
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * Initialize the table descriptor. Set the pointer to NULL, since the
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * table is not fully mapped at this time.
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek memset (TableDesc, 0, sizeof (ACPI_TABLE_DESC));
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek ACPI_MOVE_32_TO_32 (TableDesc->Signature.Ascii, Table->Signature);
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek/*******************************************************************************
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * FUNCTION: AcpiTbAcquireTable
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * PARAMETERS: TableDesc - Table descriptor
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * TablePtr - Where table is returned
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * TableLength - Where table length is returned
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * TableFlags - Where table allocation flags are returned
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * RETURN: Status
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * DESCRIPTION: Acquire an ACPI table. It can be used for tables not
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * maintained in the AcpiGbl_RootTableList.
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek ******************************************************************************/
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek switch (TableDesc->Flags & ACPI_TABLE_ORIGIN_MASK)
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek Table = AcpiOsMapMemory (TableDesc->Address, TableDesc->Length);
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek /* Table is not valid yet */
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek /* Fill the return values */
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek/*******************************************************************************
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * FUNCTION: AcpiTbReleaseTable
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * PARAMETERS: Table - Pointer for the table
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * TableLength - Length for the table
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * TableFlags - Allocation flags for the table
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * RETURN: None
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * DESCRIPTION: Release a table. The inverse of AcpiTbAcquireTable().
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek ******************************************************************************/
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek/*******************************************************************************
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * FUNCTION: AcpiTbAcquireTempTable
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * PARAMETERS: TableDesc - Table descriptor to be acquired
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * Address - Address of the table
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * Flags - Allocation flags of the table
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * RETURN: Status
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * DESCRIPTION: This function validates the table header to obtain the length
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * of a table and fills the table descriptor to make its state as
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * "INSTALLED". Such a table descriptor is only used for verified
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * installation.
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek ******************************************************************************/
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek /* Get the length of the full table from the header */
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek TableHeader = AcpiOsMapMemory (Address, sizeof (ACPI_TABLE_HEADER));
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek AcpiTbInitTableDescriptor (TableDesc, Address, Flags, TableHeader);
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek AcpiOsUnmapMemory (TableHeader, sizeof (ACPI_TABLE_HEADER));
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek TableHeader = ACPI_CAST_PTR (ACPI_TABLE_HEADER,
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek AcpiTbInitTableDescriptor (TableDesc, Address, Flags, TableHeader);
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek /* Table is not valid yet */
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek/*******************************************************************************
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * FUNCTION: AcpiTbReleaseTempTable
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * PARAMETERS: TableDesc - Table descriptor to be released
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * RETURN: Status
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * DESCRIPTION: The inverse of AcpiTbAcquireTempTable().
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek *****************************************************************************/
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * Note that the .Address is maintained by the callers of
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * AcpiTbAcquireTempTable(), thus do not invoke AcpiTbUninstallTable()
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * where .Address will be freed.
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek/******************************************************************************
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * FUNCTION: AcpiTbValidateTable
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * PARAMETERS: TableDesc - Table descriptor
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * RETURN: Status
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * DESCRIPTION: This function is called to validate the table, the returned
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * table descriptor is in "VALIDATED" state.
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek *****************************************************************************/
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek /* Validate the table if necessary */
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek Status = AcpiTbAcquireTable (TableDesc, &TableDesc->Pointer,
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek/*******************************************************************************
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * FUNCTION: AcpiTbInvalidateTable
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * PARAMETERS: TableDesc - Table descriptor
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * RETURN: None
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * DESCRIPTION: Invalidate one internal ACPI table, this is the inverse of
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * AcpiTbValidateTable().
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek ******************************************************************************/
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek /* Table must be validated */
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek AcpiTbReleaseTable (TableDesc->Pointer, TableDesc->Length,
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek/******************************************************************************
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * FUNCTION: AcpiTbValidateTempTable
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * PARAMETERS: TableDesc - Table descriptor
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * RETURN: Status
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * DESCRIPTION: This function is called to validate the table, the returned
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * table descriptor is in "VALIDATED" state.
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek *****************************************************************************/
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek if (!TableDesc->Pointer && !AcpiGbl_VerifyTableChecksum)
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * Only validates the header of the table.
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * Note that Length contains the size of the mapping after invoking
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * this work around, this value is required by
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * AcpiTbReleaseTempTable().
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * We can do this because in AcpiInitTableDescriptor(), the Length
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * field of the installed descriptor is filled with the actual
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * table length obtaining from the table header.
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek TableDesc->Length = sizeof (ACPI_TABLE_HEADER);
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek/******************************************************************************
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * FUNCTION: AcpiTbVerifyTempTable
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * PARAMETERS: TableDesc - Table descriptor
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * Signature - Table signature to verify
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * RETURN: Status
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * DESCRIPTION: This function is called to validate and verify the table, the
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * returned table descriptor is in "VALIDATED" state.
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek *****************************************************************************/
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek /* Validate the table */
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek /* If a particular signature is expected (DSDT/FACS), it must match */
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek !ACPI_COMPARE_NAME (&TableDesc->Signature, Signature))
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek "Invalid signature 0x%X for ACPI table, expected [%s]",
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek /* Verify the checksum */
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek Status = AcpiTbVerifyChecksum (TableDesc->Pointer, TableDesc->Length);
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek "%4.4s 0x%8.8X%8.8X"
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek " Attempted table install failed",
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek AcpiUtValidNameseg (TableDesc->Signature.Ascii) ?
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek/*******************************************************************************
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * FUNCTION: AcpiTbResizeRootTableList
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * PARAMETERS: None
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * RETURN: Status
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * DESCRIPTION: Expand the size of global table array
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek ******************************************************************************/
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek /* AllowResize flag is a parameter to AcpiInitializeTables */
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek if (!(AcpiGbl_RootTableList.Flags & ACPI_ROOT_ALLOW_RESIZE))
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek ACPI_ERROR ((AE_INFO, "Resize of Root Table Array is not allowed"));
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek /* Increase the Table Array size */
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek if (AcpiGbl_RootTableList.Flags & ACPI_ROOT_ORIGIN_ALLOCATED)
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek TableCount = AcpiGbl_RootTableList.MaxTableCount;
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek TableCount = AcpiGbl_RootTableList.CurrentTableCount;
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek ((ACPI_SIZE) TableCount + ACPI_ROOT_TABLE_SIZE_INCREMENT) *
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek ACPI_ERROR ((AE_INFO, "Could not allocate new root table array"));
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek /* Copy and free the previous table array */
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek (ACPI_SIZE) TableCount * sizeof (ACPI_TABLE_DESC));
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek if (AcpiGbl_RootTableList.Flags & ACPI_ROOT_ORIGIN_ALLOCATED)
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek AcpiGbl_RootTableList.Flags |= ACPI_ROOT_ORIGIN_ALLOCATED;
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek/*******************************************************************************
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * FUNCTION: AcpiTbGetNextTableDescriptor
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * PARAMETERS: TableIndex - Where table index is returned
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * TableDesc - Where table descriptor is returned
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * RETURN: Status and table index/descriptor.
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * DESCRIPTION: Allocate a new ACPI table entry to the global table list
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek ******************************************************************************/
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek /* Ensure that there is room for the table in the Root Table List */
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek if (AcpiGbl_RootTableList.CurrentTableCount >=
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek *TableDesc = &AcpiGbl_RootTableList.Tables[i];
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek/*******************************************************************************
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * FUNCTION: AcpiTbTerminate
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * PARAMETERS: None
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * RETURN: None
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * DESCRIPTION: Delete all internal ACPI tables
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek ******************************************************************************/
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek /* Delete the individual tables */
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek for (i = 0; i < AcpiGbl_RootTableList.CurrentTableCount; i++)
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek AcpiTbUninstallTable (&AcpiGbl_RootTableList.Tables[i]);
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * Delete the root table array if allocated locally. Array cannot be
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * mapped, so we don't need to check for that flag.
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek if (AcpiGbl_RootTableList.Flags & ACPI_ROOT_ORIGIN_ALLOCATED)
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "ACPI Tables freed\n"));
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek/*******************************************************************************
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * FUNCTION: AcpiTbDeleteNamespaceByOwner
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * PARAMETERS: TableIndex - Table index
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * RETURN: Status
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * DESCRIPTION: Delete all namespace objects created when this table was loaded.
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek ******************************************************************************/
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek ACPI_FUNCTION_TRACE (TbDeleteNamespaceByOwner);
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek Status = AcpiUtAcquireMutex (ACPI_MTX_TABLES);
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek if (TableIndex >= AcpiGbl_RootTableList.CurrentTableCount)
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek /* The table index does not exist */
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek /* Get the owner ID for this table, used to delete namespace nodes */
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek OwnerId = AcpiGbl_RootTableList.Tables[TableIndex].OwnerId;
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * Need to acquire the namespace writer lock to prevent interference
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * with any concurrent namespace walks. The interpreter must be
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * released during the deletion since the acquisition of the deletion
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * lock may block, and also since the execution of a namespace walk
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * must be allowed to use the interpreter.
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek (void) AcpiUtReleaseMutex (ACPI_MTX_INTERPRETER);
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek Status = AcpiUtAcquireWriteLock (&AcpiGbl_NamespaceRwLock);
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek AcpiUtReleaseWriteLock (&AcpiGbl_NamespaceRwLock);
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek Status = AcpiUtAcquireMutex (ACPI_MTX_INTERPRETER);
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek/*******************************************************************************
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * FUNCTION: AcpiTbAllocateOwnerId
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * PARAMETERS: TableIndex - Table index
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * RETURN: Status
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * DESCRIPTION: Allocates OwnerId in TableDesc
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek ******************************************************************************/
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek if (TableIndex < AcpiGbl_RootTableList.CurrentTableCount)
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek &(AcpiGbl_RootTableList.Tables[TableIndex].OwnerId));
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek/*******************************************************************************
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * FUNCTION: AcpiTbReleaseOwnerId
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * PARAMETERS: TableIndex - Table index
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * RETURN: Status
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * DESCRIPTION: Releases OwnerId in TableDesc
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek ******************************************************************************/
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek if (TableIndex < AcpiGbl_RootTableList.CurrentTableCount)
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek &(AcpiGbl_RootTableList.Tables[TableIndex].OwnerId));
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek/*******************************************************************************
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * FUNCTION: AcpiTbGetOwnerId
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * PARAMETERS: TableIndex - Table index
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * OwnerId - Where the table OwnerId is returned
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * RETURN: Status
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * DESCRIPTION: returns OwnerId for the ACPI table
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek ******************************************************************************/
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek if (TableIndex < AcpiGbl_RootTableList.CurrentTableCount)
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek *OwnerId = AcpiGbl_RootTableList.Tables[TableIndex].OwnerId;
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek/*******************************************************************************
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * FUNCTION: AcpiTbIsTableLoaded
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * PARAMETERS: TableIndex - Index into the root table
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * RETURN: Table Loaded Flag
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek ******************************************************************************/
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek if (TableIndex < AcpiGbl_RootTableList.CurrentTableCount)
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek (AcpiGbl_RootTableList.Tables[TableIndex].Flags &
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek/*******************************************************************************
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * FUNCTION: AcpiTbSetTableLoadedFlag
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * PARAMETERS: TableIndex - Table index
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * IsLoaded - TRUE if table is loaded, FALSE otherwise
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * RETURN: None
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * DESCRIPTION: Sets the table loaded flag to either TRUE or FALSE.
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek ******************************************************************************/
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek if (TableIndex < AcpiGbl_RootTableList.CurrentTableCount)
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek AcpiGbl_RootTableList.Tables[TableIndex].Flags |=