]> git.proxmox.com Git - mirror_edk2.git/commitdiff
ShellPkg/dh: Modify the dump of BlockIo protocol
authorHuajing Li <huajing.li@intel.com>
Thu, 21 Sep 2017 07:44:40 +0000 (15:44 +0800)
committerRuiyu Ni <ruiyu.ni@intel.com>
Mon, 25 Sep 2017 00:32:18 +0000 (08:32 +0800)
Reviewed-by: Ruiyu Ni <ruiyu.ni@intel.com>
Cc: Jaben Carsey <jaben.carsey@intel.com>
Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Huajing Li <huajing.li@intel.com>
Reviewed-by: Jaben Carsey <jaben.carsey@intel.com>
ShellPkg/Library/UefiHandleParsingLib/UefiHandleParsingLib.c
ShellPkg/Library/UefiHandleParsingLib/UefiHandleParsingLib.uni

index ce2b49b5a24515088f84b84484a667926f9df738..fb67197171176e352b0a78eb963152afebececc6 100644 (file)
@@ -1016,6 +1016,84 @@ BusSpecificDriverOverrideProtocolDumpInformation (
   return RetVal;\r
 }\r
 \r
+/**\r
+  Function to dump information about BlockIo protocol.\r
+\r
+  This will allocate the return buffer from boot services pool.\r
+\r
+  @param[in] TheHandle      The handle that has the protocol installed.\r
+  @param[in] Verbose        TRUE for additional information, FALSE otherwise.\r
+\r
+  @retval A pointer to a string containing the information.\r
+**/\r
+CHAR16*\r
+EFIAPI\r
+BlockIoProtocolDumpInformation (\r
+  IN CONST EFI_HANDLE TheHandle,\r
+  IN CONST BOOLEAN    Verbose\r
+  )\r
+{\r
+  EFI_STATUS            Status;\r
+  EFI_BLOCK_IO_PROTOCOL *BlockIo;\r
+  EFI_BLOCK_IO_MEDIA    *BlockMedia;\r
+  CHAR16                *GetString;\r
+  CHAR16                *RetVal;\r
+\r
+  if (!Verbose) {\r
+    return NULL;\r
+  }\r
+  GetString   = NULL;\r
+  RetVal = NULL;\r
+\r
+  Status = gBS->OpenProtocol (\r
+                TheHandle,\r
+                &gEfiBlockIoProtocolGuid,\r
+                (VOID**)&BlockIo,\r
+                gImageHandle,\r
+                NULL,\r
+                EFI_OPEN_PROTOCOL_GET_PROTOCOL\r
+                );\r
+  if (EFI_ERROR (Status)) {\r
+    return NULL;\r
+  }\r
+  BlockMedia = BlockIo->Media;\r
+  //\r
+  // Per spec:\r
+  //   The function (ReadBlocks) must return EFI_NO_MEDIA or\r
+  //   EFI_MEDIA_CHANGED even if LBA, BufferSize, or Buffer are invalid so the caller can probe\r
+  //   for changes in media state.\r
+  //\r
+  BlockIo->ReadBlocks (\r
+             BlockIo,\r
+             BlockIo->Media->MediaId,\r
+             0,\r
+             0,\r
+             NULL\r
+             );\r
+\r
+  HandleParsingHiiInit ();\r
+  GetString = HiiGetString (mHandleParsingHiiHandle, STRING_TOKEN(STR_BLOCKIO_INFO), NULL);\r
+  if (GetString == NULL) {\r
+    return NULL;\r
+  }\r
+  RetVal = CatSPrint (\r
+            RetVal,\r
+            GetString,\r
+            BlockMedia->RemovableMedia ? L"Removable " : L"Fixed ",\r
+            BlockMedia->MediaPresent ? L"" : L"not-present ",\r
+            BlockMedia->MediaId,\r
+            BlockMedia->BlockSize,\r
+            BlockMedia->LastBlock,\r
+            MultU64x32 (BlockMedia->LastBlock + 1, BlockMedia->BlockSize),\r
+            BlockMedia->LogicalPartition ? L"partition" : L"raw",\r
+            BlockMedia->ReadOnly ? L"ro" : L"rw",\r
+            BlockMedia->WriteCaching ? L"cached" : L"!cached"\r
+            );\r
+\r
+  SHELL_FREE_NON_NULL (GetString);\r
+  return RetVal;\r
+}\r
+\r
 /**\r
   Function to dump information about EfiAdapterInformation Protocol.\r
 \r
@@ -1727,7 +1805,7 @@ STATIC CONST GUID_INFO_BLOCK mGuidStringList[] = {
   {STRING_TOKEN(STR_SIMPLE_FILE_SYS),       &gEfiSimpleFileSystemProtocolGuid,                NULL},\r
   {STRING_TOKEN(STR_TAPE_IO),               &gEfiTapeIoProtocolGuid,                          NULL},\r
   {STRING_TOKEN(STR_DISK_IO),               &gEfiDiskIoProtocolGuid,                          NULL},\r
-  {STRING_TOKEN(STR_BLK_IO),                &gEfiBlockIoProtocolGuid,                         NULL},\r
+  {STRING_TOKEN(STR_BLK_IO),                &gEfiBlockIoProtocolGuid,                         BlockIoProtocolDumpInformation},\r
   {STRING_TOKEN(STR_UC),                    &gEfiUnicodeCollationProtocolGuid,                NULL},\r
   {STRING_TOKEN(STR_UC2),                   &gEfiUnicodeCollation2ProtocolGuid,               NULL},\r
   {STRING_TOKEN(STR_PCIRB_IO),              &gEfiPciRootBridgeIoProtocolGuid,                 PciRootBridgeIoDumpInformation},\r
index 3f9fc9cbac5b5a9aa42558b37a8e9a476be341ec..eeb6aded6fc1c622fb659078ff182963da9c2217 100644 (file)
 \r
 #string STR_IDE_CONT_INIT         #language en-US "IdeControllerInit"\r
 #string STR_DISK_INFO             #language en-US "DiskInfo"\r
+#string STR_BLOCKIO_INFO          #language en-US "  %s%sMId:%%H%x%%N bsize %%H%x%%N, lblock %lx (%,ld), %s %s %s"\r
 \r
 #string STR_PCIRB_DUMP_PH         #language en-US "     ParentHandle..: %H%x%N\r\n"\r
 #string STR_PCIRB_DUMP_SEG        #language en-US "     Segment #.....: %H%x%N\r\n"\r