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@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 22INTERFACE_DECL(_EFI_SHELL_PROTOCOL); 23 24typedef 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 50typedef VOID *SHELL_FILE_HANDLE; 51 52typedef 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 61typedef 62BOOLEAN 63(EFIAPI *EFI_SHELL_BATCH_IS_ACTIVE) ( 64 VOID 65 ); 66 67typedef 68EFI_STATUS 69(EFIAPI *EFI_SHELL_CLOSE_FILE) ( 70 IN SHELL_FILE_HANDLE FileHandle 71 ); 72 73typedef 74EFI_STATUS 75(EFIAPI *EFI_SHELL_CREATE_FILE) ( 76 IN CONST CHAR16 *FileName, 77 IN UINT64 FileAttribs, 78 OUT SHELL_FILE_HANDLE *FileHandle 79 ); 80 81typedef 82EFI_STATUS 83(EFIAPI *EFI_SHELL_DELETE_FILE) ( 84 IN SHELL_FILE_HANDLE FileHandle 85 ); 86 87typedef 88EFI_STATUS 89(EFIAPI *EFI_SHELL_DELETE_FILE_BY_NAME) ( 90 IN CONST CHAR16 *FileName 91 ); 92 93typedef 94VOID 95(EFIAPI *EFI_SHELL_DISABLE_PAGE_BREAK) ( 96 VOID 97 ); 98 99typedef 100VOID 101(EFIAPI *EFI_SHELL_ENABLE_PAGE_BREAK) ( 102 VOID 103 ); 104 105typedef 106EFI_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 114typedef 115EFI_STATUS 116(EFIAPI *EFI_SHELL_FIND_FILES) ( 117 IN CONST CHAR16 *FilePattern, 118 OUT EFI_SHELL_FILE_INFO **FileList 119 ); 120 121typedef 122EFI_STATUS 123(EFIAPI *EFI_SHELL_FIND_FILES_IN_DIR) ( 124 IN SHELL_FILE_HANDLE FileDirHandle, 125 OUT EFI_SHELL_FILE_INFO **FileList 126 ); 127 128typedef 129EFI_STATUS 130(EFIAPI *EFI_SHELL_FLUSH_FILE) ( 131 IN SHELL_FILE_HANDLE FileHandle 132 ); 133 134typedef 135EFI_STATUS 136(EFIAPI *EFI_SHELL_FREE_FILE_LIST) ( 137 IN EFI_SHELL_FILE_INFO **FileList 138 ); 139 140typedef 141CONST CHAR16 * 142(EFIAPI *EFI_SHELL_GET_ALIAS) ( 143 IN CONST CHAR16 *Alias, 144 OUT BOOLEAN *Volatile OPTIONAL 145 ); 146 147typedef 148CONST CHAR16 * 149(EFIAPI *EFI_SHELL_GET_CUR_DIR) ( 150 IN CONST CHAR16 *FileSystemMapping OPTIONAL 151 ); 152 153typedef 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 157typedef 158EFI_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 166typedef 167CONST EFI_DEVICE_PATH_PROTOCOL * 168(EFIAPI *EFI_SHELL_GET_DEVICE_PATH_FROM_MAP) ( 169 IN CONST CHAR16 *Mapping 170 ); 171 172typedef 173EFI_DEVICE_PATH_PROTOCOL * 174(EFIAPI *EFI_SHELL_GET_DEVICE_PATH_FROM_FILE_PATH) ( 175 IN CONST CHAR16 *Path 176 ); 177 178typedef 179CONST CHAR16 * 180(EFIAPI *EFI_SHELL_GET_ENV) ( 181 IN CONST CHAR16 *Name 182 ); 183 184typedef 185CONST CHAR16 * 186(EFIAPI *EFI_SHELL_GET_ENV_EX) ( 187 IN CONST CHAR16 *Name, 188 OUT UINT32 *Attributes OPTIONAL 189 ); 190 191typedef 192EFI_FILE_INFO * 193(EFIAPI *EFI_SHELL_GET_FILE_INFO) ( 194 IN SHELL_FILE_HANDLE FileHandle 195 ); 196 197typedef 198CHAR16 * 199(EFIAPI *EFI_SHELL_GET_FILE_PATH_FROM_DEVICE_PATH) ( 200 IN CONST EFI_DEVICE_PATH_PROTOCOL *Path 201 ); 202 203typedef 204EFI_STATUS 205(EFIAPI *EFI_SHELL_GET_FILE_POSITION) ( 206 IN SHELL_FILE_HANDLE FileHandle, 207 OUT UINT64 *Position 208 ); 209 210typedef 211EFI_STATUS 212(EFIAPI *EFI_SHELL_GET_FILE_SIZE) ( 213 IN SHELL_FILE_HANDLE FileHandle, 214 OUT UINT64 *Size 215 ); 216 217typedef 218EFI_STATUS 219(EFIAPI *EFI_SHELL_GET_GUID_FROM_NAME) ( 220 IN CONST CHAR16 *GuidName, 221 OUT EFI_GUID *Guid 222 ); 223 224typedef 225EFI_STATUS 226(EFIAPI *EFI_SHELL_GET_GUID_NAME)( 227 IN CONST EFI_GUID *Guid, 228 OUT CONST CHAR16 **GuidName 229 ); 230 231typedef 232EFI_STATUS 233(EFIAPI *EFI_SHELL_GET_HELP_TEXT) ( 234 IN CONST CHAR16 *Command, 235 IN CONST CHAR16 *Sections, 236 OUT CHAR16 **HelpText 237 ); 238 239typedef 240CONST CHAR16 * 241(EFIAPI *EFI_SHELL_GET_MAP_FROM_DEVICE_PATH) ( 242 IN OUT EFI_DEVICE_PATH_PROTOCOL **DevicePath 243 ); 244 245typedef 246BOOLEAN 247(EFIAPI *EFI_SHELL_GET_PAGE_BREAK) ( 248 VOID 249 ); 250 251typedef 252BOOLEAN 253(EFIAPI *EFI_SHELL_IS_ROOT_SHELL) ( 254 VOID 255 ); 256 257typedef 258EFI_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 265typedef 266EFI_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 273typedef 274EFI_STATUS 275(EFIAPI *EFI_SHELL_OPEN_ROOT) ( 276 IN EFI_DEVICE_PATH_PROTOCOL *DevicePath, 277 OUT SHELL_FILE_HANDLE *FileHandle 278 ); 279 280typedef 281EFI_STATUS 282(EFIAPI *EFI_SHELL_OPEN_ROOT_BY_HANDLE) ( 283 IN EFI_HANDLE DeviceHandle, 284 OUT SHELL_FILE_HANDLE *FileHandle 285 ); 286 287typedef 288EFI_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 295typedef 296EFI_STATUS 297(EFIAPI *EFI_SHELL_REGISTER_GUID_NAME) ( 298 IN CONST EFI_GUID *Guid, 299 IN CONST CHAR16 *GuidName 300 ); 301 302typedef 303EFI_STATUS 304(EFIAPI *EFI_SHELL_REMOVE_DUP_IN_FILE_LIST) ( 305 IN EFI_SHELL_FILE_INFO **FileList 306 ); 307 308typedef 309EFI_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 317typedef 318EFI_STATUS 319(EFIAPI *EFI_SHELL_SET_CUR_DIR) ( 320 IN CONST CHAR16 *FileSystem OPTIONAL, 321 IN CONST CHAR16 *Dir 322 ); 323 324typedef 325EFI_STATUS 326(EFIAPI *EFI_SHELL_SET_ENV) ( 327 IN CONST CHAR16 *Name, 328 IN CONST CHAR16 *Value, 329 IN BOOLEAN Volatile 330 ); 331 332typedef 333EFI_STATUS 334(EFIAPI *EFI_SHELL_SET_FILE_INFO) ( 335 IN SHELL_FILE_HANDLE FileHandle, 336 IN CONST EFI_FILE_INFO *FileInfo 337 ); 338 339typedef 340EFI_STATUS 341(EFIAPI *EFI_SHELL_SET_FILE_POSITION) ( 342 IN SHELL_FILE_HANDLE FileHandle, 343 IN UINT64 Position 344 ); 345 346typedef 347EFI_STATUS 348(EFIAPI *EFI_SHELL_SET_MAP) ( 349 IN CONST EFI_DEVICE_PATH_PROTOCOL *DevicePath, 350 IN CONST CHAR16 *Mapping 351 ); 352 353typedef 354EFI_STATUS 355(EFIAPI *EFI_SHELL_WRITE_FILE) ( 356 IN SHELL_FILE_HANDLE FileHandle, 357 IN OUT UINTN *BufferSize, 358 IN VOID *Buffer 359 ); 360 361typedef 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 414INTERFACE_DECL(_EFI_SHELL_PARAMETERS_PROTOCOL); 415 416typedef 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 427INTERFACE_DECL(_EFI_SHELL_DYNAMIC_COMMAND_PROTOCOL); 428 429typedef 430SHELL_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 438typedef 439CHAR16* 440(EFIAPI *SHELL_COMMAND_GETHELP)( 441 IN struct _EFI_SHELL_DYNAMIC_COMMAND_PROTOCOL *This, 442 IN CONST CHAR8 *Language 443 ); 444 445typedef 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