7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek/******************************************************************************
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek *
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * Module Name: tbdata - Table manager data structure functions
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek *
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek *****************************************************************************/
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek/*
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * Copyright (C) 2000 - 2016, Intel Corp.
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * All rights reserved.
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek *
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 * are met:
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 *
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 *
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
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek#include "acpi.h"
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek#include "accommon.h"
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek#include "acnamesp.h"
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek#include "actables.h"
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek#define _COMPONENT ACPI_TABLES
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek ACPI_MODULE_NAME ("tbdata")
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek/*******************************************************************************
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek *
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * FUNCTION: AcpiTbInitTableDescriptor
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek *
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 *
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * RETURN: None
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek *
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * DESCRIPTION: Initialize a new table descriptor
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek *
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek ******************************************************************************/
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinekvoid
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry JelinekAcpiTbInitTableDescriptor (
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek ACPI_TABLE_DESC *TableDesc,
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek ACPI_PHYSICAL_ADDRESS Address,
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek UINT8 Flags,
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek ACPI_TABLE_HEADER *Table)
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek{
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek
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 */
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek memset (TableDesc, 0, sizeof (ACPI_TABLE_DESC));
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek TableDesc->Address = Address;
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek TableDesc->Length = Table->Length;
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek TableDesc->Flags = Flags;
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek ACPI_MOVE_32_TO_32 (TableDesc->Signature.Ascii, Table->Signature);
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek}
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek/*******************************************************************************
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek *
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * FUNCTION: AcpiTbAcquireTable
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek *
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 *
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * RETURN: Status
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek *
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 ******************************************************************************/
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry JelinekACPI_STATUS
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry JelinekAcpiTbAcquireTable (
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek ACPI_TABLE_DESC *TableDesc,
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek ACPI_TABLE_HEADER **TablePtr,
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek UINT32 *TableLength,
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek UINT8 *TableFlags)
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek{
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek ACPI_TABLE_HEADER *Table = NULL;
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek switch (TableDesc->Flags & ACPI_TABLE_ORIGIN_MASK)
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek {
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek case ACPI_TABLE_ORIGIN_INTERNAL_PHYSICAL:
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek Table = AcpiOsMapMemory (TableDesc->Address, TableDesc->Length);
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek break;
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek case ACPI_TABLE_ORIGIN_INTERNAL_VIRTUAL:
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek case ACPI_TABLE_ORIGIN_EXTERNAL_VIRTUAL:
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek Table = ACPI_CAST_PTR (ACPI_TABLE_HEADER,
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek ACPI_PHYSADDR_TO_PTR (TableDesc->Address));
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek break;
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek default:
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek break;
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek }
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek /* Table is not valid yet */
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek if (!Table)
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek {
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek return (AE_NO_MEMORY);
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek }
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek /* Fill the return values */
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek *TablePtr = Table;
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek *TableLength = TableDesc->Length;
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek *TableFlags = TableDesc->Flags;
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek return (AE_OK);
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek}
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek/*******************************************************************************
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek *
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * FUNCTION: AcpiTbReleaseTable
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek *
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 *
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * RETURN: None
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek *
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * DESCRIPTION: Release a table. The inverse of AcpiTbAcquireTable().
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek *
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek ******************************************************************************/
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinekvoid
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry JelinekAcpiTbReleaseTable (
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek ACPI_TABLE_HEADER *Table,
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek UINT32 TableLength,
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek UINT8 TableFlags)
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek{
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek switch (TableFlags & ACPI_TABLE_ORIGIN_MASK)
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek {
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek case ACPI_TABLE_ORIGIN_INTERNAL_PHYSICAL:
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek AcpiOsUnmapMemory (Table, TableLength);
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek break;
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek case ACPI_TABLE_ORIGIN_INTERNAL_VIRTUAL:
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek case ACPI_TABLE_ORIGIN_EXTERNAL_VIRTUAL:
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek default:
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek break;
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek }
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek}
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek/*******************************************************************************
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek *
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * FUNCTION: AcpiTbAcquireTempTable
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek *
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 *
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * RETURN: Status
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek *
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 ******************************************************************************/
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry JelinekACPI_STATUS
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry JelinekAcpiTbAcquireTempTable (
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek ACPI_TABLE_DESC *TableDesc,
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek ACPI_PHYSICAL_ADDRESS Address,
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek UINT8 Flags)
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek{
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek ACPI_TABLE_HEADER *TableHeader;
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek switch (Flags & ACPI_TABLE_ORIGIN_MASK)
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek {
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek case ACPI_TABLE_ORIGIN_INTERNAL_PHYSICAL:
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek /* Get the length of the full table from the header */
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek TableHeader = AcpiOsMapMemory (Address, sizeof (ACPI_TABLE_HEADER));
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek if (!TableHeader)
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek {
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek return (AE_NO_MEMORY);
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek }
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek AcpiTbInitTableDescriptor (TableDesc, Address, Flags, TableHeader);
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek AcpiOsUnmapMemory (TableHeader, sizeof (ACPI_TABLE_HEADER));
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek return (AE_OK);
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek case ACPI_TABLE_ORIGIN_INTERNAL_VIRTUAL:
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek case ACPI_TABLE_ORIGIN_EXTERNAL_VIRTUAL:
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek TableHeader = ACPI_CAST_PTR (ACPI_TABLE_HEADER,
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek ACPI_PHYSADDR_TO_PTR (Address));
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek if (!TableHeader)
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek {
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek return (AE_NO_MEMORY);
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek }
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek AcpiTbInitTableDescriptor (TableDesc, Address, Flags, TableHeader);
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek return (AE_OK);
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek default:
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek break;
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek }
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek /* Table is not valid yet */
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek return (AE_NO_MEMORY);
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek}
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek/*******************************************************************************
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek *
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * FUNCTION: AcpiTbReleaseTempTable
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek *
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * PARAMETERS: TableDesc - Table descriptor to be released
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek *
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * RETURN: Status
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek *
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * DESCRIPTION: The inverse of AcpiTbAcquireTempTable().
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek *
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek *****************************************************************************/
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinekvoid
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry JelinekAcpiTbReleaseTempTable (
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek ACPI_TABLE_DESC *TableDesc)
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek{
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek
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 AcpiTbInvalidateTable (TableDesc);
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek}
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek/******************************************************************************
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek *
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * FUNCTION: AcpiTbValidateTable
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek *
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * PARAMETERS: TableDesc - Table descriptor
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek *
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * RETURN: Status
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek *
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 *****************************************************************************/
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry JelinekACPI_STATUS
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry JelinekAcpiTbValidateTable (
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek ACPI_TABLE_DESC *TableDesc)
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek{
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek ACPI_STATUS Status = AE_OK;
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek ACPI_FUNCTION_TRACE (TbValidateTable);
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek /* Validate the table if necessary */
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek if (!TableDesc->Pointer)
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek {
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek Status = AcpiTbAcquireTable (TableDesc, &TableDesc->Pointer,
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek &TableDesc->Length, &TableDesc->Flags);
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek if (!TableDesc->Pointer)
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek {
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek Status = AE_NO_MEMORY;
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek }
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek }
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek return_ACPI_STATUS (Status);
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek}
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek/*******************************************************************************
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek *
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * FUNCTION: AcpiTbInvalidateTable
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek *
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * PARAMETERS: TableDesc - Table descriptor
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek *
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * RETURN: None
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek *
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * DESCRIPTION: Invalidate one internal ACPI table, this is the inverse of
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * AcpiTbValidateTable().
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek *
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek ******************************************************************************/
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinekvoid
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry JelinekAcpiTbInvalidateTable (
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek ACPI_TABLE_DESC *TableDesc)
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek{
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek ACPI_FUNCTION_TRACE (TbInvalidateTable);
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek /* Table must be validated */
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek if (!TableDesc->Pointer)
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek {
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek return_VOID;
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek }
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek AcpiTbReleaseTable (TableDesc->Pointer, TableDesc->Length,
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek TableDesc->Flags);
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek TableDesc->Pointer = NULL;
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek return_VOID;
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek}
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek/******************************************************************************
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek *
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * FUNCTION: AcpiTbValidateTempTable
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek *
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * PARAMETERS: TableDesc - Table descriptor
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek *
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * RETURN: Status
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek *
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 *****************************************************************************/
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry JelinekACPI_STATUS
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry JelinekAcpiTbValidateTempTable (
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek ACPI_TABLE_DESC *TableDesc)
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek{
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek if (!TableDesc->Pointer && !AcpiGbl_VerifyTableChecksum)
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek {
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek /*
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 */
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek TableDesc->Length = sizeof (ACPI_TABLE_HEADER);
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek }
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek return (AcpiTbValidateTable (TableDesc));
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek}
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek/******************************************************************************
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek *
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * FUNCTION: AcpiTbVerifyTempTable
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek *
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * PARAMETERS: TableDesc - Table descriptor
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * Signature - Table signature to verify
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek *
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * RETURN: Status
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek *
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 *****************************************************************************/
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry JelinekACPI_STATUS
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry JelinekAcpiTbVerifyTempTable (
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek ACPI_TABLE_DESC *TableDesc,
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek char *Signature)
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek{
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek ACPI_STATUS Status = AE_OK;
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek ACPI_FUNCTION_TRACE (TbVerifyTempTable);
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek /* Validate the table */
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek Status = AcpiTbValidateTempTable (TableDesc);
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek if (ACPI_FAILURE (Status))
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek {
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek return_ACPI_STATUS (AE_NO_MEMORY);
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek }
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek /* If a particular signature is expected (DSDT/FACS), it must match */
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek if (Signature &&
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek !ACPI_COMPARE_NAME (&TableDesc->Signature, Signature))
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek {
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek ACPI_BIOS_ERROR ((AE_INFO,
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek "Invalid signature 0x%X for ACPI table, expected [%s]",
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek TableDesc->Signature.Integer, Signature));
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek Status = AE_BAD_SIGNATURE;
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek goto InvalidateAndExit;
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek }
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek /* Verify the checksum */
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek if (AcpiGbl_VerifyTableChecksum)
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek {
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek Status = AcpiTbVerifyChecksum (TableDesc->Pointer, TableDesc->Length);
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek if (ACPI_FAILURE (Status))
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek {
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek ACPI_EXCEPTION ((AE_INFO, AE_NO_MEMORY,
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek "%4.4s 0x%8.8X%8.8X"
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek " Attempted table install failed",
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek AcpiUtValidNameseg (TableDesc->Signature.Ascii) ?
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek TableDesc->Signature.Ascii : "????",
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek ACPI_FORMAT_UINT64 (TableDesc->Address)));
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek goto InvalidateAndExit;
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek }
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek }
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek return_ACPI_STATUS (AE_OK);
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry JelinekInvalidateAndExit:
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek AcpiTbInvalidateTable (TableDesc);
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek return_ACPI_STATUS (Status);
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek}
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek/*******************************************************************************
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek *
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * FUNCTION: AcpiTbResizeRootTableList
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek *
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * PARAMETERS: None
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek *
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * RETURN: Status
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek *
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * DESCRIPTION: Expand the size of global table array
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek *
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek ******************************************************************************/
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry JelinekACPI_STATUS
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry JelinekAcpiTbResizeRootTableList (
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek void)
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek{
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek ACPI_TABLE_DESC *Tables;
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek UINT32 TableCount;
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek ACPI_FUNCTION_TRACE (TbResizeRootTableList);
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek /* AllowResize flag is a parameter to AcpiInitializeTables */
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek if (!(AcpiGbl_RootTableList.Flags & ACPI_ROOT_ALLOW_RESIZE))
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek {
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek ACPI_ERROR ((AE_INFO, "Resize of Root Table Array is not allowed"));
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek return_ACPI_STATUS (AE_SUPPORT);
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek }
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek /* Increase the Table Array size */
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek if (AcpiGbl_RootTableList.Flags & ACPI_ROOT_ORIGIN_ALLOCATED)
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek {
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek TableCount = AcpiGbl_RootTableList.MaxTableCount;
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek }
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek else
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek {
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek TableCount = AcpiGbl_RootTableList.CurrentTableCount;
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek }
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek Tables = ACPI_ALLOCATE_ZEROED (
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek ((ACPI_SIZE) TableCount + ACPI_ROOT_TABLE_SIZE_INCREMENT) *
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek sizeof (ACPI_TABLE_DESC));
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek if (!Tables)
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek {
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek ACPI_ERROR ((AE_INFO, "Could not allocate new root table array"));
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek return_ACPI_STATUS (AE_NO_MEMORY);
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek }
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek /* Copy and free the previous table array */
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek if (AcpiGbl_RootTableList.Tables)
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek {
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek memcpy (Tables, AcpiGbl_RootTableList.Tables,
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek (ACPI_SIZE) TableCount * sizeof (ACPI_TABLE_DESC));
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek if (AcpiGbl_RootTableList.Flags & ACPI_ROOT_ORIGIN_ALLOCATED)
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek {
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek ACPI_FREE (AcpiGbl_RootTableList.Tables);
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek }
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek }
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek AcpiGbl_RootTableList.Tables = Tables;
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek AcpiGbl_RootTableList.MaxTableCount =
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek TableCount + ACPI_ROOT_TABLE_SIZE_INCREMENT;
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek AcpiGbl_RootTableList.Flags |= ACPI_ROOT_ORIGIN_ALLOCATED;
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek return_ACPI_STATUS (AE_OK);
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek}
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek/*******************************************************************************
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek *
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * FUNCTION: AcpiTbGetNextTableDescriptor
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek *
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * PARAMETERS: TableIndex - Where table index is returned
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * TableDesc - Where table descriptor is returned
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek *
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * RETURN: Status and table index/descriptor.
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek *
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * DESCRIPTION: Allocate a new ACPI table entry to the global table list
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek *
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek ******************************************************************************/
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry JelinekACPI_STATUS
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry JelinekAcpiTbGetNextTableDescriptor (
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek UINT32 *TableIndex,
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek ACPI_TABLE_DESC **TableDesc)
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek{
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek ACPI_STATUS Status;
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek UINT32 i;
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek /* Ensure that there is room for the table in the Root Table List */
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek if (AcpiGbl_RootTableList.CurrentTableCount >=
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek AcpiGbl_RootTableList.MaxTableCount)
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek {
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek Status = AcpiTbResizeRootTableList();
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek if (ACPI_FAILURE (Status))
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek {
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek return (Status);
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek }
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek }
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek i = AcpiGbl_RootTableList.CurrentTableCount;
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek AcpiGbl_RootTableList.CurrentTableCount++;
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek if (TableIndex)
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek {
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek *TableIndex = i;
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek }
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek if (TableDesc)
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek {
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek *TableDesc = &AcpiGbl_RootTableList.Tables[i];
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek }
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek return (AE_OK);
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek}
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek/*******************************************************************************
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek *
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * FUNCTION: AcpiTbTerminate
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek *
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * PARAMETERS: None
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek *
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * RETURN: None
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek *
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * DESCRIPTION: Delete all internal ACPI tables
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek *
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek ******************************************************************************/
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinekvoid
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry JelinekAcpiTbTerminate (
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek void)
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek{
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek UINT32 i;
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek ACPI_FUNCTION_TRACE (TbTerminate);
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek (void) AcpiUtAcquireMutex (ACPI_MTX_TABLES);
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek /* Delete the individual tables */
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek for (i = 0; i < AcpiGbl_RootTableList.CurrentTableCount; i++)
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek {
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek AcpiTbUninstallTable (&AcpiGbl_RootTableList.Tables[i]);
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek }
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek /*
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 */
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek if (AcpiGbl_RootTableList.Flags & ACPI_ROOT_ORIGIN_ALLOCATED)
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek {
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek ACPI_FREE (AcpiGbl_RootTableList.Tables);
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek }
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek AcpiGbl_RootTableList.Tables = NULL;
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek AcpiGbl_RootTableList.Flags = 0;
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek AcpiGbl_RootTableList.CurrentTableCount = 0;
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "ACPI Tables freed\n"));
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek (void) AcpiUtReleaseMutex (ACPI_MTX_TABLES);
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek return_VOID;
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek}
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek/*******************************************************************************
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek *
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * FUNCTION: AcpiTbDeleteNamespaceByOwner
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek *
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * PARAMETERS: TableIndex - Table index
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek *
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * RETURN: Status
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek *
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * DESCRIPTION: Delete all namespace objects created when this table was loaded.
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek *
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek ******************************************************************************/
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry JelinekACPI_STATUS
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry JelinekAcpiTbDeleteNamespaceByOwner (
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek UINT32 TableIndex)
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek{
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek ACPI_OWNER_ID OwnerId;
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek ACPI_STATUS Status;
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek ACPI_FUNCTION_TRACE (TbDeleteNamespaceByOwner);
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek Status = AcpiUtAcquireMutex (ACPI_MTX_TABLES);
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek if (ACPI_FAILURE (Status))
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek {
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek return_ACPI_STATUS (Status);
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek }
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek if (TableIndex >= AcpiGbl_RootTableList.CurrentTableCount)
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek {
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek /* The table index does not exist */
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek (void) AcpiUtReleaseMutex (ACPI_MTX_TABLES);
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek return_ACPI_STATUS (AE_NOT_EXIST);
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek }
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek /* Get the owner ID for this table, used to delete namespace nodes */
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek OwnerId = AcpiGbl_RootTableList.Tables[TableIndex].OwnerId;
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek (void) AcpiUtReleaseMutex (ACPI_MTX_TABLES);
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek /*
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 */
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek (void) AcpiUtReleaseMutex (ACPI_MTX_INTERPRETER);
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek Status = AcpiUtAcquireWriteLock (&AcpiGbl_NamespaceRwLock);
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek AcpiNsDeleteNamespaceByOwner (OwnerId);
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek if (ACPI_FAILURE (Status))
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek {
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek return_ACPI_STATUS (Status);
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek }
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek AcpiUtReleaseWriteLock (&AcpiGbl_NamespaceRwLock);
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek Status = AcpiUtAcquireMutex (ACPI_MTX_INTERPRETER);
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek return_ACPI_STATUS (Status);
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek}
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek/*******************************************************************************
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek *
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * FUNCTION: AcpiTbAllocateOwnerId
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek *
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * PARAMETERS: TableIndex - Table index
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek *
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * RETURN: Status
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek *
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * DESCRIPTION: Allocates OwnerId in TableDesc
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek *
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek ******************************************************************************/
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry JelinekACPI_STATUS
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry JelinekAcpiTbAllocateOwnerId (
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek UINT32 TableIndex)
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek{
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek ACPI_STATUS Status = AE_BAD_PARAMETER;
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek ACPI_FUNCTION_TRACE (TbAllocateOwnerId);
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek (void) AcpiUtAcquireMutex (ACPI_MTX_TABLES);
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek if (TableIndex < AcpiGbl_RootTableList.CurrentTableCount)
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek {
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek Status = AcpiUtAllocateOwnerId (
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek &(AcpiGbl_RootTableList.Tables[TableIndex].OwnerId));
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek }
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek (void) AcpiUtReleaseMutex (ACPI_MTX_TABLES);
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek return_ACPI_STATUS (Status);
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek}
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek/*******************************************************************************
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek *
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * FUNCTION: AcpiTbReleaseOwnerId
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek *
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * PARAMETERS: TableIndex - Table index
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek *
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * RETURN: Status
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek *
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * DESCRIPTION: Releases OwnerId in TableDesc
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek *
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek ******************************************************************************/
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry JelinekACPI_STATUS
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry JelinekAcpiTbReleaseOwnerId (
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek UINT32 TableIndex)
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek{
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek ACPI_STATUS Status = AE_BAD_PARAMETER;
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek ACPI_FUNCTION_TRACE (TbReleaseOwnerId);
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek (void) AcpiUtAcquireMutex (ACPI_MTX_TABLES);
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek if (TableIndex < AcpiGbl_RootTableList.CurrentTableCount)
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek {
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek AcpiUtReleaseOwnerId (
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek &(AcpiGbl_RootTableList.Tables[TableIndex].OwnerId));
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek Status = AE_OK;
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek }
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek (void) AcpiUtReleaseMutex (ACPI_MTX_TABLES);
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek return_ACPI_STATUS (Status);
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek}
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek/*******************************************************************************
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek *
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * FUNCTION: AcpiTbGetOwnerId
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek *
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * PARAMETERS: TableIndex - Table index
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * OwnerId - Where the table OwnerId is returned
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek *
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * RETURN: Status
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek *
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * DESCRIPTION: returns OwnerId for the ACPI table
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek *
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek ******************************************************************************/
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry JelinekACPI_STATUS
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry JelinekAcpiTbGetOwnerId (
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek UINT32 TableIndex,
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek ACPI_OWNER_ID *OwnerId)
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek{
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek ACPI_STATUS Status = AE_BAD_PARAMETER;
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek ACPI_FUNCTION_TRACE (TbGetOwnerId);
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek (void) AcpiUtAcquireMutex (ACPI_MTX_TABLES);
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek if (TableIndex < AcpiGbl_RootTableList.CurrentTableCount)
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek {
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek *OwnerId = AcpiGbl_RootTableList.Tables[TableIndex].OwnerId;
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek Status = AE_OK;
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek }
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek (void) AcpiUtReleaseMutex (ACPI_MTX_TABLES);
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek return_ACPI_STATUS (Status);
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek}
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek/*******************************************************************************
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek *
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * FUNCTION: AcpiTbIsTableLoaded
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek *
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * PARAMETERS: TableIndex - Index into the root table
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek *
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * RETURN: Table Loaded Flag
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek *
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek ******************************************************************************/
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry JelinekBOOLEAN
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry JelinekAcpiTbIsTableLoaded (
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek UINT32 TableIndex)
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek{
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek BOOLEAN IsLoaded = FALSE;
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek (void) AcpiUtAcquireMutex (ACPI_MTX_TABLES);
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek if (TableIndex < AcpiGbl_RootTableList.CurrentTableCount)
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek {
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek IsLoaded = (BOOLEAN)
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek (AcpiGbl_RootTableList.Tables[TableIndex].Flags &
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek ACPI_TABLE_IS_LOADED);
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek }
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek (void) AcpiUtReleaseMutex (ACPI_MTX_TABLES);
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek return (IsLoaded);
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek}
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek/*******************************************************************************
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek *
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * FUNCTION: AcpiTbSetTableLoadedFlag
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek *
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * PARAMETERS: TableIndex - Table index
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * IsLoaded - TRUE if table is loaded, FALSE otherwise
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek *
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * RETURN: None
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek *
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek * DESCRIPTION: Sets the table loaded flag to either TRUE or FALSE.
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek *
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek ******************************************************************************/
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinekvoid
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry JelinekAcpiTbSetTableLoadedFlag (
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek UINT32 TableIndex,
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek BOOLEAN IsLoaded)
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek{
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek (void) AcpiUtAcquireMutex (ACPI_MTX_TABLES);
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek if (TableIndex < AcpiGbl_RootTableList.CurrentTableCount)
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek {
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek if (IsLoaded)
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek {
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek AcpiGbl_RootTableList.Tables[TableIndex].Flags |=
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek ACPI_TABLE_IS_LOADED;
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek }
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek else
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek {
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek AcpiGbl_RootTableList.Tables[TableIndex].Flags &=
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek ~ACPI_TABLE_IS_LOADED;
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek }
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek }
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek (void) AcpiUtReleaseMutex (ACPI_MTX_TABLES);
7b1019a6d29ccb7999dc76cba3dde1c627e8e609Jerry Jelinek}