Home | History | Annotate | Line # | Download | only in inc
      1 /*	$NetBSD: efishell.h,v 1.1.1.1 2021/09/30 18:50:09 jmcneill Exp $	*/
      2 
      3 /**
      4   EFI Shell protocol as defined in the UEFI Shell Specification 2.2.
      5 
      6   (C) Copyright 2014 Hewlett-Packard Development Company, L.P.<BR>
      7   Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR>
      8   SPDX-License-Identifier: BSD-2-Clause-Patent
      9 
     10   This file is based on MdePkg/Include/Protocol/Shell.h from EDK2
     11   Ported to gnu-efi by Jiaqing Zhao <jiaqing.zhao (at) intel.com>
     12 **/
     13 
     14 #ifndef _EFI_SHELL_H
     15 #define _EFI_SHELL_H
     16 
     17 #include "efilink.h"
     18 
     19 #define EFI_SHELL_PROTOCOL_GUID \
     20     { 0x6302d008, 0x7f9b, 0x4f30, { 0x87, 0xac, 0x60, 0xc9, 0xfe, 0xf5, 0xda, 0x4e } }
     21 
     22 INTERFACE_DECL(_EFI_SHELL_PROTOCOL);
     23 
     24 typedef enum {
     25     SHELL_SUCCESS              = 0,
     26     SHELL_LOAD_ERROR           = 1,
     27     SHELL_INVALID_PARAMETER    = 2,
     28     SHELL_UNSUPPORTED          = 3,
     29     SHELL_BAD_BUFFER_SIZE      = 4,
     30     SHELL_BUFFER_TOO_SMALL     = 5,
     31     SHELL_NOT_READY            = 6,
     32     SHELL_DEVICE_ERROR         = 7,
     33     SHELL_WRITE_PROTECTED      = 8,
     34     SHELL_OUT_OF_RESOURCES     = 9,
     35     SHELL_VOLUME_CORRUPTED     = 10,
     36     SHELL_VOLUME_FULL          = 11,
     37     SHELL_NO_MEDIA             = 12,
     38     SHELL_MEDIA_CHANGED        = 13,
     39     SHELL_NOT_FOUND            = 14,
     40     SHELL_ACCESS_DENIED        = 15,
     41     SHELL_TIMEOUT              = 18,
     42     SHELL_NOT_STARTED          = 19,
     43     SHELL_ALREADY_STARTED      = 20,
     44     SHELL_ABORTED              = 21,
     45     SHELL_INCOMPATIBLE_VERSION = 25,
     46     SHELL_SECURITY_VIOLATION   = 26,
     47     SHELL_NOT_EQUAL            = 27
     48 } SHELL_STATUS;
     49 
     50 typedef VOID *SHELL_FILE_HANDLE;
     51 
     52 typedef struct {
     53     EFI_LIST_ENTRY    Link;
     54     EFI_STATUS        Status;
     55     CONST CHAR16      *FullName;
     56     CONST CHAR16      *FileName;
     57     SHELL_FILE_HANDLE Handle;
     58     EFI_FILE_INFO     *Info;
     59 } EFI_SHELL_FILE_INFO;
     60 
     61 typedef
     62 BOOLEAN
     63 (EFIAPI *EFI_SHELL_BATCH_IS_ACTIVE) (
     64     VOID
     65     );
     66 
     67 typedef
     68 EFI_STATUS
     69 (EFIAPI *EFI_SHELL_CLOSE_FILE) (
     70     IN SHELL_FILE_HANDLE FileHandle
     71     );
     72 
     73 typedef
     74 EFI_STATUS
     75 (EFIAPI *EFI_SHELL_CREATE_FILE) (
     76     IN CONST CHAR16       *FileName,
     77     IN UINT64             FileAttribs,
     78     OUT SHELL_FILE_HANDLE *FileHandle
     79     );
     80 
     81 typedef
     82 EFI_STATUS
     83 (EFIAPI *EFI_SHELL_DELETE_FILE) (
     84     IN SHELL_FILE_HANDLE FileHandle
     85     );
     86 
     87 typedef
     88 EFI_STATUS
     89 (EFIAPI *EFI_SHELL_DELETE_FILE_BY_NAME) (
     90     IN CONST CHAR16 *FileName
     91     );
     92 
     93 typedef
     94 VOID
     95 (EFIAPI *EFI_SHELL_DISABLE_PAGE_BREAK) (
     96     VOID
     97     );
     98 
     99 typedef
    100 VOID
    101 (EFIAPI *EFI_SHELL_ENABLE_PAGE_BREAK) (
    102     VOID
    103     );
    104 
    105 typedef
    106 EFI_STATUS
    107 (EFIAPI *EFI_SHELL_EXECUTE) (
    108     IN EFI_HANDLE  *ParentImageHandle,
    109     IN CHAR16      *CommandLine OPTIONAL,
    110     IN CHAR16      **Environment OPTIONAL,
    111     OUT EFI_STATUS *StatusCode OPTIONAL
    112     );
    113 
    114 typedef
    115 EFI_STATUS
    116 (EFIAPI *EFI_SHELL_FIND_FILES) (
    117     IN CONST CHAR16         *FilePattern,
    118     OUT EFI_SHELL_FILE_INFO **FileList
    119     );
    120 
    121 typedef
    122 EFI_STATUS
    123 (EFIAPI *EFI_SHELL_FIND_FILES_IN_DIR) (
    124     IN SHELL_FILE_HANDLE    FileDirHandle,
    125     OUT EFI_SHELL_FILE_INFO **FileList
    126     );
    127 
    128 typedef
    129 EFI_STATUS
    130 (EFIAPI *EFI_SHELL_FLUSH_FILE) (
    131     IN SHELL_FILE_HANDLE FileHandle
    132     );
    133 
    134 typedef
    135 EFI_STATUS
    136 (EFIAPI *EFI_SHELL_FREE_FILE_LIST) (
    137     IN EFI_SHELL_FILE_INFO **FileList
    138     );
    139 
    140 typedef
    141 CONST CHAR16 *
    142 (EFIAPI *EFI_SHELL_GET_ALIAS) (
    143   IN  CONST CHAR16 *Alias,
    144   OUT BOOLEAN      *Volatile OPTIONAL
    145   );
    146 
    147 typedef
    148 CONST CHAR16 *
    149 (EFIAPI *EFI_SHELL_GET_CUR_DIR) (
    150   IN CONST CHAR16 *FileSystemMapping OPTIONAL
    151   );
    152 
    153 typedef UINT32 EFI_SHELL_DEVICE_NAME_FLAGS;
    154 #define EFI_DEVICE_NAME_USE_COMPONENT_NAME 0x00000001
    155 #define EFI_DEVICE_NAME_USE_DEVICE_PATH    0x00000002
    156 
    157 typedef
    158 EFI_STATUS
    159 (EFIAPI *EFI_SHELL_GET_DEVICE_NAME) (
    160     IN EFI_HANDLE                   DeviceHandle,
    161     IN EFI_SHELL_DEVICE_NAME_FLAGS  Flags,
    162     IN CHAR8                        *Language,
    163     OUT CHAR16                      **BestDeviceName
    164     );
    165 
    166 typedef
    167 CONST EFI_DEVICE_PATH_PROTOCOL *
    168 (EFIAPI *EFI_SHELL_GET_DEVICE_PATH_FROM_MAP) (
    169     IN CONST CHAR16 *Mapping
    170     );
    171 
    172 typedef
    173 EFI_DEVICE_PATH_PROTOCOL *
    174 (EFIAPI *EFI_SHELL_GET_DEVICE_PATH_FROM_FILE_PATH) (
    175     IN CONST CHAR16 *Path
    176     );
    177 
    178 typedef
    179 CONST CHAR16 *
    180 (EFIAPI *EFI_SHELL_GET_ENV) (
    181     IN CONST CHAR16 *Name
    182     );
    183 
    184 typedef
    185 CONST CHAR16 *
    186 (EFIAPI *EFI_SHELL_GET_ENV_EX) (
    187     IN CONST CHAR16 *Name,
    188     OUT UINT32      *Attributes OPTIONAL
    189     );
    190 
    191 typedef
    192 EFI_FILE_INFO *
    193 (EFIAPI *EFI_SHELL_GET_FILE_INFO) (
    194     IN SHELL_FILE_HANDLE FileHandle
    195     );
    196 
    197 typedef
    198 CHAR16 *
    199 (EFIAPI *EFI_SHELL_GET_FILE_PATH_FROM_DEVICE_PATH) (
    200     IN CONST EFI_DEVICE_PATH_PROTOCOL *Path
    201     );
    202 
    203 typedef
    204 EFI_STATUS
    205 (EFIAPI *EFI_SHELL_GET_FILE_POSITION) (
    206     IN SHELL_FILE_HANDLE FileHandle,
    207     OUT UINT64           *Position
    208     );
    209 
    210 typedef
    211 EFI_STATUS
    212 (EFIAPI *EFI_SHELL_GET_FILE_SIZE) (
    213     IN SHELL_FILE_HANDLE FileHandle,
    214     OUT UINT64           *Size
    215     );
    216 
    217 typedef
    218 EFI_STATUS
    219 (EFIAPI *EFI_SHELL_GET_GUID_FROM_NAME) (
    220     IN CONST CHAR16 *GuidName,
    221     OUT EFI_GUID    *Guid
    222     );
    223 
    224 typedef
    225 EFI_STATUS
    226 (EFIAPI *EFI_SHELL_GET_GUID_NAME)(
    227     IN CONST EFI_GUID *Guid,
    228     OUT CONST CHAR16  **GuidName
    229     );
    230 
    231 typedef
    232 EFI_STATUS
    233 (EFIAPI *EFI_SHELL_GET_HELP_TEXT) (
    234     IN CONST CHAR16 *Command,
    235     IN CONST CHAR16 *Sections,
    236     OUT CHAR16      **HelpText
    237     );
    238 
    239 typedef
    240 CONST CHAR16 *
    241 (EFIAPI *EFI_SHELL_GET_MAP_FROM_DEVICE_PATH) (
    242     IN OUT EFI_DEVICE_PATH_PROTOCOL **DevicePath
    243     );
    244 
    245 typedef
    246 BOOLEAN
    247 (EFIAPI *EFI_SHELL_GET_PAGE_BREAK) (
    248     VOID
    249     );
    250 
    251 typedef
    252 BOOLEAN
    253 (EFIAPI *EFI_SHELL_IS_ROOT_SHELL) (
    254     VOID
    255     );
    256 
    257 typedef
    258 EFI_STATUS
    259 (EFIAPI *EFI_SHELL_OPEN_FILE_BY_NAME) (
    260     IN CONST CHAR16       *FileName,
    261     OUT SHELL_FILE_HANDLE *FileHandle,
    262     IN UINT64             OpenMode
    263     );
    264 
    265 typedef
    266 EFI_STATUS
    267 (EFIAPI *EFI_SHELL_OPEN_FILE_LIST) (
    268     IN CHAR16                  *Path,
    269     IN UINT64                  OpenMode,
    270     IN OUT EFI_SHELL_FILE_INFO **FileList
    271     );
    272 
    273 typedef
    274 EFI_STATUS
    275 (EFIAPI *EFI_SHELL_OPEN_ROOT) (
    276     IN EFI_DEVICE_PATH_PROTOCOL *DevicePath,
    277     OUT SHELL_FILE_HANDLE       *FileHandle
    278     );
    279 
    280 typedef
    281 EFI_STATUS
    282 (EFIAPI *EFI_SHELL_OPEN_ROOT_BY_HANDLE) (
    283     IN EFI_HANDLE         DeviceHandle,
    284     OUT SHELL_FILE_HANDLE *FileHandle
    285     );
    286 
    287 typedef
    288 EFI_STATUS
    289 (EFIAPI *EFI_SHELL_READ_FILE) (
    290     IN SHELL_FILE_HANDLE FileHandle,
    291     IN OUT UINTN         *ReadSize,
    292     IN OUT VOID          *Buffer
    293     );
    294 
    295 typedef
    296 EFI_STATUS
    297 (EFIAPI *EFI_SHELL_REGISTER_GUID_NAME) (
    298     IN CONST EFI_GUID *Guid,
    299     IN CONST CHAR16   *GuidName
    300     );
    301 
    302 typedef
    303 EFI_STATUS
    304 (EFIAPI *EFI_SHELL_REMOVE_DUP_IN_FILE_LIST) (
    305     IN EFI_SHELL_FILE_INFO **FileList
    306     );
    307 
    308 typedef
    309 EFI_STATUS
    310 (EFIAPI *EFI_SHELL_SET_ALIAS) (
    311     IN CONST CHAR16 *Command,
    312     IN CONST CHAR16 *Alias,
    313     IN BOOLEAN      Replace,
    314     IN BOOLEAN      Volatile
    315     );
    316 
    317 typedef
    318 EFI_STATUS
    319 (EFIAPI *EFI_SHELL_SET_CUR_DIR) (
    320     IN CONST CHAR16 *FileSystem OPTIONAL,
    321     IN CONST CHAR16 *Dir
    322     );
    323 
    324 typedef
    325 EFI_STATUS
    326 (EFIAPI *EFI_SHELL_SET_ENV) (
    327     IN CONST CHAR16 *Name,
    328     IN CONST CHAR16 *Value,
    329     IN BOOLEAN      Volatile
    330     );
    331 
    332 typedef
    333 EFI_STATUS
    334 (EFIAPI *EFI_SHELL_SET_FILE_INFO) (
    335     IN SHELL_FILE_HANDLE   FileHandle,
    336     IN CONST EFI_FILE_INFO *FileInfo
    337     );
    338 
    339 typedef
    340 EFI_STATUS
    341 (EFIAPI *EFI_SHELL_SET_FILE_POSITION) (
    342     IN SHELL_FILE_HANDLE FileHandle,
    343     IN UINT64            Position
    344     );
    345 
    346 typedef
    347 EFI_STATUS
    348 (EFIAPI *EFI_SHELL_SET_MAP) (
    349     IN CONST EFI_DEVICE_PATH_PROTOCOL *DevicePath,
    350     IN CONST CHAR16                   *Mapping
    351     );
    352 
    353 typedef
    354 EFI_STATUS
    355 (EFIAPI *EFI_SHELL_WRITE_FILE) (
    356     IN SHELL_FILE_HANDLE FileHandle,
    357     IN OUT UINTN         *BufferSize,
    358     IN VOID              *Buffer
    359     );
    360 
    361 typedef struct _EFI_SHELL_PROTOCOL {
    362     EFI_SHELL_EXECUTE                         Execute;
    363     EFI_SHELL_GET_ENV                         GetEnv;
    364     EFI_SHELL_SET_ENV                         SetEnv;
    365     EFI_SHELL_GET_ALIAS                       GetAlias;
    366     EFI_SHELL_SET_ALIAS                       SetAlias;
    367     EFI_SHELL_GET_HELP_TEXT                   GetHelpText;
    368     EFI_SHELL_GET_DEVICE_PATH_FROM_MAP        GetDevicePathFromMap;
    369     EFI_SHELL_GET_MAP_FROM_DEVICE_PATH        GetMapFromDevicePath;
    370     EFI_SHELL_GET_DEVICE_PATH_FROM_FILE_PATH  GetDevicePathFromFilePath;
    371     EFI_SHELL_GET_FILE_PATH_FROM_DEVICE_PATH  GetFilePathFromDevicePath;
    372     EFI_SHELL_SET_MAP                         SetMap;
    373     EFI_SHELL_GET_CUR_DIR                     GetCurDir;
    374     EFI_SHELL_SET_CUR_DIR                     SetCurDir;
    375     EFI_SHELL_OPEN_FILE_LIST                  OpenFileList;
    376     EFI_SHELL_FREE_FILE_LIST                  FreeFileList;
    377     EFI_SHELL_REMOVE_DUP_IN_FILE_LIST         RemoveDupInFileList;
    378     EFI_SHELL_BATCH_IS_ACTIVE                 BatchIsActive;
    379     EFI_SHELL_IS_ROOT_SHELL                   IsRootShell;
    380     EFI_SHELL_ENABLE_PAGE_BREAK               EnablePageBreak;
    381     EFI_SHELL_DISABLE_PAGE_BREAK              DisablePageBreak;
    382     EFI_SHELL_GET_PAGE_BREAK                  GetPageBreak;
    383     EFI_SHELL_GET_DEVICE_NAME                 GetDeviceName;
    384     EFI_SHELL_GET_FILE_INFO                   GetFileInfo;
    385     EFI_SHELL_SET_FILE_INFO                   SetFileInfo;
    386     EFI_SHELL_OPEN_FILE_BY_NAME               OpenFileByName;
    387     EFI_SHELL_CLOSE_FILE                      CloseFile;
    388     EFI_SHELL_CREATE_FILE                     CreateFile;
    389     EFI_SHELL_READ_FILE                       ReadFile;
    390     EFI_SHELL_WRITE_FILE                      WriteFile;
    391     EFI_SHELL_DELETE_FILE                     DeleteFile;
    392     EFI_SHELL_DELETE_FILE_BY_NAME             DeleteFileByName;
    393     EFI_SHELL_GET_FILE_POSITION               GetFilePosition;
    394     EFI_SHELL_SET_FILE_POSITION               SetFilePosition;
    395     EFI_SHELL_FLUSH_FILE                      FlushFile;
    396     EFI_SHELL_FIND_FILES                      FindFiles;
    397     EFI_SHELL_FIND_FILES_IN_DIR               FindFilesInDir;
    398     EFI_SHELL_GET_FILE_SIZE                   GetFileSize;
    399     EFI_SHELL_OPEN_ROOT                       OpenRoot;
    400     EFI_SHELL_OPEN_ROOT_BY_HANDLE             OpenRootByHandle;
    401     EFI_EVENT                                 ExecutionBreak;
    402     UINT32                                    MajorVersion;
    403     UINT32                                    MinorVersion;
    404     // Added for Shell 2.1
    405     EFI_SHELL_REGISTER_GUID_NAME              RegisterGuidName;
    406     EFI_SHELL_GET_GUID_NAME                   GetGuidName;
    407     EFI_SHELL_GET_GUID_FROM_NAME              GetGuidFromName;
    408     EFI_SHELL_GET_ENV_EX                      GetEnvEx;
    409 } EFI_SHELL_PROTOCOL;
    410 
    411 #define EFI_SHELL_PARAMETERS_PROTOCOL_GUID \
    412     { 0x752f3136, 0x4e16, 0x4fdc, { 0xa2, 0x2a, 0xe5, 0xf4, 0x68, 0x12, 0xf4, 0xca } }
    413 
    414 INTERFACE_DECL(_EFI_SHELL_PARAMETERS_PROTOCOL);
    415 
    416 typedef struct _EFI_SHELL_PARAMETERS_PROTOCOL {
    417     CHAR16            **Argv;
    418     UINTN             Argc;
    419     SHELL_FILE_HANDLE StdIn;
    420     SHELL_FILE_HANDLE StdOut;
    421     SHELL_FILE_HANDLE StdErr;
    422 } EFI_SHELL_PARAMETERS_PROTOCOL;
    423 
    424 #define EFI_SHELL_DYNAMIC_COMMAND_PROTOCOL_GUID \
    425     { 0x3c7200e9, 0x005f, 0x4ea4, { 0x87, 0xde, 0xa3, 0xdf, 0xac, 0x8a, 0x27, 0xc3 } }
    426 
    427 INTERFACE_DECL(_EFI_SHELL_DYNAMIC_COMMAND_PROTOCOL);
    428 
    429 typedef
    430 SHELL_STATUS
    431 (EFIAPI *SHELL_COMMAND_HANDLER)(
    432     IN struct _EFI_SHELL_DYNAMIC_COMMAND_PROTOCOL *This,
    433     IN EFI_SYSTEM_TABLE                           *SystemTable,
    434     IN EFI_SHELL_PARAMETERS_PROTOCOL              *ShellParameters,
    435     IN EFI_SHELL_PROTOCOL                         *Shell
    436     );
    437 
    438 typedef
    439 CHAR16*
    440 (EFIAPI *SHELL_COMMAND_GETHELP)(
    441     IN struct _EFI_SHELL_DYNAMIC_COMMAND_PROTOCOL *This,
    442     IN CONST CHAR8                                *Language
    443     );
    444 
    445 typedef struct _EFI_SHELL_DYNAMIC_COMMAND_PROTOCOL {
    446     CONST CHAR16          *CommandName;
    447     SHELL_COMMAND_HANDLER Handler;
    448     SHELL_COMMAND_GETHELP GetHelp;
    449 } EFI_SHELL_DYNAMIC_COMMAND_PROTOCOL;
    450 
    451 #endif
    452