summaryrefslogtreecommitdiff
path: root/ArmPlatformPkg
diff options
context:
space:
mode:
authoroliviermartin <oliviermartin@6f19259b-4bc3-4df7-8a09-765794883524>2011-06-11 11:59:31 +0000
committeroliviermartin <oliviermartin@6f19259b-4bc3-4df7-8a09-765794883524>2011-06-11 11:59:31 +0000
commit6a15908fd616fe2c494e9d555ce97736121fabd5 (patch)
tree48c68345ab61715c84d45da38001222c2d6058f8 /ArmPlatformPkg
parentea46ebbe6a5a579ff341071a13ae625e15edae64 (diff)
downloadedk2-platforms-6a15908fd616fe2c494e9d555ce97736121fabd5.tar.xz
ArmPlatformPkg/EblCmdLib: Add the 'devicepaths' EBL command
This command start alls the available drivers and prints out all the device paths of the platform. git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@11801 6f19259b-4bc3-4df7-8a09-765794883524
Diffstat (limited to 'ArmPlatformPkg')
-rw-r--r--ArmPlatformPkg/Library/EblCmdLib/EblCmdLib.c180
-rw-r--r--ArmPlatformPkg/Library/EblCmdLib/EblCmdLib.inf10
2 files changed, 118 insertions, 72 deletions
diff --git a/ArmPlatformPkg/Library/EblCmdLib/EblCmdLib.c b/ArmPlatformPkg/Library/EblCmdLib/EblCmdLib.c
index 9289444756..fee7f52596 100644
--- a/ArmPlatformPkg/Library/EblCmdLib/EblCmdLib.c
+++ b/ArmPlatformPkg/Library/EblCmdLib/EblCmdLib.c
@@ -29,11 +29,13 @@
#include <Library/PeCoffGetEntryPointLib.h>
#include <Library/PerformanceLib.h>
#include <Library/TimerLib.h>
+#include <Library/BdsLib.h>
#include <Guid/DebugImageInfoTable.h>
#include <Protocol/DebugSupport.h>
#include <Protocol/LoadedImage.h>
+#include <Protocol/DevicePathToText.h>
EFI_STATUS
EblDumpMmu (
@@ -183,7 +185,7 @@ ImageHandleToPdbFileName (
}
-CHAR8 *mTokenList[] = {
+STATIC CHAR8 *mTokenList[] = {
/*"SEC",*/
"PEI",
"DXE",
@@ -269,76 +271,112 @@ EblDumpGcd (
IN CHAR8 **Argv
)
{
- EFI_STATUS Status;
- UINTN NumberOfDescriptors;
- UINTN i;
- EFI_GCD_MEMORY_SPACE_DESCRIPTOR *MemorySpaceMap;
- EFI_GCD_IO_SPACE_DESCRIPTOR *IoSpaceMap;
-
- Status = gDS->GetMemorySpaceMap(&NumberOfDescriptors,&MemorySpaceMap);
- if (EFI_ERROR (Status)) {
- return Status;
- }
- AsciiPrint (" Address Range Image Device Attributes\n");
- AsciiPrint ("__________________________________________________________\n");
- for (i=0; i < NumberOfDescriptors; i++) {
- //AsciiPrint ("%016lx - %016lx",MemorySpaceMap[i].BaseAddress,MemorySpaceMap[i].BaseAddress+MemorySpaceMap[i].Length);
- AsciiPrint ("MEM %08lx - %08lx",(UINT64)MemorySpaceMap[i].BaseAddress,MemorySpaceMap[i].BaseAddress+MemorySpaceMap[i].Length-1);
- AsciiPrint (" %08x %08x",MemorySpaceMap[i].ImageHandle,MemorySpaceMap[i].DeviceHandle);
-
- if (MemorySpaceMap[i].Attributes & EFI_MEMORY_RUNTIME)
- AsciiPrint (" RUNTIME");
- if (MemorySpaceMap[i].Attributes & EFI_MEMORY_PORT_IO)
- AsciiPrint (" PORT_IO");
-
- if (MemorySpaceMap[i].Attributes & EFI_MEMORY_UC)
- AsciiPrint (" MEM_UC");
- if (MemorySpaceMap[i].Attributes & EFI_MEMORY_WC)
- AsciiPrint (" MEM_WC");
- if (MemorySpaceMap[i].Attributes & EFI_MEMORY_WT)
- AsciiPrint (" MEM_WT");
- if (MemorySpaceMap[i].Attributes & EFI_MEMORY_WB)
- AsciiPrint (" MEM_WB");
- if (MemorySpaceMap[i].Attributes & EFI_MEMORY_UCE)
- AsciiPrint (" MEM_UCE");
- if (MemorySpaceMap[i].Attributes & EFI_MEMORY_WP)
- AsciiPrint (" MEM_WP");
- if (MemorySpaceMap[i].Attributes & EFI_MEMORY_RP)
- AsciiPrint (" MEM_RP");
- if (MemorySpaceMap[i].Attributes & EFI_MEMORY_XP)
- AsciiPrint (" MEM_XP");
-
- if (MemorySpaceMap[i].GcdMemoryType & EfiGcdMemoryTypeNonExistent)
- AsciiPrint (" TYPE_NONEXISTENT");
- if (MemorySpaceMap[i].GcdMemoryType & EfiGcdMemoryTypeReserved)
- AsciiPrint (" TYPE_RESERVED");
- if (MemorySpaceMap[i].GcdMemoryType & EfiGcdMemoryTypeSystemMemory)
- AsciiPrint (" TYPE_SYSMEM");
- if (MemorySpaceMap[i].GcdMemoryType & EfiGcdMemoryTypeMemoryMappedIo)
- AsciiPrint (" TYPE_MEMMAP");
-
- AsciiPrint ("\n");
- }
+ EFI_STATUS Status;
+ UINTN NumberOfDescriptors;
+ UINTN i;
+ EFI_GCD_MEMORY_SPACE_DESCRIPTOR *MemorySpaceMap;
+ EFI_GCD_IO_SPACE_DESCRIPTOR *IoSpaceMap;
- Status = gDS->GetIoSpaceMap(&NumberOfDescriptors,&IoSpaceMap);
- if (EFI_ERROR (Status)) {
- return Status;
- }
- for (i=0; i < NumberOfDescriptors; i++) {
- AsciiPrint ("IO %08lx - %08lx",IoSpaceMap[i].BaseAddress,IoSpaceMap[i].BaseAddress+IoSpaceMap[i].Length);
- AsciiPrint ("\t%08x %08x",IoSpaceMap[i].ImageHandle,IoSpaceMap[i].DeviceHandle);
-
- if (IoSpaceMap[i].GcdIoType & EfiGcdMemoryTypeNonExistent)
- AsciiPrint (" TYPE_NONEXISTENT");
- if (IoSpaceMap[i].GcdIoType & EfiGcdMemoryTypeReserved)
- AsciiPrint (" TYPE_RESERVED");
- if (IoSpaceMap[i].GcdIoType & EfiGcdIoTypeIo)
- AsciiPrint (" TYPE_IO");
-
- AsciiPrint ("\n");
- }
+ Status = gDS->GetMemorySpaceMap(&NumberOfDescriptors,&MemorySpaceMap);
+ if (EFI_ERROR (Status)) {
+ return Status;
+ }
+ AsciiPrint (" Address Range Image Device Attributes\n");
+ AsciiPrint ("__________________________________________________________\n");
+ for (i=0; i < NumberOfDescriptors; i++) {
+ AsciiPrint ("MEM %016lx - %016lx",(UINT64)MemorySpaceMap[i].BaseAddress,MemorySpaceMap[i].BaseAddress+MemorySpaceMap[i].Length-1);
+ AsciiPrint (" %08x %08x",MemorySpaceMap[i].ImageHandle,MemorySpaceMap[i].DeviceHandle);
+
+ if (MemorySpaceMap[i].Attributes & EFI_MEMORY_RUNTIME)
+ AsciiPrint (" RUNTIME");
+ if (MemorySpaceMap[i].Attributes & EFI_MEMORY_PORT_IO)
+ AsciiPrint (" PORT_IO");
+
+ if (MemorySpaceMap[i].Attributes & EFI_MEMORY_UC)
+ AsciiPrint (" MEM_UC");
+ if (MemorySpaceMap[i].Attributes & EFI_MEMORY_WC)
+ AsciiPrint (" MEM_WC");
+ if (MemorySpaceMap[i].Attributes & EFI_MEMORY_WT)
+ AsciiPrint (" MEM_WT");
+ if (MemorySpaceMap[i].Attributes & EFI_MEMORY_WB)
+ AsciiPrint (" MEM_WB");
+ if (MemorySpaceMap[i].Attributes & EFI_MEMORY_UCE)
+ AsciiPrint (" MEM_UCE");
+ if (MemorySpaceMap[i].Attributes & EFI_MEMORY_WP)
+ AsciiPrint (" MEM_WP");
+ if (MemorySpaceMap[i].Attributes & EFI_MEMORY_RP)
+ AsciiPrint (" MEM_RP");
+ if (MemorySpaceMap[i].Attributes & EFI_MEMORY_XP)
+ AsciiPrint (" MEM_XP");
+
+ if (MemorySpaceMap[i].GcdMemoryType & EfiGcdMemoryTypeNonExistent)
+ AsciiPrint (" TYPE_NONEXISTENT");
+ if (MemorySpaceMap[i].GcdMemoryType & EfiGcdMemoryTypeReserved)
+ AsciiPrint (" TYPE_RESERVED");
+ if (MemorySpaceMap[i].GcdMemoryType & EfiGcdMemoryTypeSystemMemory)
+ AsciiPrint (" TYPE_SYSMEM");
+ if (MemorySpaceMap[i].GcdMemoryType & EfiGcdMemoryTypeMemoryMappedIo)
+ AsciiPrint (" TYPE_MEMMAP");
+
+ AsciiPrint ("\n");
+ }
+
+ Status = gDS->GetIoSpaceMap(&NumberOfDescriptors,&IoSpaceMap);
+ if (EFI_ERROR (Status)) {
+ return Status;
+ }
+ for (i=0; i < NumberOfDescriptors; i++) {
+ AsciiPrint ("IO %08lx - %08lx",IoSpaceMap[i].BaseAddress,IoSpaceMap[i].BaseAddress+IoSpaceMap[i].Length);
+ AsciiPrint ("\t%08x %08x",IoSpaceMap[i].ImageHandle,IoSpaceMap[i].DeviceHandle);
+
+ if (IoSpaceMap[i].GcdIoType & EfiGcdMemoryTypeNonExistent)
+ AsciiPrint (" TYPE_NONEXISTENT");
+ if (IoSpaceMap[i].GcdIoType & EfiGcdMemoryTypeReserved)
+ AsciiPrint (" TYPE_RESERVED");
+ if (IoSpaceMap[i].GcdIoType & EfiGcdIoTypeIo)
+ AsciiPrint (" TYPE_IO");
+
+ AsciiPrint ("\n");
+ }
+ return EFI_SUCCESS;
+}
+
+EFI_STATUS
+EblDevicePaths (
+ IN UINTN Argc,
+ IN CHAR8 **Argv
+ )
+{
+ EFI_STATUS Status;
+ UINTN HandleCount;
+ EFI_HANDLE *HandleBuffer;
+ UINTN Index;
+ CHAR16* String;
+ EFI_DEVICE_PATH_PROTOCOL* DevicePathProtocol;
+ EFI_DEVICE_PATH_TO_TEXT_PROTOCOL* DevicePathToTextProtocol;
+
+ BdsConnectAllDrivers();
+
+ Status = gBS->LocateProtocol(&gEfiDevicePathToTextProtocolGuid, NULL, (VOID **)&DevicePathToTextProtocol);
+ if (EFI_ERROR (Status)) {
+ AsciiPrint ("Did not find the DevicePathToTextProtocol.\n");
+ return EFI_SUCCESS;
+ }
+
+ Status = gBS->LocateHandleBuffer (ByProtocol, &gEfiDevicePathProtocolGuid, NULL, &HandleCount, &HandleBuffer);
+ if (EFI_ERROR (Status)) {
+ AsciiPrint ("No device path found\n");
return EFI_SUCCESS;
+ }
+
+ for (Index = 0; Index < HandleCount; Index++) {
+ Status = gBS->HandleProtocol (HandleBuffer[Index], &gEfiDevicePathProtocolGuid, (VOID **)&DevicePathProtocol);
+ String = DevicePathToTextProtocol->ConvertDevicePathToText(DevicePathProtocol,TRUE,TRUE);
+ Print (L"[0x%X] %s\n",(UINT32)HandleBuffer[Index], String);
+ }
+
+ return EFI_SUCCESS;
}
GLOBAL_REMOVE_IF_UNREFERENCED const EBL_COMMAND_TABLE mLibCmdTemplate[] =
@@ -372,6 +410,12 @@ GLOBAL_REMOVE_IF_UNREFERENCED const EBL_COMMAND_TABLE mLibCmdTemplate[] =
" dump MMU Table",
NULL,
EblDumpMmu
+ },
+ {
+ "devicepaths",
+ " list all the Device Paths",
+ NULL,
+ EblDevicePaths
}
};
diff --git a/ArmPlatformPkg/Library/EblCmdLib/EblCmdLib.inf b/ArmPlatformPkg/Library/EblCmdLib/EblCmdLib.inf
index fd327cd4a1..0eb71a0108 100644
--- a/ArmPlatformPkg/Library/EblCmdLib/EblCmdLib.inf
+++ b/ArmPlatformPkg/Library/EblCmdLib/EblCmdLib.inf
@@ -1,6 +1,6 @@
#/** @file
#
-# Copyright (c) 2010, ARM Ltd. All rights reserved.<BR>
+# Copyright (c) 2011, ARM Ltd. All rights reserved.<BR>
# This program and the accompanying materials
# are licensed and made available under the terms and conditions of the BSD License
# which accompanies this distribution. The full text of the license may be found at
@@ -44,10 +44,12 @@
ArmDisassemblerLib
PerformanceLib
TimerLib
+ BdsLib
[Protocols]
- gEfiDebugSupportProtocolGuid
- gEfiLoadedImageProtocolGuid
+ gEfiDebugSupportProtocolGuid
+ gEfiLoadedImageProtocolGuid
+ gEfiDevicePathToTextProtocolGuid
[Guids]
- gEfiDebugImageInfoTableGuid
+ gEfiDebugImageInfoTableGuid