public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
From: "Stuart Yoder" <stuart.yoder@arm.com>
To: devel@edk2.groups.io, sam.kaynor@arm.com
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 v4 3/3] ShellPkg: UefiShellDebug1CommandsLib: Conformance Profiles in Dmem.c
Date: Thu, 4 Apr 2024 16:27:08 -0500	[thread overview]
Message-ID: <626d96d5-042d-47b1-9ab2-f87cd8465e4a@arm.com> (raw)
In-Reply-To: <20240403211933.1662236-4-Sam.Kaynor@arm.com>

Reviewed-by: Stuart Yoder <stuart.yoder@arm.com>

On 4/3/24 4:19 PM, Sam Kaynor via groups.io 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>
> ---
> 
> Notes:
>      v3:
>      - fixed build errors
>      - properly using Address variable
>      - removed unecessary comment in header file
> 
>   MdePkg/MdePkg.dec                                                          |  5 ++
>   ShellPkg/Library/UefiShellDebug1CommandsLib/UefiShellDebug1CommandsLib.inf |  3 +
>   MdePkg/Include/Guid/ConformanceProfiles.h                                  | 56 ++++++++++++++++
>   ShellPkg/Library/UefiShellDebug1CommandsLib/Dmem.c                         | 69 ++++++++++++++++++++
>   ShellPkg/Library/UefiShellDebug1CommandsLib/UefiShellDebug1CommandsLib.uni |  5 ++
>   5 files changed, 138 insertions(+)
> 
> diff --git a/MdePkg/MdePkg.dec b/MdePkg/MdePkg.dec
> index 0c18e1decd51..861838c148f3 100644
> --- a/MdePkg/MdePkg.dec
> +++ b/MdePkg/MdePkg.dec
> @@ -746,6 +746,11 @@ [Guids]
>     ## Include/Guid/DeviceAuthentication.h
>     gEfiDeviceSignatureDatabaseGuid  = { 0xb9c2b4f4, 0xbf5f, 0x462d, {0x8a, 0xdf, 0xc5, 0xc7, 0xa, 0xc3, 0x5d, 0xad }}
>   
> +  ## 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..c6211d63d79c
> --- /dev/null
> +++ b/MdePkg/Include/Guid/ConformanceProfiles.h
> @@ -0,0 +1,56 @@
> +/** @file
> +  Legal information
> +
> +**/
> +
> +#ifndef __CONFORMANCE_PROFILES_TABLE_GUID_H__
> +#define __CONFORMANCE_PROFILES_TABLE_GUID_H__
> +
> +
> +//
> +// 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 813759a9055d..2618402bc714 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.
> @@ -268,7 +269,67 @@ 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;
> +  EFI_GUID        *EntryGuid;
> +  CHAR16          *GuidName;
> +  EFI_CONFORMANCE_PROFILES_TABLE            *ConfProfTable;
> +
> +  ShellStatus = SHELL_SUCCESS;
> +
> +  if (Address != 0) {
> +    ConfProfTable = (EFI_CONFORMANCE_PROFILES_TABLE *)Address;
> +
> +    ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_DMEM_CONF_PRO_TABLE), gShellDebug1HiiHandle);
> +
> +    EntryGuid = (EFI_GUID *)(ConfProfTable + 1);
> +
> +    for (int Profile = 0; Profile < ConfProfTable->NumberOfProfiles; Profile++, EntryGuid++) {
> +      GuidName = L"Unknown_Profile";
> +
> +      if (CompareGuid (EntryGuid, &gEfiConfProfilesEbbrSpecGuid)) {
> +        GuidName = L"EBBR_2.1";
> +      }
> +
> +      Status = ShellPrintHiiEx (
> +        -1,
> +        -1,
> +        NULL,
> +        STRING_TOKEN (STR_DMEM_CONF_PRO_ROW),
> +        gShellDebug1HiiHandle,
> +        GuidName,
> +        EntryGuid
> +        );
> +    }
> +    if (EFI_ERROR (Status)) {
> +      ShellStatus = SHELL_ABORTED;
> +      ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_DMEM_ERR_GET_FAIL), gShellDebug1HiiHandle, L"ComformanceProfilesTable");
> +    }
> +  } 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 },
> @@ -460,6 +521,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 (
> @@ -503,6 +569,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 3b730164ddce..6ef923e4fd5e 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 "%20s: %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"
>   


-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#117446): https://edk2.groups.io/g/devel/message/117446
Mute This Topic: https://groups.io/mt/105318210/7686176
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io]
-=-=-=-=-=-=-=-=-=-=-=-



  reply	other threads:[~2024-04-04 21:27 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-04-03 21:19 [edk2-devel] [PATCH v4 0/3] Adding support for verbose UEFI Table dumping to Dmem.c Sam Kaynor
2024-04-03 21:19 ` [edk2-devel] [PATCH v4 1/3] ShellPkg: UefiShellDebug1CommandsLib: Dumping RT Properties in Dmem.c Sam Kaynor
2024-04-04 21:26   ` Stuart Yoder
2024-04-04 21:31   ` Stuart Yoder
2024-04-03 21:19 ` [edk2-devel] [PATCH v4 2/3] ShellPkg: UefiShellDebug1CommandsLib: Image Execution Table " Sam Kaynor
2024-04-04 21:26   ` Stuart Yoder
2024-04-04 21:32   ` Stuart Yoder
2024-04-03 21:19 ` [edk2-devel] [PATCH v4 3/3] ShellPkg: UefiShellDebug1CommandsLib: Conformance Profiles " Sam Kaynor
2024-04-04 21:27   ` Stuart Yoder [this message]
2024-04-04 21:35   ` Stuart Yoder
2024-04-09  8:00 ` [edk2-devel] [PATCH v4 0/3] Adding support for verbose UEFI Table dumping to Dmem.c Gao, Zhichao

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=626d96d5-042d-47b1-9ab2-f87cd8465e4a@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