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] -=-=-=-=-=-=-=-=-=-=-=-