From 6a15908fd616fe2c494e9d555ce97736121fabd5 Mon Sep 17 00:00:00 2001 From: oliviermartin Date: Sat, 11 Jun 2011 11:59:31 +0000 Subject: [PATCH] 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 --- ArmPlatformPkg/Library/EblCmdLib/EblCmdLib.c | 180 +++++++++++------- .../Library/EblCmdLib/EblCmdLib.inf | 10 +- 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 #include #include +#include #include #include #include +#include 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.
+# Copyright (c) 2011, ARM Ltd. All rights reserved.
# 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 -- 2.39.2