From: "Stuart Yoder" <stuart.yoder@arm.com>
To: Sam Kaynor <Sam.Kaynor@arm.com>, devel@edk2.groups.io
Cc: Ray Ni <ray.ni@intel.com>, Zhichao Gao <zhichao.gao@intel.com>,
Michael D Kinney <michael.d.kinney@intel.com>,
Liming Gao <gaoliming@byosoft.com.cn>,
Zhiguang Liu <zhiguang.liu@intel.com>
Subject: Re: [edk2-devel] [PATCH v1 3/3] ShellPkg: UefiShellDebug1CommandsLib: Conformance Profiles in Dmem.c
Date: Mon, 4 Mar 2024 13:31:39 -0600 [thread overview]
Message-ID: <89d87f2e-7fc8-4123-91bb-06eb09e5e25c@arm.com> (raw)
In-Reply-To: <20240124205605.69439-4-Sam.Kaynor@arm.com>
Hi Sam,
See inline comments...
On 1/24/24 2:56 PM, Sam Kaynor wrote:
> REF: https://bugzilla.tianocore.org/show_bug.cgi?id=4352
>
> Implemented dumping of the UEFI Conformance Profiles Table using Dmem.c
> Additionally added the base support for the table with new
> header file ConformanceProfiles.h (Cc'd maintainers of MdePkg for this)
>
> Cc: Ray Ni <ray.ni@intel.com>
> Cc: Zhichao Gao <zhichao.gao@intel.com>
> Cc: Michael D Kinney <michael.d.kinney@intel.com>
> Cc: Liming Gao <gaoliming@byosoft.com.cn>
> Cc: Zhiguang Liu <zhiguang.liu@intel.com>
> Signed-off-by: Sam Kaynor <Sam.Kaynor@arm.com>
> ---
> MdePkg/MdePkg.dec | 7 ++
> ShellPkg/Library/UefiShellDebug1CommandsLib/UefiShellDebug1CommandsLib.inf | 3 +
> MdePkg/Include/Guid/ConformanceProfiles.h | 57 +++++++++++++++
> ShellPkg/Library/UefiShellDebug1CommandsLib/Dmem.c | 76 ++++++++++++++++++++
> ShellPkg/Library/UefiShellDebug1CommandsLib/UefiShellDebug1CommandsLib.uni | 5 ++
> 5 files changed, 148 insertions(+)
>
> diff --git a/MdePkg/MdePkg.dec b/MdePkg/MdePkg.dec
> index 2ee112cc087a..d22320d7bdae 100644
> --- a/MdePkg/MdePkg.dec
> +++ b/MdePkg/MdePkg.dec
> @@ -740,6 +740,13 @@ [Guids]
> ## Include/Protocol/SerilaIo.h
> gEfiSerialTerminalDeviceTypeGuid = { 0x6AD9A60F, 0x5815, 0x4C7C, { 0x8A, 0x10, 0x50, 0x53, 0xD2, 0xBF, 0x7A, 0x1B }}
>
> + # GUIDs defined in UEFI 2.10
> + #
> + ## Include/Guid/ConformanceProfiles.h
> + gEfiConfProfilesTableGuid = { 0x36122546, 0xf7e7, 0x4c8f, { 0xbd, 0x9b, 0xeb, 0x85, 0x25, 0xb5, 0x0c, 0x0b }}
> + gEfiConfProfilesUefiSpecGuid = { 0x523c91af, 0xa195, 0x4382, { 0x81, 0x8d, 0x29, 0x5f, 0xe4, 0x00, 0x64, 0x65 }}
> + gEfiConfProfilesEbbrSpecGuid = { 0xcce33c35, 0x74ac, 0x4087, { 0xbc, 0xe7, 0x8b, 0x29, 0xb0, 0x2e, 0xeb, 0x27 }}
> +
> #
> # GUID defined in PI1.0
> #
> diff --git a/ShellPkg/Library/UefiShellDebug1CommandsLib/UefiShellDebug1CommandsLib.inf b/ShellPkg/Library/UefiShellDebug1CommandsLib/UefiShellDebug1CommandsLib.inf
> index 3741dac5d94c..172ac2862ba1 100644
> --- a/ShellPkg/Library/UefiShellDebug1CommandsLib/UefiShellDebug1CommandsLib.inf
> +++ b/ShellPkg/Library/UefiShellDebug1CommandsLib/UefiShellDebug1CommandsLib.inf
> @@ -139,3 +139,6 @@ [Guids]
> gEfiJsonConfigDataTableGuid ## SOMETIMES_CONSUMES ## SystemTable
> gEfiJsonCapsuleDataTableGuid ## SOMETIMES_CONSUMES ## SystemTable
> gEfiJsonCapsuleResultTableGuid ## SOMETIMES_CONSUMES ## SystemTable
> + gEfiConfProfilesTableGuid ## SOMETIMES_CONSUMES ## SystemTable
> + gEfiConfProfilesUefiSpecGuid ## SOMETIMES_CONSUMES ## GUID
> + gEfiConfProfilesEbbrSpecGuid ## SOMETIMES_CONSUMES ## GUID
> diff --git a/MdePkg/Include/Guid/ConformanceProfiles.h b/MdePkg/Include/Guid/ConformanceProfiles.h
> new file mode 100644
> index 000000000000..88517eaaad25
> --- /dev/null
> +++ b/MdePkg/Include/Guid/ConformanceProfiles.h
> @@ -0,0 +1,57 @@
> +/** @file
> + Legal information
> +
> +**/
> +
> +#ifndef __CONFORMANCE_PROFILES_TABLE_GUID_H__
> +#define __CONFORMANCE_PROFILES_TABLE_GUID_H__
> +
> +
> +//
> +// (This is copied straight from the 2.10 spec, to be modified)
Is the "to be modified" comment supposed to be here?
> +// This table allows the platform to advertise its UEFI specification conformance
> +// in the form of pre-defined profiles. Each profile is identified by a GUID, with
> +// known profiles listed in the section below.
> +// The absence of this table shall indicate that the platform implementation is
> +// conformant with the UEFI specification requirements, as defined in Section 2.6.
> +// This is equivalent to publishing this configuration table with the
> +// EFI_CONFORMANCE_PROFILES_UEFI_SPEC_GUID conformance profile.
> +//
> +#define EFI_CONFORMANCE_PROFILES_TABLE_GUID \
> + { \
> + 0x36122546, 0xf7e7, 0x4c8f, { 0xbd, 0x9b, 0xeb, 0x85, 0x25, 0xb5, 0x0c, 0x0b } \
> + }
> +
> +#pragma pack(1)
> +
> +typedef struct {
> + ///
> + /// Version of the table must be 0x1
> + ///
> + UINT16 Version;
> + ///
> + /// The number of profiles GUIDs present in ConformanceProfiles
> + ///
> + UINT16 NumberOfProfiles;
> + ///
> + /// An array of conformance profile GUIDs that are supported by this system.
> + /// EFI_GUID ConformanceProfiles[];
> + ///
> +} EFI_CONFORMANCE_PROFILES_TABLE;
> +
> +#define EFI_CONFORMANCE_PROFILES_TABLE_VERSION 0x1
> +
> +//
> +// GUID defined in spec.
> +//
> +#define EFI_CONFORMANCE_PROFILES_UEFI_SPEC_GUID \
> + { 0x523c91af, 0xa195, 0x4382, \
> + { 0x81, 0x8d, 0x29, 0x5f, 0xe4, 0x00, 0x64, 0x65 }}
> +#define EFI_CONFORMANCE_PROFILE_EBBR_2_1_GUID \
> + { 0xcce33c35, 0x74ac, 0x4087, \
> + { 0xbc, 0xe7, 0x8b, 0x29, 0xb0, 0x2e, 0xeb, 0x27 }}
> +
> +extern EFI_GUID gEfiConfProfilesTableGuid;
> +extern EFI_GUID gEfiConfProfilesUefiSpecGuid;
> +
> +#endif
> diff --git a/ShellPkg/Library/UefiShellDebug1CommandsLib/Dmem.c b/ShellPkg/Library/UefiShellDebug1CommandsLib/Dmem.c
> index 5b0730b75268..ad20ef028e99 100644
> --- a/ShellPkg/Library/UefiShellDebug1CommandsLib/Dmem.c
> +++ b/ShellPkg/Library/UefiShellDebug1CommandsLib/Dmem.c
> @@ -19,6 +19,7 @@
> #include <Guid/SystemResourceTable.h>
> #include <Guid/DebugImageInfoTable.h>
> #include <Guid/ImageAuthentication.h>
> +#include <Guid/ConformanceProfiles.h>
>
> /**
> Make a printable character.
> @@ -272,7 +273,74 @@ DisplayImageExecutionEntries (
> return (ShellStatus);
> }
>
> +/**
> + Display the ConformanceProfileTable entries
>
> + @param[in] Address The pointer to the ConformanceProfileTable.
> +**/
> +SHELL_STATUS
> +DisplayConformanceProfiles (
> + IN UINT64 Address
> + )
> +{
> + SHELL_STATUS ShellStatus;
> + EFI_STATUS Status;
> + VOID *EntryPtr;
> + EFI_GUID *EntryGuid;
> + CHAR16 *GuidName;
> + EFI_CONFORMANCE_PROFILES_TABLE *ConfProfTable;
> +
> + ShellStatus = SHELL_SUCCESS;
> +
> + if (Address != 0) {
> + Status = EfiGetSystemConfigurationTable (&gEfiConfProfilesTableGuid, (VOID **)&ConfProfTable);
Why do you get the table address here, when it was already passed in
as a parameter to this function?
> + if (EFI_ERROR (Status)) {
> + ShellStatus = SHELL_NOT_FOUND;
> + ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_DMEM_ERR_GET_FAIL), gShellDebug1HiiHandle, L"ConformanceProfileTable");
> + } else {
> + ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_DMEM_CONF_PRO_TABLE), gShellDebug1HiiHandle);
> +
> + EntryPtr = ConfProfTable;
> +
> + EntryPtr += sizeof(ConfProfTable->Version);
> + EntryPtr += sizeof(ConfProfTable->NumberOfProfiles);
Similar to my comment on the exec info table I would suggest something
like:
EntryGuid = (EFI_CONFORMANCE_PROFILES_TABLE *)(ConfProfTable + 1);
> +
> + for (int Profile = 0; Profile < ConfProfTable->NumberOfProfiles; Profile++) {
> + EntryGuid = EntryPtr;
You shouldn't need EntryPtr. I think the loop works with just the
EntryGuid ptr which you increment on each iteration.
> + GuidName = L"Unknown_Profile";
> +
> + if (CompareGuid (EntryGuid, &gEfiConfProfilesEbbrSpecGuid)) {
> + GuidName = L"EBBR_2.1";
> + }
> +
> + ShellPrintHiiEx (
> + -1,
> + -1,
> + NULL,
> + STRING_TOKEN (STR_DMEM_CONF_PRO_ROW),
> + gShellDebug1HiiHandle,
> + GuidName,
> + EntryGuid
> + );
> +
> + EntryPtr += sizeof(EFI_GUID);
Move the above to the part of the for() loop that increments on each
iteration.
> + }
> + }
> + } else {
> + ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_DMEM_CONF_PRO_TABLE), gShellDebug1HiiHandle);
> + ShellPrintHiiEx (
> + -1,
> + -1,
> + NULL,
> + STRING_TOKEN (STR_DMEM_CONF_PRO_ROW),
> + gShellDebug1HiiHandle,
> + L"EFI_CONFORMANCE_PROFILES_UEFI_SPEC_GUID",
> + &gEfiConfProfilesUefiSpecGuid
> + );
> + }
> +
> + return (ShellStatus);
> +}
>
> STATIC CONST SHELL_PARAM_ITEM ParamList[] = {
> { L"-mmio", TypeFlag },
> @@ -464,6 +532,11 @@ ShellCommandRunDmem (
> HiiDatabaseExportBufferAddress = (UINT64)(UINTN)gST->ConfigurationTable[TableWalker].VendorTable;
> continue;
> }
> +
> + if (CompareGuid (&gST->ConfigurationTable[TableWalker].VendorGuid, &gEfiConfProfilesTableGuid)) {
> + ConformanceProfileTableAddress = (UINT64)(UINTN)gST->ConfigurationTable[TableWalker].VendorTable;
> + continue;
> + }
> }
>
> ShellPrintHiiEx (
> @@ -507,6 +580,9 @@ ShellCommandRunDmem (
> if (ShellStatus == SHELL_SUCCESS) {
> ShellStatus = DisplayImageExecutionEntries (ImageExecutionTableAddress);
> }
> + if (ShellStatus == SHELL_SUCCESS) {
> + ShellStatus = DisplayConformanceProfiles(ConformanceProfileTableAddress);
> + }
> }
>
> } else {
> diff --git a/ShellPkg/Library/UefiShellDebug1CommandsLib/UefiShellDebug1CommandsLib.uni b/ShellPkg/Library/UefiShellDebug1CommandsLib/UefiShellDebug1CommandsLib.uni
> index eee9384e3ffb..c99c881776b6 100644
> --- a/ShellPkg/Library/UefiShellDebug1CommandsLib/UefiShellDebug1CommandsLib.uni
> +++ b/ShellPkg/Library/UefiShellDebug1CommandsLib/UefiShellDebug1CommandsLib.uni
> @@ -147,6 +147,11 @@
> #string STR_DMEM_IMG_EXE_TABLE #language en-US "\r\nImage Execution Table\r\n"
> "----------------------------------------\r\n"
> #string STR_DMEM_IMG_EXE_ENTRY #language en-US "%s: %s\r\n"
> +#string STR_DMEM_CONF_PRO_TABLE #language en-US "\r\nConformance Profile Table\r\n"
> + "----------------------------------------\r\n"
> + "Version 0x1\r\n"
> + "Profile GUIDs:\r\n"
> +#string STR_DMEM_CONF_PRO_ROW #language en-US " %s %g\r\n"
> #string STR_DMEM_ERR_NOT_FOUND #language en-US "\r\n%H%s%N: Table address not found.\r\n"
> #string STR_DMEM_ERR_GET_FAIL #language en-US "\r\n%H%s%N: Unable to get table information.\r\n"
>
Thanks,
Stuart
-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#116341): https://edk2.groups.io/g/devel/message/116341
Mute This Topic: https://groups.io/mt/103940860/7686176
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io]
-=-=-=-=-=-=-=-=-=-=-=-
prev parent reply other threads:[~2024-03-04 19:31 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-01-24 20:56 [edk2-devel] [PATCH v1 0/3] Adding support for verbose UEFI Table dumping to Dmem.c Sam Kaynor
2024-01-24 20:56 ` [edk2-devel] [PATCH v1 1/3] ShellPkg: UefiShellDebug1CommandsLib: Dumping RT Properties in Dmem.c Sam Kaynor
2024-03-04 19:32 ` Stuart Yoder
2024-01-24 20:56 ` [edk2-devel] [PATCH v1 2/3] ShellPkg: UefiShellDebug1CommandsLib: Image Execution Table " Sam Kaynor
2024-03-04 19:10 ` Stuart Yoder
2024-01-24 20:56 ` [edk2-devel] [PATCH v1 3/3] ShellPkg: UefiShellDebug1CommandsLib: Conformance Profiles " Sam Kaynor
2024-03-04 19:31 ` Stuart Yoder [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-list from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=89d87f2e-7fc8-4123-91bb-06eb09e5e25c@arm.com \
--to=devel@edk2.groups.io \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox