IN CHAR8 **Argv\r
)\r
{\r
- EFI_STATUS Status;
- UINTN MemoryMapSize;
- EFI_MEMORY_DESCRIPTOR *MemoryMap;
- UINTN MapKey;
- UINTN DescriptorSize;
- UINTN DescriptorVersion;
- UINTN Pages;
+ EFI_STATUS Status;\r
+ UINTN MemoryMapSize;\r
+ EFI_MEMORY_DESCRIPTOR *MemoryMap;\r
+ UINTN MapKey;\r
+ UINTN DescriptorSize;\r
+ UINT32 DescriptorVersion;\r
+ UINTN Pages;\r
\r
if (Argc > 1) { \r
if (AsciiStriCmp (Argv[1], "efi") != 0) {\r
return EFI_ABORTED;\r
}\r
\r
- MemoryMap = NULL;
- MemoryMapSize = 0;
- do {
- Status = gBS->GetMemoryMap (
- &MemoryMapSize,
- MemoryMap,
- &MapKey,
- &DescriptorSize,
- &DescriptorVersion
- );
- if (Status == EFI_BUFFER_TOO_SMALL) {
-
- Pages = EFI_SIZE_TO_PAGES (MemoryMapSize) + 1;
- MemoryMap = AllocatePages (Pages);
-
- //
- // Get System MemoryMap
- //
- Status = gBS->GetMemoryMap (
- &MemoryMapSize,
- MemoryMap,
- &MapKey,
- &DescriptorSize,
- &DescriptorVersion
- );
- // Don't do anything between the GetMemoryMap() and ExitBootServices()
- if (!EFI_ERROR (Status)) {
- Status = gBS->ExitBootServices (gImageHandle, MapKey);
- if (EFI_ERROR (Status)) {
- FreePages (MemoryMap, Pages);
- MemoryMap = NULL;
- MemoryMapSize = 0;
- }
- }
- }
- } while (EFI_ERROR (Status));
+ MemoryMap = NULL;\r
+ MemoryMapSize = 0;\r
+ do {\r
+ Status = gBS->GetMemoryMap (\r
+ &MemoryMapSize,\r
+ MemoryMap,\r
+ &MapKey,\r
+ &DescriptorSize,\r
+ &DescriptorVersion\r
+ );\r
+ if (Status == EFI_BUFFER_TOO_SMALL) {\r
+\r
+ Pages = EFI_SIZE_TO_PAGES (MemoryMapSize) + 1;\r
+ MemoryMap = AllocatePages (Pages);\r
+ \r
+ //\r
+ // Get System MemoryMap\r
+ //\r
+ Status = gBS->GetMemoryMap (\r
+ &MemoryMapSize,\r
+ MemoryMap,\r
+ &MapKey,\r
+ &DescriptorSize,\r
+ &DescriptorVersion\r
+ );\r
+ // Don't do anything between the GetMemoryMap() and ExitBootServices()\r
+ if (!EFI_ERROR (Status)) {\r
+ Status = gBS->ExitBootServices (gImageHandle, MapKey);\r
+ if (EFI_ERROR (Status)) {\r
+ FreePages (MemoryMap, Pages);\r
+ MemoryMap = NULL;\r
+ MemoryMapSize = 0;\r
+ }\r
+ }\r
+ }\r
+ } while (EFI_ERROR (Status));\r
\r
//\r
// At this point it is very dangerous to do things EFI as most of EFI is now gone.\r
IN CHAR8 Character\r
)\r
{\r
- if (Character < ' ' || Character > '~')\r
- {\r
+ if (Character < ' ' || Character > '~') {\r
return '.';\r
- }\r
- else\r
- {\r
+ } else {\r
return Character;\r
}\r
}\r
{\r
UINTN Result = 0;\r
\r
- if (Bytes >= 1)\r
+ if (Bytes >= 1) {\r
Result = *Address++;\r
- \r
- if (Bytes >= 2)\r
+ }\r
+ if (Bytes >= 2) {\r
Result = (Result << 8) + *Address++;\r
- \r
- if (Bytes >= 3)\r
+ } \r
+ if (Bytes >= 3) {\r
Result = (Result << 8) + *Address++;\r
-\r
+ }\r
return Result;\r
}\r
\r
CHAR8 Blanks[80];\r
\r
AsciiStrCpy (Blanks, mBlanks);\r
- for (EndAddress = Address + Length; Address < EndAddress; Offset += Line)\r
- {\r
+ for (EndAddress = Address + Length; Address < EndAddress; Offset += Line) {\r
AsciiPrint ("%08x: ", Offset);\r
- for (Line = 0; (Line < 0x10) && (Address < EndAddress);)\r
- {\r
+ for (Line = 0; (Line < 0x10) && (Address < EndAddress);) {\r
Bytes = EndAddress - Address;\r
\r
- switch (Width)\r
- {\r
+ switch (Width) {\r
case 4:\r
- if (Bytes >= 4)\r
- {\r
+ if (Bytes >= 4) {\r
AsciiPrint ("%08x ", *((UINT32 *)Address));\r
TextLine[Line++] = ConvertToTextLine(*Address++);\r
TextLine[Line++] = ConvertToTextLine(*Address++);\r
TextLine[Line++] = ConvertToTextLine(*Address++);\r
TextLine[Line++] = ConvertToTextLine(*Address++);\r
- }\r
- else\r
- {\r
+ } else {\r
AsciiPrint ("%08x ", GetBytes(Address, Bytes));\r
Address += Bytes;\r
Line += Bytes;\r
break;\r
\r
case 2:\r
- if (Bytes >= 2)\r
- {\r
+ if (Bytes >= 2) {\r
AsciiPrint ("%04x ", *((UINT16 *)Address));\r
TextLine[Line++] = ConvertToTextLine(*Address++);\r
TextLine[Line++] = ConvertToTextLine(*Address++);\r
- }\r
- else\r
- {\r
+ } else {\r
AsciiPrint ("%04x ", GetBytes(Address, Bytes));\r
Address += Bytes;\r
Line += Bytes;\r
}\r
\r
// Pad spaces\r
- if (Line < 0x10)\r
- {\r
- switch (Width)\r
- {\r
+ if (Line < 0x10) {\r
+ switch (Width) {\r
case 4:\r
Spaces = 9 * ((0x10 - Line)/4);\r
break;\r
TextLine[Line] = 0;\r
AsciiPrint ("|%a|\n", TextLine);\r
\r
- if (EblAnyKeyToContinueQtoQuit(&CurrentRow, FALSE))\r
- {\r
+ if (EblAnyKeyToContinueQtoQuit (&CurrentRow, FALSE)) {\r
return EFI_END_OF_FILE;\r
}\r
}\r
\r
- if (Length % Width != 0)\r
- {\r
+ if (Length % Width != 0) {\r
AsciiPrint ("%08x\n", Offset);\r
}\r
\r
EFI_STATUS Status;\r
UINTN Chunk = HEXDUMP_CHUNK;\r
\r
- if ((Argc < 2) || (Argc > 3))\r
- {\r
+ if ((Argc < 2) || (Argc > 3)) {\r
return EFI_INVALID_PARAMETER;\r
}\r
\r
- if (Argc == 3)\r
- {\r
+ if (Argc == 3) {\r
Width = AsciiStrDecimalToUintn(Argv[2]);\r
}\r
\r
- if ((Width != 1) && (Width != 2) && (Width != 4))\r
- {\r
+ if ((Width != 1) && (Width != 2) && (Width != 4)) {\r
return EFI_INVALID_PARAMETER;\r
}\r
\r
- File = EfiOpen(Argv[1], EFI_FILE_MODE_READ, 0);\r
- if (File == NULL)\r
- {\r
+ File = EfiOpen (Argv[1], EFI_FILE_MODE_READ, 0);\r
+ if (File == NULL) {\r
return EFI_NOT_FOUND;\r
}\r
\r
- Location = AllocatePool(Chunk);\r
+ Location = AllocatePool (Chunk);\r
Size = EfiTell(File, NULL);\r
\r
- for (Offset = 0; Offset + HEXDUMP_CHUNK <= Size; Offset += Chunk)\r
- {\r
+ for (Offset = 0; Offset + HEXDUMP_CHUNK <= Size; Offset += Chunk) {\r
Chunk = HEXDUMP_CHUNK;\r
\r
- Status = EfiRead(File, Location, &Chunk);\r
+ Status = EfiRead (File, Location, &Chunk);\r
if (EFI_ERROR(Status))\r
{\r
AsciiPrint ("Error reading file content\n");\r
goto Exit;\r
}\r
\r
- Status = OutputData(Location, Chunk, Width, File->BaseOffset + Offset);\r
- if (EFI_ERROR(Status))\r
- {\r
+ Status = OutputData (Location, Chunk, Width, File->BaseOffset + Offset);\r
+ if (EFI_ERROR(Status)) {\r
if (Status == EFI_END_OF_FILE) {\r
Status = EFI_SUCCESS;\r
}\r
}\r
\r
// Any left over?\r
- if (Offset < Size)\r
- {\r
+ if (Offset < Size) {\r
Chunk = Size - Offset;\r
- Status = EfiRead(File, Location, &Chunk);\r
- if (EFI_ERROR(Status))\r
- {\r
+ Status = EfiRead (File, Location, &Chunk);\r
+ if (EFI_ERROR(Status)) {\r
AsciiPrint ("Error reading file content\n");\r
goto Exit;\r
}\r
\r
- Status = OutputData(Location, Chunk, Width, File->BaseOffset + Offset);\r
- if (EFI_ERROR(Status))\r
- {\r
+ Status = OutputData (Location, Chunk, Width, File->BaseOffset + Offset);\r
+ if (EFI_ERROR(Status)) {\r
if (Status == EFI_END_OF_FILE) {\r
Status = EFI_SUCCESS;\r
}\r
}\r
\r
Exit:\r
- EfiClose(File);\r
+ EfiClose (File);\r
\r
- FreePool(Location);\r
+ FreePool (Location);\r
\r
return EFI_SUCCESS;\r
}\r
\r
-#define USE_DISKIO 1\r
-\r
-EFI_STATUS\r
-EblDiskIoCmd (\r
- IN UINTN Argc,\r
- IN CHAR8 **Argv\r
- )\r
-{\r
- EFI_STATUS Status;\r
- UINTN Offset;\r
- UINT8 *EndOffset;\r
- UINTN Length;\r
- UINTN Line;\r
- UINT8 *Buffer;\r
- UINT8 *BufferOffset;\r
- CHAR8 TextLine[0x11];\r
-#if USE_DISKIO\r
- EFI_DISK_IO_PROTOCOL *DiskIo;\r
-#else\r
- EFI_BLOCK_IO_PROTOCOL *BlockIo;\r
- UINTN Lba;\r
-#endif \r
-\r
- if (AsciiStrCmp(Argv[1], "r") == 0)\r
- { \r
- Offset = AsciiStrHexToUintn(Argv[2]);\r
- Length = AsciiStrHexToUintn(Argv[3]);\r
-\r
-#if USE_DISKIO\r
- Status = gBS->LocateProtocol(&gEfiDiskIoProtocolGuid, NULL, (VOID **)&DiskIo);\r
- if (EFI_ERROR(Status))\r
- {\r
- AsciiPrint("Did not locate DiskIO\n");\r
- return Status;\r
- }\r
-\r
- Buffer = AllocatePool(Length);\r
- BufferOffset = Buffer;\r
- \r
- Status = DiskIo->ReadDisk(DiskIo, SIGNATURE_32('f','l','s','h'), Offset, Length, Buffer);\r
- if (EFI_ERROR(Status))\r
- {\r
- AsciiPrint("DiskIO read failed\n");\r
- gBS->FreePool(Buffer);\r
- return Status;\r
- } \r
-#else\r
- Status = gBS->LocateProtocol(&gEfiBlockIoProtocolGuid, NULL, (VOID **)&BlockIo);\r
- if (EFI_ERROR(Status))\r
- {\r
- AsciiPrint("Did not locate BlockIo\n");\r
- return Status;\r
- }\r
- \r
- Length = BlockIo->Media->BlockSize;\r
- Buffer = AllocatePool(Length);\r
- BufferOffset = Buffer;\r
- Lba = Offset/BlockIo->Media->BlockSize;\r
- \r
- Status = BlockIo->ReadBlocks(BlockIo, BlockIo->Media->MediaId, Lba, Length, Buffer);\r
- if (EFI_ERROR(Status))\r
- {\r
- AsciiPrint("BlockIo read failed\n");\r
- gBS->FreePool(Buffer);\r
- return Status;\r
- }\r
- \r
- // Whack offset to what we actually read from\r
- Offset = Lba * BlockIo->Media->BlockSize;\r
- \r
- Length = 0x100;\r
-#endif\r
-\r
- for (EndOffset = BufferOffset + Length; BufferOffset < EndOffset; Offset += 0x10)\r
- {\r
- AsciiPrint ("%08x: ", Offset);\r
- \r
- for (Line = 0; Line < 0x10; Line++)\r
- {\r
- AsciiPrint ("%02x ", *BufferOffset);\r
-\r
- if (*BufferOffset < ' ' || *BufferOffset > '~')\r
- TextLine[Line] = '.';\r
- else\r
- TextLine[Line] = *BufferOffset;\r
- \r
- BufferOffset++;\r
- }\r
-\r
- TextLine[Line] = '\0';\r
- AsciiPrint ("|%a|\n", TextLine);\r
- }\r
- \r
- gBS->FreePool(Buffer);\r
-\r
- return EFI_SUCCESS;\r
- }\r
- else if (AsciiStrCmp(Argv[1], "w") == 0)\r
- {\r
- Offset = AsciiStrHexToUintn(Argv[2]);\r
- Length = AsciiStrHexToUintn(Argv[3]);\r
- Buffer = (UINT8 *)AsciiStrHexToUintn(Argv[4]);\r
- \r
-#if USE_DISKIO\r
- Status = gBS->LocateProtocol(&gEfiDiskIoProtocolGuid, NULL, (VOID **)&DiskIo);\r
- if (EFI_ERROR(Status))\r
- {\r
- AsciiPrint("Did not locate DiskIO\n");\r
- return Status;\r
- }\r
-\r
- Status = DiskIo->WriteDisk(DiskIo, SIGNATURE_32('f','l','s','h'), Offset, Length, Buffer);\r
- if (EFI_ERROR(Status))\r
- {\r
- AsciiPrint("DiskIO write failed\n");\r
- return Status;\r
- }\r
-\r
-#else\r
-#endif\r
-\r
- return EFI_SUCCESS;\r
- }\r
- else\r
- {\r
- return EFI_INVALID_PARAMETER;\r
- }\r
-}\r
\r
GLOBAL_REMOVE_IF_UNREFERENCED const EBL_COMMAND_TABLE mCmdTemplate[] =\r
{\r
" filename ; dump a file as hex bytes",\r
NULL,\r
EblHexdumpCmd\r
- },\r
- {\r
- "diskio",\r
- " [r|w] offset [length [dataptr]]; do a DiskIO read or write ",\r
- NULL,\r
- EblDiskIoCmd\r
- } \r
+ }\r
};\r
\r
\r