Simple application to dump the contents of the configuration
manager loaded in the platform to the screen.

There is no provision in the ConfigurationManagerProtocol for
informing consumers of the contents of the database, so the app
scans through the known namespaces using the GetObject method.

Cc: Sami Mujawar <sami.muja...@arm.com>
Cc: Alexei Fedorov <alexei.fedo...@arm.com>
Signed-off-by: Tomas Pilar <to...@nuviainc.com>
---
 .../ConfigurationManagerDumpApp.c             | 76 +++++++++++++++++++
 .../ConfigurationManagerDumpApp.h             |  8 ++
 .../ConfigurationManagerDumpApp.inf           | 42 ++++++++++
 .../ConfigurationObjectStrings.c              | 50 ++++++++++++
 DynamicTablesPkg/DynamicTablesPkg.dsc         |  6 ++
 5 files changed, 182 insertions(+)
 create mode 100644 
DynamicTablesPkg/Applications/ConfigurationManagerDumpApp/ConfigurationManagerDumpApp.c
 create mode 100644 
DynamicTablesPkg/Applications/ConfigurationManagerDumpApp/ConfigurationManagerDumpApp.h
 create mode 100644 
DynamicTablesPkg/Applications/ConfigurationManagerDumpApp/ConfigurationManagerDumpApp.inf
 create mode 100644 
DynamicTablesPkg/Applications/ConfigurationManagerDumpApp/ConfigurationObjectStrings.c

diff --git 
a/DynamicTablesPkg/Applications/ConfigurationManagerDumpApp/ConfigurationManagerDumpApp.c
 
b/DynamicTablesPkg/Applications/ConfigurationManagerDumpApp/ConfigurationManagerDumpApp.c
new file mode 100644
index 0000000000..15936c78c1
--- /dev/null
+++ 
b/DynamicTablesPkg/Applications/ConfigurationManagerDumpApp/ConfigurationManagerDumpApp.c
@@ -0,0 +1,76 @@
+#include <Uefi.h>
+#include <Library/UefiLib.h>
+#include <Library/UefiBootServicesTableLib.h>
+#include <Protocol/ConfigurationManagerProtocol.h>
+
+#include "ConfigurationManagerDumpApp.h"
+
+EDKII_CONFIGURATION_MANAGER_PROTOCOL *mCfgMgr;
+
+EFI_STATUS
+EFIAPI
+UefiMain(
+  IN  EFI_HANDLE            ImageHandle,
+  IN  EFI_SYSTEM_TABLE   *  SystemTable
+  )
+{
+  EFI_STATUS Status = gBS->LocateProtocol (
+    &gEdkiiConfigurationManagerProtocolGuid, NULL, (VOID **)&mCfgMgr);
+
+  UINTN ObjectId;
+  CM_OBJ_DESCRIPTOR CmObject;
+  UINTN Count = 0;
+
+
+  if (EFI_ERROR(Status)) {
+    Print(L"No Configuration Manager installed!\n");
+    return EFI_UNSUPPORTED;
+  }
+
+  for (ObjectId = EObjNameSpaceStandard; ObjectId < EStdObjMax; ObjectId++) {
+    Status = mCfgMgr->GetObject (mCfgMgr, ObjectId, CM_NULL_TOKEN, &CmObject);
+    if (EFI_ERROR(Status)) {
+      continue;
+    }
+
+    Print (
+      L"<%s>::<%s>\n",
+      ObjectNameSpaceString[EObjNameSpaceStandard],
+      StdObjectString[ObjectId - EObjNameSpaceStandard]);
+
+    Print (
+      L"Id=%x Size=0x%x at=%p count=%d\n",
+      CmObject.ObjectId,
+      CmObject.Size,
+      CmObject.Count,
+      CmObject.Count);
+
+    Count++;
+  }
+
+  for (ObjectId = EObjNameSpaceArm; ObjectId < EArmObjMax; ObjectId++) {
+    Status = mCfgMgr->GetObject (mCfgMgr, ObjectId, CM_NULL_TOKEN, &CmObject);
+    if (EFI_ERROR(Status)) {
+      continue;
+    }
+
+    Print (
+      L"<%s>::<%s>\n",
+      ObjectNameSpaceString[EObjNameSpaceArm],
+      ArmObjectString[ObjectId - EObjNameSpaceArm]);
+
+    Print (
+      L"Id=%x Size=0x%x at=%p count=%d\n",
+      CmObject.ObjectId,
+      CmObject.Size,
+      CmObject.Count,
+      CmObject.Count);
+
+      Count++;
+  }
+
+  Print(L"Found %d objects\n", Count);
+  return EFI_SUCCESS;
+}
+
+
diff --git 
a/DynamicTablesPkg/Applications/ConfigurationManagerDumpApp/ConfigurationManagerDumpApp.h
 
b/DynamicTablesPkg/Applications/ConfigurationManagerDumpApp/ConfigurationManagerDumpApp.h
new file mode 100644
index 0000000000..5017d55b4a
--- /dev/null
+++ 
b/DynamicTablesPkg/Applications/ConfigurationManagerDumpApp/ConfigurationManagerDumpApp.h
@@ -0,0 +1,8 @@
+#ifndef CONFIGURATION_MANAGER_DUMP_APP_H_
+#define CONFIGURATION_MANAGER_DUMP_APP_H_
+
+extern CHAR16 *ArmObjectString[];
+extern CHAR16 *ObjectNameSpaceString[];
+extern CHAR16 *StdObjectString[];
+
+#endif
diff --git 
a/DynamicTablesPkg/Applications/ConfigurationManagerDumpApp/ConfigurationManagerDumpApp.inf
 
b/DynamicTablesPkg/Applications/ConfigurationManagerDumpApp/ConfigurationManagerDumpApp.inf
new file mode 100644
index 0000000000..9f8beb916d
--- /dev/null
+++ 
b/DynamicTablesPkg/Applications/ConfigurationManagerDumpApp/ConfigurationManagerDumpApp.inf
@@ -0,0 +1,42 @@
+## @file
+#  Application that will dump the contents of the configuration
+#  manager.
+#
+#  Copyright (c) 2020, ARM Limited. All rights reserved.
+#
+#  SPDX-License-Identifier: BSD-2-Clause-Patent
+##
+
+[Defines]
+  INF_VERSION                    = 0x00010019
+  BASE_NAME                      = ConfigurationManagerDumpApp
+  FILE_GUID                      = 1E12FA81-8465-4D78-918F-735DB8CB828B
+  MODULE_TYPE                    = UEFI_APPLICATION
+  VERSION_STRING                 = 1.0
+  ENTRY_POINT                    = UefiMain
+
+#
+# The following information is for reference only and not required by the 
build tools.
+#
+#  VALID_ARCHITECTURES           = ARM AARCH64
+#
+
+[Sources]
+  ConfigurationManagerDumpApp.c
+  ConfigurationManagerDumpApp.h
+  ConfigurationObjectStrings.c
+
+[Packages]
+  MdePkg/MdePkg.dec
+  MdeModulePkg/MdeModulePkg.dec
+  DynamicTablesPkg/DynamicTablesPkg.dec
+
+[LibraryClasses]
+  UefiLib
+  UefiBootServicesTableLib
+  UefiApplicationEntryPoint
+
+[Protocols]
+  gEdkiiConfigurationManagerProtocolGuid        # PROTOCOL PRODUCES
+
+
diff --git 
a/DynamicTablesPkg/Applications/ConfigurationManagerDumpApp/ConfigurationObjectStrings.c
 
b/DynamicTablesPkg/Applications/ConfigurationManagerDumpApp/ConfigurationObjectStrings.c
new file mode 100644
index 0000000000..ad8dbb6354
--- /dev/null
+++ 
b/DynamicTablesPkg/Applications/ConfigurationManagerDumpApp/ConfigurationObjectStrings.c
@@ -0,0 +1,50 @@
+
+CHAR16 *ArmObjectString[] = {
+  L"Reserved",
+  L"Boot Architecture Info",
+  L"CPU Info",
+  L"Power Management Profile Info",
+  L"GIC CPU Interface Info",
+  L"GIC Distributor Info",
+  L"GIC MSI Frame Info",
+  L"GIC Redistributor Info",
+  L"GIC ITS Info",
+  L"Serial Console Port Info",
+  L"Serial Debug Port Info",
+  L"Generic Timer Info",
+  L"Platform GT Block Info",
+  L"Generic Timer Block Frame Info",
+  L"Platform Generic Watchdog",
+  L"PCI Configuration Space Info",
+  L"Hypervisor Vendor Id",
+  L"Fixed feature flags for FADT",
+  L"ITS Group",
+  L"Named Component",
+  L"Root Complex",
+  L"SMMUv1 or SMMUv2",
+  L"SMMUv3",
+  L"PMCG",
+  L"GIC ITS Identifier Array",
+  L"ID Mapping Array",
+  L"SMMU Interrupt Array",
+  L"Processor Hierarchy Info",
+  L"Cache Info",
+  L"Processor Node ID Info",
+  L"CM Object Reference",
+  L"Memory Affinity Info",
+  L"Device Handle Acpi",
+  L"Device Handle Pci",
+  L"Generic Initiator Affinity"
+};
+
+CHAR16 *ObjectNameSpaceString[] = {
+  L"Standard Objects Namespace",
+  L"ARM Objects Namespace",
+  L"OEM Objects Namespace"
+};
+
+CHAR16 *StdObjectString[] = {
+  L"Configuration Manager Info",
+  L"ACPI table Info List",
+  L"SMBIOS table Info List"
+};
diff --git a/DynamicTablesPkg/DynamicTablesPkg.dsc 
b/DynamicTablesPkg/DynamicTablesPkg.dsc
index 346fa8ccdd..367e06a855 100644
--- a/DynamicTablesPkg/DynamicTablesPkg.dsc
+++ b/DynamicTablesPkg/DynamicTablesPkg.dsc
@@ -30,6 +30,11 @@
   PrintLib|MdePkg/Library/BasePrintLib/BasePrintLib.inf
   
UefiBootServicesTableLib|MdePkg/Library/UefiBootServicesTableLib/UefiBootServicesTableLib.inf
   
UefiDriverEntryPoint|MdePkg/Library/UefiDriverEntryPoint/UefiDriverEntryPoint.inf
+  
UefiApplicationEntryPoint|MdePkg/Library/UefiApplicationEntryPoint/UefiApplicationEntryPoint.inf
+  UefiLib|MdePkg/Library/UefiLib/UefiLib.inf
+  DevicePathLib|MdePkg/Library/UefiDevicePathLib/UefiDevicePathLib.inf
+  
UefiRuntimeServicesTableLib|MdePkg/Library/UefiRuntimeServicesTableLib/UefiRuntimeServicesTableLib.inf
+
 
 [LibraryClasses.ARM, LibraryClasses.AARCH64]
   NULL|ArmPkg/Library/CompilerIntrinsicsLib/CompilerIntrinsicsLib.inf
@@ -38,6 +43,7 @@
 
 [Components.common]
   DynamicTablesPkg/Library/Common/TableHelperLib/TableHelperLib.inf
+  
DynamicTablesPkg/Applications/ConfigurationManagerDumpApp/ConfigurationManagerDumpApp.inf
 
 [BuildOptions]
   *_*_*_CC_FLAGS = -DDISABLE_NEW_DEPRECATED_INTERFACES
-- 
2.25.1


-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.

View/Reply Online (#63582): https://edk2.groups.io/g/devel/message/63582
Mute This Topic: https://groups.io/mt/75910567/21656
Group Owner: devel+ow...@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub  [arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-

Reply via email to