summaryrefslogtreecommitdiffstats
path: root/sys/contrib/dev/acpica/dmresrcl.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/contrib/dev/acpica/dmresrcl.c')
-rw-r--r--sys/contrib/dev/acpica/dmresrcl.c832
1 files changed, 649 insertions, 183 deletions
diff --git a/sys/contrib/dev/acpica/dmresrcl.c b/sys/contrib/dev/acpica/dmresrcl.c
index d7e3227..ca8b780 100644
--- a/sys/contrib/dev/acpica/dmresrcl.c
+++ b/sys/contrib/dev/acpica/dmresrcl.c
@@ -1,7 +1,7 @@
/*******************************************************************************
*
* Module Name: dmresrcl.c - "Large" Resource Descriptor disassembly
- * $Revision: 12 $
+ * $Revision: 1.29 $
*
******************************************************************************/
@@ -9,7 +9,7 @@
*
* 1. Copyright Notice
*
- * Some or all of this work - Copyright (c) 1999 - 2004, Intel Corp.
+ * Some or all of this work - Copyright (c) 1999 - 2005, Intel Corp.
* All rights reserved.
*
* 2. License
@@ -125,6 +125,338 @@
ACPI_MODULE_NAME ("dbresrcl")
+/* Common names for address and memory descriptors */
+
+static char *AcpiDmAddressNames[] =
+{
+ "Address Space Granularity",
+ "Address Range Minimum",
+ "Address Range Maximum",
+ "Address Translation Offset",
+ "Address Length"
+};
+
+static char *AcpiDmMemoryNames[] =
+{
+ "Address Range Minimum",
+ "Address Range Maximum",
+ "Address Alignment",
+ "Address Length"
+};
+
+
+/* Local prototypes */
+
+static void
+AcpiDmSpaceFlags (
+ UINT8 Flags);
+
+static void
+AcpiDmIoFlags (
+ UINT8 Flags);
+
+static void
+AcpiDmIoFlags2 (
+ UINT8 SpecificFlags);
+
+static void
+AcpiDmMemoryFlags (
+ UINT8 Flags,
+ UINT8 SpecificFlags);
+
+static void
+AcpiDmMemoryFlags2 (
+ UINT8 SpecificFlags);
+
+static void
+AcpiDmResourceSource (
+ AML_RESOURCE *Resource,
+ ACPI_SIZE MinimumLength,
+ UINT32 Length);
+
+static void
+AcpiDmAddressFields (
+ void *Source,
+ UINT8 Type,
+ UINT32 Level);
+
+static void
+AcpiDmAddressPrefix (
+ UINT8 Type);
+
+static void
+AcpiDmAddressCommon (
+ AML_RESOURCE *Resource,
+ UINT8 Type,
+ UINT32 Level);
+
+static void
+AcpiDmAddressFlags (
+ AML_RESOURCE *Resource);
+
+
+/*******************************************************************************
+ *
+ * FUNCTION: AcpiDmMemoryFields
+ *
+ * PARAMETERS: Source - Pointer to the contiguous data fields
+ * Type - 16 or 32 (bit)
+ * Level - Current source code indentation level
+ *
+ * RETURN: None
+ *
+ * DESCRIPTION: Decode fields common to Memory24 and Memory32 descriptors
+ *
+ ******************************************************************************/
+
+static void
+AcpiDmMemoryFields (
+ void *Source,
+ UINT8 Type,
+ UINT32 Level)
+{
+ ACPI_NATIVE_UINT i;
+
+
+ for (i = 0; i < 4; i++)
+ {
+ AcpiDmIndent (Level + 1);
+
+ switch (Type)
+ {
+ case 16:
+ AcpiDmDumpInteger16 (((UINT16 *) Source)[i], AcpiDmMemoryNames[i]);
+ break;
+
+ case 32:
+ AcpiDmDumpInteger32 (((UINT32 *) Source)[i], AcpiDmMemoryNames[i]);
+ break;
+
+ default:
+ return;
+ }
+ }
+}
+
+
+/*******************************************************************************
+ *
+ * FUNCTION: AcpiDm
+ *
+ * PARAMETERS: Source - Pointer to the contiguous data fields
+ * Type - 16, 32, or 64 (bit)
+ * Level - Current source code indentation level
+ *
+ * RETURN: None
+ *
+ * DESCRIPTION: Decode fields common to address descriptors
+ *
+ ******************************************************************************/
+
+static void
+AcpiDmAddressFields (
+ void *Source,
+ UINT8 Type,
+ UINT32 Level)
+{
+ ACPI_NATIVE_UINT i;
+
+
+ AcpiOsPrintf ("\n");
+
+ for (i = 0; i < 5; i++)
+ {
+ AcpiDmIndent (Level + 1);
+
+ switch (Type)
+ {
+ case 16:
+ AcpiDmDumpInteger16 (((UINT16 *) Source)[i], AcpiDmAddressNames[i]);
+ break;
+
+ case 32:
+ AcpiDmDumpInteger32 (((UINT32 *) Source)[i], AcpiDmAddressNames[i]);
+ break;
+
+ case 64:
+ AcpiDmDumpInteger64 (((UINT64 *) Source)[i], AcpiDmAddressNames[i]);
+ break;
+
+ default:
+ return;
+ }
+ }
+}
+
+
+/*******************************************************************************
+ *
+ * FUNCTION: AcpiDmAddressPrefix
+ *
+ * PARAMETERS: Type - Descriptor type
+ *
+ * RETURN: None
+ *
+ * DESCRIPTION: Emit name prefix representing the address descriptor type
+ *
+ ******************************************************************************/
+
+static void
+AcpiDmAddressPrefix (
+ UINT8 Type)
+{
+
+ switch (Type)
+ {
+ case ACPI_RESOURCE_TYPE_ADDRESS16:
+ AcpiOsPrintf ("Word");
+ break;
+
+ case ACPI_RESOURCE_TYPE_ADDRESS32:
+ AcpiOsPrintf ("DWord");
+ break;
+
+ case ACPI_RESOURCE_TYPE_ADDRESS64:
+ AcpiOsPrintf ("QWord");
+ break;
+
+ case ACPI_RESOURCE_TYPE_EXTENDED_ADDRESS64:
+ AcpiOsPrintf ("Extended");
+ break;
+
+ default:
+ return;
+ }
+}
+
+
+/*******************************************************************************
+ *
+ * FUNCTION: AcpiDmAddressCommon
+ *
+ * PARAMETERS: Resource - Raw AML descriptor
+ * Type - Descriptor type
+ * Level - Current source code indentation level
+ *
+ * RETURN: None
+ *
+ * DESCRIPTION: Emit common name and flag fields common to address descriptors
+ *
+ ******************************************************************************/
+
+static void
+AcpiDmAddressCommon (
+ AML_RESOURCE *Resource,
+ UINT8 Type,
+ UINT32 Level)
+{
+ UINT8 ResourceType;
+ UINT8 SpecificFlags;
+ UINT8 Flags;
+
+
+ ResourceType = Resource->Address.ResourceType;
+ SpecificFlags = Resource->Address.SpecificFlags;
+ Flags = Resource->Address.Flags;
+
+ AcpiDmIndent (Level);
+
+ /* Validate ResourceType */
+
+ if ((ResourceType > 2) && (ResourceType < 0xC0))
+ {
+ AcpiOsPrintf ("/**** Invalid Resource Type: 0x%X ****/", ResourceType);
+ return;
+ }
+
+ /* Prefix is either Word, DWord, QWord, or Extended */
+
+ AcpiDmAddressPrefix (Type);
+
+ /* Resource Types above 0xC0 are vendor-defined */
+
+ if (ResourceType > 2)
+ {
+ AcpiOsPrintf ("Space (0x%2.2X, ", ResourceType);
+ AcpiDmSpaceFlags (Flags);
+ AcpiOsPrintf (" 0x%2.2X,", SpecificFlags);
+ return;
+ }
+
+ /* This is either a Memory, IO, or BusNumber descriptor (0,1,2) */
+
+ AcpiOsPrintf ("%s (", AcpiGbl_WordDecode [ResourceType]);
+
+ /* Decode the general and type-specific flags */
+
+ if (ResourceType == ACPI_MEMORY_RANGE)
+ {
+ AcpiDmMemoryFlags (Flags, SpecificFlags);
+ }
+ else /* IO range or BusNumberRange */
+ {
+ AcpiDmIoFlags (Flags);
+ if (ResourceType == ACPI_IO_RANGE)
+ {
+ AcpiOsPrintf (" %s,", AcpiGbl_RNGDecode [SpecificFlags & 0x3]);
+ }
+ }
+}
+
+
+/*******************************************************************************
+ *
+ * FUNCTION: AcpiDmAddressFlags
+ *
+ * PARAMETERS: Resource - Raw AML descriptor
+ *
+ * RETURN: None
+ *
+ * DESCRIPTION: Emit flags common to address descriptors
+ *
+ ******************************************************************************/
+
+static void
+AcpiDmAddressFlags (
+ AML_RESOURCE *Resource)
+{
+
+ if (Resource->Address.ResourceType == ACPI_IO_RANGE)
+ {
+ AcpiDmIoFlags2 (Resource->Address.SpecificFlags);
+ }
+ else if (Resource->Address.ResourceType == ACPI_MEMORY_RANGE)
+ {
+ AcpiDmMemoryFlags2 (Resource->Address.SpecificFlags);
+ }
+}
+
+
+/*******************************************************************************
+ *
+ * FUNCTION: AcpiDmSpaceFlags
+ *
+ * PARAMETERS: Flags - Flag byte to be decoded
+ *
+ * RETURN: None
+ *
+ * DESCRIPTION: Decode the flags specific to Space Address space descriptors
+ *
+ ******************************************************************************/
+
+static void
+AcpiDmSpaceFlags (
+ UINT8 Flags)
+{
+
+ AcpiOsPrintf ("%s, %s, %s, %s,",
+ AcpiGbl_ConsumeDecode [(Flags & 1)],
+ AcpiGbl_DECDecode [(Flags & 0x2) >> 1],
+ AcpiGbl_MinDecode [(Flags & 0x4) >> 2],
+ AcpiGbl_MaxDecode [(Flags & 0x8) >> 3]);
+}
+
+
/*******************************************************************************
*
* FUNCTION: AcpiDmIoFlags
@@ -137,7 +469,7 @@
*
******************************************************************************/
-void
+static void
AcpiDmIoFlags (
UINT8 Flags)
{
@@ -151,6 +483,36 @@ AcpiDmIoFlags (
/*******************************************************************************
*
+ * FUNCTION: AcpiDmIoFlags2
+ *
+ * PARAMETERS: SpecificFlags - "Specific" flag byte to be decoded
+ *
+ * RETURN: None
+ *
+ * DESCRIPTION: Decode the flags specific to IO Address space descriptors
+ *
+ ******************************************************************************/
+
+static void
+AcpiDmIoFlags2 (
+ UINT8 SpecificFlags)
+{
+
+ AcpiOsPrintf (", %s",
+ AcpiGbl_TTPDecode [(SpecificFlags & 0x10) >> 4]);
+
+ /* TRS is only used if TTP is TypeTranslation */
+
+ if (SpecificFlags & 0x10)
+ {
+ AcpiOsPrintf (", %s",
+ AcpiGbl_TRSDecode [(SpecificFlags & 0x20) >> 5]);
+ }
+}
+
+
+/*******************************************************************************
+ *
* FUNCTION: AcpiDmMemoryFlags
*
* PARAMETERS: Flags - Flag byte to be decoded
@@ -162,11 +524,12 @@ AcpiDmIoFlags (
*
******************************************************************************/
-void
+static void
AcpiDmMemoryFlags (
UINT8 Flags,
UINT8 SpecificFlags)
{
+
AcpiOsPrintf ("%s, %s, %s, %s, %s, %s,",
AcpiGbl_ConsumeDecode [(Flags & 1)],
AcpiGbl_DECDecode [(Flags & 0x2) >> 1],
@@ -179,6 +542,93 @@ AcpiDmMemoryFlags (
/*******************************************************************************
*
+ * FUNCTION: AcpiDmMemoryFlags2
+ *
+ * PARAMETERS: SpecificFlags - "Specific" flag byte to be decoded
+ *
+ * RETURN: None
+ *
+ * DESCRIPTION: Decode flags specific to Memory Address Space descriptors
+ *
+ ******************************************************************************/
+
+static void
+AcpiDmMemoryFlags2 (
+ UINT8 SpecificFlags)
+{
+
+ AcpiOsPrintf (", %s, %s",
+ AcpiGbl_MTPDecode [(SpecificFlags & 0x18) >> 3],
+ AcpiGbl_TTPDecode [(SpecificFlags & 0x20) >> 5]);
+}
+
+
+/*******************************************************************************
+ *
+ * FUNCTION: AcpiDmResourceSource
+ *
+ * PARAMETERS: Resource - Raw AML descriptor
+ * MinimumLength - descriptor length without optional fields
+ * ResourceLength
+ *
+ * RETURN: None
+ *
+ * DESCRIPTION: Dump optional ResourceSource fields of an address descriptor
+ *
+ ******************************************************************************/
+
+static void
+AcpiDmResourceSource (
+ AML_RESOURCE *Resource,
+ ACPI_SIZE MinimumTotalLength,
+ UINT32 ResourceLength)
+{
+ UINT8 *AmlResourceSource;
+ UINT32 TotalLength;
+
+
+ TotalLength = ResourceLength + sizeof (AML_RESOURCE_LARGE_HEADER);
+
+ /* Check if the optional ResourceSource fields are present */
+
+ if (TotalLength <= MinimumTotalLength)
+ {
+ /* The two optional fields are not used */
+
+ AcpiOsPrintf (",,");
+ return;
+ }
+
+ /* Get a pointer to the ResourceSource */
+
+ AmlResourceSource = ((UINT8 *) Resource) + MinimumTotalLength;
+
+ /*
+ * Always emit the ResourceSourceIndex (Byte)
+ *
+ * NOTE: Some ASL compilers always create a 0 byte (in the AML) for the
+ * Index even if the String does not exist. Although this is in violation
+ * of the ACPI specification, it is very important to emit ASL code that
+ * can be compiled back to the identical AML. There may be fields and/or
+ * indexes into the resource template buffer that are compiled to absolute
+ * offsets, and these will be broken if the AML length is changed.
+ */
+ AcpiOsPrintf ("0x%2.2X,", (UINT32) AmlResourceSource[0]);
+
+ /* Make sure that the ResourceSource string exists before dumping it */
+
+ if (TotalLength > (MinimumTotalLength + 1))
+ {
+ AcpiOsPrintf (" ");
+ AcpiUtPrintString ((char *) &AmlResourceSource[1], ACPI_UINT8_MAX);
+ }
+
+ AcpiOsPrintf (",");
+}
+
+
+/*******************************************************************************
+ *
* FUNCTION: AcpiDmWordDescriptor
*
* PARAMETERS: Resource - Pointer to the resource descriptor
@@ -193,55 +643,27 @@ AcpiDmMemoryFlags (
void
AcpiDmWordDescriptor (
- ASL_WORD_ADDRESS_DESC *Resource,
+ AML_RESOURCE *Resource,
UINT32 Length,
UINT32 Level)
{
- AcpiDmIndent (Level);
- AcpiOsPrintf ("%s (",
- AcpiGbl_WordDecode [(Resource->ResourceType & 3)]);
+ /* Dump resource name and flags */
- AcpiDmIoFlags (Resource->Flags);
+ AcpiDmAddressCommon (Resource, ACPI_RESOURCE_TYPE_ADDRESS16, Level);
- if ((Resource->ResourceType & 0x3) == 1)
- {
- AcpiOsPrintf (" %s,",
- AcpiGbl_RNGDecode [(Resource->SpecificFlags & 0x3)]);
- }
+ /* Dump the 5 contiguous WORD values */
- /* The WORD values */
+ AcpiDmAddressFields (&Resource->Address16.Granularity, 16, Level);
- AcpiOsPrintf ("\n");
- AcpiDmIndent (Level + 1);
- AcpiOsPrintf ("0x%4.4X,\n",
- (UINT32) Resource->Granularity);
- AcpiDmIndent (Level + 1);
- AcpiOsPrintf ("0x%4.4X,\n",
- (UINT32) Resource->AddressMin);
- AcpiDmIndent (Level + 1);
- AcpiOsPrintf ("0x%4.4X,\n",
- (UINT32) Resource->AddressMax);
- AcpiDmIndent (Level + 1);
- AcpiOsPrintf ("0x%4.4X,\n",
- (UINT32) Resource->TranslationOffset);
- AcpiDmIndent (Level + 1);
- AcpiOsPrintf ("0x%4.4X",
- (UINT32) Resource->AddressLength);
+ /* The ResourceSource fields are optional */
- /* Optional fields */
+ AcpiDmIndent (Level + 1);
+ AcpiDmResourceSource (Resource, sizeof (AML_RESOURCE_ADDRESS16), Length);
- if (Length > 13)
- {
- AcpiOsPrintf (", 0x%2.2X",
- (UINT32) Resource->OptionalFields[0]);
- }
+ /* Type-specific flags */
- if (Length > 14)
- {
- AcpiOsPrintf (", %s",
- &Resource->OptionalFields[1]);
- }
+ AcpiDmAddressFlags (Resource);
AcpiOsPrintf (")\n");
}
@@ -262,57 +684,27 @@ AcpiDmWordDescriptor (
void
AcpiDmDwordDescriptor (
- ASL_DWORD_ADDRESS_DESC *Resource,
+ AML_RESOURCE *Resource,
UINT32 Length,
UINT32 Level)
{
- AcpiDmIndent (Level);
- AcpiOsPrintf ("D%s (",
- AcpiGbl_WordDecode [(Resource->ResourceType & 3)]);
+ /* Dump resource name and flags */
- if ((Resource->ResourceType & 0x3) == 1)
- {
- AcpiDmIoFlags (Resource->Flags);
- AcpiOsPrintf (" %s,",
- AcpiGbl_RNGDecode [(Resource->SpecificFlags & 0x3)]);
- }
- else
- {
- AcpiDmMemoryFlags (Resource->Flags, Resource->SpecificFlags);
- }
+ AcpiDmAddressCommon (Resource, ACPI_RESOURCE_TYPE_ADDRESS32, Level);
- /* The DWORD values */
+ /* Dump the 5 contiguous DWORD values */
+
+ AcpiDmAddressFields (&Resource->Address32.Granularity, 32, Level);
+
+ /* The ResourceSource fields are optional */
- AcpiOsPrintf ("\n");
- AcpiDmIndent (Level + 1);
- AcpiOsPrintf ("0x%8.8X,\n",
- Resource->Granularity);
- AcpiDmIndent (Level + 1);
- AcpiOsPrintf ("0x%8.8X,\n",
- Resource->AddressMin);
- AcpiDmIndent (Level + 1);
- AcpiOsPrintf ("0x%8.8X,\n",
- Resource->AddressMax);
- AcpiDmIndent (Level + 1);
- AcpiOsPrintf ("0x%8.8X,\n",
- Resource->TranslationOffset);
AcpiDmIndent (Level + 1);
- AcpiOsPrintf ("0x%8.8X",
- Resource->AddressLength);
+ AcpiDmResourceSource (Resource, sizeof (AML_RESOURCE_ADDRESS32), Length);
- /* Optional fields */
+ /* Type-specific flags */
- if (Length > 23)
- {
- AcpiOsPrintf (", 0x%2.2X",
- Resource->OptionalFields[0]);
- }
- if (Length > 24)
- {
- AcpiOsPrintf (", %s",
- &Resource->OptionalFields[1]);
- }
+ AcpiDmAddressFlags (Resource);
AcpiOsPrintf (")\n");
}
@@ -333,62 +725,70 @@ AcpiDmDwordDescriptor (
void
AcpiDmQwordDescriptor (
- ASL_QWORD_ADDRESS_DESC *Resource,
+ AML_RESOURCE *Resource,
UINT32 Length,
UINT32 Level)
{
- AcpiDmIndent (Level);
- AcpiOsPrintf ("Q%s (",
- AcpiGbl_WordDecode [(Resource->ResourceType & 3)]);
+ /* Dump resource name and flags */
- if ((Resource->ResourceType & 0x3) == 1)
- {
- AcpiDmIoFlags (Resource->Flags);
- AcpiOsPrintf (" %s,",
- AcpiGbl_RNGDecode [(Resource->SpecificFlags & 0x3)]);
- }
- else
- {
- AcpiDmMemoryFlags (Resource->Flags, Resource->SpecificFlags);
- }
+ AcpiDmAddressCommon (Resource, ACPI_RESOURCE_TYPE_ADDRESS64, Level);
- /* The QWORD values */
+ /* Dump the 5 contiguous QWORD values */
- AcpiOsPrintf ("\n");
- AcpiDmIndent (Level + 1);
- AcpiOsPrintf ("0x%8.8X%8.8X,\n",
- ACPI_FORMAT_UINT64 (ACPI_GET_ADDRESS (Resource->Granularity)));
+ AcpiDmAddressFields (&Resource->Address64.Granularity, 64, Level);
- AcpiDmIndent (Level + 1);
- AcpiOsPrintf ("0x%8.8X%8.8X,\n",
- ACPI_FORMAT_UINT64 (ACPI_GET_ADDRESS (Resource->AddressMin)));
+ /* The ResourceSource fields are optional */
AcpiDmIndent (Level + 1);
- AcpiOsPrintf ("0x%8.8X%8.8X,\n",
- ACPI_FORMAT_UINT64 (ACPI_GET_ADDRESS (Resource->AddressMax)));
+ AcpiDmResourceSource (Resource, sizeof (AML_RESOURCE_ADDRESS64), Length);
- AcpiDmIndent (Level + 1);
- AcpiOsPrintf ("0x%8.8X%8.8X,\n",
- ACPI_FORMAT_UINT64 (ACPI_GET_ADDRESS (Resource->TranslationOffset)));
+ /* Type-specific flags */
- AcpiDmIndent (Level + 1);
- AcpiOsPrintf ("0x%8.8X%8.8X",
- ACPI_FORMAT_UINT64 (ACPI_GET_ADDRESS (Resource->AddressLength)));
+ AcpiDmAddressFlags (Resource);
+ AcpiOsPrintf (")\n");
+}
- /* Optional fields */
- if (Length > 43)
- {
- AcpiOsPrintf (", 0x%2.2X",
- Resource->OptionalFields[0]);
- }
- if (Length > 44)
- {
- AcpiOsPrintf (", %s",
- &Resource->OptionalFields[1]);
- }
+/*******************************************************************************
+ *
+ * FUNCTION: AcpiDmExtendedDescriptor
+ *
+ * PARAMETERS: Resource - Pointer to the resource descriptor
+ * Length - Length of the descriptor in bytes
+ * Level - Current source code indentation level
+ *
+ * RETURN: None
+ *
+ * DESCRIPTION: Decode a Extended Address Space descriptor
+ *
+ ******************************************************************************/
+
+void
+AcpiDmExtendedDescriptor (
+ AML_RESOURCE *Resource,
+ UINT32 Length,
+ UINT32 Level)
+{
+
+ /* Dump resource name and flags */
+
+ AcpiDmAddressCommon (Resource, ACPI_RESOURCE_TYPE_EXTENDED_ADDRESS64, Level);
+
+ /* Dump the 5 contiguous QWORD values */
+
+ AcpiDmAddressFields (&Resource->ExtAddress64.Granularity, 64, Level);
+
+ /* Extra field for this descriptor only */
+ AcpiDmIndent (Level + 1);
+ AcpiDmDumpInteger64 (Resource->ExtAddress64.TypeSpecific,
+ "Type-Specific Attributes");
+
+ /* Type-specific flags */
+
+ AcpiDmIndent (Level + 1);
+ AcpiDmAddressFlags (Resource);
AcpiOsPrintf (")\n");
}
@@ -409,18 +809,23 @@ AcpiDmQwordDescriptor (
void
AcpiDmMemory24Descriptor (
- ASL_MEMORY_24_DESC *Resource,
+ AML_RESOURCE *Resource,
UINT32 Length,
UINT32 Level)
{
+ /* Dump name and read/write flag */
+
AcpiDmIndent (Level);
- AcpiOsPrintf ("Memory24 (%s, 0x%4.4X, 0x%4.4X, 0x%4.4X, 0x%4.4X)\n",
- AcpiGbl_RWDecode [Resource->Information & 1],
- (UINT32) Resource->AddressMin,
- (UINT32) Resource->AddressMax,
- (UINT32) Resource->Alignment,
- (UINT32) Resource->RangeLength);
+ AcpiOsPrintf ("Memory24 (%s,\n",
+ AcpiGbl_RWDecode [Resource->Memory24.Flags & 1]);
+
+ /* Dump the 4 contiguous WORD values */
+
+ AcpiDmMemoryFields (&Resource->Memory24.Minimum, 16, Level);
+
+ AcpiDmIndent (Level + 1);
+ AcpiOsPrintf (")\n");
}
@@ -440,24 +845,29 @@ AcpiDmMemory24Descriptor (
void
AcpiDmMemory32Descriptor (
- ASL_MEMORY_32_DESC *Resource,
+ AML_RESOURCE *Resource,
UINT32 Length,
UINT32 Level)
{
+ /* Dump name and read/write flag */
+
AcpiDmIndent (Level);
- AcpiOsPrintf ("Memory32 (%s, 0x%8.8X, 0x%8.8X, 0x%8.8X, 0x%8.8X)\n",
- AcpiGbl_RWDecode [Resource->Information & 1],
- Resource->AddressMin,
- Resource->AddressMax,
- Resource->Alignment,
- Resource->RangeLength);
+ AcpiOsPrintf ("Memory32 (%s,\n",
+ AcpiGbl_RWDecode [Resource->Memory32.Flags & 1]);
+
+ /* Dump the 4 contiguous DWORD values */
+
+ AcpiDmMemoryFields (&Resource->Memory32.Minimum, 32, Level);
+
+ AcpiDmIndent (Level + 1);
+ AcpiOsPrintf (")\n");
}
/*******************************************************************************
*
- * FUNCTION: AcpiDmFixedMem32Descriptor
+ * FUNCTION: AcpiDmFixedMemory32Descriptor
*
* PARAMETERS: Resource - Pointer to the resource descriptor
* Length - Length of the descriptor in bytes
@@ -470,17 +880,26 @@ AcpiDmMemory32Descriptor (
******************************************************************************/
void
-AcpiDmFixedMem32Descriptor (
- ASL_FIXED_MEMORY_32_DESC *Resource,
+AcpiDmFixedMemory32Descriptor (
+ AML_RESOURCE *Resource,
UINT32 Length,
UINT32 Level)
{
+ /* Dump name and read/write flag */
+
AcpiDmIndent (Level);
- AcpiOsPrintf ("Memory32Fixed (%s, 0x%8.8X, 0x%8.8X)\n",
- AcpiGbl_RWDecode [Resource->Information & 1],
- Resource->BaseAddress,
- Resource->RangeLength);
+ AcpiOsPrintf ("Memory32Fixed (%s,\n",
+ AcpiGbl_RWDecode [Resource->FixedMemory32.Flags & 1]);
+
+ AcpiDmIndent (Level + 1);
+ AcpiDmDumpInteger32 (Resource->FixedMemory32.Address, "Address Base");
+
+ AcpiDmIndent (Level + 1);
+ AcpiDmDumpInteger32 (Resource->FixedMemory32.AddressLength, "Address Length");
+
+ AcpiDmIndent (Level + 1);
+ AcpiOsPrintf (")\n");
}
@@ -500,20 +919,36 @@ AcpiDmFixedMem32Descriptor (
void
AcpiDmGenericRegisterDescriptor (
- ASL_GENERAL_REGISTER_DESC *Resource,
+ AML_RESOURCE *Resource,
UINT32 Length,
UINT32 Level)
{
AcpiDmIndent (Level);
AcpiOsPrintf ("Register (");
+ AcpiDmAddressSpace (Resource->GenericReg.AddressSpaceId);
+ AcpiOsPrintf ("\n");
+
+ AcpiDmIndent (Level + 1);
+ AcpiDmDumpInteger8 (Resource->GenericReg.BitWidth, "Register Bit Width");
+
+ AcpiDmIndent (Level + 1);
+ AcpiDmDumpInteger8 (Resource->GenericReg.BitOffset, "Register Bit Offset");
- AcpiDmAddressSpace (Resource->AddressSpaceId);
+ AcpiDmIndent (Level + 1);
+ AcpiDmDumpInteger64 (Resource->GenericReg.Address, "Register Address");
+
+ /* Optional field for ACPI 3.0 */
+
+ if (Resource->GenericReg.AccessSize)
+ {
+ AcpiDmIndent (Level + 1);
+ AcpiOsPrintf ("0x%2.2X // %s\n",
+ Resource->GenericReg.AccessSize, "Access Size");
+ }
- AcpiOsPrintf ("0x%2.2X, 0x%2.2X, 0x%8.8X%8.8X)\n",
- (UINT32) Resource->BitWidth,
- (UINT32) Resource->BitOffset,
- ACPI_FORMAT_UINT64 (ACPI_GET_ADDRESS (Resource->Address)));
+ AcpiDmIndent (Level + 1);
+ AcpiOsPrintf (")\n");
}
@@ -533,42 +968,40 @@ AcpiDmGenericRegisterDescriptor (
void
AcpiDmInterruptDescriptor (
- ASL_EXTENDED_XRUPT_DESC *Resource,
+ AML_RESOURCE *Resource,
UINT32 Length,
UINT32 Level)
{
UINT32 i;
- UINT8 *Rover;
AcpiDmIndent (Level);
- AcpiOsPrintf ("Interrupt (%s, %s, %s, %s",
- AcpiGbl_ConsumeDecode [(Resource->Flags & 1)],
- AcpiGbl_HEDecode [(Resource->Flags >> 1) & 1],
- AcpiGbl_LLDecode [(Resource->Flags >> 2) & 1],
- AcpiGbl_SHRDecode [(Resource->Flags >> 3) & 1]);
-
- /* Resource Index/Source, optional -- at end of descriptor */
-
- if (Resource->Length > (UINT16) (4 * Resource->TableLength) + 2)
- {
- /* Get a pointer past the interrupt values */
-
- Rover = ((UINT8 *) Resource) + ((4 * Resource->TableLength) + 5);
-
- /* Resource Index */
- /* Resource Source */
-
- AcpiOsPrintf (", 0x%X, \"%s\"", (UINT32) Rover[0], (char *) &Rover[1]);
- }
+ AcpiOsPrintf ("Interrupt (%s, %s, %s, %s, ",
+ AcpiGbl_ConsumeDecode [(Resource->ExtendedIrq.Flags & 1)],
+ AcpiGbl_HEDecode [(Resource->ExtendedIrq.Flags >> 1) & 1],
+ AcpiGbl_LLDecode [(Resource->ExtendedIrq.Flags >> 2) & 1],
+ AcpiGbl_SHRDecode [(Resource->ExtendedIrq.Flags >> 3) & 1]);
+
+ /*
+ * The ResourceSource fields are optional and appear after the interrupt
+ * list. Must compute length based on length of the list. First xrupt
+ * is included in the struct (reason for -1 below)
+ */
+ AcpiDmResourceSource (Resource,
+ sizeof (AML_RESOURCE_EXTENDED_IRQ) +
+ (Resource->ExtendedIrq.InterruptCount - 1) * sizeof (UINT32),
+ Resource->ExtendedIrq.ResourceLength);
+
+ /* Dump the interrupt list */
AcpiOsPrintf (")\n");
AcpiDmIndent (Level);
AcpiOsPrintf ("{\n");
- for (i = 0; i < Resource->TableLength; i++)
+ for (i = 0; i < Resource->ExtendedIrq.InterruptCount; i++)
{
AcpiDmIndent (Level + 1);
- AcpiOsPrintf ("0x%8.8X,\n", (UINT32) Resource->InterruptNumber[i]);
+ AcpiOsPrintf ("0x%8.8X,\n",
+ (UINT32) Resource->ExtendedIrq.Interrupts[i]);
}
AcpiDmIndent (Level);
@@ -578,36 +1011,69 @@ AcpiDmInterruptDescriptor (
/*******************************************************************************
*
- * FUNCTION: AcpiDmVendorLargeDescriptor
+ * FUNCTION: AcpiDmVendorCommon
*
- * PARAMETERS: Resource - Pointer to the resource descriptor
- * Length - Length of the descriptor in bytes
+ * PARAMETERS: Name - Descriptor name suffix
+ * ByteData - Pointer to the vendor byte data
+ * Length - Length of the byte data
* Level - Current source code indentation level
*
* RETURN: None
*
- * DESCRIPTION: Decode a Vendor Large descriptor
+ * DESCRIPTION: Decode a Vendor descriptor, both Large and Small
*
******************************************************************************/
void
-AcpiDmVendorLargeDescriptor (
- ASL_LARGE_VENDOR_DESC *Resource,
+AcpiDmVendorCommon (
+ char *Name,
+ UINT8 *ByteData,
UINT32 Length,
UINT32 Level)
{
+ /* Dump descriptor name */
+
AcpiDmIndent (Level);
- AcpiOsPrintf ("VendorLong ()\n");
- AcpiDmIndent (Level);
+ AcpiOsPrintf ("Vendor%s // Length = 0x%.2X\n", Name, Length);
+
+ /* Dump the vendor bytes */
+ AcpiDmIndent (Level);
AcpiOsPrintf ("{\n");
- AcpiDmDisasmByteList (Level + 1, (UINT8 *) Resource->VendorDefined, Length);
+ AcpiDmDisasmByteList (Level + 1, ByteData, Length);
+
AcpiDmIndent (Level);
AcpiOsPrintf ("}\n");
}
+/*******************************************************************************
+ *
+ * FUNCTION: AcpiDmVendorLargeDescriptor
+ *
+ * PARAMETERS: Resource - Pointer to the resource descriptor
+ * Length - Length of the descriptor in bytes
+ * Level - Current source code indentation level
+ *
+ * RETURN: None
+ *
+ * DESCRIPTION: Decode a Vendor Large descriptor
+ *
+ ******************************************************************************/
+
+void
+AcpiDmVendorLargeDescriptor (
+ AML_RESOURCE *Resource,
+ UINT32 Length,
+ UINT32 Level)
+{
+
+ AcpiDmVendorCommon ("Long () ",
+ ((UINT8 *) Resource) + sizeof (AML_RESOURCE_LARGE_HEADER),
+ Length, Level);
+}
+
#endif
OpenPOWER on IntegriCloud