|
|
edb6c78 |
From 49b3d77990241c7216412d78e52cf15b3aa6d1ad Mon Sep 17 00:00:00 2001
|
|
|
edb6c78 |
From: Al Stone <ahs3@redhat.com>
|
|
|
edb6c78 |
Date: Wed, 30 Sep 2020 18:18:07 -0600
|
|
|
edb6c78 |
Subject: [PATCH 37/40] Support IVRS in a big-endian world
|
|
|
edb6c78 |
|
|
|
edb6c78 |
Signed-off-by: Al Stone <ahs3@redhat.com>
|
|
|
edb6c78 |
---
|
|
|
edb6c78 |
source/common/dmtbdump2.c | 25 ++++++++++++++-----------
|
|
|
edb6c78 |
1 file changed, 14 insertions(+), 11 deletions(-)
|
|
|
edb6c78 |
|
|
|
edb6c78 |
Index: acpica-unix2-20200925/source/common/dmtbdump2.c
|
|
|
edb6c78 |
===================================================================
|
|
|
edb6c78 |
--- acpica-unix2-20200925.orig/source/common/dmtbdump2.c
|
|
|
edb6c78 |
+++ acpica-unix2-20200925/source/common/dmtbdump2.c
|
|
|
edb6c78 |
@@ -353,11 +353,13 @@ AcpiDmDumpIvrs (
|
|
|
edb6c78 |
ACPI_IVRS_DE_HEADER *DeviceEntry;
|
|
|
edb6c78 |
ACPI_IVRS_HEADER *Subtable;
|
|
|
edb6c78 |
ACPI_DMTABLE_INFO *InfoTable;
|
|
|
edb6c78 |
+ UINT32 TableLength = AcpiUtReadUint32(&Table->Length);
|
|
|
edb6c78 |
+ UINT16 SubtableLength;
|
|
|
edb6c78 |
|
|
|
edb6c78 |
|
|
|
edb6c78 |
/* Main table */
|
|
|
edb6c78 |
|
|
|
edb6c78 |
- Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoIvrs);
|
|
|
edb6c78 |
+ Status = AcpiDmDumpTable (TableLength, 0, Table, 0, AcpiDmTableInfoIvrs);
|
|
|
edb6c78 |
if (ACPI_FAILURE (Status))
|
|
|
edb6c78 |
{
|
|
|
edb6c78 |
return;
|
|
|
edb6c78 |
@@ -366,13 +368,14 @@ AcpiDmDumpIvrs (
|
|
|
edb6c78 |
/* Subtables */
|
|
|
edb6c78 |
|
|
|
edb6c78 |
Subtable = ACPI_ADD_PTR (ACPI_IVRS_HEADER, Table, Offset);
|
|
|
edb6c78 |
- while (Offset < Table->Length)
|
|
|
edb6c78 |
+ while (Offset < TableLength)
|
|
|
edb6c78 |
{
|
|
|
edb6c78 |
/* Common subtable header */
|
|
|
edb6c78 |
|
|
|
edb6c78 |
AcpiOsPrintf ("\n");
|
|
|
edb6c78 |
- Status = AcpiDmDumpTable (Table->Length, Offset, Subtable,
|
|
|
edb6c78 |
- Subtable->Length, AcpiDmTableInfoIvrsHdr);
|
|
|
edb6c78 |
+ SubtableLength = AcpiUtReadUint16(&Subtable->Length);
|
|
|
edb6c78 |
+ Status = AcpiDmDumpTable (TableLength, Offset, Subtable,
|
|
|
edb6c78 |
+ SubtableLength, AcpiDmTableInfoIvrsHdr);
|
|
|
edb6c78 |
if (ACPI_FAILURE (Status))
|
|
|
edb6c78 |
{
|
|
|
edb6c78 |
return;
|
|
|
edb6c78 |
@@ -404,7 +407,7 @@ AcpiDmDumpIvrs (
|
|
|
edb6c78 |
|
|
|
edb6c78 |
/* Attempt to continue */
|
|
|
edb6c78 |
|
|
|
edb6c78 |
- if (!Subtable->Length)
|
|
|
edb6c78 |
+ if (!SubtableLength)
|
|
|
edb6c78 |
{
|
|
|
edb6c78 |
AcpiOsPrintf ("Invalid zero length subtable\n");
|
|
|
edb6c78 |
return;
|
|
|
edb6c78 |
@@ -415,8 +418,8 @@ AcpiDmDumpIvrs (
|
|
|
edb6c78 |
/* Dump the subtable */
|
|
|
edb6c78 |
|
|
|
edb6c78 |
AcpiOsPrintf ("\n");
|
|
|
edb6c78 |
- Status = AcpiDmDumpTable (Table->Length, Offset, Subtable,
|
|
|
edb6c78 |
- Subtable->Length, InfoTable);
|
|
|
edb6c78 |
+ Status = AcpiDmDumpTable (TableLength, Offset, Subtable,
|
|
|
edb6c78 |
+ SubtableLength, InfoTable);
|
|
|
edb6c78 |
if (ACPI_FAILURE (Status))
|
|
|
edb6c78 |
{
|
|
|
edb6c78 |
return;
|
|
|
edb6c78 |
@@ -442,7 +445,7 @@ AcpiDmDumpIvrs (
|
|
|
edb6c78 |
sizeof (ACPI_IVRS_HARDWARE2));
|
|
|
edb6c78 |
}
|
|
|
edb6c78 |
|
|
|
edb6c78 |
- while (EntryOffset < (Offset + Subtable->Length))
|
|
|
edb6c78 |
+ while (EntryOffset < (Offset + SubtableLength))
|
|
|
edb6c78 |
{
|
|
|
edb6c78 |
AcpiOsPrintf ("\n");
|
|
|
edb6c78 |
/*
|
|
|
edb6c78 |
@@ -504,7 +507,7 @@ AcpiDmDumpIvrs (
|
|
|
edb6c78 |
|
|
|
edb6c78 |
/* Dump the Device Entry */
|
|
|
edb6c78 |
|
|
|
edb6c78 |
- Status = AcpiDmDumpTable (Table->Length, EntryOffset,
|
|
|
edb6c78 |
+ Status = AcpiDmDumpTable (TableLength, EntryOffset,
|
|
|
edb6c78 |
DeviceEntry, EntryLength, InfoTable);
|
|
|
edb6c78 |
if (ACPI_FAILURE (Status))
|
|
|
edb6c78 |
{
|
|
|
edb6c78 |
@@ -520,8 +523,8 @@ AcpiDmDumpIvrs (
|
|
|
edb6c78 |
NextSubtable:
|
|
|
edb6c78 |
/* Point to next subtable */
|
|
|
edb6c78 |
|
|
|
edb6c78 |
- Offset += Subtable->Length;
|
|
|
edb6c78 |
- Subtable = ACPI_ADD_PTR (ACPI_IVRS_HEADER, Subtable, Subtable->Length);
|
|
|
edb6c78 |
+ Offset += SubtableLength;
|
|
|
edb6c78 |
+ Subtable = ACPI_ADD_PTR (ACPI_IVRS_HEADER, Subtable, SubtableLength);
|
|
|
edb6c78 |
}
|
|
|
edb6c78 |
}
|
|
|
edb6c78 |
|