Message ID | 20171115154553.24275-1-ard.biesheuvel@linaro.org |
---|---|
State | Accepted |
Commit | 5604d269ab384543c6459c825c3c8c5eb71c435b |
Headers | show |
Series | [edk2] EmbeddedPkg Omap35xxPkg: remove EBL and associated libraries | expand |
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 > _______________________________________________ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel
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 _______________________________________________ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel
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
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(-) -- 2.11.0 _______________________________________________ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel