From: Rohit Mathew <rohit.mat...@arm.com> Most of the ACPI tables have fields that are marked reserved. Implement functions "DumpReserved" and "DumpReservedBits" aligning with the print-formatter prototype to print out reserved fields.
Signed-off-by: Rohit Mathew <rohit.mat...@arm.com> Cc: James Morse <james.mo...@arm.com> Cc: Sami Mujawar <sami.muja...@arm.com> Cc: Thomas Abraham <thomas.abra...@arm.com> Cc: Zhichao Gao <zhichao....@intel.com> Reviewed-by: Sami Mujawar <sami.muja...@arm.com> --- ShellPkg/Library/UefiShellAcpiViewCommandLib/AcpiParser.c | 126 ++++++++++++++++++++ ShellPkg/Library/UefiShellAcpiViewCommandLib/AcpiParser.h | 38 ++++++ 2 files changed, 164 insertions(+) diff --git a/ShellPkg/Library/UefiShellAcpiViewCommandLib/AcpiParser.c b/ShellPkg/Library/UefiShellAcpiViewCommandLib/AcpiParser.c index 5fd7fd7a3d..728d8b523a 100644 --- a/ShellPkg/Library/UefiShellAcpiViewCommandLib/AcpiParser.c +++ b/ShellPkg/Library/UefiShellAcpiViewCommandLib/AcpiParser.c @@ -498,6 +498,132 @@ Dump16Chars ( ); } +/** + This function traces reserved fields up to 8 bytes in length. + + Format string is ignored by this function as the reserved field is printed + byte by byte with intermittent spacing <eg: 0 0 0 0>. Use DumpxChars for any + other use case. + @param [in] Format Optional format string for tracing the data. + @param [in] Ptr Pointer to the start of the buffer. + @param [in] Length Length of the field. +**/ +VOID +EFIAPI +DumpReserved ( + IN CONST CHAR16 *Format OPTIONAL, + IN UINT8 *Ptr, + IN UINT32 Length + ) +{ + switch (Length) { + case 8: + Print ( + L"%u %u %u %u %u %u %u %u", + Ptr[0], + Ptr[1], + Ptr[2], + Ptr[3], + Ptr[4], + Ptr[5], + Ptr[6], + Ptr[7] + ); + break; + case 7: + Print ( + L"%u %u %u %u %u %u %u", + Ptr[0], + Ptr[1], + Ptr[2], + Ptr[3], + Ptr[4], + Ptr[5], + Ptr[6] + ); + break; + case 6: + Print ( + L"%u %u %u %u %u %u", + Ptr[0], + Ptr[1], + Ptr[2], + Ptr[3], + Ptr[4], + Ptr[5] + ); + break; + case 5: + Print ( + L"%u %u %u %u %u", + Ptr[0], + Ptr[1], + Ptr[2], + Ptr[3], + Ptr[4] + ); + break; + case 4: + Print ( + L"%u %u %u %u", + Ptr[0], + Ptr[1], + Ptr[2], + Ptr[3] + ); + break; + case 3: + Print ( + L"%u %u %u", + Ptr[0], + Ptr[1], + Ptr[2] + ); + break; + case 2: + Print ( + L"%u %u", + Ptr[0], + Ptr[1] + ); + break; + case 1: + Print ( + L"%u", + Ptr[0] + ); + break; + default: + return; + } +} + +/** + This function traces reserved fields up to 64 bits in length. + + Format string is ignored by this function as the reserved field is printed + byte by byte with intermittent spacing. eg: <0 0 0 0>. When the field length + isn't a multiple of 8, the number of bytes are "ceil"-ed by one. eg for 27 + bits <0 0 0 0> + + @param [in] Format Optional format string for tracing the data. + @param [in] Ptr Pointer to the start of the buffer. + @param [in] Length Length of the field as number of bits. +**/ +VOID +EFIAPI +DumpReservedBits ( + IN CONST CHAR16 *Format OPTIONAL, + IN UINT8 *Ptr, + IN UINT32 Length + ) +{ + UINT32 ByteLength; + + ByteLength = (Length + 7) >> 3; + DumpReserved (Format, Ptr, ByteLength); +} + /** This function indents and prints the ACPI table Field Name. diff --git a/ShellPkg/Library/UefiShellAcpiViewCommandLib/AcpiParser.h b/ShellPkg/Library/UefiShellAcpiViewCommandLib/AcpiParser.h index e1ed543468..414b356fc0 100644 --- a/ShellPkg/Library/UefiShellAcpiViewCommandLib/AcpiParser.h +++ b/ShellPkg/Library/UefiShellAcpiViewCommandLib/AcpiParser.h @@ -230,6 +230,44 @@ Dump16Chars ( IN UINT32 Length ); +/** + This function traces reserved fields up to 8 bytes in length. + + Format string is ignored by this function as the reserved field is printed + byte by byte with intermittent spacing <eg: 0 0 0 0>. Use DumpxChars for any + other use case. + @param [in] Format Optional format string for tracing the data. + @param [in] Ptr Pointer to the start of the buffer. + @param [in] Length Length of the field. +**/ +VOID +EFIAPI +DumpReserved ( + IN CONST CHAR16 *Format OPTIONAL, + IN UINT8 *Ptr, + IN UINT32 Length + ); + +/** + This function traces reserved fields up to 64 bits in length. + + Format string is ignored by this function as the reserved field is printed + byte by byte with intermittent spacing. eg: <0 0 0 0>. When the field length + isn't a multiple of 8, the number of bytes are "ceil"-ed by one. eg for 27 + bits <0 0 0 0> + + @param [in] Format Optional format string for tracing the data. + @param [in] Ptr Pointer to the start of the buffer. + @param [in] Length Length of the field as number of bits. +**/ +VOID +EFIAPI +DumpReservedBits ( + IN CONST CHAR16 *Format OPTIONAL, + IN UINT8 *Ptr, + IN UINT32 Length + ); + /** This function indents and prints the ACPI table Field Name. -- 2.34.1 -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#119821): https://edk2.groups.io/g/devel/message/119821 Mute This Topic: https://groups.io/mt/107112190/21656 Group Owner: devel+ow...@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-