public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
* [edk2-devel] [PATCH v8 0/5] Adding support for verbose UEFI Table dumping to Dmem.c
@ 2024-06-18 18:34 Sam Kaynor
  2024-06-18 18:34 ` [edk2-devel] [PATCH v8 1/5] ShellPkg: UefiShellDebug1CommandsLib: Dumping RT Properties in Dmem.c Sam Kaynor
                   ` (4 more replies)
  0 siblings, 5 replies; 6+ messages in thread
From: Sam Kaynor @ 2024-06-18 18:34 UTC (permalink / raw)
  To: devel
  Cc: Ray Ni, Zhichao Gao, Michael D Kinney, Liming Gao, Zhiguang Liu,
	Stuart Yoder

This adds an additional option to the dmem UEFI shell command for verbose dumping of a couple of UEFI tables.

The tables specified are the RT Properties Table, Image Execution Table, and Conformance Profiles Table.

Supporting objects are odded in the .inf and .uni files relating to Dmem.c and an additional header file for the Conformance Profiles Table was added.

REF: https://bugzilla.tianocore.org/show_bug.cgi?id=4352

PR: https://github.com/tianocore/edk2/pull/5679

v7->v8:
- All CI errors were corrected

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>
Cc: Stuart Yoder <stuart.yoder@arm.com>
Signed-off-by: Sam Kaynor <Sam.Kaynor@arm.com>

Sam Kaynor (5):
  ShellPkg: UefiShellDebug1CommandsLib: Dumping RT Properties in Dmem.c
  ShellPkg: UefiShellDebug1CommandsLib: Image Execution Table in Dmem.c
  MdePkg: Adding support for EFI_CONFORMANCE_PROFILE_TABLE
  MdePkg: Adding EBBR EFI_CONFORMANCE_PROFILE_TABLE GUIDs
  ShellPkg: UefiShellDebug1CommandsLib: Conformance Profiles in Dmem.c

 MdePkg/MdePkg.dec                                                          |  10 +
 ShellPkg/Library/UefiShellDebug1CommandsLib/UefiShellDebug1CommandsLib.inf |   4 +
 MdePkg/Include/Guid/ConformanceProfiles.h                                  |  67 +++++
 ShellPkg/Library/UefiShellDebug1CommandsLib/Dmem.c                         | 282 +++++++++++++++++++-
 ShellPkg/Library/UefiShellDebug1CommandsLib/UefiShellDebug1CommandsLib.uni |  31 ++-
 5 files changed, 390 insertions(+), 4 deletions(-)
 create mode 100644 MdePkg/Include/Guid/ConformanceProfiles.h

-- 
2.34.1


^ permalink raw reply	[flat|nested] 6+ messages in thread

* [edk2-devel] [PATCH v8 1/5] ShellPkg: UefiShellDebug1CommandsLib: Dumping RT Properties in Dmem.c
  2024-06-18 18:34 [edk2-devel] [PATCH v8 0/5] Adding support for verbose UEFI Table dumping to Dmem.c Sam Kaynor
@ 2024-06-18 18:34 ` Sam Kaynor
  2024-06-18 18:34 ` [edk2-devel] [PATCH v8 2/5] ShellPkg: UefiShellDebug1CommandsLib: Image Execution Table " Sam Kaynor
                   ` (3 subsequent siblings)
  4 siblings, 0 replies; 6+ messages in thread
From: Sam Kaynor @ 2024-06-18 18:34 UTC (permalink / raw)
  To: devel; +Cc: Ray Ni, Zhichao Gao

REF: https://bugzilla.tianocore.org/show_bug.cgi?id=4352

Implemented the dumping of the UEFI RT Properties Table using Dmem.c

Added new entry to the help command for the -verbose option

Cc: Ray Ni <ray.ni@intel.com>
Cc: Zhichao Gao <zhichao.gao@intel.com>
Signed-off-by: Sam Kaynor <Sam.Kaynor@arm.com>
Tested-by: Stuart Yoder <stuart.yoder@arm.com>
Reviewed-by: Stuart Yoder <stuart.yoder@arm.com>
Reviewed-by: Zhichao Gao <zhichao.gao@intel.com>
---

Notes:
    v8:
    - Fixed style errors
    v5:
    - corrected style error (spaces before '(')
    v4:
    - fixed crash when RTProperties table not present
    - expanded help output to include -verbose option
    v3:
    - fixed build errors
    - properly using Address variable

 ShellPkg/Library/UefiShellDebug1CommandsLib/Dmem.c                         | 66 +++++++++++++++++++-
 ShellPkg/Library/UefiShellDebug1CommandsLib/UefiShellDebug1CommandsLib.uni | 23 ++++++-
 2 files changed, 85 insertions(+), 4 deletions(-)

diff --git a/ShellPkg/Library/UefiShellDebug1CommandsLib/Dmem.c b/ShellPkg/Library/UefiShellDebug1CommandsLib/Dmem.c
index a609971f345e..d4030798f3cb 100644
--- a/ShellPkg/Library/UefiShellDebug1CommandsLib/Dmem.c
+++ b/ShellPkg/Library/UefiShellDebug1CommandsLib/Dmem.c
@@ -84,9 +84,65 @@ DisplayMmioMemory (
   return (ShellStatus);
 }
 
+/**
+  Display the RtPropertiesTable entries
+
+  @param[in] Address    The pointer to the RtPropertiesTable.
+**/
+SHELL_STATUS
+DisplayRtProperties (
+  IN UINT64  Address
+  )
+{
+  EFI_RT_PROPERTIES_TABLE  *RtPropertiesTable;
+  UINT32                   RtServices;
+  SHELL_STATUS             ShellStatus;
+  EFI_STATUS               Status;
+
+  ShellStatus = SHELL_SUCCESS;
+
+  if (Address != 0) {
+    EfiGetSystemConfigurationTable (&gEfiRtPropertiesTableGuid, (VOID **)&RtPropertiesTable);
+
+    RtServices = (UINT32)RtPropertiesTable->RuntimeServicesSupported;
+    Status     = ShellPrintHiiEx (
+                   -1,
+                   -1,
+                   NULL,
+                   STRING_TOKEN (STR_DMEM_RT_PROPERTIES),
+                   gShellDebug1HiiHandle,
+                   EFI_RT_PROPERTIES_TABLE_VERSION,
+                   (RtServices & EFI_RT_SUPPORTED_GET_TIME) ? 1 : 0,
+                   (RtServices & EFI_RT_SUPPORTED_SET_TIME) ? 1 : 0,
+                   (RtServices & EFI_RT_SUPPORTED_GET_WAKEUP_TIME) ? 1 : 0,
+                   (RtServices & EFI_RT_SUPPORTED_SET_WAKEUP_TIME) ? 1 : 0,
+                   (RtServices & EFI_RT_SUPPORTED_GET_VARIABLE) ? 1 : 0,
+                   (RtServices & EFI_RT_SUPPORTED_GET_NEXT_VARIABLE_NAME) ? 1 : 0,
+                   (RtServices & EFI_RT_SUPPORTED_SET_VARIABLE) ? 1 : 0,
+                   (RtServices & EFI_RT_SUPPORTED_SET_VIRTUAL_ADDRESS_MAP) ? 1 : 0,
+                   (RtServices & EFI_RT_SUPPORTED_CONVERT_POINTER) ? 1 : 0,
+                   (RtServices & EFI_RT_SUPPORTED_GET_NEXT_HIGH_MONOTONIC_COUNT) ? 1 : 0,
+                   (RtServices & EFI_RT_SUPPORTED_RESET_SYSTEM) ? 1 : 0,
+                   (RtServices & EFI_RT_SUPPORTED_UPDATE_CAPSULE) ? 1 : 0,
+                   (RtServices & EFI_RT_SUPPORTED_QUERY_CAPSULE_CAPABILITIES) ? 1 : 0,
+                   (RtServices & EFI_RT_SUPPORTED_QUERY_VARIABLE_INFO) ? 1 : 0
+                   );
+
+    if (EFI_ERROR (Status)) {
+      ShellStatus = SHELL_ABORTED;
+      ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_DMEM_ERR_GET_FAIL), gShellDebug1HiiHandle, L"RtPropertiesTable");
+    }
+  } else {
+    ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_DMEM_ERR_NOT_FOUND), gShellDebug1HiiHandle, L"RtPropertiesTable");
+  }
+
+  return (ShellStatus);
+}
+
 STATIC CONST SHELL_PARAM_ITEM  ParamList[] = {
-  { L"-mmio", TypeFlag },
-  { NULL,     TypeMax  }
+  { L"-mmio",    TypeFlag },
+  { L"-verbose", TypeFlag },
+  { NULL,        TypeMax  }
 };
 
 /**
@@ -308,6 +364,12 @@ ShellCommandRunDmem (
             ConformanceProfileTableAddress
             );
         }
+
+        if (ShellCommandLineGetFlag (Package, L"-verbose")) {
+          if (ShellStatus == SHELL_SUCCESS) {
+            ShellStatus = DisplayRtProperties (RtPropertiesTableAddress);
+          }
+        }
       } else {
         ShellStatus = DisplayMmioMemory (Address, (UINTN)Size);
       }
diff --git a/ShellPkg/Library/UefiShellDebug1CommandsLib/UefiShellDebug1CommandsLib.uni b/ShellPkg/Library/UefiShellDebug1CommandsLib/UefiShellDebug1CommandsLib.uni
index 4041f0cd483e..a2241614f109 100644
--- a/ShellPkg/Library/UefiShellDebug1CommandsLib/UefiShellDebug1CommandsLib.uni
+++ b/ShellPkg/Library/UefiShellDebug1CommandsLib/UefiShellDebug1CommandsLib.uni
@@ -126,8 +126,26 @@
                                                   "Memory Range Capsule          %016LX\r\n"
                                                   "Hii Database Export Buffer    %016LX\r\n"
                                                   "Conformance Profile Table     %016LX\r\n"
-
-
+#string STR_DMEM_RT_PROPERTIES    #language en-US "\r\nRT Properties Table\r\n"
+                                                  "----------------------------------------\r\n"
+                                                  "Version           0x%01LX\r\n"
+                                                  "Runtime Services Supported:\r\n"
+                                                  "  GET_TIME                         %d\r\n"
+                                                  "  GET_WAKEUP_TIME                  %d\r\n"
+                                                  "  SET_TIME                         %d\r\n"
+                                                  "  SET_WAKEUP_TIME                  %d\r\n"
+                                                  "  GET_VARIABLE                     %d\r\n"
+                                                  "  GET_NEXT_VARIABLE_NAME           %d\r\n"
+                                                  "  SET_VARIABLE                     %d\r\n"
+                                                  "  SET_VIRTUAL_ADDRESS_MAP          %d\r\n"
+                                                  "  CONVERT_POINTERS                 %d\r\n"
+                                                  "  GET_NEXT_HIGH_MONOTONIC_COUNT    %d\r\n"
+                                                  "  RESET_SYSTEM                     %d\r\n"
+                                                  "  UPDATE_CAPSULE                   %d\r\n"
+                                                  "  QUERY_CAPSULE_CAPABILITIES       %d\r\n"
+                                                  "  QUERY_VARIABLE_INFO              %d\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"
 
 #string STR_LOAD_PCI_ROM_RES      #language en-US "Image '%B%s%N' load result: %r\r\n"
 #string STR_LOADPCIROM_CORRUPT    #language en-US "%H%s%N: File '%B%s%N' Image %d is corrupt.\r\n"
@@ -589,6 +607,7 @@
 " \r\n"
 "  -b      - Displays one screen at a time.\r\n"
 "  -MMIO   - Forces address cycles to the PCI bus.\r\n"
+"  -verbose - Displays contents of certain EFI System Tables.\r\n"
 "  address - Specifies a starting address in hexadecimal format.\r\n"
 "  size    - Specifies the number of bytes to display in hexadecimal format.\r\n"
 ".SH DESCRIPTION\r\n"
-- 
2.34.1


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [edk2-devel] [PATCH v8 2/5] ShellPkg: UefiShellDebug1CommandsLib: Image Execution Table in Dmem.c
  2024-06-18 18:34 [edk2-devel] [PATCH v8 0/5] Adding support for verbose UEFI Table dumping to Dmem.c Sam Kaynor
  2024-06-18 18:34 ` [edk2-devel] [PATCH v8 1/5] ShellPkg: UefiShellDebug1CommandsLib: Dumping RT Properties in Dmem.c Sam Kaynor
@ 2024-06-18 18:34 ` Sam Kaynor
  2024-06-18 18:34 ` [edk2-devel] [PATCH v8 3/5] MdePkg: Adding support for EFI_CONFORMANCE_PROFILE_TABLE Sam Kaynor
                   ` (2 subsequent siblings)
  4 siblings, 0 replies; 6+ messages in thread
From: Sam Kaynor @ 2024-06-18 18:34 UTC (permalink / raw)
  To: devel; +Cc: Ray Ni, Zhichao Gao

REF: https://bugzilla.tianocore.org/show_bug.cgi?id=4352

Implemented dumping of the Image Execution Table using Dmem.c

Cc: Ray Ni <ray.ni@intel.com>
Cc: Zhichao Gao <zhichao.gao@intel.com>
Signed-off-by: Sam Kaynor <Sam.Kaynor@arm.com>
Tested-by: Stuart Yoder <stuart.yoder@arm.com>
Reviewed-by: Stuart Yoder <stuart.yoder@arm.com>
Reviewed-by: Zhichao Gao <zhichao.gao@intel.com>
---

Notes:
    v8:
    - corrected CI failure on bad type cast
    - various CI changes
    v5:
    - corrected comment for GetBaseName
    - corrected style error (spaces before '(')
    v4:
    - changed Image Execution output to match spec
    v3:
    - fixed build erros
    - added setwidth formatting to output
    - properly using Address variable

 ShellPkg/Library/UefiShellDebug1CommandsLib/Dmem.c                         | 136 ++++++++++++++++++++
 ShellPkg/Library/UefiShellDebug1CommandsLib/UefiShellDebug1CommandsLib.uni |   3 +
 2 files changed, 139 insertions(+)

diff --git a/ShellPkg/Library/UefiShellDebug1CommandsLib/Dmem.c b/ShellPkg/Library/UefiShellDebug1CommandsLib/Dmem.c
index d4030798f3cb..80c779a0b369 100644
--- a/ShellPkg/Library/UefiShellDebug1CommandsLib/Dmem.c
+++ b/ShellPkg/Library/UefiShellDebug1CommandsLib/Dmem.c
@@ -139,6 +139,138 @@ DisplayRtProperties (
   return (ShellStatus);
 }
 
+/**
+  Retrieve the ImageExecutionTable Entry ImageName from ImagePath
+
+  @param[in]  FileName    The full path of the image.
+  @param[out] BaseName    The name of the image.
+**/
+EFI_STATUS
+GetBaseName (
+  IN  CHAR16  *FileName,
+  OUT CHAR16  **BaseName
+  )
+{
+  UINTN   StrLen;
+  CHAR16  *StrTail;
+
+  StrLen = StrSize (FileName);
+
+  for (StrTail = FileName + StrLen - 1; StrTail != FileName && *StrTail != L'\\'; StrTail--) {
+  }
+
+  if (StrTail == FileName) {
+    return EFI_NOT_FOUND;
+  }
+
+  *BaseName = StrTail+1;
+
+  return EFI_SUCCESS;
+}
+
+/**
+  Retrieve the ImageExecutionTable entries.
+**/
+EFI_STATUS
+GetImageExecutionInfo (
+  )
+{
+  EFI_STATUS                      Status;
+  EFI_IMAGE_EXECUTION_INFO_TABLE  *ExecInfoTablePtr;
+  EFI_IMAGE_EXECUTION_INFO        *InfoPtr;
+  CHAR8                           *ptr;
+  CHAR16                          *ImagePath;
+  CHAR16                          *ImageName;
+  UINTN                           Image;
+  UINTN                           *NumberOfImages;
+  CHAR16                          *ActionType;
+
+  EfiGetSystemConfigurationTable (&gEfiImageSecurityDatabaseGuid, (VOID **)&ExecInfoTablePtr);
+
+  NumberOfImages = &ExecInfoTablePtr->NumberOfImages;
+
+  ptr = (CHAR8 *)ExecInfoTablePtr + 1;
+
+  for (Image = 0; Image < *NumberOfImages; Image++, ptr += InfoPtr->InfoSize) {
+    InfoPtr   = (EFI_IMAGE_EXECUTION_INFO *)ptr;
+    ImagePath = (CHAR16 *)(InfoPtr + 1);
+
+    GetBaseName (ImagePath, &ImageName);
+
+    switch (InfoPtr->Action) {
+      case EFI_IMAGE_EXECUTION_AUTHENTICATION:
+        ActionType = L"AUTHENTICATION";
+        break;
+      case EFI_IMAGE_EXECUTION_AUTH_UNTESTED:
+        ActionType = L"AUTH_UNTESTED";
+        break;
+      case EFI_IMAGE_EXECUTION_AUTH_SIG_FAILED:
+        ActionType = L"AUTH_SIG_FAILED";
+        break;
+      case EFI_IMAGE_EXECUTION_AUTH_SIG_PASSED:
+        ActionType = L"AUTH_SIG_PASSED";
+        break;
+      case EFI_IMAGE_EXECUTION_AUTH_SIG_NOT_FOUND:
+        ActionType = L"AUTH_SIG_NOT_FOUND";
+        break;
+      case EFI_IMAGE_EXECUTION_AUTH_SIG_FOUND:
+        ActionType = L"AUTH_SIG_FOUND";
+        break;
+      case EFI_IMAGE_EXECUTION_POLICY_FAILED:
+        ActionType = L"POLICY_FAILED";
+        break;
+      case EFI_IMAGE_EXECUTION_INITIALIZED:
+        ActionType = L"INITIALIZED";
+        break;
+      default:
+        ActionType = L"invalid action";
+    }
+
+    Status = ShellPrintHiiEx (
+               -1,
+               -1,
+               NULL,
+               STRING_TOKEN (STR_DMEM_IMG_EXE_ENTRY),
+               gShellDebug1HiiHandle,
+               ImageName,
+               ActionType
+               );
+  }
+
+  return Status;
+}
+
+/**
+  Display the ImageExecutionTable entries
+
+  @param[in] Address    The pointer to the ImageExecutionTable.
+**/
+SHELL_STATUS
+DisplayImageExecutionEntries (
+  IN UINT64  Address
+  )
+{
+  SHELL_STATUS  ShellStatus;
+  EFI_STATUS    Status;
+
+  ShellStatus = SHELL_SUCCESS;
+
+  if (Address != 0) {
+    ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_DMEM_IMG_EXE_TABLE), gShellDebug1HiiHandle);
+    Status = GetImageExecutionInfo ();
+    if (EFI_ERROR (Status)) {
+      ShellStatus = SHELL_ABORTED;
+      ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_DMEM_ERR_GET_FAIL), gShellDebug1HiiHandle, L"ImageExecutionTable");
+    }
+  } else {
+    ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_DMEM_ERR_NOT_FOUND), gShellDebug1HiiHandle, L"ImageExecutionTable");
+  }
+
+  return (ShellStatus);
+}
+
+
+
 STATIC CONST SHELL_PARAM_ITEM  ParamList[] = {
   { L"-mmio",    TypeFlag },
   { L"-verbose", TypeFlag },
@@ -369,6 +501,10 @@ ShellCommandRunDmem (
           if (ShellStatus == SHELL_SUCCESS) {
             ShellStatus = DisplayRtProperties (RtPropertiesTableAddress);
           }
+
+          if (ShellStatus == SHELL_SUCCESS) {
+            ShellStatus = DisplayImageExecutionEntries (ImageExecutionTableAddress);
+          }
         }
       } else {
         ShellStatus = DisplayMmioMemory (Address, (UINTN)Size);
diff --git a/ShellPkg/Library/UefiShellDebug1CommandsLib/UefiShellDebug1CommandsLib.uni b/ShellPkg/Library/UefiShellDebug1CommandsLib/UefiShellDebug1CommandsLib.uni
index a2241614f109..3b730164ddce 100644
--- a/ShellPkg/Library/UefiShellDebug1CommandsLib/UefiShellDebug1CommandsLib.uni
+++ b/ShellPkg/Library/UefiShellDebug1CommandsLib/UefiShellDebug1CommandsLib.uni
@@ -144,6 +144,9 @@
                                                   "  UPDATE_CAPSULE                   %d\r\n"
                                                   "  QUERY_CAPSULE_CAPABILITIES       %d\r\n"
                                                   "  QUERY_VARIABLE_INFO              %d\r\n"
+#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_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"
 
-- 
2.34.1


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [edk2-devel] [PATCH v8 3/5] MdePkg: Adding support for EFI_CONFORMANCE_PROFILE_TABLE
  2024-06-18 18:34 [edk2-devel] [PATCH v8 0/5] Adding support for verbose UEFI Table dumping to Dmem.c Sam Kaynor
  2024-06-18 18:34 ` [edk2-devel] [PATCH v8 1/5] ShellPkg: UefiShellDebug1CommandsLib: Dumping RT Properties in Dmem.c Sam Kaynor
  2024-06-18 18:34 ` [edk2-devel] [PATCH v8 2/5] ShellPkg: UefiShellDebug1CommandsLib: Image Execution Table " Sam Kaynor
@ 2024-06-18 18:34 ` Sam Kaynor
  2024-06-18 18:34 ` [edk2-devel] [PATCH v8 4/5] MdePkg: Adding EBBR EFI_CONFORMANCE_PROFILE_TABLE GUIDs Sam Kaynor
  2024-06-18 18:34 ` [edk2-devel] [PATCH v8 5/5] ShellPkg: UefiShellDebug1CommandsLib: Conformance Profiles in Dmem.c Sam Kaynor
  4 siblings, 0 replies; 6+ messages in thread
From: Sam Kaynor @ 2024-06-18 18:34 UTC (permalink / raw)
  To: devel; +Cc: Michael D Kinney, Liming Gao, Zhiguang Liu

REF: https://bugzilla.tianocore.org/show_bug.cgi?id=4352

Adding support for EFI_CONFORMANCE_PROFILE_TABLE by adding an
associated header file and relevant GUIDs to MdePkg.dec as defined
in the UEFI 2.10 spec.
This table is needed to address changes being made within ShellPkg.

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:
    v8:
    - Added copyright information
    - Fixed CI formatting
    v7:
    - Separated out Guids from UEFI and EBBR
    v6:
    - Added patch to address MdePkg changes separately

 MdePkg/MdePkg.dec                         |  4 ++
 MdePkg/Include/Guid/ConformanceProfiles.h | 57 ++++++++++++++++++++
 2 files changed, 61 insertions(+)

diff --git a/MdePkg/MdePkg.dec b/MdePkg/MdePkg.dec
index 94170ff9a4a1..3a9a0fec241e 100644
--- a/MdePkg/MdePkg.dec
+++ b/MdePkg/MdePkg.dec
@@ -751,6 +751,10 @@ [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 }}
+
   #
   # GUID defined in PI1.0
   #
diff --git a/MdePkg/Include/Guid/ConformanceProfiles.h b/MdePkg/Include/Guid/ConformanceProfiles.h
new file mode 100644
index 000000000000..550501123151
--- /dev/null
+++ b/MdePkg/Include/Guid/ConformanceProfiles.h
@@ -0,0 +1,57 @@
+/** @file
+  GUIDs used for UEFI Conformance Profiles Table in the UEFI 2.10 specification.
+
+  Copyright (c) 2024, Arm Limited. All rights reserved.<BR>
+  SPDX-License-Identifier: BSD-2-Clause-Patent
+
+**/
+
+#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;
+
+#pragma pack()
+
+#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 }}
+
+extern EFI_GUID  gEfiConfProfilesTableGuid;
+extern EFI_GUID  gEfiConfProfilesUefiSpecGuid;
+
+#endif
-- 
2.34.1


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [edk2-devel] [PATCH v8 4/5] MdePkg: Adding EBBR EFI_CONFORMANCE_PROFILE_TABLE GUIDs
  2024-06-18 18:34 [edk2-devel] [PATCH v8 0/5] Adding support for verbose UEFI Table dumping to Dmem.c Sam Kaynor
                   ` (2 preceding siblings ...)
  2024-06-18 18:34 ` [edk2-devel] [PATCH v8 3/5] MdePkg: Adding support for EFI_CONFORMANCE_PROFILE_TABLE Sam Kaynor
@ 2024-06-18 18:34 ` Sam Kaynor
  2024-06-18 18:34 ` [edk2-devel] [PATCH v8 5/5] ShellPkg: UefiShellDebug1CommandsLib: Conformance Profiles in Dmem.c Sam Kaynor
  4 siblings, 0 replies; 6+ messages in thread
From: Sam Kaynor @ 2024-06-18 18:34 UTC (permalink / raw)
  To: devel; +Cc: Michael D Kinney, Liming Gao, Zhiguang Liu

REF: https://bugzilla.tianocore.org/show_bug.cgi?id=4352

Adding additional GUIDs for the EFI_CONFORMANCE_PROFILE_TABLE
that are defined in the Embedded Base Boot Requirments (EBBR)
Specification.

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:
    v7:
    - Added patch to spearate EBBR from UEFI Guids

 MdePkg/MdePkg.dec                         |  6 ++++++
 MdePkg/Include/Guid/ConformanceProfiles.h | 12 +++++++++++-
 2 files changed, 17 insertions(+), 1 deletion(-)

diff --git a/MdePkg/MdePkg.dec b/MdePkg/MdePkg.dec
index 3a9a0fec241e..5dbe5a9f729a 100644
--- a/MdePkg/MdePkg.dec
+++ b/MdePkg/MdePkg.dec
@@ -755,6 +755,12 @@ [Guids]
   gEfiConfProfilesTableGuid        = { 0x36122546, 0xf7e7, 0x4c8f, { 0xbd, 0x9b, 0xeb, 0x85, 0x25, 0xb5, 0x0c, 0x0b }}
   gEfiConfProfilesUefiSpecGuid     = { 0x523c91af, 0xa195, 0x4382, { 0x81, 0x8d, 0x29, 0x5f, 0xe4, 0x00, 0x64, 0x65 }}
 
+  # GUIDs defined in EBBR
+  #
+  ## Include/Guid/ConformanceProfiles.h
+  gEfiConfProfilesEbbrSpec21Guid     = { 0xcce33c35, 0x74ac, 0x4087, { 0xbc, 0xe7, 0x8b, 0x29, 0xb0, 0x2e, 0xeb, 0x27 }}
+  gEfiConfProfilesEbbrSpec22Guid     = { 0x9073eed4, 0xe50d, 0x11ee, { 0xb8, 0xb0, 0x8b, 0x68, 0xda, 0x62, 0xfc, 0x80 }}
+
   #
   # GUID defined in PI1.0
   #
diff --git a/MdePkg/Include/Guid/ConformanceProfiles.h b/MdePkg/Include/Guid/ConformanceProfiles.h
index 550501123151..bf89ab61dd44 100644
--- a/MdePkg/Include/Guid/ConformanceProfiles.h
+++ b/MdePkg/Include/Guid/ConformanceProfiles.h
@@ -45,12 +45,22 @@ typedef struct {
 #define EFI_CONFORMANCE_PROFILES_TABLE_VERSION  0x1
 
 //
-// GUID defined in spec.
+// GUID defined in UEFI 2.10
 //
 #define EFI_CONFORMANCE_PROFILES_UEFI_SPEC_GUID \
     { 0x523c91af, 0xa195, 0x4382, \
     { 0x81, 0x8d, 0x29, 0x5f, 0xe4, 0x00, 0x64, 0x65 }}
 
+//
+// GUID defined in EBBR
+//
+#define EFI_CONFORMANCE_PROFILE_EBBR_2_1_GUID \
+    { 0xcce33c35, 0x74ac, 0x4087, \
+    { 0xbc, 0xe7, 0x8b, 0x29, 0xb0, 0x2e, 0xeb, 0x27 }}
+#define EFI_CONFORMANCE_PROFILE_EBBR_2_2_GUID \
+    { 0x9073eed4, 0xe50d, 0x11ee, \
+    { 0xb8, 0xb0, 0x8b, 0x68, 0xda, 0x62, 0xfc, 0x80 }}
+
 extern EFI_GUID  gEfiConfProfilesTableGuid;
 extern EFI_GUID  gEfiConfProfilesUefiSpecGuid;
 
-- 
2.34.1


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [edk2-devel] [PATCH v8 5/5] ShellPkg: UefiShellDebug1CommandsLib: Conformance Profiles in Dmem.c
  2024-06-18 18:34 [edk2-devel] [PATCH v8 0/5] Adding support for verbose UEFI Table dumping to Dmem.c Sam Kaynor
                   ` (3 preceding siblings ...)
  2024-06-18 18:34 ` [edk2-devel] [PATCH v8 4/5] MdePkg: Adding EBBR EFI_CONFORMANCE_PROFILE_TABLE GUIDs Sam Kaynor
@ 2024-06-18 18:34 ` Sam Kaynor
  4 siblings, 0 replies; 6+ messages in thread
From: Sam Kaynor @ 2024-06-18 18:34 UTC (permalink / raw)
  To: devel; +Cc: Ray Ni, Zhichao Gao

REF: https://bugzilla.tianocore.org/show_bug.cgi?id=4352

Implemented dumping of the UEFI Conformance Profiles Table using Dmem.c
Uses header file for GUIDs added in previous patches

Cc: Ray Ni <ray.ni@intel.com>
Cc: Zhichao Gao <zhichao.gao@intel.com>
Signed-off-by: Sam Kaynor <Sam.Kaynor@arm.com>
Tested-by: Stuart Yoder <stuart.yoder@arm.com>
Reviewed-by: Stuart Yoder <stuart.yoder@arm.com>
---

Notes:
    v8:
    - various CI fixes
    - removed bad type cast
    v7:
    - Added output for EBBR 2.2 Guid
    v6:
    - Moved MdePkg changes to separate patch
    v5:
    - corrected style error (spaces before '(')
    v3:
    - fixed build errors
    - properly using Address variable
    - removed unecessary comment in header file

 ShellPkg/Library/UefiShellDebug1CommandsLib/UefiShellDebug1CommandsLib.inf |  4 +
 ShellPkg/Library/UefiShellDebug1CommandsLib/Dmem.c                         | 80 ++++++++++++++++++++
 ShellPkg/Library/UefiShellDebug1CommandsLib/UefiShellDebug1CommandsLib.uni |  5 ++
 3 files changed, 89 insertions(+)

diff --git a/ShellPkg/Library/UefiShellDebug1CommandsLib/UefiShellDebug1CommandsLib.inf b/ShellPkg/Library/UefiShellDebug1CommandsLib/UefiShellDebug1CommandsLib.inf
index 3741dac5d94c..140e9dc64418 100644
--- a/ShellPkg/Library/UefiShellDebug1CommandsLib/UefiShellDebug1CommandsLib.inf
+++ b/ShellPkg/Library/UefiShellDebug1CommandsLib/UefiShellDebug1CommandsLib.inf
@@ -139,3 +139,7 @@ [Guids]
   gEfiJsonConfigDataTableGuid     ## SOMETIMES_CONSUMES ## SystemTable
   gEfiJsonCapsuleDataTableGuid    ## SOMETIMES_CONSUMES ## SystemTable
   gEfiJsonCapsuleResultTableGuid  ## SOMETIMES_CONSUMES ## SystemTable
+  gEfiConfProfilesTableGuid       ## SOMETIMES_CONSUMES ## SystemTable
+  gEfiConfProfilesUefiSpecGuid    ## SOMETIMES_CONSUMES ## GUID
+  gEfiConfProfilesEbbrSpec21Guid  ## SOMETIMES_CONSUMES ## GUID
+  gEfiConfProfilesEbbrSpec22Guid  ## SOMETIMES_CONSUMES ## GUID
diff --git a/ShellPkg/Library/UefiShellDebug1CommandsLib/Dmem.c b/ShellPkg/Library/UefiShellDebug1CommandsLib/Dmem.c
index 80c779a0b369..046cfd527025 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.
@@ -269,7 +270,77 @@ 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;
+  UINTN                           Profile;
+  EFI_CONFORMANCE_PROFILES_TABLE  *ConfProfTable;
+
+  ShellStatus = SHELL_SUCCESS;
+
+  if (Address != 0) {
+    EfiGetSystemConfigurationTable (&gEfiConfProfilesTableGuid, (VOID **)&ConfProfTable);
+
+    ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_DMEM_CONF_PRO_TABLE), gShellDebug1HiiHandle);
+
+    EntryGuid = (EFI_GUID *)(ConfProfTable + 1);
+
+    for (Profile = 0; Profile < ConfProfTable->NumberOfProfiles; Profile++, EntryGuid++) {
+      GuidName = L"Unknown_Profile";
+
+      if (CompareGuid (EntryGuid, &gEfiConfProfilesUefiSpecGuid)) {
+        GuidName = L"EFI_CONFORMANCE_PROFILE_UEFI_SPEC_GUID";
+      }
+
+      if (CompareGuid (EntryGuid, &gEfiConfProfilesEbbrSpec21Guid)) {
+        GuidName = L"EBBR_2.1";
+      }
+
+      if (CompareGuid (EntryGuid, &gEfiConfProfilesEbbrSpec22Guid)) {
+        GuidName = L"EBBR_2.2";
+      }
+
+      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 },
@@ -461,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 (
@@ -505,6 +581,10 @@ ShellCommandRunDmem (
           if (ShellStatus == SHELL_SUCCESS) {
             ShellStatus = DisplayImageExecutionEntries (ImageExecutionTableAddress);
           }
+
+          if (ShellStatus == SHELL_SUCCESS) {
+            ShellStatus = DisplayConformanceProfiles (ConformanceProfileTableAddress);
+          }
         }
       } else {
         ShellStatus = DisplayMmioMemory (Address, (UINTN)Size);
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"
 
-- 
2.34.1


^ permalink raw reply related	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2024-06-18 18:35 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-06-18 18:34 [edk2-devel] [PATCH v8 0/5] Adding support for verbose UEFI Table dumping to Dmem.c Sam Kaynor
2024-06-18 18:34 ` [edk2-devel] [PATCH v8 1/5] ShellPkg: UefiShellDebug1CommandsLib: Dumping RT Properties in Dmem.c Sam Kaynor
2024-06-18 18:34 ` [edk2-devel] [PATCH v8 2/5] ShellPkg: UefiShellDebug1CommandsLib: Image Execution Table " Sam Kaynor
2024-06-18 18:34 ` [edk2-devel] [PATCH v8 3/5] MdePkg: Adding support for EFI_CONFORMANCE_PROFILE_TABLE Sam Kaynor
2024-06-18 18:34 ` [edk2-devel] [PATCH v8 4/5] MdePkg: Adding EBBR EFI_CONFORMANCE_PROFILE_TABLE GUIDs Sam Kaynor
2024-06-18 18:34 ` [edk2-devel] [PATCH v8 5/5] ShellPkg: UefiShellDebug1CommandsLib: Conformance Profiles in Dmem.c Sam Kaynor

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox