xref: /netbsd-src/sys/external/bsd/gnu-efi/dist/inc/efishell.h (revision 1eb4b21779cd330f45cea12cb60eb09e852039cb)
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 
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