mirror of
https://github.com/acidanthera/audk.git
synced 2025-07-27 23:54:02 +02:00
EmbeddedPkg Omap35xxPkg: remove EBL and associated libraries
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> Reviewed-by: Leif Lindholm <leif.lindholm@linaro.org>
This commit is contained in:
parent
d780544d3d
commit
5604d269ab
@ -60,8 +60,6 @@
|
|||||||
PerformanceLib|MdePkg/Library/BasePerformanceLibNull/BasePerformanceLibNull.inf
|
PerformanceLib|MdePkg/Library/BasePerformanceLibNull/BasePerformanceLibNull.inf
|
||||||
PrintLib|MdePkg/Library/BasePrintLib/BasePrintLib.inf
|
PrintLib|MdePkg/Library/BasePrintLib/BasePrintLib.inf
|
||||||
|
|
||||||
EfiFileLib|EmbeddedPkg/Library/EfiFileLib/EfiFileLib.inf
|
|
||||||
|
|
||||||
# These libraries are used by the dynamic EFI Shell commands
|
# These libraries are used by the dynamic EFI Shell commands
|
||||||
ShellLib|ShellPkg/Library/UefiShellLib/UefiShellLib.inf
|
ShellLib|ShellPkg/Library/UefiShellLib/UefiShellLib.inf
|
||||||
FileHandleLib|MdePkg/Library/UefiFileHandleLib/UefiFileHandleLib.inf
|
FileHandleLib|MdePkg/Library/UefiFileHandleLib/UefiFileHandleLib.inf
|
||||||
@ -265,7 +263,6 @@
|
|||||||
[PcdsFixedAtBuild.common]
|
[PcdsFixedAtBuild.common]
|
||||||
gArmPlatformTokenSpaceGuid.PcdFirmwareVendor|"Beagle Board"
|
gArmPlatformTokenSpaceGuid.PcdFirmwareVendor|"Beagle Board"
|
||||||
|
|
||||||
gEmbeddedTokenSpaceGuid.PcdEmbeddedPrompt|"BeagleEdk2"
|
|
||||||
gEfiMdePkgTokenSpaceGuid.PcdMaximumUnicodeStringLength|1000000
|
gEfiMdePkgTokenSpaceGuid.PcdMaximumUnicodeStringLength|1000000
|
||||||
gEfiMdePkgTokenSpaceGuid.PcdMaximumAsciiStringLength|1000000
|
gEfiMdePkgTokenSpaceGuid.PcdMaximumAsciiStringLength|1000000
|
||||||
gEfiMdePkgTokenSpaceGuid.PcdMaximumLinkedListLength|1000000
|
gEfiMdePkgTokenSpaceGuid.PcdMaximumLinkedListLength|1000000
|
||||||
|
@ -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));
|
|
||||||
}
|
|
||||||
|
|
@ -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);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
@ -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));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -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
|
|
||||||
|
|
@ -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
|
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
@ -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));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -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));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -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));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -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 ();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
@ -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));
|
|
||||||
}
|
|
||||||
|
|
@ -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));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -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));
|
|
||||||
}
|
|
@ -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);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
@ -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;
|
|
||||||
}
|
|
||||||
|
|
@ -36,13 +36,9 @@
|
|||||||
Include # Root include for the package
|
Include # Root include for the package
|
||||||
|
|
||||||
[LibraryClasses.common]
|
[LibraryClasses.common]
|
||||||
EfiFileLib|Include/Library/EfiFileLib.h
|
|
||||||
PrePiLib|Include/Library/PrePiLib.h
|
PrePiLib|Include/Library/PrePiLib.h
|
||||||
RealTimeClockLib|Include/Library/RealTimeClockLib.h
|
RealTimeClockLib|Include/Library/RealTimeClockLib.h
|
||||||
EfiResetSystemLib|Include/Library/EfiResetSystemLib.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
|
GdbSerialLib|Include/Library/GdbSerialLib.h
|
||||||
DebugAgentTimerLib|Include/Library/DebugAgentTimerLib.h
|
DebugAgentTimerLib|Include/Library/DebugAgentTimerLib.h
|
||||||
NorFlashInfoLib|Include/Library/NorFlashInfoLib.h
|
NorFlashInfoLib|Include/Library/NorFlashInfoLib.h
|
||||||
@ -75,7 +71,6 @@
|
|||||||
gHardwareInterruptProtocolGuid = { 0x2890B3EA, 0x053D, 0x1643, { 0xAD, 0x0C, 0xD6, 0x48, 0x08, 0xDA, 0x3F, 0xF1 } }
|
gHardwareInterruptProtocolGuid = { 0x2890B3EA, 0x053D, 0x1643, { 0xAD, 0x0C, 0xD6, 0x48, 0x08, 0xDA, 0x3F, 0xF1 } }
|
||||||
gHardwareInterrupt2ProtocolGuid = { 0x32898322, 0x2da1, 0x474a, { 0xba, 0xaa, 0xf3, 0xf7, 0xcf, 0x56, 0x94, 0x70 } }
|
gHardwareInterrupt2ProtocolGuid = { 0x32898322, 0x2da1, 0x474a, { 0xba, 0xaa, 0xf3, 0xf7, 0xcf, 0x56, 0x94, 0x70 } }
|
||||||
gEfiDebugSupportPeriodicCallbackProtocolGuid = { 0x9546e07c, 0x2cbb, 0x4c88, { 0x98, 0x6c, 0xcd, 0x34, 0x10, 0x86, 0xf0, 0x44 } }
|
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 } }
|
gEmbeddedDeviceGuid = { 0xbf4b9d10, 0x13ec, 0x43dd, { 0x88, 0x80, 0xe9, 0xb, 0x71, 0x8f, 0x27, 0xde } }
|
||||||
gEmbeddedExternalDeviceProtocolGuid = { 0x735F8C64, 0xD696, 0x44D0, { 0xBD, 0xF2, 0x44, 0x7F, 0xD0, 0x5A, 0x54, 0x06 }}
|
gEmbeddedExternalDeviceProtocolGuid = { 0x735F8C64, 0xD696, 0x44D0, { 0xBD, 0xF2, 0x44, 0x7F, 0xD0, 0x5A, 0x54, 0x06 }}
|
||||||
gEmbeddedGpioProtocolGuid = { 0x17a0a3d7, 0xc0a5, 0x4635, { 0xbb, 0xd5, 0x07, 0x21, 0x87, 0xdf, 0xe2, 0xee }}
|
gEmbeddedGpioProtocolGuid = { 0x17a0a3d7, 0xc0a5, 0x4635, { 0xbb, 0xd5, 0x07, 0x21, 0x87, 0xdf, 0xe2, 0xee }}
|
||||||
@ -115,7 +110,6 @@
|
|||||||
gEmbeddedTokenSpaceGuid.PcdEmbeddedAutomaticBootCommand|L""|VOID*|0x00000007
|
gEmbeddedTokenSpaceGuid.PcdEmbeddedAutomaticBootCommand|L""|VOID*|0x00000007
|
||||||
gEmbeddedTokenSpaceGuid.PcdEmbeddedDefaultTextColor|0x07|UINT32|0x00000008
|
gEmbeddedTokenSpaceGuid.PcdEmbeddedDefaultTextColor|0x07|UINT32|0x00000008
|
||||||
gEmbeddedTokenSpaceGuid.PcdEmbeddedMemVariableStoreSize|0x10000|UINT32|0x00000009
|
gEmbeddedTokenSpaceGuid.PcdEmbeddedMemVariableStoreSize|0x10000|UINT32|0x00000009
|
||||||
gEmbeddedTokenSpaceGuid.PcdEmbeddedPrompt|"Ebl"|VOID*|0x00000034
|
|
||||||
|
|
||||||
gEmbeddedTokenSpaceGuid.PcdPrePiStackBase|0|UINT32|0x0000000b
|
gEmbeddedTokenSpaceGuid.PcdPrePiStackBase|0|UINT32|0x0000000b
|
||||||
gEmbeddedTokenSpaceGuid.PcdPrePiStackSize|131072|UINT32|0x0000000c
|
gEmbeddedTokenSpaceGuid.PcdPrePiStackSize|131072|UINT32|0x0000000c
|
||||||
|
@ -59,7 +59,6 @@
|
|||||||
PerformanceLib|MdePkg/Library/BasePerformanceLibNull/BasePerformanceLibNull.inf
|
PerformanceLib|MdePkg/Library/BasePerformanceLibNull/BasePerformanceLibNull.inf
|
||||||
PrintLib|MdePkg/Library/BasePrintLib/BasePrintLib.inf
|
PrintLib|MdePkg/Library/BasePrintLib/BasePrintLib.inf
|
||||||
UefiDecompressLib|MdePkg/Library/BaseUefiDecompressLib/BaseUefiDecompressLib.inf
|
UefiDecompressLib|MdePkg/Library/BaseUefiDecompressLib/BaseUefiDecompressLib.inf
|
||||||
EfiFileLib|EmbeddedPkg/Library/EfiFileLib/EfiFileLib.inf
|
|
||||||
|
|
||||||
ReportStatusCodeLib|MdeModulePkg/Library/PeiDxeDebugLibReportStatusCode/PeiDxeDebugLibReportStatusCode.inf
|
ReportStatusCodeLib|MdeModulePkg/Library/PeiDxeDebugLibReportStatusCode/PeiDxeDebugLibReportStatusCode.inf
|
||||||
|
|
||||||
@ -94,9 +93,6 @@
|
|||||||
UefiApplicationEntryPoint|MdePkg/Library/UefiApplicationEntryPoint/UefiApplicationEntryPoint.inf
|
UefiApplicationEntryPoint|MdePkg/Library/UefiApplicationEntryPoint/UefiApplicationEntryPoint.inf
|
||||||
|
|
||||||
PcdLib|MdePkg/Library/BasePcdLibNull/BasePcdLibNull.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
|
AcpiLib|EmbeddedPkg/Library/AcpiLib/AcpiLib.inf
|
||||||
FdtLib|EmbeddedPkg/Library/FdtLib/FdtLib.inf
|
FdtLib|EmbeddedPkg/Library/FdtLib/FdtLib.inf
|
||||||
@ -241,9 +237,6 @@
|
|||||||
#
|
#
|
||||||
################################################################################
|
################################################################################
|
||||||
[Components.common]
|
[Components.common]
|
||||||
EmbeddedPkg/Library/EblAddExternalCommandLib/EblAddExternalCommandLib.inf
|
|
||||||
EmbeddedPkg/Library/EblCmdLibNull/EblCmdLibNull.inf
|
|
||||||
EmbeddedPkg/Library/EfiFileLib/EfiFileLib.inf
|
|
||||||
EmbeddedPkg/Library/GdbSerialDebugPortLib/GdbSerialDebugPortLib.inf
|
EmbeddedPkg/Library/GdbSerialDebugPortLib/GdbSerialDebugPortLib.inf
|
||||||
EmbeddedPkg/Library/GdbSerialLib/GdbSerialLib.inf
|
EmbeddedPkg/Library/GdbSerialLib/GdbSerialLib.inf
|
||||||
EmbeddedPkg/Library/PrePiExtractGuidedSectionLib/PrePiExtractGuidedSectionLib.inf
|
EmbeddedPkg/Library/PrePiExtractGuidedSectionLib/PrePiExtractGuidedSectionLib.inf
|
||||||
@ -255,8 +248,6 @@
|
|||||||
EmbeddedPkg/Library/NonCoherentDmaLib/NonCoherentDmaLib.inf
|
EmbeddedPkg/Library/NonCoherentDmaLib/NonCoherentDmaLib.inf
|
||||||
EmbeddedPkg/Library/DxeDtPlatformDtbLoaderLibDefault/DxeDtPlatformDtbLoaderLibDefault.inf
|
EmbeddedPkg/Library/DxeDtPlatformDtbLoaderLibDefault/DxeDtPlatformDtbLoaderLibDefault.inf
|
||||||
|
|
||||||
EmbeddedPkg/Ebl/Ebl.inf
|
|
||||||
#### EmbeddedPkg/EblExternCmd/EblExternCmd.inf
|
|
||||||
EmbeddedPkg/EmbeddedMonotonicCounter/EmbeddedMonotonicCounter.inf
|
EmbeddedPkg/EmbeddedMonotonicCounter/EmbeddedMonotonicCounter.inf
|
||||||
EmbeddedPkg/RealTimeClockRuntimeDxe/RealTimeClockRuntimeDxe.inf
|
EmbeddedPkg/RealTimeClockRuntimeDxe/RealTimeClockRuntimeDxe.inf
|
||||||
EmbeddedPkg/ResetRuntimeDxe/ResetRuntimeDxe.inf
|
EmbeddedPkg/ResetRuntimeDxe/ResetRuntimeDxe.inf
|
||||||
@ -275,7 +266,6 @@
|
|||||||
EmbeddedPkg/Library/AcpiLib/AcpiLib.inf
|
EmbeddedPkg/Library/AcpiLib/AcpiLib.inf
|
||||||
EmbeddedPkg/Library/DebugAgentTimerLibNull/DebugAgentTimerLibNull.inf
|
EmbeddedPkg/Library/DebugAgentTimerLibNull/DebugAgentTimerLibNull.inf
|
||||||
EmbeddedPkg/Library/DxeHobPeCoffLib/DxeHobPeCoffLib.inf
|
EmbeddedPkg/Library/DxeHobPeCoffLib/DxeHobPeCoffLib.inf
|
||||||
EmbeddedPkg/Library/EblNetworkLib/EblNetworkLib.inf
|
|
||||||
EmbeddedPkg/Library/FdtLib/FdtLib.inf
|
EmbeddedPkg/Library/FdtLib/FdtLib.inf
|
||||||
EmbeddedPkg/Library/GdbDebugAgent/GdbDebugAgent.inf
|
EmbeddedPkg/Library/GdbDebugAgent/GdbDebugAgent.inf
|
||||||
EmbeddedPkg/Library/PrePiHobLib/PrePiHobLib.inf
|
EmbeddedPkg/Library/PrePiHobLib/PrePiHobLib.inf
|
||||||
|
@ -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
|
|
||||||
}
|
|
@ -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
|
|
||||||
|
|
@ -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
|
|
||||||
|
|
@ -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
|
|
||||||
|
|
@ -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
|
|
||||||
|
|
||||||
|
|
@ -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;
|
|
||||||
}
|
|
||||||
|
|
@ -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]
|
|
@ -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;
|
|
||||||
}
|
|
@ -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]
|
|
@ -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;
|
|
||||||
}
|
|
||||||
|
|
@ -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
|
|
File diff suppressed because it is too large
Load Diff
@ -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
|
|
@ -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;
|
|
||||||
}
|
|
@ -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]
|
|
@ -180,7 +180,6 @@
|
|||||||
|
|
||||||
Omap35xxPkg/LcdGraphicsOutputDxe/LcdGraphicsOutputDxe.inf
|
Omap35xxPkg/LcdGraphicsOutputDxe/LcdGraphicsOutputDxe.inf
|
||||||
Omap35xxPkg/Library/DebugAgentTimerLib/DebugAgentTimerLib.inf
|
Omap35xxPkg/Library/DebugAgentTimerLib/DebugAgentTimerLib.inf
|
||||||
Omap35xxPkg/Library/EblCmdLib/EblCmdLib.inf
|
|
||||||
Omap35xxPkg/Library/GdbSerialLib/GdbSerialLib.inf
|
Omap35xxPkg/Library/GdbSerialLib/GdbSerialLib.inf
|
||||||
Omap35xxPkg/Library/RealTimeClockLib/RealTimeClockLib.inf
|
Omap35xxPkg/Library/RealTimeClockLib/RealTimeClockLib.inf
|
||||||
Omap35xxPkg/Library/SerialPortLib/SerialPortLib.inf
|
Omap35xxPkg/Library/SerialPortLib/SerialPortLib.inf
|
||||||
|
Loading…
x
Reference in New Issue
Block a user