]> git.proxmox.com Git - mirror_edk2.git/blob - MdeModulePkg/Library/FileExplorerLib/FileExplorer.h
MdeModulePkg/RamDiskDxe: Fix typo in HII message
[mirror_edk2.git] / MdeModulePkg / Library / FileExplorerLib / FileExplorer.h
1 /** @file
2 File explorer lib.
3
4 Copyright (c) 2015, Intel Corporation. All rights reserved.<BR>
5 This program and the accompanying materials
6 are licensed and made available under the terms and conditions of the BSD License
7 which accompanies this distribution. The full text of the license may be found at
8 http://opensource.org/licenses/bsd-license.php
9
10 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
11 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
12 **/
13
14 #ifndef _FILE_EXPLORER_H_
15 #define _FILE_EXPLORER_H_
16
17 #include <PiDxe.h>
18 #include <Guid/FileSystemVolumeLabelInfo.h>
19 #include <Guid/FileInfo.h>
20 #include <Guid/MdeModuleHii.h>
21
22 #include <Protocol/HiiConfigAccess.h>
23 #include <Protocol/DevicePath.h>
24 #include <Protocol/SimpleFileSystem.h>
25 #include <Protocol/DevicePathToText.h>
26 #include <Protocol/LoadFile.h>
27 #include <Protocol/FormBrowser2.h>
28
29 #include <Library/DebugLib.h>
30 #include <Library/BaseMemoryLib.h>
31 #include <Library/UefiBootServicesTableLib.h>
32 #include <Library/MemoryAllocationLib.h>
33 #include <Library/BaseLib.h>
34 #include <Library/UefiLib.h>
35 #include <Library/DevicePathLib.h>
36 #include <Library/FileExplorerLib.h>
37 #include <Library/HiiLib.h>
38 #include <Library/PrintLib.h>
39
40 #include "FormGuid.h"
41
42 #define FILE_EXPLORER_CALLBACK_DATA_SIGNATURE SIGNATURE_32 ('f', 'e', 'c', 'k')
43
44
45 #pragma pack(1)
46
47 ///
48 /// HII specific Vendor Device Path definition.
49 ///
50 typedef struct {
51 VENDOR_DEVICE_PATH VendorDevicePath;
52 EFI_DEVICE_PATH_PROTOCOL End;
53 } HII_VENDOR_DEVICE_PATH;
54
55 typedef struct {
56 EFI_HANDLE DeviceHandle;
57 EFI_DEVICE_PATH_PROTOCOL *DevicePath;
58 EFI_FILE_HANDLE FileHandle;
59 UINT16 *FileName;
60
61 BOOLEAN IsRoot;
62 BOOLEAN IsDir;
63 } FILE_CONTEXT;
64
65 typedef struct {
66 UINTN Signature;
67 LIST_ENTRY Link;
68 UINT16 *DisplayString;
69 UINT16 *HelpString;
70 EFI_STRING_ID DisplayStringToken;
71 EFI_STRING_ID HelpStringToken;
72 VOID *VariableContext;
73 } MENU_ENTRY;
74
75 typedef struct {
76 UINTN Signature;
77 LIST_ENTRY Head;
78 UINTN MenuNumber;
79 BOOLEAN Used;
80 } MENU_OPTION;
81
82 typedef struct {
83 //
84 // Shared callback data.
85 //
86 UINTN Signature;
87
88 //
89 // File explorer formset callback data.
90 //
91 EFI_HII_HANDLE FeHiiHandle;
92 EFI_HANDLE FeDriverHandle;
93 EFI_HII_CONFIG_ACCESS_PROTOCOL FeConfigAccess;
94 EFI_FORM_BROWSER2_PROTOCOL *FormBrowser2;
95 MENU_OPTION *FsOptionMenu;
96 CHAR16 *FileType;
97 CHOOSE_HANDLER ChooseHandler;
98 EFI_DEVICE_PATH_PROTOCOL *RetDevicePath;
99
100 } FILE_EXPLORER_CALLBACK_DATA;
101
102 #define FILE_EXPLORER_PRIVATE_FROM_THIS(a) CR (a, FILE_EXPLORER_CALLBACK_DATA, FeConfigAccess, FILE_EXPLORER_CALLBACK_DATA_SIGNATURE)
103
104 #pragma pack()
105
106 extern UINT8 FileExplorerVfrBin[];
107
108 #define MENU_OPTION_SIGNATURE SIGNATURE_32 ('m', 'e', 'n', 'u')
109 #define MENU_ENTRY_SIGNATURE SIGNATURE_32 ('e', 'n', 't', 'r')
110
111 ///
112 /// Define the maximum characters that will be accepted.
113 ///
114 #define MAX_CHAR 480
115 #define FILE_OPTION_OFFSET 0x8000
116 #define FILE_OPTION_MASK 0x7FFF
117
118
119 /**
120 This function processes the results of changes in configuration.
121 When user select a interactive opcode, this callback will be triggered.
122 Based on the Question(QuestionId) that triggers the callback, the corresponding
123 actions is performed. It handles:
124
125 1) the addition of boot option.
126 2) the addition of driver option.
127 3) exit from file browser
128 4) update of file content if a dir is selected.
129 5) boot the file if a file is selected in "boot from file"
130
131
132 @param This Points to the EFI_HII_CONFIG_ACCESS_PROTOCOL.
133 @param Action Specifies the type of action taken by the browser.
134 @param QuestionId A unique value which is sent to the original exporting driver
135 so that it can identify the type of data to expect.
136 @param Type The type of value for the question.
137 @param Value A pointer to the data being sent to the original exporting driver.
138 @param ActionRequest On return, points to the action requested by the callback function.
139
140 @retval EFI_SUCCESS The callback successfully handled the action.
141 @retval EFI_OUT_OF_RESOURCES Not enough storage is available to hold the variable and its data.
142 @retval EFI_DEVICE_ERROR The variable could not be saved.
143 @retval EFI_UNSUPPORTED The specified Action is not supported by the callback.
144
145 **/
146 EFI_STATUS
147 EFIAPI
148 LibCallback (
149 IN CONST EFI_HII_CONFIG_ACCESS_PROTOCOL *This,
150 IN EFI_BROWSER_ACTION Action,
151 IN EFI_QUESTION_ID QuestionId,
152 IN UINT8 Type,
153 IN EFI_IFR_TYPE_VALUE *Value,
154 OUT EFI_BROWSER_ACTION_REQUEST *ActionRequest
155 );
156
157
158 /**
159 This function allows a caller to extract the current configuration for one
160 or more named elements from the target driver.
161
162
163 @param This - Points to the EFI_HII_CONFIG_ACCESS_PROTOCOL.
164 @param Request - A null-terminated Unicode string in <ConfigRequest> format.
165 @param Progress - On return, points to a character in the Request string.
166 Points to the string's null terminator if request was successful.
167 Points to the most recent '&' before the first failing name/value
168 pair (or the beginning of the string if the failure is in the
169 first name/value pair) if the request was not successful.
170 @param Results - A null-terminated Unicode string in <ConfigAltResp> format which
171 has all values filled in for the names in the Request string.
172 String to be allocated by the called function.
173
174 @retval EFI_SUCCESS The Results is filled with the requested values.
175 @retval EFI_OUT_OF_RESOURCES Not enough memory to store the results.
176 @retval EFI_INVALID_PARAMETER Request is NULL, illegal syntax, or unknown name.
177 @retval EFI_NOT_FOUND Routing data doesn't match any storage in this driver.
178
179 **/
180 EFI_STATUS
181 EFIAPI
182 LibExtractConfig (
183 IN CONST EFI_HII_CONFIG_ACCESS_PROTOCOL *This,
184 IN CONST EFI_STRING Request,
185 OUT EFI_STRING *Progress,
186 OUT EFI_STRING *Results
187 );
188
189 /**
190 This function processes the results of changes in configuration.
191
192
193 @param This - Points to the EFI_HII_CONFIG_ACCESS_PROTOCOL.
194 @param Configuration - A null-terminated Unicode string in <ConfigResp> format.
195 @param Progress - A pointer to a string filled in with the offset of the most
196 recent '&' before the first failing name/value pair (or the
197 beginning of the string if the failure is in the first
198 name/value pair) or the terminating NULL if all was successful.
199
200 @retval EFI_SUCCESS The Results is processed successfully.
201 @retval EFI_INVALID_PARAMETER Configuration is NULL.
202 @retval EFI_NOT_FOUND Routing data doesn't match any storage in this driver.
203
204 **/
205 EFI_STATUS
206 EFIAPI
207 LibRouteConfig (
208 IN CONST EFI_HII_CONFIG_ACCESS_PROTOCOL *This,
209 IN CONST EFI_STRING Configuration,
210 OUT EFI_STRING *Progress
211 );
212
213 /**
214 Update the file explower page with the refershed file system.
215
216 @param KeyValue Key value to identify the type of data to expect.
217
218 @retval EFI_SUCCESS Update the file explorer form success.
219 @retval other errors Error occur when parse one directory.
220
221 **/
222 EFI_STATUS
223 LibUpdateFileExplorer (
224 IN UINT16 KeyValue
225 );
226
227
228 /**
229 Get the device path info saved in the menu structure.
230
231 @param KeyValue Key value to identify the type of data to expect.
232
233 **/
234 VOID
235 LibGetDevicePath (
236 IN UINT16 KeyValue
237 );
238
239 #endif