Reviewed-by: Stuart Yoder <stuart.yo...@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 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...@intel.com>
Cc: Zhichao Gao <zhichao....@intel.com>
Signed-off-by: Sam Kaynor <sam.kay...@arm.com>
---

Notes:
     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                         | 
63 ++++++++++++++++++++
  ShellPkg/Library/UefiShellDebug1CommandsLib/UefiShellDebug1CommandsLib.uni | 
23 ++++++-
  2 files changed, 84 insertions(+), 2 deletions(-)

diff --git a/ShellPkg/Library/UefiShellDebug1CommandsLib/Dmem.c 
b/ShellPkg/Library/UefiShellDebug1CommandsLib/Dmem.c
index a609971f345e..52a0630f1cdc 100644
--- a/ShellPkg/Library/UefiShellDebug1CommandsLib/Dmem.c
+++ b/ShellPkg/Library/UefiShellDebug1CommandsLib/Dmem.c
@@ -84,8 +84,64 @@ 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) {
+    RtPropertiesTable = (EFI_RT_PROPERTIES_TABLE *)Address;
+
+    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 },
+  { L"-verbose", TypeFlag },
    { NULL,     TypeMax  }
  };
@@ -308,6 +364,13 @@ 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"


-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#117444): https://edk2.groups.io/g/devel/message/117444
Mute This Topic: https://groups.io/mt/105318209/21656
Group Owner: devel+ow...@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-


Reply via email to