Import ACPICA 20090730
This commit is contained in:
parent
22724f1419
commit
fe835a9c3e
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/vendor-sys/acpica/dist/; revision=196000 svn path=/vendor-sys/acpica/20090730/; revision=196001; tag=vendor/acpica/20090730
72
changes.txt
72
changes.txt
@ -1,3 +1,75 @@
|
||||
----------------------------------------
|
||||
30 July 2009. Summary of changes for version 20090730:
|
||||
|
||||
This release is available at www.acpica.org/downloads
|
||||
|
||||
The ACPI 4.0 implementation for ACPICA is complete with this release.
|
||||
|
||||
1) ACPI CA Core Subsystem:
|
||||
|
||||
ACPI 4.0: Added header file support for all new and changed ACPI tables.
|
||||
Completely new tables are: IBFT, IVRS, MSCT, and WAET. Tables that are new
|
||||
for ACPI 4.0, but have previously been supported in ACPICA are: CPEP, BERT,
|
||||
EINJ, ERST, and HEST. Other newly supported tables are: UEFI and WDAT. There
|
||||
have been some ACPI 4.0 changes to other existing tables. Split the large
|
||||
actbl1.h header into the existing actbl2.h header. ACPICA BZ 774.
|
||||
|
||||
ACPI 4.0: Implemented predefined name validation for all new names. There are
|
||||
31 new names in ACPI 4.0. The predefined validation module was split into two
|
||||
files. The new file is namespace/nsrepair.c. ACPICA BZ 770.
|
||||
|
||||
Implemented support for so-called "module-level executable code". This is
|
||||
executable AML code that exists outside of any control method and is intended
|
||||
to be executed at table load time. Although illegal since ACPI 2.0, this type
|
||||
of code still exists and is apparently still being created. Blocks of this
|
||||
code are now detected and executed as intended. Currently, the code blocks
|
||||
must exist under either an If, Else, or While construct; these are the
|
||||
typical cases seen in the field. ACPICA BZ 762. Lin Ming.
|
||||
|
||||
Implemented an automatic dynamic repair for predefined names that return
|
||||
nested Package objects. This applies to predefined names that are defined to
|
||||
return a variable-length Package of sub-packages. If the number of sub-
|
||||
packages is one, BIOS code is occasionally seen that creates a simple single
|
||||
package with no sub-packages. This code attempts to fix the problem by
|
||||
wrapping a new package object around the existing package. These methods can
|
||||
be repaired: _ALR, _CSD, _HPX, _MLS, _PRT, _PSS, _TRT, and _TSS. ACPICA BZ
|
||||
790.
|
||||
|
||||
Fixed a regression introduced in 20090625 for the AcpiGetDevices interface.
|
||||
The _HID/_CID matching was broken and no longer matched IDs correctly. ACPICA
|
||||
BZ 793.
|
||||
|
||||
Fixed a problem with AcpiReset where the reset would silently fail if the
|
||||
register was one of the protected I/O ports. AcpiReset now bypasses the port
|
||||
validation mechanism. This may eventually be driven into the AcpiRead/Write
|
||||
interfaces.
|
||||
|
||||
Fixed a regression related to the recent update of the AcpiRead/Write
|
||||
interfaces. A sleep/suspend could fail if the optional PM2 Control register
|
||||
does not exist during an attempt to write the Bus Master Arbitration bit.
|
||||
(However, some hosts already delete the code that writes this bit, and the
|
||||
code may in fact be obsolete at this date.) ACPICA BZ 799.
|
||||
|
||||
Fixed a problem where AcpiTerminate could fault if inadvertently called twice
|
||||
in succession. ACPICA BZ 795.
|
||||
|
||||
Example Code and Data Size: These are the sizes for the OS-independent
|
||||
acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. The
|
||||
debug version of the code includes the debug output trace mechanism and has a
|
||||
much larger code and data size.
|
||||
|
||||
Previous Release:
|
||||
Non-Debug Version: 84.7K Code, 17.8K Data, 102.5K Total
|
||||
Debug Version: 160.5K Code, 50.6K Data, 211.1K Total
|
||||
Current Release:
|
||||
Non-Debug Version: 85.5K Code, 18.0K Data, 103.5K Total
|
||||
Debug Version: 161.6K Code, 50.9K Data, 212.5K Total
|
||||
|
||||
2) iASL Compiler/Disassembler and Tools:
|
||||
|
||||
ACPI 4.0: Implemented disassembler support for all new ACPI tables and
|
||||
changes to existing tables. ACPICA BZ 775.
|
||||
|
||||
----------------------------------------
|
||||
25 June 2009. Summary of changes for version 20090625:
|
||||
|
||||
|
@ -387,7 +387,7 @@ static ACPI_RESOURCE_TAG *AcpiGbl_ResourceTags [] =
|
||||
|
||||
static UINT32 AcpiGbl_NextResourceId = 0;
|
||||
static UINT8 AcpiGbl_NextPrefix = 0;
|
||||
static UINT8 AcpiGbl_Prefix[ACPI_NUM_RES_PREFIX] =
|
||||
static char AcpiGbl_Prefix[ACPI_NUM_RES_PREFIX] =
|
||||
{'Y','Z','J','K','X'};
|
||||
|
||||
|
||||
|
109
common/dmtable.c
109
common/dmtable.c
@ -132,6 +132,7 @@ AcpiDmGetTableData (
|
||||
static void
|
||||
AcpiDmCheckAscii (
|
||||
UINT8 *Target,
|
||||
char *RepairedName,
|
||||
UINT32 Count);
|
||||
|
||||
UINT8
|
||||
@ -156,17 +157,18 @@ static const char *AcpiDmDmarSubnames[] =
|
||||
"Hardware Unit Definition",
|
||||
"Reserved Memory Region",
|
||||
"Root Port ATS Capability",
|
||||
"Remapping Hardware Static Affinity",
|
||||
"Unknown SubTable Type" /* Reserved */
|
||||
};
|
||||
|
||||
static const char *AcpiDmHestSubnames[] =
|
||||
{
|
||||
"XPF Machine Check Exception",
|
||||
"XPF Corrected Machine Check",
|
||||
"NOT USED???",
|
||||
"XPF Non-Maskable Interrupt",
|
||||
"IPF Corrected Machine Check",
|
||||
"IPF Corrected Platform Error",
|
||||
"IA-32 Machine Check Exception",
|
||||
"IA-32 Corrected Machine Check",
|
||||
"IA-32 Non-Maskable Interrupt",
|
||||
"Unknown SubTable Type", /* 3 - Reserved */
|
||||
"Unknown SubTable Type", /* 4 - Reserved */
|
||||
"Unknown SubTable Type", /* 5 - Reserved */
|
||||
"PCI Express Root Port AER",
|
||||
"PCI Express AER (AER Endpoint)",
|
||||
"PCI Express/PCI-X Bridge AER",
|
||||
@ -208,6 +210,14 @@ static const char *AcpiDmSratSubnames[] =
|
||||
"Unknown SubTable Type" /* Reserved */
|
||||
};
|
||||
|
||||
static const char *AcpiDmIvrsSubnames[] =
|
||||
{
|
||||
"Hardware Definition Block",
|
||||
"Memory Definition Block",
|
||||
"Unknown SubTable Type" /* Reserved */
|
||||
};
|
||||
|
||||
|
||||
|
||||
#define ACPI_FADT_PM_RESERVED 8
|
||||
|
||||
@ -224,11 +234,12 @@ static const char *AcpiDmFadtProfiles[] =
|
||||
"Unknown Profile Type"
|
||||
};
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
*
|
||||
* ACPI Table Data, indexed by signature.
|
||||
*
|
||||
* Each entry contains: Signature, Table Info, Handler, Description
|
||||
*
|
||||
* Simple tables have only a TableInfo structure, complex tables have a handler.
|
||||
* This table must be NULL terminated. RSDP and FACS are special-cased
|
||||
* elsewhere.
|
||||
@ -249,8 +260,10 @@ static ACPI_DMTABLE_DATA AcpiDmTableData[] =
|
||||
{ACPI_SIG_FADT, NULL, AcpiDmDumpFadt, "Fixed ACPI Description Table"},
|
||||
{ACPI_SIG_HEST, NULL, AcpiDmDumpHest, "Hardware Error Source Table"},
|
||||
{ACPI_SIG_HPET, AcpiDmTableInfoHpet, NULL, "High Precision Event Timer table"},
|
||||
{ACPI_SIG_IVRS, NULL, AcpiDmDumpIvrs, "I/O Virtualization Reporting Structure"},
|
||||
{ACPI_SIG_MADT, NULL, AcpiDmDumpMadt, "Multiple APIC Description Table"},
|
||||
{ACPI_SIG_MCFG, NULL, AcpiDmDumpMcfg, "Memory Mapped Configuration table"},
|
||||
{ACPI_SIG_MSCT, NULL, AcpiDmDumpMsct, "Maximum System Characteristics Table"},
|
||||
{ACPI_SIG_RSDT, NULL, AcpiDmDumpRsdt, "Root System Description Table"},
|
||||
{ACPI_SIG_SBST, AcpiDmTableInfoSbst, NULL, "Smart Battery Specification Table"},
|
||||
{ACPI_SIG_SLIC, AcpiDmTableInfoSlic, NULL, "Software Licensing Description Table"},
|
||||
@ -259,6 +272,9 @@ static ACPI_DMTABLE_DATA AcpiDmTableData[] =
|
||||
{ACPI_SIG_SPMI, AcpiDmTableInfoSpmi, NULL, "Server Platform Management Interface table"},
|
||||
{ACPI_SIG_SRAT, NULL, AcpiDmDumpSrat, "System Resource Affinity Table"},
|
||||
{ACPI_SIG_TCPA, AcpiDmTableInfoTcpa, NULL, "Trusted Computing Platform Alliance table"},
|
||||
{ACPI_SIG_UEFI, AcpiDmTableInfoUefi, NULL, "UEFI Boot Optimization Table"},
|
||||
{ACPI_SIG_WAET, AcpiDmTableInfoWaet, NULL, "Windows ACPI Emulated Devices Table"},
|
||||
{ACPI_SIG_WDAT, NULL, AcpiDmDumpWdat, "Watchdog Action Table"},
|
||||
{ACPI_SIG_WDRT, AcpiDmTableInfoWdrt, NULL, "Watchdog Resource Table"},
|
||||
{ACPI_SIG_XSDT, NULL, AcpiDmDumpXsdt, "Extended System Description Table"},
|
||||
{NULL, NULL, NULL, NULL}
|
||||
@ -511,7 +527,9 @@ AcpiDmDumpTable (
|
||||
UINT8 Temp8;
|
||||
UINT16 Temp16;
|
||||
ACPI_DMTABLE_DATA *TableData;
|
||||
const char *Name;
|
||||
BOOLEAN LastOutputBlankLine = FALSE;
|
||||
char RepairedName[8];
|
||||
|
||||
|
||||
if (!Info)
|
||||
@ -547,6 +565,7 @@ AcpiDmDumpTable (
|
||||
case ACPI_DMT_UINT8:
|
||||
case ACPI_DMT_CHKSUM:
|
||||
case ACPI_DMT_SPACEID:
|
||||
case ACPI_DMT_IVRS:
|
||||
case ACPI_DMT_MADT:
|
||||
case ACPI_DMT_SRAT:
|
||||
case ACPI_DMT_ASF:
|
||||
@ -577,6 +596,9 @@ AcpiDmDumpTable (
|
||||
case ACPI_DMT_NAME8:
|
||||
ByteLength = 8;
|
||||
break;
|
||||
case ACPI_DMT_BUF16:
|
||||
ByteLength = 16;
|
||||
break;
|
||||
case ACPI_DMT_STRING:
|
||||
ByteLength = ACPI_STRLEN (ACPI_CAST_PTR (char, Target)) + 1;
|
||||
break;
|
||||
@ -677,17 +699,28 @@ AcpiDmDumpTable (
|
||||
ACPI_FORMAT_UINT64 (ACPI_GET64 (Target)));
|
||||
break;
|
||||
|
||||
case ACPI_DMT_BUF16:
|
||||
|
||||
/* Buffer of length 16 */
|
||||
|
||||
for (Temp8 = 0; Temp8 < 16; Temp8++)
|
||||
{
|
||||
AcpiOsPrintf ("%2.2X,", Target[Temp8]);
|
||||
}
|
||||
AcpiOsPrintf ("\n");
|
||||
break;
|
||||
|
||||
case ACPI_DMT_STRING:
|
||||
|
||||
AcpiOsPrintf ("%s\n", ACPI_CAST_PTR (char, Target));
|
||||
AcpiOsPrintf ("\"%s\"\n", ACPI_CAST_PTR (char, Target));
|
||||
break;
|
||||
|
||||
/* Fixed length ASCII name fields */
|
||||
|
||||
case ACPI_DMT_SIG:
|
||||
|
||||
AcpiDmCheckAscii (Target, 4);
|
||||
AcpiOsPrintf ("\"%4.4s\" ", Target);
|
||||
AcpiDmCheckAscii (Target, RepairedName, 4);
|
||||
AcpiOsPrintf ("\"%.4s\" ", RepairedName);
|
||||
TableData = AcpiDmGetTableData (ACPI_CAST_PTR (char, Target));
|
||||
if (TableData)
|
||||
{
|
||||
@ -698,20 +731,20 @@ AcpiDmDumpTable (
|
||||
|
||||
case ACPI_DMT_NAME4:
|
||||
|
||||
AcpiDmCheckAscii (Target, 4);
|
||||
AcpiOsPrintf ("\"%4.4s\"\n", Target);
|
||||
AcpiDmCheckAscii (Target, RepairedName, 4);
|
||||
AcpiOsPrintf ("\"%.4s\"\n", RepairedName);
|
||||
break;
|
||||
|
||||
case ACPI_DMT_NAME6:
|
||||
|
||||
AcpiDmCheckAscii (Target, 6);
|
||||
AcpiOsPrintf ("\"%6.6s\"\n", Target);
|
||||
AcpiDmCheckAscii (Target, RepairedName, 6);
|
||||
AcpiOsPrintf ("\"%.6s\"\n", RepairedName);
|
||||
break;
|
||||
|
||||
case ACPI_DMT_NAME8:
|
||||
|
||||
AcpiDmCheckAscii (Target, 8);
|
||||
AcpiOsPrintf ("\"%8.8s\"\n", Target);
|
||||
AcpiDmCheckAscii (Target, RepairedName, 8);
|
||||
AcpiOsPrintf ("\"%.8s\"\n", RepairedName);
|
||||
break;
|
||||
|
||||
/* Special Data Types */
|
||||
@ -742,8 +775,8 @@ AcpiDmDumpTable (
|
||||
/* Generic Address Structure */
|
||||
|
||||
AcpiOsPrintf ("<Generic Address Structure>\n");
|
||||
AcpiDmDumpTable (ACPI_CAST_PTR (ACPI_TABLE_HEADER, Table)->Length,
|
||||
CurrentOffset, Target, sizeof (ACPI_GENERIC_ADDRESS), AcpiDmTableInfoGas);
|
||||
AcpiDmDumpTable (TableLength, CurrentOffset, Target,
|
||||
sizeof (ACPI_GENERIC_ADDRESS), AcpiDmTableInfoGas);
|
||||
AcpiOsPrintf ("\n");
|
||||
LastOutputBlankLine = TRUE;
|
||||
break;
|
||||
@ -790,8 +823,8 @@ AcpiDmDumpTable (
|
||||
case ACPI_DMT_HESTNTFY:
|
||||
|
||||
AcpiOsPrintf ("<Hardware Error Notification Structure>\n");
|
||||
AcpiDmDumpTable (ACPI_CAST_PTR (ACPI_TABLE_HEADER, Table)->Length,
|
||||
CurrentOffset, Target, sizeof (ACPI_HEST_NOTIFY), AcpiDmTableInfoHestNotify);
|
||||
AcpiDmDumpTable (TableLength, CurrentOffset, Target,
|
||||
sizeof (ACPI_HEST_NOTIFY), AcpiDmTableInfoHestNotify);
|
||||
AcpiOsPrintf ("\n");
|
||||
LastOutputBlankLine = TRUE;
|
||||
break;
|
||||
@ -849,6 +882,31 @@ AcpiDmDumpTable (
|
||||
AcpiOsPrintf ("%2.2X (%s)\n", *Target, AcpiDmFadtProfiles[Temp8]);
|
||||
break;
|
||||
|
||||
case ACPI_DMT_IVRS:
|
||||
|
||||
/* IVRS subtable types */
|
||||
|
||||
Temp8 = *Target;
|
||||
switch (Temp8)
|
||||
{
|
||||
case ACPI_IVRS_TYPE_HARDWARE:
|
||||
Name = AcpiDmIvrsSubnames[0];
|
||||
break;
|
||||
|
||||
case ACPI_IVRS_TYPE_MEMORY1:
|
||||
case ACPI_IVRS_TYPE_MEMORY2:
|
||||
case ACPI_IVRS_TYPE_MEMORY3:
|
||||
Name = AcpiDmIvrsSubnames[1];
|
||||
break;
|
||||
|
||||
default:
|
||||
Name = AcpiDmIvrsSubnames[2];
|
||||
break;
|
||||
}
|
||||
|
||||
AcpiOsPrintf ("%2.2X <%s>\n", *Target, Name);
|
||||
break;
|
||||
|
||||
case ACPI_DMT_EXIT:
|
||||
return (AE_OK);
|
||||
|
||||
@ -888,6 +946,7 @@ AcpiDmDumpTable (
|
||||
static void
|
||||
AcpiDmCheckAscii (
|
||||
UINT8 *Name,
|
||||
char *RepairedName,
|
||||
UINT32 Count)
|
||||
{
|
||||
UINT32 i;
|
||||
@ -895,9 +954,15 @@ AcpiDmCheckAscii (
|
||||
|
||||
for (i = 0; i < Count; i++)
|
||||
{
|
||||
if (!Name[i] || !isprint (Name[i]))
|
||||
RepairedName[i] = Name[i];
|
||||
|
||||
if (!Name[i])
|
||||
{
|
||||
Name[i] = ' ';
|
||||
return;
|
||||
}
|
||||
if (!isprint (Name[i]))
|
||||
{
|
||||
RepairedName[i] = ' ';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -306,6 +306,7 @@ AcpiDmDumpAsf (
|
||||
UINT32 DataLength = 0;
|
||||
UINT32 DataOffset = 0;
|
||||
UINT32 i;
|
||||
UINT8 Type;
|
||||
|
||||
|
||||
/* No main table, only sub-tables */
|
||||
@ -322,7 +323,11 @@ AcpiDmDumpAsf (
|
||||
return;
|
||||
}
|
||||
|
||||
switch (SubTable->Header.Type & 0x7F) /* Mask off top bit */
|
||||
/* The actual type is the lower 7 bits of Type */
|
||||
|
||||
Type = (UINT8) (SubTable->Header.Type & 0x7F);
|
||||
|
||||
switch (Type)
|
||||
{
|
||||
case ACPI_ASF_TYPE_INFO:
|
||||
InfoTable = AcpiDmTableInfoAsf0;
|
||||
@ -332,8 +337,8 @@ AcpiDmDumpAsf (
|
||||
InfoTable = AcpiDmTableInfoAsf1;
|
||||
DataInfoTable = AcpiDmTableInfoAsf1a;
|
||||
DataTable = ACPI_ADD_PTR (UINT8, SubTable, sizeof (ACPI_ASF_ALERT));
|
||||
DataCount = ((ACPI_ASF_ALERT *) SubTable)->Alerts;
|
||||
DataLength = ((ACPI_ASF_ALERT *) SubTable)->DataLength;
|
||||
DataCount = ACPI_CAST_PTR (ACPI_ASF_ALERT, SubTable)->Alerts;
|
||||
DataLength = ACPI_CAST_PTR (ACPI_ASF_ALERT, SubTable)->DataLength;
|
||||
DataOffset = Offset + sizeof (ACPI_ASF_ALERT);
|
||||
break;
|
||||
|
||||
@ -341,8 +346,8 @@ AcpiDmDumpAsf (
|
||||
InfoTable = AcpiDmTableInfoAsf2;
|
||||
DataInfoTable = AcpiDmTableInfoAsf2a;
|
||||
DataTable = ACPI_ADD_PTR (UINT8, SubTable, sizeof (ACPI_ASF_REMOTE));
|
||||
DataCount = ((ACPI_ASF_REMOTE *) SubTable)->Controls;
|
||||
DataLength = ((ACPI_ASF_REMOTE *) SubTable)->DataLength;
|
||||
DataCount = ACPI_CAST_PTR (ACPI_ASF_REMOTE, SubTable)->Controls;
|
||||
DataLength = ACPI_CAST_PTR (ACPI_ASF_REMOTE, SubTable)->DataLength;
|
||||
DataOffset = Offset + sizeof (ACPI_ASF_REMOTE);
|
||||
break;
|
||||
|
||||
@ -353,7 +358,7 @@ AcpiDmDumpAsf (
|
||||
case ACPI_ASF_TYPE_ADDRESS:
|
||||
InfoTable = AcpiDmTableInfoAsf4;
|
||||
DataTable = ACPI_ADD_PTR (UINT8, SubTable, sizeof (ACPI_ASF_ADDRESS));
|
||||
DataLength = ((ACPI_ASF_ADDRESS *) SubTable)->Devices;
|
||||
DataLength = ACPI_CAST_PTR (ACPI_ASF_ADDRESS, SubTable)->Devices;
|
||||
DataOffset = Offset + sizeof (ACPI_ASF_ADDRESS);
|
||||
break;
|
||||
|
||||
@ -371,7 +376,7 @@ AcpiDmDumpAsf (
|
||||
|
||||
/* Dump variable-length extra data */
|
||||
|
||||
switch (SubTable->Header.Type & 0x7F) /* Mask off top bit */
|
||||
switch (Type)
|
||||
{
|
||||
case ACPI_ASF_TYPE_ALERT:
|
||||
case ACPI_ASF_TYPE_CONTROL:
|
||||
@ -471,7 +476,7 @@ AcpiDmDumpCpep (
|
||||
{
|
||||
AcpiOsPrintf ("\n");
|
||||
Status = AcpiDmDumpTable (Length, Offset, SubTable,
|
||||
SubTable->Length, AcpiDmTableInfoCpep0);
|
||||
SubTable->Header.Length, AcpiDmTableInfoCpep0);
|
||||
if (ACPI_FAILURE (Status))
|
||||
{
|
||||
return;
|
||||
@ -479,8 +484,9 @@ AcpiDmDumpCpep (
|
||||
|
||||
/* Point to next sub-table */
|
||||
|
||||
Offset += SubTable->Length;
|
||||
SubTable = ACPI_ADD_PTR (ACPI_CPEP_POLLING, SubTable, SubTable->Length);
|
||||
Offset += SubTable->Header.Length;
|
||||
SubTable = ACPI_ADD_PTR (ACPI_CPEP_POLLING, SubTable,
|
||||
SubTable->Header.Length);
|
||||
}
|
||||
}
|
||||
|
||||
@ -550,6 +556,10 @@ AcpiDmDumpDmar (
|
||||
InfoTable = AcpiDmTableInfoDmar2;
|
||||
ScopeOffset = sizeof (ACPI_DMAR_ATSR);
|
||||
break;
|
||||
case ACPI_DMAR_HARDWARE_AFFINITY:
|
||||
InfoTable = AcpiDmTableInfoDmar3;
|
||||
ScopeOffset = sizeof (ACPI_DMAR_RHSA);
|
||||
break;
|
||||
default:
|
||||
AcpiOsPrintf ("\n**** Unknown DMAR sub-table type %X\n\n", SubTable->Type);
|
||||
return;
|
||||
@ -754,29 +764,19 @@ AcpiDmDumpHest (
|
||||
{
|
||||
switch (SubTable->Type)
|
||||
{
|
||||
case ACPI_HEST_TYPE_XPF_MACHINE_CHECK:
|
||||
case ACPI_HEST_TYPE_IA32_CHECK:
|
||||
InfoTable = AcpiDmTableInfoHest0;
|
||||
SubTableLength = sizeof (ACPI_HEST_XPF_MACHINE_CHECK);
|
||||
SubTableLength = sizeof (ACPI_HEST_IA_MACHINE_CHECK);
|
||||
break;
|
||||
|
||||
case ACPI_HEST_TYPE_XPF_CORRECTED_MACHINE_CHECK:
|
||||
case ACPI_HEST_TYPE_IA32_CORRECTED_CHECK:
|
||||
InfoTable = AcpiDmTableInfoHest1;
|
||||
SubTableLength = sizeof (ACPI_HEST_XPF_CORRECTED);
|
||||
SubTableLength = sizeof (ACPI_HEST_IA_CORRECTED);
|
||||
break;
|
||||
|
||||
case ACPI_HEST_TYPE_XPF_NON_MASKABLE_INTERRUPT:
|
||||
InfoTable = AcpiDmTableInfoHest3;
|
||||
SubTableLength = sizeof (ACPI_HEST_XPF_NMI);
|
||||
break;
|
||||
|
||||
case ACPI_HEST_TYPE_IPF_CORRECTED_MACHINE_CHECK:
|
||||
InfoTable = AcpiDmTableInfoHest4;
|
||||
SubTableLength = sizeof (ACPI_HEST_IPF_CORRECTED);
|
||||
break;
|
||||
|
||||
case ACPI_HEST_TYPE_IPF_CORRECTED_PLATFORM_ERROR:
|
||||
InfoTable = AcpiDmTableInfoHest5;
|
||||
SubTableLength = sizeof (ACPI_HEST_IPF_CORRECTED_PLATFORM);
|
||||
case ACPI_HEST_TYPE_IA32_NMI:
|
||||
InfoTable = AcpiDmTableInfoHest2;
|
||||
SubTableLength = sizeof (ACPI_HEST_IA_NMI);
|
||||
break;
|
||||
|
||||
case ACPI_HEST_TYPE_AER_ROOT_PORT:
|
||||
@ -794,7 +794,7 @@ AcpiDmDumpHest (
|
||||
SubTableLength = sizeof (ACPI_HEST_AER_BRIDGE);
|
||||
break;
|
||||
|
||||
case ACPI_HEST_TYPE_GENERIC_HARDWARE_ERROR_SOURCE:
|
||||
case ACPI_HEST_TYPE_GENERIC_ERROR:
|
||||
InfoTable = AcpiDmTableInfoHest9;
|
||||
SubTableLength = sizeof (ACPI_HEST_GENERIC);
|
||||
break;
|
||||
@ -822,6 +822,179 @@ AcpiDmDumpHest (
|
||||
}
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
*
|
||||
* FUNCTION: AcpiDmDumpIvrs
|
||||
*
|
||||
* PARAMETERS: Table - A IVRS table
|
||||
*
|
||||
* RETURN: None
|
||||
*
|
||||
* DESCRIPTION: Format the contents of a IVRS
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
static UINT8 EntrySizes[] = {4,8,16,32};
|
||||
|
||||
void
|
||||
AcpiDmDumpIvrs (
|
||||
ACPI_TABLE_HEADER *Table)
|
||||
{
|
||||
ACPI_STATUS Status;
|
||||
UINT32 Offset = sizeof (ACPI_TABLE_IVRS);
|
||||
UINT32 EntryOffset;
|
||||
UINT32 EntryLength;
|
||||
UINT32 EntryType;
|
||||
ACPI_IVRS_DE_HEADER *DeviceEntry;
|
||||
ACPI_IVRS_HEADER *SubTable;
|
||||
ACPI_DMTABLE_INFO *InfoTable;
|
||||
|
||||
|
||||
/* Main table */
|
||||
|
||||
Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoIvrs);
|
||||
if (ACPI_FAILURE (Status))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
/* Sub-tables */
|
||||
|
||||
SubTable = ACPI_ADD_PTR (ACPI_IVRS_HEADER, Table, Offset);
|
||||
while (Offset < Table->Length)
|
||||
{
|
||||
/* Common sub-table header */
|
||||
|
||||
AcpiOsPrintf ("\n");
|
||||
Status = AcpiDmDumpTable (Table->Length, Offset, SubTable,
|
||||
SubTable->Length, AcpiDmTableInfoIvrsHdr);
|
||||
if (ACPI_FAILURE (Status))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
switch (SubTable->Type)
|
||||
{
|
||||
case ACPI_IVRS_TYPE_HARDWARE:
|
||||
InfoTable = AcpiDmTableInfoIvrs0;
|
||||
break;
|
||||
case ACPI_IVRS_TYPE_MEMORY1:
|
||||
case ACPI_IVRS_TYPE_MEMORY2:
|
||||
case ACPI_IVRS_TYPE_MEMORY3:
|
||||
InfoTable = AcpiDmTableInfoIvrs1;
|
||||
break;
|
||||
default:
|
||||
AcpiOsPrintf ("\n**** Unknown IVRS sub-table type %X\n",
|
||||
SubTable->Type);
|
||||
|
||||
/* Attempt to continue */
|
||||
|
||||
if (!SubTable->Length)
|
||||
{
|
||||
AcpiOsPrintf ("Invalid zero length subtable\n");
|
||||
return;
|
||||
}
|
||||
goto NextSubTable;
|
||||
}
|
||||
|
||||
/* Dump the subtable */
|
||||
|
||||
AcpiOsPrintf ("\n");
|
||||
Status = AcpiDmDumpTable (Table->Length, Offset, SubTable,
|
||||
SubTable->Length, InfoTable);
|
||||
if (ACPI_FAILURE (Status))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
/* The hardware subtable can contain multiple device entries */
|
||||
|
||||
if (SubTable->Type == ACPI_IVRS_TYPE_HARDWARE)
|
||||
{
|
||||
EntryOffset = Offset + sizeof (ACPI_IVRS_HARDWARE);
|
||||
DeviceEntry = ACPI_ADD_PTR (ACPI_IVRS_DE_HEADER, SubTable,
|
||||
sizeof (ACPI_IVRS_HARDWARE));
|
||||
|
||||
while (EntryOffset < (Offset + SubTable->Length))
|
||||
{
|
||||
AcpiOsPrintf ("\n");
|
||||
/*
|
||||
* Upper 2 bits of Type encode the length of the device entry
|
||||
*
|
||||
* 00 = 4 byte
|
||||
* 01 = 8 byte
|
||||
* 10 = 16 byte - currently no entries defined
|
||||
* 11 = 32 byte - currently no entries defined
|
||||
*/
|
||||
EntryType = DeviceEntry->Type;
|
||||
EntryLength = EntrySizes [EntryType >> 6];
|
||||
|
||||
switch (EntryType)
|
||||
{
|
||||
/* 4-byte device entries */
|
||||
|
||||
case ACPI_IVRS_TYPE_PAD4:
|
||||
case ACPI_IVRS_TYPE_ALL:
|
||||
case ACPI_IVRS_TYPE_SELECT:
|
||||
case ACPI_IVRS_TYPE_START:
|
||||
case ACPI_IVRS_TYPE_END:
|
||||
|
||||
InfoTable = AcpiDmTableInfoIvrs4;
|
||||
break;
|
||||
|
||||
/* 8-byte entries, type A */
|
||||
|
||||
case ACPI_IVRS_TYPE_ALIAS_SELECT:
|
||||
case ACPI_IVRS_TYPE_ALIAS_START:
|
||||
|
||||
InfoTable = AcpiDmTableInfoIvrs8a;
|
||||
break;
|
||||
|
||||
/* 8-byte entries, type B */
|
||||
|
||||
case ACPI_IVRS_TYPE_PAD8:
|
||||
case ACPI_IVRS_TYPE_EXT_SELECT:
|
||||
case ACPI_IVRS_TYPE_EXT_START:
|
||||
|
||||
InfoTable = AcpiDmTableInfoIvrs8b;
|
||||
break;
|
||||
|
||||
/* 8-byte entries, type C */
|
||||
|
||||
case ACPI_IVRS_TYPE_SPECIAL:
|
||||
|
||||
InfoTable = AcpiDmTableInfoIvrs8c;
|
||||
break;
|
||||
|
||||
default:
|
||||
InfoTable = AcpiDmTableInfoIvrs4;
|
||||
AcpiOsPrintf (
|
||||
"\n**** Unknown IVRS device entry type/length: "
|
||||
"%.2X/%X at offset %.4X: (header below)\n",
|
||||
EntryType, EntryLength, EntryOffset);
|
||||
break;
|
||||
}
|
||||
|
||||
/* Dump the Device Entry */
|
||||
|
||||
Status = AcpiDmDumpTable (Table->Length, EntryOffset,
|
||||
DeviceEntry, EntryLength, InfoTable);
|
||||
|
||||
EntryOffset += EntryLength;
|
||||
DeviceEntry = ACPI_ADD_PTR (ACPI_IVRS_DE_HEADER, DeviceEntry,
|
||||
EntryLength);
|
||||
}
|
||||
}
|
||||
|
||||
NextSubTable:
|
||||
/* Point to next sub-table */
|
||||
|
||||
Offset += SubTable->Length;
|
||||
SubTable = ACPI_ADD_PTR (ACPI_IVRS_HEADER, SubTable, SubTable->Length);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
*
|
||||
* FUNCTION: AcpiDmDumpMadt
|
||||
@ -991,6 +1164,58 @@ AcpiDmDumpMcfg (
|
||||
}
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
*
|
||||
* FUNCTION: AcpiDmDumpMsct
|
||||
*
|
||||
* PARAMETERS: Table - A MSCT table
|
||||
*
|
||||
* RETURN: None
|
||||
*
|
||||
* DESCRIPTION: Format the contents of a MSCT
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
void
|
||||
AcpiDmDumpMsct (
|
||||
ACPI_TABLE_HEADER *Table)
|
||||
{
|
||||
ACPI_STATUS Status;
|
||||
UINT32 Offset = sizeof (ACPI_TABLE_MSCT);
|
||||
ACPI_MSCT_PROXIMITY *SubTable;
|
||||
|
||||
|
||||
/* Main table */
|
||||
|
||||
Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoMsct);
|
||||
if (ACPI_FAILURE (Status))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
/* Sub-tables */
|
||||
|
||||
SubTable = ACPI_ADD_PTR (ACPI_MSCT_PROXIMITY, Table, Offset);
|
||||
while (Offset < Table->Length)
|
||||
{
|
||||
/* Common sub-table header */
|
||||
|
||||
AcpiOsPrintf ("\n");
|
||||
Status = AcpiDmDumpTable (Table->Length, Offset, SubTable,
|
||||
sizeof (ACPI_MSCT_PROXIMITY), AcpiDmTableInfoMsct0);
|
||||
if (ACPI_FAILURE (Status))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
/* Point to next sub-table */
|
||||
|
||||
Offset += sizeof (ACPI_MSCT_PROXIMITY);
|
||||
SubTable = ACPI_ADD_PTR (ACPI_MSCT_PROXIMITY, SubTable, sizeof (ACPI_MSCT_PROXIMITY));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
*
|
||||
* FUNCTION: AcpiDmDumpSlit
|
||||
@ -1149,3 +1374,54 @@ AcpiDmDumpSrat (
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
*
|
||||
* FUNCTION: AcpiDmDumpWdat
|
||||
*
|
||||
* PARAMETERS: Table - A WDAT table
|
||||
*
|
||||
* RETURN: None
|
||||
*
|
||||
* DESCRIPTION: Format the contents of a WDAT
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
void
|
||||
AcpiDmDumpWdat (
|
||||
ACPI_TABLE_HEADER *Table)
|
||||
{
|
||||
ACPI_STATUS Status;
|
||||
UINT32 Offset = sizeof (ACPI_TABLE_WDAT);
|
||||
ACPI_WDAT_ENTRY *SubTable;
|
||||
|
||||
|
||||
/* Main table */
|
||||
|
||||
Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoWdat);
|
||||
if (ACPI_FAILURE (Status))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
/* Sub-tables */
|
||||
|
||||
SubTable = ACPI_ADD_PTR (ACPI_WDAT_ENTRY, Table, Offset);
|
||||
while (Offset < Table->Length)
|
||||
{
|
||||
/* Common sub-table header */
|
||||
|
||||
AcpiOsPrintf ("\n");
|
||||
Status = AcpiDmDumpTable (Table->Length, Offset, SubTable,
|
||||
sizeof (ACPI_WDAT_ENTRY), AcpiDmTableInfoWdat0);
|
||||
if (ACPI_FAILURE (Status))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
/* Point to next sub-table */
|
||||
|
||||
Offset += sizeof (ACPI_WDAT_ENTRY);
|
||||
SubTable = ACPI_ADD_PTR (ACPI_WDAT_ENTRY, SubTable, sizeof (ACPI_WDAT_ENTRY));
|
||||
}
|
||||
}
|
||||
|
@ -139,14 +139,19 @@
|
||||
#define ACPI_ERST_OFFSET(f) (UINT8) ACPI_OFFSET (ACPI_TABLE_ERST,f)
|
||||
#define ACPI_HEST_OFFSET(f) (UINT8) ACPI_OFFSET (ACPI_TABLE_HEST,f)
|
||||
#define ACPI_HPET_OFFSET(f) (UINT8) ACPI_OFFSET (ACPI_TABLE_HPET,f)
|
||||
#define ACPI_IVRS_OFFSET(f) (UINT8) ACPI_OFFSET (ACPI_TABLE_IVRS,f)
|
||||
#define ACPI_MADT_OFFSET(f) (UINT8) ACPI_OFFSET (ACPI_TABLE_MADT,f)
|
||||
#define ACPI_MCFG_OFFSET(f) (UINT8) ACPI_OFFSET (ACPI_TABLE_MCFG,f)
|
||||
#define ACPI_MSCT_OFFSET(f) (UINT8) ACPI_OFFSET (ACPI_TABLE_MSCT,f)
|
||||
#define ACPI_SBST_OFFSET(f) (UINT8) ACPI_OFFSET (ACPI_TABLE_SBST,f)
|
||||
#define ACPI_SLIT_OFFSET(f) (UINT8) ACPI_OFFSET (ACPI_TABLE_SLIT,f)
|
||||
#define ACPI_SPCR_OFFSET(f) (UINT8) ACPI_OFFSET (ACPI_TABLE_SPCR,f)
|
||||
#define ACPI_SPMI_OFFSET(f) (UINT8) ACPI_OFFSET (ACPI_TABLE_SPMI,f)
|
||||
#define ACPI_SRAT_OFFSET(f) (UINT8) ACPI_OFFSET (ACPI_TABLE_SRAT,f)
|
||||
#define ACPI_TCPA_OFFSET(f) (UINT8) ACPI_OFFSET (ACPI_TABLE_TCPA,f)
|
||||
#define ACPI_UEFI_OFFSET(f) (UINT8) ACPI_OFFSET (ACPI_TABLE_UEFI,f)
|
||||
#define ACPI_WAET_OFFSET(f) (UINT8) ACPI_OFFSET (ACPI_TABLE_WAET,f)
|
||||
#define ACPI_WDAT_OFFSET(f) (UINT8) ACPI_OFFSET (ACPI_TABLE_WDAT,f)
|
||||
#define ACPI_WDRT_OFFSET(f) (UINT8) ACPI_OFFSET (ACPI_TABLE_WDRT,f)
|
||||
|
||||
/* Subtables */
|
||||
@ -163,17 +168,23 @@
|
||||
#define ACPI_DMAR0_OFFSET(f) (UINT8) ACPI_OFFSET (ACPI_DMAR_HARDWARE_UNIT,f)
|
||||
#define ACPI_DMAR1_OFFSET(f) (UINT8) ACPI_OFFSET (ACPI_DMAR_RESERVED_MEMORY,f)
|
||||
#define ACPI_DMAR2_OFFSET(f) (UINT8) ACPI_OFFSET (ACPI_DMAR_ATSR,f)
|
||||
#define ACPI_DMAR3_OFFSET(f) (UINT8) ACPI_OFFSET (ACPI_DMAR_RHSA,f)
|
||||
#define ACPI_EINJ0_OFFSET(f) (UINT8) ACPI_OFFSET (ACPI_WHEA_HEADER,f)
|
||||
#define ACPI_HEST0_OFFSET(f) (UINT8) ACPI_OFFSET (ACPI_HEST_XPF_MACHINE_CHECK,f)
|
||||
#define ACPI_HEST1_OFFSET(f) (UINT8) ACPI_OFFSET (ACPI_HEST_XPF_CORRECTED,f)
|
||||
#define ACPI_HEST3_OFFSET(f) (UINT8) ACPI_OFFSET (ACPI_HEST_XPF_NMI,f)
|
||||
#define ACPI_HEST4_OFFSET(f) (UINT8) ACPI_OFFSET (ACPI_HEST_IPF_CORRECTED,f)
|
||||
#define ACPI_HEST5_OFFSET(f) (UINT8) ACPI_OFFSET (ACPI_HEST_IPF_CORRECTED_PLATFORM,f)
|
||||
#define ACPI_HEST0_OFFSET(f) (UINT8) ACPI_OFFSET (ACPI_HEST_IA_MACHINE_CHECK,f)
|
||||
#define ACPI_HEST1_OFFSET(f) (UINT8) ACPI_OFFSET (ACPI_HEST_IA_CORRECTED,f)
|
||||
#define ACPI_HEST2_OFFSET(f) (UINT8) ACPI_OFFSET (ACPI_HEST_IA_NMI,f)
|
||||
#define ACPI_HEST6_OFFSET(f) (UINT8) ACPI_OFFSET (ACPI_HEST_AER_ROOT,f)
|
||||
#define ACPI_HEST7_OFFSET(f) (UINT8) ACPI_OFFSET (ACPI_HEST_AER,f)
|
||||
#define ACPI_HEST8_OFFSET(f) (UINT8) ACPI_OFFSET (ACPI_HEST_AER_BRIDGE,f)
|
||||
#define ACPI_HEST9_OFFSET(f) (UINT8) ACPI_OFFSET (ACPI_HEST_GENERIC,f)
|
||||
#define ACPI_HESTN_OFFSET(f) (UINT8) ACPI_OFFSET (ACPI_HEST_NOTIFY,f)
|
||||
#define ACPI_IVRSH_OFFSET(f) (UINT8) ACPI_OFFSET (ACPI_IVRS_HEADER,f)
|
||||
#define ACPI_IVRS0_OFFSET(f) (UINT8) ACPI_OFFSET (ACPI_IVRS_HARDWARE,f)
|
||||
#define ACPI_IVRS1_OFFSET(f) (UINT8) ACPI_OFFSET (ACPI_IVRS_MEMORY,f)
|
||||
#define ACPI_IVRSD_OFFSET(f) (UINT8) ACPI_OFFSET (ACPI_IVRS_DE_HEADER,f)
|
||||
#define ACPI_IVRS8A_OFFSET(f) (UINT8) ACPI_OFFSET (ACPI_IVRS_DEVICE8A,f)
|
||||
#define ACPI_IVRS8B_OFFSET(f) (UINT8) ACPI_OFFSET (ACPI_IVRS_DEVICE8B,f)
|
||||
#define ACPI_IVRS8C_OFFSET(f) (UINT8) ACPI_OFFSET (ACPI_IVRS_DEVICE8C,f)
|
||||
#define ACPI_MADT0_OFFSET(f) (UINT8) ACPI_OFFSET (ACPI_MADT_LOCAL_APIC,f)
|
||||
#define ACPI_MADT1_OFFSET(f) (UINT8) ACPI_OFFSET (ACPI_MADT_IO_APIC,f)
|
||||
#define ACPI_MADT2_OFFSET(f) (UINT8) ACPI_OFFSET (ACPI_MADT_INTERRUPT_OVERRIDE,f)
|
||||
@ -187,10 +198,12 @@
|
||||
#define ACPI_MADT10_OFFSET(f) (UINT8) ACPI_OFFSET (ACPI_MADT_LOCAL_X2APIC_NMI,f)
|
||||
#define ACPI_MADTH_OFFSET(f) (UINT8) ACPI_OFFSET (ACPI_SUBTABLE_HEADER,f)
|
||||
#define ACPI_MCFG0_OFFSET(f) (UINT8) ACPI_OFFSET (ACPI_MCFG_ALLOCATION,f)
|
||||
#define ACPI_MSCT0_OFFSET(f) (UINT8) ACPI_OFFSET (ACPI_MSCT_PROXIMITY,f)
|
||||
#define ACPI_SRATH_OFFSET(f) (UINT8) ACPI_OFFSET (ACPI_SUBTABLE_HEADER,f)
|
||||
#define ACPI_SRAT0_OFFSET(f) (UINT8) ACPI_OFFSET (ACPI_SRAT_CPU_AFFINITY,f)
|
||||
#define ACPI_SRAT1_OFFSET(f) (UINT8) ACPI_OFFSET (ACPI_SRAT_MEM_AFFINITY,f)
|
||||
#define ACPI_SRAT2_OFFSET(f) (UINT8) ACPI_OFFSET (ACPI_SRAT_X2APIC_CPU_AFFINITY,f)
|
||||
#define ACPI_WDAT0_OFFSET(f) (UINT8) ACPI_OFFSET (ACPI_WDAT_ENTRY,f)
|
||||
|
||||
/*
|
||||
* Simplify access to flag fields by breaking them up into bytes
|
||||
@ -306,7 +319,7 @@ ACPI_DMTABLE_INFO AcpiDmTableInfoFacs[] =
|
||||
{ACPI_DMT_FLAG1, ACPI_FACS_FLAG_OFFSET (Flags,0), "64-bit Wake Supported (V2)"},
|
||||
{ACPI_DMT_UINT64, ACPI_FACS_OFFSET (XFirmwareWakingVector), "64 Firmware Waking Vector"},
|
||||
{ACPI_DMT_UINT8, ACPI_FACS_OFFSET (Version), "Version"},
|
||||
{ACPI_DMT_UINT24, ACPI_FACS_OFFSET (Reserved), "Reserved"},
|
||||
{ACPI_DMT_UINT24, ACPI_FACS_OFFSET (Reserved[0]), "Reserved"},
|
||||
{ACPI_DMT_UINT32, ACPI_FACS_OFFSET (OspmFlags), "OspmFlags (decoded below)"},
|
||||
{ACPI_DMT_FLAG0, ACPI_FACS_FLAG_OFFSET (OspmFlags,0), "64-bit Wake Env Required (V2)"},
|
||||
{ACPI_DMT_EXIT, 0, NULL}
|
||||
@ -458,9 +471,9 @@ ACPI_DMTABLE_INFO AcpiDmTableInfoAsfHdr[] =
|
||||
ACPI_DMTABLE_INFO AcpiDmTableInfoAsf0[] =
|
||||
{
|
||||
{ACPI_DMT_UINT8, ACPI_ASF0_OFFSET (MinResetValue), "Minimum Reset Value"},
|
||||
{ACPI_DMT_UINT8, ACPI_ASF0_OFFSET (MinResetValue), "Minimum Polling Interval"},
|
||||
{ACPI_DMT_UINT8, ACPI_ASF0_OFFSET (MinPollInterval), "Minimum Polling Interval"},
|
||||
{ACPI_DMT_UINT16, ACPI_ASF0_OFFSET (SystemId), "System ID"},
|
||||
{ACPI_DMT_UINT32, ACPI_ASF0_OFFSET (SystemId), "Manufacturer ID"},
|
||||
{ACPI_DMT_UINT32, ACPI_ASF0_OFFSET (MfgId), "Manufacturer ID"},
|
||||
{ACPI_DMT_UINT8, ACPI_ASF0_OFFSET (Flags), "Flags"},
|
||||
{ACPI_DMT_UINT24, ACPI_ASF0_OFFSET (Reserved2[0]), "Reserved"},
|
||||
{ACPI_DMT_EXIT, 0, NULL}
|
||||
@ -583,8 +596,8 @@ ACPI_DMTABLE_INFO AcpiDmTableInfoCpep[] =
|
||||
|
||||
ACPI_DMTABLE_INFO AcpiDmTableInfoCpep0[] =
|
||||
{
|
||||
{ACPI_DMT_UINT8, ACPI_CPEP0_OFFSET (Type), "Subtable Type"},
|
||||
{ACPI_DMT_UINT8, ACPI_CPEP0_OFFSET (Length), "Length"},
|
||||
{ACPI_DMT_UINT8, ACPI_CPEP0_OFFSET (Header.Type), "Subtable Type"},
|
||||
{ACPI_DMT_UINT8, ACPI_CPEP0_OFFSET (Header.Length), "Length"},
|
||||
{ACPI_DMT_UINT8, ACPI_CPEP0_OFFSET (Id), "Processor ID"},
|
||||
{ACPI_DMT_UINT8, ACPI_CPEP0_OFFSET (Eid), "Processor EID"},
|
||||
{ACPI_DMT_UINT32, ACPI_CPEP0_OFFSET (Interval), "Polling Interval"},
|
||||
@ -675,6 +688,16 @@ ACPI_DMTABLE_INFO AcpiDmTableInfoDmar2[] =
|
||||
{ACPI_DMT_EXIT, 0, NULL}
|
||||
};
|
||||
|
||||
/* 3: Remapping Hardware Static Affinity Structure */
|
||||
|
||||
ACPI_DMTABLE_INFO AcpiDmTableInfoDmar3[] =
|
||||
{
|
||||
{ACPI_DMT_UINT32, ACPI_DMAR3_OFFSET (Reserved), "Reserved"},
|
||||
{ACPI_DMT_UINT64, ACPI_DMAR3_OFFSET (BaseAddress), "Base Address"},
|
||||
{ACPI_DMT_UINT32, ACPI_DMAR3_OFFSET (ProximityDomain), "Proximity Domain"},
|
||||
{ACPI_DMT_EXIT, 0, NULL}
|
||||
};
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
*
|
||||
@ -702,7 +725,8 @@ ACPI_DMTABLE_INFO AcpiDmTableInfoEcdt[] =
|
||||
ACPI_DMTABLE_INFO AcpiDmTableInfoEinj[] =
|
||||
{
|
||||
{ACPI_DMT_UINT32, ACPI_EINJ_OFFSET (HeaderLength), "Injection Header Length"},
|
||||
{ACPI_DMT_UINT32, ACPI_EINJ_OFFSET (Reserved), "Reserved"},
|
||||
{ACPI_DMT_UINT8, ACPI_EINJ_OFFSET (Flags), "Flags"},
|
||||
{ACPI_DMT_UINT24, ACPI_EINJ_OFFSET (Reserved[0]), "Reserved"},
|
||||
{ACPI_DMT_UINT32, ACPI_EINJ_OFFSET (Entries), "Injection Entry Count"},
|
||||
{ACPI_DMT_EXIT, 0, NULL}
|
||||
};
|
||||
@ -747,97 +771,84 @@ ACPI_DMTABLE_INFO AcpiDmTableInfoHest[] =
|
||||
{ACPI_DMT_EXIT, 0, NULL}
|
||||
};
|
||||
|
||||
/* Common HEST structures for subtables */
|
||||
|
||||
#define ACPI_DM_HEST_HEADER \
|
||||
{ACPI_DMT_HEST, ACPI_HEST0_OFFSET (Header.Type), "Subtable Type"}, \
|
||||
{ACPI_DMT_UINT16, ACPI_HEST0_OFFSET (Header.SourceId), "Source Id"}
|
||||
|
||||
#define ACPI_DM_HEST_AER \
|
||||
{ACPI_DMT_UINT16, ACPI_HEST6_OFFSET (Aer.Reserved1), "Reserved"}, \
|
||||
{ACPI_DMT_UINT8, ACPI_HEST6_OFFSET (Aer.Flags), "Flags"}, \
|
||||
{ACPI_DMT_UINT8, ACPI_HEST6_OFFSET (Aer.Enabled), "Enabled"}, \
|
||||
{ACPI_DMT_UINT32, ACPI_HEST6_OFFSET (Aer.RecordsToPreallocate), "Records To Preallocate"}, \
|
||||
{ACPI_DMT_UINT32, ACPI_HEST6_OFFSET (Aer.MaxSectionsPerRecord), "Max Sections Per Record"}, \
|
||||
{ACPI_DMT_UINT32, ACPI_HEST6_OFFSET (Aer.Bus), "Bus"}, \
|
||||
{ACPI_DMT_UINT16, ACPI_HEST6_OFFSET (Aer.Device), "Device"}, \
|
||||
{ACPI_DMT_UINT16, ACPI_HEST6_OFFSET (Aer.Function), "Function"}, \
|
||||
{ACPI_DMT_UINT16, ACPI_HEST6_OFFSET (Aer.DeviceControl), "DeviceControl"}, \
|
||||
{ACPI_DMT_UINT16, ACPI_HEST6_OFFSET (Aer.Reserved2), "Reserved"}, \
|
||||
{ACPI_DMT_UINT32, ACPI_HEST6_OFFSET (Aer.UncorrectableMask), "Uncorrectable Mask"}, \
|
||||
{ACPI_DMT_UINT32, ACPI_HEST6_OFFSET (Aer.UncorrectableSeverity), "Uncorrectable Severity"}, \
|
||||
{ACPI_DMT_UINT32, ACPI_HEST6_OFFSET (Aer.CorrectableMask), "Correctable Mask"}, \
|
||||
{ACPI_DMT_UINT32, ACPI_HEST6_OFFSET (Aer.AdvancedCapabilities), "Advanced Capabilities"}
|
||||
|
||||
|
||||
/* HEST Subtables */
|
||||
|
||||
/* 0: XPF Machine Check Exception */
|
||||
/* 0: IA32 Machine Check Exception */
|
||||
|
||||
ACPI_DMTABLE_INFO AcpiDmTableInfoHest0[] =
|
||||
{
|
||||
{ACPI_DMT_HEST, ACPI_HEST0_OFFSET (Header.Type), "Subtable Type"},
|
||||
{ACPI_DMT_UINT16, ACPI_HEST0_OFFSET (SourceId), "Source Id"},
|
||||
{ACPI_DMT_UINT16, ACPI_HEST0_OFFSET (ConfigWriteEnable), "Configuration Write Enable"},
|
||||
ACPI_DM_HEST_HEADER,
|
||||
{ACPI_DMT_UINT16, ACPI_HEST0_OFFSET (Reserved1), "Reserved"},
|
||||
{ACPI_DMT_UINT8, ACPI_HEST0_OFFSET (Flags), "Flags"},
|
||||
{ACPI_DMT_UINT8, ACPI_HEST0_OFFSET (Reserved1), "Reserved"},
|
||||
{ACPI_DMT_UINT32, ACPI_HEST0_OFFSET (RecordsToPreAllocate), "Records To Preallocate"},
|
||||
{ACPI_DMT_UINT8, ACPI_HEST0_OFFSET (Enabled), "Enabled"},
|
||||
{ACPI_DMT_UINT32, ACPI_HEST0_OFFSET (RecordsToPreallocate), "Records To Preallocate"},
|
||||
{ACPI_DMT_UINT32, ACPI_HEST0_OFFSET (MaxSectionsPerRecord), "Max Sections Per Record"},
|
||||
{ACPI_DMT_UINT64, ACPI_HEST0_OFFSET (GlobalCapabilityData), "Global Capability Data"},
|
||||
{ACPI_DMT_UINT64, ACPI_HEST0_OFFSET (GlobalControlData), "Global Control Data"},
|
||||
{ACPI_DMT_UINT8, ACPI_HEST0_OFFSET (NumHardwareBanks), "Num Hardware Banks"},
|
||||
{ACPI_DMT_UINT56, ACPI_HEST0_OFFSET (Reserved2), "Reserved"},
|
||||
{ACPI_DMT_UINT56, ACPI_HEST0_OFFSET (Reserved3[0]), "Reserved"},
|
||||
{ACPI_DMT_EXIT, 0, NULL}
|
||||
};
|
||||
|
||||
/* 1: XPF Corrected Machine Check */
|
||||
/* 1: IA32 Corrected Machine Check */
|
||||
|
||||
ACPI_DMTABLE_INFO AcpiDmTableInfoHest1[] =
|
||||
{
|
||||
{ACPI_DMT_HEST, ACPI_HEST1_OFFSET (Header.Type), "Subtable Type"},
|
||||
{ACPI_DMT_UINT16, ACPI_HEST1_OFFSET (SourceId), "Source Id"},
|
||||
{ACPI_DMT_UINT16, ACPI_HEST1_OFFSET (ConfigWriteEnable), "Configuration Write Enable"},
|
||||
ACPI_DM_HEST_HEADER,
|
||||
{ACPI_DMT_UINT16, ACPI_HEST1_OFFSET (Reserved1), "Reserved"},
|
||||
{ACPI_DMT_UINT8, ACPI_HEST1_OFFSET (Flags), "Flags"},
|
||||
{ACPI_DMT_UINT8, ACPI_HEST1_OFFSET (Enabled), "Enabled"},
|
||||
{ACPI_DMT_UINT32, ACPI_HEST1_OFFSET (RecordsToPreAllocate), "Records To Preallocate"},
|
||||
{ACPI_DMT_UINT32, ACPI_HEST1_OFFSET (RecordsToPreallocate), "Records To Preallocate"},
|
||||
{ACPI_DMT_UINT32, ACPI_HEST1_OFFSET (MaxSectionsPerRecord), "Max Sections Per Record"},
|
||||
{ACPI_DMT_HESTNTFY, ACPI_HEST1_OFFSET (Notify), "Notify"},
|
||||
{ACPI_DMT_UINT8, ACPI_HEST1_OFFSET (NumHardwareBanks), "Num Hardware Banks"},
|
||||
{ACPI_DMT_UINT24, ACPI_HEST1_OFFSET (Reserved), "Reserved"},
|
||||
{ACPI_DMT_UINT24, ACPI_HEST1_OFFSET (Reserved2[0]), "Reserved"},
|
||||
{ACPI_DMT_EXIT, 0, NULL}
|
||||
};
|
||||
|
||||
/* 3: XPF Non-Maskable Interrupt */
|
||||
/* 2: IA32 Non-Maskable Interrupt */
|
||||
|
||||
ACPI_DMTABLE_INFO AcpiDmTableInfoHest3[] =
|
||||
ACPI_DMTABLE_INFO AcpiDmTableInfoHest2[] =
|
||||
{
|
||||
{ACPI_DMT_HEST, ACPI_HEST3_OFFSET (Header.Type), "Subtable Type"},
|
||||
{ACPI_DMT_UINT16, ACPI_HEST3_OFFSET (SourceId), "Source Id"},
|
||||
{ACPI_DMT_UINT32, ACPI_HEST3_OFFSET (Reserved), "Reserved"},
|
||||
{ACPI_DMT_UINT32, ACPI_HEST3_OFFSET (RecordsToPreAllocate), "Records To Preallocate"},
|
||||
{ACPI_DMT_UINT32, ACPI_HEST3_OFFSET (MaxSectionsPerRecord), "Max Sections Per Record"},
|
||||
{ACPI_DMT_UINT32, ACPI_HEST3_OFFSET (MaxRawDataLength), "Max Raw Data Length"},
|
||||
ACPI_DM_HEST_HEADER,
|
||||
{ACPI_DMT_UINT32, ACPI_HEST2_OFFSET (Reserved), "Reserved"},
|
||||
{ACPI_DMT_UINT32, ACPI_HEST2_OFFSET (RecordsToPreallocate), "Records To Preallocate"},
|
||||
{ACPI_DMT_UINT32, ACPI_HEST2_OFFSET (MaxSectionsPerRecord), "Max Sections Per Record"},
|
||||
{ACPI_DMT_UINT32, ACPI_HEST2_OFFSET (MaxRawDataLength), "Max Raw Data Length"},
|
||||
{ACPI_DMT_EXIT, 0, NULL}
|
||||
};
|
||||
|
||||
/* 4: IPF Corrected Machine Check */
|
||||
|
||||
ACPI_DMTABLE_INFO AcpiDmTableInfoHest4[] =
|
||||
{
|
||||
{ACPI_DMT_HEST, ACPI_HEST4_OFFSET (Header.Type), "Subtable Type"},
|
||||
{ACPI_DMT_UINT8, ACPI_HEST4_OFFSET (Enabled), "Enabled"},
|
||||
{ACPI_DMT_UINT8, ACPI_HEST4_OFFSET (Reserved), "Reserved"},
|
||||
{ACPI_DMT_EXIT, 0, NULL}
|
||||
};
|
||||
|
||||
/* 5: IPF Corrected Platform Error */
|
||||
|
||||
ACPI_DMTABLE_INFO AcpiDmTableInfoHest5[] =
|
||||
{
|
||||
{ACPI_DMT_HEST, ACPI_HEST5_OFFSET (Header.Type), "Subtable Type"},
|
||||
{ACPI_DMT_UINT8, ACPI_HEST5_OFFSET (Enabled), "Enabled"},
|
||||
{ACPI_DMT_UINT8, ACPI_HEST5_OFFSET (Reserved), "Reserved"},
|
||||
{ACPI_DMT_EXIT, 0, NULL}
|
||||
};
|
||||
|
||||
/* 6: PCI Express Root Port AER */
|
||||
|
||||
ACPI_DMTABLE_INFO AcpiDmTableInfoHest6[] =
|
||||
{
|
||||
{ACPI_DMT_HEST, ACPI_HEST6_OFFSET (Header.Type), "Subtable Type"},
|
||||
{ACPI_DMT_UINT16, ACPI_HEST6_OFFSET (Aer.SourceId), "Source Id"},
|
||||
{ACPI_DMT_UINT16, ACPI_HEST6_OFFSET (Aer.ConfigWriteEnable), "Configuration Write Enable"},
|
||||
{ACPI_DMT_UINT8, ACPI_HEST6_OFFSET (Aer.Flags), "Flags"},
|
||||
{ACPI_DMT_UINT8, ACPI_HEST6_OFFSET (Aer.Enabled), "Enabled"},
|
||||
{ACPI_DMT_UINT32, ACPI_HEST6_OFFSET (Aer.RecordsToPreAllocate), "Records To Preallocate"},
|
||||
{ACPI_DMT_UINT32, ACPI_HEST6_OFFSET (Aer.MaxSectionsPerRecord), "Max Sections Per Record"},
|
||||
{ACPI_DMT_UINT32, ACPI_HEST6_OFFSET (Aer.Bus), "Bus"},
|
||||
{ACPI_DMT_UINT16, ACPI_HEST6_OFFSET (Aer.Device), "Device"},
|
||||
{ACPI_DMT_UINT16, ACPI_HEST6_OFFSET (Aer.Function), "Function"},
|
||||
{ACPI_DMT_UINT16, ACPI_HEST6_OFFSET (Aer.DeviceControl), "DeviceControl"},
|
||||
{ACPI_DMT_UINT16, ACPI_HEST6_OFFSET (Aer.Reserved), "Reserved"},
|
||||
{ACPI_DMT_UINT32, ACPI_HEST6_OFFSET (Aer.UncorrectableErrorMask), "Uncorrectable Error Mask"},
|
||||
{ACPI_DMT_UINT32, ACPI_HEST6_OFFSET (Aer.UncorrectableErrorSeverity), "Uncorrectable Error Severity"},
|
||||
{ACPI_DMT_UINT32, ACPI_HEST6_OFFSET (Aer.CorrectableErrorMask), "Correctable Error Mask"},
|
||||
{ACPI_DMT_UINT32, ACPI_HEST6_OFFSET (Aer.AdvancedErrorCapabilities), "Advanced Error Capabilities"},
|
||||
{ACPI_DMT_UINT32, ACPI_HEST6_OFFSET (RootErrorCommand), "Root Error Command"},
|
||||
ACPI_DM_HEST_HEADER,
|
||||
ACPI_DM_HEST_AER,
|
||||
{ACPI_DMT_UINT32, ACPI_HEST6_OFFSET (RootErrorCommand), "Root Error Command"},
|
||||
{ACPI_DMT_EXIT, 0, NULL}
|
||||
};
|
||||
|
||||
@ -845,22 +856,8 @@ ACPI_DMTABLE_INFO AcpiDmTableInfoHest6[] =
|
||||
|
||||
ACPI_DMTABLE_INFO AcpiDmTableInfoHest7[] =
|
||||
{
|
||||
{ACPI_DMT_HEST, ACPI_HEST6_OFFSET (Header.Type), "Subtable Type"},
|
||||
{ACPI_DMT_UINT16, ACPI_HEST6_OFFSET (Aer.SourceId), "Source Id"},
|
||||
{ACPI_DMT_UINT16, ACPI_HEST6_OFFSET (Aer.ConfigWriteEnable), "Configuration Write Enable"},
|
||||
{ACPI_DMT_UINT8, ACPI_HEST6_OFFSET (Aer.Flags), "Flags"},
|
||||
{ACPI_DMT_UINT8, ACPI_HEST6_OFFSET (Aer.Enabled), "Enabled"},
|
||||
{ACPI_DMT_UINT32, ACPI_HEST6_OFFSET (Aer.RecordsToPreAllocate), "Records To Preallocate"},
|
||||
{ACPI_DMT_UINT32, ACPI_HEST6_OFFSET (Aer.MaxSectionsPerRecord), "Max Sections Per Record"},
|
||||
{ACPI_DMT_UINT32, ACPI_HEST6_OFFSET (Aer.Bus), "Bus"},
|
||||
{ACPI_DMT_UINT16, ACPI_HEST6_OFFSET (Aer.Device), "Device"},
|
||||
{ACPI_DMT_UINT16, ACPI_HEST6_OFFSET (Aer.Function), "Function"},
|
||||
{ACPI_DMT_UINT16, ACPI_HEST6_OFFSET (Aer.DeviceControl), "DeviceControl"},
|
||||
{ACPI_DMT_UINT16, ACPI_HEST6_OFFSET (Aer.Reserved), "Reserved"},
|
||||
{ACPI_DMT_UINT32, ACPI_HEST6_OFFSET (Aer.UncorrectableErrorMask), "Uncorrectable Error Mask"},
|
||||
{ACPI_DMT_UINT32, ACPI_HEST6_OFFSET (Aer.UncorrectableErrorSeverity), "Uncorrectable Error Severity"},
|
||||
{ACPI_DMT_UINT32, ACPI_HEST6_OFFSET (Aer.CorrectableErrorMask), "Correctable Error Mask"},
|
||||
{ACPI_DMT_UINT32, ACPI_HEST6_OFFSET (Aer.AdvancedErrorCapabilities), "Advanced Error Capabilities"},
|
||||
ACPI_DM_HEST_HEADER,
|
||||
ACPI_DM_HEST_AER,
|
||||
{ACPI_DMT_EXIT, 0, NULL}
|
||||
};
|
||||
|
||||
@ -868,25 +865,11 @@ ACPI_DMTABLE_INFO AcpiDmTableInfoHest7[] =
|
||||
|
||||
ACPI_DMTABLE_INFO AcpiDmTableInfoHest8[] =
|
||||
{
|
||||
{ACPI_DMT_HEST, ACPI_HEST6_OFFSET (Header.Type), "Subtable Type"},
|
||||
{ACPI_DMT_UINT16, ACPI_HEST6_OFFSET (Aer.SourceId), "Source Id"},
|
||||
{ACPI_DMT_UINT16, ACPI_HEST6_OFFSET (Aer.ConfigWriteEnable), "Configuration Write Enable"},
|
||||
{ACPI_DMT_UINT8, ACPI_HEST6_OFFSET (Aer.Flags), "Flags"},
|
||||
{ACPI_DMT_UINT8, ACPI_HEST6_OFFSET (Aer.Enabled), "Enabled"},
|
||||
{ACPI_DMT_UINT32, ACPI_HEST6_OFFSET (Aer.RecordsToPreAllocate), "Records To Preallocate"},
|
||||
{ACPI_DMT_UINT32, ACPI_HEST6_OFFSET (Aer.MaxSectionsPerRecord), "Max Sections Per Record"},
|
||||
{ACPI_DMT_UINT32, ACPI_HEST6_OFFSET (Aer.Bus), "Bus"},
|
||||
{ACPI_DMT_UINT16, ACPI_HEST6_OFFSET (Aer.Device), "Device"},
|
||||
{ACPI_DMT_UINT16, ACPI_HEST6_OFFSET (Aer.Function), "Function"},
|
||||
{ACPI_DMT_UINT16, ACPI_HEST6_OFFSET (Aer.DeviceControl), "DeviceControl"},
|
||||
{ACPI_DMT_UINT16, ACPI_HEST6_OFFSET (Aer.Reserved), "Reserved"},
|
||||
{ACPI_DMT_UINT32, ACPI_HEST6_OFFSET (Aer.UncorrectableErrorMask), "Uncorrectable Error Mask"},
|
||||
{ACPI_DMT_UINT32, ACPI_HEST6_OFFSET (Aer.UncorrectableErrorSeverity), "Uncorrectable Error Severity"},
|
||||
{ACPI_DMT_UINT32, ACPI_HEST6_OFFSET (Aer.CorrectableErrorMask), "Correctable Error Mask"},
|
||||
{ACPI_DMT_UINT32, ACPI_HEST6_OFFSET (Aer.AdvancedErrorCapabilities), "Advanced Error Capabilities"},
|
||||
{ACPI_DMT_UINT32, ACPI_HEST8_OFFSET (SecondaryUncorrectableErrorMask), "2nd Uncorrectable Err Mask"},
|
||||
{ACPI_DMT_UINT32, ACPI_HEST8_OFFSET (SecondaryUncorrectableErrorSeverity), "2nd Uncorrectable Err Severity"},
|
||||
{ACPI_DMT_UINT32, ACPI_HEST8_OFFSET (SecondaryAdvancedCapabilities), "2nd Advanced Capabilities"},
|
||||
ACPI_DM_HEST_HEADER,
|
||||
ACPI_DM_HEST_AER,
|
||||
{ACPI_DMT_UINT32, ACPI_HEST8_OFFSET (UncorrectableMask2), "2nd Uncorrectable Mask"},
|
||||
{ACPI_DMT_UINT32, ACPI_HEST8_OFFSET (UncorrectableSeverity2), "2nd Uncorrectable Severity"},
|
||||
{ACPI_DMT_UINT32, ACPI_HEST8_OFFSET (AdvancedCapabilities2), "2nd Advanced Capabilities"},
|
||||
{ACPI_DMT_EXIT, 0, NULL}
|
||||
};
|
||||
|
||||
@ -894,21 +877,20 @@ ACPI_DMTABLE_INFO AcpiDmTableInfoHest8[] =
|
||||
|
||||
ACPI_DMTABLE_INFO AcpiDmTableInfoHest9[] =
|
||||
{
|
||||
{ACPI_DMT_HEST, ACPI_HEST9_OFFSET (Header.Type), "Subtable Type"},
|
||||
{ACPI_DMT_UINT16, ACPI_HEST9_OFFSET (SourceId), "Source Id"},
|
||||
ACPI_DM_HEST_HEADER,
|
||||
{ACPI_DMT_UINT16, ACPI_HEST9_OFFSET (RelatedSourceId), "Related Source Id"},
|
||||
{ACPI_DMT_UINT8, ACPI_HEST9_OFFSET (ConfigWriteEnable), "Configuration Write Enable"},
|
||||
{ACPI_DMT_UINT8, ACPI_HEST9_OFFSET (Reserved), "Reserved"},
|
||||
{ACPI_DMT_UINT8, ACPI_HEST9_OFFSET (Enabled), "Enabled"},
|
||||
{ACPI_DMT_UINT32, ACPI_HEST9_OFFSET (RecordsToPreAllocate), "Records To Preallocate"},
|
||||
{ACPI_DMT_UINT32, ACPI_HEST9_OFFSET (RecordsToPreallocate), "Records To Preallocate"},
|
||||
{ACPI_DMT_UINT32, ACPI_HEST9_OFFSET (MaxSectionsPerRecord), "Max Sections Per Record"},
|
||||
{ACPI_DMT_UINT32, ACPI_HEST9_OFFSET (MaxRawDataLength), "Max Raw Data Length"},
|
||||
{ACPI_DMT_GAS, ACPI_HEST9_OFFSET (ErrorStatusAddress), "Error Status Address"},
|
||||
{ACPI_DMT_HESTNTFY, ACPI_HEST9_OFFSET (Notify), "Notify"},
|
||||
{ACPI_DMT_UINT32, ACPI_HEST9_OFFSET (ErrorStatusBlockLength), "Error Status Block Length"},
|
||||
{ACPI_DMT_UINT32, ACPI_HEST9_OFFSET (ErrorBlockLength), "Error Status Block Length"},
|
||||
{ACPI_DMT_EXIT, 0, NULL}
|
||||
};
|
||||
|
||||
ACPI_DMTABLE_INFO AcpiDmTableInfoHestNotify[10] =
|
||||
ACPI_DMTABLE_INFO AcpiDmTableInfoHestNotify[] =
|
||||
{
|
||||
{ACPI_DMT_HESTNTYP, ACPI_HESTN_OFFSET (Type), "Notify Type"},
|
||||
{ACPI_DMT_UINT8, ACPI_HESTN_OFFSET (Length), "Notify Length"},
|
||||
@ -936,9 +918,104 @@ ACPI_DMTABLE_INFO AcpiDmTableInfoHpet[] =
|
||||
{ACPI_DMT_UINT8, ACPI_HPET_OFFSET (Sequence), "Sequence Number"},
|
||||
{ACPI_DMT_UINT16, ACPI_HPET_OFFSET (MinimumTick), "Minimum Clock Ticks"},
|
||||
{ACPI_DMT_UINT8, ACPI_HPET_OFFSET (Flags), "Flags (decoded below)"},
|
||||
{ACPI_DMT_FLAG0, ACPI_HPET_FLAG_OFFSET (Flags,0), "Page Protect"},
|
||||
{ACPI_DMT_FLAG1, ACPI_HPET_FLAG_OFFSET (Flags,0), "4K Page Protect"},
|
||||
{ACPI_DMT_FLAG2, ACPI_HPET_FLAG_OFFSET (Flags,0), "64K Page Protect"},
|
||||
{ACPI_DMT_FLAG0, ACPI_HPET_FLAG_OFFSET (Flags,0), "4K Page Protect"},
|
||||
{ACPI_DMT_FLAG1, ACPI_HPET_FLAG_OFFSET (Flags,0), "64K Page Protect"},
|
||||
{ACPI_DMT_EXIT, 0, NULL}
|
||||
};
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
*
|
||||
* IVRS - I/O Virtualization Reporting Structure
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
ACPI_DMTABLE_INFO AcpiDmTableInfoIvrs[] =
|
||||
{
|
||||
{ACPI_DMT_UINT32, ACPI_IVRS_OFFSET (Info), "Virtualization Info"},
|
||||
{ACPI_DMT_UINT64, ACPI_IVRS_OFFSET (Reserved), "Reserved"},
|
||||
{ACPI_DMT_EXIT, 0, NULL}
|
||||
};
|
||||
|
||||
/* Common Subtable header (one per Subtable) */
|
||||
|
||||
ACPI_DMTABLE_INFO AcpiDmTableInfoIvrsHdr[] =
|
||||
{
|
||||
{ACPI_DMT_IVRS, ACPI_IVRSH_OFFSET (Type), "Subtable Type"},
|
||||
{ACPI_DMT_UINT8, ACPI_IVRSH_OFFSET (Flags), "Flags"},
|
||||
{ACPI_DMT_UINT16, ACPI_IVRSH_OFFSET (Length), "Length"},
|
||||
{ACPI_DMT_UINT16, ACPI_IVRSH_OFFSET (DeviceId), "DeviceId"},
|
||||
{ACPI_DMT_EXIT, 0, NULL}
|
||||
};
|
||||
|
||||
/* IVRS subtables */
|
||||
|
||||
/* 0x10: I/O Virtualization Hardware Definition (IVHD) Block */
|
||||
|
||||
ACPI_DMTABLE_INFO AcpiDmTableInfoIvrs0[] =
|
||||
{
|
||||
{ACPI_DMT_UINT16, ACPI_IVRS0_OFFSET (CapabilityOffset), "Capability Offset"},
|
||||
{ACPI_DMT_UINT64, ACPI_IVRS0_OFFSET (BaseAddress), "Base Address"},
|
||||
{ACPI_DMT_UINT16, ACPI_IVRS0_OFFSET (PciSegmentGroup), "PCI Segment Group"},
|
||||
{ACPI_DMT_UINT16, ACPI_IVRS0_OFFSET (Info), "Virtualization Info"},
|
||||
{ACPI_DMT_UINT32, ACPI_IVRS0_OFFSET (Reserved), "Reserved"},
|
||||
{ACPI_DMT_EXIT, 0, NULL}
|
||||
};
|
||||
|
||||
/* 0x20, 0x21, 0x22: I/O Virtualization Memory Definition (IVMD) Block */
|
||||
|
||||
ACPI_DMTABLE_INFO AcpiDmTableInfoIvrs1[] =
|
||||
{
|
||||
{ACPI_DMT_UINT16, ACPI_IVRS1_OFFSET (AuxData), "Auxiliary Data"},
|
||||
{ACPI_DMT_UINT64, ACPI_IVRS1_OFFSET (Reserved), "Reserved"},
|
||||
{ACPI_DMT_UINT64, ACPI_IVRS1_OFFSET (StartAddress), "Start Address"},
|
||||
{ACPI_DMT_UINT64, ACPI_IVRS1_OFFSET (MemoryLength), "Memory Length"},
|
||||
{ACPI_DMT_EXIT, 0, NULL}
|
||||
};
|
||||
|
||||
/* Device entry header for IVHD block */
|
||||
|
||||
#define ACPI_DMT_IVRS_DE_HEADER \
|
||||
{ACPI_DMT_UINT8, ACPI_IVRSD_OFFSET (Type), "Entry Type"}, \
|
||||
{ACPI_DMT_UINT16, ACPI_IVRSD_OFFSET (Id), "Device ID"}, \
|
||||
{ACPI_DMT_UINT8, ACPI_IVRSD_OFFSET (DataSetting), "Data Setting"}
|
||||
|
||||
/* 4-byte device entry */
|
||||
|
||||
ACPI_DMTABLE_INFO AcpiDmTableInfoIvrs4[] =
|
||||
{
|
||||
ACPI_DMT_IVRS_DE_HEADER,
|
||||
{ACPI_DMT_EXIT, 0, NULL}
|
||||
};
|
||||
|
||||
/* 8-byte device entry */
|
||||
|
||||
ACPI_DMTABLE_INFO AcpiDmTableInfoIvrs8a[] =
|
||||
{
|
||||
ACPI_DMT_IVRS_DE_HEADER,
|
||||
{ACPI_DMT_UINT8, ACPI_IVRS8A_OFFSET (Reserved1), "Reserved"},
|
||||
{ACPI_DMT_UINT16, ACPI_IVRS8A_OFFSET (UsedId), "Source Used Device ID"},
|
||||
{ACPI_DMT_UINT8, ACPI_IVRS8A_OFFSET (Reserved2), "Reserved"},
|
||||
{ACPI_DMT_EXIT, 0, NULL}
|
||||
};
|
||||
|
||||
/* 8-byte device entry */
|
||||
|
||||
ACPI_DMTABLE_INFO AcpiDmTableInfoIvrs8b[] =
|
||||
{
|
||||
ACPI_DMT_IVRS_DE_HEADER,
|
||||
{ACPI_DMT_UINT32, ACPI_IVRS8B_OFFSET (ExtendedData), "Extended Data"},
|
||||
{ACPI_DMT_EXIT, 0, NULL}
|
||||
};
|
||||
|
||||
/* 8-byte device entry */
|
||||
|
||||
ACPI_DMTABLE_INFO AcpiDmTableInfoIvrs8c[] =
|
||||
{
|
||||
ACPI_DMT_IVRS_DE_HEADER,
|
||||
{ACPI_DMT_UINT8, ACPI_IVRS8C_OFFSET (Handle), "Handle"},
|
||||
{ACPI_DMT_UINT16, ACPI_IVRS8C_OFFSET (UsedId), "Source Used Device ID"},
|
||||
{ACPI_DMT_UINT8, ACPI_IVRS8C_OFFSET (Variety), "Variety"},
|
||||
{ACPI_DMT_EXIT, 0, NULL}
|
||||
};
|
||||
|
||||
@ -1127,6 +1204,35 @@ ACPI_DMTABLE_INFO AcpiDmTableInfoMcfg0[] =
|
||||
};
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
*
|
||||
* MSCT - Maximum System Characteristics Table (ACPI 4.0)
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
ACPI_DMTABLE_INFO AcpiDmTableInfoMsct[] =
|
||||
{
|
||||
{ACPI_DMT_UINT32, ACPI_MSCT_OFFSET (ProximityOffset), "Proximity Offset"},
|
||||
{ACPI_DMT_UINT32, ACPI_MSCT_OFFSET (MaxProximityDomains), "Max Proximity Domains"},
|
||||
{ACPI_DMT_UINT32, ACPI_MSCT_OFFSET (MaxClockDomains), "Max Clock Domains"},
|
||||
{ACPI_DMT_UINT64, ACPI_MSCT_OFFSET (MaxAddress), "Max Physical Address"},
|
||||
{ACPI_DMT_EXIT, 0, NULL}
|
||||
};
|
||||
|
||||
/* Subtable - Maximum Proximity Domain Information. Version 1 */
|
||||
|
||||
ACPI_DMTABLE_INFO AcpiDmTableInfoMsct0[] =
|
||||
{
|
||||
{ACPI_DMT_UINT8, ACPI_MSCT0_OFFSET (Revision), "Revision"},
|
||||
{ACPI_DMT_UINT8, ACPI_MSCT0_OFFSET (Length), "Length"},
|
||||
{ACPI_DMT_UINT32, ACPI_MSCT0_OFFSET (RangeStart), "Domain Range Start"},
|
||||
{ACPI_DMT_UINT32, ACPI_MSCT0_OFFSET (RangeEnd), "Domain Range End"},
|
||||
{ACPI_DMT_UINT32, ACPI_MSCT0_OFFSET (ProcessorCapacity), "Processor Capacity"},
|
||||
{ACPI_DMT_UINT64, ACPI_MSCT0_OFFSET (MemoryCapacity), "Memory Capacity"},
|
||||
{ACPI_DMT_EXIT, 0, NULL}
|
||||
};
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
*
|
||||
* SBST - Smart Battery Specification Table
|
||||
@ -1207,8 +1313,8 @@ ACPI_DMTABLE_INFO AcpiDmTableInfoSpcr[] =
|
||||
|
||||
ACPI_DMTABLE_INFO AcpiDmTableInfoSpmi[] =
|
||||
{
|
||||
{ACPI_DMT_UINT8, ACPI_SPMI_OFFSET (Reserved), "Reserved"},
|
||||
{ACPI_DMT_UINT8, ACPI_SPMI_OFFSET (InterfaceType), "Interface Type"},
|
||||
{ACPI_DMT_UINT8, ACPI_SPMI_OFFSET (Reserved), "Reserved"},
|
||||
{ACPI_DMT_UINT16, ACPI_SPMI_OFFSET (SpecRevision), "IPMI Spec Version"},
|
||||
{ACPI_DMT_UINT8, ACPI_SPMI_OFFSET (InterruptType), "Interrupt Type"},
|
||||
{ACPI_DMT_UINT8, ACPI_SPMI_OFFSET (GpeNumber), "GPE Number"},
|
||||
@ -1220,6 +1326,7 @@ ACPI_DMTABLE_INFO AcpiDmTableInfoSpmi[] =
|
||||
{ACPI_DMT_UINT8, ACPI_SPMI_OFFSET (PciBus), "PCI Bus"},
|
||||
{ACPI_DMT_UINT8, ACPI_SPMI_OFFSET (PciDevice), "PCI Device"},
|
||||
{ACPI_DMT_UINT8, ACPI_SPMI_OFFSET (PciFunction), "PCI Function"},
|
||||
{ACPI_DMT_UINT8, ACPI_SPMI_OFFSET (Reserved2), "Reserved"},
|
||||
{ACPI_DMT_EXIT, 0, NULL}
|
||||
};
|
||||
|
||||
@ -1309,6 +1416,74 @@ ACPI_DMTABLE_INFO AcpiDmTableInfoTcpa[] =
|
||||
};
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
*
|
||||
* UEFI - UEFI Boot optimization Table
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
ACPI_DMTABLE_INFO AcpiDmTableInfoUefi[] =
|
||||
{
|
||||
{ACPI_DMT_BUF16, ACPI_UEFI_OFFSET (Identifier[0]), "UUID Identifier"},
|
||||
{ACPI_DMT_UINT16, ACPI_UEFI_OFFSET (DataOffset), "Data Offset"},
|
||||
{ACPI_DMT_EXIT, 0, NULL}
|
||||
};
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
*
|
||||
* WAET - Windows ACPI Emulated devices Table
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
ACPI_DMTABLE_INFO AcpiDmTableInfoWaet[] =
|
||||
{
|
||||
{ACPI_DMT_UINT32, ACPI_WAET_OFFSET (Flags), "Flags (decoded below)"},
|
||||
{ACPI_DMT_FLAG0, ACPI_WAET_OFFSET (Flags), "RTC needs no INT ack"},
|
||||
{ACPI_DMT_FLAG1, ACPI_WAET_OFFSET (Flags), "PM timer, one read only"},
|
||||
{ACPI_DMT_EXIT, 0, NULL}
|
||||
};
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
*
|
||||
* WDAT - Watchdog Action Table
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
ACPI_DMTABLE_INFO AcpiDmTableInfoWdat[] =
|
||||
{
|
||||
{ACPI_DMT_UINT32, ACPI_WDAT_OFFSET (HeaderLength), "Header Length"},
|
||||
{ACPI_DMT_UINT8, ACPI_WDAT_OFFSET (PciSegment), "PCI Segment"},
|
||||
{ACPI_DMT_UINT8, ACPI_WDAT_OFFSET (PciBus), "PCI Bus"},
|
||||
{ACPI_DMT_UINT8, ACPI_WDAT_OFFSET (PciDevice), "PCI Device"},
|
||||
{ACPI_DMT_UINT8, ACPI_WDAT_OFFSET (PciFunction), "PCI Function"},
|
||||
{ACPI_DMT_UINT24, ACPI_WDAT_OFFSET (Reserved[0]), "Reserved"},
|
||||
{ACPI_DMT_UINT32, ACPI_WDAT_OFFSET (TimerPeriod), "Timer Period"},
|
||||
{ACPI_DMT_UINT32, ACPI_WDAT_OFFSET (MaxCount), "Max Count"},
|
||||
{ACPI_DMT_UINT32, ACPI_WDAT_OFFSET (MinCount), "Min Count"},
|
||||
{ACPI_DMT_UINT8, ACPI_WDAT_OFFSET (Flags), "Flags (decoded below)"},
|
||||
{ACPI_DMT_FLAG0, ACPI_WDAT_OFFSET (Flags), "Enabled"},
|
||||
{ACPI_DMT_FLAG7, ACPI_WDAT_OFFSET (Flags), "Stopped When Asleep"},
|
||||
{ACPI_DMT_UINT24, ACPI_WDAT_OFFSET (Reserved2[0]), "Reserved"},
|
||||
{ACPI_DMT_UINT32, ACPI_WDAT_OFFSET (Entries), "Watchdog Entry Count"},
|
||||
{ACPI_DMT_EXIT, 0, NULL}
|
||||
};
|
||||
|
||||
/* WDAT Subtables - Watchdog Instruction Entries */
|
||||
|
||||
ACPI_DMTABLE_INFO AcpiDmTableInfoWdat0[] =
|
||||
{
|
||||
{ACPI_DMT_UINT8, ACPI_WDAT0_OFFSET (Action), "Watchdog Action"},
|
||||
{ACPI_DMT_UINT8, ACPI_WDAT0_OFFSET (Instruction), "Instruction"},
|
||||
{ACPI_DMT_UINT16, ACPI_WDAT0_OFFSET (Reserved), "Reserved"},
|
||||
{ACPI_DMT_GAS, ACPI_WDAT0_OFFSET (RegisterRegion), "Register Region"},
|
||||
{ACPI_DMT_UINT32, ACPI_WDAT0_OFFSET (Value), "Value"},
|
||||
{ACPI_DMT_UINT32, ACPI_WDAT0_OFFSET (Mask), "Register Mask"},
|
||||
{ACPI_DMT_EXIT, 0, NULL}
|
||||
};
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
*
|
||||
* WDRT - Watchdog Resource Table
|
||||
@ -1317,19 +1492,16 @@ ACPI_DMTABLE_INFO AcpiDmTableInfoTcpa[] =
|
||||
|
||||
ACPI_DMTABLE_INFO AcpiDmTableInfoWdrt[] =
|
||||
{
|
||||
{ACPI_DMT_UINT32, ACPI_WDRT_OFFSET (HeaderLength), "Header Length"},
|
||||
{ACPI_DMT_UINT8, ACPI_WDRT_OFFSET (PciSegment), "PCI Segment"},
|
||||
{ACPI_DMT_GAS, ACPI_WDRT_OFFSET (ControlRegister), "Control Register"},
|
||||
{ACPI_DMT_GAS, ACPI_WDRT_OFFSET (CountRegister), "Count Register"},
|
||||
{ACPI_DMT_UINT16, ACPI_WDRT_OFFSET (PciDeviceId), "PCI Device ID"},
|
||||
{ACPI_DMT_UINT16, ACPI_WDRT_OFFSET (PciVendorId), "PCI Vendor ID"},
|
||||
{ACPI_DMT_UINT8, ACPI_WDRT_OFFSET (PciBus), "PCI Bus"},
|
||||
{ACPI_DMT_UINT8, ACPI_WDRT_OFFSET (PciDevice), "PCI Device"},
|
||||
{ACPI_DMT_UINT8, ACPI_WDRT_OFFSET (PciFunction), "PCI Function"},
|
||||
{ACPI_DMT_UINT32, ACPI_WDRT_OFFSET (TimerPeriod), "Timer Period"},
|
||||
{ACPI_DMT_UINT32, ACPI_WDRT_OFFSET (MaxCount), "Max Count"},
|
||||
{ACPI_DMT_UINT32, ACPI_WDRT_OFFSET (MinCount), "Min Count"},
|
||||
{ACPI_DMT_UINT8, ACPI_WDRT_OFFSET (Flags), "Flags (decoded below)"},
|
||||
{ACPI_DMT_FLAG0, ACPI_WDRT_OFFSET (Flags), "Enabled"},
|
||||
{ACPI_DMT_FLAG7, ACPI_WDRT_OFFSET (Flags), "Stopped When Asleep"},
|
||||
{ACPI_DMT_UINT24, ACPI_WDRT_OFFSET (Reserved[0]), "Reserved"},
|
||||
{ACPI_DMT_UINT32, ACPI_WDRT_OFFSET (Entries), "Watchdog Entries"},
|
||||
{ACPI_DMT_UINT8, ACPI_WDRT_OFFSET (PciSegment), "PCI Segment"},
|
||||
{ACPI_DMT_UINT16, ACPI_WDRT_OFFSET (MaxCount), "Max Count"},
|
||||
{ACPI_DMT_UINT8, ACPI_WDRT_OFFSET (Units), "Counter Units"},
|
||||
{ACPI_DMT_EXIT, 0, NULL}
|
||||
};
|
||||
|
||||
|
@ -128,7 +128,7 @@
|
||||
#define CompilerId "ASL Optimizing Compiler"
|
||||
#define DisassemblerId "AML Disassembler"
|
||||
#define CompilerCopyright "Copyright (C) 2000 - 2009 Intel Corporation"
|
||||
#define CompilerCompliance "Supports ACPI Specification Revision 3.0a"
|
||||
#define CompilerCompliance "Supports ACPI Specification Revision 4.0"
|
||||
#define CompilerName "iasl"
|
||||
#define CompilerCreatorId "INTL"
|
||||
|
||||
|
@ -119,6 +119,7 @@
|
||||
#include "actables.h"
|
||||
#include "acevents.h"
|
||||
#include "acinterp.h"
|
||||
#include "acnamesp.h"
|
||||
|
||||
#define _COMPONENT ACPI_COMPILER
|
||||
ACPI_MODULE_NAME ("aslstubs")
|
||||
@ -136,6 +137,12 @@ AeLocalGetRootPointer (
|
||||
return 0;
|
||||
}
|
||||
|
||||
void
|
||||
AcpiNsExecModuleCodeList (
|
||||
void)
|
||||
{
|
||||
}
|
||||
|
||||
ACPI_STATUS
|
||||
AcpiHwReadPort (
|
||||
ACPI_IO_ADDRESS Address,
|
||||
|
@ -211,9 +211,12 @@ AcpiDsCreateBufferField (
|
||||
Flags = ACPI_NS_NO_UPSEARCH | ACPI_NS_DONT_OPEN_SCOPE |
|
||||
ACPI_NS_ERROR_IF_FOUND;
|
||||
|
||||
/* Mark node temporary if we are executing a method */
|
||||
|
||||
if (WalkState->MethodNode)
|
||||
/*
|
||||
* Mark node temporary if we are executing a normal control
|
||||
* method. (Don't mark if this is a module-level code method)
|
||||
*/
|
||||
if (WalkState->MethodNode &&
|
||||
!(WalkState->ParseFlags & ACPI_PARSE_MODULE_LEVEL))
|
||||
{
|
||||
Flags |= ACPI_NS_TEMPORARY;
|
||||
}
|
||||
@ -566,9 +569,12 @@ AcpiDsInitFieldObjects (
|
||||
Flags = ACPI_NS_NO_UPSEARCH | ACPI_NS_DONT_OPEN_SCOPE |
|
||||
ACPI_NS_ERROR_IF_FOUND;
|
||||
|
||||
/* Mark node(s) temporary if we are executing a method */
|
||||
|
||||
if (WalkState->MethodNode)
|
||||
/*
|
||||
* Mark node(s) temporary if we are executing a normal control
|
||||
* method. (Don't mark if this is a module-level code method)
|
||||
*/
|
||||
if (WalkState->MethodNode &&
|
||||
!(WalkState->ParseFlags & ACPI_PARSE_MODULE_LEVEL))
|
||||
{
|
||||
Flags |= ACPI_NS_TEMPORARY;
|
||||
}
|
||||
|
@ -693,10 +693,15 @@ AcpiDsTerminateControlMethod (
|
||||
}
|
||||
|
||||
/*
|
||||
* Delete any namespace objects created anywhere within
|
||||
* the namespace by the execution of this method
|
||||
* Delete any namespace objects created anywhere within the
|
||||
* namespace by the execution of this method. Unless this method
|
||||
* is a module-level executable code method, in which case we
|
||||
* want make the objects permanent.
|
||||
*/
|
||||
AcpiNsDeleteNamespaceByOwner (MethodDesc->Method.OwnerId);
|
||||
if (!(MethodDesc->Method.Flags & AOPOBJ_MODULE_LEVEL))
|
||||
{
|
||||
AcpiNsDeleteNamespaceByOwner (MethodDesc->Method.OwnerId);
|
||||
}
|
||||
}
|
||||
|
||||
/* Decrement the thread count on the method */
|
||||
@ -745,7 +750,10 @@ AcpiDsTerminateControlMethod (
|
||||
|
||||
/* No more threads, we can free the OwnerId */
|
||||
|
||||
AcpiUtReleaseOwnerId (&MethodDesc->Method.OwnerId);
|
||||
if (!(MethodDesc->Method.Flags & AOPOBJ_MODULE_LEVEL))
|
||||
{
|
||||
AcpiUtReleaseOwnerId (&MethodDesc->Method.OwnerId);
|
||||
}
|
||||
}
|
||||
|
||||
return_VOID;
|
||||
|
@ -672,20 +672,6 @@ AcpiDsLoad2BeginOp (
|
||||
(WalkState->Opcode != AML_INT_NAMEPATH_OP)) ||
|
||||
(!(WalkState->OpInfo->Flags & AML_NAMED)))
|
||||
{
|
||||
#ifdef ACPI_ENABLE_MODULE_LEVEL_CODE
|
||||
if ((WalkState->OpInfo->Class == AML_CLASS_EXECUTE) ||
|
||||
(WalkState->OpInfo->Class == AML_CLASS_CONTROL))
|
||||
{
|
||||
ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH,
|
||||
"Begin/EXEC: %s (fl %8.8X)\n", WalkState->OpInfo->Name,
|
||||
WalkState->OpInfo->Flags));
|
||||
|
||||
/* Executing a type1 or type2 opcode outside of a method */
|
||||
|
||||
Status = AcpiDsExecBeginOp (WalkState, OutOp);
|
||||
return_ACPI_STATUS (Status);
|
||||
}
|
||||
#endif
|
||||
return_ACPI_STATUS (AE_OK);
|
||||
}
|
||||
|
||||
@ -862,7 +848,12 @@ AcpiDsLoad2BeginOp (
|
||||
{
|
||||
/* Execution mode, node cannot already exist, node is temporary */
|
||||
|
||||
Flags |= (ACPI_NS_ERROR_IF_FOUND | ACPI_NS_TEMPORARY);
|
||||
Flags |= ACPI_NS_ERROR_IF_FOUND;
|
||||
|
||||
if (!(WalkState->ParseFlags & ACPI_PARSE_MODULE_LEVEL))
|
||||
{
|
||||
Flags |= ACPI_NS_TEMPORARY;
|
||||
}
|
||||
}
|
||||
|
||||
/* Add new entry or lookup existing entry */
|
||||
@ -952,24 +943,6 @@ AcpiDsLoad2EndOp (
|
||||
|
||||
if (!(WalkState->OpInfo->Flags & AML_NSOBJECT))
|
||||
{
|
||||
#ifndef ACPI_NO_METHOD_EXECUTION
|
||||
#ifdef ACPI_ENABLE_MODULE_LEVEL_CODE
|
||||
/* No namespace object. Executable opcode? */
|
||||
|
||||
if ((WalkState->OpInfo->Class == AML_CLASS_EXECUTE) ||
|
||||
(WalkState->OpInfo->Class == AML_CLASS_CONTROL))
|
||||
{
|
||||
ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH,
|
||||
"End/EXEC: %s (fl %8.8X)\n", WalkState->OpInfo->Name,
|
||||
WalkState->OpInfo->Flags));
|
||||
|
||||
/* Executing a type1 or type2 opcode outside of a method */
|
||||
|
||||
Status = AcpiDsExecEndOp (WalkState);
|
||||
return_ACPI_STATUS (Status);
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
return_ACPI_STATUS (AE_OK);
|
||||
}
|
||||
|
||||
|
@ -196,8 +196,15 @@ AcpiExAddTable (
|
||||
{
|
||||
AcpiUtRemoveReference (ObjDesc);
|
||||
*DdbHandle = NULL;
|
||||
return_ACPI_STATUS (Status);
|
||||
}
|
||||
|
||||
/* Execute any module-level code that was found in the table */
|
||||
|
||||
AcpiExExitInterpreter ();
|
||||
AcpiNsExecModuleCodeList ();
|
||||
AcpiExEnterInterpreter ();
|
||||
|
||||
return_ACPI_STATUS (Status);
|
||||
}
|
||||
|
||||
|
@ -345,10 +345,13 @@ AcpiEnterSleepState (
|
||||
|
||||
if (SleepState != ACPI_STATE_S5)
|
||||
{
|
||||
/* Disable BM arbitration */
|
||||
|
||||
/*
|
||||
* Disable BM arbitration. This feature is contained within an
|
||||
* optional register (PM2 Control), so ignore a BAD_ADDRESS
|
||||
* exception.
|
||||
*/
|
||||
Status = AcpiWriteBitRegister (ACPI_BITREG_ARB_DISABLE, 1);
|
||||
if (ACPI_FAILURE (Status))
|
||||
if (ACPI_FAILURE (Status) && (Status != AE_BAD_ADDRESS))
|
||||
{
|
||||
return_ACPI_STATUS (Status);
|
||||
}
|
||||
@ -683,10 +686,13 @@ AcpiLeaveSleepState (
|
||||
AcpiGbl_FixedEventInfo[ACPI_EVENT_POWER_BUTTON].StatusRegisterId,
|
||||
ACPI_CLEAR_STATUS);
|
||||
|
||||
/* Enable BM arbitration */
|
||||
|
||||
/*
|
||||
* Enable BM arbitration. This feature is contained within an
|
||||
* optional register (PM2 Control), so ignore a BAD_ADDRESS
|
||||
* exception.
|
||||
*/
|
||||
Status = AcpiWriteBitRegister (ACPI_BITREG_ARB_DISABLE, 0);
|
||||
if (ACPI_FAILURE (Status))
|
||||
if (ACPI_FAILURE (Status) && (Status != AE_BAD_ADDRESS))
|
||||
{
|
||||
return_ACPI_STATUS (Status);
|
||||
}
|
||||
|
@ -157,9 +157,23 @@ AcpiReset (
|
||||
return_ACPI_STATUS (AE_NOT_EXIST);
|
||||
}
|
||||
|
||||
/* Write the reset value to the reset register */
|
||||
if (ResetReg->SpaceId == ACPI_ADR_SPACE_SYSTEM_IO)
|
||||
{
|
||||
/*
|
||||
* For I/O space, write directly to the OSL. This bypasses the port
|
||||
* validation mechanism, which may block a valid write to the reset
|
||||
* register.
|
||||
*/
|
||||
Status = AcpiOsWritePort ((ACPI_IO_ADDRESS) ResetReg->Address,
|
||||
AcpiGbl_FADT.ResetValue, ResetReg->BitWidth);
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Write the reset value to the reset register */
|
||||
|
||||
Status = AcpiHwWrite (AcpiGbl_FADT.ResetValue, ResetReg);
|
||||
}
|
||||
|
||||
Status = AcpiHwWrite (AcpiGbl_FADT.ResetValue, ResetReg);
|
||||
return_ACPI_STATUS (Status);
|
||||
}
|
||||
|
||||
|
@ -183,6 +183,9 @@ typedef const struct acpi_dmtable_info
|
||||
#define ACPI_DMT_EXIT 30
|
||||
#define ACPI_DMT_SIG 31
|
||||
#define ACPI_DMT_FADTPM 32
|
||||
#define ACPI_DMT_BUF16 33
|
||||
#define ACPI_DMT_IVRS 34
|
||||
|
||||
|
||||
typedef
|
||||
void (*ACPI_DMTABLE_HANDLER) (
|
||||
@ -250,6 +253,7 @@ extern ACPI_DMTABLE_INFO AcpiDmTableInfoDmarScope[];
|
||||
extern ACPI_DMTABLE_INFO AcpiDmTableInfoDmar0[];
|
||||
extern ACPI_DMTABLE_INFO AcpiDmTableInfoDmar1[];
|
||||
extern ACPI_DMTABLE_INFO AcpiDmTableInfoDmar2[];
|
||||
extern ACPI_DMTABLE_INFO AcpiDmTableInfoDmar3[];
|
||||
extern ACPI_DMTABLE_INFO AcpiDmTableInfoEcdt[];
|
||||
extern ACPI_DMTABLE_INFO AcpiDmTableInfoEinj[];
|
||||
extern ACPI_DMTABLE_INFO AcpiDmTableInfoEinj0[];
|
||||
@ -263,15 +267,21 @@ extern ACPI_DMTABLE_INFO AcpiDmTableInfoHeader[];
|
||||
extern ACPI_DMTABLE_INFO AcpiDmTableInfoHest[];
|
||||
extern ACPI_DMTABLE_INFO AcpiDmTableInfoHest0[];
|
||||
extern ACPI_DMTABLE_INFO AcpiDmTableInfoHest1[];
|
||||
extern ACPI_DMTABLE_INFO AcpiDmTableInfoHest3[];
|
||||
extern ACPI_DMTABLE_INFO AcpiDmTableInfoHest4[];
|
||||
extern ACPI_DMTABLE_INFO AcpiDmTableInfoHest5[];
|
||||
extern ACPI_DMTABLE_INFO AcpiDmTableInfoHest2[];
|
||||
extern ACPI_DMTABLE_INFO AcpiDmTableInfoHest6[];
|
||||
extern ACPI_DMTABLE_INFO AcpiDmTableInfoHest7[];
|
||||
extern ACPI_DMTABLE_INFO AcpiDmTableInfoHest8[];
|
||||
extern ACPI_DMTABLE_INFO AcpiDmTableInfoHest9[];
|
||||
extern ACPI_DMTABLE_INFO AcpiDmTableInfoHestNotify[];
|
||||
extern ACPI_DMTABLE_INFO AcpiDmTableInfoHpet[];
|
||||
extern ACPI_DMTABLE_INFO AcpiDmTableInfoIvrs[];
|
||||
extern ACPI_DMTABLE_INFO AcpiDmTableInfoIvrs0[];
|
||||
extern ACPI_DMTABLE_INFO AcpiDmTableInfoIvrs1[];
|
||||
extern ACPI_DMTABLE_INFO AcpiDmTableInfoIvrs4[];
|
||||
extern ACPI_DMTABLE_INFO AcpiDmTableInfoIvrs8a[];
|
||||
extern ACPI_DMTABLE_INFO AcpiDmTableInfoIvrs8b[];
|
||||
extern ACPI_DMTABLE_INFO AcpiDmTableInfoIvrs8c[];
|
||||
extern ACPI_DMTABLE_INFO AcpiDmTableInfoIvrsHdr[];
|
||||
extern ACPI_DMTABLE_INFO AcpiDmTableInfoMadt[];
|
||||
extern ACPI_DMTABLE_INFO AcpiDmTableInfoMadt0[];
|
||||
extern ACPI_DMTABLE_INFO AcpiDmTableInfoMadt1[];
|
||||
@ -287,6 +297,8 @@ extern ACPI_DMTABLE_INFO AcpiDmTableInfoMadt10[];
|
||||
extern ACPI_DMTABLE_INFO AcpiDmTableInfoMadtHdr[];
|
||||
extern ACPI_DMTABLE_INFO AcpiDmTableInfoMcfg[];
|
||||
extern ACPI_DMTABLE_INFO AcpiDmTableInfoMcfg0[];
|
||||
extern ACPI_DMTABLE_INFO AcpiDmTableInfoMsct[];
|
||||
extern ACPI_DMTABLE_INFO AcpiDmTableInfoMsct0[];
|
||||
extern ACPI_DMTABLE_INFO AcpiDmTableInfoRsdp1[];
|
||||
extern ACPI_DMTABLE_INFO AcpiDmTableInfoRsdp2[];
|
||||
extern ACPI_DMTABLE_INFO AcpiDmTableInfoSbst[];
|
||||
@ -300,6 +312,10 @@ extern ACPI_DMTABLE_INFO AcpiDmTableInfoSrat0[];
|
||||
extern ACPI_DMTABLE_INFO AcpiDmTableInfoSrat1[];
|
||||
extern ACPI_DMTABLE_INFO AcpiDmTableInfoSrat2[];
|
||||
extern ACPI_DMTABLE_INFO AcpiDmTableInfoTcpa[];
|
||||
extern ACPI_DMTABLE_INFO AcpiDmTableInfoUefi[];
|
||||
extern ACPI_DMTABLE_INFO AcpiDmTableInfoWaet[];
|
||||
extern ACPI_DMTABLE_INFO AcpiDmTableInfoWdat[];
|
||||
extern ACPI_DMTABLE_INFO AcpiDmTableInfoWdat0[];
|
||||
extern ACPI_DMTABLE_INFO AcpiDmTableInfoWdrt[];
|
||||
|
||||
|
||||
@ -363,6 +379,10 @@ void
|
||||
AcpiDmDumpHest (
|
||||
ACPI_TABLE_HEADER *Table);
|
||||
|
||||
void
|
||||
AcpiDmDumpIvrs (
|
||||
ACPI_TABLE_HEADER *Table);
|
||||
|
||||
void
|
||||
AcpiDmDumpMcfg (
|
||||
ACPI_TABLE_HEADER *Table);
|
||||
@ -371,6 +391,10 @@ void
|
||||
AcpiDmDumpMadt (
|
||||
ACPI_TABLE_HEADER *Table);
|
||||
|
||||
void
|
||||
AcpiDmDumpMsct (
|
||||
ACPI_TABLE_HEADER *Table);
|
||||
|
||||
UINT32
|
||||
AcpiDmDumpRsdp (
|
||||
ACPI_TABLE_HEADER *Table);
|
||||
@ -387,6 +411,10 @@ void
|
||||
AcpiDmDumpSrat (
|
||||
ACPI_TABLE_HEADER *Table);
|
||||
|
||||
void
|
||||
AcpiDmDumpWdat (
|
||||
ACPI_TABLE_HEADER *Table);
|
||||
|
||||
void
|
||||
AcpiDmDumpXsdt (
|
||||
ACPI_TABLE_HEADER *Table);
|
||||
|
@ -356,6 +356,8 @@ ACPI_EXTERN BOOLEAN AcpiGbl_DisplayFinalMemStats;
|
||||
ACPI_EXTERN ACPI_NAMESPACE_NODE AcpiGbl_RootNodeStruct;
|
||||
ACPI_EXTERN ACPI_NAMESPACE_NODE *AcpiGbl_RootNode;
|
||||
ACPI_EXTERN ACPI_NAMESPACE_NODE *AcpiGbl_FadtGpeDevice;
|
||||
ACPI_EXTERN ACPI_OPERAND_OBJECT *AcpiGbl_ModuleCodeList;
|
||||
|
||||
|
||||
extern const UINT8 AcpiGbl_NsProperties [ACPI_NUM_NS_TYPES];
|
||||
extern const ACPI_PREDEFINED_NAMES AcpiGbl_PreDefinedNames [NUM_PREDEFINED_NAMES];
|
||||
|
@ -146,6 +146,14 @@
|
||||
#define ACPI_NS_WALK_UNLOCK 0x01
|
||||
#define ACPI_NS_WALK_TEMP_NODES 0x02
|
||||
|
||||
/* Object is not a package element */
|
||||
|
||||
#define ACPI_NOT_PACKAGE_ELEMENT ACPI_UINT32_MAX
|
||||
|
||||
/* Always emit warning message, not dependent on node flags */
|
||||
|
||||
#define ACPI_WARN_ALWAYS 0
|
||||
|
||||
|
||||
/*
|
||||
* nsinit - Namespace initialization
|
||||
@ -314,6 +322,10 @@ ACPI_STATUS
|
||||
AcpiNsEvaluate (
|
||||
ACPI_EVALUATE_INFO *Info);
|
||||
|
||||
void
|
||||
AcpiNsExecModuleCodeList (
|
||||
void);
|
||||
|
||||
|
||||
/*
|
||||
* nspredef - Support for predefined/reserved names
|
||||
@ -415,6 +427,22 @@ AcpiNsGetAttachedData (
|
||||
void **Data);
|
||||
|
||||
|
||||
/*
|
||||
* nsrepair - return object repair for predefined methods/objects
|
||||
*/
|
||||
ACPI_STATUS
|
||||
AcpiNsRepairObject (
|
||||
ACPI_PREDEFINED_DATA *Data,
|
||||
UINT32 ExpectedBtypes,
|
||||
UINT32 PackageIndex,
|
||||
ACPI_OPERAND_OBJECT **ReturnObjectPtr);
|
||||
|
||||
ACPI_STATUS
|
||||
AcpiNsRepairPackageList (
|
||||
ACPI_PREDEFINED_DATA *Data,
|
||||
ACPI_OPERAND_OBJECT **ObjDescPtr);
|
||||
|
||||
|
||||
/*
|
||||
* nssearch - Namespace searching and entry
|
||||
*/
|
||||
|
@ -170,6 +170,7 @@
|
||||
#define AOPOBJ_OBJECT_INITIALIZED 0x08
|
||||
#define AOPOBJ_SETUP_COMPLETE 0x10
|
||||
#define AOPOBJ_SINGLE_DATUM 0x20
|
||||
#define AOPOBJ_MODULE_LEVEL 0x40
|
||||
|
||||
|
||||
/******************************************************************************
|
||||
|
@ -137,6 +137,7 @@
|
||||
#define ACPI_PARSE_DEFERRED_OP 0x0100
|
||||
#define ACPI_PARSE_DISASSEMBLE 0x0200
|
||||
|
||||
#define ACPI_PARSE_MODULE_LEVEL 0x0400
|
||||
|
||||
/******************************************************************************
|
||||
*
|
||||
|
@ -120,7 +120,7 @@
|
||||
|
||||
/* Current ACPICA subsystem version in YYYYMMDD format */
|
||||
|
||||
#define ACPI_CA_VERSION 0x20090625
|
||||
#define ACPI_CA_VERSION 0x20090730
|
||||
|
||||
#include "actypes.h"
|
||||
#include "actbl.h"
|
||||
|
@ -136,8 +136,8 @@
|
||||
* (Used for _PRW)
|
||||
*
|
||||
*
|
||||
* 2) PTYPE2 packages contain a Variable-length number of sub-packages. Each of the
|
||||
* different types describe the contents of each of the sub-packages.
|
||||
* 2) PTYPE2 packages contain a Variable-length number of sub-packages. Each
|
||||
* of the different types describe the contents of each of the sub-packages.
|
||||
*
|
||||
* ACPI_PTYPE2: Each subpackage contains 1 or 2 object types:
|
||||
* object type
|
||||
@ -157,12 +157,15 @@
|
||||
* count
|
||||
* (Used for _CST)
|
||||
*
|
||||
* ACPI_PTYPE2_Fixed-length: Each subpackage is of Fixed-length length
|
||||
* ACPI_PTYPE2_FIXED: Each subpackage is of Fixed-length
|
||||
* (Used for _PRT)
|
||||
*
|
||||
* ACPI_PTYPE2_MIN: Each subpackage has a Variable-length but minimum length
|
||||
* (Used for _HPX)
|
||||
*
|
||||
* ACPI_PTYPE2_REV_FIXED: Revision at start, each subpackage is Fixed-length
|
||||
* (Used for _ART, _FPS)
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
enum AcpiReturnPackageTypes
|
||||
@ -174,10 +177,12 @@ enum AcpiReturnPackageTypes
|
||||
ACPI_PTYPE2_COUNT = 5,
|
||||
ACPI_PTYPE2_PKG_COUNT = 6,
|
||||
ACPI_PTYPE2_FIXED = 7,
|
||||
ACPI_PTYPE2_MIN = 8
|
||||
ACPI_PTYPE2_MIN = 8,
|
||||
ACPI_PTYPE2_REV_FIXED = 9
|
||||
};
|
||||
|
||||
|
||||
#ifdef ACPI_CREATE_PREDEFINED_TABLE
|
||||
/*
|
||||
* Predefined method/object information table.
|
||||
*
|
||||
@ -188,7 +193,7 @@ enum AcpiReturnPackageTypes
|
||||
* AcpiEvaluateObject:
|
||||
* _Lxx and _Exx GPE methods
|
||||
* _Qxx EC methods
|
||||
* _T_x compiler temporary Variable-lengths
|
||||
* _T_x compiler temporary variables
|
||||
*
|
||||
* 2) Predefined names that never actually exist within the AML code:
|
||||
* Predefined resource descriptor field names
|
||||
@ -263,21 +268,30 @@ static const ACPI_PREDEFINED_INFO PredefinedNames[] =
|
||||
{{{ACPI_PTYPE2, ACPI_RTYPE_INTEGER, 2,0}, 0,0}},
|
||||
|
||||
{{"_ALT", 0, ACPI_RTYPE_INTEGER}},
|
||||
{{"_ART", 0, ACPI_RTYPE_PACKAGE}}, /* Variable-length (1 Int(rev), n Pkg (2 Ref/11 Int) */
|
||||
{{{ACPI_PTYPE2_REV_FIXED,ACPI_RTYPE_REFERENCE, 2, ACPI_RTYPE_INTEGER}, 11,0}},
|
||||
|
||||
{{"_BBN", 0, ACPI_RTYPE_INTEGER}},
|
||||
{{"_BCL", 0, ACPI_RTYPE_PACKAGE}}, /* Variable-length (Ints) */
|
||||
{{{ACPI_PTYPE1_VAR, ACPI_RTYPE_INTEGER, 0,0}, 0,0}},
|
||||
|
||||
{{"_BCM", 1, 0}},
|
||||
{{"_BCT", 1, ACPI_RTYPE_INTEGER}},
|
||||
{{"_BDN", 0, ACPI_RTYPE_INTEGER}},
|
||||
{{"_BFS", 1, 0}},
|
||||
{{"_BIF", 0, ACPI_RTYPE_PACKAGE}}, /* Fixed-length (9 Int),(4 Str) */
|
||||
{{{ACPI_PTYPE1_FIXED, ACPI_RTYPE_INTEGER, 9, ACPI_RTYPE_STRING}, 4,0}},
|
||||
|
||||
{{"_BIX", 0, ACPI_RTYPE_PACKAGE}}, /* Fixed-length (16 Int),(4 Str) */
|
||||
{{{ACPI_PTYPE1_FIXED, ACPI_RTYPE_INTEGER, 16, ACPI_RTYPE_STRING}, 4,0}},
|
||||
|
||||
{{"_BLT", 3, 0}},
|
||||
{{"_BMA", 1, ACPI_RTYPE_INTEGER}},
|
||||
{{"_BMC", 1, 0}},
|
||||
{{"_BMD", 0, ACPI_RTYPE_PACKAGE}}, /* Fixed-length (5 Int) */
|
||||
{{{ACPI_PTYPE1_FIXED, ACPI_RTYPE_INTEGER, 5,0}, 0,0}},
|
||||
|
||||
{{"_BMS", 1, ACPI_RTYPE_INTEGER}},
|
||||
{{"_BQC", 0, ACPI_RTYPE_INTEGER}},
|
||||
{{"_BST", 0, ACPI_RTYPE_PACKAGE}}, /* Fixed-length (4 Int) */
|
||||
{{{ACPI_PTYPE1_FIXED, ACPI_RTYPE_INTEGER, 4,0}, 0,0}},
|
||||
@ -285,6 +299,7 @@ static const ACPI_PREDEFINED_INFO PredefinedNames[] =
|
||||
{{"_BTM", 1, ACPI_RTYPE_INTEGER}},
|
||||
{{"_BTP", 1, 0}},
|
||||
{{"_CBA", 0, ACPI_RTYPE_INTEGER}}, /* See PCI firmware spec 3.0 */
|
||||
{{"_CDM", 0, ACPI_RTYPE_INTEGER}},
|
||||
{{"_CID", 0, ACPI_RTYPE_INTEGER | ACPI_RTYPE_STRING | ACPI_RTYPE_PACKAGE}}, /* Variable-length (Ints/Strs) */
|
||||
{{{ACPI_PTYPE1_VAR, ACPI_RTYPE_INTEGER | ACPI_RTYPE_STRING, 0,0}, 0,0}},
|
||||
|
||||
@ -310,6 +325,7 @@ static const ACPI_PREDEFINED_INFO PredefinedNames[] =
|
||||
{{"_DSM", 4, ACPI_RTYPE_ALL}}, /* Must return a type, but it can be of any type */
|
||||
{{"_DSS", 1, 0}},
|
||||
{{"_DSW", 3, 0}},
|
||||
{{"_DTI", 1, 0}},
|
||||
{{"_EC_", 0, ACPI_RTYPE_INTEGER}},
|
||||
{{"_EDL", 0, ACPI_RTYPE_PACKAGE}}, /* Variable-length (Refs)*/
|
||||
{{{ACPI_PTYPE1_VAR, ACPI_RTYPE_REFERENCE, 0,0}, 0,0}},
|
||||
@ -325,9 +341,22 @@ static const ACPI_PREDEFINED_INFO PredefinedNames[] =
|
||||
{{{ACPI_PTYPE1_FIXED, ACPI_RTYPE_INTEGER, 16,0}, 0,0}},
|
||||
|
||||
{{"_FDM", 1, 0}},
|
||||
{{"_FIF", 0, ACPI_RTYPE_PACKAGE}}, /* Fixed-length (4 Int) */
|
||||
{{{ACPI_PTYPE1_FIXED, ACPI_RTYPE_INTEGER, 4,0}, 0,0}},
|
||||
|
||||
{{"_FIX", 0, ACPI_RTYPE_PACKAGE}}, /* Variable-length (Ints) */
|
||||
{{{ACPI_PTYPE1_VAR, ACPI_RTYPE_INTEGER, 0,0}, 0,0}},
|
||||
|
||||
{{"_FPS", 0, ACPI_RTYPE_PACKAGE}}, /* Variable-length (1 Int(rev), n Pkg (5 Int) */
|
||||
{{{ACPI_PTYPE2_REV_FIXED,ACPI_RTYPE_INTEGER, 5, 0}, 0,0}},
|
||||
|
||||
{{"_FSL", 1, 0}},
|
||||
{{"_FST", 0, ACPI_RTYPE_PACKAGE}}, /* Fixed-length (3 Int) */
|
||||
{{{ACPI_PTYPE1_FIXED, ACPI_RTYPE_INTEGER, 3,0}, 0,0}},
|
||||
|
||||
|
||||
{{"_GAI", 0, ACPI_RTYPE_INTEGER}},
|
||||
{{"_GHL", 0, ACPI_RTYPE_INTEGER}},
|
||||
{{"_GLK", 0, ACPI_RTYPE_INTEGER}},
|
||||
{{"_GPD", 0, ACPI_RTYPE_INTEGER}},
|
||||
{{"_GPE", 0, ACPI_RTYPE_INTEGER}}, /* _GPE method, not _GPE scope */
|
||||
@ -355,15 +384,21 @@ static const ACPI_PREDEFINED_INFO PredefinedNames[] =
|
||||
{{"_LCK", 1, 0}},
|
||||
{{"_LID", 0, ACPI_RTYPE_INTEGER}},
|
||||
{{"_MAT", 0, ACPI_RTYPE_BUFFER}},
|
||||
{{"_MBM", 0, ACPI_RTYPE_PACKAGE}}, /* Fixed-length (8 Int) */
|
||||
{{{ACPI_PTYPE1_FIXED, ACPI_RTYPE_INTEGER, 8,0}, 0,0}},
|
||||
|
||||
{{"_MLS", 0, ACPI_RTYPE_PACKAGE}}, /* Variable-length (Pkgs) each (2 Str) */
|
||||
{{{ACPI_PTYPE2, ACPI_RTYPE_STRING, 2,0}, 0,0}},
|
||||
|
||||
{{"_MSG", 1, 0}},
|
||||
{{"_MSM", 4, ACPI_RTYPE_INTEGER}},
|
||||
{{"_NTT", 0, ACPI_RTYPE_INTEGER}},
|
||||
{{"_OFF", 0, 0}},
|
||||
{{"_ON_", 0, 0}},
|
||||
{{"_OS_", 0, ACPI_RTYPE_STRING}},
|
||||
{{"_OSC", 4, ACPI_RTYPE_BUFFER}},
|
||||
{{"_OST", 3, 0}},
|
||||
{{"_PAI", 1, ACPI_RTYPE_INTEGER}},
|
||||
{{"_PCL", 0, ACPI_RTYPE_PACKAGE}}, /* Variable-length (Refs) */
|
||||
{{{ACPI_PTYPE1_VAR, ACPI_RTYPE_REFERENCE, 0,0}, 0,0}},
|
||||
|
||||
@ -371,10 +406,21 @@ static const ACPI_PREDEFINED_INFO PredefinedNames[] =
|
||||
{{{ACPI_PTYPE1_FIXED, ACPI_RTYPE_BUFFER, 2,0}, 0,0}},
|
||||
|
||||
{{"_PDC", 1, 0}},
|
||||
{{"_PDL", 0, ACPI_RTYPE_INTEGER}},
|
||||
{{"_PIC", 1, 0}},
|
||||
{{"_PIF", 0, ACPI_RTYPE_PACKAGE}}, /* Fixed-length (3 Int),(3 Str) */
|
||||
{{{ACPI_PTYPE1_FIXED, ACPI_RTYPE_INTEGER, 3, ACPI_RTYPE_STRING}, 3,0}},
|
||||
|
||||
{{"_PLD", 0, ACPI_RTYPE_PACKAGE}}, /* Variable-length (Bufs) */
|
||||
{{{ACPI_PTYPE1_VAR, ACPI_RTYPE_BUFFER, 0,0}, 0,0}},
|
||||
|
||||
{{"_PMC", 0, ACPI_RTYPE_PACKAGE}}, /* Fixed-length (11 Int),(3 Str) */
|
||||
{{{ACPI_PTYPE1_FIXED, ACPI_RTYPE_INTEGER, 11, ACPI_RTYPE_STRING}, 3,0}},
|
||||
|
||||
{{"_PMD", 0, ACPI_RTYPE_PACKAGE}}, /* Variable-length (Refs) */
|
||||
{{{ACPI_PTYPE1_VAR, ACPI_RTYPE_REFERENCE, 0,0}, 0,0}},
|
||||
|
||||
{{"_PMM", 0, ACPI_RTYPE_INTEGER}},
|
||||
{{"_PPC", 0, ACPI_RTYPE_INTEGER}},
|
||||
{{"_PPE", 0, ACPI_RTYPE_INTEGER}}, /* See dig64 spec */
|
||||
{{"_PR0", 0, ACPI_RTYPE_PACKAGE}}, /* Variable-length (Refs) */
|
||||
@ -386,17 +432,26 @@ static const ACPI_PREDEFINED_INFO PredefinedNames[] =
|
||||
{{"_PR2", 0, ACPI_RTYPE_PACKAGE}}, /* Variable-length (Refs) */
|
||||
{{{ACPI_PTYPE1_VAR, ACPI_RTYPE_REFERENCE, 0,0}, 0,0}},
|
||||
|
||||
{{"_PR3", 0, ACPI_RTYPE_PACKAGE}}, /* Variable-length (Refs) */
|
||||
{{{ACPI_PTYPE1_VAR, ACPI_RTYPE_REFERENCE, 0,0}, 0,0}},
|
||||
|
||||
{{"_PRL", 0, ACPI_RTYPE_PACKAGE}}, /* Variable-length (Refs) */
|
||||
{{{ACPI_PTYPE1_VAR, ACPI_RTYPE_REFERENCE, 0,0}, 0,0}},
|
||||
|
||||
{{"_PRS", 0, ACPI_RTYPE_BUFFER}},
|
||||
|
||||
/*
|
||||
* For _PRT, many BIOSs reverse the 2nd and 3rd Package elements. This bug is so prevalent that there
|
||||
* is code in the ACPICA Resource Manager to detect this and switch them back. For now, do not allow
|
||||
* and issue a warning. To allow this and eliminate the warning, add the ACPI_RTYPE_REFERENCE
|
||||
* type to the 2nd element (index 1) in the statement below.
|
||||
* For _PRT, many BIOSs reverse the 3rd and 4th Package elements (Source
|
||||
* and SourceIndex). This bug is so prevalent that there is code in the
|
||||
* ACPICA Resource Manager to detect this and switch them back. For now,
|
||||
* do not allow and issue a warning. To allow this and eliminate the
|
||||
* warning, add the ACPI_RTYPE_REFERENCE type to the 4th element (index 3)
|
||||
* in the statement below.
|
||||
*/
|
||||
{{"_PRT", 0, ACPI_RTYPE_PACKAGE}}, /* Variable-length (Pkgs) each (4): Int,Int,Int/Ref,Int */
|
||||
{{{ACPI_PTYPE2_FIXED, 4, ACPI_RTYPE_INTEGER,ACPI_RTYPE_INTEGER},
|
||||
ACPI_RTYPE_INTEGER | ACPI_RTYPE_REFERENCE,ACPI_RTYPE_INTEGER}},
|
||||
ACPI_RTYPE_INTEGER | ACPI_RTYPE_REFERENCE,
|
||||
ACPI_RTYPE_INTEGER}},
|
||||
|
||||
{{"_PRW", 0, ACPI_RTYPE_PACKAGE}}, /* Variable-length (Pkgs) each: Pkg/Int,Int,[Variable-length Refs] (Pkg is Ref/Int) */
|
||||
{{{ACPI_PTYPE1_OPTION, 2, ACPI_RTYPE_INTEGER | ACPI_RTYPE_PACKAGE,
|
||||
@ -422,7 +477,11 @@ static const ACPI_PREDEFINED_INFO PredefinedNames[] =
|
||||
{{"_PTC", 0, ACPI_RTYPE_PACKAGE}}, /* Fixed-length (2 Buf) */
|
||||
{{{ACPI_PTYPE1_FIXED, ACPI_RTYPE_BUFFER, 2,0}, 0,0}},
|
||||
|
||||
{{"_PTP", 2, ACPI_RTYPE_INTEGER}},
|
||||
{{"_PTS", 1, 0}},
|
||||
{{"_PUR", 0, ACPI_RTYPE_PACKAGE}}, /* Fixed-length (2 Int) */
|
||||
{{{ACPI_PTYPE1_FIXED, ACPI_RTYPE_INTEGER, 2,0}, 0,0}},
|
||||
|
||||
{{"_PXM", 0, ACPI_RTYPE_INTEGER}},
|
||||
{{"_REG", 2, 0}},
|
||||
{{"_REV", 0, ACPI_RTYPE_INTEGER}},
|
||||
@ -468,6 +527,7 @@ static const ACPI_PREDEFINED_INFO PredefinedNames[] =
|
||||
/* Note: the 3-arg definition may be removed for ACPI 4.0 */
|
||||
{{"_SDD", 1, 0}},
|
||||
{{"_SEG", 0, ACPI_RTYPE_INTEGER}},
|
||||
{{"_SHL", 1, ACPI_RTYPE_INTEGER}},
|
||||
{{"_SLI", 0, ACPI_RTYPE_BUFFER}},
|
||||
{{"_SPD", 1, ACPI_RTYPE_INTEGER}},
|
||||
{{"_SRS", 1, 0}},
|
||||
@ -475,11 +535,15 @@ static const ACPI_PREDEFINED_INFO PredefinedNames[] =
|
||||
{{"_SST", 1, 0}},
|
||||
{{"_STA", 0, ACPI_RTYPE_INTEGER}},
|
||||
{{"_STM", 3, 0}},
|
||||
{{"_STP", 2, ACPI_RTYPE_INTEGER}},
|
||||
{{"_STR", 0, ACPI_RTYPE_BUFFER}},
|
||||
{{"_STV", 2, ACPI_RTYPE_INTEGER}},
|
||||
{{"_SUN", 0, ACPI_RTYPE_INTEGER}},
|
||||
{{"_SWS", 0, ACPI_RTYPE_INTEGER}},
|
||||
{{"_TC1", 0, ACPI_RTYPE_INTEGER}},
|
||||
{{"_TC2", 0, ACPI_RTYPE_INTEGER}},
|
||||
{{"_TIP", 1, ACPI_RTYPE_INTEGER}},
|
||||
{{"_TIV", 1, ACPI_RTYPE_INTEGER}},
|
||||
{{"_TMP", 0, ACPI_RTYPE_INTEGER}},
|
||||
{{"_TPC", 0, ACPI_RTYPE_INTEGER}},
|
||||
{{"_TPT", 1, 0}},
|
||||
@ -530,5 +594,5 @@ static const ACPI_PREDEFINED_INFO PredefinedNames[] =
|
||||
_PRT - currently ignore reversed entries. Attempt to fix here?
|
||||
Think about possibly fixing package elements like _BIF, etc.
|
||||
#endif
|
||||
|
||||
#endif
|
||||
#endif
|
||||
|
@ -116,9 +116,25 @@
|
||||
#ifndef __ACTBL_H__
|
||||
#define __ACTBL_H__
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
*
|
||||
* Fundamental ACPI tables
|
||||
*
|
||||
* This file contains definitions for the ACPI tables that are directly consumed
|
||||
* by ACPICA. All other tables are consumed by the OS-dependent ACPI-related
|
||||
* device drivers and other OS support code.
|
||||
*
|
||||
* The RSDP and FACS do not use the common ACPI table header. All other ACPI
|
||||
* tables use the header.
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
|
||||
/*
|
||||
* Values for description table header signatures. Useful because they make
|
||||
* it more difficult to inadvertently type in the wrong signature.
|
||||
* Values for description table header signatures for tables defined in this
|
||||
* file. Useful because they make it more difficult to inadvertently type in
|
||||
* the wrong signature.
|
||||
*/
|
||||
#define ACPI_SIG_DSDT "DSDT" /* Differentiated System Description Table */
|
||||
#define ACPI_SIG_FADT "FACP" /* Fixed ACPI Description Table */
|
||||
@ -137,23 +153,17 @@
|
||||
*/
|
||||
#pragma pack(1)
|
||||
|
||||
|
||||
/*
|
||||
* These are the ACPI tables that are directly consumed by the subsystem.
|
||||
*
|
||||
* The RSDP and FACS do not use the common ACPI table header. All other ACPI
|
||||
* tables use the header.
|
||||
*
|
||||
* Note about bitfields: The UINT8 type is used for bitfields in ACPI tables.
|
||||
* This is the only type that is even remotely portable. Anything else is not
|
||||
* portable, so do not use any other bitfield types.
|
||||
*/
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
*
|
||||
* ACPI Table Header. This common header is used by all tables except the
|
||||
* RSDP and FACS. The define is used for direct inclusion of header into
|
||||
* other ACPI tables
|
||||
* Master ACPI Table Header. This common header is used by all ACPI tables
|
||||
* except the RSDP and FACS.
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
@ -172,13 +182,16 @@ typedef struct acpi_table_header
|
||||
} ACPI_TABLE_HEADER;
|
||||
|
||||
|
||||
/*
|
||||
/*******************************************************************************
|
||||
*
|
||||
* GAS - Generic Address Structure (ACPI 2.0+)
|
||||
*
|
||||
* Note: Since this structure is used in the ACPI tables, it is byte aligned.
|
||||
* If misalignment is not supported, access to the Address field must be
|
||||
* performed with care.
|
||||
*/
|
||||
* If misaliged access is not supported by the hardware, accesses to the
|
||||
* 64-bit Address field must be performed with care.
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
typedef struct acpi_generic_address
|
||||
{
|
||||
UINT8 SpaceId; /* Address space where struct or register exists */
|
||||
@ -193,6 +206,7 @@ typedef struct acpi_generic_address
|
||||
/*******************************************************************************
|
||||
*
|
||||
* RSDP - Root System Description Pointer (Signature is "RSD PTR ")
|
||||
* Version 2
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
@ -216,6 +230,7 @@ typedef struct acpi_table_rsdp
|
||||
/*******************************************************************************
|
||||
*
|
||||
* RSDT/XSDT - Root System Description Tables
|
||||
* Version 1 (both)
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
@ -256,17 +271,17 @@ typedef struct acpi_table_facs
|
||||
|
||||
} ACPI_TABLE_FACS;
|
||||
|
||||
/* GlobalLock flags */
|
||||
/* Masks for GlobalLock flag field above */
|
||||
|
||||
#define ACPI_GLOCK_PENDING (1) /* 00: Pending global lock ownership */
|
||||
#define ACPI_GLOCK_OWNED (1<<1) /* 01: Global lock is owned */
|
||||
|
||||
/* Flags */
|
||||
/* Masks for Flags field above */
|
||||
|
||||
#define ACPI_FACS_S4_BIOS_PRESENT (1) /* 00: S4BIOS support is present */
|
||||
#define ACPI_FACS_64BIT_WAKE (1<<1) /* 01: 64-bit wake vector supported (ACPI 4.0) */
|
||||
#define ACPI_FACS_64BIT_WAKE (1<<1) /* 01: 64-bit wake vector supported (ACPI 4.0) */
|
||||
|
||||
/* OspmFlags */
|
||||
/* Masks for OspmFlags field above */
|
||||
|
||||
#define ACPI_FACS_64BIT_ENVIRONMENT (1) /* 00: 64-bit wake environment is required (ACPI 4.0) */
|
||||
|
||||
@ -274,6 +289,7 @@ typedef struct acpi_table_facs
|
||||
/*******************************************************************************
|
||||
*
|
||||
* FADT - Fixed ACPI Description Table (Signature "FACP")
|
||||
* Version 4
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
@ -337,7 +353,7 @@ typedef struct acpi_table_fadt
|
||||
} ACPI_TABLE_FADT;
|
||||
|
||||
|
||||
/* FADT Boot Architecture Flags (BootFlags) */
|
||||
/* Masks for FADT Boot Architecture Flags (BootFlags) */
|
||||
|
||||
#define ACPI_FADT_LEGACY_DEVICES (1) /* 00: [V2] System has LPC or ISA bus devices */
|
||||
#define ACPI_FADT_8042 (1<<1) /* 01: [V3] System has an 8042 controller on port 60/64 */
|
||||
@ -345,7 +361,7 @@ typedef struct acpi_table_fadt
|
||||
#define ACPI_FADT_NO_MSI (1<<3) /* 03: [V4] Message Signaled Interrupts (MSI) must not be enabled */
|
||||
#define ACPI_FADT_NO_ASPM (1<<4) /* 04: [V4] PCIe ASPM control must not be enabled */
|
||||
|
||||
/* FADT flags */
|
||||
/* Masks for FADT flags */
|
||||
|
||||
#define ACPI_FADT_WBINVD (1) /* 00: [V1] The wbinvd instruction works properly */
|
||||
#define ACPI_FADT_WBINVD_FLUSH (1<<1) /* 01: [V1] wbinvd flushes but does not invalidate caches */
|
||||
@ -369,7 +385,7 @@ typedef struct acpi_table_fadt
|
||||
#define ACPI_FADT_APIC_PHYSICAL (1<<19) /* 19: [V4] All local xAPICs must use physical dest mode (ACPI 3.0) */
|
||||
|
||||
|
||||
/* FADT Prefered Power Management Profiles */
|
||||
/* Values for PreferredProfile (Prefered Power Management Profiles) */
|
||||
|
||||
enum AcpiPreferedPmProfiles
|
||||
{
|
||||
@ -388,6 +404,9 @@ enum AcpiPreferedPmProfiles
|
||||
#pragma pack()
|
||||
|
||||
|
||||
/*
|
||||
* Internal table-related structures
|
||||
*/
|
||||
typedef union acpi_name_union
|
||||
{
|
||||
UINT32 Integer;
|
||||
@ -395,9 +414,9 @@ typedef union acpi_name_union
|
||||
|
||||
} ACPI_NAME_UNION;
|
||||
|
||||
/*
|
||||
* Internal ACPI Table Descriptor. One per ACPI table
|
||||
*/
|
||||
|
||||
/* Internal ACPI Table Descriptor. One per ACPI table. */
|
||||
|
||||
typedef struct acpi_table_desc
|
||||
{
|
||||
ACPI_PHYSICAL_ADDRESS Address;
|
||||
@ -409,7 +428,7 @@ typedef struct acpi_table_desc
|
||||
|
||||
} ACPI_TABLE_DESC;
|
||||
|
||||
/* Flags for above */
|
||||
/* Masks for Flags field above */
|
||||
|
||||
#define ACPI_TABLE_ORIGIN_UNKNOWN (0)
|
||||
#define ACPI_TABLE_ORIGIN_MAPPED (1)
|
||||
@ -423,6 +442,7 @@ typedef struct acpi_table_desc
|
||||
* Get the remaining ACPI tables
|
||||
*/
|
||||
#include "actbl1.h"
|
||||
#include "actbl2.h"
|
||||
|
||||
/* Macros used to generate offsets to specific table fields */
|
||||
|
||||
|
1014
include/actbl1.h
1014
include/actbl1.h
File diff suppressed because it is too large
Load Diff
1004
include/actbl2.h
1004
include/actbl2.h
File diff suppressed because it is too large
Load Diff
@ -126,6 +126,13 @@
|
||||
#define _COMPONENT ACPI_NAMESPACE
|
||||
ACPI_MODULE_NAME ("nseval")
|
||||
|
||||
/* Local prototypes */
|
||||
|
||||
static void
|
||||
AcpiNsExecModuleCode (
|
||||
ACPI_OPERAND_OBJECT *MethodObj,
|
||||
ACPI_EVALUATE_INFO *Info);
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
*
|
||||
@ -360,3 +367,145 @@ AcpiNsEvaluate (
|
||||
return_ACPI_STATUS (Status);
|
||||
}
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
*
|
||||
* FUNCTION: AcpiNsExecModuleCodeList
|
||||
*
|
||||
* PARAMETERS: None
|
||||
*
|
||||
* RETURN: None. Exceptions during method execution are ignored, since
|
||||
* we cannot abort a table load.
|
||||
*
|
||||
* DESCRIPTION: Execute all elements of the global module-level code list.
|
||||
* Each element is executed as a single control method.
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
void
|
||||
AcpiNsExecModuleCodeList (
|
||||
void)
|
||||
{
|
||||
ACPI_OPERAND_OBJECT *Prev;
|
||||
ACPI_OPERAND_OBJECT *Next;
|
||||
ACPI_EVALUATE_INFO *Info;
|
||||
UINT32 MethodCount = 0;
|
||||
|
||||
|
||||
ACPI_FUNCTION_TRACE (NsExecModuleCodeList);
|
||||
|
||||
|
||||
/* Exit now if the list is empty */
|
||||
|
||||
Next = AcpiGbl_ModuleCodeList;
|
||||
if (!Next)
|
||||
{
|
||||
return_VOID;
|
||||
}
|
||||
|
||||
/* Allocate the evaluation information block */
|
||||
|
||||
Info = ACPI_ALLOCATE (sizeof (ACPI_EVALUATE_INFO));
|
||||
if (!Info)
|
||||
{
|
||||
return_VOID;
|
||||
}
|
||||
|
||||
/* Walk the list, executing each "method" */
|
||||
|
||||
while (Next)
|
||||
{
|
||||
Prev = Next;
|
||||
Next = Next->Method.Mutex;
|
||||
|
||||
/* Clear the link field and execute the method */
|
||||
|
||||
Prev->Method.Mutex = NULL;
|
||||
AcpiNsExecModuleCode (Prev, Info);
|
||||
MethodCount++;
|
||||
|
||||
/* Delete the (temporary) method object */
|
||||
|
||||
AcpiUtRemoveReference (Prev);
|
||||
}
|
||||
|
||||
ACPI_INFO ((AE_INFO,
|
||||
"Executed %u blocks of module-level executable AML code",
|
||||
MethodCount));
|
||||
|
||||
ACPI_FREE (Info);
|
||||
AcpiGbl_ModuleCodeList = NULL;
|
||||
return_VOID;
|
||||
}
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
*
|
||||
* FUNCTION: AcpiNsExecModuleCode
|
||||
*
|
||||
* PARAMETERS: MethodObj - Object container for the module-level code
|
||||
* Info - Info block for method evaluation
|
||||
*
|
||||
* RETURN: None. Exceptions during method execution are ignored, since
|
||||
* we cannot abort a table load.
|
||||
*
|
||||
* DESCRIPTION: Execute a control method containing a block of module-level
|
||||
* executable AML code. The control method is temporarily
|
||||
* installed to the root node, then evaluated.
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
static void
|
||||
AcpiNsExecModuleCode (
|
||||
ACPI_OPERAND_OBJECT *MethodObj,
|
||||
ACPI_EVALUATE_INFO *Info)
|
||||
{
|
||||
ACPI_OPERAND_OBJECT *RootObj;
|
||||
ACPI_STATUS Status;
|
||||
|
||||
|
||||
ACPI_FUNCTION_TRACE (NsExecModuleCode);
|
||||
|
||||
|
||||
/* Initialize the evaluation information block */
|
||||
|
||||
ACPI_MEMSET (Info, 0, sizeof (ACPI_EVALUATE_INFO));
|
||||
Info->PrefixNode = AcpiGbl_RootNode;
|
||||
|
||||
/*
|
||||
* Get the currently attached root object. Add a reference, because the
|
||||
* ref count will be decreased when the method object is installed to
|
||||
* the root node.
|
||||
*/
|
||||
RootObj = AcpiNsGetAttachedObject (AcpiGbl_RootNode);
|
||||
AcpiUtAddReference (RootObj);
|
||||
|
||||
/* Install the method (module-level code) in the root node */
|
||||
|
||||
Status = AcpiNsAttachObject (AcpiGbl_RootNode, MethodObj,
|
||||
ACPI_TYPE_METHOD);
|
||||
if (ACPI_FAILURE (Status))
|
||||
{
|
||||
goto Exit;
|
||||
}
|
||||
|
||||
/* Execute the root node as a control method */
|
||||
|
||||
Status = AcpiNsEvaluate (Info);
|
||||
|
||||
ACPI_DEBUG_PRINT ((ACPI_DB_INIT, "Executed module-level code at %p\n",
|
||||
MethodObj->Method.AmlStart));
|
||||
|
||||
/* Detach the temporary method object */
|
||||
|
||||
AcpiNsDetachObject (AcpiGbl_RootNode);
|
||||
|
||||
/* Restore the original root object */
|
||||
|
||||
Status = AcpiNsAttachObject (AcpiGbl_RootNode, RootObj, ACPI_TYPE_DEVICE);
|
||||
|
||||
Exit:
|
||||
AcpiUtRemoveReference (RootObj);
|
||||
return_VOID;
|
||||
}
|
||||
|
||||
|
@ -113,7 +113,7 @@
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
#define __NSPREDEF_C__
|
||||
#define ACPI_CREATE_PREDEFINED_TABLE
|
||||
|
||||
#include "acpi.h"
|
||||
#include "accommon.h"
|
||||
@ -154,6 +154,13 @@ AcpiNsCheckPackage (
|
||||
ACPI_PREDEFINED_DATA *Data,
|
||||
ACPI_OPERAND_OBJECT **ReturnObjectPtr);
|
||||
|
||||
static ACPI_STATUS
|
||||
AcpiNsCheckPackageList (
|
||||
ACPI_PREDEFINED_DATA *Data,
|
||||
const ACPI_PREDEFINED_INFO *Package,
|
||||
ACPI_OPERAND_OBJECT **Elements,
|
||||
UINT32 Count);
|
||||
|
||||
static ACPI_STATUS
|
||||
AcpiNsCheckPackageElements (
|
||||
ACPI_PREDEFINED_DATA *Data,
|
||||
@ -176,13 +183,6 @@ AcpiNsCheckReference (
|
||||
ACPI_PREDEFINED_DATA *Data,
|
||||
ACPI_OPERAND_OBJECT *ReturnObject);
|
||||
|
||||
static ACPI_STATUS
|
||||
AcpiNsRepairObject (
|
||||
ACPI_PREDEFINED_DATA *Data,
|
||||
UINT32 ExpectedBtypes,
|
||||
UINT32 PackageIndex,
|
||||
ACPI_OPERAND_OBJECT **ReturnObjectPtr);
|
||||
|
||||
static void
|
||||
AcpiNsGetExpectedTypes (
|
||||
char *Buffer,
|
||||
@ -201,14 +201,6 @@ static const char *AcpiRtypeNames[] =
|
||||
"/Reference",
|
||||
};
|
||||
|
||||
/* Object is not a package element */
|
||||
|
||||
#define ACPI_NOT_PACKAGE_ELEMENT ACPI_UINT32_MAX
|
||||
|
||||
/* Always emit warning message, not dependent on node flags */
|
||||
|
||||
#define ACPI_WARN_ALWAYS 0
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
*
|
||||
@ -524,14 +516,11 @@ AcpiNsCheckPackage (
|
||||
{
|
||||
ACPI_OPERAND_OBJECT *ReturnObject = *ReturnObjectPtr;
|
||||
const ACPI_PREDEFINED_INFO *Package;
|
||||
ACPI_OPERAND_OBJECT *SubPackage;
|
||||
ACPI_OPERAND_OBJECT **Elements;
|
||||
ACPI_OPERAND_OBJECT **SubElements;
|
||||
ACPI_STATUS Status;
|
||||
ACPI_STATUS Status = AE_OK;
|
||||
UINT32 ExpectedCount;
|
||||
UINT32 Count;
|
||||
UINT32 i;
|
||||
UINT32 j;
|
||||
|
||||
|
||||
ACPI_FUNCTION_NAME (NsCheckPackage);
|
||||
@ -593,10 +582,6 @@ AcpiNsCheckPackage (
|
||||
Status = AcpiNsCheckPackageElements (Data, Elements,
|
||||
Package->RetInfo.ObjectType1, Package->RetInfo.Count1,
|
||||
Package->RetInfo.ObjectType2, Package->RetInfo.Count2, 0);
|
||||
if (ACPI_FAILURE (Status))
|
||||
{
|
||||
return (Status);
|
||||
}
|
||||
break;
|
||||
|
||||
|
||||
@ -665,6 +650,26 @@ AcpiNsCheckPackage (
|
||||
break;
|
||||
|
||||
|
||||
case ACPI_PTYPE2_REV_FIXED:
|
||||
|
||||
/* First element is the (Integer) revision */
|
||||
|
||||
Status = AcpiNsCheckObjectType (Data, Elements,
|
||||
ACPI_RTYPE_INTEGER, 0);
|
||||
if (ACPI_FAILURE (Status))
|
||||
{
|
||||
return (Status);
|
||||
}
|
||||
|
||||
Elements++;
|
||||
Count--;
|
||||
|
||||
/* Examine the sub-packages */
|
||||
|
||||
Status = AcpiNsCheckPackageList (Data, Package, Elements, Count);
|
||||
break;
|
||||
|
||||
|
||||
case ACPI_PTYPE2_PKG_COUNT:
|
||||
|
||||
/* First element is the (Integer) count of sub-packages to follow */
|
||||
@ -689,9 +694,10 @@ AcpiNsCheckPackage (
|
||||
Count = ExpectedCount;
|
||||
Elements++;
|
||||
|
||||
/* Now we can walk the sub-packages */
|
||||
/* Examine the sub-packages */
|
||||
|
||||
/*lint -fallthrough */
|
||||
Status = AcpiNsCheckPackageList (Data, Package, Elements, Count);
|
||||
break;
|
||||
|
||||
|
||||
case ACPI_PTYPE2:
|
||||
@ -700,134 +706,35 @@ AcpiNsCheckPackage (
|
||||
case ACPI_PTYPE2_COUNT:
|
||||
|
||||
/*
|
||||
* These types all return a single package that consists of a variable
|
||||
* number of sub-packages
|
||||
* These types all return a single Package that consists of a
|
||||
* variable number of sub-Packages.
|
||||
*
|
||||
* First, ensure that the first element is a sub-Package. If not,
|
||||
* the BIOS may have incorrectly returned the object as a single
|
||||
* package instead of a Package of Packages (a common error if
|
||||
* there is only one entry). We may be able to repair this by
|
||||
* wrapping the returned Package with a new outer Package.
|
||||
*/
|
||||
for (i = 0; i < Count; i++)
|
||||
if ((*Elements)->Common.Type != ACPI_TYPE_PACKAGE)
|
||||
{
|
||||
SubPackage = *Elements;
|
||||
SubElements = SubPackage->Package.Elements;
|
||||
/* Create the new outer package and populate it */
|
||||
|
||||
/* Each sub-object must be of type Package */
|
||||
|
||||
Status = AcpiNsCheckObjectType (Data, &SubPackage,
|
||||
ACPI_RTYPE_PACKAGE, i);
|
||||
Status = AcpiNsRepairPackageList (Data, ReturnObjectPtr);
|
||||
if (ACPI_FAILURE (Status))
|
||||
{
|
||||
return (Status);
|
||||
}
|
||||
|
||||
/* Examine the different types of sub-packages */
|
||||
/* Update locals to point to the new package (of 1 element) */
|
||||
|
||||
switch (Package->RetInfo.Type)
|
||||
{
|
||||
case ACPI_PTYPE2:
|
||||
case ACPI_PTYPE2_PKG_COUNT:
|
||||
|
||||
/* Each subpackage has a fixed number of elements */
|
||||
|
||||
ExpectedCount =
|
||||
Package->RetInfo.Count1 + Package->RetInfo.Count2;
|
||||
if (SubPackage->Package.Count != ExpectedCount)
|
||||
{
|
||||
Count = SubPackage->Package.Count;
|
||||
goto PackageTooSmall;
|
||||
}
|
||||
|
||||
Status = AcpiNsCheckPackageElements (Data, SubElements,
|
||||
Package->RetInfo.ObjectType1,
|
||||
Package->RetInfo.Count1,
|
||||
Package->RetInfo.ObjectType2,
|
||||
Package->RetInfo.Count2, 0);
|
||||
if (ACPI_FAILURE (Status))
|
||||
{
|
||||
return (Status);
|
||||
}
|
||||
break;
|
||||
|
||||
case ACPI_PTYPE2_FIXED:
|
||||
|
||||
/* Each sub-package has a fixed length */
|
||||
|
||||
ExpectedCount = Package->RetInfo2.Count;
|
||||
if (SubPackage->Package.Count < ExpectedCount)
|
||||
{
|
||||
Count = SubPackage->Package.Count;
|
||||
goto PackageTooSmall;
|
||||
}
|
||||
|
||||
/* Check the type of each sub-package element */
|
||||
|
||||
for (j = 0; j < ExpectedCount; j++)
|
||||
{
|
||||
Status = AcpiNsCheckObjectType (Data, &SubElements[j],
|
||||
Package->RetInfo2.ObjectType[j], j);
|
||||
if (ACPI_FAILURE (Status))
|
||||
{
|
||||
return (Status);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case ACPI_PTYPE2_MIN:
|
||||
|
||||
/* Each sub-package has a variable but minimum length */
|
||||
|
||||
ExpectedCount = Package->RetInfo.Count1;
|
||||
if (SubPackage->Package.Count < ExpectedCount)
|
||||
{
|
||||
Count = SubPackage->Package.Count;
|
||||
goto PackageTooSmall;
|
||||
}
|
||||
|
||||
/* Check the type of each sub-package element */
|
||||
|
||||
Status = AcpiNsCheckPackageElements (Data, SubElements,
|
||||
Package->RetInfo.ObjectType1,
|
||||
SubPackage->Package.Count, 0, 0, 0);
|
||||
if (ACPI_FAILURE (Status))
|
||||
{
|
||||
return (Status);
|
||||
}
|
||||
break;
|
||||
|
||||
case ACPI_PTYPE2_COUNT:
|
||||
|
||||
/* First element is the (Integer) count of elements to follow */
|
||||
|
||||
Status = AcpiNsCheckObjectType (Data, SubElements,
|
||||
ACPI_RTYPE_INTEGER, 0);
|
||||
if (ACPI_FAILURE (Status))
|
||||
{
|
||||
return (Status);
|
||||
}
|
||||
|
||||
/* Make sure package is large enough for the Count */
|
||||
|
||||
ExpectedCount = (UINT32) (*SubElements)->Integer.Value;
|
||||
if (SubPackage->Package.Count < ExpectedCount)
|
||||
{
|
||||
Count = SubPackage->Package.Count;
|
||||
goto PackageTooSmall;
|
||||
}
|
||||
|
||||
/* Check the type of each sub-package element */
|
||||
|
||||
Status = AcpiNsCheckPackageElements (Data, (SubElements + 1),
|
||||
Package->RetInfo.ObjectType1,
|
||||
(ExpectedCount - 1), 0, 0, 1);
|
||||
if (ACPI_FAILURE (Status))
|
||||
{
|
||||
return (Status);
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
Elements++;
|
||||
ReturnObject = *ReturnObjectPtr;
|
||||
Elements = ReturnObject->Package.Elements;
|
||||
Count = 1;
|
||||
}
|
||||
|
||||
/* Examine the sub-packages */
|
||||
|
||||
Status = AcpiNsCheckPackageList (Data, Package, Elements, Count);
|
||||
break;
|
||||
|
||||
|
||||
@ -842,7 +749,7 @@ AcpiNsCheckPackage (
|
||||
return (AE_AML_INTERNAL);
|
||||
}
|
||||
|
||||
return (AE_OK);
|
||||
return (Status);
|
||||
|
||||
|
||||
PackageTooSmall:
|
||||
@ -850,13 +757,197 @@ AcpiNsCheckPackage (
|
||||
/* Error exit for the case with an incorrect package count */
|
||||
|
||||
ACPI_WARN_PREDEFINED ((AE_INFO, Data->Pathname, Data->NodeFlags,
|
||||
"Return Package is too small - found %u, expected %u",
|
||||
"Return Package is too small - found %u elements, expected %u",
|
||||
Count, ExpectedCount));
|
||||
|
||||
return (AE_AML_OPERAND_VALUE);
|
||||
}
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
*
|
||||
* FUNCTION: AcpiNsCheckPackageList
|
||||
*
|
||||
* PARAMETERS: Data - Pointer to validation data structure
|
||||
* Package - Pointer to package-specific info for method
|
||||
* Elements - Element list of parent package. All elements
|
||||
* of this list should be of type Package.
|
||||
* Count - Count of subpackages
|
||||
*
|
||||
* RETURN: Status
|
||||
*
|
||||
* DESCRIPTION: Examine a list of subpackages
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
static ACPI_STATUS
|
||||
AcpiNsCheckPackageList (
|
||||
ACPI_PREDEFINED_DATA *Data,
|
||||
const ACPI_PREDEFINED_INFO *Package,
|
||||
ACPI_OPERAND_OBJECT **Elements,
|
||||
UINT32 Count)
|
||||
{
|
||||
ACPI_OPERAND_OBJECT *SubPackage;
|
||||
ACPI_OPERAND_OBJECT **SubElements;
|
||||
ACPI_STATUS Status;
|
||||
UINT32 ExpectedCount;
|
||||
UINT32 i;
|
||||
UINT32 j;
|
||||
|
||||
|
||||
/* Validate each sub-Package in the parent Package */
|
||||
|
||||
for (i = 0; i < Count; i++)
|
||||
{
|
||||
SubPackage = *Elements;
|
||||
SubElements = SubPackage->Package.Elements;
|
||||
|
||||
/* Each sub-object must be of type Package */
|
||||
|
||||
Status = AcpiNsCheckObjectType (Data, &SubPackage,
|
||||
ACPI_RTYPE_PACKAGE, i);
|
||||
if (ACPI_FAILURE (Status))
|
||||
{
|
||||
return (Status);
|
||||
}
|
||||
|
||||
/* Examine the different types of expected sub-packages */
|
||||
|
||||
switch (Package->RetInfo.Type)
|
||||
{
|
||||
case ACPI_PTYPE2:
|
||||
case ACPI_PTYPE2_PKG_COUNT:
|
||||
case ACPI_PTYPE2_REV_FIXED:
|
||||
|
||||
/* Each subpackage has a fixed number of elements */
|
||||
|
||||
ExpectedCount = Package->RetInfo.Count1 + Package->RetInfo.Count2;
|
||||
if (SubPackage->Package.Count < ExpectedCount)
|
||||
{
|
||||
goto PackageTooSmall;
|
||||
}
|
||||
|
||||
Status = AcpiNsCheckPackageElements (Data, SubElements,
|
||||
Package->RetInfo.ObjectType1,
|
||||
Package->RetInfo.Count1,
|
||||
Package->RetInfo.ObjectType2,
|
||||
Package->RetInfo.Count2, 0);
|
||||
if (ACPI_FAILURE (Status))
|
||||
{
|
||||
return (Status);
|
||||
}
|
||||
break;
|
||||
|
||||
|
||||
case ACPI_PTYPE2_FIXED:
|
||||
|
||||
/* Each sub-package has a fixed length */
|
||||
|
||||
ExpectedCount = Package->RetInfo2.Count;
|
||||
if (SubPackage->Package.Count < ExpectedCount)
|
||||
{
|
||||
goto PackageTooSmall;
|
||||
}
|
||||
|
||||
/* Check the type of each sub-package element */
|
||||
|
||||
for (j = 0; j < ExpectedCount; j++)
|
||||
{
|
||||
Status = AcpiNsCheckObjectType (Data, &SubElements[j],
|
||||
Package->RetInfo2.ObjectType[j], j);
|
||||
if (ACPI_FAILURE (Status))
|
||||
{
|
||||
return (Status);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
|
||||
case ACPI_PTYPE2_MIN:
|
||||
|
||||
/* Each sub-package has a variable but minimum length */
|
||||
|
||||
ExpectedCount = Package->RetInfo.Count1;
|
||||
if (SubPackage->Package.Count < ExpectedCount)
|
||||
{
|
||||
goto PackageTooSmall;
|
||||
}
|
||||
|
||||
/* Check the type of each sub-package element */
|
||||
|
||||
Status = AcpiNsCheckPackageElements (Data, SubElements,
|
||||
Package->RetInfo.ObjectType1,
|
||||
SubPackage->Package.Count, 0, 0, 0);
|
||||
if (ACPI_FAILURE (Status))
|
||||
{
|
||||
return (Status);
|
||||
}
|
||||
break;
|
||||
|
||||
|
||||
case ACPI_PTYPE2_COUNT:
|
||||
|
||||
/*
|
||||
* First element is the (Integer) count of elements, including
|
||||
* the count field.
|
||||
*/
|
||||
Status = AcpiNsCheckObjectType (Data, SubElements,
|
||||
ACPI_RTYPE_INTEGER, 0);
|
||||
if (ACPI_FAILURE (Status))
|
||||
{
|
||||
return (Status);
|
||||
}
|
||||
|
||||
/*
|
||||
* Make sure package is large enough for the Count and is
|
||||
* is as large as the minimum size
|
||||
*/
|
||||
ExpectedCount = (UINT32) (*SubElements)->Integer.Value;
|
||||
if (SubPackage->Package.Count < ExpectedCount)
|
||||
{
|
||||
goto PackageTooSmall;
|
||||
}
|
||||
if (SubPackage->Package.Count < Package->RetInfo.Count1)
|
||||
{
|
||||
ExpectedCount = Package->RetInfo.Count1;
|
||||
goto PackageTooSmall;
|
||||
}
|
||||
|
||||
/* Check the type of each sub-package element */
|
||||
|
||||
Status = AcpiNsCheckPackageElements (Data, (SubElements + 1),
|
||||
Package->RetInfo.ObjectType1,
|
||||
(ExpectedCount - 1), 0, 0, 1);
|
||||
if (ACPI_FAILURE (Status))
|
||||
{
|
||||
return (Status);
|
||||
}
|
||||
break;
|
||||
|
||||
|
||||
default: /* Should not get here, type was validated by caller */
|
||||
|
||||
return (AE_AML_INTERNAL);
|
||||
}
|
||||
|
||||
Elements++;
|
||||
}
|
||||
|
||||
return (AE_OK);
|
||||
|
||||
|
||||
PackageTooSmall:
|
||||
|
||||
/* The sub-package count was smaller than required */
|
||||
|
||||
ACPI_WARN_PREDEFINED ((AE_INFO, Data->Pathname, Data->NodeFlags,
|
||||
"Return Sub-Package[%u] is too small - found %u elements, expected %u",
|
||||
i, SubPackage->Package.Count, ExpectedCount));
|
||||
|
||||
return (AE_AML_OPERAND_VALUE);
|
||||
}
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
*
|
||||
* FUNCTION: AcpiNsCheckPackageElements
|
||||
@ -1100,117 +1191,6 @@ AcpiNsCheckReference (
|
||||
}
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
*
|
||||
* FUNCTION: AcpiNsRepairObject
|
||||
*
|
||||
* PARAMETERS: Data - Pointer to validation data structure
|
||||
* ExpectedBtypes - Object types expected
|
||||
* PackageIndex - Index of object within parent package (if
|
||||
* applicable - ACPI_NOT_PACKAGE_ELEMENT
|
||||
* otherwise)
|
||||
* ReturnObjectPtr - Pointer to the object returned from the
|
||||
* evaluation of a method or object
|
||||
*
|
||||
* RETURN: Status. AE_OK if repair was successful.
|
||||
*
|
||||
* DESCRIPTION: Attempt to repair/convert a return object of a type that was
|
||||
* not expected.
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
static ACPI_STATUS
|
||||
AcpiNsRepairObject (
|
||||
ACPI_PREDEFINED_DATA *Data,
|
||||
UINT32 ExpectedBtypes,
|
||||
UINT32 PackageIndex,
|
||||
ACPI_OPERAND_OBJECT **ReturnObjectPtr)
|
||||
{
|
||||
ACPI_OPERAND_OBJECT *ReturnObject = *ReturnObjectPtr;
|
||||
ACPI_OPERAND_OBJECT *NewObject;
|
||||
ACPI_SIZE Length;
|
||||
|
||||
|
||||
switch (ReturnObject->Common.Type)
|
||||
{
|
||||
case ACPI_TYPE_BUFFER:
|
||||
|
||||
/* Does the method/object legally return a string? */
|
||||
|
||||
if (!(ExpectedBtypes & ACPI_RTYPE_STRING))
|
||||
{
|
||||
return (AE_AML_OPERAND_TYPE);
|
||||
}
|
||||
|
||||
/*
|
||||
* Have a Buffer, expected a String, convert. Use a ToString
|
||||
* conversion, no transform performed on the buffer data. The best
|
||||
* example of this is the _BIF method, where the string data from
|
||||
* the battery is often (incorrectly) returned as buffer object(s).
|
||||
*/
|
||||
Length = 0;
|
||||
while ((Length < ReturnObject->Buffer.Length) &&
|
||||
(ReturnObject->Buffer.Pointer[Length]))
|
||||
{
|
||||
Length++;
|
||||
}
|
||||
|
||||
/* Allocate a new string object */
|
||||
|
||||
NewObject = AcpiUtCreateStringObject (Length);
|
||||
if (!NewObject)
|
||||
{
|
||||
return (AE_NO_MEMORY);
|
||||
}
|
||||
|
||||
/*
|
||||
* Copy the raw buffer data with no transform. String is already NULL
|
||||
* terminated at Length+1.
|
||||
*/
|
||||
ACPI_MEMCPY (NewObject->String.Pointer,
|
||||
ReturnObject->Buffer.Pointer, Length);
|
||||
|
||||
/*
|
||||
* If the original object is a package element, we need to:
|
||||
* 1. Set the reference count of the new object to match the
|
||||
* reference count of the old object.
|
||||
* 2. Decrement the reference count of the original object.
|
||||
*/
|
||||
if (PackageIndex != ACPI_NOT_PACKAGE_ELEMENT)
|
||||
{
|
||||
NewObject->Common.ReferenceCount =
|
||||
ReturnObject->Common.ReferenceCount;
|
||||
|
||||
if (ReturnObject->Common.ReferenceCount > 1)
|
||||
{
|
||||
ReturnObject->Common.ReferenceCount--;
|
||||
}
|
||||
|
||||
ACPI_WARN_PREDEFINED ((AE_INFO, Data->Pathname, Data->NodeFlags,
|
||||
"Converted Buffer to expected String at index %u",
|
||||
PackageIndex));
|
||||
}
|
||||
else
|
||||
{
|
||||
ACPI_WARN_PREDEFINED ((AE_INFO, Data->Pathname, Data->NodeFlags,
|
||||
"Converted Buffer to expected String"));
|
||||
}
|
||||
|
||||
/* Delete old object, install the new return object */
|
||||
|
||||
AcpiUtRemoveReference (ReturnObject);
|
||||
*ReturnObjectPtr = NewObject;
|
||||
Data->Flags |= ACPI_OBJECT_REPAIRED;
|
||||
return (AE_OK);
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return (AE_AML_OPERAND_TYPE);
|
||||
}
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
*
|
||||
* FUNCTION: AcpiNsGetExpectedTypes
|
||||
|
291
namespace/nsrepair.c
Normal file
291
namespace/nsrepair.c
Normal file
@ -0,0 +1,291 @@
|
||||
/******************************************************************************
|
||||
*
|
||||
* Module Name: nsrepair - Repair for objects returned by predefined methods
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
/******************************************************************************
|
||||
*
|
||||
* 1. Copyright Notice
|
||||
*
|
||||
* Some or all of this work - Copyright (c) 1999 - 2009, Intel Corp.
|
||||
* All rights reserved.
|
||||
*
|
||||
* 2. License
|
||||
*
|
||||
* 2.1. This is your license from Intel Corp. under its intellectual property
|
||||
* rights. You may have additional license terms from the party that provided
|
||||
* you this software, covering your right to use that party's intellectual
|
||||
* property rights.
|
||||
*
|
||||
* 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a
|
||||
* copy of the source code appearing in this file ("Covered Code") an
|
||||
* irrevocable, perpetual, worldwide license under Intel's copyrights in the
|
||||
* base code distributed originally by Intel ("Original Intel Code") to copy,
|
||||
* make derivatives, distribute, use and display any portion of the Covered
|
||||
* Code in any form, with the right to sublicense such rights; and
|
||||
*
|
||||
* 2.3. Intel grants Licensee a non-exclusive and non-transferable patent
|
||||
* license (with the right to sublicense), under only those claims of Intel
|
||||
* patents that are infringed by the Original Intel Code, to make, use, sell,
|
||||
* offer to sell, and import the Covered Code and derivative works thereof
|
||||
* solely to the minimum extent necessary to exercise the above copyright
|
||||
* license, and in no event shall the patent license extend to any additions
|
||||
* to or modifications of the Original Intel Code. No other license or right
|
||||
* is granted directly or by implication, estoppel or otherwise;
|
||||
*
|
||||
* The above copyright and patent license is granted only if the following
|
||||
* conditions are met:
|
||||
*
|
||||
* 3. Conditions
|
||||
*
|
||||
* 3.1. Redistribution of Source with Rights to Further Distribute Source.
|
||||
* Redistribution of source code of any substantial portion of the Covered
|
||||
* Code or modification with rights to further distribute source must include
|
||||
* the above Copyright Notice, the above License, this list of Conditions,
|
||||
* and the following Disclaimer and Export Compliance provision. In addition,
|
||||
* Licensee must cause all Covered Code to which Licensee contributes to
|
||||
* contain a file documenting the changes Licensee made to create that Covered
|
||||
* Code and the date of any change. Licensee must include in that file the
|
||||
* documentation of any changes made by any predecessor Licensee. Licensee
|
||||
* must include a prominent statement that the modification is derived,
|
||||
* directly or indirectly, from Original Intel Code.
|
||||
*
|
||||
* 3.2. Redistribution of Source with no Rights to Further Distribute Source.
|
||||
* Redistribution of source code of any substantial portion of the Covered
|
||||
* Code or modification without rights to further distribute source must
|
||||
* include the following Disclaimer and Export Compliance provision in the
|
||||
* documentation and/or other materials provided with distribution. In
|
||||
* addition, Licensee may not authorize further sublicense of source of any
|
||||
* portion of the Covered Code, and must include terms to the effect that the
|
||||
* license from Licensee to its licensee is limited to the intellectual
|
||||
* property embodied in the software Licensee provides to its licensee, and
|
||||
* not to intellectual property embodied in modifications its licensee may
|
||||
* make.
|
||||
*
|
||||
* 3.3. Redistribution of Executable. Redistribution in executable form of any
|
||||
* substantial portion of the Covered Code or modification must reproduce the
|
||||
* above Copyright Notice, and the following Disclaimer and Export Compliance
|
||||
* provision in the documentation and/or other materials provided with the
|
||||
* distribution.
|
||||
*
|
||||
* 3.4. Intel retains all right, title, and interest in and to the Original
|
||||
* Intel Code.
|
||||
*
|
||||
* 3.5. Neither the name Intel nor any other trademark owned or controlled by
|
||||
* Intel shall be used in advertising or otherwise to promote the sale, use or
|
||||
* other dealings in products derived from or relating to the Covered Code
|
||||
* without prior written authorization from Intel.
|
||||
*
|
||||
* 4. Disclaimer and Export Compliance
|
||||
*
|
||||
* 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED
|
||||
* HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE
|
||||
* IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE,
|
||||
* INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY
|
||||
* UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A
|
||||
* PARTICULAR PURPOSE.
|
||||
*
|
||||
* 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES
|
||||
* OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR
|
||||
* COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT,
|
||||
* SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY
|
||||
* CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL
|
||||
* HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS
|
||||
* SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY
|
||||
* LIMITED REMEDY.
|
||||
*
|
||||
* 4.3. Licensee shall not export, either directly or indirectly, any of this
|
||||
* software or system incorporating such software without first obtaining any
|
||||
* required license or other approval from the U. S. Department of Commerce or
|
||||
* any other agency or department of the United States Government. In the
|
||||
* event Licensee exports any such software from the United States or
|
||||
* re-exports any such software from a foreign destination, Licensee shall
|
||||
* ensure that the distribution and export/re-export of the software is in
|
||||
* compliance with all laws, regulations, orders, or other restrictions of the
|
||||
* U.S. Export Administration Regulations. Licensee agrees that neither it nor
|
||||
* any of its subsidiaries will export/re-export any technical data, process,
|
||||
* software, or service, directly or indirectly, to any country for which the
|
||||
* United States government or any agency thereof requires an export license,
|
||||
* other governmental approval, or letter of assurance, without first obtaining
|
||||
* such license, approval or letter.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
#define __NSREPAIR_C__
|
||||
|
||||
#include "acpi.h"
|
||||
#include "accommon.h"
|
||||
#include "acnamesp.h"
|
||||
#include "acpredef.h"
|
||||
|
||||
#define _COMPONENT ACPI_NAMESPACE
|
||||
ACPI_MODULE_NAME ("nsrepair")
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
*
|
||||
* FUNCTION: AcpiNsRepairObject
|
||||
*
|
||||
* PARAMETERS: Data - Pointer to validation data structure
|
||||
* ExpectedBtypes - Object types expected
|
||||
* PackageIndex - Index of object within parent package (if
|
||||
* applicable - ACPI_NOT_PACKAGE_ELEMENT
|
||||
* otherwise)
|
||||
* ReturnObjectPtr - Pointer to the object returned from the
|
||||
* evaluation of a method or object
|
||||
*
|
||||
* RETURN: Status. AE_OK if repair was successful.
|
||||
*
|
||||
* DESCRIPTION: Attempt to repair/convert a return object of a type that was
|
||||
* not expected.
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
ACPI_STATUS
|
||||
AcpiNsRepairObject (
|
||||
ACPI_PREDEFINED_DATA *Data,
|
||||
UINT32 ExpectedBtypes,
|
||||
UINT32 PackageIndex,
|
||||
ACPI_OPERAND_OBJECT **ReturnObjectPtr)
|
||||
{
|
||||
ACPI_OPERAND_OBJECT *ReturnObject = *ReturnObjectPtr;
|
||||
ACPI_OPERAND_OBJECT *NewObject;
|
||||
ACPI_SIZE Length;
|
||||
|
||||
|
||||
switch (ReturnObject->Common.Type)
|
||||
{
|
||||
case ACPI_TYPE_BUFFER:
|
||||
|
||||
/* Does the method/object legally return a string? */
|
||||
|
||||
if (!(ExpectedBtypes & ACPI_RTYPE_STRING))
|
||||
{
|
||||
return (AE_AML_OPERAND_TYPE);
|
||||
}
|
||||
|
||||
/*
|
||||
* Have a Buffer, expected a String, convert. Use a ToString
|
||||
* conversion, no transform performed on the buffer data. The best
|
||||
* example of this is the _BIF method, where the string data from
|
||||
* the battery is often (incorrectly) returned as buffer object(s).
|
||||
*/
|
||||
Length = 0;
|
||||
while ((Length < ReturnObject->Buffer.Length) &&
|
||||
(ReturnObject->Buffer.Pointer[Length]))
|
||||
{
|
||||
Length++;
|
||||
}
|
||||
|
||||
/* Allocate a new string object */
|
||||
|
||||
NewObject = AcpiUtCreateStringObject (Length);
|
||||
if (!NewObject)
|
||||
{
|
||||
return (AE_NO_MEMORY);
|
||||
}
|
||||
|
||||
/*
|
||||
* Copy the raw buffer data with no transform. String is already NULL
|
||||
* terminated at Length+1.
|
||||
*/
|
||||
ACPI_MEMCPY (NewObject->String.Pointer,
|
||||
ReturnObject->Buffer.Pointer, Length);
|
||||
|
||||
/*
|
||||
* If the original object is a package element, we need to:
|
||||
* 1. Set the reference count of the new object to match the
|
||||
* reference count of the old object.
|
||||
* 2. Decrement the reference count of the original object.
|
||||
*/
|
||||
if (PackageIndex != ACPI_NOT_PACKAGE_ELEMENT)
|
||||
{
|
||||
NewObject->Common.ReferenceCount =
|
||||
ReturnObject->Common.ReferenceCount;
|
||||
|
||||
if (ReturnObject->Common.ReferenceCount > 1)
|
||||
{
|
||||
ReturnObject->Common.ReferenceCount--;
|
||||
}
|
||||
|
||||
ACPI_WARN_PREDEFINED ((AE_INFO, Data->Pathname, Data->NodeFlags,
|
||||
"Converted Buffer to expected String at index %u",
|
||||
PackageIndex));
|
||||
}
|
||||
else
|
||||
{
|
||||
ACPI_WARN_PREDEFINED ((AE_INFO, Data->Pathname, Data->NodeFlags,
|
||||
"Converted Buffer to expected String"));
|
||||
}
|
||||
|
||||
/* Delete old object, install the new return object */
|
||||
|
||||
AcpiUtRemoveReference (ReturnObject);
|
||||
*ReturnObjectPtr = NewObject;
|
||||
Data->Flags |= ACPI_OBJECT_REPAIRED;
|
||||
return (AE_OK);
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return (AE_AML_OPERAND_TYPE);
|
||||
}
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
*
|
||||
* FUNCTION: AcpiNsRepairPackageList
|
||||
*
|
||||
* PARAMETERS: Data - Pointer to validation data structure
|
||||
* ObjDescPtr - Pointer to the object to repair. The new
|
||||
* package object is returned here,
|
||||
* overwriting the old object.
|
||||
*
|
||||
* RETURN: Status, new object in *ObjDescPtr
|
||||
*
|
||||
* DESCRIPTION: Repair a common problem with objects that are defined to return
|
||||
* a variable-length Package of Packages. If the variable-length
|
||||
* is one, some BIOS code mistakenly simply declares a single
|
||||
* Package instead of a Package with one sub-Package. This
|
||||
* function attempts to repair this error by wrapping a Package
|
||||
* object around the original Package, creating the correct
|
||||
* Package with one sub-Package.
|
||||
*
|
||||
* Names that can be repaired in this manner include:
|
||||
* _ALR, _CSD, _HPX, _MLS, _PRT, _PSS, _TRT, TSS
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
ACPI_STATUS
|
||||
AcpiNsRepairPackageList (
|
||||
ACPI_PREDEFINED_DATA *Data,
|
||||
ACPI_OPERAND_OBJECT **ObjDescPtr)
|
||||
{
|
||||
ACPI_OPERAND_OBJECT *PkgObjDesc;
|
||||
|
||||
|
||||
/*
|
||||
* Create the new outer package and populate it. The new package will
|
||||
* have a single element, the lone subpackage.
|
||||
*/
|
||||
PkgObjDesc = AcpiUtCreatePackageObject (1);
|
||||
if (!PkgObjDesc)
|
||||
{
|
||||
return (AE_NO_MEMORY);
|
||||
}
|
||||
|
||||
PkgObjDesc->Package.Elements[0] = *ObjDescPtr;
|
||||
|
||||
/* Return the new object in the object pointer */
|
||||
|
||||
*ObjDescPtr = PkgObjDesc;
|
||||
Data->Flags |= ACPI_OBJECT_REPAIRED;
|
||||
|
||||
ACPI_WARN_PREDEFINED ((AE_INFO, Data->Pathname, Data->NodeFlags,
|
||||
"Incorrectly formed Package, attempting repair"));
|
||||
|
||||
return (AE_OK);
|
||||
}
|
@ -662,7 +662,7 @@ AcpiNsGetDeviceCallback (
|
||||
ACPI_DEVICE_ID_LIST *Cid;
|
||||
UINT32 i;
|
||||
BOOLEAN Found;
|
||||
int Match;
|
||||
int NoMatch;
|
||||
|
||||
|
||||
Status = AcpiUtAcquireMutex (ACPI_MTX_NAMESPACE);
|
||||
@ -716,10 +716,10 @@ AcpiNsGetDeviceCallback (
|
||||
return (AE_CTRL_DEPTH);
|
||||
}
|
||||
|
||||
Match = ACPI_STRCMP (Hid->String, Info->Hid);
|
||||
NoMatch = ACPI_STRCMP (Hid->String, Info->Hid);
|
||||
ACPI_FREE (Hid);
|
||||
|
||||
if (!Match)
|
||||
if (NoMatch)
|
||||
{
|
||||
/*
|
||||
* HID does not match, attempt match within the
|
||||
|
128
parser/psloop.c
128
parser/psloop.c
@ -171,6 +171,12 @@ AcpiPsCompleteFinalOp (
|
||||
ACPI_PARSE_OBJECT *Op,
|
||||
ACPI_STATUS Status);
|
||||
|
||||
static void
|
||||
AcpiPsLinkModuleCode (
|
||||
UINT8 *AmlStart,
|
||||
UINT32 AmlLength,
|
||||
ACPI_OWNER_ID OwnerId);
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
*
|
||||
@ -502,6 +508,7 @@ AcpiPsGetArguments (
|
||||
{
|
||||
ACPI_STATUS Status = AE_OK;
|
||||
ACPI_PARSE_OBJECT *Arg = NULL;
|
||||
const ACPI_OPCODE_INFO *OpInfo;
|
||||
|
||||
|
||||
ACPI_FUNCTION_TRACE_PTR (PsGetArguments, WalkState);
|
||||
@ -558,13 +565,11 @@ AcpiPsGetArguments (
|
||||
}
|
||||
|
||||
|
||||
/* Special processing for certain opcodes */
|
||||
|
||||
/* TBD (remove): Temporary mechanism to disable this code if needed */
|
||||
|
||||
#ifdef ACPI_ENABLE_MODULE_LEVEL_CODE
|
||||
|
||||
if ((WalkState->PassNumber <= ACPI_IMODE_LOAD_PASS1) &&
|
||||
/*
|
||||
* Handle executable code at "module-level". This refers to
|
||||
* executable opcodes that appear outside of any control method.
|
||||
*/
|
||||
if ((WalkState->PassNumber <= ACPI_IMODE_LOAD_PASS2) &&
|
||||
((WalkState->ParseFlags & ACPI_PARSE_DISASSEMBLE) == 0))
|
||||
{
|
||||
/*
|
||||
@ -580,6 +585,19 @@ AcpiPsGetArguments (
|
||||
case AML_ELSE_OP:
|
||||
case AML_WHILE_OP:
|
||||
|
||||
/*
|
||||
* Currently supported module-level opcodes are:
|
||||
* IF/ELSE/WHILE. These appear to be the most common,
|
||||
* and easiest to support since they open an AML
|
||||
* package.
|
||||
*/
|
||||
if (WalkState->PassNumber == ACPI_IMODE_LOAD_PASS1)
|
||||
{
|
||||
AcpiPsLinkModuleCode (AmlOpStart,
|
||||
WalkState->ParserState.PkgEnd - AmlOpStart,
|
||||
WalkState->OwnerId);
|
||||
}
|
||||
|
||||
ACPI_DEBUG_PRINT ((ACPI_DB_PARSE,
|
||||
"Pass1: Skipping an If/Else/While body\n"));
|
||||
|
||||
@ -590,10 +608,32 @@ AcpiPsGetArguments (
|
||||
break;
|
||||
|
||||
default:
|
||||
/*
|
||||
* Check for an unsupported executable opcode at module
|
||||
* level. We must be in PASS1, the parent must be a SCOPE,
|
||||
* The opcode class must be EXECUTE, and the opcode must
|
||||
* not be an argument to another opcode.
|
||||
*/
|
||||
if ((WalkState->PassNumber == ACPI_IMODE_LOAD_PASS1) &&
|
||||
(Op->Common.Parent->Common.AmlOpcode == AML_SCOPE_OP))
|
||||
{
|
||||
OpInfo = AcpiPsGetOpcodeInfo (Op->Common.AmlOpcode);
|
||||
if ((OpInfo->Class == AML_CLASS_EXECUTE) &&
|
||||
(!Arg))
|
||||
{
|
||||
ACPI_WARNING ((AE_INFO,
|
||||
"Detected an unsupported executable opcode "
|
||||
"at module-level: [0x%.4X] at table offset 0x%.4X",
|
||||
Op->Common.AmlOpcode,
|
||||
(AmlOpStart - WalkState->ParserState.AmlStart) +
|
||||
sizeof (ACPI_TABLE_HEADER)));
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
/* Special processing for certain opcodes */
|
||||
|
||||
switch (Op->Common.AmlOpcode)
|
||||
{
|
||||
@ -659,6 +699,78 @@ AcpiPsGetArguments (
|
||||
}
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
*
|
||||
* FUNCTION: AcpiPsLinkModuleCode
|
||||
*
|
||||
* PARAMETERS: AmlStart - Pointer to the AML
|
||||
* AmlLength - Length of executable AML
|
||||
* OwnerId - OwnerId of module level code
|
||||
*
|
||||
* RETURN: None.
|
||||
*
|
||||
* DESCRIPTION: Wrap the module-level code with a method object and link the
|
||||
* object to the global list. Note, the mutex field of the method
|
||||
* object is used to link multiple module-level code objects.
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
static void
|
||||
AcpiPsLinkModuleCode (
|
||||
UINT8 *AmlStart,
|
||||
UINT32 AmlLength,
|
||||
ACPI_OWNER_ID OwnerId)
|
||||
{
|
||||
ACPI_OPERAND_OBJECT *Prev;
|
||||
ACPI_OPERAND_OBJECT *Next;
|
||||
ACPI_OPERAND_OBJECT *MethodObj;
|
||||
|
||||
|
||||
/* Get the tail of the list */
|
||||
|
||||
Prev = Next = AcpiGbl_ModuleCodeList;
|
||||
while (Next)
|
||||
{
|
||||
Prev = Next;
|
||||
Next = Next->Method.Mutex;
|
||||
}
|
||||
|
||||
/*
|
||||
* Insert the module level code into the list. Merge it if it is
|
||||
* adjacent to the previous element.
|
||||
*/
|
||||
if (!Prev ||
|
||||
((Prev->Method.AmlStart + Prev->Method.AmlLength) != AmlStart))
|
||||
{
|
||||
/* Create, initialize, and link a new temporary method object */
|
||||
|
||||
MethodObj = AcpiUtCreateInternalObject (ACPI_TYPE_METHOD);
|
||||
if (!MethodObj)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
MethodObj->Method.AmlStart = AmlStart;
|
||||
MethodObj->Method.AmlLength = AmlLength;
|
||||
MethodObj->Method.OwnerId = OwnerId;
|
||||
MethodObj->Method.Flags |= AOPOBJ_MODULE_LEVEL;
|
||||
|
||||
if (!Prev)
|
||||
{
|
||||
AcpiGbl_ModuleCodeList = MethodObj;
|
||||
}
|
||||
else
|
||||
{
|
||||
Prev->Method.Mutex = MethodObj;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
Prev->Method.AmlLength += AmlLength;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
*
|
||||
* FUNCTION: AcpiPsCompleteOp
|
||||
|
@ -394,6 +394,11 @@ AcpiPsExecuteMethod (
|
||||
goto Cleanup;
|
||||
}
|
||||
|
||||
if (Info->ObjDesc->Method.Flags & AOPOBJ_MODULE_LEVEL)
|
||||
{
|
||||
WalkState->ParseFlags |= ACPI_PARSE_MODULE_LEVEL;
|
||||
}
|
||||
|
||||
/* Invoke an internal method if necessary */
|
||||
|
||||
if (Info->ObjDesc->Method.MethodFlags & AML_METHOD_INTERNAL_ONLY)
|
||||
|
@ -89,6 +89,7 @@ SRCS= aetables.c aehandlers.c aeexec.c aemain.c \
|
||||
../../namespace/nsobject.c \
|
||||
../../namespace/nsparse.c \
|
||||
../../namespace/nspredef.c \
|
||||
../../namespace/nsrepair.c \
|
||||
../../namespace/nssearch.c \
|
||||
../../namespace/nsutils.c \
|
||||
../../namespace/nswalk.c \
|
||||
|
@ -730,8 +730,10 @@ AsBracesOnSameLine (
|
||||
* 1) There is a conditional compile on the line (starts with '#')
|
||||
* 2) Previous line ends with an '=' (Start of initializer block)
|
||||
* 3) Previous line ends with a comma (part of an init list)
|
||||
* 4) Previous line ends with a backslash (part of a macro)
|
||||
*/
|
||||
if ((StartOfThisLine[1] != '#') &&
|
||||
(*Beginning != '\\') &&
|
||||
(*Beginning != '/') &&
|
||||
(*Beginning != '{') &&
|
||||
(*Beginning != '=') &&
|
||||
|
@ -518,8 +518,10 @@ ACPI_TYPED_IDENTIFIER_TABLE AcpiIdentifiers[] = {
|
||||
{"ACPI_TABLE_HEST", SRC_TYPE_STRUCT},
|
||||
{"ACPI_TABLE_HPET", SRC_TYPE_STRUCT},
|
||||
{"ACPI_TABLE_IBFT", SRC_TYPE_STRUCT},
|
||||
{"ACPI_TABLE_IVRS", SRC_TYPE_STRUCT},
|
||||
{"ACPI_TABLE_MADT", SRC_TYPE_STRUCT},
|
||||
{"ACPI_TABLE_MCFG", SRC_TYPE_STRUCT},
|
||||
{"ACPI_TABLE_MSCT", SRC_TYPE_STRUCT},
|
||||
{"ACPI_TABLE_RSDP", SRC_TYPE_STRUCT},
|
||||
{"ACPI_TABLE_RSDT", SRC_TYPE_STRUCT},
|
||||
{"ACPI_TABLE_SBST", SRC_TYPE_STRUCT},
|
||||
@ -529,6 +531,7 @@ ACPI_TYPED_IDENTIFIER_TABLE AcpiIdentifiers[] = {
|
||||
{"ACPI_TABLE_SRAT", SRC_TYPE_STRUCT},
|
||||
{"ACPI_TABLE_TCPA", SRC_TYPE_STRUCT},
|
||||
{"ACPI_TABLE_UEFI", SRC_TYPE_STRUCT},
|
||||
{"ACPI_TABLE_WAET", SRC_TYPE_STRUCT},
|
||||
{"ACPI_TABLE_WDAT", SRC_TYPE_STRUCT},
|
||||
{"ACPI_TABLE_WDRT", SRC_TYPE_STRUCT},
|
||||
{"ACPI_TABLE_XSDT", SRC_TYPE_STRUCT},
|
||||
@ -545,31 +548,56 @@ ACPI_TYPED_IDENTIFIER_TABLE AcpiIdentifiers[] = {
|
||||
{"ACPI_CPEP_POLLING", SRC_TYPE_STRUCT},
|
||||
{"ACPI_DMAR_HEADER", SRC_TYPE_STRUCT},
|
||||
{"ACPI_DMAR_DEVICE_SCOPE", SRC_TYPE_STRUCT},
|
||||
{"ACPI_DMAR_ATSR", SRC_TYPE_STRUCT},
|
||||
{"ACPI_DMAR_RHSA", SRC_TYPE_STRUCT},
|
||||
{"ACPI_DMAR_HARDWARE_UNIT", SRC_TYPE_STRUCT},
|
||||
{"ACPI_DMAR_RESERVED_MEMORY", SRC_TYPE_STRUCT},
|
||||
{"ACPI_EINJ_ENTRY", SRC_TYPE_STRUCT},
|
||||
{"ACPI_EINJ_TRIGGER", SRC_TYPE_STRUCT},
|
||||
{"ACPI_ERST_ENTRY", SRC_TYPE_STRUCT},
|
||||
{"ACPI_ERST_INFO", SRC_TYPE_STRUCT},
|
||||
{"ACPI_HEST_AER_COMMON", SRC_TYPE_STRUCT},
|
||||
{"ACPI_HEST_HEADER", SRC_TYPE_STRUCT},
|
||||
{"ACPI_HEST_NOTIFY", SRC_TYPE_STRUCT},
|
||||
{"ACPI_HEST_IA_ERROR_BANK", SRC_TYPE_STRUCT},
|
||||
{"ACPI_HEST_IA_MACHINE_CHECK", SRC_TYPE_STRUCT},
|
||||
{"ACPI_HEST_IA_CORRECTED", SRC_TYPE_STRUCT},
|
||||
{"ACPI_HEST_IA_NMI", SRC_TYPE_STRUCT},
|
||||
{"ACPI_HEST_AER_ROOT", SRC_TYPE_STRUCT},
|
||||
{"ACPI_HEST_AER", SRC_TYPE_STRUCT},
|
||||
{"ACPI_HEST_AER_BRIDGE", SRC_TYPE_STRUCT},
|
||||
{"ACPI_HEST_GENERIC", SRC_TYPE_STRUCT},
|
||||
{"ACPI_HEST_GENERIC_STATUS", SRC_TYPE_STRUCT},
|
||||
{"ACPI_HEST_GENERIC_DATA", SRC_TYPE_STRUCT},
|
||||
{"ACPI_IBFT_HEADER", SRC_TYPE_STRUCT},
|
||||
{"ACPI_IBFT_CONTROL", SRC_TYPE_STRUCT},
|
||||
{"ACPI_IBFT_INITIATOR", SRC_TYPE_STRUCT},
|
||||
{"ACPI_IBFT_NIC", SRC_TYPE_STRUCT},
|
||||
{"ACPI_IBFT_TARGET", SRC_TYPE_STRUCT},
|
||||
{"ACPI_IVRS_HEADER", SRC_TYPE_STRUCT},
|
||||
{"ACPI_IVRS_HARDWARE", SRC_TYPE_STRUCT},
|
||||
{"ACPI_IVRS_DE_HEADER", SRC_TYPE_STRUCT},
|
||||
{"ACPI_IVRS_DEVICE4", SRC_TYPE_STRUCT},
|
||||
{"ACPI_IVRS_DEVICE8A", SRC_TYPE_STRUCT},
|
||||
{"ACPI_IVRS_DEVICE8B", SRC_TYPE_STRUCT},
|
||||
{"ACPI_IVRS_DEVICE8C", SRC_TYPE_STRUCT},
|
||||
{"ACPI_IVRS_MEMORY", SRC_TYPE_STRUCT},
|
||||
{"ACPI_MADT_ADDRESS_OVERRIDE", SRC_TYPE_STRUCT},
|
||||
{"ACPI_MADT_HEADER", SRC_TYPE_STRUCT},
|
||||
{"ACPI_MADT_IO_APIC", SRC_TYPE_STRUCT},
|
||||
{"ACPI_MADT_IO_SAPIC", SRC_TYPE_STRUCT},
|
||||
{"ACPI_MADT_LOCAL_APIC", SRC_TYPE_STRUCT},
|
||||
{"ACPI_MADT_LOCAL_APIC_NMI", SRC_TYPE_STRUCT},
|
||||
{"ACPI_MADT_LOCAL_APIC_OVERRIDE", SRC_TYPE_STRUCT},
|
||||
{"ACPI_MADT_LOCAL_SAPIC", SRC_TYPE_STRUCT},
|
||||
{"ACPI_MADT_NMI_SOURCE", SRC_TYPE_STRUCT},
|
||||
{"ACPI_MADT_PROCESSOR_APIC", SRC_TYPE_STRUCT},
|
||||
{"ACPI_MADT_XRUPT_OVERRIDE", SRC_TYPE_STRUCT},
|
||||
{"ACPI_MADT_XRUPT_SOURCE", SRC_TYPE_STRUCT},
|
||||
{"ACPI_MADT_LOCAL_X2APIC", SRC_TYPE_STRUCT},
|
||||
{"ACPI_MADT_LOCAL_X2APIC_NMI", SRC_TYPE_STRUCT},
|
||||
{"ACPI_MADT_INTERRUPT_OVERRIDE", SRC_TYPE_STRUCT},
|
||||
{"ACPI_MADT_INTERRUPT_SOURCE", SRC_TYPE_STRUCT},
|
||||
{"ACPI_MADT_NMI_SOURCE", SRC_TYPE_STRUCT},
|
||||
{"ACPI_MADT_PROCESSOR_APIC", SRC_TYPE_STRUCT},
|
||||
{"ACPI_MCFG_ALLOCATION", SRC_TYPE_STRUCT},
|
||||
{"ACPI_MSCT_PROXIMITY", SRC_TYPE_STRUCT},
|
||||
{"ACPI_SRAT_CPU_AFFINITY", SRC_TYPE_STRUCT},
|
||||
{"ACPI_SRAT_HEADER", SRC_TYPE_STRUCT},
|
||||
{"ACPI_SRAT_MEM_AFFINITY", SRC_TYPE_STRUCT},
|
||||
|
@ -938,6 +938,7 @@ AcpiUtInitGlobals (
|
||||
|
||||
/* Namespace */
|
||||
|
||||
AcpiGbl_ModuleCodeList = NULL;
|
||||
AcpiGbl_RootNode = NULL;
|
||||
AcpiGbl_RootNodeStruct.Name.Integer = ACPI_ROOT_NAME;
|
||||
AcpiGbl_RootNodeStruct.DescriptorType = ACPI_DESC_TYPE_NAMED;
|
||||
|
@ -184,12 +184,12 @@ AcpiUtTerminate (
|
||||
*
|
||||
* FUNCTION: AcpiUtSubsystemShutdown
|
||||
*
|
||||
* PARAMETERS: none
|
||||
* PARAMETERS: None
|
||||
*
|
||||
* RETURN: none
|
||||
* RETURN: None
|
||||
*
|
||||
* DESCRIPTION: Shutdown the various subsystems. Don't delete the mutex
|
||||
* objects here -- because the AML debugger may be still running.
|
||||
* DESCRIPTION: Shutdown the various components. Do not delete the mutex
|
||||
* objects here, because the AML debugger may be still running.
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
@ -197,24 +197,8 @@ void
|
||||
AcpiUtSubsystemShutdown (
|
||||
void)
|
||||
{
|
||||
|
||||
ACPI_FUNCTION_TRACE (UtSubsystemShutdown);
|
||||
|
||||
/* Just exit if subsystem is already shutdown */
|
||||
|
||||
if (AcpiGbl_Shutdown)
|
||||
{
|
||||
ACPI_ERROR ((AE_INFO,
|
||||
"ACPI Subsystem is already terminated"));
|
||||
return_VOID;
|
||||
}
|
||||
|
||||
/* Subsystem appears active, go ahead and shut it down */
|
||||
|
||||
AcpiGbl_Shutdown = TRUE;
|
||||
AcpiGbl_StartupFlags = 0;
|
||||
ACPI_DEBUG_PRINT ((ACPI_DB_INFO,
|
||||
"Shutting down ACPI Subsystem\n"));
|
||||
|
||||
#ifndef ACPI_ASL_COMPILER
|
||||
|
||||
|
@ -359,6 +359,16 @@ AcpiInitializeObjects (
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Execute any module-level code that was detected during the table load
|
||||
* phase. Although illegal since ACPI 2.0, there are many machines that
|
||||
* contain this type of code. Each block of detected executable AML code
|
||||
* outside of any control method is wrapped with a temporary control
|
||||
* method object and placed on a global list. The methods on this list
|
||||
* are executed below.
|
||||
*/
|
||||
AcpiNsExecModuleCodeList ();
|
||||
|
||||
/*
|
||||
* Initialize the objects that remain uninitialized. This runs the
|
||||
* executable AML that may be part of the declaration of these objects:
|
||||
@ -437,7 +447,7 @@ ACPI_EXPORT_SYMBOL (AcpiInitializeObjects)
|
||||
*
|
||||
* RETURN: Status
|
||||
*
|
||||
* DESCRIPTION: Shutdown the ACPI subsystem. Release all resources.
|
||||
* DESCRIPTION: Shutdown the ACPICA subsystem and release all resources.
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
@ -451,15 +461,28 @@ AcpiTerminate (
|
||||
ACPI_FUNCTION_TRACE (AcpiTerminate);
|
||||
|
||||
|
||||
/* Just exit if subsystem is already shutdown */
|
||||
|
||||
if (AcpiGbl_Shutdown)
|
||||
{
|
||||
ACPI_ERROR ((AE_INFO, "ACPI Subsystem is already terminated"));
|
||||
return_ACPI_STATUS (AE_OK);
|
||||
}
|
||||
|
||||
/* Subsystem appears active, go ahead and shut it down */
|
||||
|
||||
AcpiGbl_Shutdown = TRUE;
|
||||
AcpiGbl_StartupFlags = 0;
|
||||
ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Shutting down ACPI Subsystem\n"));
|
||||
|
||||
/* Terminate the AML Debugger if present */
|
||||
|
||||
ACPI_DEBUGGER_EXEC(AcpiGbl_DbTerminateThreads = TRUE);
|
||||
ACPI_DEBUGGER_EXEC (AcpiGbl_DbTerminateThreads = TRUE);
|
||||
|
||||
/* Shutdown and free all resources */
|
||||
|
||||
AcpiUtSubsystemShutdown ();
|
||||
|
||||
|
||||
/* Free the mutex objects */
|
||||
|
||||
AcpiUtMutexTerminate ();
|
||||
@ -480,8 +503,8 @@ AcpiTerminate (
|
||||
|
||||
ACPI_EXPORT_SYMBOL (AcpiTerminate)
|
||||
|
||||
#ifndef ACPI_ASL_COMPILER
|
||||
|
||||
#ifndef ACPI_ASL_COMPILER
|
||||
/*******************************************************************************
|
||||
*
|
||||
* FUNCTION: AcpiSubsystemStatus
|
||||
|
Loading…
Reference in New Issue
Block a user