|
Packit Service |
1fb00e |
/******************************************************************************
|
|
Packit Service |
1fb00e |
*
|
|
Packit Service |
1fb00e |
* Module Name: dmtbdump2 - Dump ACPI data tables that contain no AML code
|
|
Packit Service |
1fb00e |
*
|
|
Packit Service |
1fb00e |
*****************************************************************************/
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
/*
|
|
Packit Service |
1fb00e |
* Copyright (C) 2000 - 2018, Intel Corp.
|
|
Packit Service |
1fb00e |
* All rights reserved.
|
|
Packit Service |
1fb00e |
*
|
|
Packit Service |
1fb00e |
* Redistribution and use in source and binary forms, with or without
|
|
Packit Service |
1fb00e |
* modification, are permitted provided that the following conditions
|
|
Packit Service |
1fb00e |
* are met:
|
|
Packit Service |
1fb00e |
* 1. Redistributions of source code must retain the above copyright
|
|
Packit Service |
1fb00e |
* notice, this list of conditions, and the following disclaimer,
|
|
Packit Service |
1fb00e |
* without modification.
|
|
Packit Service |
1fb00e |
* 2. Redistributions in binary form must reproduce at minimum a disclaimer
|
|
Packit Service |
1fb00e |
* substantially similar to the "NO WARRANTY" disclaimer below
|
|
Packit Service |
1fb00e |
* ("Disclaimer") and any redistribution must be conditioned upon
|
|
Packit Service |
1fb00e |
* including a substantially similar Disclaimer requirement for further
|
|
Packit Service |
1fb00e |
* binary redistribution.
|
|
Packit Service |
1fb00e |
* 3. Neither the names of the above-listed copyright holders nor the names
|
|
Packit Service |
1fb00e |
* of any contributors may be used to endorse or promote products derived
|
|
Packit Service |
1fb00e |
* from this software without specific prior written permission.
|
|
Packit Service |
1fb00e |
*
|
|
Packit Service |
1fb00e |
* Alternatively, this software may be distributed under the terms of the
|
|
Packit Service |
1fb00e |
* GNU General Public License ("GPL") version 2 as published by the Free
|
|
Packit Service |
1fb00e |
* Software Foundation.
|
|
Packit Service |
1fb00e |
*
|
|
Packit Service |
1fb00e |
* NO WARRANTY
|
|
Packit Service |
1fb00e |
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
Packit Service |
1fb00e |
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
Packit Service |
1fb00e |
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
|
|
Packit Service |
1fb00e |
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
|
Packit Service |
1fb00e |
* HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
Packit Service |
1fb00e |
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
|
Packit Service |
1fb00e |
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
|
Packit Service |
1fb00e |
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
|
Packit Service |
1fb00e |
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
|
|
Packit Service |
1fb00e |
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
|
Packit Service |
1fb00e |
* POSSIBILITY OF SUCH DAMAGES.
|
|
Packit Service |
1fb00e |
*/
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
#include "acpi.h"
|
|
Packit Service |
1fb00e |
#include "accommon.h"
|
|
Packit Service |
1fb00e |
#include "acdisasm.h"
|
|
Packit Service |
1fb00e |
#include "actables.h"
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
/* This module used for application-level code only */
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
#define _COMPONENT ACPI_CA_DISASSEMBLER
|
|
Packit Service |
1fb00e |
ACPI_MODULE_NAME ("dmtbdump2")
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
/*******************************************************************************
|
|
Packit Service |
1fb00e |
*
|
|
Packit Service |
1fb00e |
* FUNCTION: AcpiDmDumpIort
|
|
Packit Service |
1fb00e |
*
|
|
Packit Service |
1fb00e |
* PARAMETERS: Table - A IORT table
|
|
Packit Service |
1fb00e |
*
|
|
Packit Service |
1fb00e |
* RETURN: None
|
|
Packit Service |
1fb00e |
*
|
|
Packit Service |
1fb00e |
* DESCRIPTION: Format the contents of a IORT
|
|
Packit Service |
1fb00e |
*
|
|
Packit Service |
1fb00e |
******************************************************************************/
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
void
|
|
Packit Service |
1fb00e |
AcpiDmDumpIort (
|
|
Packit Service |
1fb00e |
ACPI_TABLE_HEADER *Table)
|
|
Packit Service |
1fb00e |
{
|
|
Packit Service |
1fb00e |
ACPI_STATUS Status;
|
|
Packit Service |
1fb00e |
ACPI_TABLE_IORT *Iort;
|
|
Packit Service |
1fb00e |
ACPI_IORT_NODE *IortNode;
|
|
Packit Service |
1fb00e |
ACPI_IORT_ITS_GROUP *IortItsGroup = NULL;
|
|
Packit Service |
1fb00e |
ACPI_IORT_SMMU *IortSmmu = NULL;
|
|
Packit Service |
1fb00e |
UINT32 Offset;
|
|
Packit Service |
1fb00e |
UINT32 NodeOffset;
|
|
Packit Service |
0129ce |
UINT16 NodeLength;
|
|
Packit Service |
1fb00e |
UINT32 Length;
|
|
Packit Service |
1fb00e |
ACPI_DMTABLE_INFO *InfoTable;
|
|
Packit Service |
1fb00e |
char *String;
|
|
Packit Service |
1fb00e |
UINT32 i;
|
|
Packit Service |
0129ce |
UINT32 TableLen;
|
|
Packit Service |
0129ce |
UINT32 ItsCount;
|
|
Packit Service |
0129ce |
UINT32 MappingCount;
|
|
Packit Service |
0129ce |
UINT32 CtxIntCount;
|
|
Packit Service |
0129ce |
UINT32 PmuIntCount;
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
/* Main table */
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
0129ce |
ACPI_MOVE_32_TO_32(&TableLen, &Table->Length);
|
|
Packit Service |
0129ce |
Status = AcpiDmDumpTable (TableLen, 0, Table, 0, AcpiDmTableInfoIort);
|
|
Packit Service |
1fb00e |
if (ACPI_FAILURE (Status))
|
|
Packit Service |
1fb00e |
{
|
|
Packit Service |
1fb00e |
return;
|
|
Packit Service |
1fb00e |
}
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
Iort = ACPI_CAST_PTR (ACPI_TABLE_IORT, Table);
|
|
Packit Service |
1fb00e |
Offset = sizeof (ACPI_TABLE_IORT);
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
/* Dump the OptionalPadding (optional) */
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
0129ce |
ACPI_MOVE_32_TO_32(&NodeOffset, &Iort->NodeOffset);
|
|
Packit Service |
0129ce |
if (NodeOffset > Offset)
|
|
Packit Service |
1fb00e |
{
|
|
Packit Service |
0129ce |
Status = AcpiDmDumpTable (TableLen, Offset, Table,
|
|
Packit Service |
0129ce |
NodeOffset - Offset, AcpiDmTableInfoIortPad);
|
|
Packit Service |
1fb00e |
if (ACPI_FAILURE (Status))
|
|
Packit Service |
1fb00e |
{
|
|
Packit Service |
1fb00e |
return;
|
|
Packit Service |
1fb00e |
}
|
|
Packit Service |
1fb00e |
}
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
0129ce |
ACPI_MOVE_32_TO_32(&Offset, &Iort->NodeOffset);
|
|
Packit Service |
0129ce |
while (Offset < TableLen)
|
|
Packit Service |
1fb00e |
{
|
|
Packit Service |
1fb00e |
/* Common subtable header */
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
IortNode = ACPI_ADD_PTR (ACPI_IORT_NODE, Table, Offset);
|
|
Packit Service |
1fb00e |
AcpiOsPrintf ("\n");
|
|
Packit Service |
1fb00e |
Length = ACPI_OFFSET (ACPI_IORT_NODE, NodeData);
|
|
Packit Service |
1fb00e |
Status = AcpiDmDumpTable (Table->Length, Offset,
|
|
Packit Service |
1fb00e |
IortNode, Length, AcpiDmTableInfoIortHdr);
|
|
Packit Service |
1fb00e |
if (ACPI_FAILURE (Status))
|
|
Packit Service |
1fb00e |
{
|
|
Packit Service |
1fb00e |
return;
|
|
Packit Service |
1fb00e |
}
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
NodeOffset = Length;
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
switch (IortNode->Type)
|
|
Packit Service |
1fb00e |
{
|
|
Packit Service |
1fb00e |
case ACPI_IORT_NODE_ITS_GROUP:
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
InfoTable = AcpiDmTableInfoIort0;
|
|
Packit Service |
1fb00e |
Length = ACPI_OFFSET (ACPI_IORT_ITS_GROUP, Identifiers);
|
|
Packit Service |
1fb00e |
IortItsGroup = ACPI_ADD_PTR (ACPI_IORT_ITS_GROUP, IortNode, NodeOffset);
|
|
Packit Service |
1fb00e |
break;
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
case ACPI_IORT_NODE_NAMED_COMPONENT:
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
InfoTable = AcpiDmTableInfoIort1;
|
|
Packit Service |
1fb00e |
Length = ACPI_OFFSET (ACPI_IORT_NAMED_COMPONENT, DeviceName);
|
|
Packit Service |
1fb00e |
String = ACPI_ADD_PTR (char, IortNode, NodeOffset + Length);
|
|
Packit Service |
1fb00e |
Length += strlen (String) + 1;
|
|
Packit Service |
1fb00e |
break;
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
case ACPI_IORT_NODE_PCI_ROOT_COMPLEX:
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
InfoTable = AcpiDmTableInfoIort2;
|
|
Packit Service |
0129ce |
ACPI_MOVE_16_TO_16(&NodeLength, &IortNode->Length);
|
|
Packit Service |
0129ce |
Length = NodeLength - NodeOffset;
|
|
Packit Service |
1fb00e |
break;
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
case ACPI_IORT_NODE_SMMU:
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
InfoTable = AcpiDmTableInfoIort3;
|
|
Packit Service |
1fb00e |
Length = ACPI_OFFSET (ACPI_IORT_SMMU, Interrupts);
|
|
Packit Service |
1fb00e |
IortSmmu = ACPI_ADD_PTR (ACPI_IORT_SMMU, IortNode, NodeOffset);
|
|
Packit Service |
1fb00e |
break;
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
case ACPI_IORT_NODE_SMMU_V3:
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
InfoTable = AcpiDmTableInfoIort4;
|
|
Packit Service |
0129ce |
ACPI_MOVE_16_TO_16(&NodeLength, &IortNode->Length);
|
|
Packit Service |
0129ce |
Length = NodeLength - NodeOffset;
|
|
Packit Service |
1fb00e |
break;
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
case ACPI_IORT_NODE_PMCG:
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
InfoTable = AcpiDmTableInfoIort5;
|
|
Packit Service |
1fb00e |
Length = IortNode->Length - NodeOffset;
|
|
Packit Service |
1fb00e |
break;
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
default:
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
AcpiOsPrintf ("\n**** Unknown IORT node type 0x%X\n",
|
|
Packit Service |
1fb00e |
IortNode->Type);
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
/* Attempt to continue */
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
0129ce |
ACPI_MOVE_16_TO_16(&NodeLength, &IortNode->Length);
|
|
Packit Service |
0129ce |
if (!NodeLength)
|
|
Packit Service |
1fb00e |
{
|
|
Packit Service |
1fb00e |
AcpiOsPrintf ("Invalid zero length IORT node\n");
|
|
Packit Service |
1fb00e |
return;
|
|
Packit Service |
1fb00e |
}
|
|
Packit Service |
1fb00e |
goto NextSubtable;
|
|
Packit Service |
1fb00e |
}
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
/* Dump the node subtable header */
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
AcpiOsPrintf ("\n");
|
|
Packit Service |
0129ce |
Status = AcpiDmDumpTable (TableLen, Offset + NodeOffset,
|
|
Packit Service |
1fb00e |
ACPI_ADD_PTR (ACPI_IORT_NODE, IortNode, NodeOffset),
|
|
Packit Service |
1fb00e |
Length, InfoTable);
|
|
Packit Service |
1fb00e |
if (ACPI_FAILURE (Status))
|
|
Packit Service |
1fb00e |
{
|
|
Packit Service |
1fb00e |
return;
|
|
Packit Service |
1fb00e |
}
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
NodeOffset += Length;
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
/* Dump the node specific data */
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
switch (IortNode->Type)
|
|
Packit Service |
1fb00e |
{
|
|
Packit Service |
1fb00e |
case ACPI_IORT_NODE_ITS_GROUP:
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
/* Validate IortItsGroup to avoid compiler warnings */
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
if (IortItsGroup)
|
|
Packit Service |
1fb00e |
{
|
|
Packit Service |
0129ce |
ACPI_MOVE_32_TO_32(&ItsCount, &IortItsGroup->ItsCount);
|
|
Packit Service |
0129ce |
for (i = 0; i < ItsCount; i++)
|
|
Packit Service |
1fb00e |
{
|
|
Packit Service |
0129ce |
Status = AcpiDmDumpTable (TableLen, Offset + NodeOffset,
|
|
Packit Service |
1fb00e |
ACPI_ADD_PTR (ACPI_IORT_NODE, IortNode, NodeOffset),
|
|
Packit Service |
1fb00e |
4, AcpiDmTableInfoIort0a);
|
|
Packit Service |
1fb00e |
NodeOffset += 4;
|
|
Packit Service |
1fb00e |
}
|
|
Packit Service |
1fb00e |
}
|
|
Packit Service |
1fb00e |
break;
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
case ACPI_IORT_NODE_NAMED_COMPONENT:
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
/* Dump the Padding (optional) */
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
0129ce |
ACPI_MOVE_16_TO_16(&NodeLength, &IortNode->Length);
|
|
Packit Service |
0129ce |
if (NodeLength > NodeOffset)
|
|
Packit Service |
1fb00e |
{
|
|
Packit Service |
0129ce |
Status = AcpiDmDumpTable (TableLen, Offset + NodeOffset,
|
|
Packit Service |
0129ce |
Table, NodeLength - NodeOffset, AcpiDmTableInfoIort1a);
|
|
Packit Service |
1fb00e |
if (ACPI_FAILURE (Status))
|
|
Packit Service |
1fb00e |
{
|
|
Packit Service |
1fb00e |
return;
|
|
Packit Service |
1fb00e |
}
|
|
Packit Service |
1fb00e |
}
|
|
Packit Service |
1fb00e |
break;
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
case ACPI_IORT_NODE_SMMU:
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
AcpiOsPrintf ("\n");
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
/* Validate IortSmmu to avoid compiler warnings */
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
if (IortSmmu)
|
|
Packit Service |
1fb00e |
{
|
|
Packit Service |
1fb00e |
Length = 2 * sizeof (UINT64);
|
|
Packit Service |
0129ce |
ACPI_MOVE_32_TO_32(&NodeOffset, &IortSmmu->GlobalInterruptOffset);
|
|
Packit Service |
0129ce |
Status = AcpiDmDumpTable (TableLen, Offset + NodeOffset,
|
|
Packit Service |
1fb00e |
ACPI_ADD_PTR (ACPI_IORT_NODE, IortNode, NodeOffset),
|
|
Packit Service |
1fb00e |
Length, AcpiDmTableInfoIort3a);
|
|
Packit Service |
1fb00e |
if (ACPI_FAILURE (Status))
|
|
Packit Service |
1fb00e |
{
|
|
Packit Service |
1fb00e |
return;
|
|
Packit Service |
1fb00e |
}
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
0129ce |
ACPI_MOVE_32_TO_32(&NodeOffset, &IortSmmu->ContextInterruptOffset);
|
|
Packit Service |
0129ce |
ACPI_MOVE_32_TO_32(&CtxIntCount, &IortSmmu->ContextInterruptCount);
|
|
Packit Service |
0129ce |
for (i = 0; i < CtxIntCount; i++)
|
|
Packit Service |
1fb00e |
{
|
|
Packit Service |
0129ce |
Status = AcpiDmDumpTable (TableLen, Offset + NodeOffset,
|
|
Packit Service |
1fb00e |
ACPI_ADD_PTR (ACPI_IORT_NODE, IortNode, NodeOffset),
|
|
Packit Service |
1fb00e |
8, AcpiDmTableInfoIort3b);
|
|
Packit Service |
1fb00e |
if (ACPI_FAILURE (Status))
|
|
Packit Service |
1fb00e |
{
|
|
Packit Service |
1fb00e |
return;
|
|
Packit Service |
1fb00e |
}
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
NodeOffset += 8;
|
|
Packit Service |
1fb00e |
}
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
0129ce |
ACPI_MOVE_32_TO_32(&NodeOffset, &IortSmmu->PmuInterruptOffset);
|
|
Packit Service |
0129ce |
ACPI_MOVE_32_TO_32(&PmuIntCount, &IortSmmu->PmuInterruptCount);
|
|
Packit Service |
0129ce |
for (i = 0; i < PmuIntCount; i++)
|
|
Packit Service |
1fb00e |
{
|
|
Packit Service |
0129ce |
Status = AcpiDmDumpTable (TableLen, Offset + NodeOffset,
|
|
Packit Service |
1fb00e |
ACPI_ADD_PTR (ACPI_IORT_NODE, IortNode, NodeOffset),
|
|
Packit Service |
1fb00e |
8, AcpiDmTableInfoIort3c);
|
|
Packit Service |
1fb00e |
if (ACPI_FAILURE (Status))
|
|
Packit Service |
1fb00e |
{
|
|
Packit Service |
1fb00e |
return;
|
|
Packit Service |
1fb00e |
}
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
NodeOffset += 8;
|
|
Packit Service |
1fb00e |
}
|
|
Packit Service |
1fb00e |
}
|
|
Packit Service |
1fb00e |
break;
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
default:
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
break;
|
|
Packit Service |
1fb00e |
}
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
/* Dump the ID mappings */
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
0129ce |
ACPI_MOVE_32_TO_32(&NodeOffset, &IortNode->MappingOffset);
|
|
Packit Service |
0129ce |
ACPI_MOVE_32_TO_32(&MappingCount, &IortNode->MappingCount);
|
|
Packit Service |
0129ce |
for (i = 0; i < MappingCount; i++)
|
|
Packit Service |
1fb00e |
{
|
|
Packit Service |
1fb00e |
AcpiOsPrintf ("\n");
|
|
Packit Service |
1fb00e |
Length = sizeof (ACPI_IORT_ID_MAPPING);
|
|
Packit Service |
0129ce |
Status = AcpiDmDumpTable (TableLen, Offset + NodeOffset,
|
|
Packit Service |
1fb00e |
ACPI_ADD_PTR (ACPI_IORT_NODE, IortNode, NodeOffset),
|
|
Packit Service |
1fb00e |
Length, AcpiDmTableInfoIortMap);
|
|
Packit Service |
1fb00e |
if (ACPI_FAILURE (Status))
|
|
Packit Service |
1fb00e |
{
|
|
Packit Service |
1fb00e |
return;
|
|
Packit Service |
1fb00e |
}
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
NodeOffset += Length;
|
|
Packit Service |
1fb00e |
}
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
NextSubtable:
|
|
Packit Service |
1fb00e |
/* Point to next node subtable */
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
0129ce |
ACPI_MOVE_16_TO_16(&NodeLength, &IortNode->Length);
|
|
Packit Service |
0129ce |
Offset += NodeLength;
|
|
Packit Service |
0129ce |
IortNode = ACPI_ADD_PTR (ACPI_IORT_NODE, IortNode, NodeLength);
|
|
Packit Service |
1fb00e |
}
|
|
Packit Service |
1fb00e |
}
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
/*******************************************************************************
|
|
Packit Service |
1fb00e |
*
|
|
Packit Service |
1fb00e |
* FUNCTION: AcpiDmDumpIvrs
|
|
Packit Service |
1fb00e |
*
|
|
Packit Service |
1fb00e |
* PARAMETERS: Table - A IVRS table
|
|
Packit Service |
1fb00e |
*
|
|
Packit Service |
1fb00e |
* RETURN: None
|
|
Packit Service |
1fb00e |
*
|
|
Packit Service |
1fb00e |
* DESCRIPTION: Format the contents of a IVRS
|
|
Packit Service |
1fb00e |
*
|
|
Packit Service |
1fb00e |
******************************************************************************/
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
static UINT8 EntrySizes[] = {4,8,16,32};
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
void
|
|
Packit Service |
1fb00e |
AcpiDmDumpIvrs (
|
|
Packit Service |
1fb00e |
ACPI_TABLE_HEADER *Table)
|
|
Packit Service |
1fb00e |
{
|
|
Packit Service |
1fb00e |
ACPI_STATUS Status;
|
|
Packit Service |
1fb00e |
UINT32 Offset = sizeof (ACPI_TABLE_IVRS);
|
|
Packit Service |
1fb00e |
UINT32 EntryOffset;
|
|
Packit Service |
1fb00e |
UINT32 EntryLength;
|
|
Packit Service |
1fb00e |
UINT32 EntryType;
|
|
Packit Service |
1fb00e |
ACPI_IVRS_DE_HEADER *DeviceEntry;
|
|
Packit Service |
1fb00e |
ACPI_IVRS_HEADER *Subtable;
|
|
Packit Service |
1fb00e |
ACPI_DMTABLE_INFO *InfoTable;
|
|
Packit Service |
0129ce |
UINT32 Length;
|
|
Packit Service |
0129ce |
UINT16 SubLength;
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
/* Main table */
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
0129ce |
ACPI_MOVE_32_TO_32(&Length, &Table->Length);
|
|
Packit Service |
0129ce |
Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoIvrs);
|
|
Packit Service |
1fb00e |
if (ACPI_FAILURE (Status))
|
|
Packit Service |
1fb00e |
{
|
|
Packit Service |
1fb00e |
return;
|
|
Packit Service |
1fb00e |
}
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
/* Subtables */
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
Subtable = ACPI_ADD_PTR (ACPI_IVRS_HEADER, Table, Offset);
|
|
Packit Service |
0129ce |
while (Offset < Length)
|
|
Packit Service |
1fb00e |
{
|
|
Packit Service |
1fb00e |
/* Common subtable header */
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
AcpiOsPrintf ("\n");
|
|
Packit Service |
0129ce |
ACPI_MOVE_16_TO_16(&SubLength, &Subtable->Length);
|
|
Packit Service |
0129ce |
Status = AcpiDmDumpTable (Length, Offset, Subtable,
|
|
Packit Service |
0129ce |
SubLength, AcpiDmTableInfoIvrsHdr);
|
|
Packit Service |
1fb00e |
if (ACPI_FAILURE (Status))
|
|
Packit Service |
1fb00e |
{
|
|
Packit Service |
1fb00e |
return;
|
|
Packit Service |
1fb00e |
}
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
switch (Subtable->Type)
|
|
Packit Service |
1fb00e |
{
|
|
Packit Service |
1fb00e |
case ACPI_IVRS_TYPE_HARDWARE:
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
InfoTable = AcpiDmTableInfoIvrs0;
|
|
Packit Service |
1fb00e |
break;
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
case ACPI_IVRS_TYPE_MEMORY1:
|
|
Packit Service |
1fb00e |
case ACPI_IVRS_TYPE_MEMORY2:
|
|
Packit Service |
1fb00e |
case ACPI_IVRS_TYPE_MEMORY3:
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
InfoTable = AcpiDmTableInfoIvrs1;
|
|
Packit Service |
1fb00e |
break;
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
default:
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
AcpiOsPrintf ("\n**** Unknown IVRS subtable type 0x%X\n",
|
|
Packit Service |
1fb00e |
Subtable->Type);
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
/* Attempt to continue */
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
0129ce |
if (!SubLength)
|
|
Packit Service |
1fb00e |
{
|
|
Packit Service |
1fb00e |
AcpiOsPrintf ("Invalid zero length subtable\n");
|
|
Packit Service |
1fb00e |
return;
|
|
Packit Service |
1fb00e |
}
|
|
Packit Service |
1fb00e |
goto NextSubtable;
|
|
Packit Service |
1fb00e |
}
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
/* Dump the subtable */
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
AcpiOsPrintf ("\n");
|
|
Packit Service |
0129ce |
Status = AcpiDmDumpTable (Length, Offset, Subtable,
|
|
Packit Service |
0129ce |
SubLength, InfoTable);
|
|
Packit Service |
1fb00e |
if (ACPI_FAILURE (Status))
|
|
Packit Service |
1fb00e |
{
|
|
Packit Service |
1fb00e |
return;
|
|
Packit Service |
1fb00e |
}
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
/* The hardware subtable can contain multiple device entries */
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
if (Subtable->Type == ACPI_IVRS_TYPE_HARDWARE)
|
|
Packit Service |
1fb00e |
{
|
|
Packit Service |
1fb00e |
EntryOffset = Offset + sizeof (ACPI_IVRS_HARDWARE);
|
|
Packit Service |
1fb00e |
DeviceEntry = ACPI_ADD_PTR (ACPI_IVRS_DE_HEADER, Subtable,
|
|
Packit Service |
1fb00e |
sizeof (ACPI_IVRS_HARDWARE));
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
0129ce |
while (EntryOffset < (Offset + SubLength))
|
|
Packit Service |
1fb00e |
{
|
|
Packit Service |
1fb00e |
AcpiOsPrintf ("\n");
|
|
Packit Service |
1fb00e |
/*
|
|
Packit Service |
1fb00e |
* Upper 2 bits of Type encode the length of the device entry
|
|
Packit Service |
1fb00e |
*
|
|
Packit Service |
1fb00e |
* 00 = 4 byte
|
|
Packit Service |
1fb00e |
* 01 = 8 byte
|
|
Packit Service |
1fb00e |
* 10 = 16 byte - currently no entries defined
|
|
Packit Service |
1fb00e |
* 11 = 32 byte - currently no entries defined
|
|
Packit Service |
1fb00e |
*/
|
|
Packit Service |
1fb00e |
EntryType = DeviceEntry->Type;
|
|
Packit Service |
1fb00e |
EntryLength = EntrySizes [EntryType >> 6];
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
switch (EntryType)
|
|
Packit Service |
1fb00e |
{
|
|
Packit Service |
1fb00e |
/* 4-byte device entries */
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
case ACPI_IVRS_TYPE_PAD4:
|
|
Packit Service |
1fb00e |
case ACPI_IVRS_TYPE_ALL:
|
|
Packit Service |
1fb00e |
case ACPI_IVRS_TYPE_SELECT:
|
|
Packit Service |
1fb00e |
case ACPI_IVRS_TYPE_START:
|
|
Packit Service |
1fb00e |
case ACPI_IVRS_TYPE_END:
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
InfoTable = AcpiDmTableInfoIvrs4;
|
|
Packit Service |
1fb00e |
break;
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
/* 8-byte entries, type A */
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
case ACPI_IVRS_TYPE_ALIAS_SELECT:
|
|
Packit Service |
1fb00e |
case ACPI_IVRS_TYPE_ALIAS_START:
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
InfoTable = AcpiDmTableInfoIvrs8a;
|
|
Packit Service |
1fb00e |
break;
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
/* 8-byte entries, type B */
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
case ACPI_IVRS_TYPE_PAD8:
|
|
Packit Service |
1fb00e |
case ACPI_IVRS_TYPE_EXT_SELECT:
|
|
Packit Service |
1fb00e |
case ACPI_IVRS_TYPE_EXT_START:
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
InfoTable = AcpiDmTableInfoIvrs8b;
|
|
Packit Service |
1fb00e |
break;
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
/* 8-byte entries, type C */
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
case ACPI_IVRS_TYPE_SPECIAL:
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
InfoTable = AcpiDmTableInfoIvrs8c;
|
|
Packit Service |
1fb00e |
break;
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
default:
|
|
Packit Service |
1fb00e |
InfoTable = AcpiDmTableInfoIvrs4;
|
|
Packit Service |
1fb00e |
AcpiOsPrintf (
|
|
Packit Service |
1fb00e |
"\n**** Unknown IVRS device entry type/length: "
|
|
Packit Service |
1fb00e |
"0x%.2X/0x%X at offset 0x%.4X: (header below)\n",
|
|
Packit Service |
1fb00e |
EntryType, EntryLength, EntryOffset);
|
|
Packit Service |
1fb00e |
break;
|
|
Packit Service |
1fb00e |
}
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
/* Dump the Device Entry */
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
0129ce |
Status = AcpiDmDumpTable (Length, EntryOffset,
|
|
Packit Service |
1fb00e |
DeviceEntry, EntryLength, InfoTable);
|
|
Packit Service |
1fb00e |
if (ACPI_FAILURE (Status))
|
|
Packit Service |
1fb00e |
{
|
|
Packit Service |
1fb00e |
return;
|
|
Packit Service |
1fb00e |
}
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
EntryOffset += EntryLength;
|
|
Packit Service |
1fb00e |
DeviceEntry = ACPI_ADD_PTR (ACPI_IVRS_DE_HEADER, DeviceEntry,
|
|
Packit Service |
1fb00e |
EntryLength);
|
|
Packit Service |
1fb00e |
}
|
|
Packit Service |
1fb00e |
}
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
NextSubtable:
|
|
Packit Service |
1fb00e |
/* Point to next subtable */
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
0129ce |
Offset += SubLength;
|
|
Packit Service |
0129ce |
Subtable = ACPI_ADD_PTR (ACPI_IVRS_HEADER, Subtable, SubLength);
|
|
Packit Service |
1fb00e |
}
|
|
Packit Service |
1fb00e |
}
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
/*******************************************************************************
|
|
Packit Service |
1fb00e |
*
|
|
Packit Service |
1fb00e |
* FUNCTION: AcpiDmDumpLpit
|
|
Packit Service |
1fb00e |
*
|
|
Packit Service |
1fb00e |
* PARAMETERS: Table - A LPIT table
|
|
Packit Service |
1fb00e |
*
|
|
Packit Service |
1fb00e |
* RETURN: None
|
|
Packit Service |
1fb00e |
*
|
|
Packit Service |
1fb00e |
* DESCRIPTION: Format the contents of a LPIT. This table type consists
|
|
Packit Service |
1fb00e |
* of an open-ended number of subtables. Note: There are no
|
|
Packit Service |
1fb00e |
* entries in the main table. An LPIT consists of the table
|
|
Packit Service |
1fb00e |
* header and then subtables only.
|
|
Packit Service |
1fb00e |
*
|
|
Packit Service |
1fb00e |
******************************************************************************/
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
void
|
|
Packit Service |
1fb00e |
AcpiDmDumpLpit (
|
|
Packit Service |
1fb00e |
ACPI_TABLE_HEADER *Table)
|
|
Packit Service |
1fb00e |
{
|
|
Packit Service |
1fb00e |
ACPI_STATUS Status;
|
|
Packit Service |
1fb00e |
ACPI_LPIT_HEADER *Subtable;
|
|
Packit Service |
0129ce |
UINT32 Length;
|
|
Packit Service |
1fb00e |
UINT32 Offset = sizeof (ACPI_TABLE_LPIT);
|
|
Packit Service |
1fb00e |
ACPI_DMTABLE_INFO *InfoTable;
|
|
Packit Service |
1fb00e |
UINT32 SubtableLength;
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
/* Subtables */
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
0129ce |
ACPI_MOVE_32_TO_32(&Length, &Table->Length);
|
|
Packit Service |
1fb00e |
Subtable = ACPI_ADD_PTR (ACPI_LPIT_HEADER, Table, Offset);
|
|
Packit Service |
0129ce |
while (Offset < Length)
|
|
Packit Service |
1fb00e |
{
|
|
Packit Service |
1fb00e |
/* Common subtable header */
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
Status = AcpiDmDumpTable (Length, Offset, Subtable,
|
|
Packit Service |
1fb00e |
sizeof (ACPI_LPIT_HEADER), AcpiDmTableInfoLpitHdr);
|
|
Packit Service |
1fb00e |
if (ACPI_FAILURE (Status))
|
|
Packit Service |
1fb00e |
{
|
|
Packit Service |
1fb00e |
return;
|
|
Packit Service |
1fb00e |
}
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
switch (Subtable->Type)
|
|
Packit Service |
1fb00e |
{
|
|
Packit Service |
1fb00e |
case ACPI_LPIT_TYPE_NATIVE_CSTATE:
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
InfoTable = AcpiDmTableInfoLpit0;
|
|
Packit Service |
1fb00e |
SubtableLength = sizeof (ACPI_LPIT_NATIVE);
|
|
Packit Service |
1fb00e |
break;
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
default:
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
/* Cannot continue on unknown type - no length */
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
AcpiOsPrintf ("\n**** Unknown LPIT subtable type 0x%X\n",
|
|
Packit Service |
1fb00e |
Subtable->Type);
|
|
Packit Service |
1fb00e |
return;
|
|
Packit Service |
1fb00e |
}
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
Status = AcpiDmDumpTable (Length, Offset, Subtable,
|
|
Packit Service |
1fb00e |
SubtableLength, InfoTable);
|
|
Packit Service |
1fb00e |
if (ACPI_FAILURE (Status))
|
|
Packit Service |
1fb00e |
{
|
|
Packit Service |
1fb00e |
return;
|
|
Packit Service |
1fb00e |
}
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
AcpiOsPrintf ("\n");
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
/* Point to next subtable */
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
Offset += SubtableLength;
|
|
Packit Service |
1fb00e |
Subtable = ACPI_ADD_PTR (ACPI_LPIT_HEADER, Subtable, SubtableLength);
|
|
Packit Service |
1fb00e |
}
|
|
Packit Service |
1fb00e |
}
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
/*******************************************************************************
|
|
Packit Service |
1fb00e |
*
|
|
Packit Service |
1fb00e |
* FUNCTION: AcpiDmDumpMadt
|
|
Packit Service |
1fb00e |
*
|
|
Packit Service |
1fb00e |
* PARAMETERS: Table - A MADT table
|
|
Packit Service |
1fb00e |
*
|
|
Packit Service |
1fb00e |
* RETURN: None
|
|
Packit Service |
1fb00e |
*
|
|
Packit Service |
1fb00e |
* DESCRIPTION: Format the contents of a MADT. This table type consists
|
|
Packit Service |
1fb00e |
* of an open-ended number of subtables.
|
|
Packit Service |
1fb00e |
*
|
|
Packit Service |
1fb00e |
******************************************************************************/
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
void
|
|
Packit Service |
1fb00e |
AcpiDmDumpMadt (
|
|
Packit Service |
1fb00e |
ACPI_TABLE_HEADER *Table)
|
|
Packit Service |
1fb00e |
{
|
|
Packit Service |
1fb00e |
ACPI_STATUS Status;
|
|
Packit Service |
1fb00e |
ACPI_SUBTABLE_HEADER *Subtable;
|
|
Packit Service |
0129ce |
UINT32 Length;
|
|
Packit Service |
1fb00e |
UINT32 Offset = sizeof (ACPI_TABLE_MADT);
|
|
Packit Service |
1fb00e |
ACPI_DMTABLE_INFO *InfoTable;
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
/* Main table */
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
0129ce |
ACPI_MOVE_32_TO_32(&Length, &Table->Length);
|
|
Packit Service |
1fb00e |
Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoMadt);
|
|
Packit Service |
1fb00e |
if (ACPI_FAILURE (Status))
|
|
Packit Service |
1fb00e |
{
|
|
Packit Service |
1fb00e |
return;
|
|
Packit Service |
1fb00e |
}
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
/* Subtables */
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
Subtable = ACPI_ADD_PTR (ACPI_SUBTABLE_HEADER, Table, Offset);
|
|
Packit Service |
0129ce |
while (Offset < Length)
|
|
Packit Service |
1fb00e |
{
|
|
Packit Service |
1fb00e |
/* Common subtable header */
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
AcpiOsPrintf ("\n");
|
|
Packit Service |
1fb00e |
Status = AcpiDmDumpTable (Length, Offset, Subtable,
|
|
Packit Service |
1fb00e |
Subtable->Length, AcpiDmTableInfoMadtHdr);
|
|
Packit Service |
1fb00e |
if (ACPI_FAILURE (Status))
|
|
Packit Service |
1fb00e |
{
|
|
Packit Service |
1fb00e |
return;
|
|
Packit Service |
1fb00e |
}
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
switch (Subtable->Type)
|
|
Packit Service |
1fb00e |
{
|
|
Packit Service |
1fb00e |
case ACPI_MADT_TYPE_LOCAL_APIC:
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
InfoTable = AcpiDmTableInfoMadt0;
|
|
Packit Service |
1fb00e |
break;
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
case ACPI_MADT_TYPE_IO_APIC:
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
InfoTable = AcpiDmTableInfoMadt1;
|
|
Packit Service |
1fb00e |
break;
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
case ACPI_MADT_TYPE_INTERRUPT_OVERRIDE:
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
InfoTable = AcpiDmTableInfoMadt2;
|
|
Packit Service |
1fb00e |
break;
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
case ACPI_MADT_TYPE_NMI_SOURCE:
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
InfoTable = AcpiDmTableInfoMadt3;
|
|
Packit Service |
1fb00e |
break;
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
case ACPI_MADT_TYPE_LOCAL_APIC_NMI:
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
InfoTable = AcpiDmTableInfoMadt4;
|
|
Packit Service |
1fb00e |
break;
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
case ACPI_MADT_TYPE_LOCAL_APIC_OVERRIDE:
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
InfoTable = AcpiDmTableInfoMadt5;
|
|
Packit Service |
1fb00e |
break;
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
case ACPI_MADT_TYPE_IO_SAPIC:
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
InfoTable = AcpiDmTableInfoMadt6;
|
|
Packit Service |
1fb00e |
break;
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
case ACPI_MADT_TYPE_LOCAL_SAPIC:
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
InfoTable = AcpiDmTableInfoMadt7;
|
|
Packit Service |
1fb00e |
break;
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
case ACPI_MADT_TYPE_INTERRUPT_SOURCE:
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
InfoTable = AcpiDmTableInfoMadt8;
|
|
Packit Service |
1fb00e |
break;
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
case ACPI_MADT_TYPE_LOCAL_X2APIC:
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
InfoTable = AcpiDmTableInfoMadt9;
|
|
Packit Service |
1fb00e |
break;
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
case ACPI_MADT_TYPE_LOCAL_X2APIC_NMI:
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
InfoTable = AcpiDmTableInfoMadt10;
|
|
Packit Service |
1fb00e |
break;
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
case ACPI_MADT_TYPE_GENERIC_INTERRUPT:
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
InfoTable = AcpiDmTableInfoMadt11;
|
|
Packit Service |
1fb00e |
break;
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
case ACPI_MADT_TYPE_GENERIC_DISTRIBUTOR:
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
InfoTable = AcpiDmTableInfoMadt12;
|
|
Packit Service |
1fb00e |
break;
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
case ACPI_MADT_TYPE_GENERIC_MSI_FRAME:
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
InfoTable = AcpiDmTableInfoMadt13;
|
|
Packit Service |
1fb00e |
break;
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
case ACPI_MADT_TYPE_GENERIC_REDISTRIBUTOR:
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
InfoTable = AcpiDmTableInfoMadt14;
|
|
Packit Service |
1fb00e |
break;
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
case ACPI_MADT_TYPE_GENERIC_TRANSLATOR:
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
InfoTable = AcpiDmTableInfoMadt15;
|
|
Packit Service |
1fb00e |
break;
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
default:
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
AcpiOsPrintf ("\n**** Unknown MADT subtable type 0x%X\n\n",
|
|
Packit Service |
1fb00e |
Subtable->Type);
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
/* Attempt to continue */
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
if (!Subtable->Length)
|
|
Packit Service |
1fb00e |
{
|
|
Packit Service |
1fb00e |
AcpiOsPrintf ("Invalid zero length subtable\n");
|
|
Packit Service |
1fb00e |
return;
|
|
Packit Service |
1fb00e |
}
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
goto NextSubtable;
|
|
Packit Service |
1fb00e |
}
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
Status = AcpiDmDumpTable (Length, Offset, Subtable,
|
|
Packit Service |
1fb00e |
Subtable->Length, InfoTable);
|
|
Packit Service |
1fb00e |
if (ACPI_FAILURE (Status))
|
|
Packit Service |
1fb00e |
{
|
|
Packit Service |
1fb00e |
return;
|
|
Packit Service |
1fb00e |
}
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
NextSubtable:
|
|
Packit Service |
1fb00e |
/* Point to next subtable */
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
Offset += Subtable->Length;
|
|
Packit Service |
1fb00e |
Subtable = ACPI_ADD_PTR (ACPI_SUBTABLE_HEADER, Subtable,
|
|
Packit Service |
1fb00e |
Subtable->Length);
|
|
Packit Service |
1fb00e |
}
|
|
Packit Service |
1fb00e |
}
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
/*******************************************************************************
|
|
Packit Service |
1fb00e |
*
|
|
Packit Service |
1fb00e |
* FUNCTION: AcpiDmDumpMcfg
|
|
Packit Service |
1fb00e |
*
|
|
Packit Service |
1fb00e |
* PARAMETERS: Table - A MCFG Table
|
|
Packit Service |
1fb00e |
*
|
|
Packit Service |
1fb00e |
* RETURN: None
|
|
Packit Service |
1fb00e |
*
|
|
Packit Service |
1fb00e |
* DESCRIPTION: Format the contents of a MCFG table
|
|
Packit Service |
1fb00e |
*
|
|
Packit Service |
1fb00e |
******************************************************************************/
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
void
|
|
Packit Service |
1fb00e |
AcpiDmDumpMcfg (
|
|
Packit Service |
1fb00e |
ACPI_TABLE_HEADER *Table)
|
|
Packit Service |
1fb00e |
{
|
|
Packit Service |
1fb00e |
ACPI_STATUS Status;
|
|
Packit Service |
1fb00e |
UINT32 Offset = sizeof (ACPI_TABLE_MCFG);
|
|
Packit Service |
1fb00e |
ACPI_MCFG_ALLOCATION *Subtable;
|
|
Packit Service |
0129ce |
UINT32 Len;
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
/* Main table */
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
0129ce |
ACPI_MOVE_32_TO_32(&Len, &Table->Length);
|
|
Packit Service |
0129ce |
Status = AcpiDmDumpTable (Len, 0, Table, 0, AcpiDmTableInfoMcfg);
|
|
Packit Service |
1fb00e |
if (ACPI_FAILURE (Status))
|
|
Packit Service |
1fb00e |
{
|
|
Packit Service |
1fb00e |
return;
|
|
Packit Service |
1fb00e |
}
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
/* Subtables */
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
Subtable = ACPI_ADD_PTR (ACPI_MCFG_ALLOCATION, Table, Offset);
|
|
Packit Service |
0129ce |
while (Offset < Len)
|
|
Packit Service |
1fb00e |
{
|
|
Packit Service |
0129ce |
if (Offset + sizeof (ACPI_MCFG_ALLOCATION) > Len)
|
|
Packit Service |
1fb00e |
{
|
|
Packit Service |
1fb00e |
AcpiOsPrintf ("Warning: there are %u invalid trailing bytes\n",
|
|
Packit Service |
0129ce |
sizeof (ACPI_MCFG_ALLOCATION) - (Offset - Len));
|
|
Packit Service |
1fb00e |
return;
|
|
Packit Service |
1fb00e |
}
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
AcpiOsPrintf ("\n");
|
|
Packit Service |
0129ce |
Status = AcpiDmDumpTable (Len, Offset, Subtable,
|
|
Packit Service |
1fb00e |
sizeof (ACPI_MCFG_ALLOCATION), AcpiDmTableInfoMcfg0);
|
|
Packit Service |
1fb00e |
if (ACPI_FAILURE (Status))
|
|
Packit Service |
1fb00e |
{
|
|
Packit Service |
1fb00e |
return;
|
|
Packit Service |
1fb00e |
}
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
/* Point to next subtable (each subtable is of fixed length) */
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
Offset += sizeof (ACPI_MCFG_ALLOCATION);
|
|
Packit Service |
1fb00e |
Subtable = ACPI_ADD_PTR (ACPI_MCFG_ALLOCATION, Subtable,
|
|
Packit Service |
1fb00e |
sizeof (ACPI_MCFG_ALLOCATION));
|
|
Packit Service |
1fb00e |
}
|
|
Packit Service |
1fb00e |
}
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
/*******************************************************************************
|
|
Packit Service |
1fb00e |
*
|
|
Packit Service |
1fb00e |
* FUNCTION: AcpiDmDumpMpst
|
|
Packit Service |
1fb00e |
*
|
|
Packit Service |
1fb00e |
* PARAMETERS: Table - A MPST Table
|
|
Packit Service |
1fb00e |
*
|
|
Packit Service |
1fb00e |
* RETURN: None
|
|
Packit Service |
1fb00e |
*
|
|
Packit Service |
1fb00e |
* DESCRIPTION: Format the contents of a MPST table
|
|
Packit Service |
1fb00e |
*
|
|
Packit Service |
1fb00e |
******************************************************************************/
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
void
|
|
Packit Service |
1fb00e |
AcpiDmDumpMpst (
|
|
Packit Service |
1fb00e |
ACPI_TABLE_HEADER *Table)
|
|
Packit Service |
1fb00e |
{
|
|
Packit Service |
1fb00e |
ACPI_STATUS Status;
|
|
Packit Service |
1fb00e |
UINT32 Offset = sizeof (ACPI_TABLE_MPST);
|
|
Packit Service |
0129ce |
ACPI_TABLE_MPST *Mpst;
|
|
Packit Service |
1fb00e |
ACPI_MPST_POWER_NODE *Subtable0;
|
|
Packit Service |
1fb00e |
ACPI_MPST_POWER_STATE *Subtable0A;
|
|
Packit Service |
1fb00e |
ACPI_MPST_COMPONENT *Subtable0B;
|
|
Packit Service |
1fb00e |
ACPI_MPST_DATA_HDR *Subtable1;
|
|
Packit Service |
1fb00e |
ACPI_MPST_POWER_DATA *Subtable2;
|
|
Packit Service |
1fb00e |
UINT16 SubtableCount;
|
|
Packit Service |
1fb00e |
UINT32 PowerStateCount;
|
|
Packit Service |
1fb00e |
UINT32 ComponentCount;
|
|
Packit Service |
0129ce |
UINT32 Length;
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
/* Main table */
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
0129ce |
ACPI_MOVE_32_TO_32(&Length, &Table->Length);
|
|
Packit Service |
0129ce |
Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoMpst);
|
|
Packit Service |
1fb00e |
if (ACPI_FAILURE (Status))
|
|
Packit Service |
1fb00e |
{
|
|
Packit Service |
1fb00e |
return;
|
|
Packit Service |
1fb00e |
}
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
/* Subtable: Memory Power Node(s) */
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
0129ce |
Mpst = ACPI_CAST_PTR (ACPI_TABLE_MPST, Table);
|
|
Packit Service |
0129ce |
ACPI_MOVE_16_TO_16(&SubtableCount, &Mpst->PowerNodeCount);
|
|
Packit Service |
1fb00e |
Subtable0 = ACPI_ADD_PTR (ACPI_MPST_POWER_NODE, Table, Offset);
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
0129ce |
while ((Offset < Length) && SubtableCount)
|
|
Packit Service |
1fb00e |
{
|
|
Packit Service |
1fb00e |
AcpiOsPrintf ("\n");
|
|
Packit Service |
0129ce |
Status = AcpiDmDumpTable (Length, Offset, Subtable0,
|
|
Packit Service |
1fb00e |
sizeof (ACPI_MPST_POWER_NODE), AcpiDmTableInfoMpst0);
|
|
Packit Service |
1fb00e |
if (ACPI_FAILURE (Status))
|
|
Packit Service |
1fb00e |
{
|
|
Packit Service |
1fb00e |
return;
|
|
Packit Service |
1fb00e |
}
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
/* Extract the sub-subtable counts */
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
0129ce |
ACPI_MOVE_32_TO_32(&PowerStateCount, &Subtable0->NumPowerStates);
|
|
Packit Service |
0129ce |
ACPI_MOVE_32_TO_32(&ComponentCount, &Subtable0->NumPhysicalComponents);
|
|
Packit Service |
1fb00e |
Offset += sizeof (ACPI_MPST_POWER_NODE);
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
/* Sub-subtables - Memory Power State Structure(s) */
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
Subtable0A = ACPI_ADD_PTR (ACPI_MPST_POWER_STATE, Subtable0,
|
|
Packit Service |
1fb00e |
sizeof (ACPI_MPST_POWER_NODE));
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
while (PowerStateCount)
|
|
Packit Service |
1fb00e |
{
|
|
Packit Service |
1fb00e |
AcpiOsPrintf ("\n");
|
|
Packit Service |
0129ce |
Status = AcpiDmDumpTable (Length, Offset, Subtable0A,
|
|
Packit Service |
1fb00e |
sizeof (ACPI_MPST_POWER_STATE), AcpiDmTableInfoMpst0A);
|
|
Packit Service |
1fb00e |
if (ACPI_FAILURE (Status))
|
|
Packit Service |
1fb00e |
{
|
|
Packit Service |
1fb00e |
return;
|
|
Packit Service |
1fb00e |
}
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
Subtable0A++;
|
|
Packit Service |
1fb00e |
PowerStateCount--;
|
|
Packit Service |
1fb00e |
Offset += sizeof (ACPI_MPST_POWER_STATE);
|
|
Packit Service |
0129ce |
}
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
/* Sub-subtables - Physical Component ID Structure(s) */
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
Subtable0B = ACPI_CAST_PTR (ACPI_MPST_COMPONENT, Subtable0A);
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
if (ComponentCount)
|
|
Packit Service |
1fb00e |
{
|
|
Packit Service |
1fb00e |
AcpiOsPrintf ("\n");
|
|
Packit Service |
1fb00e |
}
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
while (ComponentCount)
|
|
Packit Service |
1fb00e |
{
|
|
Packit Service |
0129ce |
Status = AcpiDmDumpTable (Length, Offset, Subtable0B,
|
|
Packit Service |
1fb00e |
sizeof (ACPI_MPST_COMPONENT), AcpiDmTableInfoMpst0B);
|
|
Packit Service |
1fb00e |
if (ACPI_FAILURE (Status))
|
|
Packit Service |
1fb00e |
{
|
|
Packit Service |
1fb00e |
return;
|
|
Packit Service |
1fb00e |
}
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
Subtable0B++;
|
|
Packit Service |
1fb00e |
ComponentCount--;
|
|
Packit Service |
1fb00e |
Offset += sizeof (ACPI_MPST_COMPONENT);
|
|
Packit Service |
1fb00e |
}
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
/* Point to next Memory Power Node subtable */
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
SubtableCount--;
|
|
Packit Service |
0129ce |
ACPI_MOVE_32_TO_32(&PowerStateCount, &Subtable0->NumPowerStates);
|
|
Packit Service |
0129ce |
ACPI_MOVE_32_TO_32(&ComponentCount, &Subtable0->NumPhysicalComponents);
|
|
Packit Service |
1fb00e |
Subtable0 = ACPI_ADD_PTR (ACPI_MPST_POWER_NODE, Subtable0,
|
|
Packit Service |
1fb00e |
sizeof (ACPI_MPST_POWER_NODE) +
|
|
Packit Service |
0129ce |
(sizeof (ACPI_MPST_POWER_STATE) * PowerStateCount) +
|
|
Packit Service |
0129ce |
(sizeof (ACPI_MPST_COMPONENT) * ComponentCount));
|
|
Packit Service |
1fb00e |
}
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
/* Subtable: Count of Memory Power State Characteristic structures */
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
AcpiOsPrintf ("\n");
|
|
Packit Service |
1fb00e |
Subtable1 = ACPI_CAST_PTR (ACPI_MPST_DATA_HDR, Subtable0);
|
|
Packit Service |
0129ce |
Status = AcpiDmDumpTable (Length, Offset, Subtable1,
|
|
Packit Service |
1fb00e |
sizeof (ACPI_MPST_DATA_HDR), AcpiDmTableInfoMpst1);
|
|
Packit Service |
1fb00e |
if (ACPI_FAILURE (Status))
|
|
Packit Service |
1fb00e |
{
|
|
Packit Service |
1fb00e |
return;
|
|
Packit Service |
1fb00e |
}
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
SubtableCount = Subtable1->CharacteristicsCount;
|
|
Packit Service |
1fb00e |
Offset += sizeof (ACPI_MPST_DATA_HDR);
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
/* Subtable: Memory Power State Characteristics structure(s) */
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
Subtable2 = ACPI_ADD_PTR (ACPI_MPST_POWER_DATA, Subtable1,
|
|
Packit Service |
1fb00e |
sizeof (ACPI_MPST_DATA_HDR));
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
0129ce |
while ((Offset < Length) && SubtableCount)
|
|
Packit Service |
1fb00e |
{
|
|
Packit Service |
1fb00e |
AcpiOsPrintf ("\n");
|
|
Packit Service |
0129ce |
Status = AcpiDmDumpTable (Length, Offset, Subtable2,
|
|
Packit Service |
1fb00e |
sizeof (ACPI_MPST_POWER_DATA), AcpiDmTableInfoMpst2);
|
|
Packit Service |
1fb00e |
if (ACPI_FAILURE (Status))
|
|
Packit Service |
1fb00e |
{
|
|
Packit Service |
1fb00e |
return;
|
|
Packit Service |
1fb00e |
}
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
Subtable2++;
|
|
Packit Service |
1fb00e |
SubtableCount--;
|
|
Packit Service |
1fb00e |
Offset += sizeof (ACPI_MPST_POWER_DATA);
|
|
Packit Service |
1fb00e |
}
|
|
Packit Service |
1fb00e |
}
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
/*******************************************************************************
|
|
Packit Service |
1fb00e |
*
|
|
Packit Service |
1fb00e |
* FUNCTION: AcpiDmDumpMsct
|
|
Packit Service |
1fb00e |
*
|
|
Packit Service |
1fb00e |
* PARAMETERS: Table - A MSCT table
|
|
Packit Service |
1fb00e |
*
|
|
Packit Service |
1fb00e |
* RETURN: None
|
|
Packit Service |
1fb00e |
*
|
|
Packit Service |
1fb00e |
* DESCRIPTION: Format the contents of a MSCT
|
|
Packit Service |
1fb00e |
*
|
|
Packit Service |
1fb00e |
******************************************************************************/
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
void
|
|
Packit Service |
1fb00e |
AcpiDmDumpMsct (
|
|
Packit Service |
1fb00e |
ACPI_TABLE_HEADER *Table)
|
|
Packit Service |
1fb00e |
{
|
|
Packit Service |
1fb00e |
ACPI_STATUS Status;
|
|
Packit Service |
1fb00e |
UINT32 Offset = sizeof (ACPI_TABLE_MSCT);
|
|
Packit Service |
1fb00e |
ACPI_MSCT_PROXIMITY *Subtable;
|
|
Packit Service |
0129ce |
UINT32 Length;
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
/* Main table */
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
0129ce |
ACPI_MOVE_32_TO_32(&Length, &Table->Length);
|
|
Packit Service |
0129ce |
Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoMsct);
|
|
Packit Service |
1fb00e |
if (ACPI_FAILURE (Status))
|
|
Packit Service |
1fb00e |
{
|
|
Packit Service |
1fb00e |
return;
|
|
Packit Service |
1fb00e |
}
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
/* Subtables */
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
Subtable = ACPI_ADD_PTR (ACPI_MSCT_PROXIMITY, Table, Offset);
|
|
Packit Service |
0129ce |
while (Offset < Length)
|
|
Packit Service |
1fb00e |
{
|
|
Packit Service |
1fb00e |
/* Common subtable header */
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
AcpiOsPrintf ("\n");
|
|
Packit Service |
0129ce |
Status = AcpiDmDumpTable (Length, Offset, Subtable,
|
|
Packit Service |
1fb00e |
sizeof (ACPI_MSCT_PROXIMITY), AcpiDmTableInfoMsct0);
|
|
Packit Service |
1fb00e |
if (ACPI_FAILURE (Status))
|
|
Packit Service |
1fb00e |
{
|
|
Packit Service |
1fb00e |
return;
|
|
Packit Service |
1fb00e |
}
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
/* Point to next subtable */
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
Offset += sizeof (ACPI_MSCT_PROXIMITY);
|
|
Packit Service |
1fb00e |
Subtable = ACPI_ADD_PTR (ACPI_MSCT_PROXIMITY, Subtable,
|
|
Packit Service |
1fb00e |
sizeof (ACPI_MSCT_PROXIMITY));
|
|
Packit Service |
1fb00e |
}
|
|
Packit Service |
1fb00e |
}
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
/*******************************************************************************
|
|
Packit Service |
1fb00e |
*
|
|
Packit Service |
1fb00e |
* FUNCTION: AcpiDmDumpMtmr
|
|
Packit Service |
1fb00e |
*
|
|
Packit Service |
1fb00e |
* PARAMETERS: Table - A MTMR table
|
|
Packit Service |
1fb00e |
*
|
|
Packit Service |
1fb00e |
* RETURN: None
|
|
Packit Service |
1fb00e |
*
|
|
Packit Service |
1fb00e |
* DESCRIPTION: Format the contents of a MTMR
|
|
Packit Service |
1fb00e |
*
|
|
Packit Service |
1fb00e |
******************************************************************************/
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
void
|
|
Packit Service |
1fb00e |
AcpiDmDumpMtmr (
|
|
Packit Service |
1fb00e |
ACPI_TABLE_HEADER *Table)
|
|
Packit Service |
1fb00e |
{
|
|
Packit Service |
1fb00e |
ACPI_STATUS Status;
|
|
Packit Service |
1fb00e |
UINT32 Offset = sizeof (ACPI_TABLE_MTMR);
|
|
Packit Service |
1fb00e |
ACPI_MTMR_ENTRY *Subtable;
|
|
Packit Service |
0129ce |
UINT32 Length;
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
/* Main table */
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
0129ce |
ACPI_MOVE_32_TO_32(&Length, &Table->Length);
|
|
Packit Service |
0129ce |
Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoMtmr);
|
|
Packit Service |
1fb00e |
if (ACPI_FAILURE (Status))
|
|
Packit Service |
1fb00e |
{
|
|
Packit Service |
1fb00e |
return;
|
|
Packit Service |
1fb00e |
}
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
/* Subtables */
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
Subtable = ACPI_ADD_PTR (ACPI_MTMR_ENTRY, Table, Offset);
|
|
Packit Service |
0129ce |
while (Offset < Length)
|
|
Packit Service |
1fb00e |
{
|
|
Packit Service |
1fb00e |
/* Common subtable header */
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
AcpiOsPrintf ("\n");
|
|
Packit Service |
0129ce |
Status = AcpiDmDumpTable (Length, Offset, Subtable,
|
|
Packit Service |
1fb00e |
sizeof (ACPI_MTMR_ENTRY), AcpiDmTableInfoMtmr0);
|
|
Packit Service |
1fb00e |
if (ACPI_FAILURE (Status))
|
|
Packit Service |
1fb00e |
{
|
|
Packit Service |
1fb00e |
return;
|
|
Packit Service |
1fb00e |
}
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
/* Point to next subtable */
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
Offset += sizeof (ACPI_MTMR_ENTRY);
|
|
Packit Service |
1fb00e |
Subtable = ACPI_ADD_PTR (ACPI_MTMR_ENTRY, Subtable,
|
|
Packit Service |
1fb00e |
sizeof (ACPI_MTMR_ENTRY));
|
|
Packit Service |
1fb00e |
}
|
|
Packit Service |
1fb00e |
}
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
/*******************************************************************************
|
|
Packit Service |
1fb00e |
*
|
|
Packit Service |
1fb00e |
* FUNCTION: AcpiDmDumpNfit
|
|
Packit Service |
1fb00e |
*
|
|
Packit Service |
1fb00e |
* PARAMETERS: Table - A NFIT table
|
|
Packit Service |
1fb00e |
*
|
|
Packit Service |
1fb00e |
* RETURN: None
|
|
Packit Service |
1fb00e |
*
|
|
Packit Service |
1fb00e |
* DESCRIPTION: Format the contents of an NFIT.
|
|
Packit Service |
1fb00e |
*
|
|
Packit Service |
1fb00e |
******************************************************************************/
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
void
|
|
Packit Service |
1fb00e |
AcpiDmDumpNfit (
|
|
Packit Service |
1fb00e |
ACPI_TABLE_HEADER *Table)
|
|
Packit Service |
1fb00e |
{
|
|
Packit Service |
1fb00e |
ACPI_STATUS Status;
|
|
Packit Service |
1fb00e |
UINT32 Offset = sizeof (ACPI_TABLE_NFIT);
|
|
Packit Service |
1fb00e |
UINT32 FieldOffset = 0;
|
|
Packit Service |
1fb00e |
UINT32 Length;
|
|
Packit Service |
1fb00e |
ACPI_NFIT_HEADER *Subtable;
|
|
Packit Service |
1fb00e |
ACPI_DMTABLE_INFO *InfoTable;
|
|
Packit Service |
1fb00e |
ACPI_NFIT_INTERLEAVE *Interleave = NULL;
|
|
Packit Service |
1fb00e |
ACPI_NFIT_SMBIOS *SmbiosInfo = NULL;
|
|
Packit Service |
1fb00e |
ACPI_NFIT_FLUSH_ADDRESS *Hint = NULL;
|
|
Packit Service |
1fb00e |
UINT32 i;
|
|
Packit Service |
0129ce |
UINT32 TableLength;
|
|
Packit Service |
0129ce |
UINT16 SubLength;
|
|
Packit Service |
0129ce |
UINT16 SubType;
|
|
Packit Service |
0129ce |
UINT32 Count;
|
|
Packit Service |
0129ce |
UINT16 Count16;
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
/* Main table */
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
0129ce |
ACPI_MOVE_32_TO_32(&TableLength, &Table->Length);
|
|
Packit Service |
0129ce |
Status = AcpiDmDumpTable (TableLength, 0, Table, 0, AcpiDmTableInfoNfit);
|
|
Packit Service |
1fb00e |
if (ACPI_FAILURE (Status))
|
|
Packit Service |
1fb00e |
{
|
|
Packit Service |
1fb00e |
return;
|
|
Packit Service |
1fb00e |
}
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
/* Subtables */
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
Subtable = ACPI_ADD_PTR (ACPI_NFIT_HEADER, Table, Offset);
|
|
Packit Service |
0129ce |
while (Offset < TableLength)
|
|
Packit Service |
1fb00e |
{
|
|
Packit Service |
1fb00e |
/* NFIT subtable header */
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
AcpiOsPrintf ("\n");
|
|
Packit Service |
0129ce |
ACPI_MOVE_16_TO_16(&SubLength, &Subtable->Length);
|
|
Packit Service |
0129ce |
Status = AcpiDmDumpTable (TableLength, Offset, Subtable,
|
|
Packit Service |
0129ce |
SubLength, AcpiDmTableInfoNfitHdr);
|
|
Packit Service |
1fb00e |
if (ACPI_FAILURE (Status))
|
|
Packit Service |
1fb00e |
{
|
|
Packit Service |
1fb00e |
return;
|
|
Packit Service |
1fb00e |
}
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
0129ce |
ACPI_MOVE_16_TO_16(&SubType, &Subtable->Type);
|
|
Packit Service |
0129ce |
switch (SubType)
|
|
Packit Service |
1fb00e |
{
|
|
Packit Service |
1fb00e |
case ACPI_NFIT_TYPE_SYSTEM_ADDRESS:
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
InfoTable = AcpiDmTableInfoNfit0;
|
|
Packit Service |
1fb00e |
break;
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
case ACPI_NFIT_TYPE_MEMORY_MAP:
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
InfoTable = AcpiDmTableInfoNfit1;
|
|
Packit Service |
1fb00e |
break;
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
case ACPI_NFIT_TYPE_INTERLEAVE:
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
/* Has a variable number of 32-bit values at the end */
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
InfoTable = AcpiDmTableInfoNfit2;
|
|
Packit Service |
1fb00e |
Interleave = ACPI_CAST_PTR (ACPI_NFIT_INTERLEAVE, Subtable);
|
|
Packit Service |
1fb00e |
FieldOffset = sizeof (ACPI_NFIT_INTERLEAVE);
|
|
Packit Service |
1fb00e |
break;
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
case ACPI_NFIT_TYPE_SMBIOS:
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
SmbiosInfo = ACPI_CAST_PTR (ACPI_NFIT_SMBIOS, Subtable);
|
|
Packit Service |
1fb00e |
InfoTable = AcpiDmTableInfoNfit3;
|
|
Packit Service |
1fb00e |
break;
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
case ACPI_NFIT_TYPE_CONTROL_REGION:
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
InfoTable = AcpiDmTableInfoNfit4;
|
|
Packit Service |
1fb00e |
break;
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
case ACPI_NFIT_TYPE_DATA_REGION:
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
InfoTable = AcpiDmTableInfoNfit5;
|
|
Packit Service |
1fb00e |
break;
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
case ACPI_NFIT_TYPE_FLUSH_ADDRESS:
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
/* Has a variable number of 64-bit addresses at the end */
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
InfoTable = AcpiDmTableInfoNfit6;
|
|
Packit Service |
1fb00e |
Hint = ACPI_CAST_PTR (ACPI_NFIT_FLUSH_ADDRESS, Subtable);
|
|
Packit Service |
1fb00e |
FieldOffset = sizeof (ACPI_NFIT_FLUSH_ADDRESS) - sizeof (UINT64);
|
|
Packit Service |
1fb00e |
break;
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
case ACPI_NFIT_TYPE_CAPABILITIES: /* ACPI 6.0A */
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
InfoTable = AcpiDmTableInfoNfit7;
|
|
Packit Service |
1fb00e |
break;
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
default:
|
|
Packit Service |
1fb00e |
AcpiOsPrintf ("\n**** Unknown NFIT subtable type 0x%X\n",
|
|
Packit Service |
1fb00e |
Subtable->Type);
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
/* Attempt to continue */
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
0129ce |
if (!SubLength)
|
|
Packit Service |
1fb00e |
{
|
|
Packit Service |
1fb00e |
AcpiOsPrintf ("Invalid zero length subtable\n");
|
|
Packit Service |
1fb00e |
return;
|
|
Packit Service |
1fb00e |
}
|
|
Packit Service |
1fb00e |
goto NextSubtable;
|
|
Packit Service |
1fb00e |
}
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
AcpiOsPrintf ("\n");
|
|
Packit Service |
0129ce |
Status = AcpiDmDumpTable (TableLength, Offset, Subtable,
|
|
Packit Service |
0129ce |
SubLength, InfoTable);
|
|
Packit Service |
1fb00e |
if (ACPI_FAILURE (Status))
|
|
Packit Service |
1fb00e |
{
|
|
Packit Service |
1fb00e |
return;
|
|
Packit Service |
1fb00e |
}
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
/* Per-subtable variable-length fields */
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
0129ce |
switch (SubType)
|
|
Packit Service |
1fb00e |
{
|
|
Packit Service |
1fb00e |
case ACPI_NFIT_TYPE_INTERLEAVE:
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
0129ce |
ACPI_MOVE_32_TO_32(&Count, &Interleave->LineCount);
|
|
Packit Service |
0129ce |
for (i = 0; i < Count; i++)
|
|
Packit Service |
1fb00e |
{
|
|
Packit Service |
0129ce |
Status = AcpiDmDumpTable (TableLength, Offset + FieldOffset,
|
|
Packit Service |
1fb00e |
&Interleave->LineOffset[i],
|
|
Packit Service |
1fb00e |
sizeof (UINT32), AcpiDmTableInfoNfit2a);
|
|
Packit Service |
1fb00e |
if (ACPI_FAILURE (Status))
|
|
Packit Service |
1fb00e |
{
|
|
Packit Service |
1fb00e |
return;
|
|
Packit Service |
1fb00e |
}
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
FieldOffset += sizeof (UINT32);
|
|
Packit Service |
1fb00e |
}
|
|
Packit Service |
1fb00e |
break;
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
case ACPI_NFIT_TYPE_SMBIOS:
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
0129ce |
Length = SubLength - sizeof (ACPI_NFIT_SMBIOS) + sizeof (UINT8);
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
if (Length)
|
|
Packit Service |
1fb00e |
{
|
|
Packit Service |
0129ce |
Status = AcpiDmDumpTable (TableLength,
|
|
Packit Service |
1fb00e |
sizeof (ACPI_NFIT_SMBIOS) - sizeof (UINT8),
|
|
Packit Service |
1fb00e |
SmbiosInfo,
|
|
Packit Service |
1fb00e |
Length, AcpiDmTableInfoNfit3a);
|
|
Packit Service |
1fb00e |
if (ACPI_FAILURE (Status))
|
|
Packit Service |
1fb00e |
{
|
|
Packit Service |
1fb00e |
return;
|
|
Packit Service |
1fb00e |
}
|
|
Packit Service |
1fb00e |
}
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
break;
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
case ACPI_NFIT_TYPE_FLUSH_ADDRESS:
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
0129ce |
ACPI_MOVE_16_TO_16(&Count16, &Hint->HintCount);
|
|
Packit Service |
0129ce |
for (i = 0; i < Count16; i++)
|
|
Packit Service |
1fb00e |
{
|
|
Packit Service |
0129ce |
Status = AcpiDmDumpTable (TableLength, Offset + FieldOffset,
|
|
Packit Service |
1fb00e |
&Hint->HintAddress[i],
|
|
Packit Service |
1fb00e |
sizeof (UINT64), AcpiDmTableInfoNfit6a);
|
|
Packit Service |
1fb00e |
if (ACPI_FAILURE (Status))
|
|
Packit Service |
1fb00e |
{
|
|
Packit Service |
1fb00e |
return;
|
|
Packit Service |
1fb00e |
}
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
FieldOffset += sizeof (UINT64);
|
|
Packit Service |
1fb00e |
}
|
|
Packit Service |
1fb00e |
break;
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
default:
|
|
Packit Service |
1fb00e |
break;
|
|
Packit Service |
1fb00e |
}
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
NextSubtable:
|
|
Packit Service |
1fb00e |
/* Point to next subtable */
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
0129ce |
Offset += SubLength;
|
|
Packit Service |
0129ce |
Subtable = ACPI_ADD_PTR (ACPI_NFIT_HEADER, Subtable, SubLength);
|
|
Packit Service |
1fb00e |
}
|
|
Packit Service |
1fb00e |
}
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
/*******************************************************************************
|
|
Packit Service |
1fb00e |
*
|
|
Packit Service |
1fb00e |
* FUNCTION: AcpiDmDumpPcct
|
|
Packit Service |
1fb00e |
*
|
|
Packit Service |
1fb00e |
* PARAMETERS: Table - A PCCT table
|
|
Packit Service |
1fb00e |
*
|
|
Packit Service |
1fb00e |
* RETURN: None
|
|
Packit Service |
1fb00e |
*
|
|
Packit Service |
1fb00e |
* DESCRIPTION: Format the contents of a PCCT. This table type consists
|
|
Packit Service |
1fb00e |
* of an open-ended number of subtables.
|
|
Packit Service |
1fb00e |
*
|
|
Packit Service |
1fb00e |
******************************************************************************/
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
void
|
|
Packit Service |
1fb00e |
AcpiDmDumpPcct (
|
|
Packit Service |
1fb00e |
ACPI_TABLE_HEADER *Table)
|
|
Packit Service |
1fb00e |
{
|
|
Packit Service |
1fb00e |
ACPI_STATUS Status;
|
|
Packit Service |
1fb00e |
ACPI_PCCT_SUBSPACE *Subtable;
|
|
Packit Service |
1fb00e |
ACPI_DMTABLE_INFO *InfoTable;
|
|
Packit Service |
0129ce |
UINT32 Length;
|
|
Packit Service |
1fb00e |
UINT32 Offset = sizeof (ACPI_TABLE_PCCT);
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
/* Main table */
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
0129ce |
ACPI_MOVE_32_TO_32(&Length, &Table->Length);
|
|
Packit Service |
1fb00e |
Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoPcct);
|
|
Packit Service |
1fb00e |
if (ACPI_FAILURE (Status))
|
|
Packit Service |
1fb00e |
{
|
|
Packit Service |
1fb00e |
return;
|
|
Packit Service |
1fb00e |
}
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
/* Subtables */
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
Subtable = ACPI_ADD_PTR (ACPI_PCCT_SUBSPACE, Table, Offset);
|
|
Packit Service |
0129ce |
while (Offset < Length)
|
|
Packit Service |
1fb00e |
{
|
|
Packit Service |
1fb00e |
/* Common subtable header */
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
AcpiOsPrintf ("\n");
|
|
Packit Service |
1fb00e |
Status = AcpiDmDumpTable (Length, Offset, Subtable,
|
|
Packit Service |
1fb00e |
Subtable->Header.Length, AcpiDmTableInfoPcctHdr);
|
|
Packit Service |
1fb00e |
if (ACPI_FAILURE (Status))
|
|
Packit Service |
1fb00e |
{
|
|
Packit Service |
1fb00e |
return;
|
|
Packit Service |
1fb00e |
}
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
switch (Subtable->Header.Type)
|
|
Packit Service |
1fb00e |
{
|
|
Packit Service |
1fb00e |
case ACPI_PCCT_TYPE_GENERIC_SUBSPACE:
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
InfoTable = AcpiDmTableInfoPcct0;
|
|
Packit Service |
1fb00e |
break;
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
case ACPI_PCCT_TYPE_HW_REDUCED_SUBSPACE:
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
InfoTable = AcpiDmTableInfoPcct1;
|
|
Packit Service |
1fb00e |
break;
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
case ACPI_PCCT_TYPE_HW_REDUCED_SUBSPACE_TYPE2:
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
InfoTable = AcpiDmTableInfoPcct2;
|
|
Packit Service |
1fb00e |
break;
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
case ACPI_PCCT_TYPE_EXT_PCC_MASTER_SUBSPACE:
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
InfoTable = AcpiDmTableInfoPcct3;
|
|
Packit Service |
1fb00e |
break;
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
case ACPI_PCCT_TYPE_EXT_PCC_SLAVE_SUBSPACE:
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
InfoTable = AcpiDmTableInfoPcct4;
|
|
Packit Service |
1fb00e |
break;
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
default:
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
AcpiOsPrintf (
|
|
Packit Service |
1fb00e |
"\n**** Unexpected or unknown PCCT subtable type 0x%X\n\n",
|
|
Packit Service |
1fb00e |
Subtable->Header.Type);
|
|
Packit Service |
1fb00e |
return;
|
|
Packit Service |
1fb00e |
}
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
AcpiOsPrintf ("\n");
|
|
Packit Service |
1fb00e |
Status = AcpiDmDumpTable (Length, Offset, Subtable,
|
|
Packit Service |
1fb00e |
Subtable->Header.Length, InfoTable);
|
|
Packit Service |
1fb00e |
if (ACPI_FAILURE (Status))
|
|
Packit Service |
1fb00e |
{
|
|
Packit Service |
1fb00e |
return;
|
|
Packit Service |
1fb00e |
}
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
/* Point to next subtable */
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
Offset += Subtable->Header.Length;
|
|
Packit Service |
1fb00e |
Subtable = ACPI_ADD_PTR (ACPI_PCCT_SUBSPACE, Subtable,
|
|
Packit Service |
1fb00e |
Subtable->Header.Length);
|
|
Packit Service |
1fb00e |
}
|
|
Packit Service |
1fb00e |
}
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
/*******************************************************************************
|
|
Packit Service |
1fb00e |
*
|
|
Packit Service |
1fb00e |
* FUNCTION: AcpiDmDumpPdtt
|
|
Packit Service |
1fb00e |
*
|
|
Packit Service |
1fb00e |
* PARAMETERS: Table - A PDTT table
|
|
Packit Service |
1fb00e |
*
|
|
Packit Service |
1fb00e |
* RETURN: None
|
|
Packit Service |
1fb00e |
*
|
|
Packit Service |
1fb00e |
* DESCRIPTION: Format the contents of a Pdtt. This is a variable-length
|
|
Packit Service |
1fb00e |
* table that contains an open-ended number of IDs
|
|
Packit Service |
1fb00e |
* at the end of the table.
|
|
Packit Service |
1fb00e |
*
|
|
Packit Service |
1fb00e |
******************************************************************************/
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
void
|
|
Packit Service |
1fb00e |
AcpiDmDumpPdtt (
|
|
Packit Service |
1fb00e |
ACPI_TABLE_HEADER *Table)
|
|
Packit Service |
1fb00e |
{
|
|
Packit Service |
1fb00e |
ACPI_STATUS Status;
|
|
Packit Service |
1fb00e |
ACPI_PDTT_CHANNEL *Subtable;
|
|
Packit Service |
1fb00e |
UINT32 Length = Table->Length;
|
|
Packit Service |
1fb00e |
UINT32 Offset = sizeof (ACPI_TABLE_PDTT);
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
/* Main table */
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoPdtt);
|
|
Packit Service |
1fb00e |
if (ACPI_FAILURE (Status))
|
|
Packit Service |
1fb00e |
{
|
|
Packit Service |
1fb00e |
return;
|
|
Packit Service |
1fb00e |
}
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
/* Subtables. Currently there is only one type, but can be multiples */
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
Subtable = ACPI_ADD_PTR (ACPI_PDTT_CHANNEL, Table, Offset);
|
|
Packit Service |
1fb00e |
while (Offset < Table->Length)
|
|
Packit Service |
1fb00e |
{
|
|
Packit Service |
1fb00e |
AcpiOsPrintf ("\n");
|
|
Packit Service |
1fb00e |
Status = AcpiDmDumpTable (Length, Offset, Subtable,
|
|
Packit Service |
1fb00e |
sizeof (ACPI_PDTT_CHANNEL), AcpiDmTableInfoPdtt0);
|
|
Packit Service |
1fb00e |
if (ACPI_FAILURE (Status))
|
|
Packit Service |
1fb00e |
{
|
|
Packit Service |
1fb00e |
return;
|
|
Packit Service |
1fb00e |
}
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
/* Point to next subtable */
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
Offset += sizeof (ACPI_PDTT_CHANNEL);
|
|
Packit Service |
1fb00e |
Subtable = ACPI_ADD_PTR (ACPI_PDTT_CHANNEL, Subtable,
|
|
Packit Service |
1fb00e |
sizeof (ACPI_PDTT_CHANNEL));
|
|
Packit Service |
1fb00e |
}
|
|
Packit Service |
1fb00e |
}
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
/*******************************************************************************
|
|
Packit Service |
1fb00e |
*
|
|
Packit Service |
1fb00e |
* FUNCTION: AcpiDmDumpPmtt
|
|
Packit Service |
1fb00e |
*
|
|
Packit Service |
1fb00e |
* PARAMETERS: Table - A PMTT table
|
|
Packit Service |
1fb00e |
*
|
|
Packit Service |
1fb00e |
* RETURN: None
|
|
Packit Service |
1fb00e |
*
|
|
Packit Service |
1fb00e |
* DESCRIPTION: Format the contents of a PMTT. This table type consists
|
|
Packit Service |
1fb00e |
* of an open-ended number of subtables.
|
|
Packit Service |
1fb00e |
*
|
|
Packit Service |
1fb00e |
******************************************************************************/
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
void
|
|
Packit Service |
1fb00e |
AcpiDmDumpPmtt (
|
|
Packit Service |
1fb00e |
ACPI_TABLE_HEADER *Table)
|
|
Packit Service |
1fb00e |
{
|
|
Packit Service |
1fb00e |
ACPI_STATUS Status;
|
|
Packit Service |
1fb00e |
ACPI_PMTT_HEADER *Subtable;
|
|
Packit Service |
1fb00e |
ACPI_PMTT_HEADER *MemSubtable;
|
|
Packit Service |
1fb00e |
ACPI_PMTT_HEADER *DimmSubtable;
|
|
Packit Service |
1fb00e |
ACPI_PMTT_DOMAIN *DomainArray;
|
|
Packit Service |
0129ce |
UINT32 Length;
|
|
Packit Service |
1fb00e |
UINT32 Offset = sizeof (ACPI_TABLE_PMTT);
|
|
Packit Service |
1fb00e |
UINT32 MemOffset;
|
|
Packit Service |
1fb00e |
UINT32 DimmOffset;
|
|
Packit Service |
1fb00e |
UINT32 DomainOffset;
|
|
Packit Service |
0129ce |
UINT16 DomainCount;
|
|
Packit Service |
0129ce |
UINT16 SubLength;
|
|
Packit Service |
0129ce |
UINT16 Tmp16;
|
|
Packit Service |
0129ce |
UINT16 MemLength;
|
|
Packit Service |
0129ce |
UINT16 DimmLength;
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
/* Main table */
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
0129ce |
ACPI_MOVE_32_TO_32(&Length, &Table->Length);
|
|
Packit Service |
1fb00e |
Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoPmtt);
|
|
Packit Service |
1fb00e |
if (ACPI_FAILURE (Status))
|
|
Packit Service |
1fb00e |
{
|
|
Packit Service |
1fb00e |
return;
|
|
Packit Service |
1fb00e |
}
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
/* Subtables */
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
Subtable = ACPI_ADD_PTR (ACPI_PMTT_HEADER, Table, Offset);
|
|
Packit Service |
0129ce |
while (Offset < Length)
|
|
Packit Service |
1fb00e |
{
|
|
Packit Service |
1fb00e |
/* Common subtable header */
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
AcpiOsPrintf ("\n");
|
|
Packit Service |
0129ce |
ACPI_MOVE_16_TO_16(&SubLength, &Subtable->Length);
|
|
Packit Service |
1fb00e |
Status = AcpiDmDumpTable (Length, Offset, Subtable,
|
|
Packit Service |
0129ce |
SubLength, AcpiDmTableInfoPmttHdr);
|
|
Packit Service |
1fb00e |
if (ACPI_FAILURE (Status))
|
|
Packit Service |
1fb00e |
{
|
|
Packit Service |
1fb00e |
return;
|
|
Packit Service |
1fb00e |
}
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
/* Only Socket subtables are expected at this level */
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
if (Subtable->Type != ACPI_PMTT_TYPE_SOCKET)
|
|
Packit Service |
1fb00e |
{
|
|
Packit Service |
1fb00e |
AcpiOsPrintf (
|
|
Packit Service |
1fb00e |
"\n**** Unexpected or unknown PMTT subtable type 0x%X\n\n",
|
|
Packit Service |
1fb00e |
Subtable->Type);
|
|
Packit Service |
1fb00e |
return;
|
|
Packit Service |
1fb00e |
}
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
/* Dump the fixed-length portion of the subtable */
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
Status = AcpiDmDumpTable (Length, Offset, Subtable,
|
|
Packit Service |
0129ce |
SubLength, AcpiDmTableInfoPmtt0);
|
|
Packit Service |
1fb00e |
if (ACPI_FAILURE (Status))
|
|
Packit Service |
1fb00e |
{
|
|
Packit Service |
1fb00e |
return;
|
|
Packit Service |
1fb00e |
}
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
/* Walk the memory controller subtables */
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
MemOffset = sizeof (ACPI_PMTT_SOCKET);
|
|
Packit Service |
1fb00e |
MemSubtable = ACPI_ADD_PTR (ACPI_PMTT_HEADER, Subtable,
|
|
Packit Service |
1fb00e |
sizeof (ACPI_PMTT_SOCKET));
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
0129ce |
while (((Offset + MemOffset) < Length) &&
|
|
Packit Service |
0129ce |
(MemOffset < SubLength))
|
|
Packit Service |
1fb00e |
{
|
|
Packit Service |
1fb00e |
/* Common subtable header */
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
AcpiOsPrintf ("\n");
|
|
Packit Service |
0129ce |
ACPI_MOVE_16_TO_16(&MemLength, &MemSubtable->Length);
|
|
Packit Service |
1fb00e |
Status = AcpiDmDumpTable (Length,
|
|
Packit Service |
1fb00e |
Offset + MemOffset, MemSubtable,
|
|
Packit Service |
0129ce |
MemLength, AcpiDmTableInfoPmttHdr);
|
|
Packit Service |
1fb00e |
if (ACPI_FAILURE (Status))
|
|
Packit Service |
1fb00e |
{
|
|
Packit Service |
1fb00e |
return;
|
|
Packit Service |
1fb00e |
}
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
/* Only memory controller subtables are expected at this level */
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
if (MemSubtable->Type != ACPI_PMTT_TYPE_CONTROLLER)
|
|
Packit Service |
1fb00e |
{
|
|
Packit Service |
1fb00e |
AcpiOsPrintf (
|
|
Packit Service |
1fb00e |
"\n**** Unexpected or unknown PMTT subtable type 0x%X\n\n",
|
|
Packit Service |
1fb00e |
MemSubtable->Type);
|
|
Packit Service |
1fb00e |
return;
|
|
Packit Service |
1fb00e |
}
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
/* Dump the fixed-length portion of the controller subtable */
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
Status = AcpiDmDumpTable (Length,
|
|
Packit Service |
1fb00e |
Offset + MemOffset, MemSubtable,
|
|
Packit Service |
0129ce |
MemLength, AcpiDmTableInfoPmtt1);
|
|
Packit Service |
1fb00e |
if (ACPI_FAILURE (Status))
|
|
Packit Service |
1fb00e |
{
|
|
Packit Service |
1fb00e |
return;
|
|
Packit Service |
1fb00e |
}
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
/* Walk the variable count of proximity domains */
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
0129ce |
Tmp16 = ((ACPI_PMTT_CONTROLLER *) MemSubtable)->DomainCount;
|
|
Packit Service |
0129ce |
ACPI_MOVE_16_TO_16(&DomainCount, &Tmp16);
|
|
Packit Service |
1fb00e |
DomainOffset = sizeof (ACPI_PMTT_CONTROLLER);
|
|
Packit Service |
1fb00e |
DomainArray = ACPI_ADD_PTR (ACPI_PMTT_DOMAIN, MemSubtable,
|
|
Packit Service |
1fb00e |
sizeof (ACPI_PMTT_CONTROLLER));
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
0129ce |
while (((Offset + MemOffset + DomainOffset) < Length) &&
|
|
Packit Service |
0129ce |
((MemOffset + DomainOffset) < SubLength) &&
|
|
Packit Service |
1fb00e |
DomainCount)
|
|
Packit Service |
1fb00e |
{
|
|
Packit Service |
1fb00e |
Status = AcpiDmDumpTable (Length,
|
|
Packit Service |
1fb00e |
Offset + MemOffset + DomainOffset, DomainArray,
|
|
Packit Service |
1fb00e |
sizeof (ACPI_PMTT_DOMAIN), AcpiDmTableInfoPmtt1a);
|
|
Packit Service |
1fb00e |
if (ACPI_FAILURE (Status))
|
|
Packit Service |
1fb00e |
{
|
|
Packit Service |
1fb00e |
return;
|
|
Packit Service |
1fb00e |
}
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
DomainOffset += sizeof (ACPI_PMTT_DOMAIN);
|
|
Packit Service |
1fb00e |
DomainArray++;
|
|
Packit Service |
1fb00e |
DomainCount--;
|
|
Packit Service |
1fb00e |
}
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
if (DomainCount)
|
|
Packit Service |
1fb00e |
{
|
|
Packit Service |
1fb00e |
AcpiOsPrintf (
|
|
Packit Service |
1fb00e |
"\n**** DomainCount exceeds subtable length\n\n");
|
|
Packit Service |
1fb00e |
}
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
/* Walk the physical component (DIMM) subtables */
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
DimmOffset = DomainOffset;
|
|
Packit Service |
1fb00e |
DimmSubtable = ACPI_ADD_PTR (ACPI_PMTT_HEADER, MemSubtable,
|
|
Packit Service |
1fb00e |
DomainOffset);
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
0129ce |
while (((Offset + MemOffset + DimmOffset) < Length) &&
|
|
Packit Service |
0129ce |
(DimmOffset < MemLength))
|
|
Packit Service |
1fb00e |
{
|
|
Packit Service |
1fb00e |
/* Common subtable header */
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
AcpiOsPrintf ("\n");
|
|
Packit Service |
0129ce |
ACPI_MOVE_16_TO_16(&DimmLength, &DimmSubtable->Length);
|
|
Packit Service |
1fb00e |
Status = AcpiDmDumpTable (Length,
|
|
Packit Service |
1fb00e |
Offset + MemOffset + DimmOffset, DimmSubtable,
|
|
Packit Service |
0129ce |
DimmLength, AcpiDmTableInfoPmttHdr);
|
|
Packit Service |
1fb00e |
if (ACPI_FAILURE (Status))
|
|
Packit Service |
1fb00e |
{
|
|
Packit Service |
1fb00e |
return;
|
|
Packit Service |
1fb00e |
}
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
/* Only DIMM subtables are expected at this level */
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
if (DimmSubtable->Type != ACPI_PMTT_TYPE_DIMM)
|
|
Packit Service |
1fb00e |
{
|
|
Packit Service |
1fb00e |
AcpiOsPrintf (
|
|
Packit Service |
1fb00e |
"\n**** Unexpected or unknown PMTT subtable type 0x%X\n\n",
|
|
Packit Service |
1fb00e |
DimmSubtable->Type);
|
|
Packit Service |
1fb00e |
return;
|
|
Packit Service |
1fb00e |
}
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
/* Dump the fixed-length DIMM subtable */
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
Status = AcpiDmDumpTable (Length,
|
|
Packit Service |
1fb00e |
Offset + MemOffset + DimmOffset, DimmSubtable,
|
|
Packit Service |
0129ce |
DimmLength, AcpiDmTableInfoPmtt2);
|
|
Packit Service |
1fb00e |
if (ACPI_FAILURE (Status))
|
|
Packit Service |
1fb00e |
{
|
|
Packit Service |
1fb00e |
return;
|
|
Packit Service |
1fb00e |
}
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
/* Point to next DIMM subtable */
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
0129ce |
DimmOffset += DimmLength;
|
|
Packit Service |
1fb00e |
DimmSubtable = ACPI_ADD_PTR (ACPI_PMTT_HEADER,
|
|
Packit Service |
0129ce |
DimmSubtable, DimmLength);
|
|
Packit Service |
1fb00e |
}
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
/* Point to next Controller subtable */
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
0129ce |
MemOffset += MemLength;
|
|
Packit Service |
1fb00e |
MemSubtable = ACPI_ADD_PTR (ACPI_PMTT_HEADER,
|
|
Packit Service |
0129ce |
MemSubtable, MemLength);
|
|
Packit Service |
1fb00e |
}
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
/* Point to next Socket subtable */
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
0129ce |
Offset += SubLength;
|
|
Packit Service |
0129ce |
Subtable = ACPI_ADD_PTR (ACPI_PMTT_HEADER, Subtable, SubLength);
|
|
Packit Service |
1fb00e |
}
|
|
Packit Service |
1fb00e |
}
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
/*******************************************************************************
|
|
Packit Service |
1fb00e |
*
|
|
Packit Service |
1fb00e |
* FUNCTION: AcpiDmDumpPptt
|
|
Packit Service |
1fb00e |
*
|
|
Packit Service |
1fb00e |
* PARAMETERS: Table - A PMTT table
|
|
Packit Service |
1fb00e |
*
|
|
Packit Service |
1fb00e |
* RETURN: None
|
|
Packit Service |
1fb00e |
*
|
|
Packit Service |
1fb00e |
* DESCRIPTION: Format the contents of a PPTT. This table type consists
|
|
Packit Service |
1fb00e |
* of an open-ended number of subtables.
|
|
Packit Service |
1fb00e |
*
|
|
Packit Service |
1fb00e |
******************************************************************************/
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
void
|
|
Packit Service |
1fb00e |
AcpiDmDumpPptt (
|
|
Packit Service |
1fb00e |
ACPI_TABLE_HEADER *Table)
|
|
Packit Service |
1fb00e |
{
|
|
Packit Service |
1fb00e |
ACPI_STATUS Status;
|
|
Packit Service |
1fb00e |
ACPI_SUBTABLE_HEADER *Subtable;
|
|
Packit Service |
1fb00e |
ACPI_PPTT_PROCESSOR *PpttProcessor;
|
|
Packit Service |
1fb00e |
UINT8 Length;
|
|
Packit Service |
1fb00e |
UINT8 SubtableOffset;
|
|
Packit Service |
1fb00e |
UINT32 Offset = sizeof (ACPI_TABLE_FPDT);
|
|
Packit Service |
1fb00e |
ACPI_DMTABLE_INFO *InfoTable;
|
|
Packit Service |
1fb00e |
UINT32 i;
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
/* There is no main table (other than the standard ACPI header) */
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
/* Subtables */
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
Offset = sizeof (ACPI_TABLE_HEADER);
|
|
Packit Service |
1fb00e |
while (Offset < Table->Length)
|
|
Packit Service |
1fb00e |
{
|
|
Packit Service |
1fb00e |
AcpiOsPrintf ("\n");
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
/* Common subtable header */
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
Subtable = ACPI_ADD_PTR (ACPI_SUBTABLE_HEADER, Table, Offset);
|
|
Packit Service |
1fb00e |
if (Subtable->Length < sizeof (ACPI_SUBTABLE_HEADER))
|
|
Packit Service |
1fb00e |
{
|
|
Packit Service |
1fb00e |
AcpiOsPrintf ("Invalid subtable length\n");
|
|
Packit Service |
1fb00e |
return;
|
|
Packit Service |
1fb00e |
}
|
|
Packit Service |
1fb00e |
Status = AcpiDmDumpTable (Table->Length, Offset, Subtable,
|
|
Packit Service |
1fb00e |
Subtable->Length, AcpiDmTableInfoPpttHdr);
|
|
Packit Service |
1fb00e |
if (ACPI_FAILURE (Status))
|
|
Packit Service |
1fb00e |
{
|
|
Packit Service |
1fb00e |
return;
|
|
Packit Service |
1fb00e |
}
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
switch (Subtable->Type)
|
|
Packit Service |
1fb00e |
{
|
|
Packit Service |
1fb00e |
case ACPI_PPTT_TYPE_PROCESSOR:
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
InfoTable = AcpiDmTableInfoPptt0;
|
|
Packit Service |
1fb00e |
Length = sizeof (ACPI_PPTT_PROCESSOR);
|
|
Packit Service |
1fb00e |
break;
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
case ACPI_PPTT_TYPE_CACHE:
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
InfoTable = AcpiDmTableInfoPptt1;
|
|
Packit Service |
1fb00e |
Length = sizeof (ACPI_PPTT_CACHE);
|
|
Packit Service |
1fb00e |
break;
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
case ACPI_PPTT_TYPE_ID:
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
InfoTable = AcpiDmTableInfoPptt2;
|
|
Packit Service |
1fb00e |
Length = sizeof (ACPI_PPTT_ID);
|
|
Packit Service |
1fb00e |
break;
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
default:
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
AcpiOsPrintf ("\n**** Unknown PPTT subtable type 0x%X\n\n",
|
|
Packit Service |
1fb00e |
Subtable->Type);
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
/* Attempt to continue */
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
goto NextSubtable;
|
|
Packit Service |
1fb00e |
}
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
if (Subtable->Length < Length)
|
|
Packit Service |
1fb00e |
{
|
|
Packit Service |
1fb00e |
AcpiOsPrintf ("Invalid subtable length\n");
|
|
Packit Service |
1fb00e |
return;
|
|
Packit Service |
1fb00e |
}
|
|
Packit Service |
1fb00e |
Status = AcpiDmDumpTable (Table->Length, Offset, Subtable,
|
|
Packit Service |
1fb00e |
Subtable->Length, InfoTable);
|
|
Packit Service |
1fb00e |
if (ACPI_FAILURE (Status))
|
|
Packit Service |
1fb00e |
{
|
|
Packit Service |
1fb00e |
return;
|
|
Packit Service |
1fb00e |
}
|
|
Packit Service |
1fb00e |
SubtableOffset = Length;
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
switch (Subtable->Type)
|
|
Packit Service |
1fb00e |
{
|
|
Packit Service |
1fb00e |
case ACPI_PPTT_TYPE_PROCESSOR:
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
PpttProcessor = ACPI_CAST_PTR (ACPI_PPTT_PROCESSOR, Subtable);
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
/* Dump SMBIOS handles */
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
if ((UINT8)(Subtable->Length - SubtableOffset) <
|
|
Packit Service |
1fb00e |
(UINT8)(PpttProcessor->NumberOfPrivResources * 4))
|
|
Packit Service |
1fb00e |
{
|
|
Packit Service |
1fb00e |
AcpiOsPrintf ("Invalid private resource number\n");
|
|
Packit Service |
1fb00e |
return;
|
|
Packit Service |
1fb00e |
}
|
|
Packit Service |
1fb00e |
for (i = 0; i < PpttProcessor->NumberOfPrivResources; i++)
|
|
Packit Service |
1fb00e |
{
|
|
Packit Service |
1fb00e |
Status = AcpiDmDumpTable (Table->Length, Offset + SubtableOffset,
|
|
Packit Service |
1fb00e |
ACPI_ADD_PTR (ACPI_SUBTABLE_HEADER, Subtable, SubtableOffset),
|
|
Packit Service |
1fb00e |
4, AcpiDmTableInfoPptt0a);
|
|
Packit Service |
1fb00e |
SubtableOffset += 4;
|
|
Packit Service |
1fb00e |
}
|
|
Packit Service |
1fb00e |
break;
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
default:
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
break;
|
|
Packit Service |
1fb00e |
}
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
NextSubtable:
|
|
Packit Service |
1fb00e |
/* Point to next subtable */
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
Offset += Subtable->Length;
|
|
Packit Service |
1fb00e |
}
|
|
Packit Service |
1fb00e |
}
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
/*******************************************************************************
|
|
Packit Service |
1fb00e |
*
|
|
Packit Service |
1fb00e |
* FUNCTION: AcpiDmDumpS3pt
|
|
Packit Service |
1fb00e |
*
|
|
Packit Service |
1fb00e |
* PARAMETERS: Table - A S3PT table
|
|
Packit Service |
1fb00e |
*
|
|
Packit Service |
1fb00e |
* RETURN: Length of the table
|
|
Packit Service |
1fb00e |
*
|
|
Packit Service |
1fb00e |
* DESCRIPTION: Format the contents of a S3PT
|
|
Packit Service |
1fb00e |
*
|
|
Packit Service |
1fb00e |
******************************************************************************/
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
UINT32
|
|
Packit Service |
1fb00e |
AcpiDmDumpS3pt (
|
|
Packit Service |
1fb00e |
ACPI_TABLE_HEADER *Tables)
|
|
Packit Service |
1fb00e |
{
|
|
Packit Service |
1fb00e |
ACPI_STATUS Status;
|
|
Packit Service |
1fb00e |
UINT32 Offset = sizeof (ACPI_TABLE_S3PT);
|
|
Packit Service |
1fb00e |
ACPI_FPDT_HEADER *Subtable;
|
|
Packit Service |
1fb00e |
ACPI_DMTABLE_INFO *InfoTable;
|
|
Packit Service |
1fb00e |
ACPI_TABLE_S3PT *S3ptTable = ACPI_CAST_PTR (ACPI_TABLE_S3PT, Tables);
|
|
Packit Service |
0129ce |
UINT32 Length;
|
|
Packit Service |
0129ce |
UINT16 SubType;
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
/* Main table */
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
Status = AcpiDmDumpTable (Offset, 0, S3ptTable, 0, AcpiDmTableInfoS3pt);
|
|
Packit Service |
1fb00e |
if (ACPI_FAILURE (Status))
|
|
Packit Service |
1fb00e |
{
|
|
Packit Service |
1fb00e |
return 0;
|
|
Packit Service |
1fb00e |
}
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
0129ce |
ACPI_MOVE_32_TO_32(&Length, &S3ptTable->Length);
|
|
Packit Service |
1fb00e |
Subtable = ACPI_ADD_PTR (ACPI_FPDT_HEADER, S3ptTable, Offset);
|
|
Packit Service |
0129ce |
while (Offset < Length)
|
|
Packit Service |
1fb00e |
{
|
|
Packit Service |
1fb00e |
/* Common subtable header */
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
AcpiOsPrintf ("\n");
|
|
Packit Service |
0129ce |
Status = AcpiDmDumpTable (Length, Offset, Subtable,
|
|
Packit Service |
1fb00e |
Subtable->Length, AcpiDmTableInfoS3ptHdr);
|
|
Packit Service |
1fb00e |
if (ACPI_FAILURE (Status))
|
|
Packit Service |
1fb00e |
{
|
|
Packit Service |
1fb00e |
return 0;
|
|
Packit Service |
1fb00e |
}
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
0129ce |
ACPI_MOVE_16_TO_16(&SubType, &Subtable->Type);
|
|
Packit Service |
0129ce |
switch (SubType)
|
|
Packit Service |
1fb00e |
{
|
|
Packit Service |
1fb00e |
case ACPI_S3PT_TYPE_RESUME:
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
InfoTable = AcpiDmTableInfoS3pt0;
|
|
Packit Service |
1fb00e |
break;
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
case ACPI_S3PT_TYPE_SUSPEND:
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
InfoTable = AcpiDmTableInfoS3pt1;
|
|
Packit Service |
1fb00e |
break;
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
default:
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
AcpiOsPrintf ("\n**** Unknown S3PT subtable type 0x%X\n",
|
|
Packit Service |
0129ce |
SubType);
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
/* Attempt to continue */
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
if (!Subtable->Length)
|
|
Packit Service |
1fb00e |
{
|
|
Packit Service |
1fb00e |
AcpiOsPrintf ("Invalid zero length subtable\n");
|
|
Packit Service |
1fb00e |
return 0;
|
|
Packit Service |
1fb00e |
}
|
|
Packit Service |
1fb00e |
goto NextSubtable;
|
|
Packit Service |
1fb00e |
}
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
AcpiOsPrintf ("\n");
|
|
Packit Service |
0129ce |
Status = AcpiDmDumpTable (Length, Offset, Subtable,
|
|
Packit Service |
1fb00e |
Subtable->Length, InfoTable);
|
|
Packit Service |
1fb00e |
if (ACPI_FAILURE (Status))
|
|
Packit Service |
1fb00e |
{
|
|
Packit Service |
1fb00e |
return 0;
|
|
Packit Service |
1fb00e |
}
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
NextSubtable:
|
|
Packit Service |
1fb00e |
/* Point to next subtable */
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
Offset += Subtable->Length;
|
|
Packit Service |
1fb00e |
Subtable = ACPI_ADD_PTR (ACPI_FPDT_HEADER, Subtable, Subtable->Length);
|
|
Packit Service |
1fb00e |
}
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
return (S3ptTable->Length);
|
|
Packit Service |
1fb00e |
}
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
/*******************************************************************************
|
|
Packit Service |
1fb00e |
*
|
|
Packit Service |
1fb00e |
* FUNCTION: AcpiDmDumpSdev
|
|
Packit Service |
1fb00e |
*
|
|
Packit Service |
1fb00e |
* PARAMETERS: Table - A SDEV table
|
|
Packit Service |
1fb00e |
*
|
|
Packit Service |
1fb00e |
* RETURN: None
|
|
Packit Service |
1fb00e |
*
|
|
Packit Service |
1fb00e |
* DESCRIPTION: Format the contents of a SDEV. This is a variable-length
|
|
Packit Service |
1fb00e |
* table that contains variable strings and vendor data.
|
|
Packit Service |
1fb00e |
*
|
|
Packit Service |
1fb00e |
******************************************************************************/
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
void
|
|
Packit Service |
1fb00e |
AcpiDmDumpSdev (
|
|
Packit Service |
1fb00e |
ACPI_TABLE_HEADER *Table)
|
|
Packit Service |
1fb00e |
{
|
|
Packit Service |
1fb00e |
ACPI_STATUS Status;
|
|
Packit Service |
1fb00e |
ACPI_SDEV_HEADER *Subtable;
|
|
Packit Service |
1fb00e |
ACPI_SDEV_PCIE *Pcie;
|
|
Packit Service |
1fb00e |
ACPI_SDEV_NAMESPACE *Namesp;
|
|
Packit Service |
1fb00e |
ACPI_DMTABLE_INFO *InfoTable;
|
|
Packit Service |
1fb00e |
UINT32 Length = Table->Length;
|
|
Packit Service |
1fb00e |
UINT32 Offset = sizeof (ACPI_TABLE_SDEV);
|
|
Packit Service |
1fb00e |
UINT16 PathOffset;
|
|
Packit Service |
1fb00e |
UINT16 PathLength;
|
|
Packit Service |
1fb00e |
UINT16 VendorDataOffset;
|
|
Packit Service |
1fb00e |
UINT16 VendorDataLength;
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
/* Main table */
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoSdev);
|
|
Packit Service |
1fb00e |
if (ACPI_FAILURE (Status))
|
|
Packit Service |
1fb00e |
{
|
|
Packit Service |
1fb00e |
return;
|
|
Packit Service |
1fb00e |
}
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
/* Subtables */
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
Subtable = ACPI_ADD_PTR (ACPI_SDEV_HEADER, Table, Offset);
|
|
Packit Service |
1fb00e |
while (Offset < Table->Length)
|
|
Packit Service |
1fb00e |
{
|
|
Packit Service |
1fb00e |
/* Common subtable header */
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
AcpiOsPrintf ("\n");
|
|
Packit Service |
1fb00e |
Status = AcpiDmDumpTable (Table->Length, Offset, Subtable,
|
|
Packit Service |
1fb00e |
Subtable->Length, AcpiDmTableInfoSdevHdr);
|
|
Packit Service |
1fb00e |
if (ACPI_FAILURE (Status))
|
|
Packit Service |
1fb00e |
{
|
|
Packit Service |
1fb00e |
return;
|
|
Packit Service |
1fb00e |
}
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
switch (Subtable->Type)
|
|
Packit Service |
1fb00e |
{
|
|
Packit Service |
1fb00e |
case ACPI_SDEV_TYPE_NAMESPACE_DEVICE:
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
InfoTable = AcpiDmTableInfoSdev0;
|
|
Packit Service |
1fb00e |
break;
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
case ACPI_SDEV_TYPE_PCIE_ENDPOINT_DEVICE:
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
InfoTable = AcpiDmTableInfoSdev1;
|
|
Packit Service |
1fb00e |
break;
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
default:
|
|
Packit Service |
1fb00e |
goto NextSubtable;
|
|
Packit Service |
1fb00e |
}
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
AcpiOsPrintf ("\n");
|
|
Packit Service |
1fb00e |
Status = AcpiDmDumpTable (Table->Length, Offset, Subtable,
|
|
Packit Service |
1fb00e |
Subtable->Length, InfoTable);
|
|
Packit Service |
1fb00e |
if (ACPI_FAILURE (Status))
|
|
Packit Service |
1fb00e |
{
|
|
Packit Service |
1fb00e |
return;
|
|
Packit Service |
1fb00e |
}
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
switch (Subtable->Type)
|
|
Packit Service |
1fb00e |
{
|
|
Packit Service |
1fb00e |
case ACPI_SDEV_TYPE_NAMESPACE_DEVICE:
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
/* Dump the PCIe device ID(s) */
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
Namesp = ACPI_CAST_PTR (ACPI_SDEV_NAMESPACE, Subtable);
|
|
Packit Service |
1fb00e |
PathOffset = Namesp->DeviceIdOffset;
|
|
Packit Service |
1fb00e |
PathLength = Namesp->DeviceIdLength;
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
if (PathLength)
|
|
Packit Service |
1fb00e |
{
|
|
Packit Service |
1fb00e |
Status = AcpiDmDumpTable (Table->Length, 0,
|
|
Packit Service |
1fb00e |
ACPI_ADD_PTR (UINT8, Namesp, PathOffset),
|
|
Packit Service |
1fb00e |
PathLength, AcpiDmTableInfoSdev0a);
|
|
Packit Service |
1fb00e |
if (ACPI_FAILURE (Status))
|
|
Packit Service |
1fb00e |
{
|
|
Packit Service |
1fb00e |
return;
|
|
Packit Service |
1fb00e |
}
|
|
Packit Service |
1fb00e |
}
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
/* Dump the vendor-specific data */
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
VendorDataLength =
|
|
Packit Service |
1fb00e |
Namesp->VendorDataLength;
|
|
Packit Service |
1fb00e |
VendorDataOffset =
|
|
Packit Service |
1fb00e |
Namesp->DeviceIdOffset + Namesp->DeviceIdLength;
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
if (VendorDataLength)
|
|
Packit Service |
1fb00e |
{
|
|
Packit Service |
1fb00e |
Status = AcpiDmDumpTable (Table->Length, 0,
|
|
Packit Service |
1fb00e |
ACPI_ADD_PTR (UINT8, Namesp, VendorDataOffset),
|
|
Packit Service |
1fb00e |
VendorDataLength, AcpiDmTableInfoSdev1b);
|
|
Packit Service |
1fb00e |
if (ACPI_FAILURE (Status))
|
|
Packit Service |
1fb00e |
{
|
|
Packit Service |
1fb00e |
return;
|
|
Packit Service |
1fb00e |
}
|
|
Packit Service |
1fb00e |
}
|
|
Packit Service |
1fb00e |
break;
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
case ACPI_SDEV_TYPE_PCIE_ENDPOINT_DEVICE:
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
/* PCI path substructures */
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
Pcie = ACPI_CAST_PTR (ACPI_SDEV_PCIE, Subtable);
|
|
Packit Service |
1fb00e |
PathOffset = Pcie->PathOffset;
|
|
Packit Service |
1fb00e |
PathLength = Pcie->PathLength;
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
while (PathLength)
|
|
Packit Service |
1fb00e |
{
|
|
Packit Service |
1fb00e |
Status = AcpiDmDumpTable (Table->Length,
|
|
Packit Service |
1fb00e |
PathOffset + Offset,
|
|
Packit Service |
1fb00e |
ACPI_ADD_PTR (UINT8, Pcie, PathOffset),
|
|
Packit Service |
1fb00e |
sizeof (ACPI_SDEV_PCIE_PATH), AcpiDmTableInfoSdev1a);
|
|
Packit Service |
1fb00e |
if (ACPI_FAILURE (Status))
|
|
Packit Service |
1fb00e |
{
|
|
Packit Service |
1fb00e |
return;
|
|
Packit Service |
1fb00e |
}
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
PathOffset += sizeof (ACPI_SDEV_PCIE_PATH);
|
|
Packit Service |
1fb00e |
PathLength -= sizeof (ACPI_SDEV_PCIE_PATH);
|
|
Packit Service |
1fb00e |
}
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
/* VendorData */
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
VendorDataLength = Pcie->VendorDataLength;
|
|
Packit Service |
1fb00e |
VendorDataOffset = Pcie->PathOffset + Pcie->PathLength;
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
if (VendorDataLength)
|
|
Packit Service |
1fb00e |
{
|
|
Packit Service |
1fb00e |
Status = AcpiDmDumpTable (Table->Length, 0,
|
|
Packit Service |
1fb00e |
ACPI_ADD_PTR (UINT8, Pcie, VendorDataOffset),
|
|
Packit Service |
1fb00e |
VendorDataLength, AcpiDmTableInfoSdev1b);
|
|
Packit Service |
1fb00e |
}
|
|
Packit Service |
1fb00e |
break;
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
default:
|
|
Packit Service |
1fb00e |
goto NextSubtable;
|
|
Packit Service |
1fb00e |
}
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
NextSubtable:
|
|
Packit Service |
1fb00e |
/* Point to next subtable */
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
Offset += Subtable->Length;
|
|
Packit Service |
1fb00e |
Subtable = ACPI_ADD_PTR (ACPI_SDEV_HEADER, Subtable,
|
|
Packit Service |
1fb00e |
Subtable->Length);
|
|
Packit Service |
1fb00e |
}
|
|
Packit Service |
1fb00e |
}
|