* [PATCH] EmbeddedPkg Omap35xxPkg: remove EBL and associated libraries
@ 2017-11-15 15:45 Ard Biesheuvel
2017-11-24 17:21 ` Leif Lindholm
0 siblings, 1 reply; 3+ messages in thread
From: Ard Biesheuvel @ 2017-11-15 15:45 UTC (permalink / raw)
To: edk2-devel; +Cc: leif.lindholm, afish, Ard Biesheuvel
EBL is a deprecated, small memory footprint alternative for the
UEFI Shell that is no longer in use by any platforms in EDK2 or
in edk2-platforms. To avoid confusion, let's remove it from the
tree.
Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
---
BeagleBoardPkg/BeagleBoardPkg.dsc | 3 -
EmbeddedPkg/Ebl/CmdTemplate.c | 65 -
EmbeddedPkg/Ebl/Command.c | 925 ----------
EmbeddedPkg/Ebl/Dir.c | 357 ----
EmbeddedPkg/Ebl/Ebl.h | 210 ---
EmbeddedPkg/Ebl/Ebl.inf | 111 --
EmbeddedPkg/Ebl/EfiDevice.c | 1060 ------------
EmbeddedPkg/Ebl/Hob.c | 234 ---
EmbeddedPkg/Ebl/HwDebug.c | 346 ----
EmbeddedPkg/Ebl/HwIoDebug.c | 154 --
EmbeddedPkg/Ebl/Main.c | 677 --------
EmbeddedPkg/Ebl/Network.c | 106 --
EmbeddedPkg/Ebl/Script.c | 128 --
EmbeddedPkg/Ebl/Variable.c | 221 ---
EmbeddedPkg/EblExternCmd/EntryPointGlue.c | 154 --
EmbeddedPkg/EblExternCmd/Main.c | 53 -
EmbeddedPkg/EmbeddedPkg.dec | 6 -
EmbeddedPkg/EmbeddedPkg.dsc | 10 -
EmbeddedPkg/EmbeddedPkg.fdf | 141 --
EmbeddedPkg/Include/Library/EblAddExternalCommandLib.h | 122 --
EmbeddedPkg/Include/Library/EblCmdLib.h | 51 -
EmbeddedPkg/Include/Library/EblNetworkLib.h | 68 -
EmbeddedPkg/Include/Protocol/EblAddCommand.h | 142 --
EmbeddedPkg/Library/EblAddExternalCommandLib/EblAddExternalCommandLib.c | 155 --
EmbeddedPkg/Library/EblAddExternalCommandLib/EblAddExternalCommandLib.inf | 47 -
EmbeddedPkg/Library/EblCmdLibNull/EblCmdLibNull.c | 28 -
EmbeddedPkg/Library/EblCmdLibNull/EblCmdLibNull.inf | 43 -
EmbeddedPkg/Library/EblNetworkLib/EblNetworkLib.c | 173 --
EmbeddedPkg/Library/EblNetworkLib/EblNetworkLib.inf | 34 -
EmbeddedPkg/Library/EfiFileLib/EfiFileLib.c | 1784 --------------------
EmbeddedPkg/Library/EfiFileLib/EfiFileLib.inf | 64 -
Omap35xxPkg/Library/EblCmdLib/EblCmdLib.c | 72 -
Omap35xxPkg/Library/EblCmdLib/EblCmdLib.inf | 48 -
Omap35xxPkg/Omap35xxPkg.dsc | 1 -
34 files changed, 7793 deletions(-)
diff --git a/BeagleBoardPkg/BeagleBoardPkg.dsc b/BeagleBoardPkg/BeagleBoardPkg.dsc
index 30f6fd02e82f..b342672c3877 100644
--- a/BeagleBoardPkg/BeagleBoardPkg.dsc
+++ b/BeagleBoardPkg/BeagleBoardPkg.dsc
@@ -60,8 +60,6 @@ [LibraryClasses.common]
PerformanceLib|MdePkg/Library/BasePerformanceLibNull/BasePerformanceLibNull.inf
PrintLib|MdePkg/Library/BasePrintLib/BasePrintLib.inf
- EfiFileLib|EmbeddedPkg/Library/EfiFileLib/EfiFileLib.inf
-
# These libraries are used by the dynamic EFI Shell commands
ShellLib|ShellPkg/Library/UefiShellLib/UefiShellLib.inf
FileHandleLib|MdePkg/Library/UefiFileHandleLib/UefiFileHandleLib.inf
@@ -265,7 +263,6 @@ [PcdsFeatureFlag.common]
[PcdsFixedAtBuild.common]
gArmPlatformTokenSpaceGuid.PcdFirmwareVendor|"Beagle Board"
- gEmbeddedTokenSpaceGuid.PcdEmbeddedPrompt|"BeagleEdk2"
gEfiMdePkgTokenSpaceGuid.PcdMaximumUnicodeStringLength|1000000
gEfiMdePkgTokenSpaceGuid.PcdMaximumAsciiStringLength|1000000
gEfiMdePkgTokenSpaceGuid.PcdMaximumLinkedListLength|1000000
diff --git a/EmbeddedPkg/Ebl/CmdTemplate.c b/EmbeddedPkg/Ebl/CmdTemplate.c
deleted file mode 100644
index 2c291fcaea52..000000000000
--- a/EmbeddedPkg/Ebl/CmdTemplate.c
+++ /dev/null
@@ -1,65 +0,0 @@
-/** @file
- %CommandName% for EBL (Embedded Boot Loader)
-
- Copyright (c) 2007, Intel Corporation. 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
- http://opensource.org/licenses/bsd-license.php
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
- Module Name: CmdTemplate.c
-
- Search/Replace %CommandName% with the name of your new command
-
-**/
-
-#include "Ebl.h"
-
-
-/**
- Fill Me In
-
- Argv[0] - "%CommandName%"
-
- @param Argc Number of command arguments in Argv
- @param Argv Array of strings that represent the parsed command line.
- Argv[0] is the command name
-
- @return EFI_SUCCESS
-
-**/
-EFI_STATUS
-Ebl%CommandName%Cmd (
- IN UINTN Argc,
- IN CHAR8 **Argv
- )
-{
- return EFI_SUCCESS;
-}
-
-
-GLOBAL_REMOVE_IF_UNREFERENCED const EBL_COMMAND_TABLE mCmd%CommandName%Template[] =
-{
- {
- "%CommandName%",
- " [show args] ; explain args and command",
- NULL,
- Ebl%CommandName%Cmd
- }
-};
-
-
-/**
- Initialize the commands in this file
-**/
-VOID
-EblInitialize%CommandName%Cmd (
- VOID
- )
-{
- EblAddCommands (mCmd%CommandName%Template, sizeof (mCmd%CommandName%Template)/sizeof (EBL_COMMAND_TABLE));
-}
-
diff --git a/EmbeddedPkg/Ebl/Command.c b/EmbeddedPkg/Ebl/Command.c
deleted file mode 100644
index 4bc1f4df0ca0..000000000000
--- a/EmbeddedPkg/Ebl/Command.c
+++ /dev/null
@@ -1,925 +0,0 @@
-/** @file
- Basic commands and command processing infrastructure for EBL
-
- Copyright (c) 2007, Intel Corporation. All rights reserved.<BR>
- Portions copyright (c) 2008 - 2009, Apple Inc. All rights reserved.<BR>
- (C) Copyright 2015 Hewlett Packard Enterprise Development LP<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
- http://opensource.org/licenses/bsd-license.php
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
-**/
-
-#include "Ebl.h"
-#include <Protocol/DiskIo.h>
-#include <Protocol/BlockIo.h>
-
-UINTN mCmdTableMaxIndex = EBL_MAX_COMMAND_COUNT;
-UINTN mCmdTableNextFreeIndex = 0;
-EBL_COMMAND_TABLE *mCmdTable[EBL_MAX_COMMAND_COUNT];
-
-/**
- Converts a lowercase Ascii character to upper one
-
- If Chr is lowercase Ascii character, then converts it to upper one.
-
- If Value >= 0xA0, then ASSERT().
- If (Value & 0x0F) >= 0x0A, then ASSERT().
-
- @param chr one Ascii character
-
- @return The uppercase value of Ascii character
-
-**/
-STATIC
-CHAR8
-AsciiToUpper (
- IN CHAR8 Chr
- )
-{
- return (UINT8) ((Chr >= 'a' && Chr <= 'z') ? Chr - ('a' - 'A') : Chr);
-}
-
-
-/**
- Case insensitive comparison of two Null-terminated Unicode strings with maximum
- lengths, and returns the difference between the first mismatched Unicode
- characters.
- This function compares the Null-terminated Unicode string FirstString to the
- Null-terminated Unicode string SecondString. At most, Length Unicode
- characters will be compared. If Length is 0, then 0 is returned. If
- FirstString is identical to SecondString, then 0 is returned. Otherwise, the
- value returned is the first mismatched Unicode character in SecondString
- subtracted from the first mismatched Unicode character in FirstString.
-
- @param FirstString Pointer to a Null-terminated ASCII string.
- @param SecondString Pointer to a Null-terminated ASCII string.
- @param Length Max length to compare.
-
- @retval 0 FirstString is identical to SecondString using case insensitive
- comparisons.
- @retval !=0 FirstString is not identical to SecondString using case
- insensitive comparisons.
-
-**/
-INTN
-EFIAPI
-AsciiStrniCmp (
- IN CONST CHAR8 *FirstString,
- IN CONST CHAR8 *SecondString,
- IN UINTN Length
- )
-{
- if (Length == 0) {
- return 0;
- }
-
- while ((AsciiToUpper (*FirstString) != '\0') &&
- (AsciiToUpper (*FirstString) == AsciiToUpper (*SecondString)) &&
- (Length > 1)) {
- FirstString++;
- SecondString++;
- Length--;
- }
-
- return AsciiToUpper (*FirstString) - AsciiToUpper (*SecondString);
-}
-
-
-
-/**
- Add a command to the mCmdTable. If there is no free space in the command
- table ASSERT. The mCmdTable is maintained in alphabetical order and the
- new entry is inserted into its sorted position.
-
- @param Entry Command Entry to add to the CmdTable
-
-**/
-VOID
-EFIAPI
-EblAddCommand (
- IN const EBL_COMMAND_TABLE *Entry
- )
-{
- UINTN Count;
-
- if (mCmdTableNextFreeIndex == EBL_MAX_COMMAND_COUNT) {
- //
- // Ran out of space to store commands. Increase EBL_MAX_COMMAND_COUNT
- //
- ASSERT (FALSE);
- return;
- }
-
- //
- // Add command and Insertion sort array in the process
- //
- mCmdTable[mCmdTableNextFreeIndex] = (EBL_COMMAND_TABLE *)Entry;
- if (mCmdTableNextFreeIndex != 0) {
- for (Count = mCmdTableNextFreeIndex; Count > 0; Count--) {
- if (AsciiStriCmp (mCmdTable[Count - 1]->Name, Entry->Name) <= 0) {
- break;
- }
-
- mCmdTable[Count] = mCmdTable[Count - 1];
- }
- mCmdTable[Count] = (EBL_COMMAND_TABLE *)Entry;
- }
-
- mCmdTableNextFreeIndex++;
-}
-
-
-/**
- Add an set of commands to the command table. Most commonly used on static
- array of commands.
-
- @param EntryArray Pointer to array of command entries
- @param ArrayCount Number of command entries to add
-
-**/
-VOID
-EFIAPI
-EblAddCommands (
- IN const EBL_COMMAND_TABLE *EntryArray,
- IN UINTN ArrayCount
- )
-{
- UINTN Index;
-
- for (Index = 0; Index < ArrayCount; Index++) {
- EblAddCommand (&EntryArray[Index]);
- }
-}
-
-
-EBL_ADD_COMMAND_PROTOCOL gEblAddCommand = {
- EblAddCommand,
- EblAddCommands,
- EblGetCharKey,
- EblAnyKeyToContinueQtoQuit
-};
-
-
-
-/**
- Return the best matching command for the passed in command name. The match
- does not have to be exact, it just needs to be unique. This enables commands
- to be shortened to the smallest set of starting characters that is unique.
-
- @param CommandName Name of command to search for
-
- @return NULL CommandName did not match or was not unique
- Other Pointer to EBL_COMMAND_TABLE entry for CommandName
-
-**/
-EBL_COMMAND_TABLE *
-EblGetCommand (
- IN CHAR8 *CommandName
- )
-{
- UINTN Index;
- UINTN BestMatchCount;
- UINTN Length;
- EBL_COMMAND_TABLE *Match;
- CHAR8 *Str;
-
- Length = AsciiStrLen (CommandName);
- Str = AsciiStrStr (CommandName, ".");
- if (Str != NULL) {
- // If the command includes a trailing . command extension skip it for the match.
- // Example: hexdump.4
- Length = (UINTN)(Str - CommandName);
- }
-
- for (Index = 0, BestMatchCount = 0, Match = NULL; Index < mCmdTableNextFreeIndex; Index++) {
- if (AsciiStriCmp (mCmdTable[Index]->Name, CommandName) == 0) {
- // match a command exactly
- return mCmdTable[Index];
- }
-
- if (AsciiStrniCmp (CommandName, mCmdTable[Index]->Name, Length) == 0) {
- // partial match, so keep looking to make sure there is only one partial match
- BestMatchCount++;
- Match = mCmdTable[Index];
- }
- }
-
- if (BestMatchCount == 1) {
- return Match;
- }
-
- //
- // We had no matches or too many matches
- //
- return NULL;
-}
-
-
-UINTN
-CountNewLines (
- IN CHAR8 *Str
- )
-{
- UINTN Count;
-
- if (Str == NULL) {
- return 0;
- }
-
- for (Count = 0; *Str != '\0'; Str++) {
- if (Str[Count] == '\n') {
- Count++;
- }
- }
-
- return Count;
-}
-
-
-/**
- List out help information on all the commands or print extended information
- about a specific passed in command.
-
- Argv[0] - "help"
- Argv[1] - Command to display help about
-
- @param Argc Number of command arguments in Argv
- @param Argv Array of strings that represent the parsed command line.
- Argv[0] is the command name
-
- @return EFI_SUCCESS
-
-**/
-EFI_STATUS
-EFIAPI
-EblHelpCmd (
- IN UINTN Argc,
- IN CHAR8 **Argv
- )
-{
- UINTN Index;
- CHAR8 *Ptr;
- UINTN CurrentRow = 0;
-
- if (Argc == 1) {
- // Print all the commands
- AsciiPrint ("Embedded Boot Loader (EBL) commands (help command for more info):\n");
- CurrentRow++;
- for (Index = 0; Index < mCmdTableNextFreeIndex; Index++) {
- EblSetTextColor (EFI_YELLOW);
- AsciiPrint (" %a", mCmdTable[Index]->Name);
- EblSetTextColor (0);
- AsciiPrint ("%a\n", mCmdTable[Index]->HelpSummary);
- // Handle multi line help summaries
- CurrentRow += CountNewLines (mCmdTable[Index]->HelpSummary);
- if (EblAnyKeyToContinueQtoQuit (&CurrentRow, FALSE)) {
- break;
- }
- }
- } else if (Argv[1] != NULL) {
- // Print specific help
- for (Index = 0, CurrentRow = 0; Index < mCmdTableNextFreeIndex; Index++) {
- if (AsciiStriCmp (Argv[1], mCmdTable[Index]->Name) == 0) {
- Ptr = (mCmdTable[Index]->Help == NULL) ? mCmdTable[Index]->HelpSummary : mCmdTable[Index]->Help;
- AsciiPrint ("%a%a\n", Argv[1], Ptr);
- // Handle multi line help summaries
- CurrentRow += CountNewLines (Ptr);
- if (EblAnyKeyToContinueQtoQuit (&CurrentRow, FALSE)) {
- break;
- }
- }
- }
- }
-
- return EFI_SUCCESS;
-}
-
-
-/**
- Exit the EBL. If the command processor sees EFI_ABORTED return status it will
- exit the EBL.
-
- Argv[0] - "exit"
-
- @param Argc Number of command arguments in Argv
- @param Argv Array of strings that represent the parsed command line.
- Argv[0] is the command name
-
- @return EFI_ABORTED
-
-**/
-EFI_STATUS
-EFIAPI
-EblExitCmd (
- IN UINTN Argc,
- IN CHAR8 **Argv
- )
-{
- EFI_STATUS Status;
- UINTN MemoryMapSize;
- EFI_MEMORY_DESCRIPTOR *MemoryMap;
- UINTN MapKey;
- UINTN DescriptorSize;
- UINT32 DescriptorVersion;
- UINTN Pages;
-
- if (Argc > 1) {
- if (AsciiStriCmp (Argv[1], "efi") != 0) {
- return EFI_ABORTED;
- }
- } else if (Argc == 1) {
- return EFI_ABORTED;
- }
-
- 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));
-
- //
- // At this point it is very dangerous to do things EFI as most of EFI is now gone.
- // This command is useful if you are working with a debugger as it will shutdown
- // DMA and other things that could break a soft resets.
- //
- CpuDeadLoop ();
-
- // Should never get here, but makes the compiler happy
- return EFI_ABORTED;
-}
-
-
-/**
- Update the screen by decrementing the timeout value.
- This AsciiPrint has to match the AsciiPrint in
- EblPauseCmd.
-
- @param ElaspedTime Current timeout value remaining
-
-**/
-VOID
-EFIAPI
-EblPauseCallback (
- IN UINTN ElapsedTime
- )
-{
- AsciiPrint ("\b\b\b\b\b\b\b\b\b\b\b\b \b\b%3d seconds", ElapsedTime);
-}
-
-/**
- Pause until a key is pressed and abort the remaining commands on the command
- line. If no key is pressed continue processing the command line. This command
- allows the user to stop an operation from happening and return control to the
- command prompt.
-
- Argv[0] - "pause"
- Argv[1] - timeout value is decimal seconds
-
- @param Argc Number of command arguments in Argv
- @param Argv Array of strings that represent the parsed command line.
- Argv[0] is the command name
-
- @return EFI_SUCCESS Timeout expired with no input
- @return EFI_TIMEOUT Stop processing other commands on the same command line
-
-**/
-EFI_STATUS
-EFIAPI
-EblPauseCmd (
- IN UINTN Argc,
- IN CHAR8 **Argv
- )
-{
- EFI_STATUS Status;
- UINTN Delay;
- EFI_INPUT_KEY Key;
-
- Delay = (Argc == 1)? 10 : AsciiStrDecimalToUintn (Argv[1]);
-
- AsciiPrint ("Hit any key to break. You have %3d seconds", Delay);
- Status = EblGetCharKey (&Key, Delay, EblPauseCallback);
- AsciiPrint ("\n");
-
- // If we timeout then the pause succeeded thus return success
- // If we get a key return timeout to stop other command on this cmd line
- return (Status == EFI_SUCCESS) ? EFI_TIMEOUT : EFI_SUCCESS;;
-}
-
-
-/**
- On a debug build issue a software breakpoint to enter the debugger
-
- Argv[0] - "break"
-
- @param Argc Number of command arguments in Argv
- @param Argv Array of strings that represent the parsed command line.
- Argv[0] is the command name
-
- @return EFI_SUCCESS
-
-**/
-EFI_STATUS
-EFIAPI
-EblBreakPointCmd (
- IN UINTN Argc,
- IN CHAR8 **Argv
- )
-{
- CpuBreakpoint ();
- return EFI_SUCCESS;
-}
-
-
-/**
- Reset the system. If no Argument do a Cold reset. If argument use that reset type
- (W)arm = Warm Reset
- (S)hutdown = Shutdown Reset
-
- Argv[0] - "reset"
- Argv[1] - warm or shutdown reset type
-
- @param Argc Number of command arguments in Argv
- @param Argv Array of strings that represent the parsed command line.
- Argv[0] is the command name
-
- @return EFI_SUCCESS
-
-**/
-EFI_STATUS
-EFIAPI
-EblResetCmd (
- IN UINTN Argc,
- IN CHAR8 **Argv
- )
-{
- EFI_RESET_TYPE ResetType;
-
- ResetType = EfiResetCold;
- if (Argc > 1) {
- switch (*Argv[1]) {
- case 'W':
- case 'w':
- ResetType = EfiResetWarm;
- break;
- case 'S':
- case 's':
- ResetType = EfiResetShutdown;
- }
- }
-
- gRT->ResetSystem (ResetType, EFI_SUCCESS, 0, NULL);
- return EFI_SUCCESS;
-}
-
-
-/**
- Toggle page break global. This turns on and off prompting to Quit or hit any
- key to continue when a command is about to scroll the screen with its output
-
- Argv[0] - "page"
- Argv[1] - on or off
-
- @param Argc Number of command arguments in Argv
- @param Argv Array of strings that represent the parsed command line.
- Argv[0] is the command name
-
- @return EFI_SUCCESS
-
-**/
-EFI_STATUS
-EFIAPI
-EblPageCmd (
- IN UINTN Argc,
- IN CHAR8 **Argv
- )
-{
- if (Argc <= 1) {
- // toggle setting
- gPageBreak = (gPageBreak) ? FALSE : TRUE;
- } else {
- // use argv to set the value
- if ((Argv[1][0] == 'o') || (Argv[1][0] == 'O')) {
- if ((Argv[1][1] == 'n') || (Argv[1][1] == 'N')) {
- gPageBreak = TRUE;
- } else if ((Argv[1][1] == 'f') || (Argv[1][1] == 'F')) {
- gPageBreak = FALSE;
- } else {
- return EFI_INVALID_PARAMETER;
- }
- }
- }
- return EFI_SUCCESS;
-}
-
-EFI_STATUS
-EFIAPI
-EblSleepCmd (
- IN UINTN Argc,
- IN CHAR8 **Argv
- )
-{
- UINTN Delay;
-
- Delay = (Argc == 1)? 10 : AsciiStrDecimalToUintn (Argv[1]);
-
- gBS->Stall (Delay * 1000000);
-
- return EFI_SUCCESS;
-}
-
-CHAR8
-ConvertToTextLine (
- IN CHAR8 Character
- )
-{
- if (Character < ' ' || Character > '~') {
- return '.';
- } else {
- return Character;
- }
-}
-
-UINTN
-GetBytes (
- IN UINT8 *Address,
- IN UINTN Bytes
- )
-{
- UINTN Result = 0;
-
- if (Bytes >= 1) {
- Result = *Address++;
- }
- if (Bytes >= 2) {
- Result = (Result << 8) + *Address++;
- }
- if (Bytes >= 3) {
- Result = (Result << 8) + *Address++;
- }
- return Result;
-}
-
-CHAR8 mBlanks[] = " ";
-
-EFI_STATUS
-OutputData (
- IN UINT8 *Address,
- IN UINTN Length,
- IN UINTN Width,
- IN UINTN Offset
- )
-{
- UINT8 *EndAddress;
- UINTN Line;
- CHAR8 TextLine[0x11];
- UINTN CurrentRow = 0;
- UINTN Bytes;
- UINTN Spaces = 0;
- CHAR8 Blanks[80];
-
- AsciiStrCpyS (Blanks, sizeof Blanks, mBlanks);
- for (EndAddress = Address + Length; Address < EndAddress; Offset += Line) {
- AsciiPrint ("%08x: ", Offset);
- for (Line = 0; (Line < 0x10) && (Address < EndAddress);) {
- Bytes = EndAddress - Address;
-
- switch (Width) {
- case 4:
- if (Bytes >= 4) {
- AsciiPrint ("%08x ", *((UINT32 *)Address));
- TextLine[Line++] = ConvertToTextLine(*Address++);
- TextLine[Line++] = ConvertToTextLine(*Address++);
- TextLine[Line++] = ConvertToTextLine(*Address++);
- TextLine[Line++] = ConvertToTextLine(*Address++);
- } else {
- AsciiPrint ("%08x ", GetBytes(Address, Bytes));
- Address += Bytes;
- Line += Bytes;
- }
- break;
-
- case 2:
- if (Bytes >= 2) {
- AsciiPrint ("%04x ", *((UINT16 *)Address));
- TextLine[Line++] = ConvertToTextLine(*Address++);
- TextLine[Line++] = ConvertToTextLine(*Address++);
- } else {
- AsciiPrint ("%04x ", GetBytes(Address, Bytes));
- Address += Bytes;
- Line += Bytes;
- }
- break;
-
- case 1:
- AsciiPrint ("%02x ", *((UINT8 *)Address));
- TextLine[Line++] = ConvertToTextLine(*Address++);
- break;
-
- default:
- AsciiPrint ("Width must be 1, 2, or 4!\n");
- return EFI_INVALID_PARAMETER;
- }
- }
-
- // Pad spaces
- if (Line < 0x10) {
- switch (Width) {
- case 4:
- Spaces = 9 * ((0x10 - Line)/4);
- break;
- case 2:
- Spaces = 5 * ((0x10 - Line)/2);
- break;
- case 1:
- Spaces = 3 * (0x10 - Line);
- break;
- }
-
- Blanks[Spaces] = '\0';
-
- AsciiPrint(Blanks);
-
- Blanks[Spaces] = ' ';
- }
-
- TextLine[Line] = 0;
- AsciiPrint ("|%a|\n", TextLine);
-
- if (EblAnyKeyToContinueQtoQuit (&CurrentRow, FALSE)) {
- return EFI_END_OF_FILE;
- }
- }
-
- if (Length % Width != 0) {
- AsciiPrint ("%08x\n", Offset);
- }
-
- return EFI_SUCCESS;
-}
-
-
-/**
- See if command contains .# where # is a number. Return # as the Width
- or 1 as the default Width for commands.
-
- Example hexdump.4 returns a width of 4.
-
- @param Argv Argv[0] is the command name
-
- @return Width of command
-
-**/
-UINTN
-WidthFromCommandName (
- IN CHAR8 *Argv,
- IN UINTN Default
- )
-{
- CHAR8 *Str;
- UINTN Width;
-
- //Hexdump.2 HexDump.4 mean use a different width
- Str = AsciiStrStr (Argv, ".");
- if (Str != NULL) {
- Width = AsciiStrDecimalToUintn (Str + 1);
- if (Width == 0) {
- Width = Default;
- }
- } else {
- // Default answer
- return Default;
- }
-
- return Width;
-}
-
-#define HEXDUMP_CHUNK 1024
-
-/**
- Toggle page break global. This turns on and off prompting to Quit or hit any
- key to continue when a command is about to scroll the screen with its output
-
- Argv[0] - "hexdump"[.#] # is optional 1,2, or 4 for width
- Argv[1] - Device or File to dump.
- Argv[2] - Optional offset to start dumping
- Argv[3] - Optional number of bytes to dump
-
- @param Argc Number of command arguments in Argv
- @param Argv Array of strings that represent the parsed command line.
- Argv[0] is the command name
-
- @return EFI_SUCCESS
-
-**/
-EFI_STATUS
-EFIAPI
-EblHexdumpCmd (
- IN UINTN Argc,
- IN CHAR8 **Argv
- )
-{
- EFI_OPEN_FILE *File;
- VOID *Location;
- UINTN Size;
- UINTN Width;
- UINTN Offset = 0;
- EFI_STATUS Status;
- UINTN Chunk = HEXDUMP_CHUNK;
-
- if ((Argc < 2) || (Argc > 4)) {
- return EFI_INVALID_PARAMETER;
- }
-
- Width = WidthFromCommandName (Argv[0], 1);
- if ((Width != 1) && (Width != 2) && (Width != 4)) {
- return EFI_INVALID_PARAMETER;
- }
-
- File = EfiOpen (Argv[1], EFI_FILE_MODE_READ, 0);
- if (File == NULL) {
- return EFI_NOT_FOUND;
- }
-
- Location = AllocatePool (Chunk);
- Size = (Argc > 3) ? AsciiStrHexToUintn (Argv[3]) : EfiTell (File, NULL);
-
- Offset = 0;
- if (Argc > 2) {
- Offset = AsciiStrHexToUintn (Argv[2]);
- if (Offset > 0) {
- // Make sure size includes the part of the file we have skipped
- Size += Offset;
- }
- }
-
- Status = EfiSeek (File, Offset, EfiSeekStart);
- if (EFI_ERROR (Status)) {
- goto Exit;
- }
-
- for (; Offset + HEXDUMP_CHUNK <= Size; Offset += Chunk) {
- Chunk = HEXDUMP_CHUNK;
- Status = EfiRead (File, Location, &Chunk);
- if (EFI_ERROR(Status)) {
- AsciiPrint ("Error reading file content\n");
- goto Exit;
- }
-
- Status = OutputData (Location, Chunk, Width, File->BaseOffset + Offset);
- if (EFI_ERROR(Status)) {
- if (Status == EFI_END_OF_FILE) {
- Status = EFI_SUCCESS;
- }
- goto Exit;
- }
- }
-
- // Any left over?
- if (Offset < Size) {
- Chunk = Size - Offset;
- Status = EfiRead (File, Location, &Chunk);
- if (EFI_ERROR(Status)) {
- AsciiPrint ("Error reading file content\n");
- goto Exit;
- }
-
- Status = OutputData (Location, Chunk, Width, File->BaseOffset + Offset);
- if (EFI_ERROR(Status)) {
- if (Status == EFI_END_OF_FILE) {
- Status = EFI_SUCCESS;
- }
- goto Exit;
- }
- }
-
-Exit:
- EfiClose (File);
-
- FreePool (Location);
-
- return EFI_SUCCESS;
-}
-
-
-GLOBAL_REMOVE_IF_UNREFERENCED const EBL_COMMAND_TABLE mCmdTemplate[] =
-{
- {
- "reset",
- " [type]; Reset system. type = [warm] [shutdown] default is cold reset",
- NULL,
- EblResetCmd
- },
- {
- "exit",
- "; Exit EBL",
- NULL,
- EblExitCmd
- },
- {
- "help",
- " [cmd]; Help on cmd or a list of all commands if cmd is ommited",
- NULL,
- EblHelpCmd
- },
- {
- "break",
- "; Generate debugging breakpoint",
- NULL,
- EblBreakPointCmd
- },
- {
- "page",
- " [on|off]]; toggle promting on command output larger than screen",
- NULL,
- EblPageCmd
- },
- {
- "pause",
- " [sec]; Pause for sec[10] seconds. ",
- NULL,
- EblPauseCmd
- },
- {
- "sleep",
- " [sec]; Sleep for sec[10] seconds. ",
- NULL,
- EblSleepCmd
- },
- {
- "hexdump",
- "[.{1|2|4}] filename [Offset] [Size]; dump a file as hex .width",
- NULL,
- EblHexdumpCmd
- }
-};
-
-
-EFI_HANDLE gExternalCmdHandle = NULL;
-
-/**
- Initialize the commands in this in this file
-**/
-VOID
-EblInitializeCmdTable (
- VOID
- )
-{
-
- EblAddCommands (mCmdTemplate, sizeof (mCmdTemplate)/sizeof (EBL_COMMAND_TABLE));
-
- gBS->InstallProtocolInterface (
- &gExternalCmdHandle,
- &gEfiEblAddCommandProtocolGuid,
- EFI_NATIVE_INTERFACE,
- &gEblAddCommand
- );
-
-}
-
-
-VOID
-EblShutdownExternalCmdTable (
- VOID
- )
-{
- gBS->UninstallProtocolInterface (gExternalCmdHandle, &gEfiEblAddCommandProtocolGuid, &gEblAddCommand);
-}
-
-
diff --git a/EmbeddedPkg/Ebl/Dir.c b/EmbeddedPkg/Ebl/Dir.c
deleted file mode 100644
index a73c88d3aa2d..000000000000
--- a/EmbeddedPkg/Ebl/Dir.c
+++ /dev/null
@@ -1,357 +0,0 @@
-/** @file
- Dir for EBL (Embedded Boot Loader)
-
- Copyright (c) 2007, Intel Corporation. All rights reserved.<BR>
- Portions copyright (c) 2008 - 2009, Apple Inc. All rights reserved.<BR>
- (C) Copyright 2015 Hewlett Packard Enterprise Development LP<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
- http://opensource.org/licenses/bsd-license.php
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
- Module Name: CmdTemplate.c
-
- Search/Replace Dir with the name of your new command
-
-**/
-
-#include "Ebl.h"
-
-
-GLOBAL_REMOVE_IF_UNREFERENCED CHAR8 *gFvFileType[] = {
- "All",
- "Bin",
- "section",
- "SEC",
- "PeiCore",
- "DxeCore",
- "PEIM",
- "Driver",
- "Combo",
- "App",
- "NULL",
- "FV"
-};
-
-
-/**
- Perform a dir on a device. The device must support Simple File System Protocol
- or the FV protocol.
-
- Argv[0] - "dir"
- Argv[1] - Device Name:path. Path is optional
- Argv[2] - Optional filename to match on. A leading * means match substring
- Argv[3] - Optional FV file type
-
- dir fs1:\efi ; perform a dir on fs1: device in the efi directory
- dir fs1:\efi *.efi; perform a dir on fs1: device in the efi directory but
- only print out files that contain the string *.efi
- dir fv1:\ ; perform a dir on fv1: device in the efi directory
- NOTE: fv devices do not contain subdirs
- dir fv1:\ * PEIM ; will match all files of type PEIM
-
- @param Argc Number of command arguments in Argv
- @param Argv Array of strings that represent the parsed command line.
- Argv[0] is the command name
-
- @return EFI_SUCCESS
-
-**/
-EFI_STATUS
-EFIAPI
-EblDirCmd (
- IN UINTN Argc,
- IN CHAR8 **Argv
- )
-{
- EFI_STATUS Status;
- EFI_OPEN_FILE *File;
- EFI_FILE_INFO *DirInfo;
- UINTN ReadSize;
- UINTN CurrentRow;
- CHAR16 *MatchSubString;
- EFI_STATUS GetNextFileStatus;
- UINTN Key;
- EFI_FV_FILETYPE SearchType;
- EFI_FV_FILETYPE Type;
- EFI_FV_FILE_ATTRIBUTES Attributes;
- UINTN Size;
- EFI_GUID NameGuid;
- EFI_FIRMWARE_VOLUME2_PROTOCOL *Fv;
- UINT32 AuthenticationStatus;
- VOID *Section;
- UINTN SectionSize;
- EFI_FV_FILETYPE Index;
- UINTN Length;
- UINTN BestMatchCount;
- CHAR16 UnicodeFileName[MAX_CMD_LINE];
- CHAR8 *Path;
- CHAR8 *TypeStr;
- UINTN TotalSize;
-
-
- if (Argc <= 1) {
- Path = EfiGetCwd ();
- if (Path == NULL) {
- return EFI_SUCCESS;
- }
- } else {
- Path = Argv[1];
- }
-
- File = EfiOpen (Path, EFI_FILE_MODE_READ, 0);
- if (File == NULL) {
- return EFI_SUCCESS;
- }
-
- if (File->Type == EfiOpenFirmwareVolume) {
- // FV Dir
-
- SearchType = EFI_FV_FILETYPE_ALL;
- UnicodeFileName[0] = '\0';
- MatchSubString = &UnicodeFileName[0];
- if (Argc > 2) {
- AsciiStrToUnicodeStrS (Argv[2], UnicodeFileName,
- ARRAY_SIZE (UnicodeFileName));
- if (UnicodeFileName[0] == '*') {
- // Handle *Name substring matching
- MatchSubString = &UnicodeFileName[1];
- }
-
- // Handle file type matchs
- if (Argc > 3) {
- // match a specific file type, always last argument
- Length = AsciiStrLen (Argv[3]);
- for (Index = 1, BestMatchCount = 0; Index < sizeof (gFvFileType)/sizeof (CHAR8 *); Index++) {
- if (AsciiStriCmp (gFvFileType[Index], Argv[3]) == 0) {
- // exact match
- SearchType = Index;
- break;
- }
-
- if (AsciiStrniCmp (Argv[3], gFvFileType[Index], Length) == 0) {
- // partial match, so keep looking to make sure there is only one partial match
- BestMatchCount++;
- SearchType = Index;
- }
- }
-
- if (BestMatchCount > 1) {
- SearchType = EFI_FV_FILETYPE_ALL;
- }
- }
- }
-
- TotalSize = 0;
- Fv = File->Fv;
- Key = 0;
- CurrentRow = 0;
- do {
- Type = SearchType;
- GetNextFileStatus = Fv->GetNextFile (
- Fv,
- &Key,
- &Type,
- &NameGuid,
- &Attributes,
- &Size
- );
- if (!EFI_ERROR (GetNextFileStatus)) {
- TotalSize += Size;
- // Calculate size of entire file
- Section = NULL;
- Size = 0;
- Status = Fv->ReadFile (
- Fv,
- &NameGuid,
- Section,
- &Size,
- &Type,
- &Attributes,
- &AuthenticationStatus
- );
- if (!((Status == EFI_BUFFER_TOO_SMALL) || !EFI_ERROR (Status))) {
- // EFI_SUCCESS or EFI_BUFFER_TOO_SMALL mean size is valid
- Size = 0;
- }
-
- TypeStr = (Type <= EFI_FV_FILETYPE_FIRMWARE_VOLUME_IMAGE) ? gFvFileType[Type] : "UNKNOWN";
-
- // read the UI seciton to do a name match.
- Section = NULL;
- Status = Fv->ReadSection (
- Fv,
- &NameGuid,
- EFI_SECTION_USER_INTERFACE,
- 0,
- &Section,
- &SectionSize,
- &AuthenticationStatus
- );
- if (!EFI_ERROR (Status)) {
- if (StrStr (Section, MatchSubString) != NULL) {
- AsciiPrint ("%,9d %7a %g %s\n", Size, TypeStr, &NameGuid, Section);
- if (EblAnyKeyToContinueQtoQuit (&CurrentRow, FALSE)) {
- break;
- }
- }
- FreePool (Section);
- } else {
- if (*MatchSubString == '\0') {
- AsciiPrint ("%,9d %7a %g\n", Size, TypeStr, &NameGuid);
- if (EblAnyKeyToContinueQtoQuit (&CurrentRow, FALSE)) {
- break;
- }
- }
- }
- }
- } while (!EFI_ERROR (GetNextFileStatus));
-
- if (SearchType == EFI_FV_FILETYPE_ALL) {
- AsciiPrint ("%,20d bytes in files %,d bytes free\n", TotalSize, File->FvSize - File->FvHeaderSize - TotalSize);
- }
-
-
- } else if ((File->Type == EfiOpenFileSystem) || (File->Type == EfiOpenBlockIo)) {
- // Simple File System DIR
-
- if (File->FsFileInfo == NULL) {
- return EFI_SUCCESS;
- }
-
- if (!(File->FsFileInfo->Attribute & EFI_FILE_DIRECTORY)) {
- return EFI_SUCCESS;
- }
-
- // Handle *Name substring matching
- MatchSubString = NULL;
- UnicodeFileName[0] = '\0';
- if (Argc > 2) {
- AsciiStrToUnicodeStrS (Argv[2], UnicodeFileName, MAX_CMD_LINE);
- if (UnicodeFileName[0] == '*') {
- MatchSubString = &UnicodeFileName[1];
- }
- }
-
- File->FsFileHandle->SetPosition (File->FsFileHandle, 0);
- for (CurrentRow = 0;;) {
- // First read gets the size
- DirInfo = NULL;
- ReadSize = 0;
- Status = File->FsFileHandle->Read (File->FsFileHandle, &ReadSize, DirInfo);
- if (Status == EFI_BUFFER_TOO_SMALL) {
- // Allocate the buffer for the real read
- DirInfo = AllocatePool (ReadSize);
- if (DirInfo == NULL) {
- goto Done;
- }
-
- // Read the data
- Status = File->FsFileHandle->Read (File->FsFileHandle, &ReadSize, DirInfo);
- if ((EFI_ERROR (Status)) || (ReadSize == 0)) {
- break;
- }
- } else {
- break;
- }
-
- if (MatchSubString != NULL) {
- if (StrStr (&DirInfo->FileName[0], MatchSubString) == NULL) {
- // does not match *name argument, so skip
- continue;
- }
- } else if (UnicodeFileName[0] != '\0') {
- // is not an exact match for name argument, so skip
- if (StrCmp (&DirInfo->FileName[0], UnicodeFileName) != 0) {
- continue;
- }
- }
-
- if (DirInfo->Attribute & EFI_FILE_DIRECTORY) {
- AsciiPrint (" <DIR> %s\n", &DirInfo->FileName[0]);
- } else {
- AsciiPrint ("%,14ld %s\n", DirInfo->FileSize, &DirInfo->FileName[0]);
- }
-
- if (EblAnyKeyToContinueQtoQuit (&CurrentRow, FALSE)) {
- break;
- }
-
- FreePool (DirInfo);
- }
-
-Done:
- if (DirInfo != NULL) {
- FreePool (DirInfo);
- }
- }
-
- EfiClose (File);
-
- return EFI_SUCCESS;
-}
-
-/**
- Change the Current Working Directory
-
- Argv[0] - "cd"
- Argv[1] - Device Name:path. Path is optional
-
- @param Argc Number of command arguments in Argv
- @param Argv Array of strings that represent the parsed command line.
- Argv[0] is the command name
-
- @return EFI_SUCCESS
-
-**/
-EFI_STATUS
-EFIAPI
-EblCdCmd (
- IN UINTN Argc,
- IN CHAR8 **Argv
- )
-{
- if (Argc <= 1) {
- return EFI_SUCCESS;
- }
-
- return EfiSetCwd (Argv[1]);
-}
-
-
-
-GLOBAL_REMOVE_IF_UNREFERENCED const EBL_COMMAND_TABLE mCmdDirTemplate[] =
-{
- {
- "dir",
- " dirdev [*match]; directory listing of dirdev. opt match a substring",
- NULL,
- EblDirCmd
- },
- {
- "cd",
- " device - set the current working directory",
- NULL,
- EblCdCmd
- }
-};
-
-
-/**
- Initialize the commands in this in this file
-**/
-VOID
-EblInitializeDirCmd (
- VOID
- )
-{
- if (FeaturePcdGet (PcdEmbeddedDirCmd)) {
- EblAddCommands (mCmdDirTemplate, sizeof (mCmdDirTemplate)/sizeof (EBL_COMMAND_TABLE));
- }
-}
-
diff --git a/EmbeddedPkg/Ebl/Ebl.h b/EmbeddedPkg/Ebl/Ebl.h
deleted file mode 100644
index e028735d6b8a..000000000000
--- a/EmbeddedPkg/Ebl/Ebl.h
+++ /dev/null
@@ -1,210 +0,0 @@
-/** @file
- Include file for basic command line parser for EBL (Embedded Boot Loader)
-
- Copyright (c) 2007, Intel Corporation. All rights reserved.<BR>
- Portions copyright (c) 2008 - 2009, Apple Inc. All rights reserved.<BR>
- (C) Copyright 2015 Hewlett Packard Enterprise Development LP<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
- http://opensource.org/licenses/bsd-license.php
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
-**/
-
-#ifndef __EBL_H__
-#define __EBL_H__
-
-#include <PiDxe.h>
-#include <Protocol/BlockIo.h>
-#include <Protocol/SimpleFileSystem.h>
-#include <Protocol/FirmwareVolume2.h>
-#include <Protocol/LoadFile.h>
-#include <Protocol/FirmwareVolumeBlock.h>
-#include <Protocol/PxeBaseCode.h>
-#include <Protocol/LoadedImage.h>
-#include <Protocol/EblAddCommand.h>
-#include <Protocol/PciIo.h>
-#include <Protocol/DevicePath.h>
-
-#include <Guid/FileInfo.h>
-#include <Guid/DxeServices.h>
-#include <Guid/MemoryTypeInformation.h>
-#include <Guid/MemoryAllocationHob.h>
-#include <Library/BaseLib.h>
-#include <Library/MemoryAllocationLib.h>
-#include <Library/DevicePathLib.h>
-#include <Library/PrintLib.h>
-#include <Library/BaseMemoryLib.h>
-#include <Library/UefiLib.h>
-#include <Library/UefiBootServicesTableLib.h>
-#include <Library/UefiRuntimeServicesTableLib.h>
-#include <Library/DebugLib.h>
-#include <Library/EfiFileLib.h>
-#include <Library/HobLib.h>
-#include <Library/DebugLib.h>
-#include <Library/IoLib.h>
-#include <Library/PcdLib.h>
-#include <Library/EblCmdLib.h>
-#include <Library/DevicePathLib.h>
-#include <Library/UefiLib.h>
-#include <Library/EblNetworkLib.h>
-#include <Library/TimerLib.h>
-
-#include <IndustryStandard/Pci.h>
-
-//
-// Prompt for the command line
-//
-#define CMD_SEPARATOR ';'
-#define EBL_MAX_COMMAND_COUNT 0x100
-#define MAX_CMD_HISTORY 16
-#define MAX_CMD_LINE 256
-#define MAX_ARGS 32
-
-#define EBL_CR 0x0a
-#define EBL_LF 0x0d
-
-#define EFI_SET_TIMER_TO_SECOND 10000000
-
-
-
-EBL_COMMAND_TABLE *
-EblGetCommand (
- IN CHAR8 *CommandName
- );
-
-
-EFI_STATUS
-EblPathToDevice (
- IN CHAR8 *Path,
- OUT EFI_HANDLE *DeviceHandle,
- OUT EFI_DEVICE_PATH_PROTOCOL **PathDevicePath,
- OUT VOID **Buffer,
- OUT UINTN *BufferSize
- );
-
-BOOLEAN
-EFIAPI
-EblAnyKeyToContinueQtoQuit (
- IN UINTN *CurrentRow,
- IN BOOLEAN PrefixNewline
- );
-
-VOID
-EblUpdateDeviceLists (
- VOID
- );
-
-VOID
-EblInitializeCmdTable (
- VOID
- );
-
-VOID
-EblShutdownExternalCmdTable (
- VOID
- );
-
-VOID
-EblSetTextColor (
- UINTN Attribute
- );
-
-
-EFI_STATUS
-EFIAPI
-EblGetCharKey (
- IN OUT EFI_INPUT_KEY *Key,
- IN UINTN TimoutInSec,
- IN EBL_GET_CHAR_CALL_BACK CallBack OPTIONAL
- );
-
-// BugBug: Move me to a library
-INTN
-EFIAPI
-AsciiStrniCmp (
- IN CONST CHAR8 *FirstString,
- IN CONST CHAR8 *SecondString,
- IN UINTN Length
- );
-
-
-VOID
-EblInitializeDeviceCmd (
- VOID
- );
-
-VOID
-EblInitializemdHwDebugCmds (
- VOID
- );
-
-VOID
-EblInitializeDirCmd (
- VOID
- );
-
-VOID
-EblInitializeHobCmd (
- VOID
- );
-
-VOID
-EblInitializemdHwIoDebugCmds (
- VOID
- );
-
-VOID
-EblInitializeScriptCmd (
- VOID
- );
-
-VOID
-EblInitializeNetworkCmd (
- VOID
- );
-
-VOID
-EblInitializeVariableCmds (
- VOID
- );
-
-CHAR8 *
-ParseArguments (
- IN CHAR8 *CmdLine,
- OUT UINTN *Argc,
- OUT CHAR8 **Argv
- );
-
-EFI_STATUS
-ProcessCmdLine (
- IN CHAR8 *CmdLine,
- IN UINTN MaxCmdLineSize
- );
-
-EFI_STATUS
-OutputData (
- IN UINT8 *Address,
- IN UINTN Length,
- IN UINTN Width,
- IN UINTN Offset
- );
-
-UINTN
-WidthFromCommandName (
- IN CHAR8 *Argv,
- IN UINTN Default
- );
-
-
-extern UINTN gScreenColumns;
-extern UINTN gScreenRows;
-extern BOOLEAN gPageBreak;
-extern CHAR8 *gMemMapType[];
-
-#endif
-
diff --git a/EmbeddedPkg/Ebl/Ebl.inf b/EmbeddedPkg/Ebl/Ebl.inf
deleted file mode 100644
index 91a82d9f8cf8..000000000000
--- a/EmbeddedPkg/Ebl/Ebl.inf
+++ /dev/null
@@ -1,111 +0,0 @@
-#/** @file
-# EBL Applicaiton
-#
-# This is a shell application that will display Hello World.
-# Copyright (c) 2007, Intel Corporation. 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
-# http://opensource.org/licenses/bsd-license.php
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-#
-#**/
-
-################################################################################
-#
-# Defines Section - statements that will be processed to create a Makefile.
-#
-################################################################################
-[Defines]
- INF_VERSION = 0x00010005
- BASE_NAME = Ebl
- FILE_GUID = 3CEF354A-3B7A-4519-AD70-72A134698311
- MODULE_TYPE = UEFI_APPLICATION
- VERSION_STRING = 1.0
- ENTRY_POINT = EdkBootLoaderEntry
-
-#
-# The following information is for reference only and not required by the build tools.
-#
-# VALID_ARCHITECTURES = IA32 X64 IPF EBC
-#
-[Sources.common]
- Main.c
- Command.c
- EfiDevice.c
- HwDebug.c
- HwIoDebug.c
- Dir.c
- Hob.c
- Script.c
- Ebl.h
- Network.c
- Variable.c
-
-[Packages]
- MdePkg/MdePkg.dec
- MdeModulePkg/MdeModulePkg.dec
- IntelFrameworkPkg/IntelFrameworkPkg.dec
- IntelFrameworkModulePkg/IntelFrameworkModulePkg.dec
- EmbeddedPkg/EmbeddedPkg.dec
-
-[LibraryClasses]
- DebugLib
- UefiLib
- UefiApplicationEntryPoint
- UefiBootServicesTableLib
- UefiRuntimeServicesTableLib
- BaseMemoryLib
- MemoryAllocationLib
- DevicePathLib
- IoLib
- PrintLib
- PcdLib
- EfiFileLib
- HobLib
- BaseLib
- EblCmdLib
- EblNetworkLib
-
-[LibraryClasses.ARM]
- SemihostLib
-
-[Protocols.common]
- gEfiFirmwareVolume2ProtocolGuid
- gEfiFirmwareVolumeBlockProtocolGuid
- gEfiBlockIoProtocolGuid
- gEfiSimpleFileSystemProtocolGuid
- gEfiLoadFileProtocolGuid
- gEfiLoadedImageProtocolGuid
- gEfiPxeBaseCodeProtocolGuid
- gEfiEblAddCommandProtocolGuid
- gEfiDiskIoProtocolGuid
- gEfiPciIoProtocolGuid
- gEfiSimpleNetworkProtocolGuid
-
-[Guids.common]
- gEfiDxeServicesTableGuid
- gEfiFileInfoGuid
- gEfiHobMemoryAllocModuleGuid
- gEfiMemoryTypeInformationGuid
-
-[FeaturePcd.common]
- gEmbeddedTokenSpaceGuid.PcdEmbeddedMacBoot
- gEmbeddedTokenSpaceGuid.PcdEmbeddedDirCmd
- gEmbeddedTokenSpaceGuid.PcdEmbeddedHobCmd
- gEmbeddedTokenSpaceGuid.PcdEmbeddedHwDebugCmd
- gEmbeddedTokenSpaceGuid.PcdEmbeddedIoEnable
- gEmbeddedTokenSpaceGuid.PcdEmbeddedScriptCmd
- gEmbeddedTokenSpaceGuid.PcdEmbeddedPciDebugCmd
- gEmbeddedTokenSpaceGuid.PcdEmbeddedProbeRemovable
-
-[FixedPcd.common]
- gEmbeddedTokenSpaceGuid.PcdEmbeddedAutomaticBootCommand
- gEmbeddedTokenSpaceGuid.PcdEmbeddedDefaultTextColor
- gEmbeddedTokenSpaceGuid.PcdEmbeddedMemVariableStoreSize
- gEmbeddedTokenSpaceGuid.PcdEmbeddedShellCharacterEcho
- gEmbeddedTokenSpaceGuid.PcdEmbeddedPrompt
-
diff --git a/EmbeddedPkg/Ebl/EfiDevice.c b/EmbeddedPkg/Ebl/EfiDevice.c
deleted file mode 100644
index f6969e7b2b05..000000000000
--- a/EmbeddedPkg/Ebl/EfiDevice.c
+++ /dev/null
@@ -1,1060 +0,0 @@
-/** @file
- EBL commands for EFI and PI Devices
-
- Copyright (c) 2007, Intel Corporation. All rights reserved.<BR>
- Portions copyright (c) 2008 - 2009, Apple Inc. All rights reserved.<BR>
- (C) Copyright 2015 Hewlett Packard Enterprise Development LP<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
- http://opensource.org/licenses/bsd-license.php
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
-**/
-
-#include "Ebl.h"
-
-
-EFI_DXE_SERVICES *gDS = NULL;
-
-
-/**
- Print information about the File System device.
-
- @param File Open File for the device
-
-**/
-VOID
-EblPrintFsInfo (
- IN EFI_OPEN_FILE *File
- )
-{
- CHAR16 *Str;
-
- if (File == NULL) {
- return;
- }
-
- AsciiPrint (" %a: ", File->DeviceName);
- if (File->FsInfo != NULL) {
- for (Str = File->FsInfo->VolumeLabel; *Str != '\0'; Str++) {
- if (*Str == ' ') {
- // UI makes you enter _ for space, so make the printout match that
- *Str = '_';
- }
- AsciiPrint ("%c", *Str);
- }
- AsciiPrint (":");
- if (File->FsInfo->ReadOnly) {
- AsciiPrint ("ReadOnly");
- }
- }
-
- AsciiPrint ("\n");
- EfiClose (File);
-}
-
-
-/**
- Print information about the FV devices.
-
- @param File Open File for the device
-
-**/
-VOID
-EblPrintFvbInfo (
- IN EFI_OPEN_FILE *File
- )
-{
- if (File == NULL) {
- return;
- }
-
- AsciiPrint (" %a: 0x%08lx - 0x%08lx : 0x%08x\n", File->DeviceName, File->FvStart, File->FvStart + File->FvSize - 1, File->FvSize);
- EfiClose (File);
-}
-
-
-/**
- Print information about the Blk IO devices.
- If the device supports PXE dump out extra information
-
- @param File Open File for the device
-
-**/
-VOID
-EblPrintBlkIoInfo (
- IN EFI_OPEN_FILE *File
- )
-{
- UINT64 DeviceSize;
- UINTN Index;
- UINTN Max;
- EFI_OPEN_FILE *FsFile;
-
- if (File == NULL) {
- return;
- }
-
- AsciiPrint (" %a: ", File->DeviceName);
-
- // print out name of file system, if any, on this block device
- Max = EfiGetDeviceCounts (EfiOpenFileSystem);
- if (Max != 0) {
- for (Index = 0; Index < Max; Index++) {
- FsFile = EfiDeviceOpenByType (EfiOpenFileSystem, Index);
- if (FsFile != NULL) {
- if (FsFile->EfiHandle == File->EfiHandle) {
- AsciiPrint ("fs%d: ", Index);
- EfiClose (FsFile);
- break;
- }
- EfiClose (FsFile);
- }
- }
- }
-
- // Print out useful Block IO media properties
- if (File->FsBlockIoMedia->RemovableMedia) {
- AsciiPrint ("Removable ");
- }
- if (!File->FsBlockIoMedia->MediaPresent) {
- AsciiPrint ("No Media\n");
- } else {
- if (File->FsBlockIoMedia->LogicalPartition) {
- AsciiPrint ("Partition ");
- }
- DeviceSize = MultU64x32 (File->FsBlockIoMedia->LastBlock + 1, File->FsBlockIoMedia->BlockSize);
- AsciiPrint ("Size = 0x%lX\n", DeviceSize);
- }
- EfiClose (File);
-}
-
- /**
- Print information about the Load File devices.
- If the device supports PXE dump out extra information
-
- @param File Open File for the device
-
-**/
-VOID
-EblPrintLoadFileInfo (
- IN EFI_OPEN_FILE *File
- )
-{
- EFI_DEVICE_PATH_PROTOCOL *DevicePathNode;
- MAC_ADDR_DEVICE_PATH *MacAddr;
- UINTN HwAddressSize;
- UINTN Index;
-
- if (File == NULL) {
- return;
- }
-
- AsciiPrint (" %a: %a ", File->DeviceName, EblLoadFileBootTypeString (File->EfiHandle));
-
- if (File->DevicePath != NULL) {
- // Try to print out the MAC address
- for (DevicePathNode = File->DevicePath;
- !IsDevicePathEnd (DevicePathNode);
- DevicePathNode = NextDevicePathNode (DevicePathNode)) {
-
- if ((DevicePathType (DevicePathNode) == MESSAGING_DEVICE_PATH) && (DevicePathSubType (DevicePathNode) == MSG_MAC_ADDR_DP)) {
- MacAddr = (MAC_ADDR_DEVICE_PATH *)DevicePathNode;
-
- HwAddressSize = sizeof (EFI_MAC_ADDRESS);
- if (MacAddr->IfType == 0x01 || MacAddr->IfType == 0x00) {
- HwAddressSize = 6;
- }
-
- AsciiPrint ("MAC ");
- for (Index = 0; Index < HwAddressSize; Index++) {
- AsciiPrint ("%02x", MacAddr->MacAddress.Addr[Index] & 0xff);
- }
- }
- }
- }
-
- AsciiPrint ("\n");
- EfiClose (File);
- return;
-}
-
-
-
-/**
- Dump information about devices in the system.
-
- fv: PI Firmware Volume
- fs: EFI Simple File System
- blk: EFI Block IO
- LoadFile: EFI Load File Protocol (commonly PXE network boot)
-
- Argv[0] - "device"
-
- @param Argc Number of command arguments in Argv
- @param Argv Array of strings that represent the parsed command line.
- Argv[0] is the command name
-
- @return EFI_SUCCESS
-
-**/
-EFI_STATUS
-EFIAPI
-EblDeviceCmd (
- IN UINTN Argc,
- IN CHAR8 **Argv
- )
-{
- UINTN Index;
- UINTN CurrentRow;
- UINTN Max;
-
- CurrentRow = 0;
-
- // Need to call here to make sure Device Counts are valid
- EblUpdateDeviceLists ();
-
- // Now we can print out the info...
- Max = EfiGetDeviceCounts (EfiOpenFirmwareVolume);
- if (Max != 0) {
- AsciiPrint ("Firmware Volume Devices:\n");
- for (Index = 0; Index < Max; Index++) {
- EblPrintFvbInfo (EfiDeviceOpenByType (EfiOpenFirmwareVolume, Index));
- if (EblAnyKeyToContinueQtoQuit (&CurrentRow, TRUE)) {
- break;
- }
- }
- }
-
- Max = EfiGetDeviceCounts (EfiOpenFileSystem);
- if (Max != 0) {
- AsciiPrint ("File System Devices:\n");
- for (Index = 0; Index < Max; Index++) {
- EblPrintFsInfo (EfiDeviceOpenByType (EfiOpenFileSystem, Index));
- if (EblAnyKeyToContinueQtoQuit (&CurrentRow, TRUE)) {
- break;
- }
- }
- }
-
- Max = EfiGetDeviceCounts (EfiOpenBlockIo);
- if (Max != 0) {
- AsciiPrint ("Block IO Devices:\n");
- for (Index = 0; Index < Max; Index++) {
- EblPrintBlkIoInfo (EfiDeviceOpenByType (EfiOpenBlockIo, Index));
- if (EblAnyKeyToContinueQtoQuit (&CurrentRow, TRUE)) {
- break;
- }
- }
- }
-
- Max = EfiGetDeviceCounts (EfiOpenLoadFile);
- if (Max != 0) {
- AsciiPrint ("LoadFile Devices: (usually network)\n");
- for (Index = 0; Index < Max; Index++) {
- EblPrintLoadFileInfo (EfiDeviceOpenByType (EfiOpenLoadFile, Index));
- if (EblAnyKeyToContinueQtoQuit (&CurrentRow, TRUE)) {
- break;
- }
- }
- }
-
- return EFI_SUCCESS;
-}
-
-
-/**
- Start an EFI image (PE32+ with EFI defined entry point).
-
- Argv[0] - "start"
- Argv[1] - device name and path
- Argv[2] - "" string to pass into image being started
-
- start fs1:\Temp\Fv.Fv "arg to pass" ; load an FV from the disk and pass the
- ; ascii string arg to pass to the image
- start fv0:\FV ; load an FV from an FV (not common)
- start LoadFile0: ; load an FV via a PXE boot
-
- @param Argc Number of command arguments in Argv
- @param Argv Array of strings that represent the parsed command line.
- Argv[0] is the command name
-
- @return EFI_SUCCESS
-
-**/
-EFI_STATUS
-EFIAPI
-EblStartCmd (
- IN UINTN Argc,
- IN CHAR8 **Argv
- )
-{
- EFI_STATUS Status;
- EFI_OPEN_FILE *File;
- EFI_DEVICE_PATH_PROTOCOL *DevicePath;
- EFI_HANDLE ImageHandle;
- UINTN ExitDataSize;
- CHAR16 *ExitData;
- VOID *Buffer;
- UINTN BufferSize;
- EFI_LOADED_IMAGE_PROTOCOL *ImageInfo;
-
- ImageHandle = NULL;
-
- if (Argc < 2) {
- return EFI_INVALID_PARAMETER;
- }
-
- File = EfiOpen (Argv[1], EFI_FILE_MODE_READ, 0);
- if (File == NULL) {
- return EFI_INVALID_PARAMETER;
- }
-
- DevicePath = File->DevicePath;
- if (DevicePath != NULL) {
- // check for device path form: blk, fv, fs, and loadfile
- Status = gBS->LoadImage (FALSE, gImageHandle, DevicePath, NULL, 0, &ImageHandle);
- } else {
- // Check for buffer form: A0x12345678:0x1234 syntax.
- // Means load using buffer starting at 0x12345678 of size 0x1234.
-
- Status = EfiReadAllocatePool (File, &Buffer, &BufferSize);
- if (EFI_ERROR (Status)) {
- EfiClose (File);
- return Status;
- }
- Status = gBS->LoadImage (FALSE, gImageHandle, DevicePath, Buffer, BufferSize, &ImageHandle);
-
- FreePool (Buffer);
- }
-
- EfiClose (File);
-
- if (!EFI_ERROR (Status)) {
- if (Argc >= 3) {
- // Argv[2] is a "" string that we pass directly to the EFI application without the ""
- // We don't pass Argv[0] to the EFI Application (it's name) just the args
- Status = gBS->HandleProtocol (ImageHandle, &gEfiLoadedImageProtocolGuid, (VOID **)&ImageInfo);
- ASSERT_EFI_ERROR (Status);
-
- ImageInfo->LoadOptionsSize = (UINT32)AsciiStrSize (Argv[2]);
- ImageInfo->LoadOptions = AllocatePool (ImageInfo->LoadOptionsSize);
- AsciiStrCpyS (ImageInfo->LoadOptions, ImageInfo->LoadOptionsSize, Argv[2]);
- }
-
- // Transfer control to the EFI image we loaded with LoadImage()
- Status = gBS->StartImage (ImageHandle, &ExitDataSize, &ExitData);
- }
-
- return Status;
-}
-
-
-/**
- Load a Firmware Volume (FV) into memory from a device. This causes drivers in
- the FV to be dispatched if the dependencies of the drivers are met.
-
- Argv[0] - "loadfv"
- Argv[1] - device name and path
-
- loadfv fs1:\Temp\Fv.Fv ; load an FV from the disk
- loadfv fv0:\FV ; load an FV from an FV (not common)
- loadfv LoadFile0: ; load an FV via a PXE boot
-
- @param Argc Number of command arguments in Argv
- @param Argv Array of strings that represent the parsed command line.
- Argv[0] is the command name
-
- @return EFI_SUCCESS
-
-**/
-EFI_STATUS
-EFIAPI
-EblLoadFvCmd (
- IN UINTN Argc,
- IN CHAR8 **Argv
- )
-{
- EFI_STATUS Status;
- EFI_OPEN_FILE *File;
- VOID *FvStart;
- UINTN FvSize;
- EFI_HANDLE FvHandle;
-
-
- if (Argc < 2) {
- return EFI_INVALID_PARAMETER;
- }
-
- File = EfiOpen (Argv[1], EFI_FILE_MODE_READ, 0);
- if (File == NULL) {
- return EFI_INVALID_PARAMETER;
- }
-
- if (File->Type == EfiOpenMemoryBuffer) {
- // If it is a address just use it.
- Status = gDS->ProcessFirmwareVolume (File->Buffer, File->Size, &FvHandle);
- } else {
- // If it is a file read it into memory and use it
- Status = EfiReadAllocatePool (File, &FvStart, &FvSize);
- EfiClose (File);
- if (EFI_ERROR (Status)) {
- return Status;
- }
-
- Status = gDS->ProcessFirmwareVolume (FvStart, FvSize, &FvHandle);
- if (EFI_ERROR (Status)) {
- FreePool (FvStart);
- }
- }
- return Status;
-}
-
-
-/**
- Perform an EFI connect to connect devices that follow the EFI driver model.
- If it is a PI system also call the dispatcher in case a new FV was made
- available by one of the connect EFI drivers (this is not a common case).
-
- Argv[0] - "connect"
-
- @param Argc Number of command arguments in Argv
- @param Argv Array of strings that represent the parsed command line.
- Argv[0] is the command name
-
- @return EFI_SUCCESS
-
-**/
-EFI_STATUS
-EFIAPI
-EblConnectCmd (
- IN UINTN Argc,
- IN CHAR8 **Argv
- )
-{
- EFI_STATUS Status;
- UINTN HandleCount;
- EFI_HANDLE *HandleBuffer;
- UINTN Index;
- BOOLEAN Dispatch;
- EFI_OPEN_FILE *File;
-
-
- if (Argc > 1) {
- if ((*Argv[1] == 'd') || (*Argv[1] == 'D')) {
- Status = gBS->LocateHandleBuffer (
- AllHandles,
- NULL,
- NULL,
- &HandleCount,
- &HandleBuffer
- );
- if (EFI_ERROR (Status)) {
- return Status;
- }
-
- for (Index = 0; Index < HandleCount; Index++) {
- gBS->DisconnectController (HandleBuffer[Index], NULL, NULL);
- }
-
- //
- // Given we disconnect our console we should go and do a connect now
- //
- } else {
- File = EfiOpen (Argv[1], EFI_FILE_MODE_READ, 0);
- if (File != NULL) {
- AsciiPrint ("Connecting %a\n", Argv[1]);
- gBS->ConnectController (File->EfiHandle, NULL, NULL, TRUE);
- EfiClose (File);
- return EFI_SUCCESS;
- }
- }
- }
-
- Dispatch = FALSE;
- do {
- Status = gBS->LocateHandleBuffer (
- AllHandles,
- NULL,
- NULL,
- &HandleCount,
- &HandleBuffer
- );
- if (EFI_ERROR (Status)) {
- return Status;
- }
-
- for (Index = 0; Index < HandleCount; Index++) {
- gBS->ConnectController (HandleBuffer[Index], NULL, NULL, TRUE);
- }
-
- FreePool (HandleBuffer);
-
- //
- // Check to see if it's possible to dispatch an more DXE drivers.
- // The BdsLibConnectAllEfi () may have made new DXE drivers show up.
- // If anything is Dispatched Status == EFI_SUCCESS and we will try
- // the connect again.
- //
- if (gDS == NULL) {
- Status = EFI_NOT_FOUND;
- } else {
- Status = gDS->Dispatch ();
- if (!EFI_ERROR (Status)) {
- Dispatch = TRUE;
- }
- }
-
- } while (!EFI_ERROR (Status));
-
- if (Dispatch) {
- AsciiPrint ("Connected and dispatched\n");
- } else {
- AsciiPrint ("Connect\n");
- }
-
- return EFI_SUCCESS;
-}
-
-
-
-CHAR8 *gMemMapType[] = {
- "reserved ",
- "LoaderCode",
- "LoaderData",
- "BS_code ",
- "BS_data ",
- "RT_code ",
- "RT_data ",
- "available ",
- "Unusable ",
- "ACPI_recl ",
- "ACPI_NVS ",
- "MemMapIO ",
- "MemPortIO ",
- "PAL_code "
-};
-
-
-/**
- Dump out the EFI memory map
-
- Argv[0] - "memmap"
-
- @param Argc Number of command arguments in Argv
- @param Argv Array of strings that represent the parsed command line.
- Argv[0] is the command name
-
- @return EFI_SUCCESS
-
-**/
-EFI_STATUS
-EFIAPI
-EblMemMapCmd (
- IN UINTN Argc,
- IN CHAR8 **Argv
- )
-{
- EFI_STATUS Status;
- EFI_MEMORY_DESCRIPTOR *MemMap;
- EFI_MEMORY_DESCRIPTOR *OrigMemMap;
- UINTN MemMapSize;
- UINTN MapKey;
- UINTN DescriptorSize;
- UINT32 DescriptorVersion;
- UINT64 PageCount[EfiMaxMemoryType];
- UINTN Index;
- UINT64 EntrySize;
- UINTN CurrentRow;
- UINT64 TotalMemory;
-
- ZeroMem (PageCount, sizeof (PageCount));
-
- AsciiPrint ("EFI Memory Map\n");
-
- // First call is to figure out how big the buffer needs to be
- MemMapSize = 0;
- MemMap = NULL;
- Status = gBS->GetMemoryMap (&MemMapSize, MemMap, &MapKey, &DescriptorSize, &DescriptorVersion);
- if (Status == EFI_BUFFER_TOO_SMALL) {
- // In case the AllocatPool changes the memory map we added in some extra descriptors
- MemMapSize += (DescriptorSize * 0x100);
- OrigMemMap = MemMap = AllocatePool (MemMapSize);
- if (OrigMemMap != NULL) {
- // 2nd time we get the data
- Status = gBS->GetMemoryMap (&MemMapSize, MemMap, &MapKey, &DescriptorSize, &DescriptorVersion);
- if (!EFI_ERROR (Status)) {
- for (Index = 0, CurrentRow = 0; Index < MemMapSize/DescriptorSize; Index++) {
- EntrySize = LShiftU64 (MemMap->NumberOfPages, 12);
- AsciiPrint ("\n%a %016lx - %016lx: # %08lx %016lx", gMemMapType[MemMap->Type % EfiMaxMemoryType], MemMap->PhysicalStart, MemMap->PhysicalStart + EntrySize -1, MemMap->NumberOfPages, MemMap->Attribute);
- if (EblAnyKeyToContinueQtoQuit (&CurrentRow, TRUE)) {
- break;
- }
-
- PageCount[MemMap->Type % EfiMaxMemoryType] += MemMap->NumberOfPages;
- MemMap = NEXT_MEMORY_DESCRIPTOR (MemMap, DescriptorSize);
- }
- }
-
- for (Index = 0, TotalMemory = 0; Index < EfiMaxMemoryType; Index++) {
- if (PageCount[Index] != 0) {
- AsciiPrint ("\n %a %,7ld Pages (%,14ld)", gMemMapType[Index], PageCount[Index], LShiftU64 (PageCount[Index], 12));
- if (Index == EfiLoaderCode ||
- Index == EfiLoaderData ||
- Index == EfiBootServicesCode ||
- Index == EfiBootServicesData ||
- Index == EfiRuntimeServicesCode ||
- Index == EfiRuntimeServicesData ||
- Index == EfiConventionalMemory ||
- Index == EfiACPIReclaimMemory ||
- Index == EfiACPIMemoryNVS ||
- Index == EfiPalCode
- ) {
- // Count total memory
- TotalMemory += PageCount[Index];
- }
- }
- }
-
- AsciiPrint ("\nTotal Memory: %,ld MB (%,ld bytes)\n", RShiftU64 (TotalMemory, 8), LShiftU64 (TotalMemory, 12));
-
- FreePool (OrigMemMap);
-
- }
- }
-
- return EFI_SUCCESS;
-}
-
-
-
-
-/**
- Load a file into memory and optionally jump to it. A load address can be
- specified or automatically allocated. A quoted command line can optionally
- be passed into the image.
-
- Argv[0] - "go"
- Argv[1] - Device Name:path for the file to load
- Argv[2] - Address to load to or '*' if the load address will be allocated
- Argv[3] - Optional Entry point to the image. Image will be called if present
- Argv[4] - "" string that will be passed as Argc & Argv to EntryPoint. Needs
- to include the command name
-
- go fv1:\EblCmdX 0x10000 0x10010 "EblCmdX Arg2 Arg3 Arg4"; - load EblCmdX
- from FV1 to location 0x10000 and call the entry point at 0x10010 passing
- in "EblCmdX Arg2 Arg3 Arg4" as the arguments.
-
- go fv0:\EblCmdX * 0x10 "EblCmdX Arg2 Arg3 Arg4"; - load EblCmdX from FS0
- to location allocated by this command and call the entry point at offset 0x10
- passing in "EblCmdX Arg2 Arg3 Arg4" as the arguments.
-
- go fv1:\EblCmdX 0x10000; Load EblCmdX to address 0x10000 and return
-
- @param Argc Number of command arguments in Argv
- @param Argv Array of strings that represent the parsed command line.
- Argv[0] is the command name
-
- @return EFI_SUCCESS
-
-**/
-EFI_STATUS
-EFIAPI
-EblGoCmd (
- IN UINTN Argc,
- IN CHAR8 **Argv
- )
-{
- EFI_STATUS Status;
- EFI_OPEN_FILE *File;
- VOID *Address;
- UINTN Size;
- EBL_COMMMAND EntryPoint;
- UINTN EntryPointArgc;
- CHAR8 *EntryPointArgv[MAX_ARGS];
-
-
- if (Argc <= 2) {
- // device name and laod address are required
- return EFI_SUCCESS;
- }
-
- File = EfiOpen (Argv[1], EFI_FILE_MODE_READ, 0);
- if (File == NULL) {
- AsciiPrint (" %a is not a valid path\n", Argv[1]);
- return EFI_SUCCESS;
- }
-
- EntryPoint = (EBL_COMMMAND)((Argc > 3) ? (UINTN)AsciiStrHexToUintn (Argv[3]) : (UINTN)NULL);
- if (Argv[2][0] == '*') {
- // * Means allocate the buffer
- Status = EfiReadAllocatePool (File, &Address, &Size);
-
- // EntryPoint is relative to the start of the image
- EntryPoint = (EBL_COMMMAND)((UINTN)EntryPoint + (UINTN)Address);
-
- } else {
- Address = (VOID *)AsciiStrHexToUintn (Argv[2]);
- Size = File->Size;
-
- // File->Size for LoadFile is lazy so we need to use the tell to figure it out
- EfiTell (File, NULL);
- Status = EfiRead (File, Address, &Size);
- }
-
- if (!EFI_ERROR (Status)) {
- AsciiPrint ("Loaded %,d bytes to 0x%08x\n", Size, Address);
-
- if (Argc > 3) {
- if (Argc > 4) {
- ParseArguments (Argv[4], &EntryPointArgc, EntryPointArgv);
- } else {
- EntryPointArgc = 1;
- EntryPointArgv[0] = File->FileName;
- }
-
- Status = EntryPoint (EntryPointArgc, EntryPointArgv);
- }
- }
-
- EfiClose (File);
- return Status;
-}
-
-#define FILE_COPY_CHUNK 0x20000
-
-EFI_STATUS
-EFIAPI
-EblFileCopyCmd (
- IN UINTN Argc,
- IN CHAR8 **Argv
- )
-{
- EFI_OPEN_FILE *Source = NULL;
- EFI_OPEN_FILE *Destination = NULL;
- EFI_STATUS Status = EFI_SUCCESS;
- VOID *Buffer = NULL;
- UINTN Size;
- UINTN Offset;
- UINTN Chunk = FILE_COPY_CHUNK;
- UINTN FileNameLen, DestFileNameLen;
- CHAR8* DestFileName;
- CHAR8* SrcFileName;
- CHAR8* SrcPtr;
-
- if (Argc < 3) {
- return EFI_INVALID_PARAMETER;
- }
-
- DestFileName = Argv[2];
- FileNameLen = AsciiStrLen (DestFileName);
-
- // Check if the destination file name looks like a directory
- if ((DestFileName[FileNameLen-1] == '\\') || (DestFileName[FileNameLen-1] == ':')) {
- // Set the pointer after the source drive (eg: after fs1:)
- SrcPtr = AsciiStrStr (Argv[1], ":");
- if (SrcPtr == NULL) {
- SrcPtr = Argv[1];
- } else {
- SrcPtr++;
- if (*SrcPtr == '\\') {
- SrcPtr++;
- }
- }
-
- if (*SrcPtr == '\0') {
- AsciiPrint("Source file incorrect.\n");
- }
-
- // Skip the Source Directories
- while (1) {
- SrcFileName = SrcPtr;
- SrcPtr = AsciiStrStr (SrcPtr,"\\");
- if (SrcPtr != NULL) {
- SrcPtr++;
- } else {
- break;
- }
- }
-
- if (*SrcFileName == '\0') {
- AsciiPrint("Source file incorrect (Error 2).\n");
- }
-
- // Construct the destination filepath
- DestFileNameLen = FileNameLen + AsciiStrLen (SrcFileName) + 1;
- DestFileName = (CHAR8*)AllocatePool (DestFileNameLen);
- AsciiStrCpyS (DestFileName, DestFileNameLen, Argv[2]);
- AsciiStrCatS (DestFileName, DestFileNameLen, SrcFileName);
- }
-
- Source = EfiOpen(Argv[1], EFI_FILE_MODE_READ, 0);
- if (Source == NULL) {
- AsciiPrint("Source file open error.\n");
- return EFI_NOT_FOUND;
- }
-
- Destination = EfiOpen(DestFileName, EFI_FILE_MODE_READ | EFI_FILE_MODE_WRITE | EFI_FILE_MODE_CREATE, 0);
- if (Destination == NULL) {
- AsciiPrint("Destination file open error.\n");
- return EFI_NOT_FOUND;
- }
-
- Buffer = AllocatePool(FILE_COPY_CHUNK);
- if (Buffer == NULL) {
- goto Exit;
- }
-
- Size = EfiTell(Source, NULL);
-
- for (Offset = 0; Offset + FILE_COPY_CHUNK <= Size; Offset += Chunk) {
- Chunk = FILE_COPY_CHUNK;
-
- Status = EfiRead(Source, Buffer, &Chunk);
- if (EFI_ERROR(Status)) {
- AsciiPrint("Read file error %r\n", Status);
- goto Exit;
- }
-
- Status = EfiWrite(Destination, Buffer, &Chunk);
- if (EFI_ERROR(Status)) {
- AsciiPrint("Write file error %r\n", Status);
- goto Exit;
- }
- }
-
- // Any left over?
- if (Offset < Size) {
- Chunk = Size - Offset;
-
- Status = EfiRead(Source, Buffer, &Chunk);
- if (EFI_ERROR(Status)) {
- AsciiPrint("Read file error %r\n", Status);
- goto Exit;
- }
-
- Status = EfiWrite(Destination, Buffer, &Chunk);
- if (EFI_ERROR(Status)) {
- AsciiPrint("Write file error %r\n", Status);
- goto Exit;
- }
- }
-
-
-Exit:
- if (Source != NULL) {
- Status = EfiClose(Source);
- if (EFI_ERROR(Status)) {
- AsciiPrint("Source close error %r\n", Status);
- }
- }
- if (Destination != NULL) {
- Status = EfiClose(Destination);
- if (EFI_ERROR(Status)) {
- AsciiPrint("Destination close error %r\n", Status);
- }
-
- // Case when we have concated the filename to the destination directory
- if (DestFileName != Argv[2]) {
- FreePool (DestFileName);
- }
- }
-
- if (Buffer != NULL) {
- FreePool(Buffer);
- }
-
- return Status;
-}
-
-EFI_STATUS
-EFIAPI
-EblFileDiffCmd (
- IN UINTN Argc,
- IN CHAR8 **Argv
- )
-{
- EFI_OPEN_FILE *File1 = NULL;
- EFI_OPEN_FILE *File2 = NULL;
- EFI_STATUS Status = EFI_SUCCESS;
- VOID *Buffer1 = NULL;
- VOID *Buffer2 = NULL;
- UINTN Size1;
- UINTN Size2;
- UINTN Offset;
- UINTN Chunk = FILE_COPY_CHUNK;
-
- if (Argc != 3) {
- return EFI_INVALID_PARAMETER;
- }
-
- File1 = EfiOpen(Argv[1], EFI_FILE_MODE_READ, 0);
- if (File1 == NULL) {
- AsciiPrint("File 1 open error.\n");
- return EFI_NOT_FOUND;
- }
-
- File2 = EfiOpen(Argv[2], EFI_FILE_MODE_READ, 0);
- if (File2 == NULL) {
- AsciiPrint("File 2 open error.\n");
- return EFI_NOT_FOUND;
- }
-
- Size1 = EfiTell(File1, NULL);
- Size2 = EfiTell(File2, NULL);
-
- if (Size1 != Size2) {
- AsciiPrint("Files differ.\n");
- goto Exit;
- }
-
- Buffer1 = AllocatePool(FILE_COPY_CHUNK);
- if (Buffer1 == NULL) {
- goto Exit;
- }
-
- Buffer2 = AllocatePool(FILE_COPY_CHUNK);
- if (Buffer2 == NULL) {
- goto Exit;
- }
-
- for (Offset = 0; Offset + FILE_COPY_CHUNK <= Size1; Offset += Chunk) {
- Chunk = FILE_COPY_CHUNK;
-
- Status = EfiRead(File1, Buffer1, &Chunk);
- if (EFI_ERROR(Status)) {
- AsciiPrint("File 1 read error\n");
- goto Exit;
- }
-
- Status = EfiRead(File2, Buffer2, &Chunk);
- if (EFI_ERROR(Status)) {
- AsciiPrint("File 2 read error\n");
- goto Exit;
- }
-
- if (CompareMem(Buffer1, Buffer2, Chunk) != 0) {
- AsciiPrint("Files differ.\n");
- goto Exit;
- };
- }
-
- // Any left over?
- if (Offset < Size1) {
- Chunk = Size1 - Offset;
-
- Status = EfiRead(File1, Buffer1, &Chunk);
- if (EFI_ERROR(Status)) {
- AsciiPrint("File 1 read error\n");
- goto Exit;
- }
-
- Status = EfiRead(File2, Buffer2, &Chunk);
- if (EFI_ERROR(Status)) {
- AsciiPrint("File 2 read error\n");
- goto Exit;
- }
- }
-
- if (CompareMem(Buffer1, Buffer2, Chunk) != 0) {
- AsciiPrint("Files differ.\n");
- } else {
- AsciiPrint("Files are identical.\n");
- }
-
-Exit:
- if (File1 != NULL) {
- Status = EfiClose(File1);
- if (EFI_ERROR(Status)) {
- AsciiPrint("File 1 close error %r\n", Status);
- }
- }
-
- if (File2 != NULL) {
- Status = EfiClose(File2);
- if (EFI_ERROR(Status)) {
- AsciiPrint("File 2 close error %r\n", Status);
- }
- }
-
- if (Buffer1 != NULL) {
- FreePool(Buffer1);
- }
-
- if (Buffer2 != NULL) {
- FreePool(Buffer2);
- }
-
- return Status;
-}
-
-GLOBAL_REMOVE_IF_UNREFERENCED const EBL_COMMAND_TABLE mCmdDeviceTemplate[] =
-{
- {
- "connect",
- "[d]; Connect all EFI devices. d means disconnect",
- NULL,
- EblConnectCmd
- },
- {
- "device",
- "; Show information about boot devices",
- NULL,
- EblDeviceCmd
- },
- {
- "go",
- " dev:path loadaddress entrypoint args; load to given address and jump in",
- NULL,
- EblGoCmd
- },
- {
- "loadfv",
- " devname; Load PI FV from device",
- NULL,
- EblLoadFvCmd
- },
- {
- "start",
- " path; EFI Boot Device:filepath. fs1:\\EFI\\BOOT.EFI",
- NULL,
- EblStartCmd
- },
- {
- "memmap",
- "; dump EFI memory map",
- NULL,
- EblMemMapCmd
- },
- {
- "cp",
- " file1 file2; copy file only.",
- NULL,
- EblFileCopyCmd
- },
- {
- "diff",
- " file1 file2; compare files",
- NULL,
- EblFileDiffCmd
- }
-};
-
-
-/**
- Initialize the commands in this in this file
-**/
-
-VOID
-EblInitializeDeviceCmd (
- VOID
- )
-{
- EfiGetSystemConfigurationTable (&gEfiDxeServicesTableGuid, (VOID **) &gDS);
- EblAddCommands (mCmdDeviceTemplate, sizeof (mCmdDeviceTemplate)/sizeof (EBL_COMMAND_TABLE));
-}
-
diff --git a/EmbeddedPkg/Ebl/Hob.c b/EmbeddedPkg/Ebl/Hob.c
deleted file mode 100644
index edc0a744f47f..000000000000
--- a/EmbeddedPkg/Ebl/Hob.c
+++ /dev/null
@@ -1,234 +0,0 @@
-/** @file
- Hob command for EBL (Embedded Boot Loader)
-
- Copyright (c) 2007, Intel Corporation. All rights reserved.<BR>
- Portions copyright (c) 2008 - 2009, Apple Inc. All rights reserved.<BR>
- (C) Copyright 2015 Hewlett Packard Enterprise Development LP<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
- http://opensource.org/licenses/bsd-license.php
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
- Module Name: Hob.c
-
- Search/Replace Dir with the name of your new command
-
- Boot Mode:
- ==========
- BOOT_WITH_FULL_CONFIGURATION 0x00
- BOOT_WITH_MINIMAL_CONFIGURATION 0x01
- BOOT_ASSUMING_NO_CONFIGURATION_CHANGES 0x02
- BOOT_WITH_FULL_CONFIGURATION_PLUS_DIAGNOSTICS 0x03
- BOOT_WITH_DEFAULT_SETTINGS 0x04
- BOOT_ON_S4_RESUME 0x05
- BOOT_ON_S5_RESUME 0x06
- BOOT_ON_S2_RESUME 0x10
- BOOT_ON_S3_RESUME 0x11
- BOOT_ON_FLASH_UPDATE 0x12
- BOOT_IN_RECOVERY_MODE 0x20
- BOOT_IN_RECOVERY_MODE_MASK 0x40
- BOOT_SPECIAL_MASK 0x80
-
- Mem Alloc HOB Type:
- ===================
- typedef enum {
- EfiReservedMemoryType = 0x00
- EfiLoaderCode = 0x01
- EfiLoaderData = 0x02
- EfiBootServicesCode = 0x03
- EfiBootServicesData = 0x04
- EfiRuntimeServicesCode = 0x05
- EfiRuntimeServicesData = 0x06
- EfiConventionalMemory = 0x07
- EfiUnusableMemory = 0x08
- EfiACPIReclaimMemory = 0x09
- EfiACPIMemoryNVS = 0x0a
- EfiMemoryMappedIO = 0x0b
- EfiMemoryMappedIOPortSpace = 0x0c
- EfiPalCode = 0x0d
- EfiMaxMemoryType = 0x0e
- } EFI_MEMORY_TYPE;
-
- Resource Hob Tye:
- =================
- EFI_RESOURCE_SYSTEM_MEMORY 0
- EFI_RESOURCE_MEMORY_MAPPED_IO 1
- EFI_RESOURCE_IO 2
- EFI_RESOURCE_FIRMWARE_DEVICE 3
- EFI_RESOURCE_MEMORY_MAPPED_IO_PORT 4
- EFI_RESOURCE_MEMORY_RESERVED 5
- EFI_RESOURCE_IO_RESERVED 6
- EFI_RESOURCE_MAX_MEMORY_TYPE 7
-
- Resource Hob Attribute (last thing printed):
- ============================================
- EFI_RESOURCE_ATTRIBUTE_PRESENT 0x00000001
- EFI_RESOURCE_ATTRIBUTE_INITIALIZED 0x00000002
- EFI_RESOURCE_ATTRIBUTE_TESTED 0x00000004
- EFI_RESOURCE_ATTRIBUTE_SINGLE_BIT_ECC 0x00000008
- EFI_RESOURCE_ATTRIBUTE_MULTIPLE_BIT_ECC 0x00000010
- EFI_RESOURCE_ATTRIBUTE_ECC_RESERVED_1 0x00000020
- EFI_RESOURCE_ATTRIBUTE_ECC_RESERVED_2 0x00000040
- EFI_RESOURCE_ATTRIBUTE_READ_PROTECTED 0x00000080
- EFI_RESOURCE_ATTRIBUTE_WRITE_PROTECTED 0x00000100
- EFI_RESOURCE_ATTRIBUTE_EXECUTION_PROTECTED 0x00000200
- EFI_RESOURCE_ATTRIBUTE_UNCACHEABLE 0x00000400
- EFI_RESOURCE_ATTRIBUTE_WRITE_COMBINEABLE 0x00000800
- EFI_RESOURCE_ATTRIBUTE_WRITE_THROUGH_CACHEABLE 0x00001000
- EFI_RESOURCE_ATTRIBUTE_WRITE_BACK_CACHEABLE 0x00002000
- EFI_RESOURCE_ATTRIBUTE_16_BIT_IO 0x00004000
- EFI_RESOURCE_ATTRIBUTE_32_BIT_IO 0x00008000
- EFI_RESOURCE_ATTRIBUTE_64_BIT_IO 0x00010000
- EFI_RESOURCE_ATTRIBUTE_UNCACHED_EXPORTED 0x00020000
-
-**/
-
-#include "Ebl.h"
-// BugBug: Autogen does not allow this to be included currently
-//#include <EdkModulePkg/Include/EdkDxe.h>
-
-GLOBAL_REMOVE_IF_UNREFERENCED char *mHobResourceType[] = {
- "Memory ",
- "MMIO ",
- "IO ",
- "Firmware ",
- "MMIO Port ",
- "Reserved ",
- "IO Reserved",
- "Illegal "
-};
-
-
-/**
- Dump out the HOBs in the system. HOBs are defined in the PI specification
- and they are used to hand off information from PEI to DXE.
-
- Argv[0] - "hob"
-
- @param Argc Number of command arguments in Argv
- @param Argv Array of strings that represent the parsed command line.
- Argv[0] is the command name
-
- @return EFI_SUCCESS
-
-**/
-EFI_STATUS
-EFIAPI
-EblHobCmd (
- IN UINTN Argc,
- IN CHAR8 **Argv
- )
-{
- UINTN CurrentRow;
- EFI_PEI_HOB_POINTERS Hob;
- EFI_MEMORY_TYPE_INFORMATION *EfiMemoryTypeInformation;
- UINTN Index;
-
- CurrentRow = 0;
- for (Hob.Raw = GetHobList (); !END_OF_HOB_LIST(Hob); Hob.Raw = GET_NEXT_HOB(Hob)) {
- if (Hob.Header->HobType == EFI_HOB_TYPE_HANDOFF) {
- AsciiPrint ("PHIT HOB Ver %x Boot Mode %02x Top %lx Bottom %lx\n",
- Hob.HandoffInformationTable->Version,
- Hob.HandoffInformationTable->BootMode,
- Hob.HandoffInformationTable->EfiMemoryTop,
- Hob.HandoffInformationTable->EfiMemoryBottom
- );
-
- if (EblAnyKeyToContinueQtoQuit (&CurrentRow, FALSE)) {
- return EFI_SUCCESS;
- }
-
- AsciiPrint (" Free Top %lx Free Bottom %lx End Of HOB %lx\n",
- Hob.HandoffInformationTable->EfiFreeMemoryTop,
- Hob.HandoffInformationTable->EfiFreeMemoryBottom,
- Hob.HandoffInformationTable->EfiEndOfHobList
- );
-
- } else if (Hob.Header->HobType == EFI_HOB_TYPE_MEMORY_ALLOCATION) {
- // mod(%) on array index is just to prevent buffer overrun
- AsciiPrint ("Mem Alloc HOB %a %g %08lx:%lx\n",
- (Hob.MemoryAllocation->AllocDescriptor.MemoryType < EfiMaxMemoryType) ? gMemMapType[Hob.MemoryAllocation->AllocDescriptor.MemoryType] : "ILLEGAL TYPE",
- &Hob.MemoryAllocation->AllocDescriptor.Name,
- Hob.MemoryAllocation->AllocDescriptor.MemoryBaseAddress,
- Hob.MemoryAllocation->AllocDescriptor.MemoryLength
- );
- if (CompareGuid (&gEfiHobMemoryAllocModuleGuid, &Hob.MemoryAllocation->AllocDescriptor.Name)) {
- if (EblAnyKeyToContinueQtoQuit (&CurrentRow, FALSE)) {
- return EFI_SUCCESS;
- }
- AsciiPrint (" Module Name %g EntryPoint %lx\n", &Hob.MemoryAllocationModule->ModuleName, Hob.MemoryAllocationModule->EntryPoint);
- }
- } else if (Hob.Header->HobType == EFI_HOB_TYPE_RESOURCE_DESCRIPTOR) {
- AsciiPrint ("Resource HOB %a %g %08lx:%lx\n Attributes: %08x\n",
- (Hob.ResourceDescriptor->ResourceType < EFI_RESOURCE_MAX_MEMORY_TYPE) ? mHobResourceType[Hob.ResourceDescriptor->ResourceType] : mHobResourceType[EFI_RESOURCE_MAX_MEMORY_TYPE],
- &Hob.ResourceDescriptor->Owner,
- Hob.ResourceDescriptor->PhysicalStart,
- Hob.ResourceDescriptor->ResourceLength,
- Hob.ResourceDescriptor->ResourceAttribute
- );
- if (EblAnyKeyToContinueQtoQuit (&CurrentRow, FALSE)) {
- return EFI_SUCCESS;
- }
- } else if (Hob.Header->HobType == EFI_HOB_TYPE_GUID_EXTENSION) {
- AsciiPrint ("GUID HOB %g\n", &Hob.Guid->Name);
- if (CompareGuid (&gEfiMemoryTypeInformationGuid, &Hob.Guid->Name)) {
- EfiMemoryTypeInformation = GET_GUID_HOB_DATA (Hob.Guid);
- for (Index = 0; Index < (GET_GUID_HOB_DATA_SIZE (Hob.Guid)/sizeof (EFI_MEMORY_TYPE_INFORMATION)); Index++, EfiMemoryTypeInformation++) {
- if (EblAnyKeyToContinueQtoQuit (&CurrentRow, FALSE)) {
- return EFI_SUCCESS;
- }
- AsciiPrint (" %a 0x%08x\n",
- (EfiMemoryTypeInformation->Type < EfiMaxMemoryType) ? gMemMapType[EfiMemoryTypeInformation->Type] : "END ",
- EfiMemoryTypeInformation->NumberOfPages
- );
- }
- }
- } else if (Hob.Header->HobType == EFI_HOB_TYPE_FV) {
- AsciiPrint ("FV HOB %08lx:%08lx\n", Hob.FirmwareVolume->BaseAddress, Hob.FirmwareVolume->Length);
- } else if (Hob.Header->HobType == EFI_HOB_TYPE_CPU) {
- AsciiPrint ("CPU HOB: Mem %x IO %x\n", Hob.Cpu->SizeOfMemorySpace, Hob.Cpu->SizeOfIoSpace);
- } else if (Hob.Header->HobType == EFI_HOB_TYPE_MEMORY_POOL) {
- AsciiPrint ("Mem Pool HOB:\n");
-/* Not in PI
- } else if (Hob.Header->HobType == EFI_HOB_TYPE_CV) {
- AsciiPrint ("CV HOB: %08lx:%08lx\n", Hob.CapsuleVolume->BaseAddress, Hob.CapsuleVolume->Length);
- */
- }
-
- if (EblAnyKeyToContinueQtoQuit (&CurrentRow, FALSE)) {
- break;
- }
- }
-
- return EFI_SUCCESS;
-}
-
-
-GLOBAL_REMOVE_IF_UNREFERENCED const EBL_COMMAND_TABLE mCmdHobTemplate[] =
-{
- {
- "hob",
- "; dump HOBs",
- NULL,
- EblHobCmd
- }
-};
-
-
-/**
- Initialize the commands in this in this file
-**/
-VOID
-EblInitializeHobCmd (
- VOID
- )
-{
- if (FeaturePcdGet (PcdEmbeddedHobCmd)) {
- EblAddCommands (mCmdHobTemplate, sizeof (mCmdHobTemplate)/sizeof (EBL_COMMAND_TABLE));
- }
-}
-
diff --git a/EmbeddedPkg/Ebl/HwDebug.c b/EmbeddedPkg/Ebl/HwDebug.c
deleted file mode 100644
index a62ccdc9c521..000000000000
--- a/EmbeddedPkg/Ebl/HwDebug.c
+++ /dev/null
@@ -1,346 +0,0 @@
-/** @file
- Basic command line parser for EBL (Embedded Boot Loader)
-
- Copyright (c) 2007, Intel Corporation. All rights reserved.<BR>
- Portions copyright (c) 2008 - 2009, Apple Inc. All rights reserved.<BR>
- (C) Copyright 2015 Hewlett Packard Enterprise Development LP<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
- http://opensource.org/licenses/bsd-license.php
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
- Module Name: HwDebug.c
-
- Commands useful for debugging hardware.
-
-**/
-
-#include "Ebl.h"
-
-
-/**
- Dump memory
-
- Argv[0] - "md"[.#] # is optional width 1, 2, 4, or 8. Default 1
- Argv[1] - Hex Address to dump
- Argv[2] - Number of hex bytes to dump (0x20 is default)
-
- md.4 0x123445678 50 ; Dump 0x50 4 byte quantities starting at 0x123445678
- md 0x123445678 40 ; Dump 0x40 1 byte quantities starting at 0x123445678
- md 0x123445678 ; Dump 0x20 1 byte quantities starting at 0x123445678
-
- @param Argc Number of command arguments in Argv
- @param Argv Array of strings that represent the parsed command line.
- Argv[0] is the command name
-
- @return EFI_SUCCESS
-
-**/
-EFI_STATUS
-EFIAPI
-EblMdCmd (
- IN UINTN Argc,
- IN CHAR8 **Argv
- )
-{
- STATIC UINT8 *Address = NULL;
- STATIC UINTN Length = 0x20;
- STATIC UINTN Width;
-
- Width = WidthFromCommandName (Argv[0], 1);
-
- switch (Argc) {
- case 3:
- Length = AsciiStrHexToUintn(Argv[2]);
- case 2:
- Address = (UINT8 *)AsciiStrHexToUintn (Argv[1]);
- default:
- break;
- }
-
- OutputData (Address, Length, Width, (UINTN)Address);
-
- Address += Length;
-
- return EFI_SUCCESS;
-}
-
-
-/**
- Fill Memory with data
-
- Argv[0] - "mfill"[.#] # is optional width 1, 2, 4, or 8. Default 4
- Argv[1] - Hex Address to fill
- Argv[2] - Data to write (0x00 is default)
- Argv[3] - Number of units to dump.
-
- mf.1 0x123445678 aa 100 ; Start at 0x123445678 and write aa (1 byte) to the next 100 bytes
- mf.4 0x123445678 aa 100 ; Start at 0x123445678 and write aa (4 byte) to the next 400 bytes
- mf 0x123445678 aa ; Start at 0x123445678 and write aa (4 byte) to the next 1 byte
- mf 0x123445678 ; Start at 0x123445678 and write 00 (4 byte) to the next 1 byte
-
- @param Argc Number of command arguments in Argv
- @param Argv Array of strings that represent the parsed command line.
- Argv[0] is the command name
-
- @return EFI_SUCCESS
-
-**/
-EFI_STATUS
-EFIAPI
-EblMfillCmd (
- IN UINTN Argc,
- IN CHAR8 **Argv
- )
-{
- UINTN Address;
- UINTN EndAddress;
- UINT32 Data;
- UINTN Length;
- UINTN Width;
-
- if (Argc < 2) {
- return EFI_INVALID_PARAMETER;
- }
-
- Width = WidthFromCommandName (Argv[0], 4);
-
- Address = AsciiStrHexToUintn (Argv[1]);
- Data = (Argc > 2) ? (UINT32)AsciiStrHexToUintn (Argv[2]) : 0;
- Length = (Argc > 3) ? AsciiStrHexToUintn (Argv[3]) : 1;
-
- for (EndAddress = Address + (Length * Width); Address < EndAddress; Address += Width) {
- if (Width == 4) {
- MmioWrite32 (Address, Data);
- } else if (Width == 2) {
- MmioWrite16 (Address, (UINT16)Data);
- } else {
- MmioWrite8 (Address, (UINT8)Data);
- }
- }
-
- return EFI_SUCCESS;
-}
-
-
-//
-// Strings for PCI Class code [2]
-//
-CHAR8 *gPciDevClass[] = {
- "Old Device ",
- "Mass storage ",
- "Network ",
- "Display ",
- "Multimedia ",
- "Memory controller ",
- "Bridge device ",
- "simple communications ",
- "base system peripherals",
- "Input devices ",
- "Docking stations ",
- "Processors ",
- "serial bus ",
-};
-
-
-CHAR8 *gPciSerialClassCodes[] = {
- "Mass storage ",
- "Firewire ",
- "ACCESS bus ",
- "SSA ",
- "USB "
-};
-
-
-/**
- PCI Dump
-
- Argv[0] - "pci"
- Argv[1] - bus
- Argv[2] - dev
- Argv[3] - func
-
- @param Argc Number of command arguments in Argv
- @param Argv Array of strings that represent the parsed command line.
- Argv[0] is the command name
-
- @return EFI_SUCCESS
-
-**/
-EFI_STATUS
-EFIAPI
-EblPciCmd (
- IN UINTN Argc,
- IN CHAR8 **Argv
- )
-{
- EFI_STATUS Status;
- EFI_PCI_IO_PROTOCOL *Pci;
- UINTN HandleCount;
- EFI_HANDLE *HandleBuffer;
- UINTN Seg;
- UINTN Bus;
- UINTN Dev;
- UINTN Func;
- UINTN BusArg;
- UINTN DevArg;
- UINTN FuncArg;
- UINTN Index;
- UINTN Count;
- PCI_TYPE_GENERIC PciHeader;
- PCI_TYPE_GENERIC *Header;
- PCI_BRIDGE_CONTROL_REGISTER *Bridge;
- PCI_DEVICE_HEADER_TYPE_REGION *Device;
- PCI_DEVICE_INDEPENDENT_REGION *Hdr;
- CHAR8 *Str;
- UINTN ThisBus;
-
-
- BusArg = (Argc > 1) ? AsciiStrDecimalToUintn (Argv[1]) : 0;
- DevArg = (Argc > 2) ? AsciiStrDecimalToUintn (Argv[2]) : 0;
- FuncArg = (Argc > 3) ? AsciiStrDecimalToUintn (Argv[3]) : 0;
-
- Header = &PciHeader;
-
- Status = gBS->LocateHandleBuffer (ByProtocol, &gEfiPciIoProtocolGuid, NULL, &HandleCount, &HandleBuffer);
- if (EFI_ERROR (Status)) {
- AsciiPrint ("No PCI devices found in the system\n");
- return EFI_SUCCESS;
- }
-
- if (Argc == 1) {
- // Dump all PCI devices
- AsciiPrint ("BusDevFun VendorId DeviceId Device Class Sub-Class\n");
- AsciiPrint ("_____________________________________________________________");
- for (ThisBus = 0; ThisBus <= PCI_MAX_BUS; ThisBus++) {
- for (Index = 0; Index < HandleCount; Index++) {
- Status = gBS->HandleProtocol (HandleBuffer[Index], &gEfiPciIoProtocolGuid, (VOID **)&Pci);
- if (!EFI_ERROR (Status)) {
- Pci->GetLocation (Pci, &Seg, &Bus, &Dev, &Func);
- if (ThisBus != Bus) {
- continue;
- }
- AsciiPrint ("\n%03d.%02d.%02d", Bus, Dev, Func);
- Status = Pci->Pci.Read (Pci, EfiPciIoWidthUint32, 0, sizeof (PciHeader)/sizeof (UINT32), &PciHeader);
- if (!EFI_ERROR (Status)) {
- Hdr = &PciHeader.Bridge.Hdr;
-
- if (Hdr->ClassCode[2] < sizeof (gPciDevClass)/sizeof (VOID *)) {
- Str = gPciDevClass[Hdr->ClassCode[2]];
- if (Hdr->ClassCode[2] == PCI_CLASS_SERIAL) {
- if (Hdr->ClassCode[1] < sizeof (gPciSerialClassCodes)/sizeof (VOID *)) {
- // print out Firewire or USB inplace of Serial Bus controllers
- Str = gPciSerialClassCodes[Hdr->ClassCode[1]];
- }
- }
- } else {
- Str = "Unknown device ";
- }
- AsciiPrint (" 0x%04x 0x%04x %a 0x%02x", Hdr->VendorId, Hdr->DeviceId, Str, Hdr->ClassCode[1]);
- }
- if (Seg != 0) {
- // Only print Segment if it is non zero. If you only have one PCI segment it is
- // redundent to print it out
- AsciiPrint (" Seg:%d", Seg);
- }
- }
- }
- }
- AsciiPrint ("\n");
- } else {
- // Dump specific PCI device
- for (Index = 0; Index < HandleCount; Index++) {
- Status = gBS->HandleProtocol (HandleBuffer[Index], &gEfiPciIoProtocolGuid, (VOID **)&Pci);
- if (!EFI_ERROR (Status)) {
- Pci->GetLocation (Pci, &Seg, &Bus, &Dev, &Func);
- if ((Bus == BusArg) && (Dev == DevArg) && (Func == FuncArg)) {
- // Only print Segment if it is non zero. If you only have one PCI segment it is
- // redundant to print it out
- if (Seg != 0) {
- AsciiPrint ("Seg:%d ", Seg);
- }
- AsciiPrint ("Bus:%d Dev:%d Func:%d ", Bus, Dev, Func);
-
- Status = Pci->Pci.Read (Pci, EfiPciIoWidthUint32, 0, sizeof (PciHeader)/sizeof (UINT32), Header);
- if (!EFI_ERROR (Status)) {
- Hdr = &PciHeader.Bridge.Hdr;
- if (IS_PCI_BRIDGE (&PciHeader.Bridge)) {
- Bridge = &PciHeader.Bridge.Bridge;
- AsciiPrint (
- "PCI Bridge. Bus Primary %d Secondary %d Subordinate %d\n",
- Bridge->PrimaryBus, Bridge->SecondaryBus, Bridge->SubordinateBus
- );
- AsciiPrint (" Bar 0: 0x%08x Bar 1: 0x%08x\n", Bridge->Bar[0], Bridge->Bar[1]);
- } else {
- Device = &PciHeader.Device.Device;
- AsciiPrint (
- "VendorId: 0x%04x DeviceId: 0x%04x SubSusVendorId: 0x%04x SubSysDeviceId: 0x%04x\n",
- Hdr->VendorId, Hdr->DeviceId, Device->SubsystemVendorID, Device->SubsystemID
- );
- AsciiPrint (" Class Code: 0x%02x 0x%02x 0x%02x\n", Hdr->ClassCode[2], Hdr->ClassCode[1], Hdr->ClassCode[0]);
- for (Count = 0; Count < 6; Count++) {
- AsciiPrint (" Bar %d: 0x%08x\n", Count, Device->Bar[Count]);
- }
- }
- }
-
- AsciiPrint ("\n");
- break;
- }
- }
- }
- }
-
- FreePool (HandleBuffer);
- return EFI_SUCCESS;
-}
-
-
-GLOBAL_REMOVE_IF_UNREFERENCED const EBL_COMMAND_TABLE mCmdPciDebugTemplate[] = {
- {
- "pci",
- " [bus] [dev] [func]; Dump PCI",
- NULL,
- EblPciCmd
- }
-};
-
-
-GLOBAL_REMOVE_IF_UNREFERENCED const EBL_COMMAND_TABLE mCmdHwDebugTemplate[] =
-{
- {
- "md",
- "[.{1|2|4}] [Addr] [Len] [1|2|4]; Memory Dump from Addr Len bytes",
- NULL,
- EblMdCmd
- },
- {
- "mfill",
- "[.{1|2|4}] Addr Len [data]; Memory Fill Addr Len*(1|2|4) bytes of data(0)",
- NULL,
- EblMfillCmd
- },
-};
-
-
-
-/**
- Initialize the commands in this in this file
-**/
-VOID
-EblInitializemdHwDebugCmds (
- VOID
- )
-{
- if (FeaturePcdGet (PcdEmbeddedHwDebugCmd)) {
- EblAddCommands (mCmdHwDebugTemplate, sizeof (mCmdHwDebugTemplate)/sizeof (EBL_COMMAND_TABLE));
- }
- if (FeaturePcdGet (PcdEmbeddedPciDebugCmd)) {
- EblAddCommands (mCmdPciDebugTemplate, sizeof (mCmdPciDebugTemplate)/sizeof (EBL_COMMAND_TABLE));
- }
-}
-
diff --git a/EmbeddedPkg/Ebl/HwIoDebug.c b/EmbeddedPkg/Ebl/HwIoDebug.c
deleted file mode 100644
index 6c99e7af0e60..000000000000
--- a/EmbeddedPkg/Ebl/HwIoDebug.c
+++ /dev/null
@@ -1,154 +0,0 @@
-/** @file
- Hardware IO based debug commands
-
- Copyright (c) 2007, Intel Corporation. All rights reserved.<BR>
- Portions copyright (c) 2008 - 2009, Apple Inc. All rights reserved.<BR>
- (C) Copyright 2015 Hewlett Packard Enterprise Development LP<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
- http://opensource.org/licenses/bsd-license.php
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
- Commands useful for debugging hardware. IO commands separated out as not all
- processor architectures support the IO command.
-
-**/
-
-#include "Ebl.h"
-
-
-
-/**
- Read from IO space
-
- Argv[0] - "ioread"[.#] # is optional width 1, 2, or 4. Default 1
- Argv[1] - Hex IO address
-
- ior.4 0x3f8 ;Do a 32-bit IO Read from 0x3f8
- ior 0x3f8 ;Do a 8-bit IO Read from 0x3f8
-
- @param Argc Number of command arguments in Argv
- @param Argv Array of strings that represent the parsed command line.
- Argv[0] is the command name
-
- @return EFI_SUCCESS
-
-**/
-EFI_STATUS
-EFIAPI
-EblIoReadCmd (
- IN UINTN Argc,
- IN CHAR8 **Argv
- )
-{
- UINTN Width;
- UINTN Port;
- UINTN Data;
-
- if (Argc < 2) {
- return EFI_INVALID_PARAMETER;
- }
-
- Port = AsciiStrHexToUintn (Argv[1]);
- Width = WidthFromCommandName (Argv[0], 1);
-
- if (Width == 1) {
- Data = IoRead8 (Port);
- } else if (Width == 2) {
- Data = IoRead16 (Port);
- } else if (Width == 4) {
- Data = IoRead32 (Port);
- } else {
- return EFI_INVALID_PARAMETER;
- }
-
- AsciiPrint ("0x%04x = 0x%x", Port, Data);
-
- return EFI_SUCCESS;
-}
-
-
-/**
- Write to IO space
-
- Argv[0] - "iowrite"[.#] # is optional width 1, 2, or 4. Default 1
- Argv[1] - Hex IO address
- Argv[2] - Hex data to write
-
- iow.4 0x3f8 af ;Do a 32-bit IO write of af to 0x3f8
- iow 0x3f8 af ;Do an 8-bit IO write of af to 0x3f8
-
- @param Argc Number of command arguments in Argv
- @param Argv Array of strings that represent the parsed command line.
- Argv[0] is the command name
-
- @return EFI_SUCCESS
-
-**/
-EFI_STATUS
-EFIAPI
-EblIoWriteCmd (
- IN UINTN Argc,
- IN CHAR8 **Argv
- )
-{
- UINTN Width;
- UINTN Port;
- UINTN Data;
-
- if (Argc < 3) {
- return EFI_INVALID_PARAMETER;
- }
-
- Port = AsciiStrHexToUintn (Argv[1]);
- Data = AsciiStrHexToUintn (Argv[2]);
- Width = WidthFromCommandName (Argv[0], 1);
-
- if (Width == 1) {
- IoWrite8 (Port, (UINT8)Data);
- } else if (Width == 2) {
- IoWrite16 (Port, (UINT16)Data);
- } else if (Width == 4) {
- IoWrite32 (Port, (UINT32)Data);
- } else {
- return EFI_INVALID_PARAMETER;
- }
- return EFI_SUCCESS;
-}
-
-
-GLOBAL_REMOVE_IF_UNREFERENCED const EBL_COMMAND_TABLE mCmdHwIoDebugTemplate[] =
-{
- {
- "ioread",
- "[.{1|2|4}] Port ; IO read of width byte(s) from Port",
- NULL,
- EblIoReadCmd
- },
- {
- "iowrite",
- "[.{1|2|4}] Port Data ; IO write Data of width byte(s) to Port",
- NULL,
- EblIoWriteCmd
- }
-};
-
-
-
-/**
- Initialize the commands in this in this file
-**/
-VOID
-EblInitializemdHwIoDebugCmds (
- VOID
- )
-{
- if (FeaturePcdGet (PcdEmbeddedIoEnable)) {
- EblAddCommands (mCmdHwIoDebugTemplate, sizeof (mCmdHwIoDebugTemplate)/sizeof (EBL_COMMAND_TABLE));
- }
-}
-
diff --git a/EmbeddedPkg/Ebl/Main.c b/EmbeddedPkg/Ebl/Main.c
deleted file mode 100644
index 62f559fccfe8..000000000000
--- a/EmbeddedPkg/Ebl/Main.c
+++ /dev/null
@@ -1,677 +0,0 @@
-/** @file
- Basic command line parser for EBL (Embedded Boot Loader)
-
- Copyright (c) 2007, Intel Corporation. All rights reserved.<BR>
- Portions copyright (c) 2008 - 2009, Apple Inc. All rights reserved.<BR>
- (C) Copyright 2015 Hewlett Packard Enterprise Development LP<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
- http://opensource.org/licenses/bsd-license.php
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
-
-**/
-
-#include "Ebl.h"
-
-// Globals for command history processing
-INTN mCmdHistoryEnd = -1;
-INTN mCmdHistoryStart = -1;
-INTN mCmdHistoryCurrent = -1;
-CHAR8 mCmdHistory[MAX_CMD_HISTORY][MAX_CMD_LINE];
-CHAR8 *mCmdBlank = "";
-
-// Globals to remember current screen geometry
-UINTN gScreenColumns;
-UINTN gScreenRows;
-
-// Global to turn on/off breaking commands with prompts before they scroll the screen
-BOOLEAN gPageBreak = TRUE;
-
-VOID
-RingBufferIncrement (
- IN INTN *Value
- )
-{
- *Value = *Value + 1;
-
- if (*Value >= MAX_CMD_HISTORY) {
- *Value = 0;
- }
-}
-
-VOID
-RingBufferDecrement (
- IN INTN *Value
- )
-{
- *Value = *Value - 1;
-
- if (*Value < 0) {
- *Value = MAX_CMD_HISTORY - 1;
- }
-}
-
-/**
- Save this command in the circular history buffer. Older commands are
- overwritten with newer commands.
-
- @param Cmd Command line to archive the history of.
-
- @return None
-
-**/
-VOID
-SetCmdHistory (
- IN CHAR8 *Cmd
- )
-{
- // Don't bother adding empty commands to the list
- if (AsciiStrLen(Cmd) != 0) {
-
- // First entry
- if (mCmdHistoryStart == -1) {
- mCmdHistoryStart = 0;
- mCmdHistoryEnd = 0;
- } else {
- // Record the new command at the next index
- RingBufferIncrement(&mCmdHistoryStart);
-
- // If the next index runs into the end index, shuffle end back by one
- if (mCmdHistoryStart == mCmdHistoryEnd) {
- RingBufferIncrement(&mCmdHistoryEnd);
- }
- }
-
- // Copy the new command line into the ring buffer
- AsciiStrnCpyS (&mCmdHistory[mCmdHistoryStart][0], MAX_CMD_LINE, Cmd, MAX_CMD_LINE);
- }
-
- // Reset the command history for the next up arrow press
- mCmdHistoryCurrent = mCmdHistoryStart;
-}
-
-
-/**
- Retreave data from the Command History buffer. Direction maps into up arrow
- an down arrow on the command line
-
- @param Direction Command forward or back
-
- @return The Command history based on the Direction
-
-**/
-CHAR8 *
-GetCmdHistory (
- IN UINT16 Direction
- )
-{
- CHAR8 *HistoricalCommand = NULL;
-
- // No history yet?
- if (mCmdHistoryCurrent == -1) {
- HistoricalCommand = mCmdBlank;
- goto Exit;
- }
-
- if (Direction == SCAN_UP) {
- HistoricalCommand = &mCmdHistory[mCmdHistoryCurrent][0];
-
- // if we just echoed the last command, hang out there, don't wrap around
- if (mCmdHistoryCurrent == mCmdHistoryEnd) {
- goto Exit;
- }
-
- // otherwise, back up by one
- RingBufferDecrement(&mCmdHistoryCurrent);
-
- } else if (Direction == SCAN_DOWN) {
-
- // if we last echoed the start command, put a blank prompt out
- if (mCmdHistoryCurrent == mCmdHistoryStart) {
- HistoricalCommand = mCmdBlank;
- goto Exit;
- }
-
- // otherwise increment the current pointer and return that command
- RingBufferIncrement(&mCmdHistoryCurrent);
- RingBufferIncrement(&mCmdHistoryCurrent);
-
- HistoricalCommand = &mCmdHistory[mCmdHistoryCurrent][0];
- RingBufferDecrement(&mCmdHistoryCurrent);
- }
-
-Exit:
- return HistoricalCommand;
-}
-
-
-/**
- Parse the CmdLine and break it up into Argc (arg count) and Argv (array of
- pointers to each argument). The Cmd buffer is altered and separators are
- converted to string terminators. This allows Argv to point into CmdLine.
- A CmdLine can support multiple commands. The next command in the command line
- is returned if it exists.
-
- @param CmdLine String to parse for a set of commands
- @param Argc Returns the number of arguments in the CmdLine current command
- @param Argv Argc pointers to each string in CmdLine
-
- @return Next Command in the command line or NULL if non exists
-**/
-CHAR8 *
-ParseArguments (
- IN CHAR8 *CmdLine,
- OUT UINTN *Argc,
- OUT CHAR8 **Argv
- )
-{
- UINTN Arg;
- CHAR8 *Char;
- BOOLEAN LookingForArg;
- BOOLEAN InQuote;
-
- *Argc = 0;
- if (AsciiStrLen (CmdLine) == 0) {
- return NULL;
- }
-
- // Walk a single command line. A CMD_SEPARATOR allows multiple commands on a single line
- InQuote = FALSE;
- LookingForArg = TRUE;
- for (Char = CmdLine, Arg = 0; *Char != '\0'; Char++) {
- if (!InQuote && *Char == CMD_SEPARATOR) {
- break;
- }
-
- // Perform any text conversion here
- if (*Char == '\t') {
- // TAB to space
- *Char = ' ';
- }
-
- if (LookingForArg) {
- // Look for the beginning of an Argv[] entry
- if (*Char == '"') {
- Argv[Arg++] = ++Char;
- LookingForArg = FALSE;
- InQuote = TRUE;
- } else if (*Char != ' ') {
- Argv[Arg++] = Char;
- LookingForArg = FALSE;
- }
- } else {
- // Looking for the terminator of an Argv[] entry
- if (!InQuote && (*Char == ' ')) {
- *Char = '\0';
- LookingForArg = TRUE;
- } else if (!InQuote && (*Char == '"') && (*(Char-1) != '\\')) {
- InQuote = TRUE;
- } else if (InQuote && (*Char == '"') && (*(Char-1) != '\\')) {
- *Char = '\0';
- InQuote = FALSE;
- }
- }
- }
-
- *Argc = Arg;
-
- if (*Char == CMD_SEPARATOR) {
- // Replace the command delimiter with null and return pointer to next command line
- *Char = '\0';
- return ++Char;
- }
-
- return NULL;
-}
-
-
-/**
- Return a keypress or optionally timeout if a timeout value was passed in.
- An optional callback function is called every second when waiting for a
- timeout.
-
- @param Key EFI Key information returned
- @param TimeoutInSec Number of seconds to wait to timeout
- @param CallBack Callback called every second during the timeout wait
-
- @return EFI_SUCCESS Key was returned
- @return EFI_TIMEOUT If the TimoutInSec expired
-
-**/
-EFI_STATUS
-EFIAPI
-EblGetCharKey (
- IN OUT EFI_INPUT_KEY *Key,
- IN UINTN TimeoutInSec,
- IN EBL_GET_CHAR_CALL_BACK CallBack OPTIONAL
- )
-{
- EFI_STATUS Status;
- UINTN WaitCount;
- UINTN WaitIndex;
- EFI_EVENT WaitList[2];
-
- WaitCount = 1;
- WaitList[0] = gST->ConIn->WaitForKey;
- if (TimeoutInSec != 0) {
- // Create a time event for 1 sec duration if we have a timeout
- gBS->CreateEvent (EVT_TIMER, 0, NULL, NULL, &WaitList[1]);
- gBS->SetTimer (WaitList[1], TimerPeriodic, EFI_SET_TIMER_TO_SECOND);
- WaitCount++;
- }
-
- for (;;) {
- Status = gBS->WaitForEvent (WaitCount, WaitList, &WaitIndex);
- ASSERT_EFI_ERROR (Status);
-
- switch (WaitIndex) {
- case 0:
- // Key event signaled
- Status = gST->ConIn->ReadKeyStroke (gST->ConIn, Key);
- if (!EFI_ERROR (Status)) {
- if (WaitCount == 2) {
- gBS->CloseEvent (WaitList[1]);
- }
- return EFI_SUCCESS;
- }
- break;
-
- case 1:
- // Periodic 1 sec timer signaled
- TimeoutInSec--;
- if (CallBack != NULL) {
- // Call the users callback function if registered
- CallBack (TimeoutInSec);
- }
- if (TimeoutInSec == 0) {
- gBS->CloseEvent (WaitList[1]);
- return EFI_TIMEOUT;
- }
- break;
- default:
- ASSERT (FALSE);
- }
- }
-}
-
-
-/**
- This routine is used prevent command output data from scrolling off the end
- of the screen. The global gPageBreak is used to turn on or off this feature.
- If the CurrentRow is near the end of the screen pause and print out a prompt
- If the use hits Q to quit return TRUE else for any other key return FALSE.
- PrefixNewline is used to figure out if a newline is needed before the prompt
- string. This depends on the last print done before calling this function.
- CurrentRow is updated by one on a call or set back to zero if a prompt is
- needed.
-
- @param CurrentRow Used to figure out if its the end of the page and updated
- @param PrefixNewline Did previous print issue a newline
-
- @return TRUE if Q was hit to quit, FALSE in all other cases.
-
-**/
-BOOLEAN
-EFIAPI
-EblAnyKeyToContinueQtoQuit (
- IN UINTN *CurrentRow,
- IN BOOLEAN PrefixNewline
- )
-{
- EFI_INPUT_KEY InputKey;
-
- if (!gPageBreak) {
- // global disable for this feature
- return FALSE;
- }
-
- if (*CurrentRow >= (gScreenRows - 2)) {
- if (PrefixNewline) {
- AsciiPrint ("\n");
- }
- AsciiPrint ("Any key to continue (Q to quit): ");
- EblGetCharKey (&InputKey, 0, NULL);
- AsciiPrint ("\n");
-
- // Time to promt to stop the screen. We have to leave space for the prompt string
- *CurrentRow = 0;
- if (InputKey.UnicodeChar == 'Q' || InputKey.UnicodeChar == 'q') {
- return TRUE;
- }
- } else {
- *CurrentRow += 1;
- }
-
- return FALSE;
-}
-
-
-/**
- Set the text color of the EFI Console. If a zero is passed in reset to
- default text/background color.
-
- @param Attribute For text and background color
-
-**/
-VOID
-EblSetTextColor (
- UINTN Attribute
- )
-{
- if (Attribute == 0) {
- // Set the text color back to default
- Attribute = (UINTN)PcdGet32 (PcdEmbeddedDefaultTextColor);
- }
-
- gST->ConOut->SetAttribute (gST->ConOut, Attribute);
-}
-
-
-/**
- Collect the keyboard input for a cmd line. Carriage Return, New Line, or ESC
- terminates the command line. You can edit the command line via left arrow,
- delete and backspace and they all back up and erase the command line.
- No edit of command line is possible without deletion at this time!
- The up arrow and down arrow fill Cmd with information from the history
- buffer.
-
- @param Cmd Command line to return
- @param CmdMaxSize Maximum size of Cmd
-
- @return The Status of EblGetCharKey()
-
-**/
-EFI_STATUS
-GetCmd (
- IN OUT CHAR8 *Cmd,
- IN UINTN CmdMaxSize
- )
-{
- EFI_STATUS Status;
- UINTN Index;
- UINTN Index2;
- CHAR8 Char;
- CHAR8 *History;
- EFI_INPUT_KEY Key;
-
- for (Index = 0; Index < CmdMaxSize - 1;) {
- Status = EblGetCharKey (&Key, 0, NULL);
- if (EFI_ERROR (Status)) {
- Cmd[Index] = '\0';
- AsciiPrint ("\n");
- return Status;
- }
-
- Char = (CHAR8)Key.UnicodeChar;
- if ((Char == '\n') || (Char == '\r') || (Char == 0x7f)) {
- Cmd[Index] = '\0';
- if (FixedPcdGetBool(PcdEmbeddedShellCharacterEcho) == TRUE) {
- AsciiPrint ("\n\r");
- }
- return EFI_SUCCESS;
- } else if ((Char == '\b') || (Key.ScanCode == SCAN_LEFT) || (Key.ScanCode == SCAN_DELETE)){
- if (Index != 0) {
- Index--;
- //
- // Update the display
- //
- AsciiPrint ("\b \b");
- }
- } else if ((Key.ScanCode == SCAN_UP) || Key.ScanCode == SCAN_DOWN) {
- History = GetCmdHistory (Key.ScanCode);
- //
- // Clear display line
- //
- for (Index2 = 0; Index2 < Index; Index2++) {
- AsciiPrint ("\b \b");
- }
- AsciiPrint (History);
- Index = AsciiStrLen (History);
- AsciiStrnCpyS (Cmd, CmdMaxSize, History, CmdMaxSize);
- } else {
- Cmd[Index++] = Char;
- if (FixedPcdGetBool(PcdEmbeddedShellCharacterEcho) == TRUE) {
- AsciiPrint ("%c", Char);
- }
- }
- }
-
- return EFI_SUCCESS;
-}
-
-
-/**
- Print the boot up banner for the EBL.
-**/
-VOID
-EblPrintStartupBanner (
- VOID
- )
-{
- AsciiPrint ("Embedded Boot Loader (");
- EblSetTextColor (EFI_YELLOW);
- AsciiPrint ("EBL");
- EblSetTextColor (0);
- AsciiPrint (") prototype. Built at %a on %a\n",__TIME__, __DATE__);
- AsciiPrint ("THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN 'AS IS' BASIS,\nWITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\n");
- AsciiPrint ("Please send feedback to edk2-devel@lists.sourceforge.net\n");
-}
-
-
-/**
- Send null requests to all removable media block IO devices so the a media add/remove/change
- can be detected in real before we execute a command.
-
- This is mainly due to the fact that the FAT driver does not do this today so you can get stale
- dir commands after an SD Card has been removed.
-**/
-VOID
-EblProbeRemovableMedia (
- VOID
- )
-{
- UINTN Index;
- UINTN Max;
- EFI_OPEN_FILE *File;
-
- //
- // Probe for media insertion/removal in removable media devices
- //
- Max = EfiGetDeviceCounts (EfiOpenBlockIo);
- if (Max != 0) {
- for (Index = 0; Index < Max; Index++) {
- File = EfiDeviceOpenByType (EfiOpenBlockIo, Index);
- if (File != NULL) {
- if (File->FsBlockIoMedia->RemovableMedia) {
- // Probe to see if media is present (or not) or media changed
- // this causes the ReinstallProtocolInterface() to fire in the
- // block io driver to update the system about media change events
- File->FsBlockIo->ReadBlocks (File->FsBlockIo, File->FsBlockIo->Media->MediaId, (EFI_LBA)0, 0, NULL);
- }
- EfiClose (File);
- }
- }
- }
-}
-
-
-
-
-/**
- Print the prompt for the EBL.
-**/
-VOID
-EblPrompt (
- VOID
- )
-{
- EblSetTextColor (EFI_YELLOW);
- AsciiPrint ("%a %a",(CHAR8 *)PcdGetPtr (PcdEmbeddedPrompt), EfiGetCwd ());
- EblSetTextColor (0);
- AsciiPrint ("%a", ">");
-}
-
-
-
-/**
- Parse a command line and execute the commands. The ; separator allows
- multiple commands for each command line. Stop processing if one of the
- commands returns an error.
-
- @param CmdLine Command Line to process.
- @param MaxCmdLineSize MaxSize of the Command line
-
- @return EFI status of the Command
-
-**/
-EFI_STATUS
-ProcessCmdLine (
- IN CHAR8 *CmdLine,
- IN UINTN MaxCmdLineSize
- )
-{
- EFI_STATUS Status;
- EBL_COMMAND_TABLE *Cmd;
- CHAR8 *Ptr;
- UINTN Argc;
- CHAR8 *Argv[MAX_ARGS];
-
- // Parse the command line. The loop processes commands separated by ;
- for (Ptr = CmdLine, Status = EFI_SUCCESS; Ptr != NULL;) {
- Ptr = ParseArguments (Ptr, &Argc, Argv);
- if (Argc != 0) {
- Cmd = EblGetCommand (Argv[0]);
- if (Cmd != NULL) {
- // Execute the Command!
- Status = Cmd->Command (Argc, Argv);
- if (Status == EFI_ABORTED) {
- // exit command so lets exit
- break;
- } else if (Status == EFI_TIMEOUT) {
- // pause command got input so don't process any more cmd on this cmd line
- break;
- } else if (EFI_ERROR (Status)) {
- AsciiPrint ("%a returned %r error\n", Cmd->Name, Status);
- // if any command fails stop processing CmdLine
- break;
- }
- } else {
- AsciiPrint ("The command '%a' is not supported.\n", Argv[0]);
- }
- }
- }
-
- return Status;
-}
-
-
-
-/**
- Embedded Boot Loader (EBL) - A simple EFI command line application for embedded
- devices. PcdEmbeddedAutomaticBootCommand is a complied in command line that
- gets executed automatically. The ; separator allows multiple commands
- for each command line.
-
- @param ImageHandle EFI ImageHandle for this application.
- @param SystemTable EFI system table
-
- @return EFI status of the application
-
-**/
-EFI_STATUS
-EFIAPI
-EdkBootLoaderEntry (
- IN EFI_HANDLE ImageHandle,
- IN EFI_SYSTEM_TABLE *SystemTable
- )
-{
- EFI_STATUS Status;
- CHAR8 CmdLine[MAX_CMD_LINE];
- CHAR16 *CommandLineVariable = NULL;
- CHAR16 *CommandLineVariableName = L"default-cmdline";
- UINTN CommandLineVariableSize = 0;
- EFI_GUID VendorGuid;
-
- // Initialize tables of commands
- EblInitializeCmdTable ();
- EblInitializeDeviceCmd ();
- EblInitializemdHwDebugCmds ();
- EblInitializemdHwIoDebugCmds ();
- EblInitializeDirCmd ();
- EblInitializeHobCmd ();
- EblInitializeScriptCmd ();
- EblInitializeExternalCmd ();
- EblInitializeNetworkCmd();
- EblInitializeVariableCmds ();
-
- if (gST->ConOut == NULL) {
- DEBUG((EFI_D_ERROR,"Error: No Console Output\n"));
- return EFI_NOT_READY;
- }
-
- // Disable the 5 minute EFI watchdog time so we don't get automatically reset
- gBS->SetWatchdogTimer (0, 0, 0, NULL);
-
- if (FeaturePcdGet (PcdEmbeddedMacBoot)) {
- // A MAC will boot in graphics mode, so turn it back to text here
- // This protocol was removed from edk2. It is only an edk thing. We need to make our own copy.
- // DisableQuietBoot ();
-
- // Enable the biggest output screen size possible
- gST->ConOut->SetMode (gST->ConOut, (UINTN)gST->ConOut->Mode->MaxMode - 1);
-
- }
-
- // Save current screen mode
- gST->ConOut->QueryMode (gST->ConOut, gST->ConOut->Mode->Mode, &gScreenColumns, &gScreenRows);
-
- EblPrintStartupBanner ();
-
- // Parse command line and handle commands separated by ;
- // The loop prints the prompt gets user input and saves history
-
- // Look for a variable with a default command line, otherwise use the Pcd
- ZeroMem(&VendorGuid, sizeof(EFI_GUID));
-
- Status = gRT->GetVariable(CommandLineVariableName, &VendorGuid, NULL, &CommandLineVariableSize, CommandLineVariable);
- if (Status == EFI_BUFFER_TOO_SMALL) {
- CommandLineVariable = AllocatePool(CommandLineVariableSize);
-
- Status = gRT->GetVariable(CommandLineVariableName, &VendorGuid, NULL, &CommandLineVariableSize, CommandLineVariable);
- if (!EFI_ERROR(Status)) {
- UnicodeStrToAsciiStrS (CommandLineVariable, CmdLine, MAX_CMD_LINE);
- }
-
- FreePool(CommandLineVariable);
- }
-
- if (EFI_ERROR(Status)) {
- AsciiStrCpyS (CmdLine, MAX_CMD_LINE, (CHAR8 *)PcdGetPtr (PcdEmbeddedAutomaticBootCommand));
- }
-
- for (;;) {
- Status = ProcessCmdLine (CmdLine, MAX_CMD_LINE);
- if (Status == EFI_ABORTED) {
- // if a command returns EFI_ABORTED then exit the EBL
- EblShutdownExternalCmdTable ();
- return EFI_SUCCESS;
- }
-
- // get the command line from the user
- EblPrompt ();
- GetCmd (CmdLine, MAX_CMD_LINE);
- SetCmdHistory (CmdLine);
-
- if (FeaturePcdGet (PcdEmbeddedProbeRemovable)) {
- // Probe removable media devices to see if media has been inserted or removed.
- EblProbeRemovableMedia ();
- }
- }
-}
-
-
diff --git a/EmbeddedPkg/Ebl/Network.c b/EmbeddedPkg/Ebl/Network.c
deleted file mode 100644
index f2562e60b0db..000000000000
--- a/EmbeddedPkg/Ebl/Network.c
+++ /dev/null
@@ -1,106 +0,0 @@
-/** @file
- EBL commands for Network Devices
-
- Copyright (c) 2008 - 2009, Apple Inc. All rights reserved.<BR>
- (C) Copyright 2015 Hewlett Packard Enterprise Development LP<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
- http://opensource.org/licenses/bsd-license.php
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
-**/
-
-#include "Ebl.h"
-
-EFI_STATUS
-ParseIp (
- IN CHAR8 *String,
- OUT EFI_IP_ADDRESS *Address
- )
-{
- Address->v4.Addr[0] = (UINT8)AsciiStrDecimalToUintn (String);
- String = AsciiStrStr(String, ".") + 1;
- Address->v4.Addr[1] = (UINT8)AsciiStrDecimalToUintn (String);
- String = AsciiStrStr(String, ".") + 1;
- Address->v4.Addr[2] = (UINT8)AsciiStrDecimalToUintn (String);
- String = AsciiStrStr(String, ".") + 1;
- Address->v4.Addr[3] = (UINT8)AsciiStrDecimalToUintn (String);
-
- return EFI_SUCCESS;
-}
-
-EFI_STATUS
-EFIAPI
-EblIpCmd (
- IN UINTN Argc,
- IN CHAR8 **Argv
- )
-{
- EFI_STATUS Status = EFI_INVALID_PARAMETER;
- EFI_MAC_ADDRESS Mac;
- EFI_IP_ADDRESS Ip;
-
- if (Argc == 1) {
- // Get current IP/MAC
-
- // Get current MAC address
- Status = EblGetCurrentMacAddress (&Mac);
- if (EFI_ERROR (Status)) {
- goto Exit;
- }
-
- AsciiPrint ("MAC Address: %02x:%02x:%02x:%02x:%02x:%02x\n", Mac.Addr[0], Mac.Addr[1], Mac.Addr[2], Mac.Addr[3], Mac.Addr[4], Mac.Addr[5]);
-
- // Get current IP address
- Status = EblGetCurrentIpAddress (&Ip);
- if (EFI_ERROR(Status)) {
- AsciiPrint("IP Address is not configured.\n");
- Status = EFI_SUCCESS;
- goto Exit;
- }
-
- AsciiPrint("IP Address: %d.%d.%d.%d\n", Ip.v4.Addr[0], Ip.v4.Addr[1],Ip.v4.Addr[2], Ip.v4.Addr[3]);
-
- } else if ((Argv[1][0] == 'r') && (Argc == 2)) {
- // Get new address via dhcp
- Status = EblPerformDHCP (TRUE);
- } else if ((Argv[1][0] == 's') && (Argc == 3)) {
- // Set static IP
- Status = ParseIp (Argv[2], &Ip);
- if (EFI_ERROR (Status)) {
- goto Exit;
- }
-
- Status = EblSetStationIp (&Ip, NULL);
- }
-
-Exit:
- return Status;
-}
-
-GLOBAL_REMOVE_IF_UNREFERENCED const EBL_COMMAND_TABLE mCmdNetworkTemplate[] =
-{
- {
- "ip",
- " ; print current ip address\n\r [r]; request DHCP address\n\r [s] ipaddr; set static IP address",
- NULL,
- EblIpCmd
- }
-};
-
-
-/**
- Initialize the commands in this in this file
-**/
-VOID
-EblInitializeNetworkCmd (
- VOID
- )
-{
- EblAddCommands (mCmdNetworkTemplate, sizeof (mCmdNetworkTemplate)/sizeof (EBL_COMMAND_TABLE));
-}
-
diff --git a/EmbeddedPkg/Ebl/Script.c b/EmbeddedPkg/Ebl/Script.c
deleted file mode 100644
index 73360cb24840..000000000000
--- a/EmbeddedPkg/Ebl/Script.c
+++ /dev/null
@@ -1,128 +0,0 @@
-/** @file
- Script command allows the execution of commands from a text file
-
- Copyright (c) 2007, Intel Corporation. All rights reserved.<BR>
- Portions copyright (c) 2008 - 2009, Apple Inc. All rights reserved.<BR>
- (C) Copyright 2015 Hewlett Packard Enterprise Development LP<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
- http://opensource.org/licenses/bsd-license.php
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
- Module Name: EfiDevice.c
-
-**/
-
-#include "Ebl.h"
-
-
-/**
- Execute the passed in file like a series of commands. The ; can be used on
- a single line to indicate multiple commands per line. The Ascii text file
- can contain any number of lines. The following line termination forms are
- supported:
- LF : Unix, Mac OS X*, BeOS
- CR+LF: MS-DOS*, Microsoft Windows*
- CR : Commodore, Apple II, and really Mac OS
- LF+CR: for simplicity and completeness
-
- Argv[0] - "script"
- Argv[1] - Device Name:path for the file to load
-
- script fv1:\script.txt
-
- @param Argc Number of command arguments in Argv
- @param Argv Array of strings that represent the parsed command line.
- Argv[0] is the command name
-
- @return EFI_SUCCESS
-
-**/
-EFI_STATUS
-EFIAPI
-EblScriptCmd (
- IN UINTN Argc,
- IN CHAR8 **Argv
- )
-{
- EFI_STATUS Status;
- EFI_OPEN_FILE *File;
- VOID *Address;
- UINTN Size;
- CHAR8 *Ptr;
- CHAR8 *ScanPtr;
- UINTN CmdLineSize;
-
-
-
- if (Argc < 2) {
- // file name required
- return EFI_SUCCESS;
- }
-
- File = EfiOpen (Argv[1], EFI_FILE_MODE_READ, 0);
- if (File == NULL) {
- AsciiPrint (" %a is not a valid path\n", Argv[1]);
- return EFI_SUCCESS;
- }
-
- Status = EfiReadAllocatePool (File, &Address, &Size);
- if (!EFI_ERROR (Status)) {
- // Loop through each line in the text file
- for (Ptr = (CHAR8 *)Address; (Ptr < (((CHAR8 *)Address) + Size)) && !EFI_ERROR (Status); Ptr += CmdLineSize) {
- for (CmdLineSize = 0, ScanPtr = Ptr; ; CmdLineSize++, ScanPtr++) {
- // look for the end of the line
- if ((*ScanPtr == EBL_CR) || (*ScanPtr == EBL_LF)) {
- // convert to NULL as this is what input routine would do
- *ScanPtr = 0;
- if ((*(ScanPtr + 1) == EBL_CR) || (*(ScanPtr + 1) == EBL_LF)) {
- // if its a set get the 2nd EOL char
- CmdLineSize++;
- *(ScanPtr + 1) = 0;
- }
- CmdLineSize++;
- break;
- }
-
- }
-
- Status = ProcessCmdLine (Ptr, CmdLineSize);
- }
-
- FreePool (Address);
- }
-
- EfiClose (File);
- return Status;
-}
-
-
-
-GLOBAL_REMOVE_IF_UNREFERENCED const EBL_COMMAND_TABLE mScriptTemplate[] = {
- {
- "script",
- " device:path; load an ascii file and execute it like commands",
- NULL,
- EblScriptCmd
- }
-};
-
-
-/**
- Initialize the commands in this in this file
-**/
-
-VOID
-EblInitializeScriptCmd (
- VOID
- )
-{
- if (FeaturePcdGet (PcdEmbeddedScriptCmd)) {
- EblAddCommands (mScriptTemplate, sizeof (mScriptTemplate)/sizeof (EBL_COMMAND_TABLE));
- }
-}
-
diff --git a/EmbeddedPkg/Ebl/Variable.c b/EmbeddedPkg/Ebl/Variable.c
deleted file mode 100644
index 92464a6b7133..000000000000
--- a/EmbeddedPkg/Ebl/Variable.c
+++ /dev/null
@@ -1,221 +0,0 @@
-/** @file
-*
-* Copyright (c) 2011, ARM Limited. All rights reserved.
-* (C) Copyright 2015 Hewlett Packard Enterprise Development LP<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
-* http://opensource.org/licenses/bsd-license.php
-*
-* THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-* WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-*
-**/
-
-#include "Ebl.h"
-
-#include <Guid/GlobalVariable.h>
-
-EFI_STATUS
-EFIAPI
-EblGetCmd (
- IN UINTN Argc,
- IN CHAR8 **Argv
- )
-{
- EFI_STATUS Status = EFI_INVALID_PARAMETER;
- UINTN Size;
- VOID* Value;
- CHAR8* AsciiVariableName = NULL;
- CHAR16* VariableName;
- UINTN VariableNameLen;
- UINT32 Index;
-
- if (Argc == 1) {
- AsciiPrint("Variable name is missing.\n");
- return Status;
- }
-
- for (Index = 1; Index < Argc; Index++) {
- if (Argv[Index][0] == '-') {
- AsciiPrint("Warning: '%a' not recognized.\n",Argv[Index]);
- } else {
- AsciiVariableName = Argv[Index];
- }
- }
-
- if (AsciiVariableName == NULL) {
- AsciiPrint("Variable name is missing.\n");
- return Status;
- } else {
- VariableNameLen = AsciiStrLen (AsciiVariableName) + 1;
- VariableName = AllocatePool (VariableNameLen * sizeof (CHAR16));
- AsciiStrToUnicodeStrS (AsciiVariableName, VariableName, VariableNameLen);
- }
-
- // Try to get the variable size.
- Value = NULL;
- Size = 0;
- Status = gRT->GetVariable (VariableName, &gEfiGlobalVariableGuid, NULL, &Size, Value);
- if (Status == EFI_NOT_FOUND) {
- AsciiPrint("Variable name '%s' not found.\n",VariableName);
- } else if (Status == EFI_BUFFER_TOO_SMALL) {
- // Get the environment variable value
- Value = AllocatePool (Size);
- if (Value == NULL) {
- return EFI_OUT_OF_RESOURCES;
- }
-
- Status = gRT->GetVariable ((CHAR16 *)VariableName, &gEfiGlobalVariableGuid, NULL, &Size, Value);
- if (EFI_ERROR (Status)) {
- AsciiPrint("Error: '%r'\n",Status);
- } else {
- AsciiPrint("%a=%a\n",AsciiVariableName,Value);
- }
- FreePool(Value);
- } else {
- AsciiPrint("Error: '%r'\n",Status);
- }
-
- FreePool(VariableName);
- return Status;
-}
-
-EFI_STATUS
-EFIAPI
-EblSetCmd (
- IN UINTN Argc,
- IN CHAR8 **Argv
- )
-{
- EFI_STATUS Status = EFI_INVALID_PARAMETER;
- CHAR8* AsciiVariableSetting = NULL;
- CHAR8* AsciiVariableName;
- CHAR8* AsciiValue;
- UINT32 AsciiValueLength;
- CHAR16* VariableName;
- UINTN VariableNameLen;
- UINT32 Index;
- UINT32 EscapedQuotes = 0;
- BOOLEAN Volatile = FALSE;
-
- if (Argc == 1) {
- AsciiPrint("Variable name is missing.\n");
- return Status;
- }
-
- for (Index = 1; Index < Argc; Index++) {
- if (AsciiStrCmp(Argv[Index],"-v") == 0) {
- Volatile = 0;
- } else if (Argv[Index][0] == '-') {
- AsciiPrint("Warning: '%a' not recognized.\n",Argv[Index]);
- } else {
- AsciiVariableSetting = Argv[Index];
- }
- }
-
- if (AsciiVariableSetting == NULL) {
- AsciiPrint("Variable name is missing.\n");
- return Status;
- }
-
- // Check if it is a valid variable setting
- AsciiValue = AsciiStrStr (AsciiVariableSetting,"=");
- if (AsciiValue == NULL) {
- //
- // There is no value. It means this variable will be deleted
- //
-
- // Convert VariableName into Unicode
- VariableNameLen = AsciiStrLen (AsciiVariableSetting) + 1;
- VariableName = AllocatePool (VariableNameLen * sizeof (CHAR16));
- AsciiStrToUnicodeStrS (AsciiVariableSetting, VariableName, VariableNameLen);
-
- Status = gRT->SetVariable (
- VariableName,
- &gEfiGlobalVariableGuid,
- ( !Volatile ? EFI_VARIABLE_NON_VOLATILE : 0) |
- EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS,
- 0,
- NULL
- );
- if (!EFI_ERROR(Status)) {
- AsciiPrint("Variable '%s' deleted\n",VariableName);
- } else {
- AsciiPrint("Variable setting is incorrect. It should be VariableName=Value\n");
- }
- return Status;
- }
-
- AsciiValue[0] = '\0';
- AsciiVariableName = AsciiVariableSetting;
- AsciiValue++;
-
- // Clean AsciiValue from quote
- if (AsciiValue[0] == '"') {
- AsciiValue++;
- }
- AsciiValueLength = AsciiStrLen (AsciiValue);
- if ((AsciiValue[AsciiValueLength-2] != '\\') && (AsciiValue[AsciiValueLength-1] == '"')) {
- AsciiValue[AsciiValueLength-1] = '\0';
- }
-
- // Clean AsciiValue from escaped quotes
- for (Index = 0; Index < AsciiValueLength; Index++) {
- if ((Index > 0) && (AsciiValue[Index-1] == '\\') && (AsciiValue[Index] == '"')) {
- EscapedQuotes++;
- }
- AsciiValue[Index-EscapedQuotes] = AsciiValue[Index];
- }
- // Fill the end of the value with '\0'
- for (Index = 0; Index < EscapedQuotes; Index++) {
- AsciiValue[AsciiValueLength-1-Index] = '\0';
- }
-
- // Convert VariableName into Unicode
- VariableNameLen = AsciiStrLen (AsciiVariableName) + 1;
- VariableName = AllocatePool (VariableNameLen * sizeof (CHAR16));
- AsciiStrToUnicodeStrS (AsciiVariableName, VariableName, VariableNameLen);
-
- Status = gRT->SetVariable (
- VariableName,
- &gEfiGlobalVariableGuid,
- ( !Volatile ? EFI_VARIABLE_NON_VOLATILE : 0) |
- EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS,
- AsciiStrLen (AsciiValue)+1,
- AsciiValue
- );
- if (!EFI_ERROR(Status)) {
- AsciiPrint("'%a'='%a'\n",AsciiVariableName,AsciiValue);
- }
-
- return Status;
-}
-
-GLOBAL_REMOVE_IF_UNREFERENCED const EBL_COMMAND_TABLE mCmdVariableTemplate[] =
-{
- {
- "get",
- " ; get UEFI variable\n\r [v]; verbose",
- NULL,
- EblGetCmd
- },
- {
- "set",
- " ; set UEFI variable\n\r [v]; create volatile variable",
- NULL,
- EblSetCmd
- }
-};
-
-/**
- Initialize the commands in this in this file
-**/
-VOID
-EblInitializeVariableCmds (
- VOID
- )
-{
- EblAddCommands (mCmdVariableTemplate, sizeof (mCmdVariableTemplate)/sizeof (EBL_COMMAND_TABLE));
-}
diff --git a/EmbeddedPkg/EblExternCmd/EntryPointGlue.c b/EmbeddedPkg/EblExternCmd/EntryPointGlue.c
deleted file mode 100644
index d0e549bdc189..000000000000
--- a/EmbeddedPkg/EblExternCmd/EntryPointGlue.c
+++ /dev/null
@@ -1,154 +0,0 @@
-/** @file
- Glue code that contains the EFI entry point and converts it to an EBL
- ASCII Argc, Argv sytle entry point
-
-
- Copyright (c) 2007, Intel Corporation. All rights reserved.<BR>
- Portions copyright (c) 2008 - 2009, Apple Inc. 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
- http://opensource.org/licenses/bsd-license.php
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
-
-**/
-
-#include "Ebl.h"
-
-#define CMD_SEPARATOR ';'
-#define MAX_ARGS 32
-
-EFI_STATUS
-EblMain (
- IN UINTN Argc,
- IN CHAR8 **Argv
- );
-
-
-///
-/// EdkExternCmdEntry() & ParseArguments() convert the standard EFI entry point
-/// into Argc, Argv form that calls EblMain().
-///
-
-
-/**
- Parse the CmdLine and break it up into Argc (arg count) and Argv (array of
- pointers to each argument). The Cmd buffer is altered and separators are
- converted to string terminators. This allows Argv to point into CmdLine.
- A CmdLine can support multiple commands. The next command in the command line
- is returned if it exists.
-
- @param CmdLine String to parse for a set of commands
- @param CmdLineSize Size of CmdLine in bytes
- @param Argc Returns the number of arguments in the CmdLine current command
- @param Argv Argc pointers to each string in CmdLine
-
- @return Next Command in the command line or NULL if non exists
-**/
-VOID
-ParseArguments (
- IN CHAR8 *CmdLine,
- IN UINTN CmdLineSize,
- OUT UINTN *Argc,
- OUT CHAR8 **Argv
- )
-{
- UINTN Arg;
- CHAR8 *Char;
- BOOLEAN LookingForArg;
- BOOLEAN InQuote;
- UINTN Index;
-
- *Argc = 0;
- if ((CmdLineSize == 0) || (AsciiStrLen (CmdLine) == 0)) {
- // basic error checking failed on the arguments
- return;
- }
-
- // Walk a single command line. A CMD_SEPARATOR allows multiple commands on a single line
- InQuote = FALSE;
- LookingForArg = TRUE;
- for (Char = CmdLine, Arg = 0, Index = 0; *Char != '\0' && *Char != CMD_SEPARATOR; Char++, Index++) {
- // Perform any text conversion here
- if (*Char == '\t') {
- // TAB to space
- *Char = ' ';
- }
-
- if (LookingForArg) {
- // Look for the beginning of an Argv[] entry
- if (*Char == '"') {
- Argv[Arg++] = ++Char;
- LookingForArg = FALSE;
- InQuote = TRUE;
- } else if (*Char != ' ') {
- Argv[Arg++] = Char;
- LookingForArg = FALSE;
- }
- } else {
- // Looking for the terminator of an Argv[] entry
- if ((InQuote && (*Char == '"')) || (!InQuote && (*Char == ' '))) {
- *Char = '\0';
- LookingForArg = TRUE;
- }
- }
-
- if ((Arg >= MAX_ARGS) || (Index > CmdLineSize)) {
- // Error check buffer and exit since it does not look valid
- break;
- }
- }
-
- *Argc = Arg;
-
- if (*Char == CMD_SEPARATOR) {
- // Replace the command delimiter with null
- *Char = '\0';
- }
-
- return;
-}
-
-
-
-
-/**
- Embedded Boot Loader (EBL) - A simple EFI command line application for embedded
- devices. PcdEmbeddedAutomaticBootCommand is a complied in command line that
- gets executed automatically. The ; separator allows multiple commands
- for each command line.
-
- @param ImageHandle EFI ImageHandle for this application.
- @param SystemTable EFI system table
-
- @return EFI status of the application
-
-**/
-EFI_STATUS
-EFIAPI
-EdkExternCmdEntry (
- IN EFI_HANDLE ImageHandle,
- IN EFI_SYSTEM_TABLE *SystemTable
- )
-{
- EFI_STATUS Status;
- EFI_LOADED_IMAGE_PROTOCOL *ImageInfo;
- UINTN Argc;
- CHAR8 *Argv[MAX_ARGS];
-
- Status = gBS->HandleProtocol (ImageHandle, &gEfiLoadedImageProtocolGuid, (VOID **)&ImageInfo);
- if (EFI_ERROR (Status)) {
- Argc = 0;
- } else {
- // Looks like valid commands were passed in.
- ParseArguments (ImageInfo->LoadOptions, ImageInfo->LoadOptionsSize, &Argc, Argv);
- }
-
- return EblMain (Argc, Argv);
-}
-
-
diff --git a/EmbeddedPkg/EblExternCmd/Main.c b/EmbeddedPkg/EblExternCmd/Main.c
deleted file mode 100644
index dbfe336899c7..000000000000
--- a/EmbeddedPkg/EblExternCmd/Main.c
+++ /dev/null
@@ -1,53 +0,0 @@
-/** @file
- Example of an external EBL command. It's loaded via EBL start command.
- Argc and Argv are passed in via "" of the EBL command line.
-
- Start fs0:\EdkExternCmd.efi "Argv[0] Argv[1] 2"
-
- will launch this command with
- Argv[0] = "Argv[0]"
- Argv[1] = "Argv[2]"
- Argv[2] = "3"
-
- Copyright (c) 2007, Intel Corporation. All rights reserved.<BR>
- Portions copyright (c) 2008 - 2009, Apple Inc. 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
- http://opensource.org/licenses/bsd-license.php
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
-
-**/
-
-#include "Ebl.h"
-
-/**
- Entry point with Argc, Argv. Put your code here.
-
- @param Argc Number of command arguments in Argv
- @param Argv Array of strings that represent the parsed command line.
- Argv[0] is the command name
-
- @return EFI_SUCCESS
-
-**/
-EFI_STATUS
-EblMain (
- IN UINTN Argc,
- IN CHAR8 **Argv
- )
-{
- UINTN Index;
-
- AsciiPrint ("Hello World\n");
- for (Index = 0; Index < Argc; Index++) {
- AsciiPrint ("Argv[%d] = %a\n", Index, Argv[Index]);
- }
-
- return EFI_SUCCESS;
-}
-
diff --git a/EmbeddedPkg/EmbeddedPkg.dec b/EmbeddedPkg/EmbeddedPkg.dec
index af9b221f4f07..adcf65be93b3 100644
--- a/EmbeddedPkg/EmbeddedPkg.dec
+++ b/EmbeddedPkg/EmbeddedPkg.dec
@@ -36,13 +36,9 @@ [Includes.common]
Include # Root include for the package
[LibraryClasses.common]
- EfiFileLib|Include/Library/EfiFileLib.h
PrePiLib|Include/Library/PrePiLib.h
RealTimeClockLib|Include/Library/RealTimeClockLib.h
EfiResetSystemLib|Include/Library/EfiResetSystemLib.h
- EblCmdLib|Include/Library/EblCmdLib.h
- EblAddExternalCommandLib|Include/Library/EblAddExternalCommandLib.h
- EblNetworkLib|Include/Library/EblNetworkLib.h
GdbSerialLib|Include/Library/GdbSerialLib.h
DebugAgentTimerLib|Include/Library/DebugAgentTimerLib.h
NorFlashInfoLib|Include/Library/NorFlashInfoLib.h
@@ -75,7 +71,6 @@ [Protocols.common]
gHardwareInterruptProtocolGuid = { 0x2890B3EA, 0x053D, 0x1643, { 0xAD, 0x0C, 0xD6, 0x48, 0x08, 0xDA, 0x3F, 0xF1 } }
gHardwareInterrupt2ProtocolGuid = { 0x32898322, 0x2da1, 0x474a, { 0xba, 0xaa, 0xf3, 0xf7, 0xcf, 0x56, 0x94, 0x70 } }
gEfiDebugSupportPeriodicCallbackProtocolGuid = { 0x9546e07c, 0x2cbb, 0x4c88, { 0x98, 0x6c, 0xcd, 0x34, 0x10, 0x86, 0xf0, 0x44 } }
- gEfiEblAddCommandProtocolGuid = { 0xaeda2428, 0x9a22, 0x4637, { 0x9b, 0x21, 0x54, 0x5e, 0x28, 0xfb, 0xb8, 0x29 } }
gEmbeddedDeviceGuid = { 0xbf4b9d10, 0x13ec, 0x43dd, { 0x88, 0x80, 0xe9, 0xb, 0x71, 0x8f, 0x27, 0xde } }
gEmbeddedExternalDeviceProtocolGuid = { 0x735F8C64, 0xD696, 0x44D0, { 0xBD, 0xF2, 0x44, 0x7F, 0xD0, 0x5A, 0x54, 0x06 }}
gEmbeddedGpioProtocolGuid = { 0x17a0a3d7, 0xc0a5, 0x4635, { 0xbb, 0xd5, 0x07, 0x21, 0x87, 0xdf, 0xe2, 0xee }}
@@ -115,7 +110,6 @@ [PcdsFixedAtBuild.common]
gEmbeddedTokenSpaceGuid.PcdEmbeddedAutomaticBootCommand|L""|VOID*|0x00000007
gEmbeddedTokenSpaceGuid.PcdEmbeddedDefaultTextColor|0x07|UINT32|0x00000008
gEmbeddedTokenSpaceGuid.PcdEmbeddedMemVariableStoreSize|0x10000|UINT32|0x00000009
- gEmbeddedTokenSpaceGuid.PcdEmbeddedPrompt|"Ebl"|VOID*|0x00000034
gEmbeddedTokenSpaceGuid.PcdPrePiStackBase|0|UINT32|0x0000000b
gEmbeddedTokenSpaceGuid.PcdPrePiStackSize|131072|UINT32|0x0000000c
diff --git a/EmbeddedPkg/EmbeddedPkg.dsc b/EmbeddedPkg/EmbeddedPkg.dsc
index d7ee6a3018bf..8338715d6e46 100644
--- a/EmbeddedPkg/EmbeddedPkg.dsc
+++ b/EmbeddedPkg/EmbeddedPkg.dsc
@@ -59,7 +59,6 @@ [LibraryClasses.common]
PerformanceLib|MdePkg/Library/BasePerformanceLibNull/BasePerformanceLibNull.inf
PrintLib|MdePkg/Library/BasePrintLib/BasePrintLib.inf
UefiDecompressLib|MdePkg/Library/BaseUefiDecompressLib/BaseUefiDecompressLib.inf
- EfiFileLib|EmbeddedPkg/Library/EfiFileLib/EfiFileLib.inf
ReportStatusCodeLib|MdeModulePkg/Library/PeiDxeDebugLibReportStatusCode/PeiDxeDebugLibReportStatusCode.inf
@@ -93,9 +92,6 @@ [LibraryClasses.common]
UefiApplicationEntryPoint|MdePkg/Library/UefiApplicationEntryPoint/UefiApplicationEntryPoint.inf
PcdLib|MdePkg/Library/BasePcdLibNull/BasePcdLibNull.inf
- EblCmdLib|EmbeddedPkg/Library/EblCmdLibNull/EblCmdLibNull.inf
-
- EblNetworkLib|EmbeddedPkg/Library/EblNetworkLib/EblNetworkLib.inf
AcpiLib|EmbeddedPkg/Library/AcpiLib/AcpiLib.inf
FdtLib|EmbeddedPkg/Library/FdtLib/FdtLib.inf
@@ -240,9 +236,6 @@ [BuildOptions]
#
################################################################################
[Components.common]
- EmbeddedPkg/Library/EblAddExternalCommandLib/EblAddExternalCommandLib.inf
- EmbeddedPkg/Library/EblCmdLibNull/EblCmdLibNull.inf
- EmbeddedPkg/Library/EfiFileLib/EfiFileLib.inf
EmbeddedPkg/Library/GdbSerialDebugPortLib/GdbSerialDebugPortLib.inf
EmbeddedPkg/Library/GdbSerialLib/GdbSerialLib.inf
EmbeddedPkg/Library/PrePiExtractGuidedSectionLib/PrePiExtractGuidedSectionLib.inf
@@ -254,8 +247,6 @@ [Components.common]
EmbeddedPkg/Library/NonCoherentDmaLib/NonCoherentDmaLib.inf
EmbeddedPkg/Library/DxeDtPlatformDtbLoaderLibDefault/DxeDtPlatformDtbLoaderLibDefault.inf
- EmbeddedPkg/Ebl/Ebl.inf
-#### EmbeddedPkg/EblExternCmd/EblExternCmd.inf
EmbeddedPkg/EmbeddedMonotonicCounter/EmbeddedMonotonicCounter.inf
EmbeddedPkg/RealTimeClockRuntimeDxe/RealTimeClockRuntimeDxe.inf
EmbeddedPkg/ResetRuntimeDxe/ResetRuntimeDxe.inf
@@ -274,7 +265,6 @@ [Components.common]
EmbeddedPkg/Library/AcpiLib/AcpiLib.inf
EmbeddedPkg/Library/DebugAgentTimerLibNull/DebugAgentTimerLibNull.inf
EmbeddedPkg/Library/DxeHobPeCoffLib/DxeHobPeCoffLib.inf
- EmbeddedPkg/Library/EblNetworkLib/EblNetworkLib.inf
EmbeddedPkg/Library/FdtLib/FdtLib.inf
EmbeddedPkg/Library/GdbDebugAgent/GdbDebugAgent.inf
EmbeddedPkg/Library/PrePiHobLib/PrePiHobLib.inf
diff --git a/EmbeddedPkg/EmbeddedPkg.fdf b/EmbeddedPkg/EmbeddedPkg.fdf
deleted file mode 100644
index c84a5193efc4..000000000000
--- a/EmbeddedPkg/EmbeddedPkg.fdf
+++ /dev/null
@@ -1,141 +0,0 @@
-# This is Ebl FDF file
-#
-# Copyright (c) 2008, Intel Corporation. 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
-# http://opensource.org/licenses/bsd-license.php
-#
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-
-################################################################################
-#
-# FV Section
-#
-# [FV] section is used to define what components or modules are placed within a flash
-# device file. This section also defines order the components and modules are positioned
-# within the image. The [FV] section consists of define statements, set statements and
-# module statements.
-#
-################################################################################
-[FV.FvLoad]
-FvAlignment = 16 #FV alignment and FV attributes setting.
-ERASE_POLARITY = 1
-MEMORY_MAPPED = TRUE
-STICKY_WRITE = TRUE
-LOCK_CAP = TRUE
-LOCK_STATUS = TRUE
-WRITE_DISABLED_CAP = TRUE
-WRITE_ENABLED_CAP = TRUE
-WRITE_STATUS = TRUE
-WRITE_LOCK_CAP = TRUE
-WRITE_LOCK_STATUS = TRUE
-READ_DISABLED_CAP = TRUE
-READ_ENABLED_CAP = TRUE
-READ_STATUS = TRUE
-READ_LOCK_CAP = TRUE
-READ_LOCK_STATUS = TRUE
-
-################################################################################
-#
-# The INF statements point to module INF files, which will be placed into this FV image.
-# Parsing tools will scan the INF file to determine the type of component or module.
-# The component or module type is used to reference the standard rules
-# defined elsewhere in the FDF file.
-#
-# The format for INF statements is:
-# INF $(PathAndInfFileName)
-#
-################################################################################
-INF EmbeddedPkg/Ebl/Ebl.inf
-
-################################################################################
-#
-# Rules are use with the [FV] section's module INF type to define
-# how an FFS file is created for a given INF file. The following Rule are the default
-# rules for the different module type. User can add the customized rules to define the
-# content of the FFS file.
-#
-################################################################################
-
-
-############################################################################
-# Example of a DXE_DRIVER FFS file with a Checksum encapsulation section #
-############################################################################
-#
-#[Rule.Common.DXE_DRIVER]
-# FILE DRIVER = $(NAMED_GUID) {
-# DXE_DEPEX DXE_DEPEX Optional $(INF_OUTPUT)/$(MODULE_NAME).depex
-# COMPRESS PI_STD {
-# GUIDED {
-# PE32 PE32 $(INF_OUTPUT)/$(MODULE_NAME).efi
-# UI STRING="$(MODULE_NAME)" Optional
-# VERSION STRING="$(INF_VERSION)" Optional BUILD_NUM=$(BUILD_NUMBER)
-# }
-# }
-# }
-#
-############################################################################
-
-[Rule.Common.SEC]
- FILE SEC = $(NAMED_GUID) {
- PE32 PE32 $(INF_OUTPUT)/$(MODULE_NAME).efi
- }
-
-[Rule.Common.PEI_CORE]
- FILE PEI_CORE = $(NAMED_GUID) {
- PE32 PE32 $(INF_OUTPUT)/$(MODULE_NAME).efi
- UI STRING ="$(MODULE_NAME)" Optional
- }
-
-[Rule.Common.PEIM]
- FILE PEIM = $(NAMED_GUID) {
- PEI_DEPEX PEI_DEPEX Optional $(MODULE_NAME).depex
- PE32 PE32 $(INF_OUTPUT)/$(MODULE_NAME).efi
- UI STRING="$(MODULE_NAME)" Optional
- }
-
-[Rule.Common.PEIM.TIANOCOMPRESSED]
- FILE PEIM = $(NAMED_GUID) DEBUG_MYTOOLS_IA32 {
- PEI_DEPEX PEI_DEPEX Optional $(MODULE_NAME).depex
- GUIDED A31280AD-481E-41B6-95E8-127F4C984779 PROCESSING_REQUIRED = TRUE {
- PE32 PE32 $(INF_OUTPUT)/$(MODULE_NAME).efi
- UI STRING="$(MODULE_NAME)" Optional
- }
- }
-
-[Rule.Common.DXE_CORE]
- FILE DXE_CORE = $(NAMED_GUID) {
- PE32 PE32 $(INF_OUTPUT)/$(MODULE_NAME).efi
- UI STRING="$(MODULE_NAME)" Optional
- }
-
-[Rule.Common.UEFI_DRIVER]
- FILE DRIVER = $(NAMED_GUID) {
- DXE_DEPEX DXE_DEPEX Optional $(INF_OUTPUT)/$(MODULE_NAME).depex
- PE32 PE32 $(INF_OUTPUT)/$(MODULE_NAME).efi
- UI STRING="$(MODULE_NAME)" Optional
- }
-
-[Rule.Common.DXE_DRIVER]
- FILE DRIVER = $(NAMED_GUID) {
- DXE_DEPEX DXE_DEPEX Optional $(INF_OUTPUT)/$(MODULE_NAME).depex
- PE32 PE32 $(INF_OUTPUT)/$(MODULE_NAME).efi
- UI STRING="$(MODULE_NAME)" Optional
- }
-
-[Rule.Common.DXE_RUNTIME_DRIVER]
- FILE DRIVER = $(NAMED_GUID) {
- DXE_DEPEX DXE_DEPEX Optional $(INF_OUTPUT)/$(MODULE_NAME).depex
- PE32 PE32 $(INF_OUTPUT)/$(MODULE_NAME).efi
- UI STRING="$(MODULE_NAME)" Optional
- }
-
-[Rule.Common.UEFI_APPLICATION]
- FILE APPLICATION = $(NAMED_GUID) {
- PE32 PE32 $(INF_OUTPUT)/$(MODULE_NAME).efi
- UI STRING="$(MODULE_NAME)" Optional
- }
diff --git a/EmbeddedPkg/Include/Library/EblAddExternalCommandLib.h b/EmbeddedPkg/Include/Library/EblAddExternalCommandLib.h
deleted file mode 100644
index 65aeddddddad..000000000000
--- a/EmbeddedPkg/Include/Library/EblAddExternalCommandLib.h
+++ /dev/null
@@ -1,122 +0,0 @@
-/** @file
- Include file for basic command line parser for EBL (Embedded Boot Loader)
-
- Copyright (c) 2007, Intel Corporation. All rights reserved.<BR>
- Portions copyright (c) 2008 - 2009, Apple Inc. 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
- http://opensource.org/licenses/bsd-license.php
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
-**/
-
-#ifndef __EBL_ADD_EXTERNAL_COMMAND_LIB_H__
-#define __EBL_ADD_EXTERNAL_COMMAND_LIB_H__
-
-#include <PiDxe.h>
-#include <Protocol/EblAddCommand.h>
-
-
-EFI_STATUS
-EFIAPI
-EblAddExternalCommands (
- IN const EBL_COMMAND_TABLE *EntryArray,
- IN UINTN ArrayCount
- );
-
-/**
-
- Return a keypress or optionally timeout if a timeout value was passed in.
-
- An optional callback function is called every second when waiting for a
-
- timeout.
-
-
-
- @param Key EFI Key information returned
-
- @param TimeoutInSec Number of seconds to wait to timeout
-
- @param CallBack Callback called every second during the timeout wait
-
-
-
- @return EFI_SUCCESS Key was returned
-
- @return EFI_TIMEOUT If the TimoutInSec expired
-
-
-
-**/
-
-EFI_STATUS
-
-EFIAPI
-
-EblGetCharKey (
-
- IN OUT EFI_INPUT_KEY *Key,
-
- IN UINTN TimeoutInSec,
-
- IN EBL_GET_CHAR_CALL_BACK CallBack OPTIONAL
-
- );
-
-
-
-
-
-/**
-
- This routine is used prevent command output data from scrolling off the end
-
- of the screen. The global gPageBreak is used to turn on or off this feature.
-
- If the CurrentRow is near the end of the screen pause and print out a prompt
-
- If the use hits Q to quit return TRUE else for any other key return FALSE.
-
- PrefixNewline is used to figure out if a newline is needed before the prompt
-
- string. This depends on the last print done before calling this function.
-
- CurrentRow is updated by one on a call or set back to zero if a prompt is
-
- needed.
-
-
-
- @param CurrentRow Used to figure out if its the end of the page and updated
-
- @param PrefixNewline Did previous print issue a newline
-
-
-
- @return TRUE if Q was hit to quit, FALSE in all other cases.
-
-
-
-**/
-
-BOOLEAN
-
-EFIAPI
-
-EblAnyKeyToContinueQtoQuit (
-
- IN UINTN *CurrentRow,
-
- IN BOOLEAN PrefixNewline
-
- );
-
-
-
-#endif
-
diff --git a/EmbeddedPkg/Include/Library/EblCmdLib.h b/EmbeddedPkg/Include/Library/EblCmdLib.h
deleted file mode 100644
index 2a8a66c016c4..000000000000
--- a/EmbeddedPkg/Include/Library/EblCmdLib.h
+++ /dev/null
@@ -1,51 +0,0 @@
-/** @file
- Include file for basic command line parser for EBL (Embedded Boot Loader)
-
- Copyright (c) 2007, Intel Corporation. All rights reserved.<BR>
- Portions copyright (c) 2008 - 2009, Apple Inc. All rights reserved.<BR>
- (C) Copyright 2015 Hewlett Packard Enterprise Development LP<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
- http://opensource.org/licenses/bsd-license.php
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
-**/
-
-#ifndef __EBL_LIB_H__
-#define __EBL_LIB_H__
-
-#include <PiDxe.h>
-#include <Protocol/EblAddCommand.h>
-
-
-VOID
-EFIAPI
-EblAddCommand (
- IN const EBL_COMMAND_TABLE *Entry
- );
-
-VOID
-EFIAPI
-EblAddCommands (
- IN const EBL_COMMAND_TABLE *EntryArray,
- IN UINTN ArrayCount
- );
-
-
-//
-// LIbrary constructor called directly from Ebl Code.
-// This module calls EblAddCommand () or EblAddCommands () to register new commands
-//
-VOID
-EblInitializeExternalCmd (
- VOID
- );
-
-
-
-#endif
-
diff --git a/EmbeddedPkg/Include/Library/EblNetworkLib.h b/EmbeddedPkg/Include/Library/EblNetworkLib.h
deleted file mode 100644
index 66dc6ac30502..000000000000
--- a/EmbeddedPkg/Include/Library/EblNetworkLib.h
+++ /dev/null
@@ -1,68 +0,0 @@
-/** @file
- Abstractions for Ebl network accesses.
-
- Copyright (c) 2008 - 2009, Apple Inc. 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
- http://opensource.org/licenses/bsd-license.php
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
-**/
-
-#ifndef __EBL_NETWORK_LIB_H__
-#define __EBL_NETWORK_LIB_H__
-
-#include <Protocol/PxeBaseCode.h>
-
-
-EFI_STATUS
-EFIAPI
-EblGetCurrentIpAddress (
- IN OUT EFI_IP_ADDRESS *Ip
- );
-
-EFI_STATUS
-EFIAPI
-EblGetCurrentMacAddress (
- IN OUT EFI_MAC_ADDRESS *Mac
- );
-
-CHAR8 *
-EFIAPI
-EblLoadFileBootTypeString (
- IN EFI_HANDLE Handle
- );
-
-EFI_STATUS
-EFIAPI
-EblPerformDHCP (
- IN BOOLEAN SortOffers
- );
-
-EFI_STATUS
-EFIAPI
-EblSetStationIp (
- IN EFI_IP_ADDRESS *NewStationIp, OPTIONAL
- IN EFI_IP_ADDRESS *NewSubnetMask OPTIONAL
- );
-
-EFI_STATUS
-EFIAPI
-EblMtftp (
- IN EFI_PXE_BASE_CODE_TFTP_OPCODE Operation,
- IN OUT VOID *BufferPtr OPTIONAL,
- IN BOOLEAN Overwrite,
- IN OUT UINT64 *BufferSize,
- IN UINTN *BlockSize OPTIONAL,
- IN EFI_IP_ADDRESS *ServerIp,
- IN UINT8 *Filename OPTIONAL,
- IN EFI_PXE_BASE_CODE_MTFTP_INFO *Info OPTIONAL,
- IN BOOLEAN DontUseBuffer
- );
-
-#endif
-
diff --git a/EmbeddedPkg/Include/Protocol/EblAddCommand.h b/EmbeddedPkg/Include/Protocol/EblAddCommand.h
deleted file mode 100644
index 4a9f494c5d93..000000000000
--- a/EmbeddedPkg/Include/Protocol/EblAddCommand.h
+++ /dev/null
@@ -1,142 +0,0 @@
-/** @file
-
- Copyright (c) 2008 - 2009, Apple Inc. 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
- http://opensource.org/licenses/bsd-license.php
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
-**/
-
-
-#ifndef __EBL_ADD_COMMAND_H__
-#define __EBL_ADD_COMMAND_H__
-
-
-
-//
-// Protocol GUID
-//
-// AEDA2428-9A22-4637-9B21-545E28FBB829
-
-#define EBL_ADD_COMMAND_PROTOCOL_GUID \
- { 0xaeda2428, 0x9a22, 0x4637, { 0x9b, 0x21, 0x54, 0x5e, 0x28, 0xfb, 0xb8, 0x29 } }
-
-
-typedef struct _EBL_ADD_COMMAND_PROTOCOL EBL_ADD_COMMAND_PROTOCOL;
-
-typedef
-EFI_STATUS
-(EFIAPI *EBL_COMMMAND) (
- IN UINTN Argc,
- IN CHAR8 **Argv
- );
-
-typedef struct {
- CHAR8 *Name;
- CHAR8 *HelpSummary;
- CHAR8 *Help;
- EBL_COMMMAND Command;
-} EBL_COMMAND_TABLE;
-
-
-/**
- Add a single command table entry.
-
- @param EntryArray Pointer EBL_COMMAND_TABLE of the command that is being added
-
-**/
-typedef
-VOID
-(EFIAPI *EBL_ADD_COMMAND) (
- IN const EBL_COMMAND_TABLE *Entry
- );
-
-
-/**
- Add a multiple command table entry.
-
- @param EntryArray Pointer EBL_COMMAND_TABLE of the commands that are being added
-
- @param ArrayCount Number of commands in the EntryArray.
-
-**/
-typedef
-VOID
-(EFIAPI *EBL_ADD_COMMANDS) (
- IN const EBL_COMMAND_TABLE *EntryArray,
- IN UINTN ArrayCount
- );
-
-
-typedef
-VOID
-(EFIAPI *EBL_GET_CHAR_CALL_BACK) (
- IN UINTN ElapsedTime
- );
-
-/**
- Return a keypress or optionally timeout if a timeout value was passed in.
- An optional callback function is called every second when waiting for a
- timeout.
-
- @param Key EFI Key information returned
- @param TimeoutInSec Number of seconds to wait to timeout
- @param CallBack Callback called every second during the timeout wait
-
- @return EFI_SUCCESS Key was returned
- @return EFI_TIMEOUT If the TimoutInSec expired
-
-**/
-typedef
-EFI_STATUS
-(EFIAPI *EBL_GET_CHAR_KEY) (
- IN OUT EFI_INPUT_KEY *Key,
- IN UINTN TimeoutInSec,
- IN EBL_GET_CHAR_CALL_BACK CallBack OPTIONAL
- );
-
-
-/**
- This routine is used prevent command output data from scrolling off the end
- of the screen. The global gPageBreak is used to turn on or off this feature.
- If the CurrentRow is near the end of the screen pause and print out a prompt
- If the use hits Q to quit return TRUE else for any other key return FALSE.
- PrefixNewline is used to figure out if a newline is needed before the prompt
- string. This depends on the last print done before calling this function.
- CurrentRow is updated by one on a call or set back to zero if a prompt is
- needed.
-
- @param CurrentRow Used to figure out if its the end of the page and updated
- @param PrefixNewline Did previous print issue a newline
-
- @return TRUE if Q was hit to quit, FALSE in all other cases.
-
-**/
-typedef
-BOOLEAN
-(EFIAPI *EBL_ANY_KEY_CONTINUE_Q_QUIT) (
- IN UINTN *CurrentRow,
- IN BOOLEAN PrefixNewline
- );
-
-
-
-struct _EBL_ADD_COMMAND_PROTOCOL {
- EBL_ADD_COMMAND AddCommand;
- EBL_ADD_COMMANDS AddCommands;
-
- // Commands to reuse EBL infrastructure
- EBL_GET_CHAR_KEY EblGetCharKey;
- EBL_ANY_KEY_CONTINUE_Q_QUIT EblAnyKeyToContinueQtoQuit;
-};
-
-extern EFI_GUID gEfiEblAddCommandProtocolGuid;
-
-#endif
-
-
diff --git a/EmbeddedPkg/Library/EblAddExternalCommandLib/EblAddExternalCommandLib.c b/EmbeddedPkg/Library/EblAddExternalCommandLib/EblAddExternalCommandLib.c
deleted file mode 100644
index 3b9f1846d3cf..000000000000
--- a/EmbeddedPkg/Library/EblAddExternalCommandLib/EblAddExternalCommandLib.c
+++ /dev/null
@@ -1,155 +0,0 @@
-/** @file
- Add external EblCmd Lib
-
- Copyright (c) 2007, Intel Corporation. All rights reserved.<BR>
- Portions copyright (c) 2008 - 2009, Apple Inc. 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
- http://opensource.org/licenses/bsd-license.php
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
-
-**/
-
-#include <Uefi.h>
-#include <Library/UefiLib.h>
-#include <Library/UefiBootServicesTableLib.h>
-#include <Library/EblAddExternalCommandLib.h>
-#include <Protocol/EblAddCommand.h>
-
-STATIC BOOLEAN gInstalledCommand = FALSE;
-STATIC EFI_EVENT mEblCommandRegistration = NULL;
-
-STATIC const EBL_COMMAND_TABLE *mAddExternalCmdLibTemplate = NULL;
-STATIC UINTN mAddExternalCmdLibTemplateSize = 0;
-EBL_ADD_COMMAND_PROTOCOL *gEblExternalCommand = NULL;
-
-
-/**
- Return a keypress or optionally timeout if a timeout value was passed in.
- An optional callback function is called every second when waiting for a
- timeout.
-
- @param Key EFI Key information returned
- @param TimeoutInSec Number of seconds to wait to timeout
- @param CallBack Callback called every second during the timeout wait
-
- @return EFI_SUCCESS Key was returned
- @return EFI_TIMEOUT If the TimoutInSec expired
-
-**/
-EFI_STATUS
-EFIAPI
-EblGetCharKey (
- IN OUT EFI_INPUT_KEY *Key,
- IN UINTN TimeoutInSec,
- IN EBL_GET_CHAR_CALL_BACK CallBack OPTIONAL
- )
-{
- if (gEblExternalCommand != NULL) {
- return gEblExternalCommand->EblGetCharKey (Key, TimeoutInSec, CallBack);
- }
- return EFI_TIMEOUT;
-}
-
-
-/**
- This routine is used prevent command output data from scrolling off the end
- of the screen. The global gPageBreak is used to turn on or off this feature.
- If the CurrentRow is near the end of the screen pause and print out a prompt
- If the use hits Q to quit return TRUE else for any other key return FALSE.
- PrefixNewline is used to figure out if a newline is needed before the prompt
- string. This depends on the last print done before calling this function.
- CurrentRow is updated by one on a call or set back to zero if a prompt is
- needed.
-
- @param CurrentRow Used to figure out if its the end of the page and updated
- @param PrefixNewline Did previous print issue a newline
-
- @return TRUE if Q was hit to quit, FALSE in all other cases.
-
-**/
-BOOLEAN
-EFIAPI
-EblAnyKeyToContinueQtoQuit (
- IN UINTN *CurrentRow,
- IN BOOLEAN PrefixNewline
- )
-{
- if (gEblExternalCommand != NULL) {
- return gEblExternalCommand->EblAnyKeyToContinueQtoQuit (CurrentRow, PrefixNewline);
- }
- return FALSE;
-}
-
-
-
-/**
- Update mFvbEntry. Add new entry, or update existing entry if Fvb protocol is
- reinstalled.
-
- @param Event The Event that is being processed
- @param Context Event Context
-
-**/
-VOID
-EFIAPI
-EblAddCommandNotificationEvent (
- IN EFI_EVENT Event,
- IN VOID *Context
- )
-{
- EFI_STATUS Status;
-
- if (!gInstalledCommand) {
- Status = gBS->LocateProtocol (&gEfiEblAddCommandProtocolGuid, NULL, (VOID **)&gEblExternalCommand);
- if (!EFI_ERROR (Status)) {
- gEblExternalCommand->AddCommands (mAddExternalCmdLibTemplate, mAddExternalCmdLibTemplateSize);
- gInstalledCommand = TRUE;
- }
- }
-}
-
-
-
-/**
- The user Entry Point for the driver. The user code starts with this function
- as the real entry point for the image goes into a library that calls this
- function.
-
- @param[in] ImageHandle The firmware allocated handle for the EFI image.
- @param[in] SystemTable A pointer to the EFI System Table.
-
- @retval EFI_SUCCESS The entry point is executed successfully.
- @retval other Some error occurs when executing this entry point.
-
-**/
-EFI_STATUS
-EFIAPI
-EblAddExternalCommands (
- IN const EBL_COMMAND_TABLE *EntryArray,
- IN UINTN ArrayCount
- )
-{
- if (mAddExternalCmdLibTemplate != NULL) {
- return EFI_ALREADY_STARTED;
- }
-
- mAddExternalCmdLibTemplate = EntryArray;
- mAddExternalCmdLibTemplateSize = ArrayCount;
-
- EfiCreateProtocolNotifyEvent (
- &gEfiEblAddCommandProtocolGuid,
- TPL_CALLBACK,
- EblAddCommandNotificationEvent,
- NULL,
- &mEblCommandRegistration
- );
-
- return EFI_SUCCESS;
-}
-
diff --git a/EmbeddedPkg/Library/EblAddExternalCommandLib/EblAddExternalCommandLib.inf b/EmbeddedPkg/Library/EblAddExternalCommandLib/EblAddExternalCommandLib.inf
deleted file mode 100644
index 335386a8c800..000000000000
--- a/EmbeddedPkg/Library/EblAddExternalCommandLib/EblAddExternalCommandLib.inf
+++ /dev/null
@@ -1,47 +0,0 @@
-#/** @file
-# Component description file for the entry point to a EFIDXE Drivers
-#
-# Library to abstract Framework extensions that conflict with UEFI 2.0 Specification
-# Copyright (c) 2007 - 2007, Intel Corporation. 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
-# http://opensource.org/licenses/bsd-license.php
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-#
-#**/
-
-[Defines]
- INF_VERSION = 0x00010005
- BASE_NAME = EblAddExternalCommandLib
- FILE_GUID = 9195D970-C6F7-484E-8013-5B03C89C3B81
- MODULE_TYPE = UEFI_DRIVER
- VERSION_STRING = 1.0
- LIBRARY_CLASS = EblAddExternalCommandLib|DXE_DRIVER UEFI_APPLICATION UEFI_DRIVER
-
-
-#
-# The following information is for reference only and not required by the build tools.
-#
-# VALID_ARCHITECTURES = IA32 X64 IPF EBC
-#
-
-[Sources.common]
- EblAddExternalCommandLib.c
-
-[Packages]
- MdePkg/MdePkg.dec
- EmbeddedPkg/EmbeddedPkg.dec
-
-[LibraryClasses]
- UefiBootServicesTableLib
- UefiLib
- EblAddExternalCommandLib
-
-[Protocols]
- gEfiEblAddCommandProtocolGuid
-
-[Guids]
diff --git a/EmbeddedPkg/Library/EblCmdLibNull/EblCmdLibNull.c b/EmbeddedPkg/Library/EblCmdLibNull/EblCmdLibNull.c
deleted file mode 100644
index 6cde5f95ab88..000000000000
--- a/EmbeddedPkg/Library/EblCmdLibNull/EblCmdLibNull.c
+++ /dev/null
@@ -1,28 +0,0 @@
-/** @file
- Null EblCmdLib
-
- Copyright (c) 2007, Intel Corporation. All rights reserved.<BR>
- Portions copyright (c) 2008 - 2009, Apple Inc. 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
- http://opensource.org/licenses/bsd-license.php
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
-
-**/
-
-#include <PiDxe.h>
-#include <Library/EblCmdLib.h>
-
-
-VOID
-EblInitializeExternalCmd (
- VOID
- )
-{
- return;
-}
diff --git a/EmbeddedPkg/Library/EblCmdLibNull/EblCmdLibNull.inf b/EmbeddedPkg/Library/EblCmdLibNull/EblCmdLibNull.inf
deleted file mode 100644
index c7935ae37e3e..000000000000
--- a/EmbeddedPkg/Library/EblCmdLibNull/EblCmdLibNull.inf
+++ /dev/null
@@ -1,43 +0,0 @@
-#/** @file
-# Component description file for the entry point to a EFIDXE Drivers
-#
-# Library to abstract Framework extensions that conflict with UEFI 2.0 Specification
-# Copyright (c) 2007 - 2007, Intel Corporation. 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
-# http://opensource.org/licenses/bsd-license.php
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-#
-#**/
-
-[Defines]
- INF_VERSION = 0x00010005
- BASE_NAME = EblCmdLibNull
- FILE_GUID = 3513C4E2-06D6-4921-9C2B-E938777BA79E
- MODULE_TYPE = UEFI_DRIVER
- VERSION_STRING = 1.0
- LIBRARY_CLASS = EfiCmdLib|DXE_DRIVER UEFI_APPLICATION UEFI_DRIVER
-
-
-#
-# The following information is for reference only and not required by the build tools.
-#
-# VALID_ARCHITECTURES = IA32 X64 IPF EBC
-#
-
-[Sources.common]
- EblCmdLibNull.c
-
-[Packages]
- MdePkg/MdePkg.dec
- EmbeddedPkg/EmbeddedPkg.dec
-
-[LibraryClasses]
-
-[Protocols]
-
-[Guids]
diff --git a/EmbeddedPkg/Library/EblNetworkLib/EblNetworkLib.c b/EmbeddedPkg/Library/EblNetworkLib/EblNetworkLib.c
deleted file mode 100644
index 1c945cd33b5a..000000000000
--- a/EmbeddedPkg/Library/EblNetworkLib/EblNetworkLib.c
+++ /dev/null
@@ -1,173 +0,0 @@
-/** @file
-
- Copyright (c) 2008 - 2009, Apple Inc. 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
- http://opensource.org/licenses/bsd-license.php
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
-**/
-
-#include <Uefi.h>
-#include <Library/BaseMemoryLib.h>
-#include <Library/DebugLib.h>
-#include <Library/UefiRuntimeServicesTableLib.h>
-#include <Library/UefiBootServicesTableLib.h>
-
-#include <Protocol/SimpleNetwork.h>
-#include <Protocol/PxeBaseCode.h>
-
-
-BOOLEAN gUseIpv6 = FALSE;
-
-EFI_STATUS
-EFIAPI
-EblGetCurrentIpAddress (
- IN OUT EFI_IP_ADDRESS *Ip
- )
-{
- EFI_STATUS Status;
- EFI_PXE_BASE_CODE_PROTOCOL *Pxe;
-
- Status = gBS->LocateProtocol (&gEfiPxeBaseCodeProtocolGuid, NULL, (VOID **)&Pxe);
- if (EFI_ERROR(Status)) {
- return Status;
- }
-
- Status = Pxe->Start (Pxe, gUseIpv6);
- if (EFI_ERROR(Status) && (Status != EFI_ALREADY_STARTED)) {
- return Status;
- }
-
- CopyMem (Ip, &Pxe->Mode->StationIp, sizeof (EFI_IP_ADDRESS));
-
- return EFI_SUCCESS;
-}
-
-
-EFI_STATUS
-EFIAPI
-EblGetCurrentMacAddress (
- IN OUT EFI_MAC_ADDRESS *Mac
- )
-{
- EFI_STATUS Status;
- EFI_SIMPLE_NETWORK_PROTOCOL *SimpleNet;
-
- Status = gBS->LocateProtocol (&gEfiSimpleNetworkProtocolGuid, NULL, (VOID **)&SimpleNet);
- if (EFI_ERROR(Status)) {
- return Status;
- }
-
- CopyMem (Mac, SimpleNet->Mode->CurrentAddress.Addr, sizeof (EFI_MAC_ADDRESS));
- return Status;
-}
-
-
-CHAR8 *
-EFIAPI
-EblLoadFileBootTypeString (
- IN EFI_HANDLE Handle
- )
-{
- EFI_STATUS Status;
- VOID *NullPtr;
-
- Status = gBS->HandleProtocol (Handle, &gEfiPxeBaseCodeProtocolGuid, &NullPtr);
- if (!EFI_ERROR (Status)) {
- return "EFI PXE Network Boot";
- }
-
- return "";
-}
-
-EFI_STATUS
-EFIAPI
-EblPerformDHCP (
- IN BOOLEAN SortOffers
- )
-{
- EFI_STATUS Status;
- EFI_PXE_BASE_CODE_PROTOCOL *Pxe;
-
- Status = gBS->LocateProtocol (&gEfiPxeBaseCodeProtocolGuid, NULL, (VOID **)&Pxe);
- if (EFI_ERROR(Status)) {
- return Status;
- }
-
- Status = Pxe->Start (Pxe, gUseIpv6);
- if (EFI_ERROR(Status) && (Status != EFI_ALREADY_STARTED)) {
- return Status;
- }
-
- Status = Pxe->Dhcp(Pxe, TRUE);
- return Status;
-}
-
-
-EFI_STATUS
-EFIAPI
-EblSetStationIp (
- IN EFI_IP_ADDRESS *NewStationIp, OPTIONAL
- IN EFI_IP_ADDRESS *NewSubnetMask OPTIONAL
- )
-{
- EFI_STATUS Status;
- EFI_PXE_BASE_CODE_PROTOCOL *Pxe;
-
- Status = gBS->LocateProtocol (&gEfiPxeBaseCodeProtocolGuid, NULL, (VOID **)&Pxe);
- if (EFI_ERROR(Status)) {
- return Status;
- }
-
- Status = Pxe->Start (Pxe, gUseIpv6);
- if (EFI_ERROR(Status) && (Status != EFI_ALREADY_STARTED)) {
- return Status;
- }
-
- Status = Pxe->SetStationIp (Pxe, NewStationIp, NewSubnetMask);
- return Status;
-}
-
-
-EFI_STATUS
-EFIAPI
-EblMtftp (
- IN EFI_PXE_BASE_CODE_TFTP_OPCODE Operation,
- IN OUT VOID *BufferPtr OPTIONAL,
- IN BOOLEAN Overwrite,
- IN OUT UINT64 *BufferSize,
- IN UINTN *BlockSize OPTIONAL,
- IN EFI_IP_ADDRESS *ServerIp,
- IN UINT8 *Filename OPTIONAL,
- IN EFI_PXE_BASE_CODE_MTFTP_INFO *Info OPTIONAL,
- IN BOOLEAN DontUseBuffer
- )
-{
- EFI_STATUS Status;
- EFI_PXE_BASE_CODE_PROTOCOL *Pxe;
-
- Status = gBS->LocateProtocol (&gEfiPxeBaseCodeProtocolGuid, NULL, (VOID **)&Pxe);
- if (EFI_ERROR(Status)) {
- return Status;
- }
-
- Status = Pxe->Mtftp (
- Pxe,
- Operation,
- BufferPtr,
- Overwrite,
- BufferSize,
- BlockSize,
- ServerIp,
- Filename,
- Info,
- DontUseBuffer
- );
- return Status;
-}
-
diff --git a/EmbeddedPkg/Library/EblNetworkLib/EblNetworkLib.inf b/EmbeddedPkg/Library/EblNetworkLib/EblNetworkLib.inf
deleted file mode 100644
index c9b2d31dc437..000000000000
--- a/EmbeddedPkg/Library/EblNetworkLib/EblNetworkLib.inf
+++ /dev/null
@@ -1,34 +0,0 @@
-#/** @file
-#
-# Copyright (c) 2008 - 2010, Apple Inc. 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
-# http://opensource.org/licenses/bsd-license.php
-#
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-#**/
-
-[Defines]
- INF_VERSION = 0x00010005
- BASE_NAME = EblNetworkLib
- FILE_GUID = D885869A-7869-47DB-9429-DE03C318BCFD
- MODULE_TYPE = UEFI_DRIVER
- VERSION_STRING = 1.0
- LIBRARY_CLASS = EblNetworkLib|DXE_DRIVER DXE_RUNTIME_DRIVER UEFI_APPLICATION UEFI_DRIVER
-
-[sources.common]
- EblNetworkLib.c
-
-[Packages]
- MdePkg/MdePkg.dec
- EmbeddedPkg/EmbeddedPkg.dec
-
-[Protocols]
- gEfiSimpleNetworkProtocolGuid
- gEfiPxeBaseCodeProtocolGuid
-
-[Depex]
- TRUE
diff --git a/EmbeddedPkg/Library/EfiFileLib/EfiFileLib.c b/EmbeddedPkg/Library/EfiFileLib/EfiFileLib.c
deleted file mode 100644
index 8c38d22f1eb1..000000000000
--- a/EmbeddedPkg/Library/EfiFileLib/EfiFileLib.c
+++ /dev/null
@@ -1,1784 +0,0 @@
-/** @file
-File IO routines inspired by Streams with an EFI flavor
-
-Copyright (c) 2007, Intel Corporation. All rights reserved.<BR>
-Portions copyright (c) 2008 - 2009, Apple Inc. 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
-http://opensource.org/licenses/bsd-license.php
-
-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
-Basic support for opening files on different device types. The device string
-is in the form of DevType:Path. Current DevType is required as there is no
-current mounted device concept of current working directory concept implement
-by this library.
-
-Device names are case insensitive and only check the leading characters for
-unique matches. Thus the following are all the same:
-LoadFile0:
-l0:
-L0:
-Lo0:
-
-Supported Device Names:
-A0x1234:0x12 - A memory buffer starting at address 0x1234 for 0x12 bytes
-l1: - EFI LoadFile device one.
-B0: - EFI BlockIo zero.
-fs3: - EFI Simple File System device 3
-Fv2: - EFI Firmware VOlume device 2
-10.0.1.102: - TFTP service IP followed by the file name
-**/
-
-#include <PiDxe.h>
-#include <Protocol/BlockIo.h>
-#include <Protocol/DiskIo.h>
-#include <Protocol/SimpleFileSystem.h>
-#include <Protocol/FirmwareVolume2.h>
-#include <Protocol/LoadFile.h>
-#include <Protocol/FirmwareVolumeBlock.h>
-
-#include <Guid/FileInfo.h>
-#include <Guid/ZeroGuid.h>
-
-#include <Library/BaseLib.h>
-#include <Library/MemoryAllocationLib.h>
-#include <Library/DevicePathLib.h>
-#include <Library/PrintLib.h>
-#include <Library/BaseMemoryLib.h>
-#include <Library/UefiLib.h>
-#include <Library/UefiBootServicesTableLib.h>
-#include <Library/UefiRuntimeServicesTableLib.h>
-#include <Library/DebugLib.h>
-#include <Library/EfiFileLib.h>
-#include <Library/PcdLib.h>
-#include <Library/EblNetworkLib.h>
-
-
-CHAR8 *gCwd = NULL;
-
-#define EFI_OPEN_FILE_GUARD_HEADER 0x4B4D4641
-#define EFI_OPEN_FILE_GUARD_FOOTER 0x444D5A56
-
-// Need to defend against this overflowing
-#define MAX_CMD_LINE 0x200
-
-typedef struct {
- UINT32 Header;
- EFI_OPEN_FILE File;
- UINT32 Footer;
-} EFI_OPEN_FILE_GUARD;
-
-
-// globals to store current open device info
-EFI_HANDLE *mBlkIo = NULL;
-UINTN mBlkIoCount = 0;
-
-EFI_HANDLE *mFs = NULL;
-UINTN mFsCount = 0;
-// mFsInfo[] array entries must match mFs[] handles
-EFI_FILE_SYSTEM_INFO **mFsInfo = NULL;
-
-EFI_HANDLE *mFv = NULL;
-UINTN mFvCount = 0;
-EFI_HANDLE *mLoadFile = NULL;
-UINTN mLoadFileCount = 0;
-
-
-
-/**
-Internal worker function to validate a File handle.
-
-@param File Open File Handle
-
-@return TRUE File is valid
-@return FALSE File is not valid
-
-
-**/
-BOOLEAN
-FileHandleValid (
- IN EFI_OPEN_FILE *File
- )
-{
- EFI_OPEN_FILE_GUARD *GuardFile;
-
- // Look right before and after file structure for the correct signatures
- GuardFile = BASE_CR (File, EFI_OPEN_FILE_GUARD, File);
- if ((GuardFile->Header != EFI_OPEN_FILE_GUARD_HEADER) ||
- (GuardFile->Footer != EFI_OPEN_FILE_GUARD_FOOTER) ) {
- return FALSE;
- }
-
- return TRUE;
-}
-
-/**
-Internal worker function. If Buffer is not NULL free it.
-
-@param Buffer Buffer to FreePool()
-
-**/
-VOID
-EblFreePool (
- IN VOID *Buffer
- )
-{
- if (Buffer != NULL) {
- FreePool (Buffer);
- }
-}
-
-/**
-Update Device List Global Variables
-
-**/
-VOID
-EblUpdateDeviceLists (
- VOID
- )
-{
- EFI_STATUS Status;
- UINTN Size;
- EFI_SIMPLE_FILE_SYSTEM_PROTOCOL *Fs;
- EFI_FILE_HANDLE Root;
- UINTN Index;
-
- if (mBlkIo != NULL) {
- FreePool (mBlkIo);
- }
- gBS->LocateHandleBuffer (ByProtocol, &gEfiBlockIoProtocolGuid, NULL, &mBlkIoCount, &mBlkIo);
-
-
-
- if (mFv != NULL) {
- FreePool (mFv);
- }
- gBS->LocateHandleBuffer (ByProtocol, &gEfiFirmwareVolume2ProtocolGuid, NULL, &mFvCount, &mFv);
-
- if (mLoadFile != NULL) {
- FreePool (mLoadFile);
- }
- gBS->LocateHandleBuffer (ByProtocol, &gEfiLoadFileProtocolGuid, NULL, &mLoadFileCount, &mLoadFile);
-
- if (mFs != NULL) {
- FreePool (mFs);
- }
-
- if (&mFsInfo[0] != NULL) {
- // Need to Free the mFsInfo prior to recalculating mFsCount so don't move this code
- for (Index = 0; Index < mFsCount; Index++) {
- if (mFsInfo[Index] != NULL) {
- FreePool (mFsInfo[Index]);
- }
- }
- FreePool (mFsInfo);
- }
-
- gBS->LocateHandleBuffer (ByProtocol, &gEfiSimpleFileSystemProtocolGuid, NULL, &mFsCount, &mFs);
-
-
- mFsInfo = AllocateZeroPool (mFsCount * sizeof (EFI_FILE_SYSTEM_INFO *));
- if (mFsInfo == NULL) {
- // If we can't do this then we can't support file system entries
- mFsCount = 0;
- } else {
- // Loop through all the file system structures and cache the file system info data
- for (Index =0; Index < mFsCount; Index++) {
- Status = gBS->HandleProtocol (mFs[Index], &gEfiSimpleFileSystemProtocolGuid, (VOID **)&Fs);
- if (!EFI_ERROR (Status)) {
- Status = Fs->OpenVolume (Fs, &Root);
- if (!EFI_ERROR (Status)) {
- // Get information about the volume
- Size = 0;
- Status = Root->GetInfo (Root, &gEfiFileSystemInfoGuid, &Size, mFsInfo[Index]);
- if (Status == EFI_BUFFER_TOO_SMALL) {
- mFsInfo[Index] = AllocatePool (Size);
- Status = Root->GetInfo (Root, &gEfiFileSystemInfoGuid, &Size, mFsInfo[Index]);
- }
-
- Root->Close (Root);
- }
- }
- }
- }
-}
-
-
-/**
-PathName is in the form <device name>:<path> for example fs1:\ or ROOT:\.
-Return TRUE if the <devce name> prefix of PathName matches a file system
-Volume Name. MatchIndex is the array index in mFsInfo[] of the match,
-and it can be used with mFs[] to find the handle that needs to be opened
-
-@param PathName PathName to check
-@param FileStart Index of the first character of the <path>
-@param MatchIndex Index in mFsInfo[] that matches
-
-@return TRUE PathName matches a Volume Label and MatchIndex is valid
-@return FALSE PathName does not match a Volume Label MatchIndex undefined
-
-**/
-BOOLEAN
-EblMatchVolumeName (
- IN CHAR8 *PathName,
- IN UINTN FileStart,
- OUT UINTN *MatchIndex
- )
-{
- UINTN Index;
- UINTN Compare;
- UINTN VolStrLen;
- BOOLEAN Match;
-
- for (Index =0; Index < mFsCount; Index++) {
- if (mFsInfo[Index] == NULL) {
- // FsInfo is not valid so skip it
- continue;
- }
- VolStrLen = StrLen (mFsInfo[Index]->VolumeLabel);
- for (Compare = 0, Match = TRUE; Compare < (FileStart - 1); Compare++) {
- if (Compare > VolStrLen) {
- Match = FALSE;
- break;
- }
- if (PathName[Compare] != (CHAR8)mFsInfo[Index]->VolumeLabel[Compare]) {
- // If the VolumeLabel has a space allow a _ to match with it in addition to ' '
- if (!((PathName[Compare] == '_') && (mFsInfo[Index]->VolumeLabel[Compare] == L' '))) {
- Match = FALSE;
- break;
- }
- }
- }
- if (Match) {
- *MatchIndex = Index;
- return TRUE;
- }
- }
-
- return FALSE;
-}
-
-
-/**
-Return the number of devices of the current type active in the system
-
-@param Type Device type to check
-
-@return 0 Invalid type
-
-**/
-UINTN
-EfiGetDeviceCounts (
- IN EFI_OPEN_FILE_TYPE DeviceType
- )
-{
- switch (DeviceType) {
- case EfiOpenLoadFile:
- return mLoadFileCount;
- case EfiOpenFirmwareVolume:
- return mFvCount;
- case EfiOpenFileSystem:
- return mFsCount;
- case EfiOpenBlockIo:
- return mBlkIoCount;
- default:
- return 0;
- }
-}
-
-EFI_STATUS
-ConvertIpStringToEfiIp (
- IN CHAR8 *PathName,
- OUT EFI_IP_ADDRESS *ServerIp
- )
-{
- CHAR8 *Str;
-
- Str = PathName;
- ServerIp->v4.Addr[0] = (UINT8)AsciiStrDecimalToUintn (Str);
-
- Str = AsciiStrStr (Str, ".");
- if (Str == NULL) {
- return EFI_DEVICE_ERROR;
- }
-
- ServerIp->v4.Addr[1] = (UINT8)AsciiStrDecimalToUintn (++Str);
-
- Str = AsciiStrStr (Str, ".");
- if (Str == NULL) {
- return EFI_DEVICE_ERROR;
- }
-
- ServerIp->v4.Addr[2] = (UINT8)AsciiStrDecimalToUintn (++Str);
-
- Str = AsciiStrStr (Str, ".");
- if (Str == NULL) {
- return EFI_DEVICE_ERROR;
- }
-
- ServerIp->v4.Addr[3] = (UINT8)AsciiStrDecimalToUintn (++Str);
-
- return EFI_SUCCESS;
-}
-
-
-/**
-Internal work function to extract a device number from a string skipping
-text. Easy way to extract numbers from strings like blk7:.
-
-@param Str String to extract device number form
-
-@return -1 Device string is not valid
-@return Device #
-
-**/
-UINTN
-EblConvertDevStringToNumber (
- IN CHAR8 *Str
- )
-{
- UINTN Max;
- UINTN Index;
-
-
- // Find the first digit
- Max = AsciiStrLen (Str);
- for (Index = 0; !((*Str >= '0') && (*Str <= '9')) && (Index < Max); Index++) {
- Str++;
- }
- if (Index == Max) {
- return (UINTN)-1;
- }
-
- return AsciiStrDecimalToUintn (Str);
-}
-
-
-/**
-Internal work function to fill in EFI_OPEN_FILE information for the Fs and BlkIo
-
-@param File Open file handle
-@param FileName Name of file after device stripped off
-
-
-**/
-EFI_STATUS
-EblFileDevicePath (
- IN OUT EFI_OPEN_FILE *File,
- IN CHAR8 *FileName,
- IN CONST UINT64 OpenMode
- )
-{
- EFI_STATUS Status;
- UINTN Size;
- FILEPATH_DEVICE_PATH *FilePath;
- EFI_DEVICE_PATH_PROTOCOL *FileDevicePath;
- CHAR16 UnicodeFileName[MAX_PATHNAME];
- EFI_BLOCK_IO_PROTOCOL *BlkIo;
- EFI_SIMPLE_FILE_SYSTEM_PROTOCOL *Fs;
- EFI_FILE_HANDLE Root;
-
-
- if ( *FileName != 0 ) {
- AsciiStrToUnicodeStrS (FileName, UnicodeFileName,
- ARRAY_SIZE (UnicodeFileName));
- } else {
- AsciiStrToUnicodeStrS ("\\", UnicodeFileName, ARRAY_SIZE (UnicodeFileName));
- }
-
- Size = StrSize (UnicodeFileName);
- FileDevicePath = AllocatePool (Size + SIZE_OF_FILEPATH_DEVICE_PATH + sizeof (EFI_DEVICE_PATH_PROTOCOL));
- if (FileDevicePath != NULL) {
- FilePath = (FILEPATH_DEVICE_PATH *) FileDevicePath;
- FilePath->Header.Type = MEDIA_DEVICE_PATH;
- FilePath->Header.SubType = MEDIA_FILEPATH_DP;
- CopyMem (&FilePath->PathName, UnicodeFileName, Size);
- SetDevicePathNodeLength (&FilePath->Header, Size + SIZE_OF_FILEPATH_DEVICE_PATH);
- SetDevicePathEndNode (NextDevicePathNode (&FilePath->Header));
-
- if (File->EfiHandle != NULL) {
- File->DevicePath = DevicePathFromHandle (File->EfiHandle);
- }
-
- File->DevicePath = AppendDevicePath (File->DevicePath, FileDevicePath);
- FreePool (FileDevicePath);
- }
-
- Status = gBS->HandleProtocol (File->EfiHandle, &gEfiBlockIoProtocolGuid, (VOID **)&BlkIo);
- if (!EFI_ERROR (Status)) {
- File->FsBlockIoMedia = BlkIo->Media;
- File->FsBlockIo = BlkIo;
-
- // If we are not opening the device this will get over written with file info
- File->MaxPosition = MultU64x32 (BlkIo->Media->LastBlock + 1, BlkIo->Media->BlockSize);
- }
-
- if (File->Type == EfiOpenFileSystem) {
- Status = gBS->HandleProtocol (File->EfiHandle, &gEfiSimpleFileSystemProtocolGuid, (VOID **)&Fs);
- if (!EFI_ERROR (Status)) {
- Status = Fs->OpenVolume (Fs, &Root);
- if (!EFI_ERROR (Status)) {
- // Get information about the volume
- Size = 0;
- Status = Root->GetInfo (Root, &gEfiFileSystemInfoGuid, &Size, File->FsInfo);
- if (Status == EFI_BUFFER_TOO_SMALL) {
- File->FsInfo = AllocatePool (Size);
- Status = Root->GetInfo (Root, &gEfiFileSystemInfoGuid, &Size, File->FsInfo);
- }
-
- // Get information about the file
- Status = Root->Open (Root, &File->FsFileHandle, UnicodeFileName, OpenMode, 0);
- if (!EFI_ERROR (Status)) {
- Size = 0;
- Status = File->FsFileHandle->GetInfo (File->FsFileHandle, &gEfiFileInfoGuid, &Size, NULL);
- if (Status == EFI_BUFFER_TOO_SMALL) {
- File->FsFileInfo = AllocatePool (Size);
- Status = File->FsFileHandle->GetInfo (File->FsFileHandle, &gEfiFileInfoGuid, &Size, File->FsFileInfo);
- if (!EFI_ERROR (Status)) {
- File->Size = (UINTN)File->FsFileInfo->FileSize;
- File->MaxPosition = (UINT64)File->Size;
- }
- }
- }
-
- Root->Close (Root);
- }
- }
- } else if (File->Type == EfiOpenBlockIo) {
- File->Size = (UINTN)File->MaxPosition;
- }
-
- return Status;
-}
-
-#define ToUpper(a) ((((a) >= 'a') && ((a) <= 'z')) ? ((a) - 'a' + 'A') : (a))
-
-EFI_STATUS
-CompareGuidToString (
- IN EFI_GUID *Guid,
- IN CHAR8 *String
- )
-{
- CHAR8 AsciiGuid[64];
- CHAR8 *StringPtr;
- CHAR8 *GuidPtr;
-
- AsciiSPrint (AsciiGuid, sizeof(AsciiGuid), "%g", Guid);
-
- StringPtr = String;
- GuidPtr = AsciiGuid;
-
- while ((*StringPtr != '\0') && (*GuidPtr != '\0')) {
- // Skip dashes
- if (*StringPtr == '-') {
- StringPtr++;
- continue;
- }
-
- if (*GuidPtr == '-') {
- GuidPtr++;
- continue;
- }
-
- if (ToUpper(*StringPtr) != ToUpper(*GuidPtr)) {
- return EFI_NOT_FOUND;
- }
-
- StringPtr++;
- GuidPtr++;
- }
-
- return EFI_SUCCESS;
-}
-
-
-/**
-Internal work function to fill in EFI_OPEN_FILE information for the FV
-
-@param File Open file handle
-@param FileName Name of file after device stripped off
-
-
-**/
-EFI_STATUS
-EblFvFileDevicePath (
- IN OUT EFI_OPEN_FILE *File,
- IN CHAR8 *FileName,
- IN CONST UINT64 OpenMode
- )
-{
- EFI_STATUS Status;
- EFI_STATUS GetNextFileStatus;
- MEDIA_FW_VOL_FILEPATH_DEVICE_PATH DevicePathNode;
- EFI_DEVICE_PATH_PROTOCOL *DevicePath;
- UINTN Key;
- UINT32 AuthenticationStatus;
- CHAR8 AsciiSection[MAX_PATHNAME];
- VOID *Section;
- UINTN SectionSize;
- EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *Fvb;
- EFI_LBA Lba;
- UINTN BlockSize;
- UINTN NumberOfBlocks;
- EFI_FIRMWARE_VOLUME_HEADER *FvHeader = NULL;
- UINTN Index;
-
-
- Status = gBS->HandleProtocol (File->EfiHandle, &gEfiFirmwareVolume2ProtocolGuid, (VOID **)&File->Fv);
- if (EFI_ERROR (Status)) {
- return Status;
- }
-
- // Get FVB Info about the handle
- Status = gBS->HandleProtocol (File->EfiHandle, &gEfiFirmwareVolumeBlockProtocolGuid, (VOID **)&Fvb);
- if (!EFI_ERROR (Status)) {
- Status = Fvb->GetPhysicalAddress (Fvb, &File->FvStart);
- if (!EFI_ERROR (Status)) {
- FvHeader = (EFI_FIRMWARE_VOLUME_HEADER *)(UINTN)File->FvStart;
- File->FvHeaderSize = sizeof (EFI_FIRMWARE_VOLUME_HEADER);
- for (Index = 0; FvHeader->BlockMap[Index].Length !=0; Index++) {
- File->FvHeaderSize += sizeof (EFI_FV_BLOCK_MAP_ENTRY);
- }
-
- for (Lba = 0, File->FvSize = 0, NumberOfBlocks = 0; ; File->FvSize += (BlockSize * NumberOfBlocks), Lba += NumberOfBlocks) {
- Status = Fvb->GetBlockSize (Fvb, Lba, &BlockSize, &NumberOfBlocks);
- if (EFI_ERROR (Status)) {
- break;
- }
- }
- }
- }
-
-
- DevicePath = DevicePathFromHandle (File->EfiHandle);
-
- if (*FileName == '\0') {
- File->DevicePath = DuplicateDevicePath (DevicePath);
- File->Size = File->FvSize;
- File->MaxPosition = File->Size;
- } else {
- Key = 0;
- do {
- File->FvType = EFI_FV_FILETYPE_ALL;
- GetNextFileStatus = File->Fv->GetNextFile (
- File->Fv,
- &Key,
- &File->FvType,
- &File->FvNameGuid,
- &File->FvAttributes,
- &File->Size
- );
- if (!EFI_ERROR (GetNextFileStatus)) {
- // Compare GUID first
- Status = CompareGuidToString (&File->FvNameGuid, FileName);
- if (!EFI_ERROR(Status)) {
- break;
- }
-
- Section = NULL;
- Status = File->Fv->ReadSection (
- File->Fv,
- &File->FvNameGuid,
- EFI_SECTION_USER_INTERFACE,
- 0,
- &Section,
- &SectionSize,
- &AuthenticationStatus
- );
- if (!EFI_ERROR (Status)) {
- UnicodeStrToAsciiStrS (Section, AsciiSection, MAX_PATHNAME);
- if (AsciiStriCmp (FileName, AsciiSection) == 0) {
- FreePool (Section);
- break;
- }
- FreePool (Section);
- }
- }
- } while (!EFI_ERROR (GetNextFileStatus));
-
- if (EFI_ERROR (GetNextFileStatus)) {
- return GetNextFileStatus;
- }
-
- if (OpenMode != EFI_SECTION_ALL) {
- // Calculate the size of the section we are targeting
- Section = NULL;
- File->Size = 0;
- Status = File->Fv->ReadSection (
- File->Fv,
- &File->FvNameGuid,
- (EFI_SECTION_TYPE)OpenMode,
- 0,
- &Section,
- &File->Size,
- &AuthenticationStatus
- );
- if (EFI_ERROR (Status)) {
- return Status;
- }
- }
-
- File->MaxPosition = File->Size;
- EfiInitializeFwVolDevicepathNode (&DevicePathNode, &File->FvNameGuid);
- File->DevicePath = AppendDevicePathNode (DevicePath, (EFI_DEVICE_PATH_PROTOCOL *)&DevicePathNode);
- }
-
-
- // FVB not required if FV was soft loaded...
- return EFI_SUCCESS;
-}
-
-
-
-
-/**
-Open a device named by PathName. The PathName includes a device name and
-path separated by a :. See file header for more details on the PathName
-syntax. There is no checking to prevent a file from being opened more than
-one type.
-
-SectionType is only used to open an FV. Each file in an FV contains multiple
-sections and only the SectionType section is opened.
-
-For any file that is opened with EfiOpen() must be closed with EfiClose().
-
-@param PathName Path to parse to open
-@param OpenMode Same as EFI_FILE.Open()
-@param SectionType Section in FV to open.
-
-@return NULL Open failed
-@return Valid EFI_OPEN_FILE handle
-
-**/
-EFI_OPEN_FILE *
-EfiOpen (
- IN CHAR8 *PathName,
- IN CONST UINT64 OpenMode,
- IN CONST EFI_SECTION_TYPE SectionType
- )
-{
- EFI_STATUS Status;
- EFI_OPEN_FILE *File;
- EFI_OPEN_FILE FileData;
- UINTN StrLen;
- UINTN FileStart;
- UINTN DevNumber = 0;
- EFI_OPEN_FILE_GUARD *GuardFile;
- BOOLEAN VolumeNameMatch;
- EFI_DEVICE_PATH_PROTOCOL *DevicePath;
- UINTN Size;
- EFI_IP_ADDRESS Ip;
- CHAR8 *CwdPlusPathName;
- UINTN Index;
- EFI_SECTION_TYPE ModifiedSectionType;
- UINTN AsciiLength;
-
- EblUpdateDeviceLists ();
-
- File = &FileData;
- ZeroMem (File, sizeof (EFI_OPEN_FILE));
-
- StrLen = AsciiStrSize (PathName);
- if (StrLen <= 1) {
- // Smallest valid path is 1 char and a null
- return NULL;
- }
-
- for (FileStart = 0; FileStart < StrLen; FileStart++) {
- if (PathName[FileStart] == ':') {
- FileStart++;
- break;
- }
- }
-
- //
- // Matching volume name has precedence over handle based names
- //
- VolumeNameMatch = EblMatchVolumeName (PathName, FileStart, &DevNumber);
- if (!VolumeNameMatch) {
- if (FileStart == StrLen) {
- // No Volume name or device name, so try Current Working Directory
- if (gCwd == NULL) {
- // No CWD
- return NULL;
- }
-
- // We could add a current working directory concept
- AsciiLength = AsciiStrSize (gCwd) + AsciiStrSize (PathName);
- CwdPlusPathName = AllocatePool (AsciiLength);
- if (CwdPlusPathName == NULL) {
- return NULL;
- }
-
- if ((PathName[0] == '/') || (PathName[0] == '\\')) {
- // PathName starts in / so this means we go to the root of the device in the CWD.
- CwdPlusPathName[0] = '\0';
- for (FileStart = 0; gCwd[FileStart] != '\0'; FileStart++) {
- CwdPlusPathName[FileStart] = gCwd[FileStart];
- if (gCwd[FileStart] == ':') {
- FileStart++;
- CwdPlusPathName[FileStart] = '\0';
- break;
- }
- }
- } else {
- AsciiStrCpyS (CwdPlusPathName, AsciiLength, gCwd);
- StrLen = AsciiStrLen (gCwd);
- if ((*PathName != '/') && (*PathName != '\\') && (gCwd[StrLen-1] != '/') && (gCwd[StrLen-1] != '\\')) {
- AsciiStrCatS (CwdPlusPathName, AsciiLength, "\\");
- }
- }
-
- AsciiStrCatS (CwdPlusPathName, AsciiLength, PathName);
- if (AsciiStrStr (CwdPlusPathName, ":") == NULL) {
- // Extra error check to make sure we don't recurse and blow stack
- return NULL;
- }
-
- File = EfiOpen (CwdPlusPathName, OpenMode, SectionType);
- FreePool (CwdPlusPathName);
- return File;
- }
-
- DevNumber = EblConvertDevStringToNumber ((CHAR8 *)PathName);
- }
-
- File->DeviceName = AllocatePool (StrLen);
- AsciiStrCpyS (File->DeviceName, StrLen, PathName);
- File->DeviceName[FileStart - 1] = '\0';
- File->FileName = &File->DeviceName[FileStart];
- if (File->FileName[0] == '\0') {
- // if it is just a file name use / as root
- File->FileName = "\\";
- }
-
- //
- // Use best match algorithm on the dev names so we only need to look at the
- // first few charters to match the full device name. Short name forms are
- // legal from the caller.
- //
- Status = EFI_SUCCESS;
- if (*PathName == 'f' || *PathName == 'F' || VolumeNameMatch) {
- if (PathName[1] == 's' || PathName[1] == 'S' || VolumeNameMatch) {
- if (DevNumber >= mFsCount) {
- goto ErrorExit;
- }
- File->Type = EfiOpenFileSystem;
- File->EfiHandle = mFs[DevNumber];
- Status = EblFileDevicePath (File, &PathName[FileStart], OpenMode);
-
- } else if (PathName[1] == 'v' || PathName[1] == 'V') {
- if (DevNumber >= mFvCount) {
- goto ErrorExit;
- }
- File->Type = EfiOpenFirmwareVolume;
- File->EfiHandle = mFv[DevNumber];
-
- if ((PathName[FileStart] == '/') || (PathName[FileStart] == '\\')) {
- // Skip leading / as its not really needed for the FV since no directories are supported
- FileStart++;
- }
-
- // Check for 2nd :
- ModifiedSectionType = SectionType;
- for (Index = FileStart; PathName[Index] != '\0'; Index++) {
- if (PathName[Index] == ':') {
- // Support fv0:\DxeCore:0x10
- // This means open the PE32 Section of the file
- ModifiedSectionType = (EFI_SECTION_TYPE)AsciiStrHexToUintn (&PathName[Index + 1]);
- PathName[Index] = '\0';
- }
- }
- File->FvSectionType = ModifiedSectionType;
- Status = EblFvFileDevicePath (File, &PathName[FileStart], ModifiedSectionType);
- }
- } else if ((*PathName == 'A') || (*PathName == 'a')) {
- // Handle a:0x10000000:0x1234 address form a:ADDRESS:SIZE
- File->Type = EfiOpenMemoryBuffer;
- // 1st colon is at PathName[FileStart - 1]
- File->Buffer = (VOID *)AsciiStrHexToUintn (&PathName[FileStart]);
-
- // Find 2nd colon
- while ((PathName[FileStart] != ':') && (PathName[FileStart] != '\0')) {
- FileStart++;
- }
-
- // If we ran out of string, there's no extra data
- if (PathName[FileStart] == '\0') {
- File->Size = 0;
- } else {
- File->Size = AsciiStrHexToUintn (&PathName[FileStart + 1]);
- }
-
- // if there's no number after the second colon, default
- // the end of memory
- if (File->Size == 0) {
- File->Size = (UINTN)(0 - (UINTN)File->Buffer);
- }
-
- File->MaxPosition = File->Size;
- File->BaseOffset = (UINTN)File->Buffer;
-
- } else if (*PathName== 'l' || *PathName == 'L') {
- if (DevNumber >= mLoadFileCount) {
- goto ErrorExit;
- }
- File->Type = EfiOpenLoadFile;
- File->EfiHandle = mLoadFile[DevNumber];
-
- Status = gBS->HandleProtocol (File->EfiHandle, &gEfiLoadFileProtocolGuid, (VOID **)&File->LoadFile);
- if (EFI_ERROR (Status)) {
- goto ErrorExit;
- }
-
- Status = gBS->HandleProtocol (File->EfiHandle, &gEfiDevicePathProtocolGuid, (VOID **)&DevicePath);
- if (EFI_ERROR (Status)) {
- goto ErrorExit;
- }
- File->DevicePath = DuplicateDevicePath (DevicePath);
-
- } else if (*PathName == 'b' || *PathName == 'B') {
- // Handle b#:0x10000000:0x1234 address form b#:ADDRESS:SIZE
- if (DevNumber >= mBlkIoCount) {
- goto ErrorExit;
- }
- File->Type = EfiOpenBlockIo;
- File->EfiHandle = mBlkIo[DevNumber];
- EblFileDevicePath (File, "", OpenMode);
-
- // 1st colon is at PathName[FileStart - 1]
- File->DiskOffset = AsciiStrHexToUintn (&PathName[FileStart]);
-
- // Find 2nd colon
- while ((PathName[FileStart] != ':') && (PathName[FileStart] != '\0')) {
- FileStart++;
- }
-
- // If we ran out of string, there's no extra data
- if (PathName[FileStart] == '\0') {
- Size = 0;
- } else {
- Size = AsciiStrHexToUintn (&PathName[FileStart + 1]);
- }
-
- // if a zero size is passed in (or the size is left out entirely),
- // go to the end of the device.
- if (Size == 0) {
- File->Size = File->Size - File->DiskOffset;
- } else {
- File->Size = Size;
- }
-
- File->MaxPosition = File->Size;
- File->BaseOffset = File->DiskOffset;
- } else if ((*PathName) >= '0' && (*PathName <= '9')) {
-
- // Get current IP address
- Status = EblGetCurrentIpAddress (&Ip);
- if (EFI_ERROR(Status)) {
- AsciiPrint("Device IP Address is not configured.\n");
- goto ErrorExit;
- }
-
-
- // Parse X.X.X.X:Filename, only support IPv4 TFTP for now...
- File->Type = EfiOpenTftp;
- File->IsDirty = FALSE;
- File->IsBufferValid = FALSE;
-
- Status = ConvertIpStringToEfiIp (PathName, &File->ServerIp);
- }
-
- if (EFI_ERROR (Status)) {
- goto ErrorExit;
- }
-
- GuardFile = (EFI_OPEN_FILE_GUARD *)AllocateZeroPool (sizeof (EFI_OPEN_FILE_GUARD));
- if (GuardFile == NULL) {
- goto ErrorExit;
- }
-
- GuardFile->Header = EFI_OPEN_FILE_GUARD_HEADER;
- CopyMem (&(GuardFile->File), &FileData, sizeof (EFI_OPEN_FILE));
- GuardFile->Footer = EFI_OPEN_FILE_GUARD_FOOTER;
-
- return &(GuardFile->File);
-
-ErrorExit:
- FreePool (File->DeviceName);
- return NULL;
-}
-
-#define FILE_COPY_CHUNK 0x01000000
-
-EFI_STATUS
-EfiCopyFile (
- IN CHAR8 *DestinationFile,
- IN CHAR8 *SourceFile
- )
-{
- EFI_OPEN_FILE *Source = NULL;
- EFI_OPEN_FILE *Destination = NULL;
- EFI_STATUS Status = EFI_SUCCESS;
- VOID *Buffer = NULL;
- UINTN Size;
- UINTN Offset;
- UINTN Chunk = FILE_COPY_CHUNK;
-
- Source = EfiOpen (SourceFile, EFI_FILE_MODE_READ, 0);
- if (Source == NULL) {
- AsciiPrint("Source file open error.\n");
- Status = EFI_NOT_FOUND;
- goto Exit;
- }
-
- Destination = EfiOpen (DestinationFile, EFI_FILE_MODE_WRITE | EFI_FILE_MODE_CREATE, 0);
- if (Destination == NULL) {
- AsciiPrint("Destination file open error.\n");
- Status = EFI_NOT_FOUND;
- goto Exit;
- }
-
- Buffer = AllocatePool(FILE_COPY_CHUNK);
- if (Buffer == NULL) {
- Status = EFI_OUT_OF_RESOURCES;
- goto Exit;
- }
-
- Size = EfiTell(Source, NULL);
-
- for (Offset = 0; Offset + FILE_COPY_CHUNK <= Size; Offset += Chunk) {
- Chunk = FILE_COPY_CHUNK;
-
- Status = EfiRead(Source, Buffer, &Chunk);
- if (EFI_ERROR(Status)) {
- AsciiPrint("Read file error %r\n", Status);
- goto Exit;
- }
-
- Status = EfiWrite(Destination, Buffer, &Chunk);
- if (EFI_ERROR(Status)) {
- AsciiPrint("Write file error %r\n", Status);
- goto Exit;
- }
- }
-
- // Any left over?
- if (Offset < Size) {
- Chunk = Size - Offset;
-
- Status = EfiRead(Source, Buffer, &Chunk);
- if (EFI_ERROR(Status)) {
- AsciiPrint("Read file error\n");
- goto Exit;
- }
-
- Status = EfiWrite(Destination, Buffer, &Chunk);
- if (EFI_ERROR(Status)) {
- AsciiPrint("Write file error\n");
- goto Exit;
- }
- }
-
-Exit:
- if (Source != NULL) {
- Status = EfiClose(Source);
- if (EFI_ERROR(Status)) {
- AsciiPrint("Source close error");
- }
- }
-
- if (Destination != NULL) {
- Status = EfiClose(Destination);
- if (EFI_ERROR(Status)) {
- AsciiPrint("Destination close error");
- }
- }
-
- if (Buffer != NULL) {
- FreePool(Buffer);
- }
-
- return Status;
-}
-
-/**
-Use DeviceType and Index to form a valid PathName and try and open it.
-
-@param DeviceType Device type to open
-@param Index Device Index to use. Zero relative.
-
-@return NULL Open failed
-@return Valid EFI_OPEN_FILE handle
-
-**/
-EFI_OPEN_FILE *
-EfiDeviceOpenByType (
- IN EFI_OPEN_FILE_TYPE DeviceType,
- IN UINTN Index
- )
-{
- CHAR8 *DevStr;
- CHAR8 Path[MAX_CMD_LINE];
-
- switch (DeviceType) {
- case EfiOpenLoadFile:
- DevStr = "loadfile%d:";
- break;
- case EfiOpenFirmwareVolume:
- DevStr = "fv%d:";
- break;
- case EfiOpenFileSystem:
- DevStr = "fs%d:";
- break;
- case EfiOpenBlockIo:
- DevStr = "blk%d:";
- break;
- case EfiOpenMemoryBuffer:
- DevStr = "a%d:";
- break;
- default:
- return NULL;
- }
-
- AsciiSPrint (Path, MAX_PATHNAME, DevStr, Index);
-
- return EfiOpen (Path, EFI_FILE_MODE_READ, 0);
-}
-
-
-/**
-Close a file handle opened by EfiOpen() and free all resources allocated by
-EfiOpen().
-
-@param Stream Open File Handle
-
-@return EFI_INVALID_PARAMETER Stream is not an Open File
-@return EFI_SUCCESS Steam closed
-
-**/
-EFI_STATUS
-EfiClose (
- IN EFI_OPEN_FILE *File
- )
-{
- EFI_STATUS Status;
- UINT64 TftpBufferSize;
-
- if (!FileHandleValid (File)) {
- return EFI_INVALID_PARAMETER;
- }
-
- //Write the buffer contents to TFTP file.
- if ((File->Type == EfiOpenTftp) && (File->IsDirty)) {
-
- TftpBufferSize = File->Size;
- Status = EblMtftp (
- EFI_PXE_BASE_CODE_TFTP_WRITE_FILE,
- File->Buffer,
- TRUE,
- &TftpBufferSize,
- NULL,
- &File->ServerIp,
- (UINT8 *)File->FileName,
- NULL,
- FALSE
- );
- if (EFI_ERROR(Status)) {
- AsciiPrint("TFTP error during APPLE_NSP_TFTP_WRITE_FILE: %r\n", Status);
- return Status;
- }
- }
-
- if ((File->Type == EfiOpenLoadFile) ||
- ((File->Type == EfiOpenTftp) && (File->IsBufferValid == TRUE)) ||
- ((File->Type == EfiOpenFirmwareVolume) && (File->IsBufferValid == TRUE))) {
- EblFreePool(File->Buffer);
- }
-
- EblFreePool (File->DevicePath);
- EblFreePool (File->DeviceName);
- EblFreePool (File->FsFileInfo);
- EblFreePool (File->FsInfo);
-
- if (File->FsFileHandle != NULL) {
- File->FsFileHandle->Close (File->FsFileHandle);
- }
-
- // Need to free File and it's Guard structures
- EblFreePool (BASE_CR (File, EFI_OPEN_FILE_GUARD, File));
- return EFI_SUCCESS;
-}
-
-
-/**
-Return the size of the file represented by Stream. Also return the current
-Seek position. Opening a file will enable a valid file size to be returned.
-LoadFile is an exception as a load file size is set to zero.
-
-@param Stream Open File Handle
-
-@return 0 Stream is not an Open File or a valid LoadFile handle
-
-**/
-UINTN
-EfiTell (
- IN EFI_OPEN_FILE *File,
- OUT EFI_LBA *CurrentPosition OPTIONAL
- )
-{
- EFI_STATUS Status;
- UINT64 BufferSize = 0;
-
- if (!FileHandleValid (File)) {
- return 0;
- }
-
- if (CurrentPosition != NULL) {
- *CurrentPosition = File->CurrentPosition;
- }
-
- if (File->Type == EfiOpenLoadFile) {
- // Figure out the File->Size
- File->Buffer = NULL;
- File->Size = 0;
- Status = File->LoadFile->LoadFile (File->LoadFile, File->DevicePath, FALSE, &File->Size, File->Buffer);
- if (Status != EFI_BUFFER_TOO_SMALL) {
- return 0;
- }
-
- File->MaxPosition = (UINT64)File->Size;
- } else if (File->Type == EfiOpenTftp) {
-
- Status = EblMtftp (
- EFI_PXE_BASE_CODE_TFTP_GET_FILE_SIZE,
- NULL,
- FALSE,
- &BufferSize,
- NULL,
- &File->ServerIp,
- (UINT8 *)File->FileName,
- NULL,
- TRUE
- );
- if (EFI_ERROR(Status)) {
- AsciiPrint("TFTP error during APPLE_NSP_TFTP_GET_FILE_SIZE: %r\n", Status);
- return 0;
- }
-
- File->Size = (UINTN)BufferSize;
- File->MaxPosition = File->Size;
- }
-
- return File->Size;
-}
-
-
-/**
-Seek to the Offset location in the file. LoadFile and FV device types do
-not support EfiSeek(). It is not possible to grow the file size using
-EfiSeek().
-
-SeekType defines how use Offset to calculate the new file position:
-EfiSeekStart : Position = Offset
-EfiSeekCurrent: Position is Offset bytes from the current position
-EfiSeekEnd : Only supported if Offset is zero to seek to end of file.
-
-@param Stream Open File Handle
-@param Offset Offset to seek too.
-@param SeekType Type of seek to perform
-
-
-@return EFI_INVALID_PARAMETER Stream is not an Open File
-@return EFI_UNSUPPORTED LoadFile and FV do not support Seek
-@return EFI_NOT_FOUND Seek past the end of the file.
-@return EFI_SUCCESS Steam closed
-
-**/
-EFI_STATUS
-EfiSeek (
- IN EFI_OPEN_FILE *File,
- IN EFI_LBA Offset,
- IN EFI_SEEK_TYPE SeekType
- )
-{
- EFI_STATUS Status;
- UINT64 CurrentPosition;
-
- if (!FileHandleValid (File)) {
- return EFI_INVALID_PARAMETER;
- }
-
- if (File->Type == EfiOpenLoadFile) {
- // LoadFile does not support Seek
- return EFI_UNSUPPORTED;
- }
-
- CurrentPosition = File->CurrentPosition;
- switch (SeekType) {
- case EfiSeekStart:
- if (Offset > File->MaxPosition) {
- return EFI_NOT_FOUND;
- }
- CurrentPosition = Offset;
- break;
-
- case EfiSeekCurrent:
- if ((File->CurrentPosition + Offset) > File->MaxPosition) {
- return EFI_NOT_FOUND;
- }
- CurrentPosition += Offset;
- break;
-
- case EfiSeekEnd:
- if (Offset != 0) {
- // We don't support growing file size via seeking past end of file
- return EFI_UNSUPPORTED;
- }
- CurrentPosition = File->MaxPosition;
- break;
-
- default:
- return EFI_NOT_FOUND;
- }
-
- Status = EFI_SUCCESS;
- if (File->FsFileHandle != NULL) {
- Status = File->FsFileHandle->SetPosition (File->FsFileHandle, CurrentPosition);
- }
-
- if (!EFI_ERROR (Status)) {
- File->CurrentPosition = CurrentPosition;
- }
-
- return Status;
-}
-
-EFI_STATUS
-CacheTftpFile (
- IN OUT EFI_OPEN_FILE *File
- )
-{
- EFI_STATUS Status;
- UINT64 TftpBufferSize;
-
- if (File->IsBufferValid) {
- return EFI_SUCCESS;
- }
-
- // Make sure the file size is set.
- EfiTell (File, NULL);
-
- //Allocate a buffer to hold the whole file.
- File->Buffer = AllocatePool(File->Size);
- if (File->Buffer == NULL) {
- return EFI_OUT_OF_RESOURCES;
- }
-
- TftpBufferSize = File->Size;
-
- Status = EblMtftp (
- EFI_PXE_BASE_CODE_TFTP_READ_FILE,
- File->Buffer,
- FALSE,
- &TftpBufferSize,
- NULL,
- &File->ServerIp,
- (UINT8 *)File->FileName,
- NULL,
- FALSE);
- if (EFI_ERROR(Status)) {
- AsciiPrint("TFTP error during APPLE_NSP_TFTP_READ_FILE: %r\n", Status);
- FreePool(File->Buffer);
- return Status;
- }
-
- // Set the buffer valid flag.
- File->IsBufferValid = TRUE;
-
- return Status;
-}
-
-/**
-Read BufferSize bytes from the current location in the file. For load file,
-FV, and TFTP case you must read the entire file.
-
-@param Stream Open File Handle
-@param Buffer Caller allocated buffer.
-@param BufferSize Size of buffer in bytes.
-
-
-@return EFI_SUCCESS Stream is not an Open File
-@return EFI_END_OF_FILE Tried to read past the end of the file
-@return EFI_INVALID_PARAMETER Stream is not an open file handle
-@return EFI_BUFFER_TOO_SMALL Buffer is not big enough to do the read
-@return "other" Error returned from device read
-
-**/
-EFI_STATUS
-EfiRead (
- IN EFI_OPEN_FILE *File,
- OUT VOID *Buffer,
- OUT UINTN *BufferSize
- )
-{
- EFI_STATUS Status;
- UINT32 AuthenticationStatus;
- EFI_DISK_IO_PROTOCOL *DiskIo;
-
- if (!FileHandleValid (File)) {
- return EFI_INVALID_PARAMETER;
- }
-
- // Don't read past the end of the file.
- if ((File->CurrentPosition + *BufferSize) > File->MaxPosition) {
- return EFI_END_OF_FILE;
- }
-
- switch (File->Type) {
- case EfiOpenLoadFile:
- // Figure out the File->Size
- EfiTell (File, NULL);
-
- Status = File->LoadFile->LoadFile (File->LoadFile, File->DevicePath, FALSE, BufferSize, Buffer);
- break;
-
- case EfiOpenFirmwareVolume:
- if (CompareGuid (&File->FvNameGuid, &gZeroGuid)) {
- // This is the entire FV device, so treat like a memory buffer
- CopyMem (Buffer, (VOID *)(UINTN)(File->FvStart + File->CurrentPosition), *BufferSize);
- File->CurrentPosition += *BufferSize;
- Status = EFI_SUCCESS;
- } else {
- if (File->Buffer == NULL) {
- if (File->FvSectionType == EFI_SECTION_ALL) {
- Status = File->Fv->ReadFile (
- File->Fv,
- &File->FvNameGuid,
- (VOID **)&File->Buffer,
- &File->Size,
- &File->FvType,
- &File->FvAttributes,
- &AuthenticationStatus
- );
- } else {
- Status = File->Fv->ReadSection (
- File->Fv,
- &File->FvNameGuid,
- File->FvSectionType,
- 0,
- (VOID **)&File->Buffer,
- &File->Size,
- &AuthenticationStatus
- );
- }
- if (EFI_ERROR (Status)) {
- return Status;
- }
- File->IsBufferValid = TRUE;
- }
- // Operate on the cached buffer so Seek will work
- CopyMem (Buffer, File->Buffer + File->CurrentPosition, *BufferSize);
- File->CurrentPosition += *BufferSize;
- Status = EFI_SUCCESS;
- }
- break;
-
- case EfiOpenMemoryBuffer:
- CopyMem (Buffer, File->Buffer + File->CurrentPosition, *BufferSize);
- File->CurrentPosition += *BufferSize;
- Status = EFI_SUCCESS;
- break;
-
- case EfiOpenFileSystem:
- Status = File->FsFileHandle->Read (File->FsFileHandle, BufferSize, Buffer);
- File->CurrentPosition += *BufferSize;
- break;
-
- case EfiOpenBlockIo:
- Status = gBS->HandleProtocol(File->EfiHandle, &gEfiDiskIoProtocolGuid, (VOID **)&DiskIo);
- if (!EFI_ERROR(Status)) {
- Status = DiskIo->ReadDisk(DiskIo, File->FsBlockIoMedia->MediaId, File->DiskOffset + File->CurrentPosition, *BufferSize, Buffer);
- }
- File->CurrentPosition += *BufferSize;
- break;
-
- case EfiOpenTftp:
- // Cache the file if it hasn't been cached yet.
- if (File->IsBufferValid == FALSE) {
- Status = CacheTftpFile (File);
- if (EFI_ERROR (Status)) {
- return Status;
- }
- }
-
- // Copy out the requested data
- CopyMem (Buffer, File->Buffer + File->CurrentPosition, *BufferSize);
- File->CurrentPosition += *BufferSize;
-
- Status = EFI_SUCCESS;
- break;
-
- default:
- return EFI_INVALID_PARAMETER;
- };
-
- return Status;
-}
-
-
-/**
-Read the entire file into a buffer. This routine allocates the buffer and
-returns it to the user full of the read data.
-
-This is very useful for load file where it's hard to know how big the buffer
-must be.
-
-@param Stream Open File Handle
-@param Buffer Pointer to buffer to return.
-@param BufferSize Pointer to Size of buffer return..
-
-
-@return EFI_SUCCESS Stream is not an Open File
-@return EFI_END_OF_FILE Tried to read past the end of the file
-@return EFI_INVALID_PARAMETER Stream is not an open file handle
-@return EFI_BUFFER_TOO_SMALL Buffer is not big enough to do the read
-@return "other" Error returned from device read
-
-**/
-EFI_STATUS
-EfiReadAllocatePool (
- IN EFI_OPEN_FILE *File,
- OUT VOID **Buffer,
- OUT UINTN *BufferSize
- )
-{
- if (!FileHandleValid (File)) {
- return EFI_INVALID_PARAMETER;
- }
-
- // Loadfile defers file size determination on Open so use tell to find it
- EfiTell (File, NULL);
-
- *BufferSize = File->Size;
- *Buffer = AllocatePool (*BufferSize);
- if (*Buffer == NULL) {
- return EFI_NOT_FOUND;
- }
-
- return EfiRead (File, *Buffer, BufferSize);
-}
-
-
-/**
-Write data back to the file. For TFTP case you must write the entire file.
-
-@param Stream Open File Handle
-@param Buffer Pointer to buffer to return.
-@param BufferSize Pointer to Size of buffer return..
-
-
-@return EFI_SUCCESS Stream is not an Open File
-@return EFI_END_OF_FILE Tried to read past the end of the file
-@return EFI_INVALID_PARAMETER Stream is not an open file handle
-@return EFI_BUFFER_TOO_SMALL Buffer is not big enough to do the read
-@return "other" Error returned from device write
-
-**/
-EFI_STATUS
-EfiWrite (
- IN EFI_OPEN_FILE *File,
- OUT VOID *Buffer,
- OUT UINTN *BufferSize
- )
-{
- EFI_STATUS Status;
- EFI_FV_WRITE_FILE_DATA FileData;
- EFI_DISK_IO_PROTOCOL *DiskIo;
-
- if (!FileHandleValid (File)) {
- return EFI_INVALID_PARAMETER;
- }
-
- switch (File->Type) {
- case EfiOpenMemoryBuffer:
- if ((File->CurrentPosition + *BufferSize) > File->MaxPosition) {
- return EFI_END_OF_FILE;
- }
-
- CopyMem (File->Buffer + File->CurrentPosition, Buffer, *BufferSize);
- File->CurrentPosition += *BufferSize;
- Status = EFI_SUCCESS;
-
- case EfiOpenLoadFile:
- // LoadFile device is read only be definition
- Status = EFI_UNSUPPORTED;
-
- case EfiOpenFirmwareVolume:
- if (File->FvSectionType != EFI_SECTION_ALL) {
- // Writes not support to a specific section. You have to update entire file
- return EFI_UNSUPPORTED;
- }
-
- FileData.NameGuid = &(File->FvNameGuid);
- FileData.Type = File->FvType;
- FileData.FileAttributes = File->FvAttributes;
- FileData.Buffer = Buffer;
- FileData.BufferSize = (UINT32)*BufferSize;
- Status = File->Fv->WriteFile (File->Fv, 1, EFI_FV_UNRELIABLE_WRITE, &FileData);
- break;
-
- case EfiOpenFileSystem:
- Status = File->FsFileHandle->Write (File->FsFileHandle, BufferSize, Buffer);
- File->CurrentPosition += *BufferSize;
- break;
-
- case EfiOpenBlockIo:
- if ((File->CurrentPosition + *BufferSize) > File->MaxPosition) {
- return EFI_END_OF_FILE;
- }
-
- Status = gBS->HandleProtocol (File->EfiHandle, &gEfiDiskIoProtocolGuid, (VOID **)&DiskIo);
- if (!EFI_ERROR(Status)) {
- Status = DiskIo->WriteDisk (DiskIo, File->FsBlockIoMedia->MediaId, File->DiskOffset + File->CurrentPosition, *BufferSize, Buffer);
- }
- File->CurrentPosition += *BufferSize;
- break;
-
- case EfiOpenTftp:
- // Cache the file if it hasn't been cached yet.
- if (File->IsBufferValid == FALSE) {
- Status = CacheTftpFile(File);
- if (EFI_ERROR(Status)) {
- return Status;
- }
- }
-
- // Don't overwrite the buffer
- if ((File->CurrentPosition + *BufferSize) > File->MaxPosition) {
- UINT8 *TempBuffer;
-
- TempBuffer = File->Buffer;
-
- File->Buffer = AllocatePool ((UINTN)(File->CurrentPosition + *BufferSize));
- if (File->Buffer == NULL) {
- return EFI_OUT_OF_RESOURCES;
- }
-
- CopyMem (File->Buffer, TempBuffer, File->Size);
-
- FreePool (TempBuffer);
-
- File->Size = (UINTN)(File->CurrentPosition + *BufferSize);
- File->MaxPosition = (UINT64)File->Size;
- }
-
- // Copy in the requested data
- CopyMem (File->Buffer + File->CurrentPosition, Buffer, *BufferSize);
- File->CurrentPosition += *BufferSize;
-
- // Mark the file dirty
- File->IsDirty = TRUE;
-
- Status = EFI_SUCCESS;
- break;
-
- default:
- Status = EFI_INVALID_PARAMETER;
- };
-
- return Status;
-}
-
-
-/**
-Given Cwd expand Path to remove .. and replace them with real
-directory names.
-
-@param Cwd Current Working Directory
-@param Path Path to expand
-
-@return NULL Cwd or Path are not valid
-@return 'other' Path with .. expanded
-
-**/
-CHAR8 *
-ExpandPath (
- IN CHAR8 *Cwd,
- IN CHAR8 *Path
- )
-{
- CHAR8 *NewPath;
- CHAR8 *Work, *Start, *End;
- UINTN StrLen, AllocLen;
- INTN i;
-
- if (Cwd == NULL || Path == NULL) {
- return NULL;
- }
-
- StrLen = AsciiStrSize (Cwd);
- if (StrLen <= 2) {
- // Smallest valid path is 1 char and a null
- return NULL;
- }
-
- StrLen = AsciiStrSize (Path);
- AllocLen = AsciiStrSize (Cwd) + StrLen + 1;
- NewPath = AllocatePool (AllocLen);
- if (NewPath == NULL) {
- return NULL;
- }
- AsciiStrCpyS (NewPath, AllocLen, Cwd);
-
- End = Path + StrLen;
- for (Start = Path ;;) {
- Work = AsciiStrStr (Start, "..") ;
- if (Work == NULL) {
- // Remaining part of Path contains no more ..
- break;
- }
-
- // append path prior to ..
- AsciiStrnCatS (NewPath, AllocLen, Start, Work - Start);
- StrLen = AsciiStrLen (NewPath);
- for (i = StrLen; i >= 0; i--) {
- if (NewPath[i] == ':') {
- // too many ..
- return NULL;
- }
- if (NewPath[i] == '/' || NewPath[i] == '\\') {
- if ((i > 0) && (NewPath[i-1] == ':')) {
- // leave the / before a :
- NewPath[i+1] = '\0';
- } else {
- // replace / will Null to remove trailing file/dir reference
- NewPath[i] = '\0';
- }
- break;
- }
- }
-
- Start = Work + 3;
- }
-
- // Handle the path that remains after the ..
- AsciiStrnCatS (NewPath, AllocLen, Start, End - Start);
-
- return NewPath;
-}
-
-
-/**
-Set the Current Working Directory (CWD). If a call is made to EfiOpen () and
-the path does not contain a device name, The CWD is prepended to the path.
-
-@param Cwd Current Working Directory to set
-
-
-@return EFI_SUCCESS CWD is set
-@return EFI_INVALID_PARAMETER Cwd is not a valid device:path
-
-**/
-EFI_STATUS
-EfiSetCwd (
- IN CHAR8 *Cwd
- )
-{
- EFI_OPEN_FILE *File;
- UINTN Len, AllocLen;
- CHAR8 *Path;
-
- if (Cwd == NULL) {
- return EFI_INVALID_PARAMETER;
- }
-
- if (AsciiStrCmp (Cwd, ".") == 0) {
- // cd . is a no-op
- return EFI_SUCCESS;
- }
-
- Path = Cwd;
- if (AsciiStrStr (Cwd, "..") != NULL) {
- if (gCwd == NULL) {
- // no parent
- return EFI_SUCCESS;
- }
-
- Len = AsciiStrLen (gCwd);
- if ((gCwd[Len-2] == ':') && ((gCwd[Len-1] == '/') || (gCwd[Len-1] == '\\'))) {
- // parent is device so nothing to do
- return EFI_SUCCESS;
- }
-
- // Expand .. in Cwd, given we know current working directory
- Path = ExpandPath (gCwd, Cwd);
- if (Path == NULL) {
- return EFI_NOT_FOUND;
- }
- }
-
- File = EfiOpen (Path, EFI_FILE_MODE_READ, 0);
- if (File == NULL) {
- return EFI_INVALID_PARAMETER;
- }
-
- if (gCwd != NULL) {
- FreePool (gCwd);
- }
-
- // Use the info returned from EfiOpen as it can add in CWD if needed. So Cwd could be
- // relative to the current gCwd or not.
- AllocLen = AsciiStrSize (File->DeviceName) + AsciiStrSize (File->FileName) + 10;
- gCwd = AllocatePool (AllocLen);
- if (gCwd == NULL) {
- return EFI_INVALID_PARAMETER;
- }
-
- AsciiStrCpyS (gCwd, AllocLen, File->DeviceName);
- if (File->FileName == NULL) {
- AsciiStrCatS (gCwd, AllocLen, ":\\");
- } else {
- AsciiStrCatS (gCwd, AllocLen, ":");
- AsciiStrCatS (gCwd, AllocLen, File->FileName);
- }
-
-
- EfiClose (File);
- if (Path != Cwd) {
- FreePool (Path);
- }
- return EFI_SUCCESS;
-}
-
-
-/**
-Set the Current Working Directory (CWD). If a call is made to EfiOpen () and
-the path does not contain a device name, The CWD is prepended to the path.
-The CWD buffer is only valid until a new call is made to EfiSetCwd(). After
-a call to EfiSetCwd() it is not legal to use the pointer returned by
-this function.
-
-@param Cwd Current Working Directory
-
-
-@return "" No CWD set
-@return 'other' Returns buffer that contains CWD.
-
-**/
-CHAR8 *
-EfiGetCwd (
- VOID
- )
-{
- if (gCwd == NULL) {
- return "";
- }
- return gCwd;
-}
-
-
diff --git a/EmbeddedPkg/Library/EfiFileLib/EfiFileLib.inf b/EmbeddedPkg/Library/EfiFileLib/EfiFileLib.inf
deleted file mode 100644
index b8cb255268a5..000000000000
--- a/EmbeddedPkg/Library/EfiFileLib/EfiFileLib.inf
+++ /dev/null
@@ -1,64 +0,0 @@
-#/** @file
-# Component description file for the entry point to a EFIDXE Drivers
-#
-# Library to abstract Framework extensions that conflict with UEFI 2.0 Specification
-# Copyright (c) 2007 - 2007, Intel Corporation. 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
-# http://opensource.org/licenses/bsd-license.php
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-#
-#**/
-
-[Defines]
- INF_VERSION = 0x00010005
- BASE_NAME = EfiFileLib
- FILE_GUID = d8c640db-73ba-48f5-a7ed-8e93c6012491
- MODULE_TYPE = UEFI_DRIVER
- VERSION_STRING = 1.0
- LIBRARY_CLASS = EfiFileLib|DXE_DRIVER UEFI_APPLICATION UEFI_DRIVER
-
-
-#
-# The following information is for reference only and not required by the build tools.
-#
-# VALID_ARCHITECTURES = IA32 X64 IPF EBC
-#
-
-[Sources.common]
- EfiFileLib.c
-
-[Packages]
- MdePkg/MdePkg.dec
- MdeModulePkg/MdeModulePkg.dec
- IntelFrameworkPkg/IntelFrameworkPkg.dec
- EmbeddedPkg/EmbeddedPkg.dec
-
-[LibraryClasses]
- BaseLib
- MemoryAllocationLib
- DevicePathLib
- PrintLib
- BaseMemoryLib
- UefiLib
- UefiBootServicesTableLib
- UefiRuntimeServicesTableLib
- DebugLib
- EblNetworkLib
-
-[Protocols]
- gEfiBlockIoProtocolGuid # PROTOCOL SOMETIMES_CONSUMED
- gEfiDiskIoProtocolGuid # PROTOCOL SOMETIMES_CONSUMED
- gEfiSimpleFileSystemProtocolGuid # PROTOCOL SOMETIMES_CONSUMED
- gEfiFirmwareVolume2ProtocolGuid # PROTOCOL SOMETIMES_CONSUMED
- gEfiLoadFileProtocolGuid # PROTOCOL SOMETIMES_CONSUMED
- gEfiFirmwareVolumeBlockProtocolGuid # PROTOCOL SOMETIMES_CONSUMED
-
-[Guids]
- gEfiFileInfoGuid
- gEfiFileSystemInfoGuid
- gZeroGuid
diff --git a/Omap35xxPkg/Library/EblCmdLib/EblCmdLib.c b/Omap35xxPkg/Library/EblCmdLib/EblCmdLib.c
deleted file mode 100644
index 47161755de84..000000000000
--- a/Omap35xxPkg/Library/EblCmdLib/EblCmdLib.c
+++ /dev/null
@@ -1,72 +0,0 @@
-/** @file
- Add custom commands for BeagleBoard development.
-
- Copyright (c) 2008 - 2009, Apple Inc. 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
- http://opensource.org/licenses/bsd-license.php
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
-**/
-
-#include <PiDxe.h>
-#include <Library/ArmLib.h>
-#include <Library/CacheMaintenanceLib.h>
-#include <Library/EblCmdLib.h>
-#include <Library/BaseLib.h>
-#include <Library/DebugLib.h>
-#include <Library/UefiBootServicesTableLib.h>
-#include <Library/UefiRuntimeServicesTableLib.h>
-#include <Library/MemoryAllocationLib.h>
-#include <Library/UefiLib.h>
-#include <Library/PcdLib.h>
-#include <Library/EfiFileLib.h>
-
-
-//PcdEmbeddedFdBaseAddress
-
-/**
- Fill Me In
-
- Argv[0] - "%CommandName%"
-
- @param Argc Number of command arguments in Argv
- @param Argv Array of strings that represent the parsed command line.
- Argv[0] is the command name
-
- @return EFI_SUCCESS
-
-**/
-EFI_STATUS
-EblEdk2Cmd (
- IN UINTN Argc,
- IN CHAR8 **Argv
- )
-{
- return EFI_SUCCESS;
-}
-
-
-GLOBAL_REMOVE_IF_UNREFERENCED const EBL_COMMAND_TABLE mLibCmdTemplate[] =
-{
- {
- "edk2",
- " filename ; Load FD into memory and boot from it",
- NULL,
- EblEdk2Cmd
- }
-};
-
-
-VOID
-EblInitializeExternalCmd (
- VOID
- )
-{
- EblAddCommands (mLibCmdTemplate, sizeof (mLibCmdTemplate)/sizeof (EBL_COMMAND_TABLE));
- return;
-}
diff --git a/Omap35xxPkg/Library/EblCmdLib/EblCmdLib.inf b/Omap35xxPkg/Library/EblCmdLib/EblCmdLib.inf
deleted file mode 100644
index dd7a13cf6629..000000000000
--- a/Omap35xxPkg/Library/EblCmdLib/EblCmdLib.inf
+++ /dev/null
@@ -1,48 +0,0 @@
-#/** @file
-# Component description file for the entry point to a EFIDXE Drivers
-#
-# Library to abstract Framework extensions that conflict with UEFI 2.0 Specification
-# Copyright (c) 2007 - 2007, Intel Corporation. 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
-# http://opensource.org/licenses/bsd-license.php
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-#
-#**/
-
-[Defines]
- INF_VERSION = 0x00010005
- BASE_NAME = BeagleBoardEblCmdLib
- FILE_GUID = ea62bdc3-1063-425f-8851-98cb47f213a8
- MODULE_TYPE = UEFI_DRIVER
- VERSION_STRING = 1.0
- LIBRARY_CLASS = EblCmdLib|DXE_DRIVER UEFI_APPLICATION UEFI_DRIVER
-
-
-#
-# The following information is for reference only and not required by the build tools.
-#
-# VALID_ARCHITECTURES = IA32 X64 IPF EBC
-#
-
-[Sources.common]
- EblCmdLib.c
-
-[Packages]
- MdePkg/MdePkg.dec
- EmbeddedPkg/EmbeddedPkg.dec
- ArmPkg/ArmPkg.dec
-
-[LibraryClasses]
- BaseLib
- DebugLib
-
-[Protocols]
-
-[Guids]
-
-[Pcd]
diff --git a/Omap35xxPkg/Omap35xxPkg.dsc b/Omap35xxPkg/Omap35xxPkg.dsc
index c5d9746104e6..f150d544ab16 100644
--- a/Omap35xxPkg/Omap35xxPkg.dsc
+++ b/Omap35xxPkg/Omap35xxPkg.dsc
@@ -180,7 +180,6 @@ [Components.common]
Omap35xxPkg/LcdGraphicsOutputDxe/LcdGraphicsOutputDxe.inf
Omap35xxPkg/Library/DebugAgentTimerLib/DebugAgentTimerLib.inf
- Omap35xxPkg/Library/EblCmdLib/EblCmdLib.inf
Omap35xxPkg/Library/GdbSerialLib/GdbSerialLib.inf
Omap35xxPkg/Library/RealTimeClockLib/RealTimeClockLib.inf
Omap35xxPkg/Library/SerialPortLib/SerialPortLib.inf
--
2.11.0
^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [PATCH] EmbeddedPkg Omap35xxPkg: remove EBL and associated libraries
2017-11-15 15:45 [PATCH] EmbeddedPkg Omap35xxPkg: remove EBL and associated libraries Ard Biesheuvel
@ 2017-11-24 17:21 ` Leif Lindholm
2017-11-26 11:16 ` Ard Biesheuvel
0 siblings, 1 reply; 3+ messages in thread
From: Leif Lindholm @ 2017-11-24 17:21 UTC (permalink / raw)
To: Ard Biesheuvel; +Cc: edk2-devel, afish
On Wed, Nov 15, 2017 at 03:45:53PM +0000, Ard Biesheuvel wrote:
> EBL is a deprecated, small memory footprint alternative for the
> UEFI Shell that is no longer in use by any platforms in EDK2 or
> in edk2-platforms. To avoid confusion, let's remove it from the
> tree.
Yes, please.
If someone in the future wants to use this seriously (instead of just
finding it easier to add commands to than the UEFI shell), we can
easily resurrect it.
> Contributed-under: TianoCore Contribution Agreement 1.1
> Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Reviewed-by: Leif Lindholm <leif.lindholm@linaro.org>
> ---
> BeagleBoardPkg/BeagleBoardPkg.dsc | 3 -
> EmbeddedPkg/Ebl/CmdTemplate.c | 65 -
> EmbeddedPkg/Ebl/Command.c | 925 ----------
> EmbeddedPkg/Ebl/Dir.c | 357 ----
> EmbeddedPkg/Ebl/Ebl.h | 210 ---
> EmbeddedPkg/Ebl/Ebl.inf | 111 --
> EmbeddedPkg/Ebl/EfiDevice.c | 1060 ------------
> EmbeddedPkg/Ebl/Hob.c | 234 ---
> EmbeddedPkg/Ebl/HwDebug.c | 346 ----
> EmbeddedPkg/Ebl/HwIoDebug.c | 154 --
> EmbeddedPkg/Ebl/Main.c | 677 --------
> EmbeddedPkg/Ebl/Network.c | 106 --
> EmbeddedPkg/Ebl/Script.c | 128 --
> EmbeddedPkg/Ebl/Variable.c | 221 ---
> EmbeddedPkg/EblExternCmd/EntryPointGlue.c | 154 --
> EmbeddedPkg/EblExternCmd/Main.c | 53 -
> EmbeddedPkg/EmbeddedPkg.dec | 6 -
> EmbeddedPkg/EmbeddedPkg.dsc | 10 -
> EmbeddedPkg/EmbeddedPkg.fdf | 141 --
> EmbeddedPkg/Include/Library/EblAddExternalCommandLib.h | 122 --
> EmbeddedPkg/Include/Library/EblCmdLib.h | 51 -
> EmbeddedPkg/Include/Library/EblNetworkLib.h | 68 -
> EmbeddedPkg/Include/Protocol/EblAddCommand.h | 142 --
> EmbeddedPkg/Library/EblAddExternalCommandLib/EblAddExternalCommandLib.c | 155 --
> EmbeddedPkg/Library/EblAddExternalCommandLib/EblAddExternalCommandLib.inf | 47 -
> EmbeddedPkg/Library/EblCmdLibNull/EblCmdLibNull.c | 28 -
> EmbeddedPkg/Library/EblCmdLibNull/EblCmdLibNull.inf | 43 -
> EmbeddedPkg/Library/EblNetworkLib/EblNetworkLib.c | 173 --
> EmbeddedPkg/Library/EblNetworkLib/EblNetworkLib.inf | 34 -
> EmbeddedPkg/Library/EfiFileLib/EfiFileLib.c | 1784 --------------------
> EmbeddedPkg/Library/EfiFileLib/EfiFileLib.inf | 64 -
> Omap35xxPkg/Library/EblCmdLib/EblCmdLib.c | 72 -
> Omap35xxPkg/Library/EblCmdLib/EblCmdLib.inf | 48 -
> Omap35xxPkg/Omap35xxPkg.dsc | 1 -
> 34 files changed, 7793 deletions(-)
>
> diff --git a/BeagleBoardPkg/BeagleBoardPkg.dsc b/BeagleBoardPkg/BeagleBoardPkg.dsc
> index 30f6fd02e82f..b342672c3877 100644
> --- a/BeagleBoardPkg/BeagleBoardPkg.dsc
> +++ b/BeagleBoardPkg/BeagleBoardPkg.dsc
> @@ -60,8 +60,6 @@ [LibraryClasses.common]
> PerformanceLib|MdePkg/Library/BasePerformanceLibNull/BasePerformanceLibNull.inf
> PrintLib|MdePkg/Library/BasePrintLib/BasePrintLib.inf
>
> - EfiFileLib|EmbeddedPkg/Library/EfiFileLib/EfiFileLib.inf
> -
> # These libraries are used by the dynamic EFI Shell commands
> ShellLib|ShellPkg/Library/UefiShellLib/UefiShellLib.inf
> FileHandleLib|MdePkg/Library/UefiFileHandleLib/UefiFileHandleLib.inf
> @@ -265,7 +263,6 @@ [PcdsFeatureFlag.common]
> [PcdsFixedAtBuild.common]
> gArmPlatformTokenSpaceGuid.PcdFirmwareVendor|"Beagle Board"
>
> - gEmbeddedTokenSpaceGuid.PcdEmbeddedPrompt|"BeagleEdk2"
> gEfiMdePkgTokenSpaceGuid.PcdMaximumUnicodeStringLength|1000000
> gEfiMdePkgTokenSpaceGuid.PcdMaximumAsciiStringLength|1000000
> gEfiMdePkgTokenSpaceGuid.PcdMaximumLinkedListLength|1000000
> diff --git a/EmbeddedPkg/Ebl/CmdTemplate.c b/EmbeddedPkg/Ebl/CmdTemplate.c
> deleted file mode 100644
> index 2c291fcaea52..000000000000
> --- a/EmbeddedPkg/Ebl/CmdTemplate.c
> +++ /dev/null
> @@ -1,65 +0,0 @@
> -/** @file
> - %CommandName% for EBL (Embedded Boot Loader)
> -
> - Copyright (c) 2007, Intel Corporation. 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
> - http://opensource.org/licenses/bsd-license.php
> -
> - THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
> - WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
> -
> - Module Name: CmdTemplate.c
> -
> - Search/Replace %CommandName% with the name of your new command
> -
> -**/
> -
> -#include "Ebl.h"
> -
> -
> -/**
> - Fill Me In
> -
> - Argv[0] - "%CommandName%"
> -
> - @param Argc Number of command arguments in Argv
> - @param Argv Array of strings that represent the parsed command line.
> - Argv[0] is the command name
> -
> - @return EFI_SUCCESS
> -
> -**/
> -EFI_STATUS
> -Ebl%CommandName%Cmd (
> - IN UINTN Argc,
> - IN CHAR8 **Argv
> - )
> -{
> - return EFI_SUCCESS;
> -}
> -
> -
> -GLOBAL_REMOVE_IF_UNREFERENCED const EBL_COMMAND_TABLE mCmd%CommandName%Template[] =
> -{
> - {
> - "%CommandName%",
> - " [show args] ; explain args and command",
> - NULL,
> - Ebl%CommandName%Cmd
> - }
> -};
> -
> -
> -/**
> - Initialize the commands in this file
> -**/
> -VOID
> -EblInitialize%CommandName%Cmd (
> - VOID
> - )
> -{
> - EblAddCommands (mCmd%CommandName%Template, sizeof (mCmd%CommandName%Template)/sizeof (EBL_COMMAND_TABLE));
> -}
> -
> diff --git a/EmbeddedPkg/Ebl/Command.c b/EmbeddedPkg/Ebl/Command.c
> deleted file mode 100644
> index 4bc1f4df0ca0..000000000000
> --- a/EmbeddedPkg/Ebl/Command.c
> +++ /dev/null
> @@ -1,925 +0,0 @@
> -/** @file
> - Basic commands and command processing infrastructure for EBL
> -
> - Copyright (c) 2007, Intel Corporation. All rights reserved.<BR>
> - Portions copyright (c) 2008 - 2009, Apple Inc. All rights reserved.<BR>
> - (C) Copyright 2015 Hewlett Packard Enterprise Development LP<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
> - http://opensource.org/licenses/bsd-license.php
> -
> - THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
> - WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
> -
> -**/
> -
> -#include "Ebl.h"
> -#include <Protocol/DiskIo.h>
> -#include <Protocol/BlockIo.h>
> -
> -UINTN mCmdTableMaxIndex = EBL_MAX_COMMAND_COUNT;
> -UINTN mCmdTableNextFreeIndex = 0;
> -EBL_COMMAND_TABLE *mCmdTable[EBL_MAX_COMMAND_COUNT];
> -
> -/**
> - Converts a lowercase Ascii character to upper one
> -
> - If Chr is lowercase Ascii character, then converts it to upper one.
> -
> - If Value >= 0xA0, then ASSERT().
> - If (Value & 0x0F) >= 0x0A, then ASSERT().
> -
> - @param chr one Ascii character
> -
> - @return The uppercase value of Ascii character
> -
> -**/
> -STATIC
> -CHAR8
> -AsciiToUpper (
> - IN CHAR8 Chr
> - )
> -{
> - return (UINT8) ((Chr >= 'a' && Chr <= 'z') ? Chr - ('a' - 'A') : Chr);
> -}
> -
> -
> -/**
> - Case insensitive comparison of two Null-terminated Unicode strings with maximum
> - lengths, and returns the difference between the first mismatched Unicode
> - characters.
> - This function compares the Null-terminated Unicode string FirstString to the
> - Null-terminated Unicode string SecondString. At most, Length Unicode
> - characters will be compared. If Length is 0, then 0 is returned. If
> - FirstString is identical to SecondString, then 0 is returned. Otherwise, the
> - value returned is the first mismatched Unicode character in SecondString
> - subtracted from the first mismatched Unicode character in FirstString.
> -
> - @param FirstString Pointer to a Null-terminated ASCII string.
> - @param SecondString Pointer to a Null-terminated ASCII string.
> - @param Length Max length to compare.
> -
> - @retval 0 FirstString is identical to SecondString using case insensitive
> - comparisons.
> - @retval !=0 FirstString is not identical to SecondString using case
> - insensitive comparisons.
> -
> -**/
> -INTN
> -EFIAPI
> -AsciiStrniCmp (
> - IN CONST CHAR8 *FirstString,
> - IN CONST CHAR8 *SecondString,
> - IN UINTN Length
> - )
> -{
> - if (Length == 0) {
> - return 0;
> - }
> -
> - while ((AsciiToUpper (*FirstString) != '\0') &&
> - (AsciiToUpper (*FirstString) == AsciiToUpper (*SecondString)) &&
> - (Length > 1)) {
> - FirstString++;
> - SecondString++;
> - Length--;
> - }
> -
> - return AsciiToUpper (*FirstString) - AsciiToUpper (*SecondString);
> -}
> -
> -
> -
> -/**
> - Add a command to the mCmdTable. If there is no free space in the command
> - table ASSERT. The mCmdTable is maintained in alphabetical order and the
> - new entry is inserted into its sorted position.
> -
> - @param Entry Command Entry to add to the CmdTable
> -
> -**/
> -VOID
> -EFIAPI
> -EblAddCommand (
> - IN const EBL_COMMAND_TABLE *Entry
> - )
> -{
> - UINTN Count;
> -
> - if (mCmdTableNextFreeIndex == EBL_MAX_COMMAND_COUNT) {
> - //
> - // Ran out of space to store commands. Increase EBL_MAX_COMMAND_COUNT
> - //
> - ASSERT (FALSE);
> - return;
> - }
> -
> - //
> - // Add command and Insertion sort array in the process
> - //
> - mCmdTable[mCmdTableNextFreeIndex] = (EBL_COMMAND_TABLE *)Entry;
> - if (mCmdTableNextFreeIndex != 0) {
> - for (Count = mCmdTableNextFreeIndex; Count > 0; Count--) {
> - if (AsciiStriCmp (mCmdTable[Count - 1]->Name, Entry->Name) <= 0) {
> - break;
> - }
> -
> - mCmdTable[Count] = mCmdTable[Count - 1];
> - }
> - mCmdTable[Count] = (EBL_COMMAND_TABLE *)Entry;
> - }
> -
> - mCmdTableNextFreeIndex++;
> -}
> -
> -
> -/**
> - Add an set of commands to the command table. Most commonly used on static
> - array of commands.
> -
> - @param EntryArray Pointer to array of command entries
> - @param ArrayCount Number of command entries to add
> -
> -**/
> -VOID
> -EFIAPI
> -EblAddCommands (
> - IN const EBL_COMMAND_TABLE *EntryArray,
> - IN UINTN ArrayCount
> - )
> -{
> - UINTN Index;
> -
> - for (Index = 0; Index < ArrayCount; Index++) {
> - EblAddCommand (&EntryArray[Index]);
> - }
> -}
> -
> -
> -EBL_ADD_COMMAND_PROTOCOL gEblAddCommand = {
> - EblAddCommand,
> - EblAddCommands,
> - EblGetCharKey,
> - EblAnyKeyToContinueQtoQuit
> -};
> -
> -
> -
> -/**
> - Return the best matching command for the passed in command name. The match
> - does not have to be exact, it just needs to be unique. This enables commands
> - to be shortened to the smallest set of starting characters that is unique.
> -
> - @param CommandName Name of command to search for
> -
> - @return NULL CommandName did not match or was not unique
> - Other Pointer to EBL_COMMAND_TABLE entry for CommandName
> -
> -**/
> -EBL_COMMAND_TABLE *
> -EblGetCommand (
> - IN CHAR8 *CommandName
> - )
> -{
> - UINTN Index;
> - UINTN BestMatchCount;
> - UINTN Length;
> - EBL_COMMAND_TABLE *Match;
> - CHAR8 *Str;
> -
> - Length = AsciiStrLen (CommandName);
> - Str = AsciiStrStr (CommandName, ".");
> - if (Str != NULL) {
> - // If the command includes a trailing . command extension skip it for the match.
> - // Example: hexdump.4
> - Length = (UINTN)(Str - CommandName);
> - }
> -
> - for (Index = 0, BestMatchCount = 0, Match = NULL; Index < mCmdTableNextFreeIndex; Index++) {
> - if (AsciiStriCmp (mCmdTable[Index]->Name, CommandName) == 0) {
> - // match a command exactly
> - return mCmdTable[Index];
> - }
> -
> - if (AsciiStrniCmp (CommandName, mCmdTable[Index]->Name, Length) == 0) {
> - // partial match, so keep looking to make sure there is only one partial match
> - BestMatchCount++;
> - Match = mCmdTable[Index];
> - }
> - }
> -
> - if (BestMatchCount == 1) {
> - return Match;
> - }
> -
> - //
> - // We had no matches or too many matches
> - //
> - return NULL;
> -}
> -
> -
> -UINTN
> -CountNewLines (
> - IN CHAR8 *Str
> - )
> -{
> - UINTN Count;
> -
> - if (Str == NULL) {
> - return 0;
> - }
> -
> - for (Count = 0; *Str != '\0'; Str++) {
> - if (Str[Count] == '\n') {
> - Count++;
> - }
> - }
> -
> - return Count;
> -}
> -
> -
> -/**
> - List out help information on all the commands or print extended information
> - about a specific passed in command.
> -
> - Argv[0] - "help"
> - Argv[1] - Command to display help about
> -
> - @param Argc Number of command arguments in Argv
> - @param Argv Array of strings that represent the parsed command line.
> - Argv[0] is the command name
> -
> - @return EFI_SUCCESS
> -
> -**/
> -EFI_STATUS
> -EFIAPI
> -EblHelpCmd (
> - IN UINTN Argc,
> - IN CHAR8 **Argv
> - )
> -{
> - UINTN Index;
> - CHAR8 *Ptr;
> - UINTN CurrentRow = 0;
> -
> - if (Argc == 1) {
> - // Print all the commands
> - AsciiPrint ("Embedded Boot Loader (EBL) commands (help command for more info):\n");
> - CurrentRow++;
> - for (Index = 0; Index < mCmdTableNextFreeIndex; Index++) {
> - EblSetTextColor (EFI_YELLOW);
> - AsciiPrint (" %a", mCmdTable[Index]->Name);
> - EblSetTextColor (0);
> - AsciiPrint ("%a\n", mCmdTable[Index]->HelpSummary);
> - // Handle multi line help summaries
> - CurrentRow += CountNewLines (mCmdTable[Index]->HelpSummary);
> - if (EblAnyKeyToContinueQtoQuit (&CurrentRow, FALSE)) {
> - break;
> - }
> - }
> - } else if (Argv[1] != NULL) {
> - // Print specific help
> - for (Index = 0, CurrentRow = 0; Index < mCmdTableNextFreeIndex; Index++) {
> - if (AsciiStriCmp (Argv[1], mCmdTable[Index]->Name) == 0) {
> - Ptr = (mCmdTable[Index]->Help == NULL) ? mCmdTable[Index]->HelpSummary : mCmdTable[Index]->Help;
> - AsciiPrint ("%a%a\n", Argv[1], Ptr);
> - // Handle multi line help summaries
> - CurrentRow += CountNewLines (Ptr);
> - if (EblAnyKeyToContinueQtoQuit (&CurrentRow, FALSE)) {
> - break;
> - }
> - }
> - }
> - }
> -
> - return EFI_SUCCESS;
> -}
> -
> -
> -/**
> - Exit the EBL. If the command processor sees EFI_ABORTED return status it will
> - exit the EBL.
> -
> - Argv[0] - "exit"
> -
> - @param Argc Number of command arguments in Argv
> - @param Argv Array of strings that represent the parsed command line.
> - Argv[0] is the command name
> -
> - @return EFI_ABORTED
> -
> -**/
> -EFI_STATUS
> -EFIAPI
> -EblExitCmd (
> - IN UINTN Argc,
> - IN CHAR8 **Argv
> - )
> -{
> - EFI_STATUS Status;
> - UINTN MemoryMapSize;
> - EFI_MEMORY_DESCRIPTOR *MemoryMap;
> - UINTN MapKey;
> - UINTN DescriptorSize;
> - UINT32 DescriptorVersion;
> - UINTN Pages;
> -
> - if (Argc > 1) {
> - if (AsciiStriCmp (Argv[1], "efi") != 0) {
> - return EFI_ABORTED;
> - }
> - } else if (Argc == 1) {
> - return EFI_ABORTED;
> - }
> -
> - 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));
> -
> - //
> - // At this point it is very dangerous to do things EFI as most of EFI is now gone.
> - // This command is useful if you are working with a debugger as it will shutdown
> - // DMA and other things that could break a soft resets.
> - //
> - CpuDeadLoop ();
> -
> - // Should never get here, but makes the compiler happy
> - return EFI_ABORTED;
> -}
> -
> -
> -/**
> - Update the screen by decrementing the timeout value.
> - This AsciiPrint has to match the AsciiPrint in
> - EblPauseCmd.
> -
> - @param ElaspedTime Current timeout value remaining
> -
> -**/
> -VOID
> -EFIAPI
> -EblPauseCallback (
> - IN UINTN ElapsedTime
> - )
> -{
> - AsciiPrint ("\b\b\b\b\b\b\b\b\b\b\b\b \b\b%3d seconds", ElapsedTime);
> -}
> -
> -/**
> - Pause until a key is pressed and abort the remaining commands on the command
> - line. If no key is pressed continue processing the command line. This command
> - allows the user to stop an operation from happening and return control to the
> - command prompt.
> -
> - Argv[0] - "pause"
> - Argv[1] - timeout value is decimal seconds
> -
> - @param Argc Number of command arguments in Argv
> - @param Argv Array of strings that represent the parsed command line.
> - Argv[0] is the command name
> -
> - @return EFI_SUCCESS Timeout expired with no input
> - @return EFI_TIMEOUT Stop processing other commands on the same command line
> -
> -**/
> -EFI_STATUS
> -EFIAPI
> -EblPauseCmd (
> - IN UINTN Argc,
> - IN CHAR8 **Argv
> - )
> -{
> - EFI_STATUS Status;
> - UINTN Delay;
> - EFI_INPUT_KEY Key;
> -
> - Delay = (Argc == 1)? 10 : AsciiStrDecimalToUintn (Argv[1]);
> -
> - AsciiPrint ("Hit any key to break. You have %3d seconds", Delay);
> - Status = EblGetCharKey (&Key, Delay, EblPauseCallback);
> - AsciiPrint ("\n");
> -
> - // If we timeout then the pause succeeded thus return success
> - // If we get a key return timeout to stop other command on this cmd line
> - return (Status == EFI_SUCCESS) ? EFI_TIMEOUT : EFI_SUCCESS;;
> -}
> -
> -
> -/**
> - On a debug build issue a software breakpoint to enter the debugger
> -
> - Argv[0] - "break"
> -
> - @param Argc Number of command arguments in Argv
> - @param Argv Array of strings that represent the parsed command line.
> - Argv[0] is the command name
> -
> - @return EFI_SUCCESS
> -
> -**/
> -EFI_STATUS
> -EFIAPI
> -EblBreakPointCmd (
> - IN UINTN Argc,
> - IN CHAR8 **Argv
> - )
> -{
> - CpuBreakpoint ();
> - return EFI_SUCCESS;
> -}
> -
> -
> -/**
> - Reset the system. If no Argument do a Cold reset. If argument use that reset type
> - (W)arm = Warm Reset
> - (S)hutdown = Shutdown Reset
> -
> - Argv[0] - "reset"
> - Argv[1] - warm or shutdown reset type
> -
> - @param Argc Number of command arguments in Argv
> - @param Argv Array of strings that represent the parsed command line.
> - Argv[0] is the command name
> -
> - @return EFI_SUCCESS
> -
> -**/
> -EFI_STATUS
> -EFIAPI
> -EblResetCmd (
> - IN UINTN Argc,
> - IN CHAR8 **Argv
> - )
> -{
> - EFI_RESET_TYPE ResetType;
> -
> - ResetType = EfiResetCold;
> - if (Argc > 1) {
> - switch (*Argv[1]) {
> - case 'W':
> - case 'w':
> - ResetType = EfiResetWarm;
> - break;
> - case 'S':
> - case 's':
> - ResetType = EfiResetShutdown;
> - }
> - }
> -
> - gRT->ResetSystem (ResetType, EFI_SUCCESS, 0, NULL);
> - return EFI_SUCCESS;
> -}
> -
> -
> -/**
> - Toggle page break global. This turns on and off prompting to Quit or hit any
> - key to continue when a command is about to scroll the screen with its output
> -
> - Argv[0] - "page"
> - Argv[1] - on or off
> -
> - @param Argc Number of command arguments in Argv
> - @param Argv Array of strings that represent the parsed command line.
> - Argv[0] is the command name
> -
> - @return EFI_SUCCESS
> -
> -**/
> -EFI_STATUS
> -EFIAPI
> -EblPageCmd (
> - IN UINTN Argc,
> - IN CHAR8 **Argv
> - )
> -{
> - if (Argc <= 1) {
> - // toggle setting
> - gPageBreak = (gPageBreak) ? FALSE : TRUE;
> - } else {
> - // use argv to set the value
> - if ((Argv[1][0] == 'o') || (Argv[1][0] == 'O')) {
> - if ((Argv[1][1] == 'n') || (Argv[1][1] == 'N')) {
> - gPageBreak = TRUE;
> - } else if ((Argv[1][1] == 'f') || (Argv[1][1] == 'F')) {
> - gPageBreak = FALSE;
> - } else {
> - return EFI_INVALID_PARAMETER;
> - }
> - }
> - }
> - return EFI_SUCCESS;
> -}
> -
> -EFI_STATUS
> -EFIAPI
> -EblSleepCmd (
> - IN UINTN Argc,
> - IN CHAR8 **Argv
> - )
> -{
> - UINTN Delay;
> -
> - Delay = (Argc == 1)? 10 : AsciiStrDecimalToUintn (Argv[1]);
> -
> - gBS->Stall (Delay * 1000000);
> -
> - return EFI_SUCCESS;
> -}
> -
> -CHAR8
> -ConvertToTextLine (
> - IN CHAR8 Character
> - )
> -{
> - if (Character < ' ' || Character > '~') {
> - return '.';
> - } else {
> - return Character;
> - }
> -}
> -
> -UINTN
> -GetBytes (
> - IN UINT8 *Address,
> - IN UINTN Bytes
> - )
> -{
> - UINTN Result = 0;
> -
> - if (Bytes >= 1) {
> - Result = *Address++;
> - }
> - if (Bytes >= 2) {
> - Result = (Result << 8) + *Address++;
> - }
> - if (Bytes >= 3) {
> - Result = (Result << 8) + *Address++;
> - }
> - return Result;
> -}
> -
> -CHAR8 mBlanks[] = " ";
> -
> -EFI_STATUS
> -OutputData (
> - IN UINT8 *Address,
> - IN UINTN Length,
> - IN UINTN Width,
> - IN UINTN Offset
> - )
> -{
> - UINT8 *EndAddress;
> - UINTN Line;
> - CHAR8 TextLine[0x11];
> - UINTN CurrentRow = 0;
> - UINTN Bytes;
> - UINTN Spaces = 0;
> - CHAR8 Blanks[80];
> -
> - AsciiStrCpyS (Blanks, sizeof Blanks, mBlanks);
> - for (EndAddress = Address + Length; Address < EndAddress; Offset += Line) {
> - AsciiPrint ("%08x: ", Offset);
> - for (Line = 0; (Line < 0x10) && (Address < EndAddress);) {
> - Bytes = EndAddress - Address;
> -
> - switch (Width) {
> - case 4:
> - if (Bytes >= 4) {
> - AsciiPrint ("%08x ", *((UINT32 *)Address));
> - TextLine[Line++] = ConvertToTextLine(*Address++);
> - TextLine[Line++] = ConvertToTextLine(*Address++);
> - TextLine[Line++] = ConvertToTextLine(*Address++);
> - TextLine[Line++] = ConvertToTextLine(*Address++);
> - } else {
> - AsciiPrint ("%08x ", GetBytes(Address, Bytes));
> - Address += Bytes;
> - Line += Bytes;
> - }
> - break;
> -
> - case 2:
> - if (Bytes >= 2) {
> - AsciiPrint ("%04x ", *((UINT16 *)Address));
> - TextLine[Line++] = ConvertToTextLine(*Address++);
> - TextLine[Line++] = ConvertToTextLine(*Address++);
> - } else {
> - AsciiPrint ("%04x ", GetBytes(Address, Bytes));
> - Address += Bytes;
> - Line += Bytes;
> - }
> - break;
> -
> - case 1:
> - AsciiPrint ("%02x ", *((UINT8 *)Address));
> - TextLine[Line++] = ConvertToTextLine(*Address++);
> - break;
> -
> - default:
> - AsciiPrint ("Width must be 1, 2, or 4!\n");
> - return EFI_INVALID_PARAMETER;
> - }
> - }
> -
> - // Pad spaces
> - if (Line < 0x10) {
> - switch (Width) {
> - case 4:
> - Spaces = 9 * ((0x10 - Line)/4);
> - break;
> - case 2:
> - Spaces = 5 * ((0x10 - Line)/2);
> - break;
> - case 1:
> - Spaces = 3 * (0x10 - Line);
> - break;
> - }
> -
> - Blanks[Spaces] = '\0';
> -
> - AsciiPrint(Blanks);
> -
> - Blanks[Spaces] = ' ';
> - }
> -
> - TextLine[Line] = 0;
> - AsciiPrint ("|%a|\n", TextLine);
> -
> - if (EblAnyKeyToContinueQtoQuit (&CurrentRow, FALSE)) {
> - return EFI_END_OF_FILE;
> - }
> - }
> -
> - if (Length % Width != 0) {
> - AsciiPrint ("%08x\n", Offset);
> - }
> -
> - return EFI_SUCCESS;
> -}
> -
> -
> -/**
> - See if command contains .# where # is a number. Return # as the Width
> - or 1 as the default Width for commands.
> -
> - Example hexdump.4 returns a width of 4.
> -
> - @param Argv Argv[0] is the command name
> -
> - @return Width of command
> -
> -**/
> -UINTN
> -WidthFromCommandName (
> - IN CHAR8 *Argv,
> - IN UINTN Default
> - )
> -{
> - CHAR8 *Str;
> - UINTN Width;
> -
> - //Hexdump.2 HexDump.4 mean use a different width
> - Str = AsciiStrStr (Argv, ".");
> - if (Str != NULL) {
> - Width = AsciiStrDecimalToUintn (Str + 1);
> - if (Width == 0) {
> - Width = Default;
> - }
> - } else {
> - // Default answer
> - return Default;
> - }
> -
> - return Width;
> -}
> -
> -#define HEXDUMP_CHUNK 1024
> -
> -/**
> - Toggle page break global. This turns on and off prompting to Quit or hit any
> - key to continue when a command is about to scroll the screen with its output
> -
> - Argv[0] - "hexdump"[.#] # is optional 1,2, or 4 for width
> - Argv[1] - Device or File to dump.
> - Argv[2] - Optional offset to start dumping
> - Argv[3] - Optional number of bytes to dump
> -
> - @param Argc Number of command arguments in Argv
> - @param Argv Array of strings that represent the parsed command line.
> - Argv[0] is the command name
> -
> - @return EFI_SUCCESS
> -
> -**/
> -EFI_STATUS
> -EFIAPI
> -EblHexdumpCmd (
> - IN UINTN Argc,
> - IN CHAR8 **Argv
> - )
> -{
> - EFI_OPEN_FILE *File;
> - VOID *Location;
> - UINTN Size;
> - UINTN Width;
> - UINTN Offset = 0;
> - EFI_STATUS Status;
> - UINTN Chunk = HEXDUMP_CHUNK;
> -
> - if ((Argc < 2) || (Argc > 4)) {
> - return EFI_INVALID_PARAMETER;
> - }
> -
> - Width = WidthFromCommandName (Argv[0], 1);
> - if ((Width != 1) && (Width != 2) && (Width != 4)) {
> - return EFI_INVALID_PARAMETER;
> - }
> -
> - File = EfiOpen (Argv[1], EFI_FILE_MODE_READ, 0);
> - if (File == NULL) {
> - return EFI_NOT_FOUND;
> - }
> -
> - Location = AllocatePool (Chunk);
> - Size = (Argc > 3) ? AsciiStrHexToUintn (Argv[3]) : EfiTell (File, NULL);
> -
> - Offset = 0;
> - if (Argc > 2) {
> - Offset = AsciiStrHexToUintn (Argv[2]);
> - if (Offset > 0) {
> - // Make sure size includes the part of the file we have skipped
> - Size += Offset;
> - }
> - }
> -
> - Status = EfiSeek (File, Offset, EfiSeekStart);
> - if (EFI_ERROR (Status)) {
> - goto Exit;
> - }
> -
> - for (; Offset + HEXDUMP_CHUNK <= Size; Offset += Chunk) {
> - Chunk = HEXDUMP_CHUNK;
> - Status = EfiRead (File, Location, &Chunk);
> - if (EFI_ERROR(Status)) {
> - AsciiPrint ("Error reading file content\n");
> - goto Exit;
> - }
> -
> - Status = OutputData (Location, Chunk, Width, File->BaseOffset + Offset);
> - if (EFI_ERROR(Status)) {
> - if (Status == EFI_END_OF_FILE) {
> - Status = EFI_SUCCESS;
> - }
> - goto Exit;
> - }
> - }
> -
> - // Any left over?
> - if (Offset < Size) {
> - Chunk = Size - Offset;
> - Status = EfiRead (File, Location, &Chunk);
> - if (EFI_ERROR(Status)) {
> - AsciiPrint ("Error reading file content\n");
> - goto Exit;
> - }
> -
> - Status = OutputData (Location, Chunk, Width, File->BaseOffset + Offset);
> - if (EFI_ERROR(Status)) {
> - if (Status == EFI_END_OF_FILE) {
> - Status = EFI_SUCCESS;
> - }
> - goto Exit;
> - }
> - }
> -
> -Exit:
> - EfiClose (File);
> -
> - FreePool (Location);
> -
> - return EFI_SUCCESS;
> -}
> -
> -
> -GLOBAL_REMOVE_IF_UNREFERENCED const EBL_COMMAND_TABLE mCmdTemplate[] =
> -{
> - {
> - "reset",
> - " [type]; Reset system. type = [warm] [shutdown] default is cold reset",
> - NULL,
> - EblResetCmd
> - },
> - {
> - "exit",
> - "; Exit EBL",
> - NULL,
> - EblExitCmd
> - },
> - {
> - "help",
> - " [cmd]; Help on cmd or a list of all commands if cmd is ommited",
> - NULL,
> - EblHelpCmd
> - },
> - {
> - "break",
> - "; Generate debugging breakpoint",
> - NULL,
> - EblBreakPointCmd
> - },
> - {
> - "page",
> - " [on|off]]; toggle promting on command output larger than screen",
> - NULL,
> - EblPageCmd
> - },
> - {
> - "pause",
> - " [sec]; Pause for sec[10] seconds. ",
> - NULL,
> - EblPauseCmd
> - },
> - {
> - "sleep",
> - " [sec]; Sleep for sec[10] seconds. ",
> - NULL,
> - EblSleepCmd
> - },
> - {
> - "hexdump",
> - "[.{1|2|4}] filename [Offset] [Size]; dump a file as hex .width",
> - NULL,
> - EblHexdumpCmd
> - }
> -};
> -
> -
> -EFI_HANDLE gExternalCmdHandle = NULL;
> -
> -/**
> - Initialize the commands in this in this file
> -**/
> -VOID
> -EblInitializeCmdTable (
> - VOID
> - )
> -{
> -
> - EblAddCommands (mCmdTemplate, sizeof (mCmdTemplate)/sizeof (EBL_COMMAND_TABLE));
> -
> - gBS->InstallProtocolInterface (
> - &gExternalCmdHandle,
> - &gEfiEblAddCommandProtocolGuid,
> - EFI_NATIVE_INTERFACE,
> - &gEblAddCommand
> - );
> -
> -}
> -
> -
> -VOID
> -EblShutdownExternalCmdTable (
> - VOID
> - )
> -{
> - gBS->UninstallProtocolInterface (gExternalCmdHandle, &gEfiEblAddCommandProtocolGuid, &gEblAddCommand);
> -}
> -
> -
> diff --git a/EmbeddedPkg/Ebl/Dir.c b/EmbeddedPkg/Ebl/Dir.c
> deleted file mode 100644
> index a73c88d3aa2d..000000000000
> --- a/EmbeddedPkg/Ebl/Dir.c
> +++ /dev/null
> @@ -1,357 +0,0 @@
> -/** @file
> - Dir for EBL (Embedded Boot Loader)
> -
> - Copyright (c) 2007, Intel Corporation. All rights reserved.<BR>
> - Portions copyright (c) 2008 - 2009, Apple Inc. All rights reserved.<BR>
> - (C) Copyright 2015 Hewlett Packard Enterprise Development LP<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
> - http://opensource.org/licenses/bsd-license.php
> -
> - THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
> - WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
> -
> - Module Name: CmdTemplate.c
> -
> - Search/Replace Dir with the name of your new command
> -
> -**/
> -
> -#include "Ebl.h"
> -
> -
> -GLOBAL_REMOVE_IF_UNREFERENCED CHAR8 *gFvFileType[] = {
> - "All",
> - "Bin",
> - "section",
> - "SEC",
> - "PeiCore",
> - "DxeCore",
> - "PEIM",
> - "Driver",
> - "Combo",
> - "App",
> - "NULL",
> - "FV"
> -};
> -
> -
> -/**
> - Perform a dir on a device. The device must support Simple File System Protocol
> - or the FV protocol.
> -
> - Argv[0] - "dir"
> - Argv[1] - Device Name:path. Path is optional
> - Argv[2] - Optional filename to match on. A leading * means match substring
> - Argv[3] - Optional FV file type
> -
> - dir fs1:\efi ; perform a dir on fs1: device in the efi directory
> - dir fs1:\efi *.efi; perform a dir on fs1: device in the efi directory but
> - only print out files that contain the string *.efi
> - dir fv1:\ ; perform a dir on fv1: device in the efi directory
> - NOTE: fv devices do not contain subdirs
> - dir fv1:\ * PEIM ; will match all files of type PEIM
> -
> - @param Argc Number of command arguments in Argv
> - @param Argv Array of strings that represent the parsed command line.
> - Argv[0] is the command name
> -
> - @return EFI_SUCCESS
> -
> -**/
> -EFI_STATUS
> -EFIAPI
> -EblDirCmd (
> - IN UINTN Argc,
> - IN CHAR8 **Argv
> - )
> -{
> - EFI_STATUS Status;
> - EFI_OPEN_FILE *File;
> - EFI_FILE_INFO *DirInfo;
> - UINTN ReadSize;
> - UINTN CurrentRow;
> - CHAR16 *MatchSubString;
> - EFI_STATUS GetNextFileStatus;
> - UINTN Key;
> - EFI_FV_FILETYPE SearchType;
> - EFI_FV_FILETYPE Type;
> - EFI_FV_FILE_ATTRIBUTES Attributes;
> - UINTN Size;
> - EFI_GUID NameGuid;
> - EFI_FIRMWARE_VOLUME2_PROTOCOL *Fv;
> - UINT32 AuthenticationStatus;
> - VOID *Section;
> - UINTN SectionSize;
> - EFI_FV_FILETYPE Index;
> - UINTN Length;
> - UINTN BestMatchCount;
> - CHAR16 UnicodeFileName[MAX_CMD_LINE];
> - CHAR8 *Path;
> - CHAR8 *TypeStr;
> - UINTN TotalSize;
> -
> -
> - if (Argc <= 1) {
> - Path = EfiGetCwd ();
> - if (Path == NULL) {
> - return EFI_SUCCESS;
> - }
> - } else {
> - Path = Argv[1];
> - }
> -
> - File = EfiOpen (Path, EFI_FILE_MODE_READ, 0);
> - if (File == NULL) {
> - return EFI_SUCCESS;
> - }
> -
> - if (File->Type == EfiOpenFirmwareVolume) {
> - // FV Dir
> -
> - SearchType = EFI_FV_FILETYPE_ALL;
> - UnicodeFileName[0] = '\0';
> - MatchSubString = &UnicodeFileName[0];
> - if (Argc > 2) {
> - AsciiStrToUnicodeStrS (Argv[2], UnicodeFileName,
> - ARRAY_SIZE (UnicodeFileName));
> - if (UnicodeFileName[0] == '*') {
> - // Handle *Name substring matching
> - MatchSubString = &UnicodeFileName[1];
> - }
> -
> - // Handle file type matchs
> - if (Argc > 3) {
> - // match a specific file type, always last argument
> - Length = AsciiStrLen (Argv[3]);
> - for (Index = 1, BestMatchCount = 0; Index < sizeof (gFvFileType)/sizeof (CHAR8 *); Index++) {
> - if (AsciiStriCmp (gFvFileType[Index], Argv[3]) == 0) {
> - // exact match
> - SearchType = Index;
> - break;
> - }
> -
> - if (AsciiStrniCmp (Argv[3], gFvFileType[Index], Length) == 0) {
> - // partial match, so keep looking to make sure there is only one partial match
> - BestMatchCount++;
> - SearchType = Index;
> - }
> - }
> -
> - if (BestMatchCount > 1) {
> - SearchType = EFI_FV_FILETYPE_ALL;
> - }
> - }
> - }
> -
> - TotalSize = 0;
> - Fv = File->Fv;
> - Key = 0;
> - CurrentRow = 0;
> - do {
> - Type = SearchType;
> - GetNextFileStatus = Fv->GetNextFile (
> - Fv,
> - &Key,
> - &Type,
> - &NameGuid,
> - &Attributes,
> - &Size
> - );
> - if (!EFI_ERROR (GetNextFileStatus)) {
> - TotalSize += Size;
> - // Calculate size of entire file
> - Section = NULL;
> - Size = 0;
> - Status = Fv->ReadFile (
> - Fv,
> - &NameGuid,
> - Section,
> - &Size,
> - &Type,
> - &Attributes,
> - &AuthenticationStatus
> - );
> - if (!((Status == EFI_BUFFER_TOO_SMALL) || !EFI_ERROR (Status))) {
> - // EFI_SUCCESS or EFI_BUFFER_TOO_SMALL mean size is valid
> - Size = 0;
> - }
> -
> - TypeStr = (Type <= EFI_FV_FILETYPE_FIRMWARE_VOLUME_IMAGE) ? gFvFileType[Type] : "UNKNOWN";
> -
> - // read the UI seciton to do a name match.
> - Section = NULL;
> - Status = Fv->ReadSection (
> - Fv,
> - &NameGuid,
> - EFI_SECTION_USER_INTERFACE,
> - 0,
> - &Section,
> - &SectionSize,
> - &AuthenticationStatus
> - );
> - if (!EFI_ERROR (Status)) {
> - if (StrStr (Section, MatchSubString) != NULL) {
> - AsciiPrint ("%,9d %7a %g %s\n", Size, TypeStr, &NameGuid, Section);
> - if (EblAnyKeyToContinueQtoQuit (&CurrentRow, FALSE)) {
> - break;
> - }
> - }
> - FreePool (Section);
> - } else {
> - if (*MatchSubString == '\0') {
> - AsciiPrint ("%,9d %7a %g\n", Size, TypeStr, &NameGuid);
> - if (EblAnyKeyToContinueQtoQuit (&CurrentRow, FALSE)) {
> - break;
> - }
> - }
> - }
> - }
> - } while (!EFI_ERROR (GetNextFileStatus));
> -
> - if (SearchType == EFI_FV_FILETYPE_ALL) {
> - AsciiPrint ("%,20d bytes in files %,d bytes free\n", TotalSize, File->FvSize - File->FvHeaderSize - TotalSize);
> - }
> -
> -
> - } else if ((File->Type == EfiOpenFileSystem) || (File->Type == EfiOpenBlockIo)) {
> - // Simple File System DIR
> -
> - if (File->FsFileInfo == NULL) {
> - return EFI_SUCCESS;
> - }
> -
> - if (!(File->FsFileInfo->Attribute & EFI_FILE_DIRECTORY)) {
> - return EFI_SUCCESS;
> - }
> -
> - // Handle *Name substring matching
> - MatchSubString = NULL;
> - UnicodeFileName[0] = '\0';
> - if (Argc > 2) {
> - AsciiStrToUnicodeStrS (Argv[2], UnicodeFileName, MAX_CMD_LINE);
> - if (UnicodeFileName[0] == '*') {
> - MatchSubString = &UnicodeFileName[1];
> - }
> - }
> -
> - File->FsFileHandle->SetPosition (File->FsFileHandle, 0);
> - for (CurrentRow = 0;;) {
> - // First read gets the size
> - DirInfo = NULL;
> - ReadSize = 0;
> - Status = File->FsFileHandle->Read (File->FsFileHandle, &ReadSize, DirInfo);
> - if (Status == EFI_BUFFER_TOO_SMALL) {
> - // Allocate the buffer for the real read
> - DirInfo = AllocatePool (ReadSize);
> - if (DirInfo == NULL) {
> - goto Done;
> - }
> -
> - // Read the data
> - Status = File->FsFileHandle->Read (File->FsFileHandle, &ReadSize, DirInfo);
> - if ((EFI_ERROR (Status)) || (ReadSize == 0)) {
> - break;
> - }
> - } else {
> - break;
> - }
> -
> - if (MatchSubString != NULL) {
> - if (StrStr (&DirInfo->FileName[0], MatchSubString) == NULL) {
> - // does not match *name argument, so skip
> - continue;
> - }
> - } else if (UnicodeFileName[0] != '\0') {
> - // is not an exact match for name argument, so skip
> - if (StrCmp (&DirInfo->FileName[0], UnicodeFileName) != 0) {
> - continue;
> - }
> - }
> -
> - if (DirInfo->Attribute & EFI_FILE_DIRECTORY) {
> - AsciiPrint (" <DIR> %s\n", &DirInfo->FileName[0]);
> - } else {
> - AsciiPrint ("%,14ld %s\n", DirInfo->FileSize, &DirInfo->FileName[0]);
> - }
> -
> - if (EblAnyKeyToContinueQtoQuit (&CurrentRow, FALSE)) {
> - break;
> - }
> -
> - FreePool (DirInfo);
> - }
> -
> -Done:
> - if (DirInfo != NULL) {
> - FreePool (DirInfo);
> - }
> - }
> -
> - EfiClose (File);
> -
> - return EFI_SUCCESS;
> -}
> -
> -/**
> - Change the Current Working Directory
> -
> - Argv[0] - "cd"
> - Argv[1] - Device Name:path. Path is optional
> -
> - @param Argc Number of command arguments in Argv
> - @param Argv Array of strings that represent the parsed command line.
> - Argv[0] is the command name
> -
> - @return EFI_SUCCESS
> -
> -**/
> -EFI_STATUS
> -EFIAPI
> -EblCdCmd (
> - IN UINTN Argc,
> - IN CHAR8 **Argv
> - )
> -{
> - if (Argc <= 1) {
> - return EFI_SUCCESS;
> - }
> -
> - return EfiSetCwd (Argv[1]);
> -}
> -
> -
> -
> -GLOBAL_REMOVE_IF_UNREFERENCED const EBL_COMMAND_TABLE mCmdDirTemplate[] =
> -{
> - {
> - "dir",
> - " dirdev [*match]; directory listing of dirdev. opt match a substring",
> - NULL,
> - EblDirCmd
> - },
> - {
> - "cd",
> - " device - set the current working directory",
> - NULL,
> - EblCdCmd
> - }
> -};
> -
> -
> -/**
> - Initialize the commands in this in this file
> -**/
> -VOID
> -EblInitializeDirCmd (
> - VOID
> - )
> -{
> - if (FeaturePcdGet (PcdEmbeddedDirCmd)) {
> - EblAddCommands (mCmdDirTemplate, sizeof (mCmdDirTemplate)/sizeof (EBL_COMMAND_TABLE));
> - }
> -}
> -
> diff --git a/EmbeddedPkg/Ebl/Ebl.h b/EmbeddedPkg/Ebl/Ebl.h
> deleted file mode 100644
> index e028735d6b8a..000000000000
> --- a/EmbeddedPkg/Ebl/Ebl.h
> +++ /dev/null
> @@ -1,210 +0,0 @@
> -/** @file
> - Include file for basic command line parser for EBL (Embedded Boot Loader)
> -
> - Copyright (c) 2007, Intel Corporation. All rights reserved.<BR>
> - Portions copyright (c) 2008 - 2009, Apple Inc. All rights reserved.<BR>
> - (C) Copyright 2015 Hewlett Packard Enterprise Development LP<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
> - http://opensource.org/licenses/bsd-license.php
> -
> - THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
> - WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
> -
> -**/
> -
> -#ifndef __EBL_H__
> -#define __EBL_H__
> -
> -#include <PiDxe.h>
> -#include <Protocol/BlockIo.h>
> -#include <Protocol/SimpleFileSystem.h>
> -#include <Protocol/FirmwareVolume2.h>
> -#include <Protocol/LoadFile.h>
> -#include <Protocol/FirmwareVolumeBlock.h>
> -#include <Protocol/PxeBaseCode.h>
> -#include <Protocol/LoadedImage.h>
> -#include <Protocol/EblAddCommand.h>
> -#include <Protocol/PciIo.h>
> -#include <Protocol/DevicePath.h>
> -
> -#include <Guid/FileInfo.h>
> -#include <Guid/DxeServices.h>
> -#include <Guid/MemoryTypeInformation.h>
> -#include <Guid/MemoryAllocationHob.h>
> -#include <Library/BaseLib.h>
> -#include <Library/MemoryAllocationLib.h>
> -#include <Library/DevicePathLib.h>
> -#include <Library/PrintLib.h>
> -#include <Library/BaseMemoryLib.h>
> -#include <Library/UefiLib.h>
> -#include <Library/UefiBootServicesTableLib.h>
> -#include <Library/UefiRuntimeServicesTableLib.h>
> -#include <Library/DebugLib.h>
> -#include <Library/EfiFileLib.h>
> -#include <Library/HobLib.h>
> -#include <Library/DebugLib.h>
> -#include <Library/IoLib.h>
> -#include <Library/PcdLib.h>
> -#include <Library/EblCmdLib.h>
> -#include <Library/DevicePathLib.h>
> -#include <Library/UefiLib.h>
> -#include <Library/EblNetworkLib.h>
> -#include <Library/TimerLib.h>
> -
> -#include <IndustryStandard/Pci.h>
> -
> -//
> -// Prompt for the command line
> -//
> -#define CMD_SEPARATOR ';'
> -#define EBL_MAX_COMMAND_COUNT 0x100
> -#define MAX_CMD_HISTORY 16
> -#define MAX_CMD_LINE 256
> -#define MAX_ARGS 32
> -
> -#define EBL_CR 0x0a
> -#define EBL_LF 0x0d
> -
> -#define EFI_SET_TIMER_TO_SECOND 10000000
> -
> -
> -
> -EBL_COMMAND_TABLE *
> -EblGetCommand (
> - IN CHAR8 *CommandName
> - );
> -
> -
> -EFI_STATUS
> -EblPathToDevice (
> - IN CHAR8 *Path,
> - OUT EFI_HANDLE *DeviceHandle,
> - OUT EFI_DEVICE_PATH_PROTOCOL **PathDevicePath,
> - OUT VOID **Buffer,
> - OUT UINTN *BufferSize
> - );
> -
> -BOOLEAN
> -EFIAPI
> -EblAnyKeyToContinueQtoQuit (
> - IN UINTN *CurrentRow,
> - IN BOOLEAN PrefixNewline
> - );
> -
> -VOID
> -EblUpdateDeviceLists (
> - VOID
> - );
> -
> -VOID
> -EblInitializeCmdTable (
> - VOID
> - );
> -
> -VOID
> -EblShutdownExternalCmdTable (
> - VOID
> - );
> -
> -VOID
> -EblSetTextColor (
> - UINTN Attribute
> - );
> -
> -
> -EFI_STATUS
> -EFIAPI
> -EblGetCharKey (
> - IN OUT EFI_INPUT_KEY *Key,
> - IN UINTN TimoutInSec,
> - IN EBL_GET_CHAR_CALL_BACK CallBack OPTIONAL
> - );
> -
> -// BugBug: Move me to a library
> -INTN
> -EFIAPI
> -AsciiStrniCmp (
> - IN CONST CHAR8 *FirstString,
> - IN CONST CHAR8 *SecondString,
> - IN UINTN Length
> - );
> -
> -
> -VOID
> -EblInitializeDeviceCmd (
> - VOID
> - );
> -
> -VOID
> -EblInitializemdHwDebugCmds (
> - VOID
> - );
> -
> -VOID
> -EblInitializeDirCmd (
> - VOID
> - );
> -
> -VOID
> -EblInitializeHobCmd (
> - VOID
> - );
> -
> -VOID
> -EblInitializemdHwIoDebugCmds (
> - VOID
> - );
> -
> -VOID
> -EblInitializeScriptCmd (
> - VOID
> - );
> -
> -VOID
> -EblInitializeNetworkCmd (
> - VOID
> - );
> -
> -VOID
> -EblInitializeVariableCmds (
> - VOID
> - );
> -
> -CHAR8 *
> -ParseArguments (
> - IN CHAR8 *CmdLine,
> - OUT UINTN *Argc,
> - OUT CHAR8 **Argv
> - );
> -
> -EFI_STATUS
> -ProcessCmdLine (
> - IN CHAR8 *CmdLine,
> - IN UINTN MaxCmdLineSize
> - );
> -
> -EFI_STATUS
> -OutputData (
> - IN UINT8 *Address,
> - IN UINTN Length,
> - IN UINTN Width,
> - IN UINTN Offset
> - );
> -
> -UINTN
> -WidthFromCommandName (
> - IN CHAR8 *Argv,
> - IN UINTN Default
> - );
> -
> -
> -extern UINTN gScreenColumns;
> -extern UINTN gScreenRows;
> -extern BOOLEAN gPageBreak;
> -extern CHAR8 *gMemMapType[];
> -
> -#endif
> -
> diff --git a/EmbeddedPkg/Ebl/Ebl.inf b/EmbeddedPkg/Ebl/Ebl.inf
> deleted file mode 100644
> index 91a82d9f8cf8..000000000000
> --- a/EmbeddedPkg/Ebl/Ebl.inf
> +++ /dev/null
> @@ -1,111 +0,0 @@
> -#/** @file
> -# EBL Applicaiton
> -#
> -# This is a shell application that will display Hello World.
> -# Copyright (c) 2007, Intel Corporation. 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
> -# http://opensource.org/licenses/bsd-license.php
> -# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
> -# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
> -#
> -#
> -#**/
> -
> -################################################################################
> -#
> -# Defines Section - statements that will be processed to create a Makefile.
> -#
> -################################################################################
> -[Defines]
> - INF_VERSION = 0x00010005
> - BASE_NAME = Ebl
> - FILE_GUID = 3CEF354A-3B7A-4519-AD70-72A134698311
> - MODULE_TYPE = UEFI_APPLICATION
> - VERSION_STRING = 1.0
> - ENTRY_POINT = EdkBootLoaderEntry
> -
> -#
> -# The following information is for reference only and not required by the build tools.
> -#
> -# VALID_ARCHITECTURES = IA32 X64 IPF EBC
> -#
> -[Sources.common]
> - Main.c
> - Command.c
> - EfiDevice.c
> - HwDebug.c
> - HwIoDebug.c
> - Dir.c
> - Hob.c
> - Script.c
> - Ebl.h
> - Network.c
> - Variable.c
> -
> -[Packages]
> - MdePkg/MdePkg.dec
> - MdeModulePkg/MdeModulePkg.dec
> - IntelFrameworkPkg/IntelFrameworkPkg.dec
> - IntelFrameworkModulePkg/IntelFrameworkModulePkg.dec
> - EmbeddedPkg/EmbeddedPkg.dec
> -
> -[LibraryClasses]
> - DebugLib
> - UefiLib
> - UefiApplicationEntryPoint
> - UefiBootServicesTableLib
> - UefiRuntimeServicesTableLib
> - BaseMemoryLib
> - MemoryAllocationLib
> - DevicePathLib
> - IoLib
> - PrintLib
> - PcdLib
> - EfiFileLib
> - HobLib
> - BaseLib
> - EblCmdLib
> - EblNetworkLib
> -
> -[LibraryClasses.ARM]
> - SemihostLib
> -
> -[Protocols.common]
> - gEfiFirmwareVolume2ProtocolGuid
> - gEfiFirmwareVolumeBlockProtocolGuid
> - gEfiBlockIoProtocolGuid
> - gEfiSimpleFileSystemProtocolGuid
> - gEfiLoadFileProtocolGuid
> - gEfiLoadedImageProtocolGuid
> - gEfiPxeBaseCodeProtocolGuid
> - gEfiEblAddCommandProtocolGuid
> - gEfiDiskIoProtocolGuid
> - gEfiPciIoProtocolGuid
> - gEfiSimpleNetworkProtocolGuid
> -
> -[Guids.common]
> - gEfiDxeServicesTableGuid
> - gEfiFileInfoGuid
> - gEfiHobMemoryAllocModuleGuid
> - gEfiMemoryTypeInformationGuid
> -
> -[FeaturePcd.common]
> - gEmbeddedTokenSpaceGuid.PcdEmbeddedMacBoot
> - gEmbeddedTokenSpaceGuid.PcdEmbeddedDirCmd
> - gEmbeddedTokenSpaceGuid.PcdEmbeddedHobCmd
> - gEmbeddedTokenSpaceGuid.PcdEmbeddedHwDebugCmd
> - gEmbeddedTokenSpaceGuid.PcdEmbeddedIoEnable
> - gEmbeddedTokenSpaceGuid.PcdEmbeddedScriptCmd
> - gEmbeddedTokenSpaceGuid.PcdEmbeddedPciDebugCmd
> - gEmbeddedTokenSpaceGuid.PcdEmbeddedProbeRemovable
> -
> -[FixedPcd.common]
> - gEmbeddedTokenSpaceGuid.PcdEmbeddedAutomaticBootCommand
> - gEmbeddedTokenSpaceGuid.PcdEmbeddedDefaultTextColor
> - gEmbeddedTokenSpaceGuid.PcdEmbeddedMemVariableStoreSize
> - gEmbeddedTokenSpaceGuid.PcdEmbeddedShellCharacterEcho
> - gEmbeddedTokenSpaceGuid.PcdEmbeddedPrompt
> -
> diff --git a/EmbeddedPkg/Ebl/EfiDevice.c b/EmbeddedPkg/Ebl/EfiDevice.c
> deleted file mode 100644
> index f6969e7b2b05..000000000000
> --- a/EmbeddedPkg/Ebl/EfiDevice.c
> +++ /dev/null
> @@ -1,1060 +0,0 @@
> -/** @file
> - EBL commands for EFI and PI Devices
> -
> - Copyright (c) 2007, Intel Corporation. All rights reserved.<BR>
> - Portions copyright (c) 2008 - 2009, Apple Inc. All rights reserved.<BR>
> - (C) Copyright 2015 Hewlett Packard Enterprise Development LP<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
> - http://opensource.org/licenses/bsd-license.php
> -
> - THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
> - WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
> -
> -**/
> -
> -#include "Ebl.h"
> -
> -
> -EFI_DXE_SERVICES *gDS = NULL;
> -
> -
> -/**
> - Print information about the File System device.
> -
> - @param File Open File for the device
> -
> -**/
> -VOID
> -EblPrintFsInfo (
> - IN EFI_OPEN_FILE *File
> - )
> -{
> - CHAR16 *Str;
> -
> - if (File == NULL) {
> - return;
> - }
> -
> - AsciiPrint (" %a: ", File->DeviceName);
> - if (File->FsInfo != NULL) {
> - for (Str = File->FsInfo->VolumeLabel; *Str != '\0'; Str++) {
> - if (*Str == ' ') {
> - // UI makes you enter _ for space, so make the printout match that
> - *Str = '_';
> - }
> - AsciiPrint ("%c", *Str);
> - }
> - AsciiPrint (":");
> - if (File->FsInfo->ReadOnly) {
> - AsciiPrint ("ReadOnly");
> - }
> - }
> -
> - AsciiPrint ("\n");
> - EfiClose (File);
> -}
> -
> -
> -/**
> - Print information about the FV devices.
> -
> - @param File Open File for the device
> -
> -**/
> -VOID
> -EblPrintFvbInfo (
> - IN EFI_OPEN_FILE *File
> - )
> -{
> - if (File == NULL) {
> - return;
> - }
> -
> - AsciiPrint (" %a: 0x%08lx - 0x%08lx : 0x%08x\n", File->DeviceName, File->FvStart, File->FvStart + File->FvSize - 1, File->FvSize);
> - EfiClose (File);
> -}
> -
> -
> -/**
> - Print information about the Blk IO devices.
> - If the device supports PXE dump out extra information
> -
> - @param File Open File for the device
> -
> -**/
> -VOID
> -EblPrintBlkIoInfo (
> - IN EFI_OPEN_FILE *File
> - )
> -{
> - UINT64 DeviceSize;
> - UINTN Index;
> - UINTN Max;
> - EFI_OPEN_FILE *FsFile;
> -
> - if (File == NULL) {
> - return;
> - }
> -
> - AsciiPrint (" %a: ", File->DeviceName);
> -
> - // print out name of file system, if any, on this block device
> - Max = EfiGetDeviceCounts (EfiOpenFileSystem);
> - if (Max != 0) {
> - for (Index = 0; Index < Max; Index++) {
> - FsFile = EfiDeviceOpenByType (EfiOpenFileSystem, Index);
> - if (FsFile != NULL) {
> - if (FsFile->EfiHandle == File->EfiHandle) {
> - AsciiPrint ("fs%d: ", Index);
> - EfiClose (FsFile);
> - break;
> - }
> - EfiClose (FsFile);
> - }
> - }
> - }
> -
> - // Print out useful Block IO media properties
> - if (File->FsBlockIoMedia->RemovableMedia) {
> - AsciiPrint ("Removable ");
> - }
> - if (!File->FsBlockIoMedia->MediaPresent) {
> - AsciiPrint ("No Media\n");
> - } else {
> - if (File->FsBlockIoMedia->LogicalPartition) {
> - AsciiPrint ("Partition ");
> - }
> - DeviceSize = MultU64x32 (File->FsBlockIoMedia->LastBlock + 1, File->FsBlockIoMedia->BlockSize);
> - AsciiPrint ("Size = 0x%lX\n", DeviceSize);
> - }
> - EfiClose (File);
> -}
> -
> - /**
> - Print information about the Load File devices.
> - If the device supports PXE dump out extra information
> -
> - @param File Open File for the device
> -
> -**/
> -VOID
> -EblPrintLoadFileInfo (
> - IN EFI_OPEN_FILE *File
> - )
> -{
> - EFI_DEVICE_PATH_PROTOCOL *DevicePathNode;
> - MAC_ADDR_DEVICE_PATH *MacAddr;
> - UINTN HwAddressSize;
> - UINTN Index;
> -
> - if (File == NULL) {
> - return;
> - }
> -
> - AsciiPrint (" %a: %a ", File->DeviceName, EblLoadFileBootTypeString (File->EfiHandle));
> -
> - if (File->DevicePath != NULL) {
> - // Try to print out the MAC address
> - for (DevicePathNode = File->DevicePath;
> - !IsDevicePathEnd (DevicePathNode);
> - DevicePathNode = NextDevicePathNode (DevicePathNode)) {
> -
> - if ((DevicePathType (DevicePathNode) == MESSAGING_DEVICE_PATH) && (DevicePathSubType (DevicePathNode) == MSG_MAC_ADDR_DP)) {
> - MacAddr = (MAC_ADDR_DEVICE_PATH *)DevicePathNode;
> -
> - HwAddressSize = sizeof (EFI_MAC_ADDRESS);
> - if (MacAddr->IfType == 0x01 || MacAddr->IfType == 0x00) {
> - HwAddressSize = 6;
> - }
> -
> - AsciiPrint ("MAC ");
> - for (Index = 0; Index < HwAddressSize; Index++) {
> - AsciiPrint ("%02x", MacAddr->MacAddress.Addr[Index] & 0xff);
> - }
> - }
> - }
> - }
> -
> - AsciiPrint ("\n");
> - EfiClose (File);
> - return;
> -}
> -
> -
> -
> -/**
> - Dump information about devices in the system.
> -
> - fv: PI Firmware Volume
> - fs: EFI Simple File System
> - blk: EFI Block IO
> - LoadFile: EFI Load File Protocol (commonly PXE network boot)
> -
> - Argv[0] - "device"
> -
> - @param Argc Number of command arguments in Argv
> - @param Argv Array of strings that represent the parsed command line.
> - Argv[0] is the command name
> -
> - @return EFI_SUCCESS
> -
> -**/
> -EFI_STATUS
> -EFIAPI
> -EblDeviceCmd (
> - IN UINTN Argc,
> - IN CHAR8 **Argv
> - )
> -{
> - UINTN Index;
> - UINTN CurrentRow;
> - UINTN Max;
> -
> - CurrentRow = 0;
> -
> - // Need to call here to make sure Device Counts are valid
> - EblUpdateDeviceLists ();
> -
> - // Now we can print out the info...
> - Max = EfiGetDeviceCounts (EfiOpenFirmwareVolume);
> - if (Max != 0) {
> - AsciiPrint ("Firmware Volume Devices:\n");
> - for (Index = 0; Index < Max; Index++) {
> - EblPrintFvbInfo (EfiDeviceOpenByType (EfiOpenFirmwareVolume, Index));
> - if (EblAnyKeyToContinueQtoQuit (&CurrentRow, TRUE)) {
> - break;
> - }
> - }
> - }
> -
> - Max = EfiGetDeviceCounts (EfiOpenFileSystem);
> - if (Max != 0) {
> - AsciiPrint ("File System Devices:\n");
> - for (Index = 0; Index < Max; Index++) {
> - EblPrintFsInfo (EfiDeviceOpenByType (EfiOpenFileSystem, Index));
> - if (EblAnyKeyToContinueQtoQuit (&CurrentRow, TRUE)) {
> - break;
> - }
> - }
> - }
> -
> - Max = EfiGetDeviceCounts (EfiOpenBlockIo);
> - if (Max != 0) {
> - AsciiPrint ("Block IO Devices:\n");
> - for (Index = 0; Index < Max; Index++) {
> - EblPrintBlkIoInfo (EfiDeviceOpenByType (EfiOpenBlockIo, Index));
> - if (EblAnyKeyToContinueQtoQuit (&CurrentRow, TRUE)) {
> - break;
> - }
> - }
> - }
> -
> - Max = EfiGetDeviceCounts (EfiOpenLoadFile);
> - if (Max != 0) {
> - AsciiPrint ("LoadFile Devices: (usually network)\n");
> - for (Index = 0; Index < Max; Index++) {
> - EblPrintLoadFileInfo (EfiDeviceOpenByType (EfiOpenLoadFile, Index));
> - if (EblAnyKeyToContinueQtoQuit (&CurrentRow, TRUE)) {
> - break;
> - }
> - }
> - }
> -
> - return EFI_SUCCESS;
> -}
> -
> -
> -/**
> - Start an EFI image (PE32+ with EFI defined entry point).
> -
> - Argv[0] - "start"
> - Argv[1] - device name and path
> - Argv[2] - "" string to pass into image being started
> -
> - start fs1:\Temp\Fv.Fv "arg to pass" ; load an FV from the disk and pass the
> - ; ascii string arg to pass to the image
> - start fv0:\FV ; load an FV from an FV (not common)
> - start LoadFile0: ; load an FV via a PXE boot
> -
> - @param Argc Number of command arguments in Argv
> - @param Argv Array of strings that represent the parsed command line.
> - Argv[0] is the command name
> -
> - @return EFI_SUCCESS
> -
> -**/
> -EFI_STATUS
> -EFIAPI
> -EblStartCmd (
> - IN UINTN Argc,
> - IN CHAR8 **Argv
> - )
> -{
> - EFI_STATUS Status;
> - EFI_OPEN_FILE *File;
> - EFI_DEVICE_PATH_PROTOCOL *DevicePath;
> - EFI_HANDLE ImageHandle;
> - UINTN ExitDataSize;
> - CHAR16 *ExitData;
> - VOID *Buffer;
> - UINTN BufferSize;
> - EFI_LOADED_IMAGE_PROTOCOL *ImageInfo;
> -
> - ImageHandle = NULL;
> -
> - if (Argc < 2) {
> - return EFI_INVALID_PARAMETER;
> - }
> -
> - File = EfiOpen (Argv[1], EFI_FILE_MODE_READ, 0);
> - if (File == NULL) {
> - return EFI_INVALID_PARAMETER;
> - }
> -
> - DevicePath = File->DevicePath;
> - if (DevicePath != NULL) {
> - // check for device path form: blk, fv, fs, and loadfile
> - Status = gBS->LoadImage (FALSE, gImageHandle, DevicePath, NULL, 0, &ImageHandle);
> - } else {
> - // Check for buffer form: A0x12345678:0x1234 syntax.
> - // Means load using buffer starting at 0x12345678 of size 0x1234.
> -
> - Status = EfiReadAllocatePool (File, &Buffer, &BufferSize);
> - if (EFI_ERROR (Status)) {
> - EfiClose (File);
> - return Status;
> - }
> - Status = gBS->LoadImage (FALSE, gImageHandle, DevicePath, Buffer, BufferSize, &ImageHandle);
> -
> - FreePool (Buffer);
> - }
> -
> - EfiClose (File);
> -
> - if (!EFI_ERROR (Status)) {
> - if (Argc >= 3) {
> - // Argv[2] is a "" string that we pass directly to the EFI application without the ""
> - // We don't pass Argv[0] to the EFI Application (it's name) just the args
> - Status = gBS->HandleProtocol (ImageHandle, &gEfiLoadedImageProtocolGuid, (VOID **)&ImageInfo);
> - ASSERT_EFI_ERROR (Status);
> -
> - ImageInfo->LoadOptionsSize = (UINT32)AsciiStrSize (Argv[2]);
> - ImageInfo->LoadOptions = AllocatePool (ImageInfo->LoadOptionsSize);
> - AsciiStrCpyS (ImageInfo->LoadOptions, ImageInfo->LoadOptionsSize, Argv[2]);
> - }
> -
> - // Transfer control to the EFI image we loaded with LoadImage()
> - Status = gBS->StartImage (ImageHandle, &ExitDataSize, &ExitData);
> - }
> -
> - return Status;
> -}
> -
> -
> -/**
> - Load a Firmware Volume (FV) into memory from a device. This causes drivers in
> - the FV to be dispatched if the dependencies of the drivers are met.
> -
> - Argv[0] - "loadfv"
> - Argv[1] - device name and path
> -
> - loadfv fs1:\Temp\Fv.Fv ; load an FV from the disk
> - loadfv fv0:\FV ; load an FV from an FV (not common)
> - loadfv LoadFile0: ; load an FV via a PXE boot
> -
> - @param Argc Number of command arguments in Argv
> - @param Argv Array of strings that represent the parsed command line.
> - Argv[0] is the command name
> -
> - @return EFI_SUCCESS
> -
> -**/
> -EFI_STATUS
> -EFIAPI
> -EblLoadFvCmd (
> - IN UINTN Argc,
> - IN CHAR8 **Argv
> - )
> -{
> - EFI_STATUS Status;
> - EFI_OPEN_FILE *File;
> - VOID *FvStart;
> - UINTN FvSize;
> - EFI_HANDLE FvHandle;
> -
> -
> - if (Argc < 2) {
> - return EFI_INVALID_PARAMETER;
> - }
> -
> - File = EfiOpen (Argv[1], EFI_FILE_MODE_READ, 0);
> - if (File == NULL) {
> - return EFI_INVALID_PARAMETER;
> - }
> -
> - if (File->Type == EfiOpenMemoryBuffer) {
> - // If it is a address just use it.
> - Status = gDS->ProcessFirmwareVolume (File->Buffer, File->Size, &FvHandle);
> - } else {
> - // If it is a file read it into memory and use it
> - Status = EfiReadAllocatePool (File, &FvStart, &FvSize);
> - EfiClose (File);
> - if (EFI_ERROR (Status)) {
> - return Status;
> - }
> -
> - Status = gDS->ProcessFirmwareVolume (FvStart, FvSize, &FvHandle);
> - if (EFI_ERROR (Status)) {
> - FreePool (FvStart);
> - }
> - }
> - return Status;
> -}
> -
> -
> -/**
> - Perform an EFI connect to connect devices that follow the EFI driver model.
> - If it is a PI system also call the dispatcher in case a new FV was made
> - available by one of the connect EFI drivers (this is not a common case).
> -
> - Argv[0] - "connect"
> -
> - @param Argc Number of command arguments in Argv
> - @param Argv Array of strings that represent the parsed command line.
> - Argv[0] is the command name
> -
> - @return EFI_SUCCESS
> -
> -**/
> -EFI_STATUS
> -EFIAPI
> -EblConnectCmd (
> - IN UINTN Argc,
> - IN CHAR8 **Argv
> - )
> -{
> - EFI_STATUS Status;
> - UINTN HandleCount;
> - EFI_HANDLE *HandleBuffer;
> - UINTN Index;
> - BOOLEAN Dispatch;
> - EFI_OPEN_FILE *File;
> -
> -
> - if (Argc > 1) {
> - if ((*Argv[1] == 'd') || (*Argv[1] == 'D')) {
> - Status = gBS->LocateHandleBuffer (
> - AllHandles,
> - NULL,
> - NULL,
> - &HandleCount,
> - &HandleBuffer
> - );
> - if (EFI_ERROR (Status)) {
> - return Status;
> - }
> -
> - for (Index = 0; Index < HandleCount; Index++) {
> - gBS->DisconnectController (HandleBuffer[Index], NULL, NULL);
> - }
> -
> - //
> - // Given we disconnect our console we should go and do a connect now
> - //
> - } else {
> - File = EfiOpen (Argv[1], EFI_FILE_MODE_READ, 0);
> - if (File != NULL) {
> - AsciiPrint ("Connecting %a\n", Argv[1]);
> - gBS->ConnectController (File->EfiHandle, NULL, NULL, TRUE);
> - EfiClose (File);
> - return EFI_SUCCESS;
> - }
> - }
> - }
> -
> - Dispatch = FALSE;
> - do {
> - Status = gBS->LocateHandleBuffer (
> - AllHandles,
> - NULL,
> - NULL,
> - &HandleCount,
> - &HandleBuffer
> - );
> - if (EFI_ERROR (Status)) {
> - return Status;
> - }
> -
> - for (Index = 0; Index < HandleCount; Index++) {
> - gBS->ConnectController (HandleBuffer[Index], NULL, NULL, TRUE);
> - }
> -
> - FreePool (HandleBuffer);
> -
> - //
> - // Check to see if it's possible to dispatch an more DXE drivers.
> - // The BdsLibConnectAllEfi () may have made new DXE drivers show up.
> - // If anything is Dispatched Status == EFI_SUCCESS and we will try
> - // the connect again.
> - //
> - if (gDS == NULL) {
> - Status = EFI_NOT_FOUND;
> - } else {
> - Status = gDS->Dispatch ();
> - if (!EFI_ERROR (Status)) {
> - Dispatch = TRUE;
> - }
> - }
> -
> - } while (!EFI_ERROR (Status));
> -
> - if (Dispatch) {
> - AsciiPrint ("Connected and dispatched\n");
> - } else {
> - AsciiPrint ("Connect\n");
> - }
> -
> - return EFI_SUCCESS;
> -}
> -
> -
> -
> -CHAR8 *gMemMapType[] = {
> - "reserved ",
> - "LoaderCode",
> - "LoaderData",
> - "BS_code ",
> - "BS_data ",
> - "RT_code ",
> - "RT_data ",
> - "available ",
> - "Unusable ",
> - "ACPI_recl ",
> - "ACPI_NVS ",
> - "MemMapIO ",
> - "MemPortIO ",
> - "PAL_code "
> -};
> -
> -
> -/**
> - Dump out the EFI memory map
> -
> - Argv[0] - "memmap"
> -
> - @param Argc Number of command arguments in Argv
> - @param Argv Array of strings that represent the parsed command line.
> - Argv[0] is the command name
> -
> - @return EFI_SUCCESS
> -
> -**/
> -EFI_STATUS
> -EFIAPI
> -EblMemMapCmd (
> - IN UINTN Argc,
> - IN CHAR8 **Argv
> - )
> -{
> - EFI_STATUS Status;
> - EFI_MEMORY_DESCRIPTOR *MemMap;
> - EFI_MEMORY_DESCRIPTOR *OrigMemMap;
> - UINTN MemMapSize;
> - UINTN MapKey;
> - UINTN DescriptorSize;
> - UINT32 DescriptorVersion;
> - UINT64 PageCount[EfiMaxMemoryType];
> - UINTN Index;
> - UINT64 EntrySize;
> - UINTN CurrentRow;
> - UINT64 TotalMemory;
> -
> - ZeroMem (PageCount, sizeof (PageCount));
> -
> - AsciiPrint ("EFI Memory Map\n");
> -
> - // First call is to figure out how big the buffer needs to be
> - MemMapSize = 0;
> - MemMap = NULL;
> - Status = gBS->GetMemoryMap (&MemMapSize, MemMap, &MapKey, &DescriptorSize, &DescriptorVersion);
> - if (Status == EFI_BUFFER_TOO_SMALL) {
> - // In case the AllocatPool changes the memory map we added in some extra descriptors
> - MemMapSize += (DescriptorSize * 0x100);
> - OrigMemMap = MemMap = AllocatePool (MemMapSize);
> - if (OrigMemMap != NULL) {
> - // 2nd time we get the data
> - Status = gBS->GetMemoryMap (&MemMapSize, MemMap, &MapKey, &DescriptorSize, &DescriptorVersion);
> - if (!EFI_ERROR (Status)) {
> - for (Index = 0, CurrentRow = 0; Index < MemMapSize/DescriptorSize; Index++) {
> - EntrySize = LShiftU64 (MemMap->NumberOfPages, 12);
> - AsciiPrint ("\n%a %016lx - %016lx: # %08lx %016lx", gMemMapType[MemMap->Type % EfiMaxMemoryType], MemMap->PhysicalStart, MemMap->PhysicalStart + EntrySize -1, MemMap->NumberOfPages, MemMap->Attribute);
> - if (EblAnyKeyToContinueQtoQuit (&CurrentRow, TRUE)) {
> - break;
> - }
> -
> - PageCount[MemMap->Type % EfiMaxMemoryType] += MemMap->NumberOfPages;
> - MemMap = NEXT_MEMORY_DESCRIPTOR (MemMap, DescriptorSize);
> - }
> - }
> -
> - for (Index = 0, TotalMemory = 0; Index < EfiMaxMemoryType; Index++) {
> - if (PageCount[Index] != 0) {
> - AsciiPrint ("\n %a %,7ld Pages (%,14ld)", gMemMapType[Index], PageCount[Index], LShiftU64 (PageCount[Index], 12));
> - if (Index == EfiLoaderCode ||
> - Index == EfiLoaderData ||
> - Index == EfiBootServicesCode ||
> - Index == EfiBootServicesData ||
> - Index == EfiRuntimeServicesCode ||
> - Index == EfiRuntimeServicesData ||
> - Index == EfiConventionalMemory ||
> - Index == EfiACPIReclaimMemory ||
> - Index == EfiACPIMemoryNVS ||
> - Index == EfiPalCode
> - ) {
> - // Count total memory
> - TotalMemory += PageCount[Index];
> - }
> - }
> - }
> -
> - AsciiPrint ("\nTotal Memory: %,ld MB (%,ld bytes)\n", RShiftU64 (TotalMemory, 8), LShiftU64 (TotalMemory, 12));
> -
> - FreePool (OrigMemMap);
> -
> - }
> - }
> -
> - return EFI_SUCCESS;
> -}
> -
> -
> -
> -
> -/**
> - Load a file into memory and optionally jump to it. A load address can be
> - specified or automatically allocated. A quoted command line can optionally
> - be passed into the image.
> -
> - Argv[0] - "go"
> - Argv[1] - Device Name:path for the file to load
> - Argv[2] - Address to load to or '*' if the load address will be allocated
> - Argv[3] - Optional Entry point to the image. Image will be called if present
> - Argv[4] - "" string that will be passed as Argc & Argv to EntryPoint. Needs
> - to include the command name
> -
> - go fv1:\EblCmdX 0x10000 0x10010 "EblCmdX Arg2 Arg3 Arg4"; - load EblCmdX
> - from FV1 to location 0x10000 and call the entry point at 0x10010 passing
> - in "EblCmdX Arg2 Arg3 Arg4" as the arguments.
> -
> - go fv0:\EblCmdX * 0x10 "EblCmdX Arg2 Arg3 Arg4"; - load EblCmdX from FS0
> - to location allocated by this command and call the entry point at offset 0x10
> - passing in "EblCmdX Arg2 Arg3 Arg4" as the arguments.
> -
> - go fv1:\EblCmdX 0x10000; Load EblCmdX to address 0x10000 and return
> -
> - @param Argc Number of command arguments in Argv
> - @param Argv Array of strings that represent the parsed command line.
> - Argv[0] is the command name
> -
> - @return EFI_SUCCESS
> -
> -**/
> -EFI_STATUS
> -EFIAPI
> -EblGoCmd (
> - IN UINTN Argc,
> - IN CHAR8 **Argv
> - )
> -{
> - EFI_STATUS Status;
> - EFI_OPEN_FILE *File;
> - VOID *Address;
> - UINTN Size;
> - EBL_COMMMAND EntryPoint;
> - UINTN EntryPointArgc;
> - CHAR8 *EntryPointArgv[MAX_ARGS];
> -
> -
> - if (Argc <= 2) {
> - // device name and laod address are required
> - return EFI_SUCCESS;
> - }
> -
> - File = EfiOpen (Argv[1], EFI_FILE_MODE_READ, 0);
> - if (File == NULL) {
> - AsciiPrint (" %a is not a valid path\n", Argv[1]);
> - return EFI_SUCCESS;
> - }
> -
> - EntryPoint = (EBL_COMMMAND)((Argc > 3) ? (UINTN)AsciiStrHexToUintn (Argv[3]) : (UINTN)NULL);
> - if (Argv[2][0] == '*') {
> - // * Means allocate the buffer
> - Status = EfiReadAllocatePool (File, &Address, &Size);
> -
> - // EntryPoint is relative to the start of the image
> - EntryPoint = (EBL_COMMMAND)((UINTN)EntryPoint + (UINTN)Address);
> -
> - } else {
> - Address = (VOID *)AsciiStrHexToUintn (Argv[2]);
> - Size = File->Size;
> -
> - // File->Size for LoadFile is lazy so we need to use the tell to figure it out
> - EfiTell (File, NULL);
> - Status = EfiRead (File, Address, &Size);
> - }
> -
> - if (!EFI_ERROR (Status)) {
> - AsciiPrint ("Loaded %,d bytes to 0x%08x\n", Size, Address);
> -
> - if (Argc > 3) {
> - if (Argc > 4) {
> - ParseArguments (Argv[4], &EntryPointArgc, EntryPointArgv);
> - } else {
> - EntryPointArgc = 1;
> - EntryPointArgv[0] = File->FileName;
> - }
> -
> - Status = EntryPoint (EntryPointArgc, EntryPointArgv);
> - }
> - }
> -
> - EfiClose (File);
> - return Status;
> -}
> -
> -#define FILE_COPY_CHUNK 0x20000
> -
> -EFI_STATUS
> -EFIAPI
> -EblFileCopyCmd (
> - IN UINTN Argc,
> - IN CHAR8 **Argv
> - )
> -{
> - EFI_OPEN_FILE *Source = NULL;
> - EFI_OPEN_FILE *Destination = NULL;
> - EFI_STATUS Status = EFI_SUCCESS;
> - VOID *Buffer = NULL;
> - UINTN Size;
> - UINTN Offset;
> - UINTN Chunk = FILE_COPY_CHUNK;
> - UINTN FileNameLen, DestFileNameLen;
> - CHAR8* DestFileName;
> - CHAR8* SrcFileName;
> - CHAR8* SrcPtr;
> -
> - if (Argc < 3) {
> - return EFI_INVALID_PARAMETER;
> - }
> -
> - DestFileName = Argv[2];
> - FileNameLen = AsciiStrLen (DestFileName);
> -
> - // Check if the destination file name looks like a directory
> - if ((DestFileName[FileNameLen-1] == '\\') || (DestFileName[FileNameLen-1] == ':')) {
> - // Set the pointer after the source drive (eg: after fs1:)
> - SrcPtr = AsciiStrStr (Argv[1], ":");
> - if (SrcPtr == NULL) {
> - SrcPtr = Argv[1];
> - } else {
> - SrcPtr++;
> - if (*SrcPtr == '\\') {
> - SrcPtr++;
> - }
> - }
> -
> - if (*SrcPtr == '\0') {
> - AsciiPrint("Source file incorrect.\n");
> - }
> -
> - // Skip the Source Directories
> - while (1) {
> - SrcFileName = SrcPtr;
> - SrcPtr = AsciiStrStr (SrcPtr,"\\");
> - if (SrcPtr != NULL) {
> - SrcPtr++;
> - } else {
> - break;
> - }
> - }
> -
> - if (*SrcFileName == '\0') {
> - AsciiPrint("Source file incorrect (Error 2).\n");
> - }
> -
> - // Construct the destination filepath
> - DestFileNameLen = FileNameLen + AsciiStrLen (SrcFileName) + 1;
> - DestFileName = (CHAR8*)AllocatePool (DestFileNameLen);
> - AsciiStrCpyS (DestFileName, DestFileNameLen, Argv[2]);
> - AsciiStrCatS (DestFileName, DestFileNameLen, SrcFileName);
> - }
> -
> - Source = EfiOpen(Argv[1], EFI_FILE_MODE_READ, 0);
> - if (Source == NULL) {
> - AsciiPrint("Source file open error.\n");
> - return EFI_NOT_FOUND;
> - }
> -
> - Destination = EfiOpen(DestFileName, EFI_FILE_MODE_READ | EFI_FILE_MODE_WRITE | EFI_FILE_MODE_CREATE, 0);
> - if (Destination == NULL) {
> - AsciiPrint("Destination file open error.\n");
> - return EFI_NOT_FOUND;
> - }
> -
> - Buffer = AllocatePool(FILE_COPY_CHUNK);
> - if (Buffer == NULL) {
> - goto Exit;
> - }
> -
> - Size = EfiTell(Source, NULL);
> -
> - for (Offset = 0; Offset + FILE_COPY_CHUNK <= Size; Offset += Chunk) {
> - Chunk = FILE_COPY_CHUNK;
> -
> - Status = EfiRead(Source, Buffer, &Chunk);
> - if (EFI_ERROR(Status)) {
> - AsciiPrint("Read file error %r\n", Status);
> - goto Exit;
> - }
> -
> - Status = EfiWrite(Destination, Buffer, &Chunk);
> - if (EFI_ERROR(Status)) {
> - AsciiPrint("Write file error %r\n", Status);
> - goto Exit;
> - }
> - }
> -
> - // Any left over?
> - if (Offset < Size) {
> - Chunk = Size - Offset;
> -
> - Status = EfiRead(Source, Buffer, &Chunk);
> - if (EFI_ERROR(Status)) {
> - AsciiPrint("Read file error %r\n", Status);
> - goto Exit;
> - }
> -
> - Status = EfiWrite(Destination, Buffer, &Chunk);
> - if (EFI_ERROR(Status)) {
> - AsciiPrint("Write file error %r\n", Status);
> - goto Exit;
> - }
> - }
> -
> -
> -Exit:
> - if (Source != NULL) {
> - Status = EfiClose(Source);
> - if (EFI_ERROR(Status)) {
> - AsciiPrint("Source close error %r\n", Status);
> - }
> - }
> - if (Destination != NULL) {
> - Status = EfiClose(Destination);
> - if (EFI_ERROR(Status)) {
> - AsciiPrint("Destination close error %r\n", Status);
> - }
> -
> - // Case when we have concated the filename to the destination directory
> - if (DestFileName != Argv[2]) {
> - FreePool (DestFileName);
> - }
> - }
> -
> - if (Buffer != NULL) {
> - FreePool(Buffer);
> - }
> -
> - return Status;
> -}
> -
> -EFI_STATUS
> -EFIAPI
> -EblFileDiffCmd (
> - IN UINTN Argc,
> - IN CHAR8 **Argv
> - )
> -{
> - EFI_OPEN_FILE *File1 = NULL;
> - EFI_OPEN_FILE *File2 = NULL;
> - EFI_STATUS Status = EFI_SUCCESS;
> - VOID *Buffer1 = NULL;
> - VOID *Buffer2 = NULL;
> - UINTN Size1;
> - UINTN Size2;
> - UINTN Offset;
> - UINTN Chunk = FILE_COPY_CHUNK;
> -
> - if (Argc != 3) {
> - return EFI_INVALID_PARAMETER;
> - }
> -
> - File1 = EfiOpen(Argv[1], EFI_FILE_MODE_READ, 0);
> - if (File1 == NULL) {
> - AsciiPrint("File 1 open error.\n");
> - return EFI_NOT_FOUND;
> - }
> -
> - File2 = EfiOpen(Argv[2], EFI_FILE_MODE_READ, 0);
> - if (File2 == NULL) {
> - AsciiPrint("File 2 open error.\n");
> - return EFI_NOT_FOUND;
> - }
> -
> - Size1 = EfiTell(File1, NULL);
> - Size2 = EfiTell(File2, NULL);
> -
> - if (Size1 != Size2) {
> - AsciiPrint("Files differ.\n");
> - goto Exit;
> - }
> -
> - Buffer1 = AllocatePool(FILE_COPY_CHUNK);
> - if (Buffer1 == NULL) {
> - goto Exit;
> - }
> -
> - Buffer2 = AllocatePool(FILE_COPY_CHUNK);
> - if (Buffer2 == NULL) {
> - goto Exit;
> - }
> -
> - for (Offset = 0; Offset + FILE_COPY_CHUNK <= Size1; Offset += Chunk) {
> - Chunk = FILE_COPY_CHUNK;
> -
> - Status = EfiRead(File1, Buffer1, &Chunk);
> - if (EFI_ERROR(Status)) {
> - AsciiPrint("File 1 read error\n");
> - goto Exit;
> - }
> -
> - Status = EfiRead(File2, Buffer2, &Chunk);
> - if (EFI_ERROR(Status)) {
> - AsciiPrint("File 2 read error\n");
> - goto Exit;
> - }
> -
> - if (CompareMem(Buffer1, Buffer2, Chunk) != 0) {
> - AsciiPrint("Files differ.\n");
> - goto Exit;
> - };
> - }
> -
> - // Any left over?
> - if (Offset < Size1) {
> - Chunk = Size1 - Offset;
> -
> - Status = EfiRead(File1, Buffer1, &Chunk);
> - if (EFI_ERROR(Status)) {
> - AsciiPrint("File 1 read error\n");
> - goto Exit;
> - }
> -
> - Status = EfiRead(File2, Buffer2, &Chunk);
> - if (EFI_ERROR(Status)) {
> - AsciiPrint("File 2 read error\n");
> - goto Exit;
> - }
> - }
> -
> - if (CompareMem(Buffer1, Buffer2, Chunk) != 0) {
> - AsciiPrint("Files differ.\n");
> - } else {
> - AsciiPrint("Files are identical.\n");
> - }
> -
> -Exit:
> - if (File1 != NULL) {
> - Status = EfiClose(File1);
> - if (EFI_ERROR(Status)) {
> - AsciiPrint("File 1 close error %r\n", Status);
> - }
> - }
> -
> - if (File2 != NULL) {
> - Status = EfiClose(File2);
> - if (EFI_ERROR(Status)) {
> - AsciiPrint("File 2 close error %r\n", Status);
> - }
> - }
> -
> - if (Buffer1 != NULL) {
> - FreePool(Buffer1);
> - }
> -
> - if (Buffer2 != NULL) {
> - FreePool(Buffer2);
> - }
> -
> - return Status;
> -}
> -
> -GLOBAL_REMOVE_IF_UNREFERENCED const EBL_COMMAND_TABLE mCmdDeviceTemplate[] =
> -{
> - {
> - "connect",
> - "[d]; Connect all EFI devices. d means disconnect",
> - NULL,
> - EblConnectCmd
> - },
> - {
> - "device",
> - "; Show information about boot devices",
> - NULL,
> - EblDeviceCmd
> - },
> - {
> - "go",
> - " dev:path loadaddress entrypoint args; load to given address and jump in",
> - NULL,
> - EblGoCmd
> - },
> - {
> - "loadfv",
> - " devname; Load PI FV from device",
> - NULL,
> - EblLoadFvCmd
> - },
> - {
> - "start",
> - " path; EFI Boot Device:filepath. fs1:\\EFI\\BOOT.EFI",
> - NULL,
> - EblStartCmd
> - },
> - {
> - "memmap",
> - "; dump EFI memory map",
> - NULL,
> - EblMemMapCmd
> - },
> - {
> - "cp",
> - " file1 file2; copy file only.",
> - NULL,
> - EblFileCopyCmd
> - },
> - {
> - "diff",
> - " file1 file2; compare files",
> - NULL,
> - EblFileDiffCmd
> - }
> -};
> -
> -
> -/**
> - Initialize the commands in this in this file
> -**/
> -
> -VOID
> -EblInitializeDeviceCmd (
> - VOID
> - )
> -{
> - EfiGetSystemConfigurationTable (&gEfiDxeServicesTableGuid, (VOID **) &gDS);
> - EblAddCommands (mCmdDeviceTemplate, sizeof (mCmdDeviceTemplate)/sizeof (EBL_COMMAND_TABLE));
> -}
> -
> diff --git a/EmbeddedPkg/Ebl/Hob.c b/EmbeddedPkg/Ebl/Hob.c
> deleted file mode 100644
> index edc0a744f47f..000000000000
> --- a/EmbeddedPkg/Ebl/Hob.c
> +++ /dev/null
> @@ -1,234 +0,0 @@
> -/** @file
> - Hob command for EBL (Embedded Boot Loader)
> -
> - Copyright (c) 2007, Intel Corporation. All rights reserved.<BR>
> - Portions copyright (c) 2008 - 2009, Apple Inc. All rights reserved.<BR>
> - (C) Copyright 2015 Hewlett Packard Enterprise Development LP<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
> - http://opensource.org/licenses/bsd-license.php
> -
> - THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
> - WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
> -
> - Module Name: Hob.c
> -
> - Search/Replace Dir with the name of your new command
> -
> - Boot Mode:
> - ==========
> - BOOT_WITH_FULL_CONFIGURATION 0x00
> - BOOT_WITH_MINIMAL_CONFIGURATION 0x01
> - BOOT_ASSUMING_NO_CONFIGURATION_CHANGES 0x02
> - BOOT_WITH_FULL_CONFIGURATION_PLUS_DIAGNOSTICS 0x03
> - BOOT_WITH_DEFAULT_SETTINGS 0x04
> - BOOT_ON_S4_RESUME 0x05
> - BOOT_ON_S5_RESUME 0x06
> - BOOT_ON_S2_RESUME 0x10
> - BOOT_ON_S3_RESUME 0x11
> - BOOT_ON_FLASH_UPDATE 0x12
> - BOOT_IN_RECOVERY_MODE 0x20
> - BOOT_IN_RECOVERY_MODE_MASK 0x40
> - BOOT_SPECIAL_MASK 0x80
> -
> - Mem Alloc HOB Type:
> - ===================
> - typedef enum {
> - EfiReservedMemoryType = 0x00
> - EfiLoaderCode = 0x01
> - EfiLoaderData = 0x02
> - EfiBootServicesCode = 0x03
> - EfiBootServicesData = 0x04
> - EfiRuntimeServicesCode = 0x05
> - EfiRuntimeServicesData = 0x06
> - EfiConventionalMemory = 0x07
> - EfiUnusableMemory = 0x08
> - EfiACPIReclaimMemory = 0x09
> - EfiACPIMemoryNVS = 0x0a
> - EfiMemoryMappedIO = 0x0b
> - EfiMemoryMappedIOPortSpace = 0x0c
> - EfiPalCode = 0x0d
> - EfiMaxMemoryType = 0x0e
> - } EFI_MEMORY_TYPE;
> -
> - Resource Hob Tye:
> - =================
> - EFI_RESOURCE_SYSTEM_MEMORY 0
> - EFI_RESOURCE_MEMORY_MAPPED_IO 1
> - EFI_RESOURCE_IO 2
> - EFI_RESOURCE_FIRMWARE_DEVICE 3
> - EFI_RESOURCE_MEMORY_MAPPED_IO_PORT 4
> - EFI_RESOURCE_MEMORY_RESERVED 5
> - EFI_RESOURCE_IO_RESERVED 6
> - EFI_RESOURCE_MAX_MEMORY_TYPE 7
> -
> - Resource Hob Attribute (last thing printed):
> - ============================================
> - EFI_RESOURCE_ATTRIBUTE_PRESENT 0x00000001
> - EFI_RESOURCE_ATTRIBUTE_INITIALIZED 0x00000002
> - EFI_RESOURCE_ATTRIBUTE_TESTED 0x00000004
> - EFI_RESOURCE_ATTRIBUTE_SINGLE_BIT_ECC 0x00000008
> - EFI_RESOURCE_ATTRIBUTE_MULTIPLE_BIT_ECC 0x00000010
> - EFI_RESOURCE_ATTRIBUTE_ECC_RESERVED_1 0x00000020
> - EFI_RESOURCE_ATTRIBUTE_ECC_RESERVED_2 0x00000040
> - EFI_RESOURCE_ATTRIBUTE_READ_PROTECTED 0x00000080
> - EFI_RESOURCE_ATTRIBUTE_WRITE_PROTECTED 0x00000100
> - EFI_RESOURCE_ATTRIBUTE_EXECUTION_PROTECTED 0x00000200
> - EFI_RESOURCE_ATTRIBUTE_UNCACHEABLE 0x00000400
> - EFI_RESOURCE_ATTRIBUTE_WRITE_COMBINEABLE 0x00000800
> - EFI_RESOURCE_ATTRIBUTE_WRITE_THROUGH_CACHEABLE 0x00001000
> - EFI_RESOURCE_ATTRIBUTE_WRITE_BACK_CACHEABLE 0x00002000
> - EFI_RESOURCE_ATTRIBUTE_16_BIT_IO 0x00004000
> - EFI_RESOURCE_ATTRIBUTE_32_BIT_IO 0x00008000
> - EFI_RESOURCE_ATTRIBUTE_64_BIT_IO 0x00010000
> - EFI_RESOURCE_ATTRIBUTE_UNCACHED_EXPORTED 0x00020000
> -
> -**/
> -
> -#include "Ebl.h"
> -// BugBug: Autogen does not allow this to be included currently
> -//#include <EdkModulePkg/Include/EdkDxe.h>
> -
> -GLOBAL_REMOVE_IF_UNREFERENCED char *mHobResourceType[] = {
> - "Memory ",
> - "MMIO ",
> - "IO ",
> - "Firmware ",
> - "MMIO Port ",
> - "Reserved ",
> - "IO Reserved",
> - "Illegal "
> -};
> -
> -
> -/**
> - Dump out the HOBs in the system. HOBs are defined in the PI specification
> - and they are used to hand off information from PEI to DXE.
> -
> - Argv[0] - "hob"
> -
> - @param Argc Number of command arguments in Argv
> - @param Argv Array of strings that represent the parsed command line.
> - Argv[0] is the command name
> -
> - @return EFI_SUCCESS
> -
> -**/
> -EFI_STATUS
> -EFIAPI
> -EblHobCmd (
> - IN UINTN Argc,
> - IN CHAR8 **Argv
> - )
> -{
> - UINTN CurrentRow;
> - EFI_PEI_HOB_POINTERS Hob;
> - EFI_MEMORY_TYPE_INFORMATION *EfiMemoryTypeInformation;
> - UINTN Index;
> -
> - CurrentRow = 0;
> - for (Hob.Raw = GetHobList (); !END_OF_HOB_LIST(Hob); Hob.Raw = GET_NEXT_HOB(Hob)) {
> - if (Hob.Header->HobType == EFI_HOB_TYPE_HANDOFF) {
> - AsciiPrint ("PHIT HOB Ver %x Boot Mode %02x Top %lx Bottom %lx\n",
> - Hob.HandoffInformationTable->Version,
> - Hob.HandoffInformationTable->BootMode,
> - Hob.HandoffInformationTable->EfiMemoryTop,
> - Hob.HandoffInformationTable->EfiMemoryBottom
> - );
> -
> - if (EblAnyKeyToContinueQtoQuit (&CurrentRow, FALSE)) {
> - return EFI_SUCCESS;
> - }
> -
> - AsciiPrint (" Free Top %lx Free Bottom %lx End Of HOB %lx\n",
> - Hob.HandoffInformationTable->EfiFreeMemoryTop,
> - Hob.HandoffInformationTable->EfiFreeMemoryBottom,
> - Hob.HandoffInformationTable->EfiEndOfHobList
> - );
> -
> - } else if (Hob.Header->HobType == EFI_HOB_TYPE_MEMORY_ALLOCATION) {
> - // mod(%) on array index is just to prevent buffer overrun
> - AsciiPrint ("Mem Alloc HOB %a %g %08lx:%lx\n",
> - (Hob.MemoryAllocation->AllocDescriptor.MemoryType < EfiMaxMemoryType) ? gMemMapType[Hob.MemoryAllocation->AllocDescriptor.MemoryType] : "ILLEGAL TYPE",
> - &Hob.MemoryAllocation->AllocDescriptor.Name,
> - Hob.MemoryAllocation->AllocDescriptor.MemoryBaseAddress,
> - Hob.MemoryAllocation->AllocDescriptor.MemoryLength
> - );
> - if (CompareGuid (&gEfiHobMemoryAllocModuleGuid, &Hob.MemoryAllocation->AllocDescriptor.Name)) {
> - if (EblAnyKeyToContinueQtoQuit (&CurrentRow, FALSE)) {
> - return EFI_SUCCESS;
> - }
> - AsciiPrint (" Module Name %g EntryPoint %lx\n", &Hob.MemoryAllocationModule->ModuleName, Hob.MemoryAllocationModule->EntryPoint);
> - }
> - } else if (Hob.Header->HobType == EFI_HOB_TYPE_RESOURCE_DESCRIPTOR) {
> - AsciiPrint ("Resource HOB %a %g %08lx:%lx\n Attributes: %08x\n",
> - (Hob.ResourceDescriptor->ResourceType < EFI_RESOURCE_MAX_MEMORY_TYPE) ? mHobResourceType[Hob.ResourceDescriptor->ResourceType] : mHobResourceType[EFI_RESOURCE_MAX_MEMORY_TYPE],
> - &Hob.ResourceDescriptor->Owner,
> - Hob.ResourceDescriptor->PhysicalStart,
> - Hob.ResourceDescriptor->ResourceLength,
> - Hob.ResourceDescriptor->ResourceAttribute
> - );
> - if (EblAnyKeyToContinueQtoQuit (&CurrentRow, FALSE)) {
> - return EFI_SUCCESS;
> - }
> - } else if (Hob.Header->HobType == EFI_HOB_TYPE_GUID_EXTENSION) {
> - AsciiPrint ("GUID HOB %g\n", &Hob.Guid->Name);
> - if (CompareGuid (&gEfiMemoryTypeInformationGuid, &Hob.Guid->Name)) {
> - EfiMemoryTypeInformation = GET_GUID_HOB_DATA (Hob.Guid);
> - for (Index = 0; Index < (GET_GUID_HOB_DATA_SIZE (Hob.Guid)/sizeof (EFI_MEMORY_TYPE_INFORMATION)); Index++, EfiMemoryTypeInformation++) {
> - if (EblAnyKeyToContinueQtoQuit (&CurrentRow, FALSE)) {
> - return EFI_SUCCESS;
> - }
> - AsciiPrint (" %a 0x%08x\n",
> - (EfiMemoryTypeInformation->Type < EfiMaxMemoryType) ? gMemMapType[EfiMemoryTypeInformation->Type] : "END ",
> - EfiMemoryTypeInformation->NumberOfPages
> - );
> - }
> - }
> - } else if (Hob.Header->HobType == EFI_HOB_TYPE_FV) {
> - AsciiPrint ("FV HOB %08lx:%08lx\n", Hob.FirmwareVolume->BaseAddress, Hob.FirmwareVolume->Length);
> - } else if (Hob.Header->HobType == EFI_HOB_TYPE_CPU) {
> - AsciiPrint ("CPU HOB: Mem %x IO %x\n", Hob.Cpu->SizeOfMemorySpace, Hob.Cpu->SizeOfIoSpace);
> - } else if (Hob.Header->HobType == EFI_HOB_TYPE_MEMORY_POOL) {
> - AsciiPrint ("Mem Pool HOB:\n");
> -/* Not in PI
> - } else if (Hob.Header->HobType == EFI_HOB_TYPE_CV) {
> - AsciiPrint ("CV HOB: %08lx:%08lx\n", Hob.CapsuleVolume->BaseAddress, Hob.CapsuleVolume->Length);
> - */
> - }
> -
> - if (EblAnyKeyToContinueQtoQuit (&CurrentRow, FALSE)) {
> - break;
> - }
> - }
> -
> - return EFI_SUCCESS;
> -}
> -
> -
> -GLOBAL_REMOVE_IF_UNREFERENCED const EBL_COMMAND_TABLE mCmdHobTemplate[] =
> -{
> - {
> - "hob",
> - "; dump HOBs",
> - NULL,
> - EblHobCmd
> - }
> -};
> -
> -
> -/**
> - Initialize the commands in this in this file
> -**/
> -VOID
> -EblInitializeHobCmd (
> - VOID
> - )
> -{
> - if (FeaturePcdGet (PcdEmbeddedHobCmd)) {
> - EblAddCommands (mCmdHobTemplate, sizeof (mCmdHobTemplate)/sizeof (EBL_COMMAND_TABLE));
> - }
> -}
> -
> diff --git a/EmbeddedPkg/Ebl/HwDebug.c b/EmbeddedPkg/Ebl/HwDebug.c
> deleted file mode 100644
> index a62ccdc9c521..000000000000
> --- a/EmbeddedPkg/Ebl/HwDebug.c
> +++ /dev/null
> @@ -1,346 +0,0 @@
> -/** @file
> - Basic command line parser for EBL (Embedded Boot Loader)
> -
> - Copyright (c) 2007, Intel Corporation. All rights reserved.<BR>
> - Portions copyright (c) 2008 - 2009, Apple Inc. All rights reserved.<BR>
> - (C) Copyright 2015 Hewlett Packard Enterprise Development LP<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
> - http://opensource.org/licenses/bsd-license.php
> -
> - THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
> - WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
> -
> - Module Name: HwDebug.c
> -
> - Commands useful for debugging hardware.
> -
> -**/
> -
> -#include "Ebl.h"
> -
> -
> -/**
> - Dump memory
> -
> - Argv[0] - "md"[.#] # is optional width 1, 2, 4, or 8. Default 1
> - Argv[1] - Hex Address to dump
> - Argv[2] - Number of hex bytes to dump (0x20 is default)
> -
> - md.4 0x123445678 50 ; Dump 0x50 4 byte quantities starting at 0x123445678
> - md 0x123445678 40 ; Dump 0x40 1 byte quantities starting at 0x123445678
> - md 0x123445678 ; Dump 0x20 1 byte quantities starting at 0x123445678
> -
> - @param Argc Number of command arguments in Argv
> - @param Argv Array of strings that represent the parsed command line.
> - Argv[0] is the command name
> -
> - @return EFI_SUCCESS
> -
> -**/
> -EFI_STATUS
> -EFIAPI
> -EblMdCmd (
> - IN UINTN Argc,
> - IN CHAR8 **Argv
> - )
> -{
> - STATIC UINT8 *Address = NULL;
> - STATIC UINTN Length = 0x20;
> - STATIC UINTN Width;
> -
> - Width = WidthFromCommandName (Argv[0], 1);
> -
> - switch (Argc) {
> - case 3:
> - Length = AsciiStrHexToUintn(Argv[2]);
> - case 2:
> - Address = (UINT8 *)AsciiStrHexToUintn (Argv[1]);
> - default:
> - break;
> - }
> -
> - OutputData (Address, Length, Width, (UINTN)Address);
> -
> - Address += Length;
> -
> - return EFI_SUCCESS;
> -}
> -
> -
> -/**
> - Fill Memory with data
> -
> - Argv[0] - "mfill"[.#] # is optional width 1, 2, 4, or 8. Default 4
> - Argv[1] - Hex Address to fill
> - Argv[2] - Data to write (0x00 is default)
> - Argv[3] - Number of units to dump.
> -
> - mf.1 0x123445678 aa 100 ; Start at 0x123445678 and write aa (1 byte) to the next 100 bytes
> - mf.4 0x123445678 aa 100 ; Start at 0x123445678 and write aa (4 byte) to the next 400 bytes
> - mf 0x123445678 aa ; Start at 0x123445678 and write aa (4 byte) to the next 1 byte
> - mf 0x123445678 ; Start at 0x123445678 and write 00 (4 byte) to the next 1 byte
> -
> - @param Argc Number of command arguments in Argv
> - @param Argv Array of strings that represent the parsed command line.
> - Argv[0] is the command name
> -
> - @return EFI_SUCCESS
> -
> -**/
> -EFI_STATUS
> -EFIAPI
> -EblMfillCmd (
> - IN UINTN Argc,
> - IN CHAR8 **Argv
> - )
> -{
> - UINTN Address;
> - UINTN EndAddress;
> - UINT32 Data;
> - UINTN Length;
> - UINTN Width;
> -
> - if (Argc < 2) {
> - return EFI_INVALID_PARAMETER;
> - }
> -
> - Width = WidthFromCommandName (Argv[0], 4);
> -
> - Address = AsciiStrHexToUintn (Argv[1]);
> - Data = (Argc > 2) ? (UINT32)AsciiStrHexToUintn (Argv[2]) : 0;
> - Length = (Argc > 3) ? AsciiStrHexToUintn (Argv[3]) : 1;
> -
> - for (EndAddress = Address + (Length * Width); Address < EndAddress; Address += Width) {
> - if (Width == 4) {
> - MmioWrite32 (Address, Data);
> - } else if (Width == 2) {
> - MmioWrite16 (Address, (UINT16)Data);
> - } else {
> - MmioWrite8 (Address, (UINT8)Data);
> - }
> - }
> -
> - return EFI_SUCCESS;
> -}
> -
> -
> -//
> -// Strings for PCI Class code [2]
> -//
> -CHAR8 *gPciDevClass[] = {
> - "Old Device ",
> - "Mass storage ",
> - "Network ",
> - "Display ",
> - "Multimedia ",
> - "Memory controller ",
> - "Bridge device ",
> - "simple communications ",
> - "base system peripherals",
> - "Input devices ",
> - "Docking stations ",
> - "Processors ",
> - "serial bus ",
> -};
> -
> -
> -CHAR8 *gPciSerialClassCodes[] = {
> - "Mass storage ",
> - "Firewire ",
> - "ACCESS bus ",
> - "SSA ",
> - "USB "
> -};
> -
> -
> -/**
> - PCI Dump
> -
> - Argv[0] - "pci"
> - Argv[1] - bus
> - Argv[2] - dev
> - Argv[3] - func
> -
> - @param Argc Number of command arguments in Argv
> - @param Argv Array of strings that represent the parsed command line.
> - Argv[0] is the command name
> -
> - @return EFI_SUCCESS
> -
> -**/
> -EFI_STATUS
> -EFIAPI
> -EblPciCmd (
> - IN UINTN Argc,
> - IN CHAR8 **Argv
> - )
> -{
> - EFI_STATUS Status;
> - EFI_PCI_IO_PROTOCOL *Pci;
> - UINTN HandleCount;
> - EFI_HANDLE *HandleBuffer;
> - UINTN Seg;
> - UINTN Bus;
> - UINTN Dev;
> - UINTN Func;
> - UINTN BusArg;
> - UINTN DevArg;
> - UINTN FuncArg;
> - UINTN Index;
> - UINTN Count;
> - PCI_TYPE_GENERIC PciHeader;
> - PCI_TYPE_GENERIC *Header;
> - PCI_BRIDGE_CONTROL_REGISTER *Bridge;
> - PCI_DEVICE_HEADER_TYPE_REGION *Device;
> - PCI_DEVICE_INDEPENDENT_REGION *Hdr;
> - CHAR8 *Str;
> - UINTN ThisBus;
> -
> -
> - BusArg = (Argc > 1) ? AsciiStrDecimalToUintn (Argv[1]) : 0;
> - DevArg = (Argc > 2) ? AsciiStrDecimalToUintn (Argv[2]) : 0;
> - FuncArg = (Argc > 3) ? AsciiStrDecimalToUintn (Argv[3]) : 0;
> -
> - Header = &PciHeader;
> -
> - Status = gBS->LocateHandleBuffer (ByProtocol, &gEfiPciIoProtocolGuid, NULL, &HandleCount, &HandleBuffer);
> - if (EFI_ERROR (Status)) {
> - AsciiPrint ("No PCI devices found in the system\n");
> - return EFI_SUCCESS;
> - }
> -
> - if (Argc == 1) {
> - // Dump all PCI devices
> - AsciiPrint ("BusDevFun VendorId DeviceId Device Class Sub-Class\n");
> - AsciiPrint ("_____________________________________________________________");
> - for (ThisBus = 0; ThisBus <= PCI_MAX_BUS; ThisBus++) {
> - for (Index = 0; Index < HandleCount; Index++) {
> - Status = gBS->HandleProtocol (HandleBuffer[Index], &gEfiPciIoProtocolGuid, (VOID **)&Pci);
> - if (!EFI_ERROR (Status)) {
> - Pci->GetLocation (Pci, &Seg, &Bus, &Dev, &Func);
> - if (ThisBus != Bus) {
> - continue;
> - }
> - AsciiPrint ("\n%03d.%02d.%02d", Bus, Dev, Func);
> - Status = Pci->Pci.Read (Pci, EfiPciIoWidthUint32, 0, sizeof (PciHeader)/sizeof (UINT32), &PciHeader);
> - if (!EFI_ERROR (Status)) {
> - Hdr = &PciHeader.Bridge.Hdr;
> -
> - if (Hdr->ClassCode[2] < sizeof (gPciDevClass)/sizeof (VOID *)) {
> - Str = gPciDevClass[Hdr->ClassCode[2]];
> - if (Hdr->ClassCode[2] == PCI_CLASS_SERIAL) {
> - if (Hdr->ClassCode[1] < sizeof (gPciSerialClassCodes)/sizeof (VOID *)) {
> - // print out Firewire or USB inplace of Serial Bus controllers
> - Str = gPciSerialClassCodes[Hdr->ClassCode[1]];
> - }
> - }
> - } else {
> - Str = "Unknown device ";
> - }
> - AsciiPrint (" 0x%04x 0x%04x %a 0x%02x", Hdr->VendorId, Hdr->DeviceId, Str, Hdr->ClassCode[1]);
> - }
> - if (Seg != 0) {
> - // Only print Segment if it is non zero. If you only have one PCI segment it is
> - // redundent to print it out
> - AsciiPrint (" Seg:%d", Seg);
> - }
> - }
> - }
> - }
> - AsciiPrint ("\n");
> - } else {
> - // Dump specific PCI device
> - for (Index = 0; Index < HandleCount; Index++) {
> - Status = gBS->HandleProtocol (HandleBuffer[Index], &gEfiPciIoProtocolGuid, (VOID **)&Pci);
> - if (!EFI_ERROR (Status)) {
> - Pci->GetLocation (Pci, &Seg, &Bus, &Dev, &Func);
> - if ((Bus == BusArg) && (Dev == DevArg) && (Func == FuncArg)) {
> - // Only print Segment if it is non zero. If you only have one PCI segment it is
> - // redundant to print it out
> - if (Seg != 0) {
> - AsciiPrint ("Seg:%d ", Seg);
> - }
> - AsciiPrint ("Bus:%d Dev:%d Func:%d ", Bus, Dev, Func);
> -
> - Status = Pci->Pci.Read (Pci, EfiPciIoWidthUint32, 0, sizeof (PciHeader)/sizeof (UINT32), Header);
> - if (!EFI_ERROR (Status)) {
> - Hdr = &PciHeader.Bridge.Hdr;
> - if (IS_PCI_BRIDGE (&PciHeader.Bridge)) {
> - Bridge = &PciHeader.Bridge.Bridge;
> - AsciiPrint (
> - "PCI Bridge. Bus Primary %d Secondary %d Subordinate %d\n",
> - Bridge->PrimaryBus, Bridge->SecondaryBus, Bridge->SubordinateBus
> - );
> - AsciiPrint (" Bar 0: 0x%08x Bar 1: 0x%08x\n", Bridge->Bar[0], Bridge->Bar[1]);
> - } else {
> - Device = &PciHeader.Device.Device;
> - AsciiPrint (
> - "VendorId: 0x%04x DeviceId: 0x%04x SubSusVendorId: 0x%04x SubSysDeviceId: 0x%04x\n",
> - Hdr->VendorId, Hdr->DeviceId, Device->SubsystemVendorID, Device->SubsystemID
> - );
> - AsciiPrint (" Class Code: 0x%02x 0x%02x 0x%02x\n", Hdr->ClassCode[2], Hdr->ClassCode[1], Hdr->ClassCode[0]);
> - for (Count = 0; Count < 6; Count++) {
> - AsciiPrint (" Bar %d: 0x%08x\n", Count, Device->Bar[Count]);
> - }
> - }
> - }
> -
> - AsciiPrint ("\n");
> - break;
> - }
> - }
> - }
> - }
> -
> - FreePool (HandleBuffer);
> - return EFI_SUCCESS;
> -}
> -
> -
> -GLOBAL_REMOVE_IF_UNREFERENCED const EBL_COMMAND_TABLE mCmdPciDebugTemplate[] = {
> - {
> - "pci",
> - " [bus] [dev] [func]; Dump PCI",
> - NULL,
> - EblPciCmd
> - }
> -};
> -
> -
> -GLOBAL_REMOVE_IF_UNREFERENCED const EBL_COMMAND_TABLE mCmdHwDebugTemplate[] =
> -{
> - {
> - "md",
> - "[.{1|2|4}] [Addr] [Len] [1|2|4]; Memory Dump from Addr Len bytes",
> - NULL,
> - EblMdCmd
> - },
> - {
> - "mfill",
> - "[.{1|2|4}] Addr Len [data]; Memory Fill Addr Len*(1|2|4) bytes of data(0)",
> - NULL,
> - EblMfillCmd
> - },
> -};
> -
> -
> -
> -/**
> - Initialize the commands in this in this file
> -**/
> -VOID
> -EblInitializemdHwDebugCmds (
> - VOID
> - )
> -{
> - if (FeaturePcdGet (PcdEmbeddedHwDebugCmd)) {
> - EblAddCommands (mCmdHwDebugTemplate, sizeof (mCmdHwDebugTemplate)/sizeof (EBL_COMMAND_TABLE));
> - }
> - if (FeaturePcdGet (PcdEmbeddedPciDebugCmd)) {
> - EblAddCommands (mCmdPciDebugTemplate, sizeof (mCmdPciDebugTemplate)/sizeof (EBL_COMMAND_TABLE));
> - }
> -}
> -
> diff --git a/EmbeddedPkg/Ebl/HwIoDebug.c b/EmbeddedPkg/Ebl/HwIoDebug.c
> deleted file mode 100644
> index 6c99e7af0e60..000000000000
> --- a/EmbeddedPkg/Ebl/HwIoDebug.c
> +++ /dev/null
> @@ -1,154 +0,0 @@
> -/** @file
> - Hardware IO based debug commands
> -
> - Copyright (c) 2007, Intel Corporation. All rights reserved.<BR>
> - Portions copyright (c) 2008 - 2009, Apple Inc. All rights reserved.<BR>
> - (C) Copyright 2015 Hewlett Packard Enterprise Development LP<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
> - http://opensource.org/licenses/bsd-license.php
> -
> - THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
> - WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
> -
> - Commands useful for debugging hardware. IO commands separated out as not all
> - processor architectures support the IO command.
> -
> -**/
> -
> -#include "Ebl.h"
> -
> -
> -
> -/**
> - Read from IO space
> -
> - Argv[0] - "ioread"[.#] # is optional width 1, 2, or 4. Default 1
> - Argv[1] - Hex IO address
> -
> - ior.4 0x3f8 ;Do a 32-bit IO Read from 0x3f8
> - ior 0x3f8 ;Do a 8-bit IO Read from 0x3f8
> -
> - @param Argc Number of command arguments in Argv
> - @param Argv Array of strings that represent the parsed command line.
> - Argv[0] is the command name
> -
> - @return EFI_SUCCESS
> -
> -**/
> -EFI_STATUS
> -EFIAPI
> -EblIoReadCmd (
> - IN UINTN Argc,
> - IN CHAR8 **Argv
> - )
> -{
> - UINTN Width;
> - UINTN Port;
> - UINTN Data;
> -
> - if (Argc < 2) {
> - return EFI_INVALID_PARAMETER;
> - }
> -
> - Port = AsciiStrHexToUintn (Argv[1]);
> - Width = WidthFromCommandName (Argv[0], 1);
> -
> - if (Width == 1) {
> - Data = IoRead8 (Port);
> - } else if (Width == 2) {
> - Data = IoRead16 (Port);
> - } else if (Width == 4) {
> - Data = IoRead32 (Port);
> - } else {
> - return EFI_INVALID_PARAMETER;
> - }
> -
> - AsciiPrint ("0x%04x = 0x%x", Port, Data);
> -
> - return EFI_SUCCESS;
> -}
> -
> -
> -/**
> - Write to IO space
> -
> - Argv[0] - "iowrite"[.#] # is optional width 1, 2, or 4. Default 1
> - Argv[1] - Hex IO address
> - Argv[2] - Hex data to write
> -
> - iow.4 0x3f8 af ;Do a 32-bit IO write of af to 0x3f8
> - iow 0x3f8 af ;Do an 8-bit IO write of af to 0x3f8
> -
> - @param Argc Number of command arguments in Argv
> - @param Argv Array of strings that represent the parsed command line.
> - Argv[0] is the command name
> -
> - @return EFI_SUCCESS
> -
> -**/
> -EFI_STATUS
> -EFIAPI
> -EblIoWriteCmd (
> - IN UINTN Argc,
> - IN CHAR8 **Argv
> - )
> -{
> - UINTN Width;
> - UINTN Port;
> - UINTN Data;
> -
> - if (Argc < 3) {
> - return EFI_INVALID_PARAMETER;
> - }
> -
> - Port = AsciiStrHexToUintn (Argv[1]);
> - Data = AsciiStrHexToUintn (Argv[2]);
> - Width = WidthFromCommandName (Argv[0], 1);
> -
> - if (Width == 1) {
> - IoWrite8 (Port, (UINT8)Data);
> - } else if (Width == 2) {
> - IoWrite16 (Port, (UINT16)Data);
> - } else if (Width == 4) {
> - IoWrite32 (Port, (UINT32)Data);
> - } else {
> - return EFI_INVALID_PARAMETER;
> - }
> - return EFI_SUCCESS;
> -}
> -
> -
> -GLOBAL_REMOVE_IF_UNREFERENCED const EBL_COMMAND_TABLE mCmdHwIoDebugTemplate[] =
> -{
> - {
> - "ioread",
> - "[.{1|2|4}] Port ; IO read of width byte(s) from Port",
> - NULL,
> - EblIoReadCmd
> - },
> - {
> - "iowrite",
> - "[.{1|2|4}] Port Data ; IO write Data of width byte(s) to Port",
> - NULL,
> - EblIoWriteCmd
> - }
> -};
> -
> -
> -
> -/**
> - Initialize the commands in this in this file
> -**/
> -VOID
> -EblInitializemdHwIoDebugCmds (
> - VOID
> - )
> -{
> - if (FeaturePcdGet (PcdEmbeddedIoEnable)) {
> - EblAddCommands (mCmdHwIoDebugTemplate, sizeof (mCmdHwIoDebugTemplate)/sizeof (EBL_COMMAND_TABLE));
> - }
> -}
> -
> diff --git a/EmbeddedPkg/Ebl/Main.c b/EmbeddedPkg/Ebl/Main.c
> deleted file mode 100644
> index 62f559fccfe8..000000000000
> --- a/EmbeddedPkg/Ebl/Main.c
> +++ /dev/null
> @@ -1,677 +0,0 @@
> -/** @file
> - Basic command line parser for EBL (Embedded Boot Loader)
> -
> - Copyright (c) 2007, Intel Corporation. All rights reserved.<BR>
> - Portions copyright (c) 2008 - 2009, Apple Inc. All rights reserved.<BR>
> - (C) Copyright 2015 Hewlett Packard Enterprise Development LP<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
> - http://opensource.org/licenses/bsd-license.php
> -
> - THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
> - WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
> -
> -
> -**/
> -
> -#include "Ebl.h"
> -
> -// Globals for command history processing
> -INTN mCmdHistoryEnd = -1;
> -INTN mCmdHistoryStart = -1;
> -INTN mCmdHistoryCurrent = -1;
> -CHAR8 mCmdHistory[MAX_CMD_HISTORY][MAX_CMD_LINE];
> -CHAR8 *mCmdBlank = "";
> -
> -// Globals to remember current screen geometry
> -UINTN gScreenColumns;
> -UINTN gScreenRows;
> -
> -// Global to turn on/off breaking commands with prompts before they scroll the screen
> -BOOLEAN gPageBreak = TRUE;
> -
> -VOID
> -RingBufferIncrement (
> - IN INTN *Value
> - )
> -{
> - *Value = *Value + 1;
> -
> - if (*Value >= MAX_CMD_HISTORY) {
> - *Value = 0;
> - }
> -}
> -
> -VOID
> -RingBufferDecrement (
> - IN INTN *Value
> - )
> -{
> - *Value = *Value - 1;
> -
> - if (*Value < 0) {
> - *Value = MAX_CMD_HISTORY - 1;
> - }
> -}
> -
> -/**
> - Save this command in the circular history buffer. Older commands are
> - overwritten with newer commands.
> -
> - @param Cmd Command line to archive the history of.
> -
> - @return None
> -
> -**/
> -VOID
> -SetCmdHistory (
> - IN CHAR8 *Cmd
> - )
> -{
> - // Don't bother adding empty commands to the list
> - if (AsciiStrLen(Cmd) != 0) {
> -
> - // First entry
> - if (mCmdHistoryStart == -1) {
> - mCmdHistoryStart = 0;
> - mCmdHistoryEnd = 0;
> - } else {
> - // Record the new command at the next index
> - RingBufferIncrement(&mCmdHistoryStart);
> -
> - // If the next index runs into the end index, shuffle end back by one
> - if (mCmdHistoryStart == mCmdHistoryEnd) {
> - RingBufferIncrement(&mCmdHistoryEnd);
> - }
> - }
> -
> - // Copy the new command line into the ring buffer
> - AsciiStrnCpyS (&mCmdHistory[mCmdHistoryStart][0], MAX_CMD_LINE, Cmd, MAX_CMD_LINE);
> - }
> -
> - // Reset the command history for the next up arrow press
> - mCmdHistoryCurrent = mCmdHistoryStart;
> -}
> -
> -
> -/**
> - Retreave data from the Command History buffer. Direction maps into up arrow
> - an down arrow on the command line
> -
> - @param Direction Command forward or back
> -
> - @return The Command history based on the Direction
> -
> -**/
> -CHAR8 *
> -GetCmdHistory (
> - IN UINT16 Direction
> - )
> -{
> - CHAR8 *HistoricalCommand = NULL;
> -
> - // No history yet?
> - if (mCmdHistoryCurrent == -1) {
> - HistoricalCommand = mCmdBlank;
> - goto Exit;
> - }
> -
> - if (Direction == SCAN_UP) {
> - HistoricalCommand = &mCmdHistory[mCmdHistoryCurrent][0];
> -
> - // if we just echoed the last command, hang out there, don't wrap around
> - if (mCmdHistoryCurrent == mCmdHistoryEnd) {
> - goto Exit;
> - }
> -
> - // otherwise, back up by one
> - RingBufferDecrement(&mCmdHistoryCurrent);
> -
> - } else if (Direction == SCAN_DOWN) {
> -
> - // if we last echoed the start command, put a blank prompt out
> - if (mCmdHistoryCurrent == mCmdHistoryStart) {
> - HistoricalCommand = mCmdBlank;
> - goto Exit;
> - }
> -
> - // otherwise increment the current pointer and return that command
> - RingBufferIncrement(&mCmdHistoryCurrent);
> - RingBufferIncrement(&mCmdHistoryCurrent);
> -
> - HistoricalCommand = &mCmdHistory[mCmdHistoryCurrent][0];
> - RingBufferDecrement(&mCmdHistoryCurrent);
> - }
> -
> -Exit:
> - return HistoricalCommand;
> -}
> -
> -
> -/**
> - Parse the CmdLine and break it up into Argc (arg count) and Argv (array of
> - pointers to each argument). The Cmd buffer is altered and separators are
> - converted to string terminators. This allows Argv to point into CmdLine.
> - A CmdLine can support multiple commands. The next command in the command line
> - is returned if it exists.
> -
> - @param CmdLine String to parse for a set of commands
> - @param Argc Returns the number of arguments in the CmdLine current command
> - @param Argv Argc pointers to each string in CmdLine
> -
> - @return Next Command in the command line or NULL if non exists
> -**/
> -CHAR8 *
> -ParseArguments (
> - IN CHAR8 *CmdLine,
> - OUT UINTN *Argc,
> - OUT CHAR8 **Argv
> - )
> -{
> - UINTN Arg;
> - CHAR8 *Char;
> - BOOLEAN LookingForArg;
> - BOOLEAN InQuote;
> -
> - *Argc = 0;
> - if (AsciiStrLen (CmdLine) == 0) {
> - return NULL;
> - }
> -
> - // Walk a single command line. A CMD_SEPARATOR allows multiple commands on a single line
> - InQuote = FALSE;
> - LookingForArg = TRUE;
> - for (Char = CmdLine, Arg = 0; *Char != '\0'; Char++) {
> - if (!InQuote && *Char == CMD_SEPARATOR) {
> - break;
> - }
> -
> - // Perform any text conversion here
> - if (*Char == '\t') {
> - // TAB to space
> - *Char = ' ';
> - }
> -
> - if (LookingForArg) {
> - // Look for the beginning of an Argv[] entry
> - if (*Char == '"') {
> - Argv[Arg++] = ++Char;
> - LookingForArg = FALSE;
> - InQuote = TRUE;
> - } else if (*Char != ' ') {
> - Argv[Arg++] = Char;
> - LookingForArg = FALSE;
> - }
> - } else {
> - // Looking for the terminator of an Argv[] entry
> - if (!InQuote && (*Char == ' ')) {
> - *Char = '\0';
> - LookingForArg = TRUE;
> - } else if (!InQuote && (*Char == '"') && (*(Char-1) != '\\')) {
> - InQuote = TRUE;
> - } else if (InQuote && (*Char == '"') && (*(Char-1) != '\\')) {
> - *Char = '\0';
> - InQuote = FALSE;
> - }
> - }
> - }
> -
> - *Argc = Arg;
> -
> - if (*Char == CMD_SEPARATOR) {
> - // Replace the command delimiter with null and return pointer to next command line
> - *Char = '\0';
> - return ++Char;
> - }
> -
> - return NULL;
> -}
> -
> -
> -/**
> - Return a keypress or optionally timeout if a timeout value was passed in.
> - An optional callback function is called every second when waiting for a
> - timeout.
> -
> - @param Key EFI Key information returned
> - @param TimeoutInSec Number of seconds to wait to timeout
> - @param CallBack Callback called every second during the timeout wait
> -
> - @return EFI_SUCCESS Key was returned
> - @return EFI_TIMEOUT If the TimoutInSec expired
> -
> -**/
> -EFI_STATUS
> -EFIAPI
> -EblGetCharKey (
> - IN OUT EFI_INPUT_KEY *Key,
> - IN UINTN TimeoutInSec,
> - IN EBL_GET_CHAR_CALL_BACK CallBack OPTIONAL
> - )
> -{
> - EFI_STATUS Status;
> - UINTN WaitCount;
> - UINTN WaitIndex;
> - EFI_EVENT WaitList[2];
> -
> - WaitCount = 1;
> - WaitList[0] = gST->ConIn->WaitForKey;
> - if (TimeoutInSec != 0) {
> - // Create a time event for 1 sec duration if we have a timeout
> - gBS->CreateEvent (EVT_TIMER, 0, NULL, NULL, &WaitList[1]);
> - gBS->SetTimer (WaitList[1], TimerPeriodic, EFI_SET_TIMER_TO_SECOND);
> - WaitCount++;
> - }
> -
> - for (;;) {
> - Status = gBS->WaitForEvent (WaitCount, WaitList, &WaitIndex);
> - ASSERT_EFI_ERROR (Status);
> -
> - switch (WaitIndex) {
> - case 0:
> - // Key event signaled
> - Status = gST->ConIn->ReadKeyStroke (gST->ConIn, Key);
> - if (!EFI_ERROR (Status)) {
> - if (WaitCount == 2) {
> - gBS->CloseEvent (WaitList[1]);
> - }
> - return EFI_SUCCESS;
> - }
> - break;
> -
> - case 1:
> - // Periodic 1 sec timer signaled
> - TimeoutInSec--;
> - if (CallBack != NULL) {
> - // Call the users callback function if registered
> - CallBack (TimeoutInSec);
> - }
> - if (TimeoutInSec == 0) {
> - gBS->CloseEvent (WaitList[1]);
> - return EFI_TIMEOUT;
> - }
> - break;
> - default:
> - ASSERT (FALSE);
> - }
> - }
> -}
> -
> -
> -/**
> - This routine is used prevent command output data from scrolling off the end
> - of the screen. The global gPageBreak is used to turn on or off this feature.
> - If the CurrentRow is near the end of the screen pause and print out a prompt
> - If the use hits Q to quit return TRUE else for any other key return FALSE.
> - PrefixNewline is used to figure out if a newline is needed before the prompt
> - string. This depends on the last print done before calling this function.
> - CurrentRow is updated by one on a call or set back to zero if a prompt is
> - needed.
> -
> - @param CurrentRow Used to figure out if its the end of the page and updated
> - @param PrefixNewline Did previous print issue a newline
> -
> - @return TRUE if Q was hit to quit, FALSE in all other cases.
> -
> -**/
> -BOOLEAN
> -EFIAPI
> -EblAnyKeyToContinueQtoQuit (
> - IN UINTN *CurrentRow,
> - IN BOOLEAN PrefixNewline
> - )
> -{
> - EFI_INPUT_KEY InputKey;
> -
> - if (!gPageBreak) {
> - // global disable for this feature
> - return FALSE;
> - }
> -
> - if (*CurrentRow >= (gScreenRows - 2)) {
> - if (PrefixNewline) {
> - AsciiPrint ("\n");
> - }
> - AsciiPrint ("Any key to continue (Q to quit): ");
> - EblGetCharKey (&InputKey, 0, NULL);
> - AsciiPrint ("\n");
> -
> - // Time to promt to stop the screen. We have to leave space for the prompt string
> - *CurrentRow = 0;
> - if (InputKey.UnicodeChar == 'Q' || InputKey.UnicodeChar == 'q') {
> - return TRUE;
> - }
> - } else {
> - *CurrentRow += 1;
> - }
> -
> - return FALSE;
> -}
> -
> -
> -/**
> - Set the text color of the EFI Console. If a zero is passed in reset to
> - default text/background color.
> -
> - @param Attribute For text and background color
> -
> -**/
> -VOID
> -EblSetTextColor (
> - UINTN Attribute
> - )
> -{
> - if (Attribute == 0) {
> - // Set the text color back to default
> - Attribute = (UINTN)PcdGet32 (PcdEmbeddedDefaultTextColor);
> - }
> -
> - gST->ConOut->SetAttribute (gST->ConOut, Attribute);
> -}
> -
> -
> -/**
> - Collect the keyboard input for a cmd line. Carriage Return, New Line, or ESC
> - terminates the command line. You can edit the command line via left arrow,
> - delete and backspace and they all back up and erase the command line.
> - No edit of command line is possible without deletion at this time!
> - The up arrow and down arrow fill Cmd with information from the history
> - buffer.
> -
> - @param Cmd Command line to return
> - @param CmdMaxSize Maximum size of Cmd
> -
> - @return The Status of EblGetCharKey()
> -
> -**/
> -EFI_STATUS
> -GetCmd (
> - IN OUT CHAR8 *Cmd,
> - IN UINTN CmdMaxSize
> - )
> -{
> - EFI_STATUS Status;
> - UINTN Index;
> - UINTN Index2;
> - CHAR8 Char;
> - CHAR8 *History;
> - EFI_INPUT_KEY Key;
> -
> - for (Index = 0; Index < CmdMaxSize - 1;) {
> - Status = EblGetCharKey (&Key, 0, NULL);
> - if (EFI_ERROR (Status)) {
> - Cmd[Index] = '\0';
> - AsciiPrint ("\n");
> - return Status;
> - }
> -
> - Char = (CHAR8)Key.UnicodeChar;
> - if ((Char == '\n') || (Char == '\r') || (Char == 0x7f)) {
> - Cmd[Index] = '\0';
> - if (FixedPcdGetBool(PcdEmbeddedShellCharacterEcho) == TRUE) {
> - AsciiPrint ("\n\r");
> - }
> - return EFI_SUCCESS;
> - } else if ((Char == '\b') || (Key.ScanCode == SCAN_LEFT) || (Key.ScanCode == SCAN_DELETE)){
> - if (Index != 0) {
> - Index--;
> - //
> - // Update the display
> - //
> - AsciiPrint ("\b \b");
> - }
> - } else if ((Key.ScanCode == SCAN_UP) || Key.ScanCode == SCAN_DOWN) {
> - History = GetCmdHistory (Key.ScanCode);
> - //
> - // Clear display line
> - //
> - for (Index2 = 0; Index2 < Index; Index2++) {
> - AsciiPrint ("\b \b");
> - }
> - AsciiPrint (History);
> - Index = AsciiStrLen (History);
> - AsciiStrnCpyS (Cmd, CmdMaxSize, History, CmdMaxSize);
> - } else {
> - Cmd[Index++] = Char;
> - if (FixedPcdGetBool(PcdEmbeddedShellCharacterEcho) == TRUE) {
> - AsciiPrint ("%c", Char);
> - }
> - }
> - }
> -
> - return EFI_SUCCESS;
> -}
> -
> -
> -/**
> - Print the boot up banner for the EBL.
> -**/
> -VOID
> -EblPrintStartupBanner (
> - VOID
> - )
> -{
> - AsciiPrint ("Embedded Boot Loader (");
> - EblSetTextColor (EFI_YELLOW);
> - AsciiPrint ("EBL");
> - EblSetTextColor (0);
> - AsciiPrint (") prototype. Built at %a on %a\n",__TIME__, __DATE__);
> - AsciiPrint ("THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN 'AS IS' BASIS,\nWITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\n");
> - AsciiPrint ("Please send feedback to edk2-devel@lists.sourceforge.net\n");
> -}
> -
> -
> -/**
> - Send null requests to all removable media block IO devices so the a media add/remove/change
> - can be detected in real before we execute a command.
> -
> - This is mainly due to the fact that the FAT driver does not do this today so you can get stale
> - dir commands after an SD Card has been removed.
> -**/
> -VOID
> -EblProbeRemovableMedia (
> - VOID
> - )
> -{
> - UINTN Index;
> - UINTN Max;
> - EFI_OPEN_FILE *File;
> -
> - //
> - // Probe for media insertion/removal in removable media devices
> - //
> - Max = EfiGetDeviceCounts (EfiOpenBlockIo);
> - if (Max != 0) {
> - for (Index = 0; Index < Max; Index++) {
> - File = EfiDeviceOpenByType (EfiOpenBlockIo, Index);
> - if (File != NULL) {
> - if (File->FsBlockIoMedia->RemovableMedia) {
> - // Probe to see if media is present (or not) or media changed
> - // this causes the ReinstallProtocolInterface() to fire in the
> - // block io driver to update the system about media change events
> - File->FsBlockIo->ReadBlocks (File->FsBlockIo, File->FsBlockIo->Media->MediaId, (EFI_LBA)0, 0, NULL);
> - }
> - EfiClose (File);
> - }
> - }
> - }
> -}
> -
> -
> -
> -
> -/**
> - Print the prompt for the EBL.
> -**/
> -VOID
> -EblPrompt (
> - VOID
> - )
> -{
> - EblSetTextColor (EFI_YELLOW);
> - AsciiPrint ("%a %a",(CHAR8 *)PcdGetPtr (PcdEmbeddedPrompt), EfiGetCwd ());
> - EblSetTextColor (0);
> - AsciiPrint ("%a", ">");
> -}
> -
> -
> -
> -/**
> - Parse a command line and execute the commands. The ; separator allows
> - multiple commands for each command line. Stop processing if one of the
> - commands returns an error.
> -
> - @param CmdLine Command Line to process.
> - @param MaxCmdLineSize MaxSize of the Command line
> -
> - @return EFI status of the Command
> -
> -**/
> -EFI_STATUS
> -ProcessCmdLine (
> - IN CHAR8 *CmdLine,
> - IN UINTN MaxCmdLineSize
> - )
> -{
> - EFI_STATUS Status;
> - EBL_COMMAND_TABLE *Cmd;
> - CHAR8 *Ptr;
> - UINTN Argc;
> - CHAR8 *Argv[MAX_ARGS];
> -
> - // Parse the command line. The loop processes commands separated by ;
> - for (Ptr = CmdLine, Status = EFI_SUCCESS; Ptr != NULL;) {
> - Ptr = ParseArguments (Ptr, &Argc, Argv);
> - if (Argc != 0) {
> - Cmd = EblGetCommand (Argv[0]);
> - if (Cmd != NULL) {
> - // Execute the Command!
> - Status = Cmd->Command (Argc, Argv);
> - if (Status == EFI_ABORTED) {
> - // exit command so lets exit
> - break;
> - } else if (Status == EFI_TIMEOUT) {
> - // pause command got input so don't process any more cmd on this cmd line
> - break;
> - } else if (EFI_ERROR (Status)) {
> - AsciiPrint ("%a returned %r error\n", Cmd->Name, Status);
> - // if any command fails stop processing CmdLine
> - break;
> - }
> - } else {
> - AsciiPrint ("The command '%a' is not supported.\n", Argv[0]);
> - }
> - }
> - }
> -
> - return Status;
> -}
> -
> -
> -
> -/**
> - Embedded Boot Loader (EBL) - A simple EFI command line application for embedded
> - devices. PcdEmbeddedAutomaticBootCommand is a complied in command line that
> - gets executed automatically. The ; separator allows multiple commands
> - for each command line.
> -
> - @param ImageHandle EFI ImageHandle for this application.
> - @param SystemTable EFI system table
> -
> - @return EFI status of the application
> -
> -**/
> -EFI_STATUS
> -EFIAPI
> -EdkBootLoaderEntry (
> - IN EFI_HANDLE ImageHandle,
> - IN EFI_SYSTEM_TABLE *SystemTable
> - )
> -{
> - EFI_STATUS Status;
> - CHAR8 CmdLine[MAX_CMD_LINE];
> - CHAR16 *CommandLineVariable = NULL;
> - CHAR16 *CommandLineVariableName = L"default-cmdline";
> - UINTN CommandLineVariableSize = 0;
> - EFI_GUID VendorGuid;
> -
> - // Initialize tables of commands
> - EblInitializeCmdTable ();
> - EblInitializeDeviceCmd ();
> - EblInitializemdHwDebugCmds ();
> - EblInitializemdHwIoDebugCmds ();
> - EblInitializeDirCmd ();
> - EblInitializeHobCmd ();
> - EblInitializeScriptCmd ();
> - EblInitializeExternalCmd ();
> - EblInitializeNetworkCmd();
> - EblInitializeVariableCmds ();
> -
> - if (gST->ConOut == NULL) {
> - DEBUG((EFI_D_ERROR,"Error: No Console Output\n"));
> - return EFI_NOT_READY;
> - }
> -
> - // Disable the 5 minute EFI watchdog time so we don't get automatically reset
> - gBS->SetWatchdogTimer (0, 0, 0, NULL);
> -
> - if (FeaturePcdGet (PcdEmbeddedMacBoot)) {
> - // A MAC will boot in graphics mode, so turn it back to text here
> - // This protocol was removed from edk2. It is only an edk thing. We need to make our own copy.
> - // DisableQuietBoot ();
> -
> - // Enable the biggest output screen size possible
> - gST->ConOut->SetMode (gST->ConOut, (UINTN)gST->ConOut->Mode->MaxMode - 1);
> -
> - }
> -
> - // Save current screen mode
> - gST->ConOut->QueryMode (gST->ConOut, gST->ConOut->Mode->Mode, &gScreenColumns, &gScreenRows);
> -
> - EblPrintStartupBanner ();
> -
> - // Parse command line and handle commands separated by ;
> - // The loop prints the prompt gets user input and saves history
> -
> - // Look for a variable with a default command line, otherwise use the Pcd
> - ZeroMem(&VendorGuid, sizeof(EFI_GUID));
> -
> - Status = gRT->GetVariable(CommandLineVariableName, &VendorGuid, NULL, &CommandLineVariableSize, CommandLineVariable);
> - if (Status == EFI_BUFFER_TOO_SMALL) {
> - CommandLineVariable = AllocatePool(CommandLineVariableSize);
> -
> - Status = gRT->GetVariable(CommandLineVariableName, &VendorGuid, NULL, &CommandLineVariableSize, CommandLineVariable);
> - if (!EFI_ERROR(Status)) {
> - UnicodeStrToAsciiStrS (CommandLineVariable, CmdLine, MAX_CMD_LINE);
> - }
> -
> - FreePool(CommandLineVariable);
> - }
> -
> - if (EFI_ERROR(Status)) {
> - AsciiStrCpyS (CmdLine, MAX_CMD_LINE, (CHAR8 *)PcdGetPtr (PcdEmbeddedAutomaticBootCommand));
> - }
> -
> - for (;;) {
> - Status = ProcessCmdLine (CmdLine, MAX_CMD_LINE);
> - if (Status == EFI_ABORTED) {
> - // if a command returns EFI_ABORTED then exit the EBL
> - EblShutdownExternalCmdTable ();
> - return EFI_SUCCESS;
> - }
> -
> - // get the command line from the user
> - EblPrompt ();
> - GetCmd (CmdLine, MAX_CMD_LINE);
> - SetCmdHistory (CmdLine);
> -
> - if (FeaturePcdGet (PcdEmbeddedProbeRemovable)) {
> - // Probe removable media devices to see if media has been inserted or removed.
> - EblProbeRemovableMedia ();
> - }
> - }
> -}
> -
> -
> diff --git a/EmbeddedPkg/Ebl/Network.c b/EmbeddedPkg/Ebl/Network.c
> deleted file mode 100644
> index f2562e60b0db..000000000000
> --- a/EmbeddedPkg/Ebl/Network.c
> +++ /dev/null
> @@ -1,106 +0,0 @@
> -/** @file
> - EBL commands for Network Devices
> -
> - Copyright (c) 2008 - 2009, Apple Inc. All rights reserved.<BR>
> - (C) Copyright 2015 Hewlett Packard Enterprise Development LP<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
> - http://opensource.org/licenses/bsd-license.php
> -
> - THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
> - WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
> -
> -**/
> -
> -#include "Ebl.h"
> -
> -EFI_STATUS
> -ParseIp (
> - IN CHAR8 *String,
> - OUT EFI_IP_ADDRESS *Address
> - )
> -{
> - Address->v4.Addr[0] = (UINT8)AsciiStrDecimalToUintn (String);
> - String = AsciiStrStr(String, ".") + 1;
> - Address->v4.Addr[1] = (UINT8)AsciiStrDecimalToUintn (String);
> - String = AsciiStrStr(String, ".") + 1;
> - Address->v4.Addr[2] = (UINT8)AsciiStrDecimalToUintn (String);
> - String = AsciiStrStr(String, ".") + 1;
> - Address->v4.Addr[3] = (UINT8)AsciiStrDecimalToUintn (String);
> -
> - return EFI_SUCCESS;
> -}
> -
> -EFI_STATUS
> -EFIAPI
> -EblIpCmd (
> - IN UINTN Argc,
> - IN CHAR8 **Argv
> - )
> -{
> - EFI_STATUS Status = EFI_INVALID_PARAMETER;
> - EFI_MAC_ADDRESS Mac;
> - EFI_IP_ADDRESS Ip;
> -
> - if (Argc == 1) {
> - // Get current IP/MAC
> -
> - // Get current MAC address
> - Status = EblGetCurrentMacAddress (&Mac);
> - if (EFI_ERROR (Status)) {
> - goto Exit;
> - }
> -
> - AsciiPrint ("MAC Address: %02x:%02x:%02x:%02x:%02x:%02x\n", Mac.Addr[0], Mac.Addr[1], Mac.Addr[2], Mac.Addr[3], Mac.Addr[4], Mac.Addr[5]);
> -
> - // Get current IP address
> - Status = EblGetCurrentIpAddress (&Ip);
> - if (EFI_ERROR(Status)) {
> - AsciiPrint("IP Address is not configured.\n");
> - Status = EFI_SUCCESS;
> - goto Exit;
> - }
> -
> - AsciiPrint("IP Address: %d.%d.%d.%d\n", Ip.v4.Addr[0], Ip.v4.Addr[1],Ip.v4.Addr[2], Ip.v4.Addr[3]);
> -
> - } else if ((Argv[1][0] == 'r') && (Argc == 2)) {
> - // Get new address via dhcp
> - Status = EblPerformDHCP (TRUE);
> - } else if ((Argv[1][0] == 's') && (Argc == 3)) {
> - // Set static IP
> - Status = ParseIp (Argv[2], &Ip);
> - if (EFI_ERROR (Status)) {
> - goto Exit;
> - }
> -
> - Status = EblSetStationIp (&Ip, NULL);
> - }
> -
> -Exit:
> - return Status;
> -}
> -
> -GLOBAL_REMOVE_IF_UNREFERENCED const EBL_COMMAND_TABLE mCmdNetworkTemplate[] =
> -{
> - {
> - "ip",
> - " ; print current ip address\n\r [r]; request DHCP address\n\r [s] ipaddr; set static IP address",
> - NULL,
> - EblIpCmd
> - }
> -};
> -
> -
> -/**
> - Initialize the commands in this in this file
> -**/
> -VOID
> -EblInitializeNetworkCmd (
> - VOID
> - )
> -{
> - EblAddCommands (mCmdNetworkTemplate, sizeof (mCmdNetworkTemplate)/sizeof (EBL_COMMAND_TABLE));
> -}
> -
> diff --git a/EmbeddedPkg/Ebl/Script.c b/EmbeddedPkg/Ebl/Script.c
> deleted file mode 100644
> index 73360cb24840..000000000000
> --- a/EmbeddedPkg/Ebl/Script.c
> +++ /dev/null
> @@ -1,128 +0,0 @@
> -/** @file
> - Script command allows the execution of commands from a text file
> -
> - Copyright (c) 2007, Intel Corporation. All rights reserved.<BR>
> - Portions copyright (c) 2008 - 2009, Apple Inc. All rights reserved.<BR>
> - (C) Copyright 2015 Hewlett Packard Enterprise Development LP<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
> - http://opensource.org/licenses/bsd-license.php
> -
> - THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
> - WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
> -
> - Module Name: EfiDevice.c
> -
> -**/
> -
> -#include "Ebl.h"
> -
> -
> -/**
> - Execute the passed in file like a series of commands. The ; can be used on
> - a single line to indicate multiple commands per line. The Ascii text file
> - can contain any number of lines. The following line termination forms are
> - supported:
> - LF : Unix, Mac OS X*, BeOS
> - CR+LF: MS-DOS*, Microsoft Windows*
> - CR : Commodore, Apple II, and really Mac OS
> - LF+CR: for simplicity and completeness
> -
> - Argv[0] - "script"
> - Argv[1] - Device Name:path for the file to load
> -
> - script fv1:\script.txt
> -
> - @param Argc Number of command arguments in Argv
> - @param Argv Array of strings that represent the parsed command line.
> - Argv[0] is the command name
> -
> - @return EFI_SUCCESS
> -
> -**/
> -EFI_STATUS
> -EFIAPI
> -EblScriptCmd (
> - IN UINTN Argc,
> - IN CHAR8 **Argv
> - )
> -{
> - EFI_STATUS Status;
> - EFI_OPEN_FILE *File;
> - VOID *Address;
> - UINTN Size;
> - CHAR8 *Ptr;
> - CHAR8 *ScanPtr;
> - UINTN CmdLineSize;
> -
> -
> -
> - if (Argc < 2) {
> - // file name required
> - return EFI_SUCCESS;
> - }
> -
> - File = EfiOpen (Argv[1], EFI_FILE_MODE_READ, 0);
> - if (File == NULL) {
> - AsciiPrint (" %a is not a valid path\n", Argv[1]);
> - return EFI_SUCCESS;
> - }
> -
> - Status = EfiReadAllocatePool (File, &Address, &Size);
> - if (!EFI_ERROR (Status)) {
> - // Loop through each line in the text file
> - for (Ptr = (CHAR8 *)Address; (Ptr < (((CHAR8 *)Address) + Size)) && !EFI_ERROR (Status); Ptr += CmdLineSize) {
> - for (CmdLineSize = 0, ScanPtr = Ptr; ; CmdLineSize++, ScanPtr++) {
> - // look for the end of the line
> - if ((*ScanPtr == EBL_CR) || (*ScanPtr == EBL_LF)) {
> - // convert to NULL as this is what input routine would do
> - *ScanPtr = 0;
> - if ((*(ScanPtr + 1) == EBL_CR) || (*(ScanPtr + 1) == EBL_LF)) {
> - // if its a set get the 2nd EOL char
> - CmdLineSize++;
> - *(ScanPtr + 1) = 0;
> - }
> - CmdLineSize++;
> - break;
> - }
> -
> - }
> -
> - Status = ProcessCmdLine (Ptr, CmdLineSize);
> - }
> -
> - FreePool (Address);
> - }
> -
> - EfiClose (File);
> - return Status;
> -}
> -
> -
> -
> -GLOBAL_REMOVE_IF_UNREFERENCED const EBL_COMMAND_TABLE mScriptTemplate[] = {
> - {
> - "script",
> - " device:path; load an ascii file and execute it like commands",
> - NULL,
> - EblScriptCmd
> - }
> -};
> -
> -
> -/**
> - Initialize the commands in this in this file
> -**/
> -
> -VOID
> -EblInitializeScriptCmd (
> - VOID
> - )
> -{
> - if (FeaturePcdGet (PcdEmbeddedScriptCmd)) {
> - EblAddCommands (mScriptTemplate, sizeof (mScriptTemplate)/sizeof (EBL_COMMAND_TABLE));
> - }
> -}
> -
> diff --git a/EmbeddedPkg/Ebl/Variable.c b/EmbeddedPkg/Ebl/Variable.c
> deleted file mode 100644
> index 92464a6b7133..000000000000
> --- a/EmbeddedPkg/Ebl/Variable.c
> +++ /dev/null
> @@ -1,221 +0,0 @@
> -/** @file
> -*
> -* Copyright (c) 2011, ARM Limited. All rights reserved.
> -* (C) Copyright 2015 Hewlett Packard Enterprise Development LP<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
> -* http://opensource.org/licenses/bsd-license.php
> -*
> -* THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
> -* WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
> -*
> -**/
> -
> -#include "Ebl.h"
> -
> -#include <Guid/GlobalVariable.h>
> -
> -EFI_STATUS
> -EFIAPI
> -EblGetCmd (
> - IN UINTN Argc,
> - IN CHAR8 **Argv
> - )
> -{
> - EFI_STATUS Status = EFI_INVALID_PARAMETER;
> - UINTN Size;
> - VOID* Value;
> - CHAR8* AsciiVariableName = NULL;
> - CHAR16* VariableName;
> - UINTN VariableNameLen;
> - UINT32 Index;
> -
> - if (Argc == 1) {
> - AsciiPrint("Variable name is missing.\n");
> - return Status;
> - }
> -
> - for (Index = 1; Index < Argc; Index++) {
> - if (Argv[Index][0] == '-') {
> - AsciiPrint("Warning: '%a' not recognized.\n",Argv[Index]);
> - } else {
> - AsciiVariableName = Argv[Index];
> - }
> - }
> -
> - if (AsciiVariableName == NULL) {
> - AsciiPrint("Variable name is missing.\n");
> - return Status;
> - } else {
> - VariableNameLen = AsciiStrLen (AsciiVariableName) + 1;
> - VariableName = AllocatePool (VariableNameLen * sizeof (CHAR16));
> - AsciiStrToUnicodeStrS (AsciiVariableName, VariableName, VariableNameLen);
> - }
> -
> - // Try to get the variable size.
> - Value = NULL;
> - Size = 0;
> - Status = gRT->GetVariable (VariableName, &gEfiGlobalVariableGuid, NULL, &Size, Value);
> - if (Status == EFI_NOT_FOUND) {
> - AsciiPrint("Variable name '%s' not found.\n",VariableName);
> - } else if (Status == EFI_BUFFER_TOO_SMALL) {
> - // Get the environment variable value
> - Value = AllocatePool (Size);
> - if (Value == NULL) {
> - return EFI_OUT_OF_RESOURCES;
> - }
> -
> - Status = gRT->GetVariable ((CHAR16 *)VariableName, &gEfiGlobalVariableGuid, NULL, &Size, Value);
> - if (EFI_ERROR (Status)) {
> - AsciiPrint("Error: '%r'\n",Status);
> - } else {
> - AsciiPrint("%a=%a\n",AsciiVariableName,Value);
> - }
> - FreePool(Value);
> - } else {
> - AsciiPrint("Error: '%r'\n",Status);
> - }
> -
> - FreePool(VariableName);
> - return Status;
> -}
> -
> -EFI_STATUS
> -EFIAPI
> -EblSetCmd (
> - IN UINTN Argc,
> - IN CHAR8 **Argv
> - )
> -{
> - EFI_STATUS Status = EFI_INVALID_PARAMETER;
> - CHAR8* AsciiVariableSetting = NULL;
> - CHAR8* AsciiVariableName;
> - CHAR8* AsciiValue;
> - UINT32 AsciiValueLength;
> - CHAR16* VariableName;
> - UINTN VariableNameLen;
> - UINT32 Index;
> - UINT32 EscapedQuotes = 0;
> - BOOLEAN Volatile = FALSE;
> -
> - if (Argc == 1) {
> - AsciiPrint("Variable name is missing.\n");
> - return Status;
> - }
> -
> - for (Index = 1; Index < Argc; Index++) {
> - if (AsciiStrCmp(Argv[Index],"-v") == 0) {
> - Volatile = 0;
> - } else if (Argv[Index][0] == '-') {
> - AsciiPrint("Warning: '%a' not recognized.\n",Argv[Index]);
> - } else {
> - AsciiVariableSetting = Argv[Index];
> - }
> - }
> -
> - if (AsciiVariableSetting == NULL) {
> - AsciiPrint("Variable name is missing.\n");
> - return Status;
> - }
> -
> - // Check if it is a valid variable setting
> - AsciiValue = AsciiStrStr (AsciiVariableSetting,"=");
> - if (AsciiValue == NULL) {
> - //
> - // There is no value. It means this variable will be deleted
> - //
> -
> - // Convert VariableName into Unicode
> - VariableNameLen = AsciiStrLen (AsciiVariableSetting) + 1;
> - VariableName = AllocatePool (VariableNameLen * sizeof (CHAR16));
> - AsciiStrToUnicodeStrS (AsciiVariableSetting, VariableName, VariableNameLen);
> -
> - Status = gRT->SetVariable (
> - VariableName,
> - &gEfiGlobalVariableGuid,
> - ( !Volatile ? EFI_VARIABLE_NON_VOLATILE : 0) |
> - EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS,
> - 0,
> - NULL
> - );
> - if (!EFI_ERROR(Status)) {
> - AsciiPrint("Variable '%s' deleted\n",VariableName);
> - } else {
> - AsciiPrint("Variable setting is incorrect. It should be VariableName=Value\n");
> - }
> - return Status;
> - }
> -
> - AsciiValue[0] = '\0';
> - AsciiVariableName = AsciiVariableSetting;
> - AsciiValue++;
> -
> - // Clean AsciiValue from quote
> - if (AsciiValue[0] == '"') {
> - AsciiValue++;
> - }
> - AsciiValueLength = AsciiStrLen (AsciiValue);
> - if ((AsciiValue[AsciiValueLength-2] != '\\') && (AsciiValue[AsciiValueLength-1] == '"')) {
> - AsciiValue[AsciiValueLength-1] = '\0';
> - }
> -
> - // Clean AsciiValue from escaped quotes
> - for (Index = 0; Index < AsciiValueLength; Index++) {
> - if ((Index > 0) && (AsciiValue[Index-1] == '\\') && (AsciiValue[Index] == '"')) {
> - EscapedQuotes++;
> - }
> - AsciiValue[Index-EscapedQuotes] = AsciiValue[Index];
> - }
> - // Fill the end of the value with '\0'
> - for (Index = 0; Index < EscapedQuotes; Index++) {
> - AsciiValue[AsciiValueLength-1-Index] = '\0';
> - }
> -
> - // Convert VariableName into Unicode
> - VariableNameLen = AsciiStrLen (AsciiVariableName) + 1;
> - VariableName = AllocatePool (VariableNameLen * sizeof (CHAR16));
> - AsciiStrToUnicodeStrS (AsciiVariableName, VariableName, VariableNameLen);
> -
> - Status = gRT->SetVariable (
> - VariableName,
> - &gEfiGlobalVariableGuid,
> - ( !Volatile ? EFI_VARIABLE_NON_VOLATILE : 0) |
> - EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS,
> - AsciiStrLen (AsciiValue)+1,
> - AsciiValue
> - );
> - if (!EFI_ERROR(Status)) {
> - AsciiPrint("'%a'='%a'\n",AsciiVariableName,AsciiValue);
> - }
> -
> - return Status;
> -}
> -
> -GLOBAL_REMOVE_IF_UNREFERENCED const EBL_COMMAND_TABLE mCmdVariableTemplate[] =
> -{
> - {
> - "get",
> - " ; get UEFI variable\n\r [v]; verbose",
> - NULL,
> - EblGetCmd
> - },
> - {
> - "set",
> - " ; set UEFI variable\n\r [v]; create volatile variable",
> - NULL,
> - EblSetCmd
> - }
> -};
> -
> -/**
> - Initialize the commands in this in this file
> -**/
> -VOID
> -EblInitializeVariableCmds (
> - VOID
> - )
> -{
> - EblAddCommands (mCmdVariableTemplate, sizeof (mCmdVariableTemplate)/sizeof (EBL_COMMAND_TABLE));
> -}
> diff --git a/EmbeddedPkg/EblExternCmd/EntryPointGlue.c b/EmbeddedPkg/EblExternCmd/EntryPointGlue.c
> deleted file mode 100644
> index d0e549bdc189..000000000000
> --- a/EmbeddedPkg/EblExternCmd/EntryPointGlue.c
> +++ /dev/null
> @@ -1,154 +0,0 @@
> -/** @file
> - Glue code that contains the EFI entry point and converts it to an EBL
> - ASCII Argc, Argv sytle entry point
> -
> -
> - Copyright (c) 2007, Intel Corporation. All rights reserved.<BR>
> - Portions copyright (c) 2008 - 2009, Apple Inc. 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
> - http://opensource.org/licenses/bsd-license.php
> -
> - THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
> - WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
> -
> -
> -**/
> -
> -#include "Ebl.h"
> -
> -#define CMD_SEPARATOR ';'
> -#define MAX_ARGS 32
> -
> -EFI_STATUS
> -EblMain (
> - IN UINTN Argc,
> - IN CHAR8 **Argv
> - );
> -
> -
> -///
> -/// EdkExternCmdEntry() & ParseArguments() convert the standard EFI entry point
> -/// into Argc, Argv form that calls EblMain().
> -///
> -
> -
> -/**
> - Parse the CmdLine and break it up into Argc (arg count) and Argv (array of
> - pointers to each argument). The Cmd buffer is altered and separators are
> - converted to string terminators. This allows Argv to point into CmdLine.
> - A CmdLine can support multiple commands. The next command in the command line
> - is returned if it exists.
> -
> - @param CmdLine String to parse for a set of commands
> - @param CmdLineSize Size of CmdLine in bytes
> - @param Argc Returns the number of arguments in the CmdLine current command
> - @param Argv Argc pointers to each string in CmdLine
> -
> - @return Next Command in the command line or NULL if non exists
> -**/
> -VOID
> -ParseArguments (
> - IN CHAR8 *CmdLine,
> - IN UINTN CmdLineSize,
> - OUT UINTN *Argc,
> - OUT CHAR8 **Argv
> - )
> -{
> - UINTN Arg;
> - CHAR8 *Char;
> - BOOLEAN LookingForArg;
> - BOOLEAN InQuote;
> - UINTN Index;
> -
> - *Argc = 0;
> - if ((CmdLineSize == 0) || (AsciiStrLen (CmdLine) == 0)) {
> - // basic error checking failed on the arguments
> - return;
> - }
> -
> - // Walk a single command line. A CMD_SEPARATOR allows multiple commands on a single line
> - InQuote = FALSE;
> - LookingForArg = TRUE;
> - for (Char = CmdLine, Arg = 0, Index = 0; *Char != '\0' && *Char != CMD_SEPARATOR; Char++, Index++) {
> - // Perform any text conversion here
> - if (*Char == '\t') {
> - // TAB to space
> - *Char = ' ';
> - }
> -
> - if (LookingForArg) {
> - // Look for the beginning of an Argv[] entry
> - if (*Char == '"') {
> - Argv[Arg++] = ++Char;
> - LookingForArg = FALSE;
> - InQuote = TRUE;
> - } else if (*Char != ' ') {
> - Argv[Arg++] = Char;
> - LookingForArg = FALSE;
> - }
> - } else {
> - // Looking for the terminator of an Argv[] entry
> - if ((InQuote && (*Char == '"')) || (!InQuote && (*Char == ' '))) {
> - *Char = '\0';
> - LookingForArg = TRUE;
> - }
> - }
> -
> - if ((Arg >= MAX_ARGS) || (Index > CmdLineSize)) {
> - // Error check buffer and exit since it does not look valid
> - break;
> - }
> - }
> -
> - *Argc = Arg;
> -
> - if (*Char == CMD_SEPARATOR) {
> - // Replace the command delimiter with null
> - *Char = '\0';
> - }
> -
> - return;
> -}
> -
> -
> -
> -
> -/**
> - Embedded Boot Loader (EBL) - A simple EFI command line application for embedded
> - devices. PcdEmbeddedAutomaticBootCommand is a complied in command line that
> - gets executed automatically. The ; separator allows multiple commands
> - for each command line.
> -
> - @param ImageHandle EFI ImageHandle for this application.
> - @param SystemTable EFI system table
> -
> - @return EFI status of the application
> -
> -**/
> -EFI_STATUS
> -EFIAPI
> -EdkExternCmdEntry (
> - IN EFI_HANDLE ImageHandle,
> - IN EFI_SYSTEM_TABLE *SystemTable
> - )
> -{
> - EFI_STATUS Status;
> - EFI_LOADED_IMAGE_PROTOCOL *ImageInfo;
> - UINTN Argc;
> - CHAR8 *Argv[MAX_ARGS];
> -
> - Status = gBS->HandleProtocol (ImageHandle, &gEfiLoadedImageProtocolGuid, (VOID **)&ImageInfo);
> - if (EFI_ERROR (Status)) {
> - Argc = 0;
> - } else {
> - // Looks like valid commands were passed in.
> - ParseArguments (ImageInfo->LoadOptions, ImageInfo->LoadOptionsSize, &Argc, Argv);
> - }
> -
> - return EblMain (Argc, Argv);
> -}
> -
> -
> diff --git a/EmbeddedPkg/EblExternCmd/Main.c b/EmbeddedPkg/EblExternCmd/Main.c
> deleted file mode 100644
> index dbfe336899c7..000000000000
> --- a/EmbeddedPkg/EblExternCmd/Main.c
> +++ /dev/null
> @@ -1,53 +0,0 @@
> -/** @file
> - Example of an external EBL command. It's loaded via EBL start command.
> - Argc and Argv are passed in via "" of the EBL command line.
> -
> - Start fs0:\EdkExternCmd.efi "Argv[0] Argv[1] 2"
> -
> - will launch this command with
> - Argv[0] = "Argv[0]"
> - Argv[1] = "Argv[2]"
> - Argv[2] = "3"
> -
> - Copyright (c) 2007, Intel Corporation. All rights reserved.<BR>
> - Portions copyright (c) 2008 - 2009, Apple Inc. 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
> - http://opensource.org/licenses/bsd-license.php
> -
> - THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
> - WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
> -
> -
> -**/
> -
> -#include "Ebl.h"
> -
> -/**
> - Entry point with Argc, Argv. Put your code here.
> -
> - @param Argc Number of command arguments in Argv
> - @param Argv Array of strings that represent the parsed command line.
> - Argv[0] is the command name
> -
> - @return EFI_SUCCESS
> -
> -**/
> -EFI_STATUS
> -EblMain (
> - IN UINTN Argc,
> - IN CHAR8 **Argv
> - )
> -{
> - UINTN Index;
> -
> - AsciiPrint ("Hello World\n");
> - for (Index = 0; Index < Argc; Index++) {
> - AsciiPrint ("Argv[%d] = %a\n", Index, Argv[Index]);
> - }
> -
> - return EFI_SUCCESS;
> -}
> -
> diff --git a/EmbeddedPkg/EmbeddedPkg.dec b/EmbeddedPkg/EmbeddedPkg.dec
> index af9b221f4f07..adcf65be93b3 100644
> --- a/EmbeddedPkg/EmbeddedPkg.dec
> +++ b/EmbeddedPkg/EmbeddedPkg.dec
> @@ -36,13 +36,9 @@ [Includes.common]
> Include # Root include for the package
>
> [LibraryClasses.common]
> - EfiFileLib|Include/Library/EfiFileLib.h
> PrePiLib|Include/Library/PrePiLib.h
> RealTimeClockLib|Include/Library/RealTimeClockLib.h
> EfiResetSystemLib|Include/Library/EfiResetSystemLib.h
> - EblCmdLib|Include/Library/EblCmdLib.h
> - EblAddExternalCommandLib|Include/Library/EblAddExternalCommandLib.h
> - EblNetworkLib|Include/Library/EblNetworkLib.h
> GdbSerialLib|Include/Library/GdbSerialLib.h
> DebugAgentTimerLib|Include/Library/DebugAgentTimerLib.h
> NorFlashInfoLib|Include/Library/NorFlashInfoLib.h
> @@ -75,7 +71,6 @@ [Protocols.common]
> gHardwareInterruptProtocolGuid = { 0x2890B3EA, 0x053D, 0x1643, { 0xAD, 0x0C, 0xD6, 0x48, 0x08, 0xDA, 0x3F, 0xF1 } }
> gHardwareInterrupt2ProtocolGuid = { 0x32898322, 0x2da1, 0x474a, { 0xba, 0xaa, 0xf3, 0xf7, 0xcf, 0x56, 0x94, 0x70 } }
> gEfiDebugSupportPeriodicCallbackProtocolGuid = { 0x9546e07c, 0x2cbb, 0x4c88, { 0x98, 0x6c, 0xcd, 0x34, 0x10, 0x86, 0xf0, 0x44 } }
> - gEfiEblAddCommandProtocolGuid = { 0xaeda2428, 0x9a22, 0x4637, { 0x9b, 0x21, 0x54, 0x5e, 0x28, 0xfb, 0xb8, 0x29 } }
> gEmbeddedDeviceGuid = { 0xbf4b9d10, 0x13ec, 0x43dd, { 0x88, 0x80, 0xe9, 0xb, 0x71, 0x8f, 0x27, 0xde } }
> gEmbeddedExternalDeviceProtocolGuid = { 0x735F8C64, 0xD696, 0x44D0, { 0xBD, 0xF2, 0x44, 0x7F, 0xD0, 0x5A, 0x54, 0x06 }}
> gEmbeddedGpioProtocolGuid = { 0x17a0a3d7, 0xc0a5, 0x4635, { 0xbb, 0xd5, 0x07, 0x21, 0x87, 0xdf, 0xe2, 0xee }}
> @@ -115,7 +110,6 @@ [PcdsFixedAtBuild.common]
> gEmbeddedTokenSpaceGuid.PcdEmbeddedAutomaticBootCommand|L""|VOID*|0x00000007
> gEmbeddedTokenSpaceGuid.PcdEmbeddedDefaultTextColor|0x07|UINT32|0x00000008
> gEmbeddedTokenSpaceGuid.PcdEmbeddedMemVariableStoreSize|0x10000|UINT32|0x00000009
> - gEmbeddedTokenSpaceGuid.PcdEmbeddedPrompt|"Ebl"|VOID*|0x00000034
>
> gEmbeddedTokenSpaceGuid.PcdPrePiStackBase|0|UINT32|0x0000000b
> gEmbeddedTokenSpaceGuid.PcdPrePiStackSize|131072|UINT32|0x0000000c
> diff --git a/EmbeddedPkg/EmbeddedPkg.dsc b/EmbeddedPkg/EmbeddedPkg.dsc
> index d7ee6a3018bf..8338715d6e46 100644
> --- a/EmbeddedPkg/EmbeddedPkg.dsc
> +++ b/EmbeddedPkg/EmbeddedPkg.dsc
> @@ -59,7 +59,6 @@ [LibraryClasses.common]
> PerformanceLib|MdePkg/Library/BasePerformanceLibNull/BasePerformanceLibNull.inf
> PrintLib|MdePkg/Library/BasePrintLib/BasePrintLib.inf
> UefiDecompressLib|MdePkg/Library/BaseUefiDecompressLib/BaseUefiDecompressLib.inf
> - EfiFileLib|EmbeddedPkg/Library/EfiFileLib/EfiFileLib.inf
>
> ReportStatusCodeLib|MdeModulePkg/Library/PeiDxeDebugLibReportStatusCode/PeiDxeDebugLibReportStatusCode.inf
>
> @@ -93,9 +92,6 @@ [LibraryClasses.common]
> UefiApplicationEntryPoint|MdePkg/Library/UefiApplicationEntryPoint/UefiApplicationEntryPoint.inf
>
> PcdLib|MdePkg/Library/BasePcdLibNull/BasePcdLibNull.inf
> - EblCmdLib|EmbeddedPkg/Library/EblCmdLibNull/EblCmdLibNull.inf
> -
> - EblNetworkLib|EmbeddedPkg/Library/EblNetworkLib/EblNetworkLib.inf
>
> AcpiLib|EmbeddedPkg/Library/AcpiLib/AcpiLib.inf
> FdtLib|EmbeddedPkg/Library/FdtLib/FdtLib.inf
> @@ -240,9 +236,6 @@ [BuildOptions]
> #
> ################################################################################
> [Components.common]
> - EmbeddedPkg/Library/EblAddExternalCommandLib/EblAddExternalCommandLib.inf
> - EmbeddedPkg/Library/EblCmdLibNull/EblCmdLibNull.inf
> - EmbeddedPkg/Library/EfiFileLib/EfiFileLib.inf
> EmbeddedPkg/Library/GdbSerialDebugPortLib/GdbSerialDebugPortLib.inf
> EmbeddedPkg/Library/GdbSerialLib/GdbSerialLib.inf
> EmbeddedPkg/Library/PrePiExtractGuidedSectionLib/PrePiExtractGuidedSectionLib.inf
> @@ -254,8 +247,6 @@ [Components.common]
> EmbeddedPkg/Library/NonCoherentDmaLib/NonCoherentDmaLib.inf
> EmbeddedPkg/Library/DxeDtPlatformDtbLoaderLibDefault/DxeDtPlatformDtbLoaderLibDefault.inf
>
> - EmbeddedPkg/Ebl/Ebl.inf
> -#### EmbeddedPkg/EblExternCmd/EblExternCmd.inf
> EmbeddedPkg/EmbeddedMonotonicCounter/EmbeddedMonotonicCounter.inf
> EmbeddedPkg/RealTimeClockRuntimeDxe/RealTimeClockRuntimeDxe.inf
> EmbeddedPkg/ResetRuntimeDxe/ResetRuntimeDxe.inf
> @@ -274,7 +265,6 @@ [Components.common]
> EmbeddedPkg/Library/AcpiLib/AcpiLib.inf
> EmbeddedPkg/Library/DebugAgentTimerLibNull/DebugAgentTimerLibNull.inf
> EmbeddedPkg/Library/DxeHobPeCoffLib/DxeHobPeCoffLib.inf
> - EmbeddedPkg/Library/EblNetworkLib/EblNetworkLib.inf
> EmbeddedPkg/Library/FdtLib/FdtLib.inf
> EmbeddedPkg/Library/GdbDebugAgent/GdbDebugAgent.inf
> EmbeddedPkg/Library/PrePiHobLib/PrePiHobLib.inf
> diff --git a/EmbeddedPkg/EmbeddedPkg.fdf b/EmbeddedPkg/EmbeddedPkg.fdf
> deleted file mode 100644
> index c84a5193efc4..000000000000
> --- a/EmbeddedPkg/EmbeddedPkg.fdf
> +++ /dev/null
> @@ -1,141 +0,0 @@
> -# This is Ebl FDF file
> -#
> -# Copyright (c) 2008, Intel Corporation. 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
> -# http://opensource.org/licenses/bsd-license.php
> -#
> -# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
> -# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
> -#
> -
> -################################################################################
> -#
> -# FV Section
> -#
> -# [FV] section is used to define what components or modules are placed within a flash
> -# device file. This section also defines order the components and modules are positioned
> -# within the image. The [FV] section consists of define statements, set statements and
> -# module statements.
> -#
> -################################################################################
> -[FV.FvLoad]
> -FvAlignment = 16 #FV alignment and FV attributes setting.
> -ERASE_POLARITY = 1
> -MEMORY_MAPPED = TRUE
> -STICKY_WRITE = TRUE
> -LOCK_CAP = TRUE
> -LOCK_STATUS = TRUE
> -WRITE_DISABLED_CAP = TRUE
> -WRITE_ENABLED_CAP = TRUE
> -WRITE_STATUS = TRUE
> -WRITE_LOCK_CAP = TRUE
> -WRITE_LOCK_STATUS = TRUE
> -READ_DISABLED_CAP = TRUE
> -READ_ENABLED_CAP = TRUE
> -READ_STATUS = TRUE
> -READ_LOCK_CAP = TRUE
> -READ_LOCK_STATUS = TRUE
> -
> -################################################################################
> -#
> -# The INF statements point to module INF files, which will be placed into this FV image.
> -# Parsing tools will scan the INF file to determine the type of component or module.
> -# The component or module type is used to reference the standard rules
> -# defined elsewhere in the FDF file.
> -#
> -# The format for INF statements is:
> -# INF $(PathAndInfFileName)
> -#
> -################################################################################
> -INF EmbeddedPkg/Ebl/Ebl.inf
> -
> -################################################################################
> -#
> -# Rules are use with the [FV] section's module INF type to define
> -# how an FFS file is created for a given INF file. The following Rule are the default
> -# rules for the different module type. User can add the customized rules to define the
> -# content of the FFS file.
> -#
> -################################################################################
> -
> -
> -############################################################################
> -# Example of a DXE_DRIVER FFS file with a Checksum encapsulation section #
> -############################################################################
> -#
> -#[Rule.Common.DXE_DRIVER]
> -# FILE DRIVER = $(NAMED_GUID) {
> -# DXE_DEPEX DXE_DEPEX Optional $(INF_OUTPUT)/$(MODULE_NAME).depex
> -# COMPRESS PI_STD {
> -# GUIDED {
> -# PE32 PE32 $(INF_OUTPUT)/$(MODULE_NAME).efi
> -# UI STRING="$(MODULE_NAME)" Optional
> -# VERSION STRING="$(INF_VERSION)" Optional BUILD_NUM=$(BUILD_NUMBER)
> -# }
> -# }
> -# }
> -#
> -############################################################################
> -
> -[Rule.Common.SEC]
> - FILE SEC = $(NAMED_GUID) {
> - PE32 PE32 $(INF_OUTPUT)/$(MODULE_NAME).efi
> - }
> -
> -[Rule.Common.PEI_CORE]
> - FILE PEI_CORE = $(NAMED_GUID) {
> - PE32 PE32 $(INF_OUTPUT)/$(MODULE_NAME).efi
> - UI STRING ="$(MODULE_NAME)" Optional
> - }
> -
> -[Rule.Common.PEIM]
> - FILE PEIM = $(NAMED_GUID) {
> - PEI_DEPEX PEI_DEPEX Optional $(MODULE_NAME).depex
> - PE32 PE32 $(INF_OUTPUT)/$(MODULE_NAME).efi
> - UI STRING="$(MODULE_NAME)" Optional
> - }
> -
> -[Rule.Common.PEIM.TIANOCOMPRESSED]
> - FILE PEIM = $(NAMED_GUID) DEBUG_MYTOOLS_IA32 {
> - PEI_DEPEX PEI_DEPEX Optional $(MODULE_NAME).depex
> - GUIDED A31280AD-481E-41B6-95E8-127F4C984779 PROCESSING_REQUIRED = TRUE {
> - PE32 PE32 $(INF_OUTPUT)/$(MODULE_NAME).efi
> - UI STRING="$(MODULE_NAME)" Optional
> - }
> - }
> -
> -[Rule.Common.DXE_CORE]
> - FILE DXE_CORE = $(NAMED_GUID) {
> - PE32 PE32 $(INF_OUTPUT)/$(MODULE_NAME).efi
> - UI STRING="$(MODULE_NAME)" Optional
> - }
> -
> -[Rule.Common.UEFI_DRIVER]
> - FILE DRIVER = $(NAMED_GUID) {
> - DXE_DEPEX DXE_DEPEX Optional $(INF_OUTPUT)/$(MODULE_NAME).depex
> - PE32 PE32 $(INF_OUTPUT)/$(MODULE_NAME).efi
> - UI STRING="$(MODULE_NAME)" Optional
> - }
> -
> -[Rule.Common.DXE_DRIVER]
> - FILE DRIVER = $(NAMED_GUID) {
> - DXE_DEPEX DXE_DEPEX Optional $(INF_OUTPUT)/$(MODULE_NAME).depex
> - PE32 PE32 $(INF_OUTPUT)/$(MODULE_NAME).efi
> - UI STRING="$(MODULE_NAME)" Optional
> - }
> -
> -[Rule.Common.DXE_RUNTIME_DRIVER]
> - FILE DRIVER = $(NAMED_GUID) {
> - DXE_DEPEX DXE_DEPEX Optional $(INF_OUTPUT)/$(MODULE_NAME).depex
> - PE32 PE32 $(INF_OUTPUT)/$(MODULE_NAME).efi
> - UI STRING="$(MODULE_NAME)" Optional
> - }
> -
> -[Rule.Common.UEFI_APPLICATION]
> - FILE APPLICATION = $(NAMED_GUID) {
> - PE32 PE32 $(INF_OUTPUT)/$(MODULE_NAME).efi
> - UI STRING="$(MODULE_NAME)" Optional
> - }
> diff --git a/EmbeddedPkg/Include/Library/EblAddExternalCommandLib.h b/EmbeddedPkg/Include/Library/EblAddExternalCommandLib.h
> deleted file mode 100644
> index 65aeddddddad..000000000000
> --- a/EmbeddedPkg/Include/Library/EblAddExternalCommandLib.h
> +++ /dev/null
> @@ -1,122 +0,0 @@
> -/** @file
> - Include file for basic command line parser for EBL (Embedded Boot Loader)
> -
> - Copyright (c) 2007, Intel Corporation. All rights reserved.<BR>
> - Portions copyright (c) 2008 - 2009, Apple Inc. 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
> - http://opensource.org/licenses/bsd-license.php
> -
> - THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
> - WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
> -
> -**/
> -
> -#ifndef __EBL_ADD_EXTERNAL_COMMAND_LIB_H__
> -#define __EBL_ADD_EXTERNAL_COMMAND_LIB_H__
> -
> -#include <PiDxe.h>
> -#include <Protocol/EblAddCommand.h>
> -
> -
> -EFI_STATUS
> -EFIAPI
> -EblAddExternalCommands (
> - IN const EBL_COMMAND_TABLE *EntryArray,
> - IN UINTN ArrayCount
> - );
> -
> -/**
> -
> - Return a keypress or optionally timeout if a timeout value was passed in.
> -
> - An optional callback function is called every second when waiting for a
> -
> - timeout.
> -
> -
> -
> - @param Key EFI Key information returned
> -
> - @param TimeoutInSec Number of seconds to wait to timeout
> -
> - @param CallBack Callback called every second during the timeout wait
> -
> -
> -
> - @return EFI_SUCCESS Key was returned
> -
> - @return EFI_TIMEOUT If the TimoutInSec expired
> -
> -
> -
> -**/
> -
> -EFI_STATUS
> -
> -EFIAPI
> -
> -EblGetCharKey (
> -
> - IN OUT EFI_INPUT_KEY *Key,
> -
> - IN UINTN TimeoutInSec,
> -
> - IN EBL_GET_CHAR_CALL_BACK CallBack OPTIONAL
> -
> - );
> -
> -
> -
> -
> -
> -/**
> -
> - This routine is used prevent command output data from scrolling off the end
> -
> - of the screen. The global gPageBreak is used to turn on or off this feature.
> -
> - If the CurrentRow is near the end of the screen pause and print out a prompt
> -
> - If the use hits Q to quit return TRUE else for any other key return FALSE.
> -
> - PrefixNewline is used to figure out if a newline is needed before the prompt
> -
> - string. This depends on the last print done before calling this function.
> -
> - CurrentRow is updated by one on a call or set back to zero if a prompt is
> -
> - needed.
> -
> -
> -
> - @param CurrentRow Used to figure out if its the end of the page and updated
> -
> - @param PrefixNewline Did previous print issue a newline
> -
> -
> -
> - @return TRUE if Q was hit to quit, FALSE in all other cases.
> -
> -
> -
> -**/
> -
> -BOOLEAN
> -
> -EFIAPI
> -
> -EblAnyKeyToContinueQtoQuit (
> -
> - IN UINTN *CurrentRow,
> -
> - IN BOOLEAN PrefixNewline
> -
> - );
> -
> -
> -
> -#endif
> -
> diff --git a/EmbeddedPkg/Include/Library/EblCmdLib.h b/EmbeddedPkg/Include/Library/EblCmdLib.h
> deleted file mode 100644
> index 2a8a66c016c4..000000000000
> --- a/EmbeddedPkg/Include/Library/EblCmdLib.h
> +++ /dev/null
> @@ -1,51 +0,0 @@
> -/** @file
> - Include file for basic command line parser for EBL (Embedded Boot Loader)
> -
> - Copyright (c) 2007, Intel Corporation. All rights reserved.<BR>
> - Portions copyright (c) 2008 - 2009, Apple Inc. All rights reserved.<BR>
> - (C) Copyright 2015 Hewlett Packard Enterprise Development LP<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
> - http://opensource.org/licenses/bsd-license.php
> -
> - THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
> - WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
> -
> -**/
> -
> -#ifndef __EBL_LIB_H__
> -#define __EBL_LIB_H__
> -
> -#include <PiDxe.h>
> -#include <Protocol/EblAddCommand.h>
> -
> -
> -VOID
> -EFIAPI
> -EblAddCommand (
> - IN const EBL_COMMAND_TABLE *Entry
> - );
> -
> -VOID
> -EFIAPI
> -EblAddCommands (
> - IN const EBL_COMMAND_TABLE *EntryArray,
> - IN UINTN ArrayCount
> - );
> -
> -
> -//
> -// LIbrary constructor called directly from Ebl Code.
> -// This module calls EblAddCommand () or EblAddCommands () to register new commands
> -//
> -VOID
> -EblInitializeExternalCmd (
> - VOID
> - );
> -
> -
> -
> -#endif
> -
> diff --git a/EmbeddedPkg/Include/Library/EblNetworkLib.h b/EmbeddedPkg/Include/Library/EblNetworkLib.h
> deleted file mode 100644
> index 66dc6ac30502..000000000000
> --- a/EmbeddedPkg/Include/Library/EblNetworkLib.h
> +++ /dev/null
> @@ -1,68 +0,0 @@
> -/** @file
> - Abstractions for Ebl network accesses.
> -
> - Copyright (c) 2008 - 2009, Apple Inc. 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
> - http://opensource.org/licenses/bsd-license.php
> -
> - THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
> - WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
> -
> -**/
> -
> -#ifndef __EBL_NETWORK_LIB_H__
> -#define __EBL_NETWORK_LIB_H__
> -
> -#include <Protocol/PxeBaseCode.h>
> -
> -
> -EFI_STATUS
> -EFIAPI
> -EblGetCurrentIpAddress (
> - IN OUT EFI_IP_ADDRESS *Ip
> - );
> -
> -EFI_STATUS
> -EFIAPI
> -EblGetCurrentMacAddress (
> - IN OUT EFI_MAC_ADDRESS *Mac
> - );
> -
> -CHAR8 *
> -EFIAPI
> -EblLoadFileBootTypeString (
> - IN EFI_HANDLE Handle
> - );
> -
> -EFI_STATUS
> -EFIAPI
> -EblPerformDHCP (
> - IN BOOLEAN SortOffers
> - );
> -
> -EFI_STATUS
> -EFIAPI
> -EblSetStationIp (
> - IN EFI_IP_ADDRESS *NewStationIp, OPTIONAL
> - IN EFI_IP_ADDRESS *NewSubnetMask OPTIONAL
> - );
> -
> -EFI_STATUS
> -EFIAPI
> -EblMtftp (
> - IN EFI_PXE_BASE_CODE_TFTP_OPCODE Operation,
> - IN OUT VOID *BufferPtr OPTIONAL,
> - IN BOOLEAN Overwrite,
> - IN OUT UINT64 *BufferSize,
> - IN UINTN *BlockSize OPTIONAL,
> - IN EFI_IP_ADDRESS *ServerIp,
> - IN UINT8 *Filename OPTIONAL,
> - IN EFI_PXE_BASE_CODE_MTFTP_INFO *Info OPTIONAL,
> - IN BOOLEAN DontUseBuffer
> - );
> -
> -#endif
> -
> diff --git a/EmbeddedPkg/Include/Protocol/EblAddCommand.h b/EmbeddedPkg/Include/Protocol/EblAddCommand.h
> deleted file mode 100644
> index 4a9f494c5d93..000000000000
> --- a/EmbeddedPkg/Include/Protocol/EblAddCommand.h
> +++ /dev/null
> @@ -1,142 +0,0 @@
> -/** @file
> -
> - Copyright (c) 2008 - 2009, Apple Inc. 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
> - http://opensource.org/licenses/bsd-license.php
> -
> - THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
> - WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
> -
> -**/
> -
> -
> -#ifndef __EBL_ADD_COMMAND_H__
> -#define __EBL_ADD_COMMAND_H__
> -
> -
> -
> -//
> -// Protocol GUID
> -//
> -// AEDA2428-9A22-4637-9B21-545E28FBB829
> -
> -#define EBL_ADD_COMMAND_PROTOCOL_GUID \
> - { 0xaeda2428, 0x9a22, 0x4637, { 0x9b, 0x21, 0x54, 0x5e, 0x28, 0xfb, 0xb8, 0x29 } }
> -
> -
> -typedef struct _EBL_ADD_COMMAND_PROTOCOL EBL_ADD_COMMAND_PROTOCOL;
> -
> -typedef
> -EFI_STATUS
> -(EFIAPI *EBL_COMMMAND) (
> - IN UINTN Argc,
> - IN CHAR8 **Argv
> - );
> -
> -typedef struct {
> - CHAR8 *Name;
> - CHAR8 *HelpSummary;
> - CHAR8 *Help;
> - EBL_COMMMAND Command;
> -} EBL_COMMAND_TABLE;
> -
> -
> -/**
> - Add a single command table entry.
> -
> - @param EntryArray Pointer EBL_COMMAND_TABLE of the command that is being added
> -
> -**/
> -typedef
> -VOID
> -(EFIAPI *EBL_ADD_COMMAND) (
> - IN const EBL_COMMAND_TABLE *Entry
> - );
> -
> -
> -/**
> - Add a multiple command table entry.
> -
> - @param EntryArray Pointer EBL_COMMAND_TABLE of the commands that are being added
> -
> - @param ArrayCount Number of commands in the EntryArray.
> -
> -**/
> -typedef
> -VOID
> -(EFIAPI *EBL_ADD_COMMANDS) (
> - IN const EBL_COMMAND_TABLE *EntryArray,
> - IN UINTN ArrayCount
> - );
> -
> -
> -typedef
> -VOID
> -(EFIAPI *EBL_GET_CHAR_CALL_BACK) (
> - IN UINTN ElapsedTime
> - );
> -
> -/**
> - Return a keypress or optionally timeout if a timeout value was passed in.
> - An optional callback function is called every second when waiting for a
> - timeout.
> -
> - @param Key EFI Key information returned
> - @param TimeoutInSec Number of seconds to wait to timeout
> - @param CallBack Callback called every second during the timeout wait
> -
> - @return EFI_SUCCESS Key was returned
> - @return EFI_TIMEOUT If the TimoutInSec expired
> -
> -**/
> -typedef
> -EFI_STATUS
> -(EFIAPI *EBL_GET_CHAR_KEY) (
> - IN OUT EFI_INPUT_KEY *Key,
> - IN UINTN TimeoutInSec,
> - IN EBL_GET_CHAR_CALL_BACK CallBack OPTIONAL
> - );
> -
> -
> -/**
> - This routine is used prevent command output data from scrolling off the end
> - of the screen. The global gPageBreak is used to turn on or off this feature.
> - If the CurrentRow is near the end of the screen pause and print out a prompt
> - If the use hits Q to quit return TRUE else for any other key return FALSE.
> - PrefixNewline is used to figure out if a newline is needed before the prompt
> - string. This depends on the last print done before calling this function.
> - CurrentRow is updated by one on a call or set back to zero if a prompt is
> - needed.
> -
> - @param CurrentRow Used to figure out if its the end of the page and updated
> - @param PrefixNewline Did previous print issue a newline
> -
> - @return TRUE if Q was hit to quit, FALSE in all other cases.
> -
> -**/
> -typedef
> -BOOLEAN
> -(EFIAPI *EBL_ANY_KEY_CONTINUE_Q_QUIT) (
> - IN UINTN *CurrentRow,
> - IN BOOLEAN PrefixNewline
> - );
> -
> -
> -
> -struct _EBL_ADD_COMMAND_PROTOCOL {
> - EBL_ADD_COMMAND AddCommand;
> - EBL_ADD_COMMANDS AddCommands;
> -
> - // Commands to reuse EBL infrastructure
> - EBL_GET_CHAR_KEY EblGetCharKey;
> - EBL_ANY_KEY_CONTINUE_Q_QUIT EblAnyKeyToContinueQtoQuit;
> -};
> -
> -extern EFI_GUID gEfiEblAddCommandProtocolGuid;
> -
> -#endif
> -
> -
> diff --git a/EmbeddedPkg/Library/EblAddExternalCommandLib/EblAddExternalCommandLib.c b/EmbeddedPkg/Library/EblAddExternalCommandLib/EblAddExternalCommandLib.c
> deleted file mode 100644
> index 3b9f1846d3cf..000000000000
> --- a/EmbeddedPkg/Library/EblAddExternalCommandLib/EblAddExternalCommandLib.c
> +++ /dev/null
> @@ -1,155 +0,0 @@
> -/** @file
> - Add external EblCmd Lib
> -
> - Copyright (c) 2007, Intel Corporation. All rights reserved.<BR>
> - Portions copyright (c) 2008 - 2009, Apple Inc. 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
> - http://opensource.org/licenses/bsd-license.php
> -
> - THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
> - WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
> -
> -
> -**/
> -
> -#include <Uefi.h>
> -#include <Library/UefiLib.h>
> -#include <Library/UefiBootServicesTableLib.h>
> -#include <Library/EblAddExternalCommandLib.h>
> -#include <Protocol/EblAddCommand.h>
> -
> -STATIC BOOLEAN gInstalledCommand = FALSE;
> -STATIC EFI_EVENT mEblCommandRegistration = NULL;
> -
> -STATIC const EBL_COMMAND_TABLE *mAddExternalCmdLibTemplate = NULL;
> -STATIC UINTN mAddExternalCmdLibTemplateSize = 0;
> -EBL_ADD_COMMAND_PROTOCOL *gEblExternalCommand = NULL;
> -
> -
> -/**
> - Return a keypress or optionally timeout if a timeout value was passed in.
> - An optional callback function is called every second when waiting for a
> - timeout.
> -
> - @param Key EFI Key information returned
> - @param TimeoutInSec Number of seconds to wait to timeout
> - @param CallBack Callback called every second during the timeout wait
> -
> - @return EFI_SUCCESS Key was returned
> - @return EFI_TIMEOUT If the TimoutInSec expired
> -
> -**/
> -EFI_STATUS
> -EFIAPI
> -EblGetCharKey (
> - IN OUT EFI_INPUT_KEY *Key,
> - IN UINTN TimeoutInSec,
> - IN EBL_GET_CHAR_CALL_BACK CallBack OPTIONAL
> - )
> -{
> - if (gEblExternalCommand != NULL) {
> - return gEblExternalCommand->EblGetCharKey (Key, TimeoutInSec, CallBack);
> - }
> - return EFI_TIMEOUT;
> -}
> -
> -
> -/**
> - This routine is used prevent command output data from scrolling off the end
> - of the screen. The global gPageBreak is used to turn on or off this feature.
> - If the CurrentRow is near the end of the screen pause and print out a prompt
> - If the use hits Q to quit return TRUE else for any other key return FALSE.
> - PrefixNewline is used to figure out if a newline is needed before the prompt
> - string. This depends on the last print done before calling this function.
> - CurrentRow is updated by one on a call or set back to zero if a prompt is
> - needed.
> -
> - @param CurrentRow Used to figure out if its the end of the page and updated
> - @param PrefixNewline Did previous print issue a newline
> -
> - @return TRUE if Q was hit to quit, FALSE in all other cases.
> -
> -**/
> -BOOLEAN
> -EFIAPI
> -EblAnyKeyToContinueQtoQuit (
> - IN UINTN *CurrentRow,
> - IN BOOLEAN PrefixNewline
> - )
> -{
> - if (gEblExternalCommand != NULL) {
> - return gEblExternalCommand->EblAnyKeyToContinueQtoQuit (CurrentRow, PrefixNewline);
> - }
> - return FALSE;
> -}
> -
> -
> -
> -/**
> - Update mFvbEntry. Add new entry, or update existing entry if Fvb protocol is
> - reinstalled.
> -
> - @param Event The Event that is being processed
> - @param Context Event Context
> -
> -**/
> -VOID
> -EFIAPI
> -EblAddCommandNotificationEvent (
> - IN EFI_EVENT Event,
> - IN VOID *Context
> - )
> -{
> - EFI_STATUS Status;
> -
> - if (!gInstalledCommand) {
> - Status = gBS->LocateProtocol (&gEfiEblAddCommandProtocolGuid, NULL, (VOID **)&gEblExternalCommand);
> - if (!EFI_ERROR (Status)) {
> - gEblExternalCommand->AddCommands (mAddExternalCmdLibTemplate, mAddExternalCmdLibTemplateSize);
> - gInstalledCommand = TRUE;
> - }
> - }
> -}
> -
> -
> -
> -/**
> - The user Entry Point for the driver. The user code starts with this function
> - as the real entry point for the image goes into a library that calls this
> - function.
> -
> - @param[in] ImageHandle The firmware allocated handle for the EFI image.
> - @param[in] SystemTable A pointer to the EFI System Table.
> -
> - @retval EFI_SUCCESS The entry point is executed successfully.
> - @retval other Some error occurs when executing this entry point.
> -
> -**/
> -EFI_STATUS
> -EFIAPI
> -EblAddExternalCommands (
> - IN const EBL_COMMAND_TABLE *EntryArray,
> - IN UINTN ArrayCount
> - )
> -{
> - if (mAddExternalCmdLibTemplate != NULL) {
> - return EFI_ALREADY_STARTED;
> - }
> -
> - mAddExternalCmdLibTemplate = EntryArray;
> - mAddExternalCmdLibTemplateSize = ArrayCount;
> -
> - EfiCreateProtocolNotifyEvent (
> - &gEfiEblAddCommandProtocolGuid,
> - TPL_CALLBACK,
> - EblAddCommandNotificationEvent,
> - NULL,
> - &mEblCommandRegistration
> - );
> -
> - return EFI_SUCCESS;
> -}
> -
> diff --git a/EmbeddedPkg/Library/EblAddExternalCommandLib/EblAddExternalCommandLib.inf b/EmbeddedPkg/Library/EblAddExternalCommandLib/EblAddExternalCommandLib.inf
> deleted file mode 100644
> index 335386a8c800..000000000000
> --- a/EmbeddedPkg/Library/EblAddExternalCommandLib/EblAddExternalCommandLib.inf
> +++ /dev/null
> @@ -1,47 +0,0 @@
> -#/** @file
> -# Component description file for the entry point to a EFIDXE Drivers
> -#
> -# Library to abstract Framework extensions that conflict with UEFI 2.0 Specification
> -# Copyright (c) 2007 - 2007, Intel Corporation. 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
> -# http://opensource.org/licenses/bsd-license.php
> -# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
> -# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
> -#
> -#
> -#**/
> -
> -[Defines]
> - INF_VERSION = 0x00010005
> - BASE_NAME = EblAddExternalCommandLib
> - FILE_GUID = 9195D970-C6F7-484E-8013-5B03C89C3B81
> - MODULE_TYPE = UEFI_DRIVER
> - VERSION_STRING = 1.0
> - LIBRARY_CLASS = EblAddExternalCommandLib|DXE_DRIVER UEFI_APPLICATION UEFI_DRIVER
> -
> -
> -#
> -# The following information is for reference only and not required by the build tools.
> -#
> -# VALID_ARCHITECTURES = IA32 X64 IPF EBC
> -#
> -
> -[Sources.common]
> - EblAddExternalCommandLib.c
> -
> -[Packages]
> - MdePkg/MdePkg.dec
> - EmbeddedPkg/EmbeddedPkg.dec
> -
> -[LibraryClasses]
> - UefiBootServicesTableLib
> - UefiLib
> - EblAddExternalCommandLib
> -
> -[Protocols]
> - gEfiEblAddCommandProtocolGuid
> -
> -[Guids]
> diff --git a/EmbeddedPkg/Library/EblCmdLibNull/EblCmdLibNull.c b/EmbeddedPkg/Library/EblCmdLibNull/EblCmdLibNull.c
> deleted file mode 100644
> index 6cde5f95ab88..000000000000
> --- a/EmbeddedPkg/Library/EblCmdLibNull/EblCmdLibNull.c
> +++ /dev/null
> @@ -1,28 +0,0 @@
> -/** @file
> - Null EblCmdLib
> -
> - Copyright (c) 2007, Intel Corporation. All rights reserved.<BR>
> - Portions copyright (c) 2008 - 2009, Apple Inc. 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
> - http://opensource.org/licenses/bsd-license.php
> -
> - THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
> - WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
> -
> -
> -**/
> -
> -#include <PiDxe.h>
> -#include <Library/EblCmdLib.h>
> -
> -
> -VOID
> -EblInitializeExternalCmd (
> - VOID
> - )
> -{
> - return;
> -}
> diff --git a/EmbeddedPkg/Library/EblCmdLibNull/EblCmdLibNull.inf b/EmbeddedPkg/Library/EblCmdLibNull/EblCmdLibNull.inf
> deleted file mode 100644
> index c7935ae37e3e..000000000000
> --- a/EmbeddedPkg/Library/EblCmdLibNull/EblCmdLibNull.inf
> +++ /dev/null
> @@ -1,43 +0,0 @@
> -#/** @file
> -# Component description file for the entry point to a EFIDXE Drivers
> -#
> -# Library to abstract Framework extensions that conflict with UEFI 2.0 Specification
> -# Copyright (c) 2007 - 2007, Intel Corporation. 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
> -# http://opensource.org/licenses/bsd-license.php
> -# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
> -# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
> -#
> -#
> -#**/
> -
> -[Defines]
> - INF_VERSION = 0x00010005
> - BASE_NAME = EblCmdLibNull
> - FILE_GUID = 3513C4E2-06D6-4921-9C2B-E938777BA79E
> - MODULE_TYPE = UEFI_DRIVER
> - VERSION_STRING = 1.0
> - LIBRARY_CLASS = EfiCmdLib|DXE_DRIVER UEFI_APPLICATION UEFI_DRIVER
> -
> -
> -#
> -# The following information is for reference only and not required by the build tools.
> -#
> -# VALID_ARCHITECTURES = IA32 X64 IPF EBC
> -#
> -
> -[Sources.common]
> - EblCmdLibNull.c
> -
> -[Packages]
> - MdePkg/MdePkg.dec
> - EmbeddedPkg/EmbeddedPkg.dec
> -
> -[LibraryClasses]
> -
> -[Protocols]
> -
> -[Guids]
> diff --git a/EmbeddedPkg/Library/EblNetworkLib/EblNetworkLib.c b/EmbeddedPkg/Library/EblNetworkLib/EblNetworkLib.c
> deleted file mode 100644
> index 1c945cd33b5a..000000000000
> --- a/EmbeddedPkg/Library/EblNetworkLib/EblNetworkLib.c
> +++ /dev/null
> @@ -1,173 +0,0 @@
> -/** @file
> -
> - Copyright (c) 2008 - 2009, Apple Inc. 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
> - http://opensource.org/licenses/bsd-license.php
> -
> - THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
> - WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
> -
> -**/
> -
> -#include <Uefi.h>
> -#include <Library/BaseMemoryLib.h>
> -#include <Library/DebugLib.h>
> -#include <Library/UefiRuntimeServicesTableLib.h>
> -#include <Library/UefiBootServicesTableLib.h>
> -
> -#include <Protocol/SimpleNetwork.h>
> -#include <Protocol/PxeBaseCode.h>
> -
> -
> -BOOLEAN gUseIpv6 = FALSE;
> -
> -EFI_STATUS
> -EFIAPI
> -EblGetCurrentIpAddress (
> - IN OUT EFI_IP_ADDRESS *Ip
> - )
> -{
> - EFI_STATUS Status;
> - EFI_PXE_BASE_CODE_PROTOCOL *Pxe;
> -
> - Status = gBS->LocateProtocol (&gEfiPxeBaseCodeProtocolGuid, NULL, (VOID **)&Pxe);
> - if (EFI_ERROR(Status)) {
> - return Status;
> - }
> -
> - Status = Pxe->Start (Pxe, gUseIpv6);
> - if (EFI_ERROR(Status) && (Status != EFI_ALREADY_STARTED)) {
> - return Status;
> - }
> -
> - CopyMem (Ip, &Pxe->Mode->StationIp, sizeof (EFI_IP_ADDRESS));
> -
> - return EFI_SUCCESS;
> -}
> -
> -
> -EFI_STATUS
> -EFIAPI
> -EblGetCurrentMacAddress (
> - IN OUT EFI_MAC_ADDRESS *Mac
> - )
> -{
> - EFI_STATUS Status;
> - EFI_SIMPLE_NETWORK_PROTOCOL *SimpleNet;
> -
> - Status = gBS->LocateProtocol (&gEfiSimpleNetworkProtocolGuid, NULL, (VOID **)&SimpleNet);
> - if (EFI_ERROR(Status)) {
> - return Status;
> - }
> -
> - CopyMem (Mac, SimpleNet->Mode->CurrentAddress.Addr, sizeof (EFI_MAC_ADDRESS));
> - return Status;
> -}
> -
> -
> -CHAR8 *
> -EFIAPI
> -EblLoadFileBootTypeString (
> - IN EFI_HANDLE Handle
> - )
> -{
> - EFI_STATUS Status;
> - VOID *NullPtr;
> -
> - Status = gBS->HandleProtocol (Handle, &gEfiPxeBaseCodeProtocolGuid, &NullPtr);
> - if (!EFI_ERROR (Status)) {
> - return "EFI PXE Network Boot";
> - }
> -
> - return "";
> -}
> -
> -EFI_STATUS
> -EFIAPI
> -EblPerformDHCP (
> - IN BOOLEAN SortOffers
> - )
> -{
> - EFI_STATUS Status;
> - EFI_PXE_BASE_CODE_PROTOCOL *Pxe;
> -
> - Status = gBS->LocateProtocol (&gEfiPxeBaseCodeProtocolGuid, NULL, (VOID **)&Pxe);
> - if (EFI_ERROR(Status)) {
> - return Status;
> - }
> -
> - Status = Pxe->Start (Pxe, gUseIpv6);
> - if (EFI_ERROR(Status) && (Status != EFI_ALREADY_STARTED)) {
> - return Status;
> - }
> -
> - Status = Pxe->Dhcp(Pxe, TRUE);
> - return Status;
> -}
> -
> -
> -EFI_STATUS
> -EFIAPI
> -EblSetStationIp (
> - IN EFI_IP_ADDRESS *NewStationIp, OPTIONAL
> - IN EFI_IP_ADDRESS *NewSubnetMask OPTIONAL
> - )
> -{
> - EFI_STATUS Status;
> - EFI_PXE_BASE_CODE_PROTOCOL *Pxe;
> -
> - Status = gBS->LocateProtocol (&gEfiPxeBaseCodeProtocolGuid, NULL, (VOID **)&Pxe);
> - if (EFI_ERROR(Status)) {
> - return Status;
> - }
> -
> - Status = Pxe->Start (Pxe, gUseIpv6);
> - if (EFI_ERROR(Status) && (Status != EFI_ALREADY_STARTED)) {
> - return Status;
> - }
> -
> - Status = Pxe->SetStationIp (Pxe, NewStationIp, NewSubnetMask);
> - return Status;
> -}
> -
> -
> -EFI_STATUS
> -EFIAPI
> -EblMtftp (
> - IN EFI_PXE_BASE_CODE_TFTP_OPCODE Operation,
> - IN OUT VOID *BufferPtr OPTIONAL,
> - IN BOOLEAN Overwrite,
> - IN OUT UINT64 *BufferSize,
> - IN UINTN *BlockSize OPTIONAL,
> - IN EFI_IP_ADDRESS *ServerIp,
> - IN UINT8 *Filename OPTIONAL,
> - IN EFI_PXE_BASE_CODE_MTFTP_INFO *Info OPTIONAL,
> - IN BOOLEAN DontUseBuffer
> - )
> -{
> - EFI_STATUS Status;
> - EFI_PXE_BASE_CODE_PROTOCOL *Pxe;
> -
> - Status = gBS->LocateProtocol (&gEfiPxeBaseCodeProtocolGuid, NULL, (VOID **)&Pxe);
> - if (EFI_ERROR(Status)) {
> - return Status;
> - }
> -
> - Status = Pxe->Mtftp (
> - Pxe,
> - Operation,
> - BufferPtr,
> - Overwrite,
> - BufferSize,
> - BlockSize,
> - ServerIp,
> - Filename,
> - Info,
> - DontUseBuffer
> - );
> - return Status;
> -}
> -
> diff --git a/EmbeddedPkg/Library/EblNetworkLib/EblNetworkLib.inf b/EmbeddedPkg/Library/EblNetworkLib/EblNetworkLib.inf
> deleted file mode 100644
> index c9b2d31dc437..000000000000
> --- a/EmbeddedPkg/Library/EblNetworkLib/EblNetworkLib.inf
> +++ /dev/null
> @@ -1,34 +0,0 @@
> -#/** @file
> -#
> -# Copyright (c) 2008 - 2010, Apple Inc. 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
> -# http://opensource.org/licenses/bsd-license.php
> -#
> -# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
> -# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
> -#
> -#**/
> -
> -[Defines]
> - INF_VERSION = 0x00010005
> - BASE_NAME = EblNetworkLib
> - FILE_GUID = D885869A-7869-47DB-9429-DE03C318BCFD
> - MODULE_TYPE = UEFI_DRIVER
> - VERSION_STRING = 1.0
> - LIBRARY_CLASS = EblNetworkLib|DXE_DRIVER DXE_RUNTIME_DRIVER UEFI_APPLICATION UEFI_DRIVER
> -
> -[sources.common]
> - EblNetworkLib.c
> -
> -[Packages]
> - MdePkg/MdePkg.dec
> - EmbeddedPkg/EmbeddedPkg.dec
> -
> -[Protocols]
> - gEfiSimpleNetworkProtocolGuid
> - gEfiPxeBaseCodeProtocolGuid
> -
> -[Depex]
> - TRUE
> diff --git a/EmbeddedPkg/Library/EfiFileLib/EfiFileLib.c b/EmbeddedPkg/Library/EfiFileLib/EfiFileLib.c
> deleted file mode 100644
> index 8c38d22f1eb1..000000000000
> --- a/EmbeddedPkg/Library/EfiFileLib/EfiFileLib.c
> +++ /dev/null
> @@ -1,1784 +0,0 @@
> -/** @file
> -File IO routines inspired by Streams with an EFI flavor
> -
> -Copyright (c) 2007, Intel Corporation. All rights reserved.<BR>
> -Portions copyright (c) 2008 - 2009, Apple Inc. 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
> -http://opensource.org/licenses/bsd-license.php
> -
> -THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
> -WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
> -
> -Basic support for opening files on different device types. The device string
> -is in the form of DevType:Path. Current DevType is required as there is no
> -current mounted device concept of current working directory concept implement
> -by this library.
> -
> -Device names are case insensitive and only check the leading characters for
> -unique matches. Thus the following are all the same:
> -LoadFile0:
> -l0:
> -L0:
> -Lo0:
> -
> -Supported Device Names:
> -A0x1234:0x12 - A memory buffer starting at address 0x1234 for 0x12 bytes
> -l1: - EFI LoadFile device one.
> -B0: - EFI BlockIo zero.
> -fs3: - EFI Simple File System device 3
> -Fv2: - EFI Firmware VOlume device 2
> -10.0.1.102: - TFTP service IP followed by the file name
> -**/
> -
> -#include <PiDxe.h>
> -#include <Protocol/BlockIo.h>
> -#include <Protocol/DiskIo.h>
> -#include <Protocol/SimpleFileSystem.h>
> -#include <Protocol/FirmwareVolume2.h>
> -#include <Protocol/LoadFile.h>
> -#include <Protocol/FirmwareVolumeBlock.h>
> -
> -#include <Guid/FileInfo.h>
> -#include <Guid/ZeroGuid.h>
> -
> -#include <Library/BaseLib.h>
> -#include <Library/MemoryAllocationLib.h>
> -#include <Library/DevicePathLib.h>
> -#include <Library/PrintLib.h>
> -#include <Library/BaseMemoryLib.h>
> -#include <Library/UefiLib.h>
> -#include <Library/UefiBootServicesTableLib.h>
> -#include <Library/UefiRuntimeServicesTableLib.h>
> -#include <Library/DebugLib.h>
> -#include <Library/EfiFileLib.h>
> -#include <Library/PcdLib.h>
> -#include <Library/EblNetworkLib.h>
> -
> -
> -CHAR8 *gCwd = NULL;
> -
> -#define EFI_OPEN_FILE_GUARD_HEADER 0x4B4D4641
> -#define EFI_OPEN_FILE_GUARD_FOOTER 0x444D5A56
> -
> -// Need to defend against this overflowing
> -#define MAX_CMD_LINE 0x200
> -
> -typedef struct {
> - UINT32 Header;
> - EFI_OPEN_FILE File;
> - UINT32 Footer;
> -} EFI_OPEN_FILE_GUARD;
> -
> -
> -// globals to store current open device info
> -EFI_HANDLE *mBlkIo = NULL;
> -UINTN mBlkIoCount = 0;
> -
> -EFI_HANDLE *mFs = NULL;
> -UINTN mFsCount = 0;
> -// mFsInfo[] array entries must match mFs[] handles
> -EFI_FILE_SYSTEM_INFO **mFsInfo = NULL;
> -
> -EFI_HANDLE *mFv = NULL;
> -UINTN mFvCount = 0;
> -EFI_HANDLE *mLoadFile = NULL;
> -UINTN mLoadFileCount = 0;
> -
> -
> -
> -/**
> -Internal worker function to validate a File handle.
> -
> -@param File Open File Handle
> -
> -@return TRUE File is valid
> -@return FALSE File is not valid
> -
> -
> -**/
> -BOOLEAN
> -FileHandleValid (
> - IN EFI_OPEN_FILE *File
> - )
> -{
> - EFI_OPEN_FILE_GUARD *GuardFile;
> -
> - // Look right before and after file structure for the correct signatures
> - GuardFile = BASE_CR (File, EFI_OPEN_FILE_GUARD, File);
> - if ((GuardFile->Header != EFI_OPEN_FILE_GUARD_HEADER) ||
> - (GuardFile->Footer != EFI_OPEN_FILE_GUARD_FOOTER) ) {
> - return FALSE;
> - }
> -
> - return TRUE;
> -}
> -
> -/**
> -Internal worker function. If Buffer is not NULL free it.
> -
> -@param Buffer Buffer to FreePool()
> -
> -**/
> -VOID
> -EblFreePool (
> - IN VOID *Buffer
> - )
> -{
> - if (Buffer != NULL) {
> - FreePool (Buffer);
> - }
> -}
> -
> -/**
> -Update Device List Global Variables
> -
> -**/
> -VOID
> -EblUpdateDeviceLists (
> - VOID
> - )
> -{
> - EFI_STATUS Status;
> - UINTN Size;
> - EFI_SIMPLE_FILE_SYSTEM_PROTOCOL *Fs;
> - EFI_FILE_HANDLE Root;
> - UINTN Index;
> -
> - if (mBlkIo != NULL) {
> - FreePool (mBlkIo);
> - }
> - gBS->LocateHandleBuffer (ByProtocol, &gEfiBlockIoProtocolGuid, NULL, &mBlkIoCount, &mBlkIo);
> -
> -
> -
> - if (mFv != NULL) {
> - FreePool (mFv);
> - }
> - gBS->LocateHandleBuffer (ByProtocol, &gEfiFirmwareVolume2ProtocolGuid, NULL, &mFvCount, &mFv);
> -
> - if (mLoadFile != NULL) {
> - FreePool (mLoadFile);
> - }
> - gBS->LocateHandleBuffer (ByProtocol, &gEfiLoadFileProtocolGuid, NULL, &mLoadFileCount, &mLoadFile);
> -
> - if (mFs != NULL) {
> - FreePool (mFs);
> - }
> -
> - if (&mFsInfo[0] != NULL) {
> - // Need to Free the mFsInfo prior to recalculating mFsCount so don't move this code
> - for (Index = 0; Index < mFsCount; Index++) {
> - if (mFsInfo[Index] != NULL) {
> - FreePool (mFsInfo[Index]);
> - }
> - }
> - FreePool (mFsInfo);
> - }
> -
> - gBS->LocateHandleBuffer (ByProtocol, &gEfiSimpleFileSystemProtocolGuid, NULL, &mFsCount, &mFs);
> -
> -
> - mFsInfo = AllocateZeroPool (mFsCount * sizeof (EFI_FILE_SYSTEM_INFO *));
> - if (mFsInfo == NULL) {
> - // If we can't do this then we can't support file system entries
> - mFsCount = 0;
> - } else {
> - // Loop through all the file system structures and cache the file system info data
> - for (Index =0; Index < mFsCount; Index++) {
> - Status = gBS->HandleProtocol (mFs[Index], &gEfiSimpleFileSystemProtocolGuid, (VOID **)&Fs);
> - if (!EFI_ERROR (Status)) {
> - Status = Fs->OpenVolume (Fs, &Root);
> - if (!EFI_ERROR (Status)) {
> - // Get information about the volume
> - Size = 0;
> - Status = Root->GetInfo (Root, &gEfiFileSystemInfoGuid, &Size, mFsInfo[Index]);
> - if (Status == EFI_BUFFER_TOO_SMALL) {
> - mFsInfo[Index] = AllocatePool (Size);
> - Status = Root->GetInfo (Root, &gEfiFileSystemInfoGuid, &Size, mFsInfo[Index]);
> - }
> -
> - Root->Close (Root);
> - }
> - }
> - }
> - }
> -}
> -
> -
> -/**
> -PathName is in the form <device name>:<path> for example fs1:\ or ROOT:\.
> -Return TRUE if the <devce name> prefix of PathName matches a file system
> -Volume Name. MatchIndex is the array index in mFsInfo[] of the match,
> -and it can be used with mFs[] to find the handle that needs to be opened
> -
> -@param PathName PathName to check
> -@param FileStart Index of the first character of the <path>
> -@param MatchIndex Index in mFsInfo[] that matches
> -
> -@return TRUE PathName matches a Volume Label and MatchIndex is valid
> -@return FALSE PathName does not match a Volume Label MatchIndex undefined
> -
> -**/
> -BOOLEAN
> -EblMatchVolumeName (
> - IN CHAR8 *PathName,
> - IN UINTN FileStart,
> - OUT UINTN *MatchIndex
> - )
> -{
> - UINTN Index;
> - UINTN Compare;
> - UINTN VolStrLen;
> - BOOLEAN Match;
> -
> - for (Index =0; Index < mFsCount; Index++) {
> - if (mFsInfo[Index] == NULL) {
> - // FsInfo is not valid so skip it
> - continue;
> - }
> - VolStrLen = StrLen (mFsInfo[Index]->VolumeLabel);
> - for (Compare = 0, Match = TRUE; Compare < (FileStart - 1); Compare++) {
> - if (Compare > VolStrLen) {
> - Match = FALSE;
> - break;
> - }
> - if (PathName[Compare] != (CHAR8)mFsInfo[Index]->VolumeLabel[Compare]) {
> - // If the VolumeLabel has a space allow a _ to match with it in addition to ' '
> - if (!((PathName[Compare] == '_') && (mFsInfo[Index]->VolumeLabel[Compare] == L' '))) {
> - Match = FALSE;
> - break;
> - }
> - }
> - }
> - if (Match) {
> - *MatchIndex = Index;
> - return TRUE;
> - }
> - }
> -
> - return FALSE;
> -}
> -
> -
> -/**
> -Return the number of devices of the current type active in the system
> -
> -@param Type Device type to check
> -
> -@return 0 Invalid type
> -
> -**/
> -UINTN
> -EfiGetDeviceCounts (
> - IN EFI_OPEN_FILE_TYPE DeviceType
> - )
> -{
> - switch (DeviceType) {
> - case EfiOpenLoadFile:
> - return mLoadFileCount;
> - case EfiOpenFirmwareVolume:
> - return mFvCount;
> - case EfiOpenFileSystem:
> - return mFsCount;
> - case EfiOpenBlockIo:
> - return mBlkIoCount;
> - default:
> - return 0;
> - }
> -}
> -
> -EFI_STATUS
> -ConvertIpStringToEfiIp (
> - IN CHAR8 *PathName,
> - OUT EFI_IP_ADDRESS *ServerIp
> - )
> -{
> - CHAR8 *Str;
> -
> - Str = PathName;
> - ServerIp->v4.Addr[0] = (UINT8)AsciiStrDecimalToUintn (Str);
> -
> - Str = AsciiStrStr (Str, ".");
> - if (Str == NULL) {
> - return EFI_DEVICE_ERROR;
> - }
> -
> - ServerIp->v4.Addr[1] = (UINT8)AsciiStrDecimalToUintn (++Str);
> -
> - Str = AsciiStrStr (Str, ".");
> - if (Str == NULL) {
> - return EFI_DEVICE_ERROR;
> - }
> -
> - ServerIp->v4.Addr[2] = (UINT8)AsciiStrDecimalToUintn (++Str);
> -
> - Str = AsciiStrStr (Str, ".");
> - if (Str == NULL) {
> - return EFI_DEVICE_ERROR;
> - }
> -
> - ServerIp->v4.Addr[3] = (UINT8)AsciiStrDecimalToUintn (++Str);
> -
> - return EFI_SUCCESS;
> -}
> -
> -
> -/**
> -Internal work function to extract a device number from a string skipping
> -text. Easy way to extract numbers from strings like blk7:.
> -
> -@param Str String to extract device number form
> -
> -@return -1 Device string is not valid
> -@return Device #
> -
> -**/
> -UINTN
> -EblConvertDevStringToNumber (
> - IN CHAR8 *Str
> - )
> -{
> - UINTN Max;
> - UINTN Index;
> -
> -
> - // Find the first digit
> - Max = AsciiStrLen (Str);
> - for (Index = 0; !((*Str >= '0') && (*Str <= '9')) && (Index < Max); Index++) {
> - Str++;
> - }
> - if (Index == Max) {
> - return (UINTN)-1;
> - }
> -
> - return AsciiStrDecimalToUintn (Str);
> -}
> -
> -
> -/**
> -Internal work function to fill in EFI_OPEN_FILE information for the Fs and BlkIo
> -
> -@param File Open file handle
> -@param FileName Name of file after device stripped off
> -
> -
> -**/
> -EFI_STATUS
> -EblFileDevicePath (
> - IN OUT EFI_OPEN_FILE *File,
> - IN CHAR8 *FileName,
> - IN CONST UINT64 OpenMode
> - )
> -{
> - EFI_STATUS Status;
> - UINTN Size;
> - FILEPATH_DEVICE_PATH *FilePath;
> - EFI_DEVICE_PATH_PROTOCOL *FileDevicePath;
> - CHAR16 UnicodeFileName[MAX_PATHNAME];
> - EFI_BLOCK_IO_PROTOCOL *BlkIo;
> - EFI_SIMPLE_FILE_SYSTEM_PROTOCOL *Fs;
> - EFI_FILE_HANDLE Root;
> -
> -
> - if ( *FileName != 0 ) {
> - AsciiStrToUnicodeStrS (FileName, UnicodeFileName,
> - ARRAY_SIZE (UnicodeFileName));
> - } else {
> - AsciiStrToUnicodeStrS ("\\", UnicodeFileName, ARRAY_SIZE (UnicodeFileName));
> - }
> -
> - Size = StrSize (UnicodeFileName);
> - FileDevicePath = AllocatePool (Size + SIZE_OF_FILEPATH_DEVICE_PATH + sizeof (EFI_DEVICE_PATH_PROTOCOL));
> - if (FileDevicePath != NULL) {
> - FilePath = (FILEPATH_DEVICE_PATH *) FileDevicePath;
> - FilePath->Header.Type = MEDIA_DEVICE_PATH;
> - FilePath->Header.SubType = MEDIA_FILEPATH_DP;
> - CopyMem (&FilePath->PathName, UnicodeFileName, Size);
> - SetDevicePathNodeLength (&FilePath->Header, Size + SIZE_OF_FILEPATH_DEVICE_PATH);
> - SetDevicePathEndNode (NextDevicePathNode (&FilePath->Header));
> -
> - if (File->EfiHandle != NULL) {
> - File->DevicePath = DevicePathFromHandle (File->EfiHandle);
> - }
> -
> - File->DevicePath = AppendDevicePath (File->DevicePath, FileDevicePath);
> - FreePool (FileDevicePath);
> - }
> -
> - Status = gBS->HandleProtocol (File->EfiHandle, &gEfiBlockIoProtocolGuid, (VOID **)&BlkIo);
> - if (!EFI_ERROR (Status)) {
> - File->FsBlockIoMedia = BlkIo->Media;
> - File->FsBlockIo = BlkIo;
> -
> - // If we are not opening the device this will get over written with file info
> - File->MaxPosition = MultU64x32 (BlkIo->Media->LastBlock + 1, BlkIo->Media->BlockSize);
> - }
> -
> - if (File->Type == EfiOpenFileSystem) {
> - Status = gBS->HandleProtocol (File->EfiHandle, &gEfiSimpleFileSystemProtocolGuid, (VOID **)&Fs);
> - if (!EFI_ERROR (Status)) {
> - Status = Fs->OpenVolume (Fs, &Root);
> - if (!EFI_ERROR (Status)) {
> - // Get information about the volume
> - Size = 0;
> - Status = Root->GetInfo (Root, &gEfiFileSystemInfoGuid, &Size, File->FsInfo);
> - if (Status == EFI_BUFFER_TOO_SMALL) {
> - File->FsInfo = AllocatePool (Size);
> - Status = Root->GetInfo (Root, &gEfiFileSystemInfoGuid, &Size, File->FsInfo);
> - }
> -
> - // Get information about the file
> - Status = Root->Open (Root, &File->FsFileHandle, UnicodeFileName, OpenMode, 0);
> - if (!EFI_ERROR (Status)) {
> - Size = 0;
> - Status = File->FsFileHandle->GetInfo (File->FsFileHandle, &gEfiFileInfoGuid, &Size, NULL);
> - if (Status == EFI_BUFFER_TOO_SMALL) {
> - File->FsFileInfo = AllocatePool (Size);
> - Status = File->FsFileHandle->GetInfo (File->FsFileHandle, &gEfiFileInfoGuid, &Size, File->FsFileInfo);
> - if (!EFI_ERROR (Status)) {
> - File->Size = (UINTN)File->FsFileInfo->FileSize;
> - File->MaxPosition = (UINT64)File->Size;
> - }
> - }
> - }
> -
> - Root->Close (Root);
> - }
> - }
> - } else if (File->Type == EfiOpenBlockIo) {
> - File->Size = (UINTN)File->MaxPosition;
> - }
> -
> - return Status;
> -}
> -
> -#define ToUpper(a) ((((a) >= 'a') && ((a) <= 'z')) ? ((a) - 'a' + 'A') : (a))
> -
> -EFI_STATUS
> -CompareGuidToString (
> - IN EFI_GUID *Guid,
> - IN CHAR8 *String
> - )
> -{
> - CHAR8 AsciiGuid[64];
> - CHAR8 *StringPtr;
> - CHAR8 *GuidPtr;
> -
> - AsciiSPrint (AsciiGuid, sizeof(AsciiGuid), "%g", Guid);
> -
> - StringPtr = String;
> - GuidPtr = AsciiGuid;
> -
> - while ((*StringPtr != '\0') && (*GuidPtr != '\0')) {
> - // Skip dashes
> - if (*StringPtr == '-') {
> - StringPtr++;
> - continue;
> - }
> -
> - if (*GuidPtr == '-') {
> - GuidPtr++;
> - continue;
> - }
> -
> - if (ToUpper(*StringPtr) != ToUpper(*GuidPtr)) {
> - return EFI_NOT_FOUND;
> - }
> -
> - StringPtr++;
> - GuidPtr++;
> - }
> -
> - return EFI_SUCCESS;
> -}
> -
> -
> -/**
> -Internal work function to fill in EFI_OPEN_FILE information for the FV
> -
> -@param File Open file handle
> -@param FileName Name of file after device stripped off
> -
> -
> -**/
> -EFI_STATUS
> -EblFvFileDevicePath (
> - IN OUT EFI_OPEN_FILE *File,
> - IN CHAR8 *FileName,
> - IN CONST UINT64 OpenMode
> - )
> -{
> - EFI_STATUS Status;
> - EFI_STATUS GetNextFileStatus;
> - MEDIA_FW_VOL_FILEPATH_DEVICE_PATH DevicePathNode;
> - EFI_DEVICE_PATH_PROTOCOL *DevicePath;
> - UINTN Key;
> - UINT32 AuthenticationStatus;
> - CHAR8 AsciiSection[MAX_PATHNAME];
> - VOID *Section;
> - UINTN SectionSize;
> - EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *Fvb;
> - EFI_LBA Lba;
> - UINTN BlockSize;
> - UINTN NumberOfBlocks;
> - EFI_FIRMWARE_VOLUME_HEADER *FvHeader = NULL;
> - UINTN Index;
> -
> -
> - Status = gBS->HandleProtocol (File->EfiHandle, &gEfiFirmwareVolume2ProtocolGuid, (VOID **)&File->Fv);
> - if (EFI_ERROR (Status)) {
> - return Status;
> - }
> -
> - // Get FVB Info about the handle
> - Status = gBS->HandleProtocol (File->EfiHandle, &gEfiFirmwareVolumeBlockProtocolGuid, (VOID **)&Fvb);
> - if (!EFI_ERROR (Status)) {
> - Status = Fvb->GetPhysicalAddress (Fvb, &File->FvStart);
> - if (!EFI_ERROR (Status)) {
> - FvHeader = (EFI_FIRMWARE_VOLUME_HEADER *)(UINTN)File->FvStart;
> - File->FvHeaderSize = sizeof (EFI_FIRMWARE_VOLUME_HEADER);
> - for (Index = 0; FvHeader->BlockMap[Index].Length !=0; Index++) {
> - File->FvHeaderSize += sizeof (EFI_FV_BLOCK_MAP_ENTRY);
> - }
> -
> - for (Lba = 0, File->FvSize = 0, NumberOfBlocks = 0; ; File->FvSize += (BlockSize * NumberOfBlocks), Lba += NumberOfBlocks) {
> - Status = Fvb->GetBlockSize (Fvb, Lba, &BlockSize, &NumberOfBlocks);
> - if (EFI_ERROR (Status)) {
> - break;
> - }
> - }
> - }
> - }
> -
> -
> - DevicePath = DevicePathFromHandle (File->EfiHandle);
> -
> - if (*FileName == '\0') {
> - File->DevicePath = DuplicateDevicePath (DevicePath);
> - File->Size = File->FvSize;
> - File->MaxPosition = File->Size;
> - } else {
> - Key = 0;
> - do {
> - File->FvType = EFI_FV_FILETYPE_ALL;
> - GetNextFileStatus = File->Fv->GetNextFile (
> - File->Fv,
> - &Key,
> - &File->FvType,
> - &File->FvNameGuid,
> - &File->FvAttributes,
> - &File->Size
> - );
> - if (!EFI_ERROR (GetNextFileStatus)) {
> - // Compare GUID first
> - Status = CompareGuidToString (&File->FvNameGuid, FileName);
> - if (!EFI_ERROR(Status)) {
> - break;
> - }
> -
> - Section = NULL;
> - Status = File->Fv->ReadSection (
> - File->Fv,
> - &File->FvNameGuid,
> - EFI_SECTION_USER_INTERFACE,
> - 0,
> - &Section,
> - &SectionSize,
> - &AuthenticationStatus
> - );
> - if (!EFI_ERROR (Status)) {
> - UnicodeStrToAsciiStrS (Section, AsciiSection, MAX_PATHNAME);
> - if (AsciiStriCmp (FileName, AsciiSection) == 0) {
> - FreePool (Section);
> - break;
> - }
> - FreePool (Section);
> - }
> - }
> - } while (!EFI_ERROR (GetNextFileStatus));
> -
> - if (EFI_ERROR (GetNextFileStatus)) {
> - return GetNextFileStatus;
> - }
> -
> - if (OpenMode != EFI_SECTION_ALL) {
> - // Calculate the size of the section we are targeting
> - Section = NULL;
> - File->Size = 0;
> - Status = File->Fv->ReadSection (
> - File->Fv,
> - &File->FvNameGuid,
> - (EFI_SECTION_TYPE)OpenMode,
> - 0,
> - &Section,
> - &File->Size,
> - &AuthenticationStatus
> - );
> - if (EFI_ERROR (Status)) {
> - return Status;
> - }
> - }
> -
> - File->MaxPosition = File->Size;
> - EfiInitializeFwVolDevicepathNode (&DevicePathNode, &File->FvNameGuid);
> - File->DevicePath = AppendDevicePathNode (DevicePath, (EFI_DEVICE_PATH_PROTOCOL *)&DevicePathNode);
> - }
> -
> -
> - // FVB not required if FV was soft loaded...
> - return EFI_SUCCESS;
> -}
> -
> -
> -
> -
> -/**
> -Open a device named by PathName. The PathName includes a device name and
> -path separated by a :. See file header for more details on the PathName
> -syntax. There is no checking to prevent a file from being opened more than
> -one type.
> -
> -SectionType is only used to open an FV. Each file in an FV contains multiple
> -sections and only the SectionType section is opened.
> -
> -For any file that is opened with EfiOpen() must be closed with EfiClose().
> -
> -@param PathName Path to parse to open
> -@param OpenMode Same as EFI_FILE.Open()
> -@param SectionType Section in FV to open.
> -
> -@return NULL Open failed
> -@return Valid EFI_OPEN_FILE handle
> -
> -**/
> -EFI_OPEN_FILE *
> -EfiOpen (
> - IN CHAR8 *PathName,
> - IN CONST UINT64 OpenMode,
> - IN CONST EFI_SECTION_TYPE SectionType
> - )
> -{
> - EFI_STATUS Status;
> - EFI_OPEN_FILE *File;
> - EFI_OPEN_FILE FileData;
> - UINTN StrLen;
> - UINTN FileStart;
> - UINTN DevNumber = 0;
> - EFI_OPEN_FILE_GUARD *GuardFile;
> - BOOLEAN VolumeNameMatch;
> - EFI_DEVICE_PATH_PROTOCOL *DevicePath;
> - UINTN Size;
> - EFI_IP_ADDRESS Ip;
> - CHAR8 *CwdPlusPathName;
> - UINTN Index;
> - EFI_SECTION_TYPE ModifiedSectionType;
> - UINTN AsciiLength;
> -
> - EblUpdateDeviceLists ();
> -
> - File = &FileData;
> - ZeroMem (File, sizeof (EFI_OPEN_FILE));
> -
> - StrLen = AsciiStrSize (PathName);
> - if (StrLen <= 1) {
> - // Smallest valid path is 1 char and a null
> - return NULL;
> - }
> -
> - for (FileStart = 0; FileStart < StrLen; FileStart++) {
> - if (PathName[FileStart] == ':') {
> - FileStart++;
> - break;
> - }
> - }
> -
> - //
> - // Matching volume name has precedence over handle based names
> - //
> - VolumeNameMatch = EblMatchVolumeName (PathName, FileStart, &DevNumber);
> - if (!VolumeNameMatch) {
> - if (FileStart == StrLen) {
> - // No Volume name or device name, so try Current Working Directory
> - if (gCwd == NULL) {
> - // No CWD
> - return NULL;
> - }
> -
> - // We could add a current working directory concept
> - AsciiLength = AsciiStrSize (gCwd) + AsciiStrSize (PathName);
> - CwdPlusPathName = AllocatePool (AsciiLength);
> - if (CwdPlusPathName == NULL) {
> - return NULL;
> - }
> -
> - if ((PathName[0] == '/') || (PathName[0] == '\\')) {
> - // PathName starts in / so this means we go to the root of the device in the CWD.
> - CwdPlusPathName[0] = '\0';
> - for (FileStart = 0; gCwd[FileStart] != '\0'; FileStart++) {
> - CwdPlusPathName[FileStart] = gCwd[FileStart];
> - if (gCwd[FileStart] == ':') {
> - FileStart++;
> - CwdPlusPathName[FileStart] = '\0';
> - break;
> - }
> - }
> - } else {
> - AsciiStrCpyS (CwdPlusPathName, AsciiLength, gCwd);
> - StrLen = AsciiStrLen (gCwd);
> - if ((*PathName != '/') && (*PathName != '\\') && (gCwd[StrLen-1] != '/') && (gCwd[StrLen-1] != '\\')) {
> - AsciiStrCatS (CwdPlusPathName, AsciiLength, "\\");
> - }
> - }
> -
> - AsciiStrCatS (CwdPlusPathName, AsciiLength, PathName);
> - if (AsciiStrStr (CwdPlusPathName, ":") == NULL) {
> - // Extra error check to make sure we don't recurse and blow stack
> - return NULL;
> - }
> -
> - File = EfiOpen (CwdPlusPathName, OpenMode, SectionType);
> - FreePool (CwdPlusPathName);
> - return File;
> - }
> -
> - DevNumber = EblConvertDevStringToNumber ((CHAR8 *)PathName);
> - }
> -
> - File->DeviceName = AllocatePool (StrLen);
> - AsciiStrCpyS (File->DeviceName, StrLen, PathName);
> - File->DeviceName[FileStart - 1] = '\0';
> - File->FileName = &File->DeviceName[FileStart];
> - if (File->FileName[0] == '\0') {
> - // if it is just a file name use / as root
> - File->FileName = "\\";
> - }
> -
> - //
> - // Use best match algorithm on the dev names so we only need to look at the
> - // first few charters to match the full device name. Short name forms are
> - // legal from the caller.
> - //
> - Status = EFI_SUCCESS;
> - if (*PathName == 'f' || *PathName == 'F' || VolumeNameMatch) {
> - if (PathName[1] == 's' || PathName[1] == 'S' || VolumeNameMatch) {
> - if (DevNumber >= mFsCount) {
> - goto ErrorExit;
> - }
> - File->Type = EfiOpenFileSystem;
> - File->EfiHandle = mFs[DevNumber];
> - Status = EblFileDevicePath (File, &PathName[FileStart], OpenMode);
> -
> - } else if (PathName[1] == 'v' || PathName[1] == 'V') {
> - if (DevNumber >= mFvCount) {
> - goto ErrorExit;
> - }
> - File->Type = EfiOpenFirmwareVolume;
> - File->EfiHandle = mFv[DevNumber];
> -
> - if ((PathName[FileStart] == '/') || (PathName[FileStart] == '\\')) {
> - // Skip leading / as its not really needed for the FV since no directories are supported
> - FileStart++;
> - }
> -
> - // Check for 2nd :
> - ModifiedSectionType = SectionType;
> - for (Index = FileStart; PathName[Index] != '\0'; Index++) {
> - if (PathName[Index] == ':') {
> - // Support fv0:\DxeCore:0x10
> - // This means open the PE32 Section of the file
> - ModifiedSectionType = (EFI_SECTION_TYPE)AsciiStrHexToUintn (&PathName[Index + 1]);
> - PathName[Index] = '\0';
> - }
> - }
> - File->FvSectionType = ModifiedSectionType;
> - Status = EblFvFileDevicePath (File, &PathName[FileStart], ModifiedSectionType);
> - }
> - } else if ((*PathName == 'A') || (*PathName == 'a')) {
> - // Handle a:0x10000000:0x1234 address form a:ADDRESS:SIZE
> - File->Type = EfiOpenMemoryBuffer;
> - // 1st colon is at PathName[FileStart - 1]
> - File->Buffer = (VOID *)AsciiStrHexToUintn (&PathName[FileStart]);
> -
> - // Find 2nd colon
> - while ((PathName[FileStart] != ':') && (PathName[FileStart] != '\0')) {
> - FileStart++;
> - }
> -
> - // If we ran out of string, there's no extra data
> - if (PathName[FileStart] == '\0') {
> - File->Size = 0;
> - } else {
> - File->Size = AsciiStrHexToUintn (&PathName[FileStart + 1]);
> - }
> -
> - // if there's no number after the second colon, default
> - // the end of memory
> - if (File->Size == 0) {
> - File->Size = (UINTN)(0 - (UINTN)File->Buffer);
> - }
> -
> - File->MaxPosition = File->Size;
> - File->BaseOffset = (UINTN)File->Buffer;
> -
> - } else if (*PathName== 'l' || *PathName == 'L') {
> - if (DevNumber >= mLoadFileCount) {
> - goto ErrorExit;
> - }
> - File->Type = EfiOpenLoadFile;
> - File->EfiHandle = mLoadFile[DevNumber];
> -
> - Status = gBS->HandleProtocol (File->EfiHandle, &gEfiLoadFileProtocolGuid, (VOID **)&File->LoadFile);
> - if (EFI_ERROR (Status)) {
> - goto ErrorExit;
> - }
> -
> - Status = gBS->HandleProtocol (File->EfiHandle, &gEfiDevicePathProtocolGuid, (VOID **)&DevicePath);
> - if (EFI_ERROR (Status)) {
> - goto ErrorExit;
> - }
> - File->DevicePath = DuplicateDevicePath (DevicePath);
> -
> - } else if (*PathName == 'b' || *PathName == 'B') {
> - // Handle b#:0x10000000:0x1234 address form b#:ADDRESS:SIZE
> - if (DevNumber >= mBlkIoCount) {
> - goto ErrorExit;
> - }
> - File->Type = EfiOpenBlockIo;
> - File->EfiHandle = mBlkIo[DevNumber];
> - EblFileDevicePath (File, "", OpenMode);
> -
> - // 1st colon is at PathName[FileStart - 1]
> - File->DiskOffset = AsciiStrHexToUintn (&PathName[FileStart]);
> -
> - // Find 2nd colon
> - while ((PathName[FileStart] != ':') && (PathName[FileStart] != '\0')) {
> - FileStart++;
> - }
> -
> - // If we ran out of string, there's no extra data
> - if (PathName[FileStart] == '\0') {
> - Size = 0;
> - } else {
> - Size = AsciiStrHexToUintn (&PathName[FileStart + 1]);
> - }
> -
> - // if a zero size is passed in (or the size is left out entirely),
> - // go to the end of the device.
> - if (Size == 0) {
> - File->Size = File->Size - File->DiskOffset;
> - } else {
> - File->Size = Size;
> - }
> -
> - File->MaxPosition = File->Size;
> - File->BaseOffset = File->DiskOffset;
> - } else if ((*PathName) >= '0' && (*PathName <= '9')) {
> -
> - // Get current IP address
> - Status = EblGetCurrentIpAddress (&Ip);
> - if (EFI_ERROR(Status)) {
> - AsciiPrint("Device IP Address is not configured.\n");
> - goto ErrorExit;
> - }
> -
> -
> - // Parse X.X.X.X:Filename, only support IPv4 TFTP for now...
> - File->Type = EfiOpenTftp;
> - File->IsDirty = FALSE;
> - File->IsBufferValid = FALSE;
> -
> - Status = ConvertIpStringToEfiIp (PathName, &File->ServerIp);
> - }
> -
> - if (EFI_ERROR (Status)) {
> - goto ErrorExit;
> - }
> -
> - GuardFile = (EFI_OPEN_FILE_GUARD *)AllocateZeroPool (sizeof (EFI_OPEN_FILE_GUARD));
> - if (GuardFile == NULL) {
> - goto ErrorExit;
> - }
> -
> - GuardFile->Header = EFI_OPEN_FILE_GUARD_HEADER;
> - CopyMem (&(GuardFile->File), &FileData, sizeof (EFI_OPEN_FILE));
> - GuardFile->Footer = EFI_OPEN_FILE_GUARD_FOOTER;
> -
> - return &(GuardFile->File);
> -
> -ErrorExit:
> - FreePool (File->DeviceName);
> - return NULL;
> -}
> -
> -#define FILE_COPY_CHUNK 0x01000000
> -
> -EFI_STATUS
> -EfiCopyFile (
> - IN CHAR8 *DestinationFile,
> - IN CHAR8 *SourceFile
> - )
> -{
> - EFI_OPEN_FILE *Source = NULL;
> - EFI_OPEN_FILE *Destination = NULL;
> - EFI_STATUS Status = EFI_SUCCESS;
> - VOID *Buffer = NULL;
> - UINTN Size;
> - UINTN Offset;
> - UINTN Chunk = FILE_COPY_CHUNK;
> -
> - Source = EfiOpen (SourceFile, EFI_FILE_MODE_READ, 0);
> - if (Source == NULL) {
> - AsciiPrint("Source file open error.\n");
> - Status = EFI_NOT_FOUND;
> - goto Exit;
> - }
> -
> - Destination = EfiOpen (DestinationFile, EFI_FILE_MODE_WRITE | EFI_FILE_MODE_CREATE, 0);
> - if (Destination == NULL) {
> - AsciiPrint("Destination file open error.\n");
> - Status = EFI_NOT_FOUND;
> - goto Exit;
> - }
> -
> - Buffer = AllocatePool(FILE_COPY_CHUNK);
> - if (Buffer == NULL) {
> - Status = EFI_OUT_OF_RESOURCES;
> - goto Exit;
> - }
> -
> - Size = EfiTell(Source, NULL);
> -
> - for (Offset = 0; Offset + FILE_COPY_CHUNK <= Size; Offset += Chunk) {
> - Chunk = FILE_COPY_CHUNK;
> -
> - Status = EfiRead(Source, Buffer, &Chunk);
> - if (EFI_ERROR(Status)) {
> - AsciiPrint("Read file error %r\n", Status);
> - goto Exit;
> - }
> -
> - Status = EfiWrite(Destination, Buffer, &Chunk);
> - if (EFI_ERROR(Status)) {
> - AsciiPrint("Write file error %r\n", Status);
> - goto Exit;
> - }
> - }
> -
> - // Any left over?
> - if (Offset < Size) {
> - Chunk = Size - Offset;
> -
> - Status = EfiRead(Source, Buffer, &Chunk);
> - if (EFI_ERROR(Status)) {
> - AsciiPrint("Read file error\n");
> - goto Exit;
> - }
> -
> - Status = EfiWrite(Destination, Buffer, &Chunk);
> - if (EFI_ERROR(Status)) {
> - AsciiPrint("Write file error\n");
> - goto Exit;
> - }
> - }
> -
> -Exit:
> - if (Source != NULL) {
> - Status = EfiClose(Source);
> - if (EFI_ERROR(Status)) {
> - AsciiPrint("Source close error");
> - }
> - }
> -
> - if (Destination != NULL) {
> - Status = EfiClose(Destination);
> - if (EFI_ERROR(Status)) {
> - AsciiPrint("Destination close error");
> - }
> - }
> -
> - if (Buffer != NULL) {
> - FreePool(Buffer);
> - }
> -
> - return Status;
> -}
> -
> -/**
> -Use DeviceType and Index to form a valid PathName and try and open it.
> -
> -@param DeviceType Device type to open
> -@param Index Device Index to use. Zero relative.
> -
> -@return NULL Open failed
> -@return Valid EFI_OPEN_FILE handle
> -
> -**/
> -EFI_OPEN_FILE *
> -EfiDeviceOpenByType (
> - IN EFI_OPEN_FILE_TYPE DeviceType,
> - IN UINTN Index
> - )
> -{
> - CHAR8 *DevStr;
> - CHAR8 Path[MAX_CMD_LINE];
> -
> - switch (DeviceType) {
> - case EfiOpenLoadFile:
> - DevStr = "loadfile%d:";
> - break;
> - case EfiOpenFirmwareVolume:
> - DevStr = "fv%d:";
> - break;
> - case EfiOpenFileSystem:
> - DevStr = "fs%d:";
> - break;
> - case EfiOpenBlockIo:
> - DevStr = "blk%d:";
> - break;
> - case EfiOpenMemoryBuffer:
> - DevStr = "a%d:";
> - break;
> - default:
> - return NULL;
> - }
> -
> - AsciiSPrint (Path, MAX_PATHNAME, DevStr, Index);
> -
> - return EfiOpen (Path, EFI_FILE_MODE_READ, 0);
> -}
> -
> -
> -/**
> -Close a file handle opened by EfiOpen() and free all resources allocated by
> -EfiOpen().
> -
> -@param Stream Open File Handle
> -
> -@return EFI_INVALID_PARAMETER Stream is not an Open File
> -@return EFI_SUCCESS Steam closed
> -
> -**/
> -EFI_STATUS
> -EfiClose (
> - IN EFI_OPEN_FILE *File
> - )
> -{
> - EFI_STATUS Status;
> - UINT64 TftpBufferSize;
> -
> - if (!FileHandleValid (File)) {
> - return EFI_INVALID_PARAMETER;
> - }
> -
> - //Write the buffer contents to TFTP file.
> - if ((File->Type == EfiOpenTftp) && (File->IsDirty)) {
> -
> - TftpBufferSize = File->Size;
> - Status = EblMtftp (
> - EFI_PXE_BASE_CODE_TFTP_WRITE_FILE,
> - File->Buffer,
> - TRUE,
> - &TftpBufferSize,
> - NULL,
> - &File->ServerIp,
> - (UINT8 *)File->FileName,
> - NULL,
> - FALSE
> - );
> - if (EFI_ERROR(Status)) {
> - AsciiPrint("TFTP error during APPLE_NSP_TFTP_WRITE_FILE: %r\n", Status);
> - return Status;
> - }
> - }
> -
> - if ((File->Type == EfiOpenLoadFile) ||
> - ((File->Type == EfiOpenTftp) && (File->IsBufferValid == TRUE)) ||
> - ((File->Type == EfiOpenFirmwareVolume) && (File->IsBufferValid == TRUE))) {
> - EblFreePool(File->Buffer);
> - }
> -
> - EblFreePool (File->DevicePath);
> - EblFreePool (File->DeviceName);
> - EblFreePool (File->FsFileInfo);
> - EblFreePool (File->FsInfo);
> -
> - if (File->FsFileHandle != NULL) {
> - File->FsFileHandle->Close (File->FsFileHandle);
> - }
> -
> - // Need to free File and it's Guard structures
> - EblFreePool (BASE_CR (File, EFI_OPEN_FILE_GUARD, File));
> - return EFI_SUCCESS;
> -}
> -
> -
> -/**
> -Return the size of the file represented by Stream. Also return the current
> -Seek position. Opening a file will enable a valid file size to be returned.
> -LoadFile is an exception as a load file size is set to zero.
> -
> -@param Stream Open File Handle
> -
> -@return 0 Stream is not an Open File or a valid LoadFile handle
> -
> -**/
> -UINTN
> -EfiTell (
> - IN EFI_OPEN_FILE *File,
> - OUT EFI_LBA *CurrentPosition OPTIONAL
> - )
> -{
> - EFI_STATUS Status;
> - UINT64 BufferSize = 0;
> -
> - if (!FileHandleValid (File)) {
> - return 0;
> - }
> -
> - if (CurrentPosition != NULL) {
> - *CurrentPosition = File->CurrentPosition;
> - }
> -
> - if (File->Type == EfiOpenLoadFile) {
> - // Figure out the File->Size
> - File->Buffer = NULL;
> - File->Size = 0;
> - Status = File->LoadFile->LoadFile (File->LoadFile, File->DevicePath, FALSE, &File->Size, File->Buffer);
> - if (Status != EFI_BUFFER_TOO_SMALL) {
> - return 0;
> - }
> -
> - File->MaxPosition = (UINT64)File->Size;
> - } else if (File->Type == EfiOpenTftp) {
> -
> - Status = EblMtftp (
> - EFI_PXE_BASE_CODE_TFTP_GET_FILE_SIZE,
> - NULL,
> - FALSE,
> - &BufferSize,
> - NULL,
> - &File->ServerIp,
> - (UINT8 *)File->FileName,
> - NULL,
> - TRUE
> - );
> - if (EFI_ERROR(Status)) {
> - AsciiPrint("TFTP error during APPLE_NSP_TFTP_GET_FILE_SIZE: %r\n", Status);
> - return 0;
> - }
> -
> - File->Size = (UINTN)BufferSize;
> - File->MaxPosition = File->Size;
> - }
> -
> - return File->Size;
> -}
> -
> -
> -/**
> -Seek to the Offset location in the file. LoadFile and FV device types do
> -not support EfiSeek(). It is not possible to grow the file size using
> -EfiSeek().
> -
> -SeekType defines how use Offset to calculate the new file position:
> -EfiSeekStart : Position = Offset
> -EfiSeekCurrent: Position is Offset bytes from the current position
> -EfiSeekEnd : Only supported if Offset is zero to seek to end of file.
> -
> -@param Stream Open File Handle
> -@param Offset Offset to seek too.
> -@param SeekType Type of seek to perform
> -
> -
> -@return EFI_INVALID_PARAMETER Stream is not an Open File
> -@return EFI_UNSUPPORTED LoadFile and FV do not support Seek
> -@return EFI_NOT_FOUND Seek past the end of the file.
> -@return EFI_SUCCESS Steam closed
> -
> -**/
> -EFI_STATUS
> -EfiSeek (
> - IN EFI_OPEN_FILE *File,
> - IN EFI_LBA Offset,
> - IN EFI_SEEK_TYPE SeekType
> - )
> -{
> - EFI_STATUS Status;
> - UINT64 CurrentPosition;
> -
> - if (!FileHandleValid (File)) {
> - return EFI_INVALID_PARAMETER;
> - }
> -
> - if (File->Type == EfiOpenLoadFile) {
> - // LoadFile does not support Seek
> - return EFI_UNSUPPORTED;
> - }
> -
> - CurrentPosition = File->CurrentPosition;
> - switch (SeekType) {
> - case EfiSeekStart:
> - if (Offset > File->MaxPosition) {
> - return EFI_NOT_FOUND;
> - }
> - CurrentPosition = Offset;
> - break;
> -
> - case EfiSeekCurrent:
> - if ((File->CurrentPosition + Offset) > File->MaxPosition) {
> - return EFI_NOT_FOUND;
> - }
> - CurrentPosition += Offset;
> - break;
> -
> - case EfiSeekEnd:
> - if (Offset != 0) {
> - // We don't support growing file size via seeking past end of file
> - return EFI_UNSUPPORTED;
> - }
> - CurrentPosition = File->MaxPosition;
> - break;
> -
> - default:
> - return EFI_NOT_FOUND;
> - }
> -
> - Status = EFI_SUCCESS;
> - if (File->FsFileHandle != NULL) {
> - Status = File->FsFileHandle->SetPosition (File->FsFileHandle, CurrentPosition);
> - }
> -
> - if (!EFI_ERROR (Status)) {
> - File->CurrentPosition = CurrentPosition;
> - }
> -
> - return Status;
> -}
> -
> -EFI_STATUS
> -CacheTftpFile (
> - IN OUT EFI_OPEN_FILE *File
> - )
> -{
> - EFI_STATUS Status;
> - UINT64 TftpBufferSize;
> -
> - if (File->IsBufferValid) {
> - return EFI_SUCCESS;
> - }
> -
> - // Make sure the file size is set.
> - EfiTell (File, NULL);
> -
> - //Allocate a buffer to hold the whole file.
> - File->Buffer = AllocatePool(File->Size);
> - if (File->Buffer == NULL) {
> - return EFI_OUT_OF_RESOURCES;
> - }
> -
> - TftpBufferSize = File->Size;
> -
> - Status = EblMtftp (
> - EFI_PXE_BASE_CODE_TFTP_READ_FILE,
> - File->Buffer,
> - FALSE,
> - &TftpBufferSize,
> - NULL,
> - &File->ServerIp,
> - (UINT8 *)File->FileName,
> - NULL,
> - FALSE);
> - if (EFI_ERROR(Status)) {
> - AsciiPrint("TFTP error during APPLE_NSP_TFTP_READ_FILE: %r\n", Status);
> - FreePool(File->Buffer);
> - return Status;
> - }
> -
> - // Set the buffer valid flag.
> - File->IsBufferValid = TRUE;
> -
> - return Status;
> -}
> -
> -/**
> -Read BufferSize bytes from the current location in the file. For load file,
> -FV, and TFTP case you must read the entire file.
> -
> -@param Stream Open File Handle
> -@param Buffer Caller allocated buffer.
> -@param BufferSize Size of buffer in bytes.
> -
> -
> -@return EFI_SUCCESS Stream is not an Open File
> -@return EFI_END_OF_FILE Tried to read past the end of the file
> -@return EFI_INVALID_PARAMETER Stream is not an open file handle
> -@return EFI_BUFFER_TOO_SMALL Buffer is not big enough to do the read
> -@return "other" Error returned from device read
> -
> -**/
> -EFI_STATUS
> -EfiRead (
> - IN EFI_OPEN_FILE *File,
> - OUT VOID *Buffer,
> - OUT UINTN *BufferSize
> - )
> -{
> - EFI_STATUS Status;
> - UINT32 AuthenticationStatus;
> - EFI_DISK_IO_PROTOCOL *DiskIo;
> -
> - if (!FileHandleValid (File)) {
> - return EFI_INVALID_PARAMETER;
> - }
> -
> - // Don't read past the end of the file.
> - if ((File->CurrentPosition + *BufferSize) > File->MaxPosition) {
> - return EFI_END_OF_FILE;
> - }
> -
> - switch (File->Type) {
> - case EfiOpenLoadFile:
> - // Figure out the File->Size
> - EfiTell (File, NULL);
> -
> - Status = File->LoadFile->LoadFile (File->LoadFile, File->DevicePath, FALSE, BufferSize, Buffer);
> - break;
> -
> - case EfiOpenFirmwareVolume:
> - if (CompareGuid (&File->FvNameGuid, &gZeroGuid)) {
> - // This is the entire FV device, so treat like a memory buffer
> - CopyMem (Buffer, (VOID *)(UINTN)(File->FvStart + File->CurrentPosition), *BufferSize);
> - File->CurrentPosition += *BufferSize;
> - Status = EFI_SUCCESS;
> - } else {
> - if (File->Buffer == NULL) {
> - if (File->FvSectionType == EFI_SECTION_ALL) {
> - Status = File->Fv->ReadFile (
> - File->Fv,
> - &File->FvNameGuid,
> - (VOID **)&File->Buffer,
> - &File->Size,
> - &File->FvType,
> - &File->FvAttributes,
> - &AuthenticationStatus
> - );
> - } else {
> - Status = File->Fv->ReadSection (
> - File->Fv,
> - &File->FvNameGuid,
> - File->FvSectionType,
> - 0,
> - (VOID **)&File->Buffer,
> - &File->Size,
> - &AuthenticationStatus
> - );
> - }
> - if (EFI_ERROR (Status)) {
> - return Status;
> - }
> - File->IsBufferValid = TRUE;
> - }
> - // Operate on the cached buffer so Seek will work
> - CopyMem (Buffer, File->Buffer + File->CurrentPosition, *BufferSize);
> - File->CurrentPosition += *BufferSize;
> - Status = EFI_SUCCESS;
> - }
> - break;
> -
> - case EfiOpenMemoryBuffer:
> - CopyMem (Buffer, File->Buffer + File->CurrentPosition, *BufferSize);
> - File->CurrentPosition += *BufferSize;
> - Status = EFI_SUCCESS;
> - break;
> -
> - case EfiOpenFileSystem:
> - Status = File->FsFileHandle->Read (File->FsFileHandle, BufferSize, Buffer);
> - File->CurrentPosition += *BufferSize;
> - break;
> -
> - case EfiOpenBlockIo:
> - Status = gBS->HandleProtocol(File->EfiHandle, &gEfiDiskIoProtocolGuid, (VOID **)&DiskIo);
> - if (!EFI_ERROR(Status)) {
> - Status = DiskIo->ReadDisk(DiskIo, File->FsBlockIoMedia->MediaId, File->DiskOffset + File->CurrentPosition, *BufferSize, Buffer);
> - }
> - File->CurrentPosition += *BufferSize;
> - break;
> -
> - case EfiOpenTftp:
> - // Cache the file if it hasn't been cached yet.
> - if (File->IsBufferValid == FALSE) {
> - Status = CacheTftpFile (File);
> - if (EFI_ERROR (Status)) {
> - return Status;
> - }
> - }
> -
> - // Copy out the requested data
> - CopyMem (Buffer, File->Buffer + File->CurrentPosition, *BufferSize);
> - File->CurrentPosition += *BufferSize;
> -
> - Status = EFI_SUCCESS;
> - break;
> -
> - default:
> - return EFI_INVALID_PARAMETER;
> - };
> -
> - return Status;
> -}
> -
> -
> -/**
> -Read the entire file into a buffer. This routine allocates the buffer and
> -returns it to the user full of the read data.
> -
> -This is very useful for load file where it's hard to know how big the buffer
> -must be.
> -
> -@param Stream Open File Handle
> -@param Buffer Pointer to buffer to return.
> -@param BufferSize Pointer to Size of buffer return..
> -
> -
> -@return EFI_SUCCESS Stream is not an Open File
> -@return EFI_END_OF_FILE Tried to read past the end of the file
> -@return EFI_INVALID_PARAMETER Stream is not an open file handle
> -@return EFI_BUFFER_TOO_SMALL Buffer is not big enough to do the read
> -@return "other" Error returned from device read
> -
> -**/
> -EFI_STATUS
> -EfiReadAllocatePool (
> - IN EFI_OPEN_FILE *File,
> - OUT VOID **Buffer,
> - OUT UINTN *BufferSize
> - )
> -{
> - if (!FileHandleValid (File)) {
> - return EFI_INVALID_PARAMETER;
> - }
> -
> - // Loadfile defers file size determination on Open so use tell to find it
> - EfiTell (File, NULL);
> -
> - *BufferSize = File->Size;
> - *Buffer = AllocatePool (*BufferSize);
> - if (*Buffer == NULL) {
> - return EFI_NOT_FOUND;
> - }
> -
> - return EfiRead (File, *Buffer, BufferSize);
> -}
> -
> -
> -/**
> -Write data back to the file. For TFTP case you must write the entire file.
> -
> -@param Stream Open File Handle
> -@param Buffer Pointer to buffer to return.
> -@param BufferSize Pointer to Size of buffer return..
> -
> -
> -@return EFI_SUCCESS Stream is not an Open File
> -@return EFI_END_OF_FILE Tried to read past the end of the file
> -@return EFI_INVALID_PARAMETER Stream is not an open file handle
> -@return EFI_BUFFER_TOO_SMALL Buffer is not big enough to do the read
> -@return "other" Error returned from device write
> -
> -**/
> -EFI_STATUS
> -EfiWrite (
> - IN EFI_OPEN_FILE *File,
> - OUT VOID *Buffer,
> - OUT UINTN *BufferSize
> - )
> -{
> - EFI_STATUS Status;
> - EFI_FV_WRITE_FILE_DATA FileData;
> - EFI_DISK_IO_PROTOCOL *DiskIo;
> -
> - if (!FileHandleValid (File)) {
> - return EFI_INVALID_PARAMETER;
> - }
> -
> - switch (File->Type) {
> - case EfiOpenMemoryBuffer:
> - if ((File->CurrentPosition + *BufferSize) > File->MaxPosition) {
> - return EFI_END_OF_FILE;
> - }
> -
> - CopyMem (File->Buffer + File->CurrentPosition, Buffer, *BufferSize);
> - File->CurrentPosition += *BufferSize;
> - Status = EFI_SUCCESS;
> -
> - case EfiOpenLoadFile:
> - // LoadFile device is read only be definition
> - Status = EFI_UNSUPPORTED;
> -
> - case EfiOpenFirmwareVolume:
> - if (File->FvSectionType != EFI_SECTION_ALL) {
> - // Writes not support to a specific section. You have to update entire file
> - return EFI_UNSUPPORTED;
> - }
> -
> - FileData.NameGuid = &(File->FvNameGuid);
> - FileData.Type = File->FvType;
> - FileData.FileAttributes = File->FvAttributes;
> - FileData.Buffer = Buffer;
> - FileData.BufferSize = (UINT32)*BufferSize;
> - Status = File->Fv->WriteFile (File->Fv, 1, EFI_FV_UNRELIABLE_WRITE, &FileData);
> - break;
> -
> - case EfiOpenFileSystem:
> - Status = File->FsFileHandle->Write (File->FsFileHandle, BufferSize, Buffer);
> - File->CurrentPosition += *BufferSize;
> - break;
> -
> - case EfiOpenBlockIo:
> - if ((File->CurrentPosition + *BufferSize) > File->MaxPosition) {
> - return EFI_END_OF_FILE;
> - }
> -
> - Status = gBS->HandleProtocol (File->EfiHandle, &gEfiDiskIoProtocolGuid, (VOID **)&DiskIo);
> - if (!EFI_ERROR(Status)) {
> - Status = DiskIo->WriteDisk (DiskIo, File->FsBlockIoMedia->MediaId, File->DiskOffset + File->CurrentPosition, *BufferSize, Buffer);
> - }
> - File->CurrentPosition += *BufferSize;
> - break;
> -
> - case EfiOpenTftp:
> - // Cache the file if it hasn't been cached yet.
> - if (File->IsBufferValid == FALSE) {
> - Status = CacheTftpFile(File);
> - if (EFI_ERROR(Status)) {
> - return Status;
> - }
> - }
> -
> - // Don't overwrite the buffer
> - if ((File->CurrentPosition + *BufferSize) > File->MaxPosition) {
> - UINT8 *TempBuffer;
> -
> - TempBuffer = File->Buffer;
> -
> - File->Buffer = AllocatePool ((UINTN)(File->CurrentPosition + *BufferSize));
> - if (File->Buffer == NULL) {
> - return EFI_OUT_OF_RESOURCES;
> - }
> -
> - CopyMem (File->Buffer, TempBuffer, File->Size);
> -
> - FreePool (TempBuffer);
> -
> - File->Size = (UINTN)(File->CurrentPosition + *BufferSize);
> - File->MaxPosition = (UINT64)File->Size;
> - }
> -
> - // Copy in the requested data
> - CopyMem (File->Buffer + File->CurrentPosition, Buffer, *BufferSize);
> - File->CurrentPosition += *BufferSize;
> -
> - // Mark the file dirty
> - File->IsDirty = TRUE;
> -
> - Status = EFI_SUCCESS;
> - break;
> -
> - default:
> - Status = EFI_INVALID_PARAMETER;
> - };
> -
> - return Status;
> -}
> -
> -
> -/**
> -Given Cwd expand Path to remove .. and replace them with real
> -directory names.
> -
> -@param Cwd Current Working Directory
> -@param Path Path to expand
> -
> -@return NULL Cwd or Path are not valid
> -@return 'other' Path with .. expanded
> -
> -**/
> -CHAR8 *
> -ExpandPath (
> - IN CHAR8 *Cwd,
> - IN CHAR8 *Path
> - )
> -{
> - CHAR8 *NewPath;
> - CHAR8 *Work, *Start, *End;
> - UINTN StrLen, AllocLen;
> - INTN i;
> -
> - if (Cwd == NULL || Path == NULL) {
> - return NULL;
> - }
> -
> - StrLen = AsciiStrSize (Cwd);
> - if (StrLen <= 2) {
> - // Smallest valid path is 1 char and a null
> - return NULL;
> - }
> -
> - StrLen = AsciiStrSize (Path);
> - AllocLen = AsciiStrSize (Cwd) + StrLen + 1;
> - NewPath = AllocatePool (AllocLen);
> - if (NewPath == NULL) {
> - return NULL;
> - }
> - AsciiStrCpyS (NewPath, AllocLen, Cwd);
> -
> - End = Path + StrLen;
> - for (Start = Path ;;) {
> - Work = AsciiStrStr (Start, "..") ;
> - if (Work == NULL) {
> - // Remaining part of Path contains no more ..
> - break;
> - }
> -
> - // append path prior to ..
> - AsciiStrnCatS (NewPath, AllocLen, Start, Work - Start);
> - StrLen = AsciiStrLen (NewPath);
> - for (i = StrLen; i >= 0; i--) {
> - if (NewPath[i] == ':') {
> - // too many ..
> - return NULL;
> - }
> - if (NewPath[i] == '/' || NewPath[i] == '\\') {
> - if ((i > 0) && (NewPath[i-1] == ':')) {
> - // leave the / before a :
> - NewPath[i+1] = '\0';
> - } else {
> - // replace / will Null to remove trailing file/dir reference
> - NewPath[i] = '\0';
> - }
> - break;
> - }
> - }
> -
> - Start = Work + 3;
> - }
> -
> - // Handle the path that remains after the ..
> - AsciiStrnCatS (NewPath, AllocLen, Start, End - Start);
> -
> - return NewPath;
> -}
> -
> -
> -/**
> -Set the Current Working Directory (CWD). If a call is made to EfiOpen () and
> -the path does not contain a device name, The CWD is prepended to the path.
> -
> -@param Cwd Current Working Directory to set
> -
> -
> -@return EFI_SUCCESS CWD is set
> -@return EFI_INVALID_PARAMETER Cwd is not a valid device:path
> -
> -**/
> -EFI_STATUS
> -EfiSetCwd (
> - IN CHAR8 *Cwd
> - )
> -{
> - EFI_OPEN_FILE *File;
> - UINTN Len, AllocLen;
> - CHAR8 *Path;
> -
> - if (Cwd == NULL) {
> - return EFI_INVALID_PARAMETER;
> - }
> -
> - if (AsciiStrCmp (Cwd, ".") == 0) {
> - // cd . is a no-op
> - return EFI_SUCCESS;
> - }
> -
> - Path = Cwd;
> - if (AsciiStrStr (Cwd, "..") != NULL) {
> - if (gCwd == NULL) {
> - // no parent
> - return EFI_SUCCESS;
> - }
> -
> - Len = AsciiStrLen (gCwd);
> - if ((gCwd[Len-2] == ':') && ((gCwd[Len-1] == '/') || (gCwd[Len-1] == '\\'))) {
> - // parent is device so nothing to do
> - return EFI_SUCCESS;
> - }
> -
> - // Expand .. in Cwd, given we know current working directory
> - Path = ExpandPath (gCwd, Cwd);
> - if (Path == NULL) {
> - return EFI_NOT_FOUND;
> - }
> - }
> -
> - File = EfiOpen (Path, EFI_FILE_MODE_READ, 0);
> - if (File == NULL) {
> - return EFI_INVALID_PARAMETER;
> - }
> -
> - if (gCwd != NULL) {
> - FreePool (gCwd);
> - }
> -
> - // Use the info returned from EfiOpen as it can add in CWD if needed. So Cwd could be
> - // relative to the current gCwd or not.
> - AllocLen = AsciiStrSize (File->DeviceName) + AsciiStrSize (File->FileName) + 10;
> - gCwd = AllocatePool (AllocLen);
> - if (gCwd == NULL) {
> - return EFI_INVALID_PARAMETER;
> - }
> -
> - AsciiStrCpyS (gCwd, AllocLen, File->DeviceName);
> - if (File->FileName == NULL) {
> - AsciiStrCatS (gCwd, AllocLen, ":\\");
> - } else {
> - AsciiStrCatS (gCwd, AllocLen, ":");
> - AsciiStrCatS (gCwd, AllocLen, File->FileName);
> - }
> -
> -
> - EfiClose (File);
> - if (Path != Cwd) {
> - FreePool (Path);
> - }
> - return EFI_SUCCESS;
> -}
> -
> -
> -/**
> -Set the Current Working Directory (CWD). If a call is made to EfiOpen () and
> -the path does not contain a device name, The CWD is prepended to the path.
> -The CWD buffer is only valid until a new call is made to EfiSetCwd(). After
> -a call to EfiSetCwd() it is not legal to use the pointer returned by
> -this function.
> -
> -@param Cwd Current Working Directory
> -
> -
> -@return "" No CWD set
> -@return 'other' Returns buffer that contains CWD.
> -
> -**/
> -CHAR8 *
> -EfiGetCwd (
> - VOID
> - )
> -{
> - if (gCwd == NULL) {
> - return "";
> - }
> - return gCwd;
> -}
> -
> -
> diff --git a/EmbeddedPkg/Library/EfiFileLib/EfiFileLib.inf b/EmbeddedPkg/Library/EfiFileLib/EfiFileLib.inf
> deleted file mode 100644
> index b8cb255268a5..000000000000
> --- a/EmbeddedPkg/Library/EfiFileLib/EfiFileLib.inf
> +++ /dev/null
> @@ -1,64 +0,0 @@
> -#/** @file
> -# Component description file for the entry point to a EFIDXE Drivers
> -#
> -# Library to abstract Framework extensions that conflict with UEFI 2.0 Specification
> -# Copyright (c) 2007 - 2007, Intel Corporation. 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
> -# http://opensource.org/licenses/bsd-license.php
> -# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
> -# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
> -#
> -#
> -#**/
> -
> -[Defines]
> - INF_VERSION = 0x00010005
> - BASE_NAME = EfiFileLib
> - FILE_GUID = d8c640db-73ba-48f5-a7ed-8e93c6012491
> - MODULE_TYPE = UEFI_DRIVER
> - VERSION_STRING = 1.0
> - LIBRARY_CLASS = EfiFileLib|DXE_DRIVER UEFI_APPLICATION UEFI_DRIVER
> -
> -
> -#
> -# The following information is for reference only and not required by the build tools.
> -#
> -# VALID_ARCHITECTURES = IA32 X64 IPF EBC
> -#
> -
> -[Sources.common]
> - EfiFileLib.c
> -
> -[Packages]
> - MdePkg/MdePkg.dec
> - MdeModulePkg/MdeModulePkg.dec
> - IntelFrameworkPkg/IntelFrameworkPkg.dec
> - EmbeddedPkg/EmbeddedPkg.dec
> -
> -[LibraryClasses]
> - BaseLib
> - MemoryAllocationLib
> - DevicePathLib
> - PrintLib
> - BaseMemoryLib
> - UefiLib
> - UefiBootServicesTableLib
> - UefiRuntimeServicesTableLib
> - DebugLib
> - EblNetworkLib
> -
> -[Protocols]
> - gEfiBlockIoProtocolGuid # PROTOCOL SOMETIMES_CONSUMED
> - gEfiDiskIoProtocolGuid # PROTOCOL SOMETIMES_CONSUMED
> - gEfiSimpleFileSystemProtocolGuid # PROTOCOL SOMETIMES_CONSUMED
> - gEfiFirmwareVolume2ProtocolGuid # PROTOCOL SOMETIMES_CONSUMED
> - gEfiLoadFileProtocolGuid # PROTOCOL SOMETIMES_CONSUMED
> - gEfiFirmwareVolumeBlockProtocolGuid # PROTOCOL SOMETIMES_CONSUMED
> -
> -[Guids]
> - gEfiFileInfoGuid
> - gEfiFileSystemInfoGuid
> - gZeroGuid
> diff --git a/Omap35xxPkg/Library/EblCmdLib/EblCmdLib.c b/Omap35xxPkg/Library/EblCmdLib/EblCmdLib.c
> deleted file mode 100644
> index 47161755de84..000000000000
> --- a/Omap35xxPkg/Library/EblCmdLib/EblCmdLib.c
> +++ /dev/null
> @@ -1,72 +0,0 @@
> -/** @file
> - Add custom commands for BeagleBoard development.
> -
> - Copyright (c) 2008 - 2009, Apple Inc. 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
> - http://opensource.org/licenses/bsd-license.php
> -
> - THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
> - WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
> -
> -**/
> -
> -#include <PiDxe.h>
> -#include <Library/ArmLib.h>
> -#include <Library/CacheMaintenanceLib.h>
> -#include <Library/EblCmdLib.h>
> -#include <Library/BaseLib.h>
> -#include <Library/DebugLib.h>
> -#include <Library/UefiBootServicesTableLib.h>
> -#include <Library/UefiRuntimeServicesTableLib.h>
> -#include <Library/MemoryAllocationLib.h>
> -#include <Library/UefiLib.h>
> -#include <Library/PcdLib.h>
> -#include <Library/EfiFileLib.h>
> -
> -
> -//PcdEmbeddedFdBaseAddress
> -
> -/**
> - Fill Me In
> -
> - Argv[0] - "%CommandName%"
> -
> - @param Argc Number of command arguments in Argv
> - @param Argv Array of strings that represent the parsed command line.
> - Argv[0] is the command name
> -
> - @return EFI_SUCCESS
> -
> -**/
> -EFI_STATUS
> -EblEdk2Cmd (
> - IN UINTN Argc,
> - IN CHAR8 **Argv
> - )
> -{
> - return EFI_SUCCESS;
> -}
> -
> -
> -GLOBAL_REMOVE_IF_UNREFERENCED const EBL_COMMAND_TABLE mLibCmdTemplate[] =
> -{
> - {
> - "edk2",
> - " filename ; Load FD into memory and boot from it",
> - NULL,
> - EblEdk2Cmd
> - }
> -};
> -
> -
> -VOID
> -EblInitializeExternalCmd (
> - VOID
> - )
> -{
> - EblAddCommands (mLibCmdTemplate, sizeof (mLibCmdTemplate)/sizeof (EBL_COMMAND_TABLE));
> - return;
> -}
> diff --git a/Omap35xxPkg/Library/EblCmdLib/EblCmdLib.inf b/Omap35xxPkg/Library/EblCmdLib/EblCmdLib.inf
> deleted file mode 100644
> index dd7a13cf6629..000000000000
> --- a/Omap35xxPkg/Library/EblCmdLib/EblCmdLib.inf
> +++ /dev/null
> @@ -1,48 +0,0 @@
> -#/** @file
> -# Component description file for the entry point to a EFIDXE Drivers
> -#
> -# Library to abstract Framework extensions that conflict with UEFI 2.0 Specification
> -# Copyright (c) 2007 - 2007, Intel Corporation. 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
> -# http://opensource.org/licenses/bsd-license.php
> -# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
> -# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
> -#
> -#
> -#**/
> -
> -[Defines]
> - INF_VERSION = 0x00010005
> - BASE_NAME = BeagleBoardEblCmdLib
> - FILE_GUID = ea62bdc3-1063-425f-8851-98cb47f213a8
> - MODULE_TYPE = UEFI_DRIVER
> - VERSION_STRING = 1.0
> - LIBRARY_CLASS = EblCmdLib|DXE_DRIVER UEFI_APPLICATION UEFI_DRIVER
> -
> -
> -#
> -# The following information is for reference only and not required by the build tools.
> -#
> -# VALID_ARCHITECTURES = IA32 X64 IPF EBC
> -#
> -
> -[Sources.common]
> - EblCmdLib.c
> -
> -[Packages]
> - MdePkg/MdePkg.dec
> - EmbeddedPkg/EmbeddedPkg.dec
> - ArmPkg/ArmPkg.dec
> -
> -[LibraryClasses]
> - BaseLib
> - DebugLib
> -
> -[Protocols]
> -
> -[Guids]
> -
> -[Pcd]
> diff --git a/Omap35xxPkg/Omap35xxPkg.dsc b/Omap35xxPkg/Omap35xxPkg.dsc
> index c5d9746104e6..f150d544ab16 100644
> --- a/Omap35xxPkg/Omap35xxPkg.dsc
> +++ b/Omap35xxPkg/Omap35xxPkg.dsc
> @@ -180,7 +180,6 @@ [Components.common]
>
> Omap35xxPkg/LcdGraphicsOutputDxe/LcdGraphicsOutputDxe.inf
> Omap35xxPkg/Library/DebugAgentTimerLib/DebugAgentTimerLib.inf
> - Omap35xxPkg/Library/EblCmdLib/EblCmdLib.inf
> Omap35xxPkg/Library/GdbSerialLib/GdbSerialLib.inf
> Omap35xxPkg/Library/RealTimeClockLib/RealTimeClockLib.inf
> Omap35xxPkg/Library/SerialPortLib/SerialPortLib.inf
> --
> 2.11.0
>
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH] EmbeddedPkg Omap35xxPkg: remove EBL and associated libraries
2017-11-24 17:21 ` Leif Lindholm
@ 2017-11-26 11:16 ` Ard Biesheuvel
0 siblings, 0 replies; 3+ messages in thread
From: Ard Biesheuvel @ 2017-11-26 11:16 UTC (permalink / raw)
To: Leif Lindholm; +Cc: edk2-devel@lists.01.org, afish@apple.com
On 24 November 2017 at 17:21, Leif Lindholm <leif.lindholm@linaro.org> wrote:
> On Wed, Nov 15, 2017 at 03:45:53PM +0000, Ard Biesheuvel wrote:
>> EBL is a deprecated, small memory footprint alternative for the
>> UEFI Shell that is no longer in use by any platforms in EDK2 or
>> in edk2-platforms. To avoid confusion, let's remove it from the
>> tree.
>
> Yes, please.
> If someone in the future wants to use this seriously (instead of just
> finding it easier to add commands to than the UEFI shell), we can
> easily resurrect it.
>
>> Contributed-under: TianoCore Contribution Agreement 1.1
>> Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
>
> Reviewed-by: Leif Lindholm <leif.lindholm@linaro.org>
>
Thanks. Pushed as 5604d269ab38
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2017-11-26 11:11 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2017-11-15 15:45 [PATCH] EmbeddedPkg Omap35xxPkg: remove EBL and associated libraries Ard Biesheuvel
2017-11-24 17:21 ` Leif Lindholm
2017-11-26 11:16 ` Ard Biesheuvel
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox