/** EFI Shell protocol as defined in the UEFI Shell Specification 2.2. (C) Copyright 2014 Hewlett-Packard Development Company, L.P.
Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent This file is based on MdePkg/Include/Protocol/Shell.h from EDK2 Ported to gnu-efi by Jiaqing Zhao **/ #ifndef _EFI_SHELL_H #define _EFI_SHELL_H #include "efilink.h" #define EFI_SHELL_PROTOCOL_GUID \ { 0x6302d008, 0x7f9b, 0x4f30, { 0x87, 0xac, 0x60, 0xc9, 0xfe, 0xf5, 0xda, 0x4e } } INTERFACE_DECL(_EFI_SHELL_PROTOCOL); typedef enum { SHELL_SUCCESS = 0, SHELL_LOAD_ERROR = 1, SHELL_INVALID_PARAMETER = 2, SHELL_UNSUPPORTED = 3, SHELL_BAD_BUFFER_SIZE = 4, SHELL_BUFFER_TOO_SMALL = 5, SHELL_NOT_READY = 6, SHELL_DEVICE_ERROR = 7, SHELL_WRITE_PROTECTED = 8, SHELL_OUT_OF_RESOURCES = 9, SHELL_VOLUME_CORRUPTED = 10, SHELL_VOLUME_FULL = 11, SHELL_NO_MEDIA = 12, SHELL_MEDIA_CHANGED = 13, SHELL_NOT_FOUND = 14, SHELL_ACCESS_DENIED = 15, SHELL_TIMEOUT = 18, SHELL_NOT_STARTED = 19, SHELL_ALREADY_STARTED = 20, SHELL_ABORTED = 21, SHELL_INCOMPATIBLE_VERSION = 25, SHELL_SECURITY_VIOLATION = 26, SHELL_NOT_EQUAL = 27 } SHELL_STATUS; typedef VOID *SHELL_FILE_HANDLE; typedef struct { EFI_LIST_ENTRY Link; EFI_STATUS Status; CONST CHAR16 *FullName; CONST CHAR16 *FileName; SHELL_FILE_HANDLE Handle; EFI_FILE_INFO *Info; } EFI_SHELL_FILE_INFO; typedef BOOLEAN (EFIAPI *EFI_SHELL_BATCH_IS_ACTIVE) ( VOID ); typedef EFI_STATUS (EFIAPI *EFI_SHELL_CLOSE_FILE) ( IN SHELL_FILE_HANDLE FileHandle ); typedef EFI_STATUS (EFIAPI *EFI_SHELL_CREATE_FILE) ( IN CONST CHAR16 *FileName, IN UINT64 FileAttribs, OUT SHELL_FILE_HANDLE *FileHandle ); typedef EFI_STATUS (EFIAPI *EFI_SHELL_DELETE_FILE) ( IN SHELL_FILE_HANDLE FileHandle ); typedef EFI_STATUS (EFIAPI *EFI_SHELL_DELETE_FILE_BY_NAME) ( IN CONST CHAR16 *FileName ); typedef VOID (EFIAPI *EFI_SHELL_DISABLE_PAGE_BREAK) ( VOID ); typedef VOID (EFIAPI *EFI_SHELL_ENABLE_PAGE_BREAK) ( VOID ); typedef EFI_STATUS (EFIAPI *EFI_SHELL_EXECUTE) ( IN EFI_HANDLE *ParentImageHandle, IN CHAR16 *CommandLine OPTIONAL, IN CHAR16 **Environment OPTIONAL, OUT EFI_STATUS *StatusCode OPTIONAL ); typedef EFI_STATUS (EFIAPI *EFI_SHELL_FIND_FILES) ( IN CONST CHAR16 *FilePattern, OUT EFI_SHELL_FILE_INFO **FileList ); typedef EFI_STATUS (EFIAPI *EFI_SHELL_FIND_FILES_IN_DIR) ( IN SHELL_FILE_HANDLE FileDirHandle, OUT EFI_SHELL_FILE_INFO **FileList ); typedef EFI_STATUS (EFIAPI *EFI_SHELL_FLUSH_FILE) ( IN SHELL_FILE_HANDLE FileHandle ); typedef EFI_STATUS (EFIAPI *EFI_SHELL_FREE_FILE_LIST) ( IN EFI_SHELL_FILE_INFO **FileList ); typedef CONST CHAR16 * (EFIAPI *EFI_SHELL_GET_ALIAS) ( IN CONST CHAR16 *Alias, OUT BOOLEAN *Volatile OPTIONAL ); typedef CONST CHAR16 * (EFIAPI *EFI_SHELL_GET_CUR_DIR) ( IN CONST CHAR16 *FileSystemMapping OPTIONAL ); typedef UINT32 EFI_SHELL_DEVICE_NAME_FLAGS; #define EFI_DEVICE_NAME_USE_COMPONENT_NAME 0x00000001 #define EFI_DEVICE_NAME_USE_DEVICE_PATH 0x00000002 typedef EFI_STATUS (EFIAPI *EFI_SHELL_GET_DEVICE_NAME) ( IN EFI_HANDLE DeviceHandle, IN EFI_SHELL_DEVICE_NAME_FLAGS Flags, IN CHAR8 *Language, OUT CHAR16 **BestDeviceName ); typedef CONST EFI_DEVICE_PATH_PROTOCOL * (EFIAPI *EFI_SHELL_GET_DEVICE_PATH_FROM_MAP) ( IN CONST CHAR16 *Mapping ); typedef EFI_DEVICE_PATH_PROTOCOL * (EFIAPI *EFI_SHELL_GET_DEVICE_PATH_FROM_FILE_PATH) ( IN CONST CHAR16 *Path ); typedef CONST CHAR16 * (EFIAPI *EFI_SHELL_GET_ENV) ( IN CONST CHAR16 *Name ); typedef CONST CHAR16 * (EFIAPI *EFI_SHELL_GET_ENV_EX) ( IN CONST CHAR16 *Name, OUT UINT32 *Attributes OPTIONAL ); typedef EFI_FILE_INFO * (EFIAPI *EFI_SHELL_GET_FILE_INFO) ( IN SHELL_FILE_HANDLE FileHandle ); typedef CHAR16 * (EFIAPI *EFI_SHELL_GET_FILE_PATH_FROM_DEVICE_PATH) ( IN CONST EFI_DEVICE_PATH_PROTOCOL *Path ); typedef EFI_STATUS (EFIAPI *EFI_SHELL_GET_FILE_POSITION) ( IN SHELL_FILE_HANDLE FileHandle, OUT UINT64 *Position ); typedef EFI_STATUS (EFIAPI *EFI_SHELL_GET_FILE_SIZE) ( IN SHELL_FILE_HANDLE FileHandle, OUT UINT64 *Size ); typedef EFI_STATUS (EFIAPI *EFI_SHELL_GET_GUID_FROM_NAME) ( IN CONST CHAR16 *GuidName, OUT EFI_GUID *Guid ); typedef EFI_STATUS (EFIAPI *EFI_SHELL_GET_GUID_NAME)( IN CONST EFI_GUID *Guid, OUT CONST CHAR16 **GuidName ); typedef EFI_STATUS (EFIAPI *EFI_SHELL_GET_HELP_TEXT) ( IN CONST CHAR16 *Command, IN CONST CHAR16 *Sections, OUT CHAR16 **HelpText ); typedef CONST CHAR16 * (EFIAPI *EFI_SHELL_GET_MAP_FROM_DEVICE_PATH) ( IN OUT EFI_DEVICE_PATH_PROTOCOL **DevicePath ); typedef BOOLEAN (EFIAPI *EFI_SHELL_GET_PAGE_BREAK) ( VOID ); typedef BOOLEAN (EFIAPI *EFI_SHELL_IS_ROOT_SHELL) ( VOID ); typedef EFI_STATUS (EFIAPI *EFI_SHELL_OPEN_FILE_BY_NAME) ( IN CONST CHAR16 *FileName, OUT SHELL_FILE_HANDLE *FileHandle, IN UINT64 OpenMode ); typedef EFI_STATUS (EFIAPI *EFI_SHELL_OPEN_FILE_LIST) ( IN CHAR16 *Path, IN UINT64 OpenMode, IN OUT EFI_SHELL_FILE_INFO **FileList ); typedef EFI_STATUS (EFIAPI *EFI_SHELL_OPEN_ROOT) ( IN EFI_DEVICE_PATH_PROTOCOL *DevicePath, OUT SHELL_FILE_HANDLE *FileHandle ); typedef EFI_STATUS (EFIAPI *EFI_SHELL_OPEN_ROOT_BY_HANDLE) ( IN EFI_HANDLE DeviceHandle, OUT SHELL_FILE_HANDLE *FileHandle ); typedef EFI_STATUS (EFIAPI *EFI_SHELL_READ_FILE) ( IN SHELL_FILE_HANDLE FileHandle, IN OUT UINTN *ReadSize, IN OUT VOID *Buffer ); typedef EFI_STATUS (EFIAPI *EFI_SHELL_REGISTER_GUID_NAME) ( IN CONST EFI_GUID *Guid, IN CONST CHAR16 *GuidName ); typedef EFI_STATUS (EFIAPI *EFI_SHELL_REMOVE_DUP_IN_FILE_LIST) ( IN EFI_SHELL_FILE_INFO **FileList ); typedef EFI_STATUS (EFIAPI *EFI_SHELL_SET_ALIAS) ( IN CONST CHAR16 *Command, IN CONST CHAR16 *Alias, IN BOOLEAN Replace, IN BOOLEAN Volatile ); typedef EFI_STATUS (EFIAPI *EFI_SHELL_SET_CUR_DIR) ( IN CONST CHAR16 *FileSystem OPTIONAL, IN CONST CHAR16 *Dir ); typedef EFI_STATUS (EFIAPI *EFI_SHELL_SET_ENV) ( IN CONST CHAR16 *Name, IN CONST CHAR16 *Value, IN BOOLEAN Volatile ); typedef EFI_STATUS (EFIAPI *EFI_SHELL_SET_FILE_INFO) ( IN SHELL_FILE_HANDLE FileHandle, IN CONST EFI_FILE_INFO *FileInfo ); typedef EFI_STATUS (EFIAPI *EFI_SHELL_SET_FILE_POSITION) ( IN SHELL_FILE_HANDLE FileHandle, IN UINT64 Position ); typedef EFI_STATUS (EFIAPI *EFI_SHELL_SET_MAP) ( IN CONST EFI_DEVICE_PATH_PROTOCOL *DevicePath, IN CONST CHAR16 *Mapping ); typedef EFI_STATUS (EFIAPI *EFI_SHELL_WRITE_FILE) ( IN SHELL_FILE_HANDLE FileHandle, IN OUT UINTN *BufferSize, IN VOID *Buffer ); typedef struct _EFI_SHELL_PROTOCOL { EFI_SHELL_EXECUTE Execute; EFI_SHELL_GET_ENV GetEnv; EFI_SHELL_SET_ENV SetEnv; EFI_SHELL_GET_ALIAS GetAlias; EFI_SHELL_SET_ALIAS SetAlias; EFI_SHELL_GET_HELP_TEXT GetHelpText; EFI_SHELL_GET_DEVICE_PATH_FROM_MAP GetDevicePathFromMap; EFI_SHELL_GET_MAP_FROM_DEVICE_PATH GetMapFromDevicePath; EFI_SHELL_GET_DEVICE_PATH_FROM_FILE_PATH GetDevicePathFromFilePath; EFI_SHELL_GET_FILE_PATH_FROM_DEVICE_PATH GetFilePathFromDevicePath; EFI_SHELL_SET_MAP SetMap; EFI_SHELL_GET_CUR_DIR GetCurDir; EFI_SHELL_SET_CUR_DIR SetCurDir; EFI_SHELL_OPEN_FILE_LIST OpenFileList; EFI_SHELL_FREE_FILE_LIST FreeFileList; EFI_SHELL_REMOVE_DUP_IN_FILE_LIST RemoveDupInFileList; EFI_SHELL_BATCH_IS_ACTIVE BatchIsActive; EFI_SHELL_IS_ROOT_SHELL IsRootShell; EFI_SHELL_ENABLE_PAGE_BREAK EnablePageBreak; EFI_SHELL_DISABLE_PAGE_BREAK DisablePageBreak; EFI_SHELL_GET_PAGE_BREAK GetPageBreak; EFI_SHELL_GET_DEVICE_NAME GetDeviceName; EFI_SHELL_GET_FILE_INFO GetFileInfo; EFI_SHELL_SET_FILE_INFO SetFileInfo; EFI_SHELL_OPEN_FILE_BY_NAME OpenFileByName; EFI_SHELL_CLOSE_FILE CloseFile; EFI_SHELL_CREATE_FILE CreateFile; EFI_SHELL_READ_FILE ReadFile; EFI_SHELL_WRITE_FILE WriteFile; EFI_SHELL_DELETE_FILE DeleteFile; EFI_SHELL_DELETE_FILE_BY_NAME DeleteFileByName; EFI_SHELL_GET_FILE_POSITION GetFilePosition; EFI_SHELL_SET_FILE_POSITION SetFilePosition; EFI_SHELL_FLUSH_FILE FlushFile; EFI_SHELL_FIND_FILES FindFiles; EFI_SHELL_FIND_FILES_IN_DIR FindFilesInDir; EFI_SHELL_GET_FILE_SIZE GetFileSize; EFI_SHELL_OPEN_ROOT OpenRoot; EFI_SHELL_OPEN_ROOT_BY_HANDLE OpenRootByHandle; EFI_EVENT ExecutionBreak; UINT32 MajorVersion; UINT32 MinorVersion; // Added for Shell 2.1 EFI_SHELL_REGISTER_GUID_NAME RegisterGuidName; EFI_SHELL_GET_GUID_NAME GetGuidName; EFI_SHELL_GET_GUID_FROM_NAME GetGuidFromName; EFI_SHELL_GET_ENV_EX GetEnvEx; } EFI_SHELL_PROTOCOL; #define EFI_SHELL_PARAMETERS_PROTOCOL_GUID \ { 0x752f3136, 0x4e16, 0x4fdc, { 0xa2, 0x2a, 0xe5, 0xf4, 0x68, 0x12, 0xf4, 0xca } } INTERFACE_DECL(_EFI_SHELL_PARAMETERS_PROTOCOL); typedef struct _EFI_SHELL_PARAMETERS_PROTOCOL { CHAR16 **Argv; UINTN Argc; SHELL_FILE_HANDLE StdIn; SHELL_FILE_HANDLE StdOut; SHELL_FILE_HANDLE StdErr; } EFI_SHELL_PARAMETERS_PROTOCOL; #define EFI_SHELL_DYNAMIC_COMMAND_PROTOCOL_GUID \ { 0x3c7200e9, 0x005f, 0x4ea4, { 0x87, 0xde, 0xa3, 0xdf, 0xac, 0x8a, 0x27, 0xc3 } } INTERFACE_DECL(_EFI_SHELL_DYNAMIC_COMMAND_PROTOCOL); typedef SHELL_STATUS (EFIAPI *SHELL_COMMAND_HANDLER)( IN struct _EFI_SHELL_DYNAMIC_COMMAND_PROTOCOL *This, IN EFI_SYSTEM_TABLE *SystemTable, IN EFI_SHELL_PARAMETERS_PROTOCOL *ShellParameters, IN EFI_SHELL_PROTOCOL *Shell ); typedef CHAR16* (EFIAPI *SHELL_COMMAND_GETHELP)( IN struct _EFI_SHELL_DYNAMIC_COMMAND_PROTOCOL *This, IN CONST CHAR8 *Language ); typedef struct _EFI_SHELL_DYNAMIC_COMMAND_PROTOCOL { CONST CHAR16 *CommandName; SHELL_COMMAND_HANDLER Handler; SHELL_COMMAND_GETHELP GetHelp; } EFI_SHELL_DYNAMIC_COMMAND_PROTOCOL; #endif