+++ /dev/null
-/** @file\r
- Add external EblCmd Lib\r
-\r
- Copyright (c) 2007, Intel Corporation. All rights reserved.<BR>\r
- Portions copyright (c) 2008 - 2009, Apple Inc. All rights reserved.<BR>\r
-\r
- This program and the accompanying materials\r
- are licensed and made available under the terms and conditions of the BSD License\r
- which accompanies this distribution. The full text of the license may be found at\r
- http://opensource.org/licenses/bsd-license.php\r
-\r
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
-\r
-\r
-**/\r
-\r
-#include <Uefi.h>\r
-#include <Library/UefiLib.h>\r
-#include <Library/UefiBootServicesTableLib.h>\r
-#include <Library/EblAddExternalCommandLib.h>\r
-#include <Protocol/EblAddCommand.h>\r
-\r
-STATIC BOOLEAN gInstalledCommand = FALSE;\r
-STATIC EFI_EVENT mEblCommandRegistration = NULL;\r
-\r
-STATIC const EBL_COMMAND_TABLE *mAddExternalCmdLibTemplate = NULL;\r
-STATIC UINTN mAddExternalCmdLibTemplateSize = 0;\r
-EBL_ADD_COMMAND_PROTOCOL *gEblExternalCommand = NULL;\r
-\r
-\r
-/**\r
- Return a keypress or optionally timeout if a timeout value was passed in.\r
- An optional callback function is called every second when waiting for a\r
- timeout.\r
-\r
- @param Key EFI Key information returned\r
- @param TimeoutInSec Number of seconds to wait to timeout\r
- @param CallBack Callback called every second during the timeout wait\r
-\r
- @return EFI_SUCCESS Key was returned\r
- @return EFI_TIMEOUT If the TimoutInSec expired\r
-\r
-**/\r
-EFI_STATUS\r
-EFIAPI\r
-EblGetCharKey (\r
- IN OUT EFI_INPUT_KEY *Key,\r
- IN UINTN TimeoutInSec,\r
- IN EBL_GET_CHAR_CALL_BACK CallBack OPTIONAL\r
- )\r
-{\r
- if (gEblExternalCommand != NULL) {\r
- return gEblExternalCommand->EblGetCharKey (Key, TimeoutInSec, CallBack);\r
- }\r
- return EFI_TIMEOUT;\r
-}\r
-\r
-\r
-/**\r
- This routine is used prevent command output data from scrolling off the end\r
- of the screen. The global gPageBreak is used to turn on or off this feature.\r
- If the CurrentRow is near the end of the screen pause and print out a prompt\r
- If the use hits Q to quit return TRUE else for any other key return FALSE.\r
- PrefixNewline is used to figure out if a newline is needed before the prompt\r
- string. This depends on the last print done before calling this function.\r
- CurrentRow is updated by one on a call or set back to zero if a prompt is\r
- needed.\r
-\r
- @param CurrentRow Used to figure out if its the end of the page and updated\r
- @param PrefixNewline Did previous print issue a newline\r
-\r
- @return TRUE if Q was hit to quit, FALSE in all other cases.\r
-\r
-**/\r
-BOOLEAN\r
-EFIAPI\r
-EblAnyKeyToContinueQtoQuit (\r
- IN UINTN *CurrentRow,\r
- IN BOOLEAN PrefixNewline\r
- )\r
-{\r
- if (gEblExternalCommand != NULL) {\r
- return gEblExternalCommand->EblAnyKeyToContinueQtoQuit (CurrentRow, PrefixNewline);\r
- }\r
- return FALSE;\r
-}\r
-\r
-\r
-\r
-/**\r
- Update mFvbEntry. Add new entry, or update existing entry if Fvb protocol is\r
- reinstalled.\r
-\r
- @param Event The Event that is being processed\r
- @param Context Event Context\r
-\r
-**/\r
-VOID\r
-EFIAPI\r
-EblAddCommandNotificationEvent (\r
- IN EFI_EVENT Event,\r
- IN VOID *Context\r
- )\r
-{\r
- EFI_STATUS Status;\r
-\r
- if (!gInstalledCommand) {\r
- Status = gBS->LocateProtocol (&gEfiEblAddCommandProtocolGuid, NULL, (VOID **)&gEblExternalCommand);\r
- if (!EFI_ERROR (Status)) {\r
- gEblExternalCommand->AddCommands (mAddExternalCmdLibTemplate, mAddExternalCmdLibTemplateSize);\r
- gInstalledCommand = TRUE;\r
- }\r
- }\r
-}\r
-\r
-\r
-\r
-/**\r
- The user Entry Point for the driver. The user code starts with this function\r
- as the real entry point for the image goes into a library that calls this\r
- function.\r
-\r
- @param[in] ImageHandle The firmware allocated handle for the EFI image.\r
- @param[in] SystemTable A pointer to the EFI System Table.\r
-\r
- @retval EFI_SUCCESS The entry point is executed successfully.\r
- @retval other Some error occurs when executing this entry point.\r
-\r
-**/\r
-EFI_STATUS\r
-EFIAPI\r
-EblAddExternalCommands (\r
- IN const EBL_COMMAND_TABLE *EntryArray,\r
- IN UINTN ArrayCount\r
- )\r
-{\r
- if (mAddExternalCmdLibTemplate != NULL) {\r
- return EFI_ALREADY_STARTED;\r
- }\r
-\r
- mAddExternalCmdLibTemplate = EntryArray;\r
- mAddExternalCmdLibTemplateSize = ArrayCount;\r
-\r
- EfiCreateProtocolNotifyEvent (\r
- &gEfiEblAddCommandProtocolGuid,\r
- TPL_CALLBACK,\r
- EblAddCommandNotificationEvent,\r
- NULL,\r
- &mEblCommandRegistration\r
- );\r
-\r
- return EFI_SUCCESS;\r
-}\r
-\r