public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
From: "Tomas Pilar (tpilar)" <tomas@nuviainc.com>
To: devel@edk2.groups.io
Cc: Sami Mujawar <Sami.Mujawar@arm.com>,
	Alexei Fedorov <Alexei.Fedorov@arm.com>
Subject: [PATCH 3/8] DynamicTablesPkg: Add ConfigurationManagerDumpApp
Date: Fri, 31 Jul 2020 17:19:21 +0100	[thread overview]
Message-ID: <20200731161926.341330-4-tomas@nuviainc.com> (raw)
In-Reply-To: <20200731161926.341330-1-tomas@nuviainc.com>

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.Mujawar@arm.com>
Cc: Alexei Fedorov <Alexei.Fedorov@arm.com>
Signed-off-by: Tomas Pilar <tomas@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


  parent reply	other threads:[~2020-07-31 16:19 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-07-31 16:19 [PATCH 0/8] ConfigurationManagerProtocol update Tomas Pilar (tpilar)
2020-07-31 16:19 ` [PATCH 1/8] DynamicTablesPkg: Include BaseStackCheckLib Tomas Pilar (tpilar)
2020-07-31 16:19 ` [PATCH 2/8] DynamicTablesPkg: Fold Namespaces into CmObjectId Enums Tomas Pilar (tpilar)
2020-07-31 16:19 ` Tomas Pilar (tpilar) [this message]
2020-07-31 16:19 ` [PATCH 4/8] DynamicTablesPkg: Update ConfigurationManagerProtocol Tomas Pilar (tpilar)
2020-07-31 16:19 ` [PATCH 5/8] DynamicTablesPkg: Add CfgMgrProtocol helper functions Tomas Pilar (tpilar)
2020-07-31 16:19 ` [PATCH 6/8] DynamicTablesPkg/TableHelperLib: User friendly strings Tomas Pilar (tpilar)
2020-07-31 16:19 ` [PATCH 7/8] DynamicTablesPkg: Simplify AddAcpiHeader, CfgMgrGetInfo Tomas Pilar (tpilar)
2020-07-31 16:19 ` [PATCH 8/8] DynamicTablesPkg: Remove GET_OBJECT_LIST Tomas Pilar (tpilar)

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=20200731161926.341330-4-tomas@nuviainc.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