• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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
240