Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Bruce Cran <bruce@cran.org.uk> Reviewed-by: Qiu Shumin <shumin.qiu@intel.com> git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@17868 6f19259b-4bc3-4df7-8a09-765794883524
		
			
				
	
	
		
			976 lines
		
	
	
		
			33 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			976 lines
		
	
	
		
			33 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /** @file
 | |
|   Defines for EFI shell environment 2 ported to EDK II build environment. (no spec)
 | |
| 
 | |
|   Copyright (c) 2005 - 2010, 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.
 | |
| 
 | |
| **/
 | |
| 
 | |
| 
 | |
| #ifndef _SHELL_ENVIRONMENT_2_PROTOCOL_H_
 | |
| #define _SHELL_ENVIRONMENT_2_PROTOCOL_H_
 | |
| 
 | |
| #define DEFAULT_INIT_ROW    1
 | |
| #define DEFAULT_AUTO_LF     FALSE
 | |
| 
 | |
| /**
 | |
|   This function is a prototype for a function that dumps information on a protocol
 | |
|   to a given location.  The location is dependant on the implementation.  This is
 | |
|   used when programatically adding shell commands.
 | |
| 
 | |
|   @param[in] Handle                 The handle the protocol is on.
 | |
|   @param[in] Interface              The interface to the protocol.
 | |
| 
 | |
| **/
 | |
| typedef
 | |
| VOID
 | |
| (EFIAPI *SHELLENV_DUMP_PROTOCOL_INFO) (
 | |
|   IN EFI_HANDLE                   Handle,
 | |
|   IN VOID                         *Interface
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   This function is a prototype for each command internal to the EFI shell
 | |
|   implementation.  The specific command depends on the implementation.  This is
 | |
|   used when programatically adding shell commands.
 | |
| 
 | |
|   @param[in] ImageHandle        The handle to the binary shell.
 | |
|   @param[in] SystemTable        The pointer to the system table.
 | |
| 
 | |
|   @retval EFI_SUCCESS           The command completed.
 | |
|   @retval other                 An error occurred.  Any error is possible
 | |
|                                 depending on the implementation of the shell
 | |
|                                 command.
 | |
| 
 | |
| **/
 | |
| typedef
 | |
| EFI_STATUS
 | |
| (EFIAPI *SHELLENV_INTERNAL_COMMAND) (
 | |
|   IN EFI_HANDLE                   ImageHandle,
 | |
|   IN EFI_SYSTEM_TABLE             *SystemTable
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   This function is a prototype for one that gets a help string for a given command.
 | |
|   This is used when programatically adding shell commands.  Upon successful return
 | |
|   the memory allocated is up to the caller to free.
 | |
| 
 | |
|   @param[in, out] Str              Pointer to pointer to string to display for help.
 | |
| 
 | |
|   @retval EFI_SUCCESS             The help string is in the parameter Str.
 | |
| 
 | |
| **/
 | |
| typedef
 | |
| EFI_STATUS
 | |
| (EFIAPI *SHELLCMD_GET_LINE_HELP) (
 | |
|   IN OUT CHAR16                 **Str
 | |
|   );
 | |
| 
 | |
| /**
 | |
| Structure returned from functions that open multiple files.
 | |
| **/
 | |
| typedef struct {
 | |
|   UINT32                    Signature;            ///< SHELL_FILE_ARG_SIGNATURE.
 | |
|   LIST_ENTRY                Link;                 ///< Linked list helper.
 | |
|   EFI_STATUS                Status;               ///< File's status.
 | |
| 
 | |
|   EFI_FILE_HANDLE           Parent;               ///< What is the Parent file of this file.
 | |
|   UINT64                    OpenMode;             ///< How was the file opened.
 | |
|   CHAR16                    *ParentName;          ///< String representation of parent.
 | |
|   EFI_DEVICE_PATH_PROTOCOL  *ParentDevicePath;    ///< DevicePath for Parent.
 | |
| 
 | |
|   CHAR16                    *FullName;            ///< Path and file name for this file.
 | |
|   CHAR16                    *FileName;            ///< File name for this file.
 | |
| 
 | |
|   EFI_FILE_HANDLE           Handle;               ///< Handle to this file.
 | |
|   EFI_FILE_INFO             *Info;                ///< Pointer to file info for this file.
 | |
| } SHELL_FILE_ARG;
 | |
| 
 | |
| /// Signature for SHELL_FILE_ARG.
 | |
| #define SHELL_FILE_ARG_SIGNATURE  SIGNATURE_32 ('g', 'r', 'a', 'f')
 | |
| 
 | |
| /**
 | |
| GUID for the shell environment2 and shell environment.
 | |
| **/
 | |
| #define SHELL_ENVIRONMENT_PROTOCOL_GUID \
 | |
|   { \
 | |
|     0x47c7b221, 0xc42a, 0x11d2, {0x8e, 0x57, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b} \
 | |
|   }
 | |
| 
 | |
| /**
 | |
| GUID for the shell environment2 extension (main GUID above).
 | |
| **/
 | |
| #define EFI_SE_EXT_SIGNATURE_GUID \
 | |
|   { \
 | |
|     0xd2c18636, 0x40e5, 0x4eb5, {0xa3, 0x1b, 0x36, 0x69, 0x5f, 0xd4, 0x2c, 0x87} \
 | |
|   }
 | |
| 
 | |
| #define EFI_SHELL_MAJOR_VER 0x00000001 ///< Major version of the EFI_SHELL_ENVIRONMENT2.
 | |
| #define EFI_SHELL_MINOR_VER 0x00000000 ///< Minor version of the EFI_SHELL_ENVIRONMENT2.
 | |
| 
 | |
| /**
 | |
|   Execute a command line.
 | |
| 
 | |
|   This function will run the CommandLine.  This includes loading any required images,
 | |
|   parsing any requires scripts, and if DebugOutput is TRUE printing errors
 | |
|   encountered directly to the screen.
 | |
| 
 | |
|   @param[in] ParentImageHandle  Handle of the image executing this operation.
 | |
|   @param[in] CommandLine        The string command line to execute.
 | |
|   @param[in] DebugOutput        TRUE indicates that errors should be printed directly.
 | |
|                                 FALSE supresses error messages.
 | |
| 
 | |
|   @retval EFI_SUCCESS           The command line executed and completed.
 | |
|   @retval EFI_ABORTED           The operation aborted.
 | |
|   @retval EFI_INVALID_PARAMETER A parameter did not have a valid value.
 | |
|   @retval EFI_OUT_OF_RESOURCES  A required memory allocation failed.
 | |
| 
 | |
| @sa HandleProtocol
 | |
| **/
 | |
| typedef
 | |
| EFI_STATUS
 | |
| (EFIAPI *SHELLENV_EXECUTE) (
 | |
|   IN EFI_HANDLE   *ParentImageHandle,
 | |
|   IN CHAR16       *CommandLine,
 | |
|   IN BOOLEAN      DebugOutput
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   This function returns a shell environment variable value.
 | |
| 
 | |
|   @param[in] Name               The pointer to the string with the shell environment
 | |
|                                 variable name.
 | |
| 
 | |
|   @retval NULL                  The shell environment variable's value could not be found.
 | |
|   @retval !=NULL                The value of the shell environment variable Name.
 | |
| 
 | |
| **/
 | |
| typedef
 | |
| CHAR16 *
 | |
| (EFIAPI *SHELLENV_GET_ENV) (
 | |
|   IN CHAR16 *Name
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   This function returns a shell environment map value.
 | |
| 
 | |
|   @param[in] Name               The pointer to the string with the shell environment
 | |
|                                 map name.
 | |
| 
 | |
|   @retval NULL                  The shell environment map's value could not be found.
 | |
|   @retval !=NULL                The value of the shell environment map Name.
 | |
| 
 | |
| **/
 | |
| typedef
 | |
| CHAR16 *
 | |
| (EFIAPI *SHELLENV_GET_MAP) (
 | |
|   IN CHAR16 *Name
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   This function will add an internal command to the shell interface.
 | |
| 
 | |
|   This will allocate all required memory, put the new command on the command
 | |
|   list in the correct location.
 | |
| 
 | |
|   @param[in] Handler                The handler function to call when the command gets called.
 | |
|   @param[in] Cmd                    The command name.
 | |
|   @param[in] GetLineHelp            The function to call of type "get help" for this command.
 | |
| 
 | |
|   @retval EFI_SUCCESS           The command is now part of the command list.
 | |
|   @retval EFI_OUT_OF_RESOURCES  A memory allocation failed.
 | |
|   @sa SHELLENV_INTERNAL_COMMAND
 | |
|   @sa SHELLCMD_GET_LINE_HELP
 | |
| **/
 | |
| typedef
 | |
| EFI_STATUS
 | |
| (EFIAPI *SHELLENV_ADD_CMD) (
 | |
|   IN SHELLENV_INTERNAL_COMMAND    Handler,
 | |
|   IN CHAR16                       *Cmd,
 | |
|   IN SHELLCMD_GET_LINE_HELP       GetLineHelp
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Internal interface to add protocol handlers.
 | |
| 
 | |
|   This function is for internal shell use only.  This is how protocol handlers are added.
 | |
|   This will get the current protocol info and add the new info or update existing info
 | |
|   and then resave the info.
 | |
| 
 | |
|   @param[in] Protocol           The pointer to the protocol's GUID.
 | |
|   @param[in] DumpToken          The function pointer to dump token function or
 | |
|                                 NULL.
 | |
|   @param[in] DumpInfo           The function pointer to dump infomation function
 | |
|                                 or NULL.
 | |
|   @param[in] IdString           The English name of the protocol.
 | |
| **/
 | |
| typedef
 | |
| VOID
 | |
| (EFIAPI *SHELLENV_ADD_PROT) (
 | |
|   IN EFI_GUID                     *Protocol,
 | |
|   IN SHELLENV_DUMP_PROTOCOL_INFO  DumpToken OPTIONAL,
 | |
|   IN SHELLENV_DUMP_PROTOCOL_INFO  DumpInfo OPTIONAL,
 | |
|   IN CHAR16                       *IdString
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   This function finds a protocol handle by a GUID.
 | |
| 
 | |
|   This function will check for already known protocols by GUID and if one is
 | |
|   found it will return the name of that protocol.  If no name is found and
 | |
|   GenId is TRUE it will generate ths string.
 | |
| 
 | |
|   @param[in] Protocol          The GUID of the protocol to look for.
 | |
|   @param[in] GenId             Whether to generate a name string if it is not found.
 | |
| 
 | |
|   @return !NULL                The Name of the protocol.
 | |
|   @retval NULL                 The Name was not found, and GenId was not TRUE.
 | |
| **/
 | |
| typedef
 | |
| CHAR16*
 | |
| (EFIAPI *SHELLENV_GET_PROT) (
 | |
|   IN EFI_GUID *Protocol,
 | |
|   IN BOOLEAN GenId
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   This function returns a string array containing the current directory on
 | |
|   a given device.
 | |
| 
 | |
|   If DeviceName is specified, then return the current shell directory on that
 | |
|   device.  If DeviceName is NULL, then return the current directory on the
 | |
|   current device.  The caller us responsible to free the returned string when
 | |
|   no longer required.
 | |
| 
 | |
|   @param[in] DeviceName         The name of the device to get the current
 | |
|                                 directory on, or NULL for current device.
 | |
| 
 | |
|   @return String array with the current directory on the current or specified device.
 | |
| 
 | |
| **/
 | |
| typedef
 | |
| CHAR16*
 | |
| (EFIAPI *SHELLENV_CUR_DIR) (
 | |
|   IN CHAR16 *DeviceName OPTIONAL
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   This function will open a group of files that match the Arg path, including
 | |
|   support for wildcard characters ('?' and '*') in the Arg path.  If there are
 | |
|   any wildcard characters in the path this function will find any and all files
 | |
|   that match the wildcards.  It returns a double linked list based on the
 | |
|   LIST_ENTRY linked list structure.  Use this in conjunction with the
 | |
|   SHELL_FILE_ARG_SIGNATURE to get the SHELL_FILE_ARG structures that are returned.
 | |
|   The memory allocated by the callee for this list is freed by making a call to
 | |
|   SHELLENV_FREE_FILE_LIST.
 | |
| 
 | |
|   @param[in] Arg                 The pointer Path to files to open.
 | |
|   @param[in, out] ListHead       The pointer to the allocated and initialized list head
 | |
|                                  upon which to append all opened file structures.
 | |
| 
 | |
|   @retval EFI_SUCCESS           One or more files was opened and a struct of each file's
 | |
|                                 information was appended to ListHead.
 | |
|   @retval EFI_OUT_OF_RESOURCES  A memory allocation failed.
 | |
|   @retval EFI_NOT_FOUND         No matching files could be found.
 | |
|   @sa SHELLENV_FREE_FILE_LIST
 | |
| **/typedef
 | |
| EFI_STATUS
 | |
| (EFIAPI *SHELLENV_FILE_META_ARG) (
 | |
|   IN CHAR16               *Arg,
 | |
|   IN OUT LIST_ENTRY       *ListHead
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   This frees all of the nodes under the ListHead, but not ListHead itself.
 | |
| 
 | |
|   @param[in, out] ListHead       Pointer to list to free all nodes of.
 | |
| 
 | |
|   @retval EFI_SUCCESS           This function always returns EFI_SUCCESS.
 | |
| **/
 | |
| typedef
 | |
| EFI_STATUS
 | |
| (EFIAPI *SHELLENV_FREE_FILE_LIST) (
 | |
|   IN OUT LIST_ENTRY       *ListHead
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   This function creates a new instance of the ShellInterface protocol for use on
 | |
|   the ImageHandle.
 | |
| 
 | |
|   This function is for internal shell usage.  This will allocate and then populate
 | |
|   EFI_SHELL_INTERFACE protocol.  It is the caller's responsibility to free the
 | |
|   memory.
 | |
| 
 | |
|   @param[in] ImageHandle        The handle which will use the new ShellInterface
 | |
|                                 protocol.
 | |
| 
 | |
|   @return The newly allocated shell interface protocol.
 | |
| 
 | |
| **/
 | |
| typedef
 | |
| EFI_SHELL_INTERFACE*
 | |
| (EFIAPI *SHELLENV_NEW_SHELL) (
 | |
|   IN EFI_HANDLE ImageHandle
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   This function determines whether a script file is currently being processed.
 | |
| 
 | |
|   A script file (.nsh file) can contain a series of commands and this is useful to
 | |
|   know for some shell commands whether they are being run manually or as part of a
 | |
|   script.
 | |
| 
 | |
|   @retval TRUE                  A script file is being processed.
 | |
|   @retval FALSE                 A script file is not being processed.
 | |
| **/
 | |
| typedef
 | |
| BOOLEAN
 | |
| (EFIAPI *SHELLENV_BATCH_IS_ACTIVE) (
 | |
|   VOID
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   This is an internal shell function to free any and all allocated resources.
 | |
|   This should be called immediately prior to closing the shell.
 | |
| **/
 | |
| typedef
 | |
| VOID
 | |
| (EFIAPI *SHELLENV_FREE_RESOURCES) (
 | |
|   VOID
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   This function enables the page break mode.
 | |
| 
 | |
|   This mode causes the output to pause after each complete screen to enable a
 | |
|   user to more easily read it.  If AutoWrap is TRUE, then rows with too many
 | |
|   characters will be chopped and divided into 2 rows.  If FALSE, then rows with
 | |
|   too many characters may not be fully visible to the user on the screen.
 | |
| 
 | |
|   @param[in] StartRow               The row number to start this on.
 | |
|   @param[in] AutoWrap               Whether to auto wrap rows that are too long.
 | |
| **/
 | |
| typedef
 | |
| VOID
 | |
| (EFIAPI *SHELLENV_ENABLE_PAGE_BREAK) (
 | |
|   IN INT32      StartRow,
 | |
|   IN BOOLEAN    AutoWrap
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   This function disables the page break mode.
 | |
| 
 | |
|   Disabling this causes the output to print out exactly as coded, with no breaks
 | |
|   for readability.
 | |
| **/
 | |
| typedef
 | |
| VOID
 | |
| (EFIAPI *SHELLENV_DISABLE_PAGE_BREAK) (
 | |
|   VOID
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Get the status of the page break output mode.
 | |
| 
 | |
|   @retval FALSE                 Page break output mode is not enabled.
 | |
|   @retval TRUE                  Page break output mode is enabled.
 | |
| **/
 | |
| typedef
 | |
| BOOLEAN
 | |
| (EFIAPI *SHELLENV_GET_PAGE_BREAK) (
 | |
|   VOID
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   This function sets the keys to filter for for the console in.  The valid
 | |
|   values to set are:
 | |
| 
 | |
|   #define EFI_OUTPUT_SCROLL   0x00000001
 | |
|   #define EFI_OUTPUT_PAUSE    0x00000002
 | |
|   #define EFI_EXECUTION_BREAK 0x00000004
 | |
| 
 | |
|   @param[in] KeyFilter              The new key filter to use.
 | |
| **/
 | |
| typedef
 | |
| VOID
 | |
| (EFIAPI *SHELLENV_SET_KEY_FILTER) (
 | |
|   IN UINT32      KeyFilter
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   This function gets the keys to filter for for the console in.
 | |
| 
 | |
|   The valid values to get are:
 | |
|   #define EFI_OUTPUT_SCROLL   0x00000001
 | |
|   #define EFI_OUTPUT_PAUSE    0x00000002
 | |
|   #define EFI_EXECUTION_BREAK 0x00000004
 | |
| 
 | |
|   @retval The current filter mask.
 | |
| **/
 | |
| typedef
 | |
| UINT32
 | |
| (EFIAPI *SHELLENV_GET_KEY_FILTER) (
 | |
|   VOID
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   This function determines if the shell application should break.
 | |
| 
 | |
|   This is used to inform a shell application that a break condition has been
 | |
|   initiated.  Long loops should check this to prevent delays to the break.
 | |
| 
 | |
|   @retval TRUE                  A break has been signaled.  The application
 | |
|                                 should exit with EFI_ABORTED as soon as possible.
 | |
|   @retval FALSE                 Continue as normal.
 | |
| **/
 | |
| typedef
 | |
| BOOLEAN
 | |
| (EFIAPI *SHELLENV_GET_EXECUTION_BREAK) (
 | |
|   VOID
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   This is an internal shell function used to increment the shell nesting level.
 | |
| 
 | |
| **/
 | |
| typedef
 | |
| VOID
 | |
| (EFIAPI *SHELLENV_INCREMENT_SHELL_NESTING_LEVEL) (
 | |
|   VOID
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   This is an internal shell function used to decrement the shell nesting level.
 | |
| **/
 | |
| typedef
 | |
| VOID
 | |
| (EFIAPI *SHELLENV_DECREMENT_SHELL_NESTING_LEVEL) (
 | |
|   VOID
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   This function determines if the caller is running under the root shell.
 | |
| 
 | |
|   @retval TRUE                  The caller is running under the root shell.
 | |
|   @retval FALSE                 The caller is not running under the root shell.
 | |
| 
 | |
| **/
 | |
| typedef
 | |
| BOOLEAN
 | |
| (EFIAPI *SHELLENV_IS_ROOT_SHELL) (
 | |
|   VOID
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Close the console proxy to restore the original console.
 | |
| 
 | |
|   This is an internal shell function to handle shell cascading.  It restores the
 | |
|   original set of console protocols.
 | |
| 
 | |
|   @param[in] ConInHandle         The handle of ConIn.
 | |
|   @param[in, out] ConIn          The pointer to the location to return the pointer to
 | |
|                                  the original console input.
 | |
|   @param[in] ConOutHandle        The handle of ConOut
 | |
|   @param[in, out] ConOut         The pointer to the location to return the pointer to
 | |
|                                  the original console output.
 | |
| **/
 | |
| typedef
 | |
| VOID
 | |
| (EFIAPI *SHELLENV_CLOSE_CONSOLE_PROXY) (
 | |
|   IN     EFI_HANDLE                       ConInHandle,
 | |
|   IN OUT EFI_SIMPLE_TEXT_INPUT_PROTOCOL   **ConIn,
 | |
|   IN     EFI_HANDLE                       ConOutHandle,
 | |
|   IN OUT EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL  **ConOut
 | |
|   );
 | |
| 
 | |
| //
 | |
| // declarations of handle enumerator
 | |
| //
 | |
| /**
 | |
|   For ease of use the shell maps handle #'s to short numbers.
 | |
|   This is only done on request for various internal commands and the references
 | |
|   are immediately freed when the internal command completes.
 | |
| **/
 | |
| typedef
 | |
| VOID
 | |
| (EFIAPI *INIT_HANDLE_ENUMERATOR) (
 | |
|   VOID
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   This is an internal shell function to enumerate the handle database.
 | |
| 
 | |
|   This function gets the next handle in the handle database.  If no handles are
 | |
|   found, EFI_NOT_FOUND is returned.  If the previous Handle was the last handle,
 | |
|   it is set to NULL before returning.
 | |
| 
 | |
|   This must be called after INIT_HANDLE_ENUMERATOR and before CLOSE_HANDLE_ENUMERATOR.
 | |
| 
 | |
|   @param[in, out] Handle         The pointer to pointer to Handle.  It is set
 | |
|                                  on a sucessful return.
 | |
| 
 | |
|   @retval EFI_SUCCESS           The next handle in the handle database is *Handle.
 | |
|   @retval EFI_NOT_FOUND         There is not another handle.
 | |
| **/
 | |
| typedef
 | |
| EFI_STATUS
 | |
| (EFIAPI *NEXT_HANDLE) (
 | |
|   IN OUT EFI_HANDLE             **Handle
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   This is an internal shell function to enumerate the handle database.
 | |
| 
 | |
|   This function skips the next SkipNum handles in the handle database.  If there
 | |
|   are not enough handles left to skip that many EFI_ACCESS_DENIED is returned and
 | |
|   no skip is performed.
 | |
| 
 | |
|   This must be called after INIT_HANDLE_ENUMERATOR and before CLOSE_HANDLE_ENUMERATOR.
 | |
| 
 | |
|   @param[in] SkipNum            How many handles to skip
 | |
| 
 | |
|   @retval EFI_SUCCESS           The next handle in the handle database is *Handle
 | |
|   @retval EFI_ACCESS_DENIED     There are not SkipNum handles left in the database
 | |
| **/
 | |
| typedef
 | |
| EFI_STATUS
 | |
| (EFIAPI *SKIP_HANDLE) (
 | |
|   IN UINTN                   SkipNum
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   This is an internal shell function to enumerate the handle database.
 | |
| 
 | |
|   This function resets the the handle database so that NEXT_HANDLE and SKIP_HANDLE
 | |
|   will start from EnumIndex on the next call.
 | |
| 
 | |
|   This must be called after INIT_HANDLE_ENUMERATOR and before CLOSE_HANDLE_ENUMERATOR.
 | |
| 
 | |
|   @param[in] EnumIndex          Where to start.
 | |
| 
 | |
|   @return The number of handles either read out or skipped before this reset.
 | |
| **/
 | |
| typedef
 | |
| UINTN
 | |
| (EFIAPI *RESET_HANDLE_ENUMERATOR) (
 | |
|   IN UINTN                  EnumIndex
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   This is an internal shell function to enumerate the handle database.
 | |
| 
 | |
|   This must be called after INIT_HANDLE_ENUMERATOR.
 | |
| 
 | |
|   This function releases all memory and resources associated with the handle database.
 | |
|   After this no other handle enumerator functions except INIT_HANDLE_ENUMERATOR will
 | |
|   function properly.
 | |
| **/
 | |
| typedef
 | |
| VOID
 | |
| (EFIAPI *CLOSE_HANDLE_ENUMERATOR) (
 | |
|   VOID
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   This is an internal shell function to enumerate the handle database.
 | |
| 
 | |
|   This function returns the number of handles in the handle database.
 | |
| 
 | |
|   This must be called after INIT_HANDLE_ENUMERATOR and before CLOSE_HANDLE_ENUMERATOR.
 | |
| 
 | |
|   @return The number of handles in the handle database.
 | |
| **/
 | |
| typedef
 | |
| UINTN
 | |
| (EFIAPI *GET_NUM) (
 | |
|   VOID
 | |
|   );
 | |
| 
 | |
| /**
 | |
| Handle Enumerator structure.
 | |
| **/
 | |
| typedef struct {
 | |
|   INIT_HANDLE_ENUMERATOR  Init;   ///< The pointer to INIT_HANDLE_ENUMERATOR function.
 | |
|   NEXT_HANDLE             Next;   ///< The pointer to NEXT_HANDLE function.
 | |
|   SKIP_HANDLE             Skip;   ///< The pointer to SKIP_HANDLE function.
 | |
|   RESET_HANDLE_ENUMERATOR Reset;  ///< The pointer to RESET_HANDLE_ENUMERATOR function.
 | |
|   CLOSE_HANDLE_ENUMERATOR Close;  ///< The pointer to CLOSE_HANDLE_ENUMERATOR function.
 | |
|   GET_NUM                 GetNum; ///< The pointer to GET_NUM function.
 | |
| } HANDLE_ENUMERATOR;
 | |
| 
 | |
| /**
 | |
|   Signature for the PROTOCOL_INFO structure.
 | |
| **/
 | |
| #define PROTOCOL_INFO_SIGNATURE SIGNATURE_32 ('s', 'p', 'i', 'n')
 | |
| 
 | |
| /**
 | |
|   PROTOCOL_INFO structure for protocol enumerator functions.
 | |
| **/
 | |
| typedef struct {
 | |
|   UINTN                       Signature;   ///< PROTOCOL_INFO_SIGNATURE.
 | |
|   LIST_ENTRY                  Link;        ///< Standard linked list helper member.
 | |
|   //
 | |
|   // The parsing info for the protocol.
 | |
|   //
 | |
|   EFI_GUID                    ProtocolId;  ///< The GUID for the protocol.
 | |
|   CHAR16                      *IdString;   ///< The name of the protocol.
 | |
|   SHELLENV_DUMP_PROTOCOL_INFO DumpToken;   ///< The pointer to DumpToken function for the protocol.
 | |
|   SHELLENV_DUMP_PROTOCOL_INFO DumpInfo;    ///< The pointer to DumpInfo function for the protocol.
 | |
|   //
 | |
|   // Patabase info on which handles are supporting this protocol.
 | |
|   //
 | |
|   UINTN                       NoHandles;   ///< The number of handles producing this protocol.
 | |
|   EFI_HANDLE                  *Handles;    ///< The array of handles.
 | |
| 
 | |
| } PROTOCOL_INFO;
 | |
| 
 | |
| //
 | |
| // Declarations of protocol info enumerator.
 | |
| //
 | |
| /**
 | |
|   This is an internal shell function to initialize the protocol enumerator.
 | |
| 
 | |
|   This must be called before NEXT_PROTOCOL_INFO, SKIP_PROTOCOL_INFO,
 | |
|   RESET_PROTOCOL_INFO_ENUMERATOR, and CLOSE_PROTOCOL_INFO_ENUMERATOR are
 | |
|   called.
 | |
| **/
 | |
| typedef
 | |
| VOID
 | |
| (EFIAPI *INIT_PROTOCOL_INFO_ENUMERATOR) (
 | |
|   VOID
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   This function is an internal shell function for enumeration of protocols.
 | |
| 
 | |
|   This function returns the next protocol on the list.  If this is called
 | |
|   immediately after initialization, it will return the first protocol on the list.
 | |
|   If this is called immediately after reset, it will return the first protocol again.
 | |
| 
 | |
|   This cannot be called after CLOSE_PROTOCOL_INFO_ENUMERATOR, but it must be
 | |
|   called after INIT_PROTOCOL_INFO_ENUMERATOR.
 | |
| 
 | |
|   @param[in, out] ProtocolInfo   The pointer to pointer to protocol information structure.
 | |
| 
 | |
|   @retval EFI_SUCCESS           The next protocol's information was sucessfully returned.
 | |
|   @retval NULL                  There are no more protocols.
 | |
| **/
 | |
| typedef
 | |
| EFI_STATUS
 | |
| (EFIAPI *NEXT_PROTOCOL_INFO) (
 | |
|   IN OUT PROTOCOL_INFO            **ProtocolInfo
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   This function is an internal shell function for enumeration of protocols.
 | |
| 
 | |
|   This cannot be called after CLOSE_PROTOCOL_INFO_ENUMERATOR, but it must be
 | |
|   called after INIT_PROTOCOL_INFO_ENUMERATOR.
 | |
| 
 | |
|   This function does nothing and always returns EFI_SUCCESS.
 | |
| 
 | |
|   @retval EFI_SUCCESS           Always returned (see above).
 | |
| **/
 | |
| typedef
 | |
| EFI_STATUS
 | |
| (EFIAPI *SKIP_PROTOCOL_INFO) (
 | |
|   IN UINTN                         SkipNum
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   This function is an internal shell function for enumeration of protocols.
 | |
| 
 | |
|   This cannot be called after CLOSE_PROTOCOL_INFO_ENUMERATOR, but it must be
 | |
|   called after INIT_PROTOCOL_INFO_ENUMERATOR.
 | |
| 
 | |
|   This function resets the list of protocols such that the next one in the
 | |
|   list is the begining of the list.
 | |
| **/
 | |
| typedef
 | |
| VOID
 | |
| (EFIAPI *RESET_PROTOCOL_INFO_ENUMERATOR) (
 | |
|   VOID
 | |
|   );
 | |
| 
 | |
| 
 | |
| /**
 | |
|   This function is an internal shell function for enumeration of protocols.
 | |
| 
 | |
|   This must be called after INIT_PROTOCOL_INFO_ENUMERATOR.  After this call
 | |
|   no protocol enumerator calls except INIT_PROTOCOL_INFO_ENUMERATOR may be made.
 | |
| 
 | |
|   This function frees any memory or resources associated with the protocol
 | |
|   enumerator.
 | |
| **/
 | |
| typedef
 | |
| VOID
 | |
| (EFIAPI *CLOSE_PROTOCOL_INFO_ENUMERATOR) (
 | |
|   VOID
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Protocol enumerator structure of function pointers.
 | |
| **/
 | |
| typedef struct {
 | |
|   INIT_PROTOCOL_INFO_ENUMERATOR   Init;   ///< The pointer to INIT_PROTOCOL_INFO_ENUMERATOR function.
 | |
|   NEXT_PROTOCOL_INFO              Next;   ///< The pointer to NEXT_PROTOCOL_INFO function.
 | |
|   SKIP_PROTOCOL_INFO              Skip;   ///< The pointer to SKIP_PROTOCOL_INFO function.
 | |
|   RESET_PROTOCOL_INFO_ENUMERATOR  Reset;  ///< The pointer to RESET_PROTOCOL_INFO_ENUMERATOR function.
 | |
|   CLOSE_PROTOCOL_INFO_ENUMERATOR  Close;  ///< The pointer to CLOSE_PROTOCOL_INFO_ENUMERATOR function.
 | |
| } PROTOCOL_INFO_ENUMERATOR;
 | |
| 
 | |
| /**
 | |
|   This function is used to retrieve a user-friendly display name for a handle.
 | |
| 
 | |
|   If UseComponentName is TRUE then the component name protocol for this device
 | |
|   or it's parent device (if required) will be used to obtain the name of the
 | |
|   device.  If UseDevicePath is TRUE it will get the human readable device path
 | |
|   and return that.  If both are TRUE it will try to use component name first
 | |
|   and device path if that fails.
 | |
| 
 | |
|   It will use either ComponentName or ComponentName2 protocol, depending on
 | |
|   what is present.
 | |
| 
 | |
|   This function will furthur verify whether the handle in question produced either
 | |
|   EFI_DRIVER_CONFIGRATION_PROTOCOL or EFI_DRIVER_CONFIGURATION2_PROTOCOL and also
 | |
|   whether the handle in question produced either EFI_DRIVER_DIAGNOSTICS_PROTOCOL or
 | |
|   EFI_DRIVER_DIAGNOSTICS2_PROTOCOL.
 | |
| 
 | |
|   Upon successful return, the memory for *BestDeviceName is up to the caller to free.
 | |
| 
 | |
|   @param[in] DeviceHandle            The device handle whose name is desired.
 | |
|   @param[in] UseComponentName        Whether to use the ComponentName protocol at all.
 | |
|   @param[in] UseDevicePath           Whether to use the DevicePath protocol at all.
 | |
|   @param[in] Language                The pointer to the language string to use.
 | |
|   @param[in, out] BestDeviceName     The pointer to pointer to string allocated with the name.
 | |
|   @param[out] ConfigurationStatus    The pointer to status for opening a Configuration protocol.
 | |
|   @param[out] DiagnosticsStatus      The pointer to status for opening a Diagnostics protocol.
 | |
|   @param[in] Display                 Whether to Print this out to default Print location.
 | |
|   @param[in] Indent                  How many characters to indent the printing.
 | |
| 
 | |
|   @retval EFI_SUCCESS           This function always returns EFI_SUCCESS.
 | |
| **/
 | |
| typedef
 | |
| EFI_STATUS
 | |
| (EFIAPI *GET_DEVICE_NAME) (
 | |
|   IN EFI_HANDLE  DeviceHandle,
 | |
|   IN BOOLEAN     UseComponentName,
 | |
|   IN BOOLEAN     UseDevicePath,
 | |
|   IN CHAR8       *Language,
 | |
|   IN OUT CHAR16  **BestDeviceName,
 | |
|   OUT EFI_STATUS *ConfigurationStatus,
 | |
|   OUT EFI_STATUS *DiagnosticsStatus,
 | |
|   IN BOOLEAN     Display,
 | |
|   IN UINTN       Indent
 | |
|   );
 | |
| 
 | |
| #define EFI_SHELL_COMPATIBLE_MODE_VER L"1.1.1" ///< The string for lowest version this shell supports.
 | |
| #define EFI_SHELL_ENHANCED_MODE_VER   L"1.1.2" ///< The string for highest version this shell supports.
 | |
| 
 | |
| /**
 | |
|   This function gets the shell mode as stored in the shell environment
 | |
|   "efishellmode".  It will not fail.
 | |
| 
 | |
|   @param[out] Mode              Returns a string representing one of the
 | |
|                                 2 supported modes of the shell.
 | |
| 
 | |
|   @retval EFI_SUCCESS           This function always returns success.
 | |
| **/
 | |
| typedef
 | |
| EFI_STATUS
 | |
| (EFIAPI *GET_SHELL_MODE) (
 | |
|   OUT CHAR16     **Mode
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Convert a file system style name to a device path.
 | |
| 
 | |
|   This function will convert a shell path name to a Device Path Protocol path.
 | |
|   This function will allocate any required memory for this operation and it
 | |
|   is the responsibility of the caller to free that memory when no longer required.
 | |
| 
 | |
|   If anything prevents the complete conversion free any allocated memory and
 | |
|   return NULL.
 | |
| 
 | |
|   @param[in] Path               The path to convert.
 | |
| 
 | |
|   @retval !NULL                 A pointer to the callee allocated Device Path.
 | |
|   @retval NULL                  The operation could not be completed.
 | |
| **/
 | |
| typedef
 | |
| EFI_DEVICE_PATH_PROTOCOL*
 | |
| (EFIAPI *SHELLENV_NAME_TO_PATH) (
 | |
|   IN CHAR16 *Path
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Converts a device path into a file system map name.
 | |
| 
 | |
|   If DevPath is NULL, then ASSERT.
 | |
| 
 | |
|   This function looks through the shell environment map for a map whose device
 | |
|   path matches the DevPath parameter.  If one is found the Name is returned via
 | |
|   Name parameter.  If sucessful the caller must free the memory allocated for
 | |
|   Name.
 | |
| 
 | |
|   This function will use the internal lock to prevent changes to the map during
 | |
|   the lookup operation.
 | |
| 
 | |
|   @param[in] DevPath                The device path to search for a name for.
 | |
|   @param[in] ConsistMapping         What state to verify map flag VAR_ID_CONSIST.
 | |
|   @param[out] Name                  On sucessful return the name of that device path.
 | |
| 
 | |
|   @retval EFI_SUCCESS           The DevPath was found and the name returned
 | |
|                                 in Name.
 | |
|   @retval EFI_OUT_OF_RESOURCES  A required memory allocation failed.
 | |
|   @retval EFI_UNSUPPORTED       The DevPath was not found in the map.
 | |
| **/
 | |
| typedef
 | |
| EFI_STATUS
 | |
| (EFIAPI *SHELLENV_GET_FS_NAME) (
 | |
|   IN EFI_DEVICE_PATH_PROTOCOL     * DevPath,
 | |
|   IN BOOLEAN                      ConsistMapping,
 | |
|   OUT CHAR16                      **Name
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   This function will open a group of files that match the Arg path, but will not
 | |
|   support the wildcard characters ('?' and '*') in the Arg path.  If there are
 | |
|   any wildcard characters in the path this function will return
 | |
|   EFI_INVALID_PARAMETER.  The return is a double linked list based on the
 | |
|   LIST_ENTRY linked list structure.  Use this in conjunction with the
 | |
|   SHELL_FILE_ARG_SIGNATURE to get the SHELL_FILE_ARG structures that are returned.
 | |
|   The memory allocated by the callee for this list is freed by making a call to
 | |
|   SHELLENV_FREE_FILE_LIST.
 | |
| 
 | |
|   @param[in] Arg                 The pointer to the path of the files to be opened.
 | |
|   @param[in, out] ListHead       The pointer to allocated and initialized list head
 | |
|                                  upon which to append all the opened file structures.
 | |
| 
 | |
|   @retval EFI_SUCCESS           One or more files was opened and a struct of each file's
 | |
|                                 information was appended to ListHead.
 | |
|   @retval EFI_OUT_OF_RESOURCES  A memory allocation failed.
 | |
|   @retval EFI_NOT_FOUND         No matching files could be found.
 | |
|   @sa SHELLENV_FREE_FILE_LIST
 | |
| **/
 | |
| typedef
 | |
| EFI_STATUS
 | |
| (EFIAPI *SHELLENV_FILE_META_ARG_NO_WILDCARD) (
 | |
|   IN CHAR16               *Arg,
 | |
|   IN OUT LIST_ENTRY       *ListHead
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   This function removes duplicate file listings from lists.
 | |
| 
 | |
|   This is a function for use with SHELLENV_FILE_META_ARG_NO_WILDCARD and
 | |
|   SHELLENV_FILE_META_ARG.  This function will verify that there are no duplicate
 | |
|   files in the list of returned files.  Any file listed twice will have one of its
 | |
|   instances removed.
 | |
| 
 | |
|   @param[in] ListHead           The pointer to linked list head that was returned from
 | |
|                                 SHELLENV_FILE_META_ARG_NO_WILDCARD or
 | |
|                                 SHELLENV_FILE_META_ARG.
 | |
| 
 | |
|   @retval EFI_SUCCESS           This function always returns success.
 | |
| 
 | |
| **/
 | |
| typedef
 | |
| EFI_STATUS
 | |
| (EFIAPI *SHELLENV_DEL_DUP_FILE) (
 | |
|   IN LIST_ENTRY   * ListHead
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Converts a File System map name to a device path.
 | |
| 
 | |
|   If DevPath is NULL, then ASSERT().
 | |
| 
 | |
|   This function looks through the shell environment map for a map whose Name
 | |
|   matches the Name parameter.  If one is found, the device path pointer is
 | |
|   updated to point to that file systems device path.  The caller should not
 | |
|   free the memory from that device path.
 | |
| 
 | |
|   This function will use the internal lock to prevent changes to the map during
 | |
|   the lookup operation.
 | |
| 
 | |
|   @param[in] Name               The pointer to the NULL terminated UNICODE string of the
 | |
|                                 file system name.
 | |
|   @param[out] DevPath           The pointer to pointer to DevicePath.  Only valid on
 | |
|                                 successful return.
 | |
| 
 | |
|   @retval EFI_SUCCESS           The conversion was successful, and the device
 | |
|                                 path was returned.
 | |
|   @retval EFI_NOT_FOUND         The file system could not be found in the map.
 | |
| **/
 | |
| typedef
 | |
| EFI_STATUS
 | |
| (EFIAPI *SHELLENV_GET_FS_DEVICE_PATH) (
 | |
|   IN CHAR16                        *Name,
 | |
|   OUT EFI_DEVICE_PATH_PROTOCOL     **DevPath
 | |
|   );
 | |
| 
 | |
| /// EFI_SHELL_ENVIRONMENT2 protocol structure.
 | |
| typedef struct {
 | |
|   SHELLENV_EXECUTE                        Execute;
 | |
|   SHELLENV_GET_ENV                        GetEnv;
 | |
|   SHELLENV_GET_MAP                        GetMap;
 | |
|   SHELLENV_ADD_CMD                        AddCmd;
 | |
|   SHELLENV_ADD_PROT                       AddProt;
 | |
|   SHELLENV_GET_PROT                       GetProt;
 | |
|   SHELLENV_CUR_DIR                        CurDir;
 | |
|   SHELLENV_FILE_META_ARG                  FileMetaArg;
 | |
|   SHELLENV_FREE_FILE_LIST                 FreeFileList;
 | |
| 
 | |
|   //
 | |
|   // The following services are only used by the shell itself.
 | |
|   //
 | |
|   SHELLENV_NEW_SHELL                      NewShell;
 | |
|   SHELLENV_BATCH_IS_ACTIVE                BatchIsActive;
 | |
| 
 | |
|   SHELLENV_FREE_RESOURCES                 FreeResources;
 | |
| 
 | |
|   //
 | |
|   // GUID to differentiate ShellEnvironment2 from ShellEnvironment.
 | |
|   //
 | |
|   EFI_GUID                                SESGuid;
 | |
|   //
 | |
|   // Major Version grows if shell environment interface has been changes.
 | |
|   //
 | |
|   UINT32                                  MajorVersion;
 | |
|   UINT32                                  MinorVersion;
 | |
|   SHELLENV_ENABLE_PAGE_BREAK              EnablePageBreak;
 | |
|   SHELLENV_DISABLE_PAGE_BREAK             DisablePageBreak;
 | |
|   SHELLENV_GET_PAGE_BREAK                 GetPageBreak;
 | |
| 
 | |
|   SHELLENV_SET_KEY_FILTER                 SetKeyFilter;
 | |
|   SHELLENV_GET_KEY_FILTER                 GetKeyFilter;
 | |
| 
 | |
|   SHELLENV_GET_EXECUTION_BREAK            GetExecutionBreak;
 | |
|   SHELLENV_INCREMENT_SHELL_NESTING_LEVEL  IncrementShellNestingLevel;
 | |
|   SHELLENV_DECREMENT_SHELL_NESTING_LEVEL  DecrementShellNestingLevel;
 | |
|   SHELLENV_IS_ROOT_SHELL                  IsRootShell;
 | |
| 
 | |
|   SHELLENV_CLOSE_CONSOLE_PROXY            CloseConsoleProxy;
 | |
|   HANDLE_ENUMERATOR                       HandleEnumerator;
 | |
|   PROTOCOL_INFO_ENUMERATOR                ProtocolInfoEnumerator;
 | |
|   GET_DEVICE_NAME                         GetDeviceName;
 | |
|   GET_SHELL_MODE                          GetShellMode;
 | |
|   SHELLENV_NAME_TO_PATH                   NameToPath;
 | |
|   SHELLENV_GET_FS_NAME                    GetFsName;
 | |
|   SHELLENV_FILE_META_ARG_NO_WILDCARD      FileMetaArgNoWildCard;
 | |
|   SHELLENV_DEL_DUP_FILE                   DelDupFileArg;
 | |
|   SHELLENV_GET_FS_DEVICE_PATH             GetFsDevicePath;
 | |
| } EFI_SHELL_ENVIRONMENT2;
 | |
| 
 | |
| extern EFI_GUID gEfiShellEnvironment2Guid;
 | |
| extern EFI_GUID gEfiShellEnvironment2ExtGuid;
 | |
| 
 | |
| #endif // _SHELL_ENVIRONMENT_2_PROTOCOL_H_
 |