summaryrefslogtreecommitdiff
path: root/ShellPkg/Library/UefiShellAcpiViewCommandLib/Parsers/Dbg2/Dbg2Parser.c
diff options
context:
space:
mode:
authorkx <kx@radix.pro>2024-06-04 06:43:08 +0300
committerkx <kx@radix.pro>2024-06-04 06:43:08 +0300
commit7e2ccccace24636f29ddc210b94606abd4c7e42b (patch)
tree545d43ea12671048956cafeb12303e84d601e571 /ShellPkg/Library/UefiShellAcpiViewCommandLib/Parsers/Dbg2/Dbg2Parser.c
parent27b044605cd5f6b33a3d231576003850b3fe305b (diff)
downloadedk2-trunk.tar.xz
Renormalized end-of-lines from master@27b044605cd5f6b33a3d231576003850b3fe305btrunk
Diffstat (limited to 'ShellPkg/Library/UefiShellAcpiViewCommandLib/Parsers/Dbg2/Dbg2Parser.c')
-rw-r--r--ShellPkg/Library/UefiShellAcpiViewCommandLib/Parsers/Dbg2/Dbg2Parser.c622
1 files changed, 311 insertions, 311 deletions
diff --git a/ShellPkg/Library/UefiShellAcpiViewCommandLib/Parsers/Dbg2/Dbg2Parser.c b/ShellPkg/Library/UefiShellAcpiViewCommandLib/Parsers/Dbg2/Dbg2Parser.c
index d25d4d84f8..1ad6ae130c 100644
--- a/ShellPkg/Library/UefiShellAcpiViewCommandLib/Parsers/Dbg2/Dbg2Parser.c
+++ b/ShellPkg/Library/UefiShellAcpiViewCommandLib/Parsers/Dbg2/Dbg2Parser.c
@@ -1,311 +1,311 @@
-/** @file
- DBG2 table parser
-
- Copyright (c) 2016 - 2020, ARM Limited. All rights reserved.
- SPDX-License-Identifier: BSD-2-Clause-Patent
-
- @par Reference(s):
- - Microsoft Debug Port Table 2 (DBG2) Specification - December 10, 2015.
-**/
-
-#include <IndustryStandard/DebugPort2Table.h>
-#include <Library/UefiLib.h>
-#include "AcpiParser.h"
-#include "AcpiTableParser.h"
-
-// Local variables pointing to the table fields
-STATIC CONST UINT32 *OffsetDbgDeviceInfo;
-STATIC CONST UINT32 *NumberDbgDeviceInfo;
-STATIC CONST UINT16 *DbgDevInfoLen;
-STATIC CONST UINT8 *GasCount;
-STATIC CONST UINT16 *NameSpaceStringLength;
-STATIC CONST UINT16 *NameSpaceStringOffset;
-STATIC CONST UINT16 *OEMDataLength;
-STATIC CONST UINT16 *OEMDataOffset;
-STATIC CONST UINT16 *BaseAddrRegOffset;
-STATIC CONST UINT16 *AddrSizeOffset;
-STATIC ACPI_DESCRIPTION_HEADER_INFO AcpiHdrInfo;
-
-/**
- This function validates the NameSpace string length.
-
- @param [in] Ptr Pointer to the start of the buffer.
- @param [in] Context Pointer to context specific information e.g. this
- could be a pointer to the ACPI table header.
-**/
-STATIC
-VOID
-EFIAPI
-ValidateNameSpaceStrLen (
- IN UINT8 *Ptr,
- IN VOID *Context
- )
-{
- UINT16 NameSpaceStrLen;
-
- NameSpaceStrLen = *(UINT16 *)Ptr;
-
- if (NameSpaceStrLen < 2) {
- IncrementErrorCount ();
- Print (
- L"\nERROR: NamespaceString Length = %d. If no Namespace device exists, " \
- L"NamespaceString[] must contain a period '.'",
- NameSpaceStrLen
- );
- }
-}
-
-/// An ACPI_PARSER array describing the ACPI DBG2 table.
-STATIC CONST ACPI_PARSER Dbg2Parser[] = {
- PARSE_ACPI_HEADER (&AcpiHdrInfo),
- { L"OffsetDbgDeviceInfo", 4, 36, L"0x%x", NULL,
- (VOID **)&OffsetDbgDeviceInfo, NULL, NULL },
- { L"NumberDbgDeviceInfo", 4, 40, L"%d", NULL,
- (VOID **)&NumberDbgDeviceInfo, NULL, NULL }
-};
-
-/// An ACPI_PARSER array describing the debug device information structure
-/// header.
-STATIC CONST ACPI_PARSER DbgDevInfoHeaderParser[] = {
- { L"Revision", 1, 0, L"0x%x", NULL, NULL, NULL, NULL },
- { L"Length", 2, 1, L"%d", NULL, (VOID **)&DbgDevInfoLen, NULL, NULL }
-};
-
-/// An ACPI_PARSER array describing the debug device information.
-STATIC CONST ACPI_PARSER DbgDevInfoParser[] = {
- { L"Revision", 1, 0, L"0x%x", NULL, NULL, NULL, NULL },
- { L"Length", 2, 1, L"%d", NULL, NULL, NULL, NULL },
-
- { L"Generic Address Registers Count", 1, 3, L"0x%x", NULL,
- (VOID **)&GasCount, NULL, NULL },
- { L"NameSpace String Length", 2, 4, L"%d", NULL,
- (VOID **)&NameSpaceStringLength, ValidateNameSpaceStrLen, NULL },
- { L"NameSpace String Offset", 2, 6, L"0x%x", NULL,
- (VOID **)&NameSpaceStringOffset, NULL, NULL },
- { L"OEM Data Length", 2, 8, L"%d", NULL, (VOID **)&OEMDataLength,
- NULL, NULL },
- { L"OEM Data Offset", 2, 10, L"0x%x", NULL, (VOID **)&OEMDataOffset,
- NULL, NULL },
-
- { L"Port Type", 2, 12, L"0x%x", NULL, NULL, NULL, NULL },
- { L"Port SubType", 2, 14, L"0x%x", NULL, NULL, NULL, NULL },
- { L"Reserved", 2, 16, L"%x", NULL, NULL, NULL, NULL },
-
- { L"Base Address Register Offset", 2, 18, L"0x%x", NULL,
- (VOID **)&BaseAddrRegOffset, NULL, NULL },
- { L"Address Size Offset", 2, 20, L"0x%x", NULL,
- (VOID **)&AddrSizeOffset, NULL, NULL }
-};
-
-/**
- This function parses the debug device information structure.
-
- @param [in] Ptr Pointer to the start of the buffer.
- @param [in] Length Length of the debug device information structure.
-**/
-STATIC
-VOID
-EFIAPI
-DumpDbgDeviceInfo (
- IN UINT8 *Ptr,
- IN UINT16 Length
- )
-{
- UINT16 Index;
- UINT16 Offset;
-
- ParseAcpi (
- TRUE,
- 2,
- "Debug Device Info",
- Ptr,
- Length,
- PARSER_PARAMS (DbgDevInfoParser)
- );
-
- // Check if the values used to control the parsing logic have been
- // successfully read.
- if ((GasCount == NULL) ||
- (NameSpaceStringLength == NULL) ||
- (NameSpaceStringOffset == NULL) ||
- (OEMDataLength == NULL) ||
- (OEMDataOffset == NULL) ||
- (BaseAddrRegOffset == NULL) ||
- (AddrSizeOffset == NULL))
- {
- IncrementErrorCount ();
- Print (
- L"ERROR: Insufficient Debug Device Information Structure length. " \
- L"Length = %d.\n",
- Length
- );
- return;
- }
-
- // GAS
- Index = 0;
- Offset = *BaseAddrRegOffset;
- while ((Index++ < *GasCount) &&
- (Offset < Length))
- {
- PrintFieldName (4, L"BaseAddressRegister");
- Offset += (UINT16)DumpGasStruct (
- Ptr + Offset,
- 4,
- Length - Offset
- );
- }
-
- // Make sure the array of address sizes corresponding to each GAS fit in the
- // Debug Device Information structure
- if ((*AddrSizeOffset + (*GasCount * sizeof (UINT32))) > Length) {
- IncrementErrorCount ();
- Print (
- L"ERROR: Invalid GAS count. GasCount = %d. RemainingBufferLength = %d. " \
- L"Parsing of the Debug Device Information structure aborted.\n",
- *GasCount,
- Length - *AddrSizeOffset
- );
- return;
- }
-
- // Address Size
- Index = 0;
- Offset = *AddrSizeOffset;
- while ((Index++ < *GasCount) &&
- (Offset < Length))
- {
- PrintFieldName (4, L"Address Size");
- Print (L"0x%x\n", *((UINT32 *)(Ptr + Offset)));
- Offset += sizeof (UINT32);
- }
-
- // NameSpace String
- Index = 0;
- Offset = *NameSpaceStringOffset;
- PrintFieldName (4, L"NameSpace String");
- while ((Index++ < *NameSpaceStringLength) &&
- (Offset < Length))
- {
- Print (L"%c", *(Ptr + Offset));
- Offset++;
- }
-
- Print (L"\n");
-
- // OEM Data
- if (*OEMDataOffset != 0) {
- Index = 0;
- Offset = *OEMDataOffset;
- PrintFieldName (4, L"OEM Data");
- while ((Index++ < *OEMDataLength) &&
- (Offset < Length))
- {
- Print (L"%x ", *(Ptr + Offset));
- if ((Index & 7) == 0) {
- Print (L"\n%-*s ", OUTPUT_FIELD_COLUMN_WIDTH, L"");
- }
-
- Offset++;
- }
-
- Print (L"\n");
- }
-}
-
-/**
- This function parses the ACPI DBG2 table.
- When trace is enabled this function parses the DBG2 table and
- traces the ACPI table fields.
-
- This function also performs validation of the ACPI table fields.
-
- @param [in] Trace If TRUE, trace the ACPI fields.
- @param [in] Ptr Pointer to the start of the buffer.
- @param [in] AcpiTableLength Length of the ACPI table.
- @param [in] AcpiTableRevision Revision of the ACPI table.
-**/
-VOID
-EFIAPI
-ParseAcpiDbg2 (
- IN BOOLEAN Trace,
- IN UINT8 *Ptr,
- IN UINT32 AcpiTableLength,
- IN UINT8 AcpiTableRevision
- )
-{
- UINT32 Offset;
- UINT32 Index;
-
- if (!Trace) {
- return;
- }
-
- Offset = ParseAcpi (
- TRUE,
- 0,
- "DBG2",
- Ptr,
- AcpiTableLength,
- PARSER_PARAMS (Dbg2Parser)
- );
-
- // Check if the values used to control the parsing logic have been
- // successfully read.
- if ((OffsetDbgDeviceInfo == NULL) ||
- (NumberDbgDeviceInfo == NULL))
- {
- IncrementErrorCount ();
- Print (
- L"ERROR: Insufficient table length. AcpiTableLength = %d\n",
- AcpiTableLength
- );
- return;
- }
-
- Offset = *OffsetDbgDeviceInfo;
- Index = 0;
-
- while (Index++ < *NumberDbgDeviceInfo) {
- // Parse the Debug Device Information Structure header to obtain Length
- ParseAcpi (
- FALSE,
- 0,
- NULL,
- Ptr + Offset,
- AcpiTableLength - Offset,
- PARSER_PARAMS (DbgDevInfoHeaderParser)
- );
-
- // Check if the values used to control the parsing logic have been
- // successfully read.
- if (DbgDevInfoLen == NULL) {
- IncrementErrorCount ();
- Print (
- L"ERROR: Insufficient remaining table buffer length to read the " \
- L"Debug Device Information structure's 'Length' field. " \
- L"RemainingTableBufferLength = %d.\n",
- AcpiTableLength - Offset
- );
- return;
- }
-
- // Validate Debug Device Information Structure length
- if ((*DbgDevInfoLen == 0) ||
- ((Offset + (*DbgDevInfoLen)) > AcpiTableLength))
- {
- IncrementErrorCount ();
- Print (
- L"ERROR: Invalid Debug Device Information Structure length. " \
- L"Length = %d. Offset = %d. AcpiTableLength = %d.\n",
- *DbgDevInfoLen,
- Offset,
- AcpiTableLength
- );
- return;
- }
-
- DumpDbgDeviceInfo (Ptr + Offset, (*DbgDevInfoLen));
- Offset += (*DbgDevInfoLen);
- }
-}
+/** @file
+ DBG2 table parser
+
+ Copyright (c) 2016 - 2020, ARM Limited. All rights reserved.
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+
+ @par Reference(s):
+ - Microsoft Debug Port Table 2 (DBG2) Specification - December 10, 2015.
+**/
+
+#include <IndustryStandard/DebugPort2Table.h>
+#include <Library/UefiLib.h>
+#include "AcpiParser.h"
+#include "AcpiTableParser.h"
+
+// Local variables pointing to the table fields
+STATIC CONST UINT32 *OffsetDbgDeviceInfo;
+STATIC CONST UINT32 *NumberDbgDeviceInfo;
+STATIC CONST UINT16 *DbgDevInfoLen;
+STATIC CONST UINT8 *GasCount;
+STATIC CONST UINT16 *NameSpaceStringLength;
+STATIC CONST UINT16 *NameSpaceStringOffset;
+STATIC CONST UINT16 *OEMDataLength;
+STATIC CONST UINT16 *OEMDataOffset;
+STATIC CONST UINT16 *BaseAddrRegOffset;
+STATIC CONST UINT16 *AddrSizeOffset;
+STATIC ACPI_DESCRIPTION_HEADER_INFO AcpiHdrInfo;
+
+/**
+ This function validates the NameSpace string length.
+
+ @param [in] Ptr Pointer to the start of the buffer.
+ @param [in] Context Pointer to context specific information e.g. this
+ could be a pointer to the ACPI table header.
+**/
+STATIC
+VOID
+EFIAPI
+ValidateNameSpaceStrLen (
+ IN UINT8 *Ptr,
+ IN VOID *Context
+ )
+{
+ UINT16 NameSpaceStrLen;
+
+ NameSpaceStrLen = *(UINT16 *)Ptr;
+
+ if (NameSpaceStrLen < 2) {
+ IncrementErrorCount ();
+ Print (
+ L"\nERROR: NamespaceString Length = %d. If no Namespace device exists, " \
+ L"NamespaceString[] must contain a period '.'",
+ NameSpaceStrLen
+ );
+ }
+}
+
+/// An ACPI_PARSER array describing the ACPI DBG2 table.
+STATIC CONST ACPI_PARSER Dbg2Parser[] = {
+ PARSE_ACPI_HEADER (&AcpiHdrInfo),
+ { L"OffsetDbgDeviceInfo", 4, 36, L"0x%x", NULL,
+ (VOID **)&OffsetDbgDeviceInfo, NULL, NULL },
+ { L"NumberDbgDeviceInfo", 4, 40, L"%d", NULL,
+ (VOID **)&NumberDbgDeviceInfo, NULL, NULL }
+};
+
+/// An ACPI_PARSER array describing the debug device information structure
+/// header.
+STATIC CONST ACPI_PARSER DbgDevInfoHeaderParser[] = {
+ { L"Revision", 1, 0, L"0x%x", NULL, NULL, NULL, NULL },
+ { L"Length", 2, 1, L"%d", NULL, (VOID **)&DbgDevInfoLen, NULL, NULL }
+};
+
+/// An ACPI_PARSER array describing the debug device information.
+STATIC CONST ACPI_PARSER DbgDevInfoParser[] = {
+ { L"Revision", 1, 0, L"0x%x", NULL, NULL, NULL, NULL },
+ { L"Length", 2, 1, L"%d", NULL, NULL, NULL, NULL },
+
+ { L"Generic Address Registers Count", 1, 3, L"0x%x", NULL,
+ (VOID **)&GasCount, NULL, NULL },
+ { L"NameSpace String Length", 2, 4, L"%d", NULL,
+ (VOID **)&NameSpaceStringLength, ValidateNameSpaceStrLen, NULL },
+ { L"NameSpace String Offset", 2, 6, L"0x%x", NULL,
+ (VOID **)&NameSpaceStringOffset, NULL, NULL },
+ { L"OEM Data Length", 2, 8, L"%d", NULL, (VOID **)&OEMDataLength,
+ NULL, NULL },
+ { L"OEM Data Offset", 2, 10, L"0x%x", NULL, (VOID **)&OEMDataOffset,
+ NULL, NULL },
+
+ { L"Port Type", 2, 12, L"0x%x", NULL, NULL, NULL, NULL },
+ { L"Port SubType", 2, 14, L"0x%x", NULL, NULL, NULL, NULL },
+ { L"Reserved", 2, 16, L"%x", NULL, NULL, NULL, NULL },
+
+ { L"Base Address Register Offset", 2, 18, L"0x%x", NULL,
+ (VOID **)&BaseAddrRegOffset, NULL, NULL },
+ { L"Address Size Offset", 2, 20, L"0x%x", NULL,
+ (VOID **)&AddrSizeOffset, NULL, NULL }
+};
+
+/**
+ This function parses the debug device information structure.
+
+ @param [in] Ptr Pointer to the start of the buffer.
+ @param [in] Length Length of the debug device information structure.
+**/
+STATIC
+VOID
+EFIAPI
+DumpDbgDeviceInfo (
+ IN UINT8 *Ptr,
+ IN UINT16 Length
+ )
+{
+ UINT16 Index;
+ UINT16 Offset;
+
+ ParseAcpi (
+ TRUE,
+ 2,
+ "Debug Device Info",
+ Ptr,
+ Length,
+ PARSER_PARAMS (DbgDevInfoParser)
+ );
+
+ // Check if the values used to control the parsing logic have been
+ // successfully read.
+ if ((GasCount == NULL) ||
+ (NameSpaceStringLength == NULL) ||
+ (NameSpaceStringOffset == NULL) ||
+ (OEMDataLength == NULL) ||
+ (OEMDataOffset == NULL) ||
+ (BaseAddrRegOffset == NULL) ||
+ (AddrSizeOffset == NULL))
+ {
+ IncrementErrorCount ();
+ Print (
+ L"ERROR: Insufficient Debug Device Information Structure length. " \
+ L"Length = %d.\n",
+ Length
+ );
+ return;
+ }
+
+ // GAS
+ Index = 0;
+ Offset = *BaseAddrRegOffset;
+ while ((Index++ < *GasCount) &&
+ (Offset < Length))
+ {
+ PrintFieldName (4, L"BaseAddressRegister");
+ Offset += (UINT16)DumpGasStruct (
+ Ptr + Offset,
+ 4,
+ Length - Offset
+ );
+ }
+
+ // Make sure the array of address sizes corresponding to each GAS fit in the
+ // Debug Device Information structure
+ if ((*AddrSizeOffset + (*GasCount * sizeof (UINT32))) > Length) {
+ IncrementErrorCount ();
+ Print (
+ L"ERROR: Invalid GAS count. GasCount = %d. RemainingBufferLength = %d. " \
+ L"Parsing of the Debug Device Information structure aborted.\n",
+ *GasCount,
+ Length - *AddrSizeOffset
+ );
+ return;
+ }
+
+ // Address Size
+ Index = 0;
+ Offset = *AddrSizeOffset;
+ while ((Index++ < *GasCount) &&
+ (Offset < Length))
+ {
+ PrintFieldName (4, L"Address Size");
+ Print (L"0x%x\n", *((UINT32 *)(Ptr + Offset)));
+ Offset += sizeof (UINT32);
+ }
+
+ // NameSpace String
+ Index = 0;
+ Offset = *NameSpaceStringOffset;
+ PrintFieldName (4, L"NameSpace String");
+ while ((Index++ < *NameSpaceStringLength) &&
+ (Offset < Length))
+ {
+ Print (L"%c", *(Ptr + Offset));
+ Offset++;
+ }
+
+ Print (L"\n");
+
+ // OEM Data
+ if (*OEMDataOffset != 0) {
+ Index = 0;
+ Offset = *OEMDataOffset;
+ PrintFieldName (4, L"OEM Data");
+ while ((Index++ < *OEMDataLength) &&
+ (Offset < Length))
+ {
+ Print (L"%x ", *(Ptr + Offset));
+ if ((Index & 7) == 0) {
+ Print (L"\n%-*s ", OUTPUT_FIELD_COLUMN_WIDTH, L"");
+ }
+
+ Offset++;
+ }
+
+ Print (L"\n");
+ }
+}
+
+/**
+ This function parses the ACPI DBG2 table.
+ When trace is enabled this function parses the DBG2 table and
+ traces the ACPI table fields.
+
+ This function also performs validation of the ACPI table fields.
+
+ @param [in] Trace If TRUE, trace the ACPI fields.
+ @param [in] Ptr Pointer to the start of the buffer.
+ @param [in] AcpiTableLength Length of the ACPI table.
+ @param [in] AcpiTableRevision Revision of the ACPI table.
+**/
+VOID
+EFIAPI
+ParseAcpiDbg2 (
+ IN BOOLEAN Trace,
+ IN UINT8 *Ptr,
+ IN UINT32 AcpiTableLength,
+ IN UINT8 AcpiTableRevision
+ )
+{
+ UINT32 Offset;
+ UINT32 Index;
+
+ if (!Trace) {
+ return;
+ }
+
+ Offset = ParseAcpi (
+ TRUE,
+ 0,
+ "DBG2",
+ Ptr,
+ AcpiTableLength,
+ PARSER_PARAMS (Dbg2Parser)
+ );
+
+ // Check if the values used to control the parsing logic have been
+ // successfully read.
+ if ((OffsetDbgDeviceInfo == NULL) ||
+ (NumberDbgDeviceInfo == NULL))
+ {
+ IncrementErrorCount ();
+ Print (
+ L"ERROR: Insufficient table length. AcpiTableLength = %d\n",
+ AcpiTableLength
+ );
+ return;
+ }
+
+ Offset = *OffsetDbgDeviceInfo;
+ Index = 0;
+
+ while (Index++ < *NumberDbgDeviceInfo) {
+ // Parse the Debug Device Information Structure header to obtain Length
+ ParseAcpi (
+ FALSE,
+ 0,
+ NULL,
+ Ptr + Offset,
+ AcpiTableLength - Offset,
+ PARSER_PARAMS (DbgDevInfoHeaderParser)
+ );
+
+ // Check if the values used to control the parsing logic have been
+ // successfully read.
+ if (DbgDevInfoLen == NULL) {
+ IncrementErrorCount ();
+ Print (
+ L"ERROR: Insufficient remaining table buffer length to read the " \
+ L"Debug Device Information structure's 'Length' field. " \
+ L"RemainingTableBufferLength = %d.\n",
+ AcpiTableLength - Offset
+ );
+ return;
+ }
+
+ // Validate Debug Device Information Structure length
+ if ((*DbgDevInfoLen == 0) ||
+ ((Offset + (*DbgDevInfoLen)) > AcpiTableLength))
+ {
+ IncrementErrorCount ();
+ Print (
+ L"ERROR: Invalid Debug Device Information Structure length. " \
+ L"Length = %d. Offset = %d. AcpiTableLength = %d.\n",
+ *DbgDevInfoLen,
+ Offset,
+ AcpiTableLength
+ );
+ return;
+ }
+
+ DumpDbgDeviceInfo (Ptr + Offset, (*DbgDevInfoLen));
+ Offset += (*DbgDevInfoLen);
+ }
+}