efishell.h revision 1.1 1 /* $NetBSD: efishell.h,v 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