]>
Commit | Line | Data |
---|---|---|
2f4dfa84 JJ |
1 | /** @file\r |
2 | Data structures for FAT recovery PEIM\r | |
3 | \r | |
8a467be1 | 4 | Copyright (c) 2006 - 2015, Intel Corporation. All rights reserved.<BR>\r |
2f4dfa84 JJ |
5 | \r |
6 | This program and the accompanying materials are licensed and made available\r | |
7 | under the terms and conditions of the BSD License which accompanies this\r | |
8 | distribution. The full text of the license may be found at\r | |
9 | http://opensource.org/licenses/bsd-license.php\r | |
10 | \r | |
11 | THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r | |
12 | WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r | |
13 | \r | |
14 | **/\r | |
15 | \r | |
16 | #ifndef _FAT_PEIM_H_\r | |
17 | #define _FAT_PEIM_H_\r | |
18 | \r | |
19 | #include <PiPei.h>\r | |
20 | \r | |
21 | #include <Guid/RecoveryDevice.h>\r | |
22 | #include <Ppi/BlockIo.h>\r | |
8a467be1 | 23 | #include <Ppi/BlockIo2.h>\r |
2f4dfa84 JJ |
24 | #include <Ppi/DeviceRecoveryModule.h>\r |
25 | \r | |
26 | #include <Library/DebugLib.h>\r | |
27 | #include <Library/BaseLib.h>\r | |
28 | #include <Library/PeimEntryPoint.h>\r | |
29 | #include <Library/BaseMemoryLib.h>\r | |
30 | #include <Library/PcdLib.h>\r | |
31 | #include <Library/PeiServicesTablePointerLib.h>\r | |
32 | #include <Library/PeiServicesLib.h>\r | |
33 | \r | |
34 | #include "FatLiteApi.h"\r | |
35 | #include "FatLiteFmt.h"\r | |
36 | \r | |
37 | //\r | |
38 | // Definitions\r | |
39 | //\r | |
40 | #define PEI_FAT_RECOVERY_CAPSULE_WITH_NT_EMULATOR L"fv0001.fv"\r | |
41 | #define PEI_FAT_RECOVERY_CAPSULE_WITHOUT_NT_EMULATOR L"fvmain.fv"\r | |
42 | \r | |
43 | #define PEI_FAT_CACHE_SIZE 4\r | |
44 | #define PEI_FAT_MAX_BLOCK_SIZE 8192\r | |
45 | #define FAT_MAX_FILE_NAME_LENGTH 128\r | |
46 | #define PEI_FAT_MAX_BLOCK_DEVICE 64\r | |
47 | #define PEI_FAT_MAX_BLOCK_IO_PPI 32\r | |
48 | #define PEI_FAT_MAX_VOLUME 64\r | |
49 | \r | |
50 | #define PEI_FAT_MEMMORY_PAGE_SIZE 0x1000\r | |
51 | \r | |
52 | //\r | |
53 | // Data Structures\r | |
54 | //\r | |
55 | //\r | |
56 | // The block device\r | |
57 | //\r | |
58 | typedef struct {\r | |
59 | \r | |
60 | UINT32 BlockSize;\r | |
61 | UINT64 LastBlock;\r | |
62 | UINT32 IoAlign;\r | |
63 | BOOLEAN Logical;\r | |
64 | BOOLEAN PartitionChecked;\r | |
65 | \r | |
66 | //\r | |
67 | // Following fields only valid for logical device\r | |
68 | //\r | |
69 | CHAR8 PartitionFlag[8];\r | |
70 | UINT64 StartingPos;\r | |
71 | UINTN ParentDevNo;\r | |
72 | \r | |
73 | //\r | |
74 | // Following fields only valid for physical device\r | |
75 | //\r | |
76 | EFI_PEI_BLOCK_DEVICE_TYPE DevType;\r | |
8a467be1 | 77 | UINT8 InterfaceType;\r |
2f4dfa84 JJ |
78 | //\r |
79 | // EFI_PEI_READ_BLOCKS ReadFunc;\r | |
80 | //\r | |
8a467be1 FT |
81 | EFI_PEI_RECOVERY_BLOCK_IO_PPI *BlockIo;\r |
82 | EFI_PEI_RECOVERY_BLOCK_IO2_PPI *BlockIo2;\r | |
83 | UINT8 PhysicalDevNo;\r | |
2f4dfa84 JJ |
84 | } PEI_FAT_BLOCK_DEVICE;\r |
85 | \r | |
86 | //\r | |
87 | // the Volume structure\r | |
88 | //\r | |
89 | typedef struct {\r | |
90 | \r | |
91 | UINTN BlockDeviceNo;\r | |
92 | UINTN VolumeNo;\r | |
93 | UINT64 VolumeSize;\r | |
94 | UINTN MaxCluster;\r | |
95 | CHAR16 VolumeLabel[FAT_MAX_FILE_NAME_LENGTH];\r | |
96 | PEI_FAT_TYPE FatType;\r | |
97 | UINT64 FatPos;\r | |
98 | UINT32 SectorSize;\r | |
99 | UINT32 ClusterSize;\r | |
100 | UINT64 FirstClusterPos;\r | |
101 | UINT64 RootDirPos;\r | |
102 | UINT32 RootEntries;\r | |
103 | UINT32 RootDirCluster;\r | |
104 | \r | |
105 | } PEI_FAT_VOLUME;\r | |
106 | \r | |
107 | //\r | |
108 | // File instance\r | |
109 | //\r | |
110 | typedef struct {\r | |
111 | \r | |
112 | PEI_FAT_VOLUME *Volume;\r | |
113 | CHAR16 FileName[FAT_MAX_FILE_NAME_LENGTH];\r | |
114 | \r | |
115 | BOOLEAN IsFixedRootDir;\r | |
116 | \r | |
117 | UINT32 StartingCluster;\r | |
118 | UINT32 CurrentPos;\r | |
119 | UINT32 StraightReadAmount;\r | |
120 | UINT32 CurrentCluster;\r | |
121 | \r | |
122 | UINT8 Attributes;\r | |
123 | UINT32 FileSize;\r | |
124 | \r | |
125 | } PEI_FAT_FILE;\r | |
126 | \r | |
127 | //\r | |
128 | // Cache Buffer\r | |
129 | //\r | |
130 | typedef struct {\r | |
131 | \r | |
132 | BOOLEAN Valid;\r | |
133 | UINTN BlockDeviceNo;\r | |
134 | UINT64 Lba;\r | |
135 | UINT32 Lru;\r | |
136 | UINT64 Buffer[PEI_FAT_MAX_BLOCK_SIZE / 8];\r | |
137 | UINTN Size;\r | |
138 | \r | |
139 | } PEI_FAT_CACHE_BUFFER;\r | |
140 | \r | |
141 | //\r | |
142 | // Private Data.\r | |
143 | // This structure abstracts the whole memory usage in FAT PEIM.\r | |
144 | // The entry point routine will get a chunk of memory (by whatever\r | |
145 | // means) whose size is sizeof(PEI_FAT_PRIVATE_DATA), which is clean\r | |
146 | // in both 32 and 64 bit environment. The boundary of the memory chunk\r | |
147 | // should be 64bit aligned.\r | |
148 | //\r | |
149 | #define PEI_FAT_PRIVATE_DATA_SIGNATURE SIGNATURE_32 ('p', 'f', 'a', 't')\r | |
150 | \r | |
151 | typedef struct {\r | |
152 | \r | |
153 | UINTN Signature;\r | |
154 | EFI_PEI_DEVICE_RECOVERY_MODULE_PPI DeviceRecoveryPpi;\r | |
155 | EFI_PEI_PPI_DESCRIPTOR PpiDescriptor;\r | |
8a467be1 | 156 | EFI_PEI_NOTIFY_DESCRIPTOR NotifyDescriptor[2];\r |
2f4dfa84 JJ |
157 | \r |
158 | UINT8 UnicodeCaseMap[0x300];\r | |
159 | CHAR8 *EngUpperMap;\r | |
160 | CHAR8 *EngLowerMap;\r | |
161 | CHAR8 *EngInfoMap;\r | |
162 | \r | |
163 | UINT64 BlockData[PEI_FAT_MAX_BLOCK_SIZE / 8];\r | |
164 | UINTN BlockDeviceCount;\r | |
165 | PEI_FAT_BLOCK_DEVICE BlockDevice[PEI_FAT_MAX_BLOCK_DEVICE];\r | |
166 | UINTN VolumeCount;\r | |
167 | PEI_FAT_VOLUME Volume[PEI_FAT_MAX_VOLUME];\r | |
168 | PEI_FAT_FILE File;\r | |
169 | PEI_FAT_CACHE_BUFFER CacheBuffer[PEI_FAT_CACHE_SIZE];\r | |
170 | \r | |
171 | } PEI_FAT_PRIVATE_DATA;\r | |
172 | \r | |
173 | #define PEI_FAT_PRIVATE_DATA_FROM_THIS(a) \\r | |
174 | CR (a, PEI_FAT_PRIVATE_DATA, DeviceRecoveryPpi, PEI_FAT_PRIVATE_DATA_SIGNATURE)\r | |
175 | \r | |
176 | //\r | |
177 | // Extract INT32 from char array\r | |
178 | //\r | |
179 | #define UNPACK_INT32(a) \\r | |
180 | (INT32) ((((UINT8 *) a)[0] << 0) | (((UINT8 *) a)[1] << 8) | (((UINT8 *) a)[2] << 16) | (((UINT8 *) a)[3] << 24))\r | |
181 | \r | |
182 | //\r | |
183 | // Extract UINT32 from char array\r | |
184 | //\r | |
185 | #define UNPACK_UINT32(a) \\r | |
186 | (UINT32) ((((UINT8 *) a)[0] << 0) | (((UINT8 *) a)[1] << 8) | (((UINT8 *) a)[2] << 16) | (((UINT8 *) a)[3] << 24))\r | |
187 | \r | |
188 | \r | |
189 | //\r | |
190 | // API functions\r | |
191 | //\r | |
192 | \r | |
193 | /**\r | |
194 | Finds the recovery file on a FAT volume.\r | |
195 | This function finds the the recovery file named FileName on a specified FAT volume and returns\r | |
196 | its FileHandle pointer.\r | |
197 | \r | |
198 | @param PrivateData Global memory map for accessing global \r | |
199 | variables. \r | |
200 | @param VolumeIndex The index of the volume. \r | |
201 | @param FileName The recovery file name to find. \r | |
202 | @param Handle The output file handle. \r | |
203 | \r | |
204 | @retval EFI_DEVICE_ERROR Some error occured when operating the FAT \r | |
205 | volume. \r | |
206 | @retval EFI_NOT_FOUND The recovery file was not found. \r | |
207 | @retval EFI_SUCCESS The recovery file was successfully found on the \r | |
208 | FAT volume.\r | |
209 | \r | |
210 | **/\r | |
211 | EFI_STATUS\r | |
212 | FindRecoveryFile (\r | |
213 | IN PEI_FAT_PRIVATE_DATA *PrivateData,\r | |
214 | IN UINTN VolumeIndex,\r | |
215 | IN CHAR16 *FileName,\r | |
216 | OUT PEI_FILE_HANDLE *Handle\r | |
217 | );\r | |
218 | \r | |
219 | \r | |
220 | /**\r | |
221 | Returns the number of DXE capsules residing on the device.\r | |
222 | This function, by whatever mechanism, searches for DXE capsules from the associated device and\r | |
223 | returns the number and maximum size in bytes of the capsules discovered.Entry 1 is assumed to be\r | |
224 | the highest load priority and entry N is assumed to be the lowest priority.\r | |
225 | \r | |
226 | @param PeiServices General-purpose services that are available to \r | |
227 | every PEIM. \r | |
228 | @param This Indicates the \r | |
229 | EFI_PEI_DEVICE_RECOVERY_MODULE_PPI instance. \r | |
230 | @param NumberRecoveryCapsules Pointer to a caller-allocated UINTN.On output, \r | |
231 | *NumberRecoveryCapsules contains the number of \r | |
232 | recovery capsule images available for retrieval \r | |
233 | from this PEIM instance. \r | |
234 | \r | |
235 | @retval EFI_SUCCESS The function completed successfully.\r | |
236 | \r | |
237 | **/\r | |
238 | EFI_STATUS\r | |
239 | EFIAPI\r | |
240 | GetNumberRecoveryCapsules (\r | |
241 | IN EFI_PEI_SERVICES **PeiServices,\r | |
242 | IN EFI_PEI_DEVICE_RECOVERY_MODULE_PPI *This,\r | |
243 | OUT UINTN *NumberRecoveryCapsules\r | |
244 | );\r | |
245 | \r | |
246 | \r | |
247 | /**\r | |
248 | Returns the size and type of the requested recovery capsule.\r | |
249 | This function returns the size and type of the capsule specified by CapsuleInstance.\r | |
250 | \r | |
251 | @param PeiServices General-purpose services that are available to \r | |
252 | every PEIM. \r | |
253 | @param This Indicates the \r | |
254 | EFI_PEI_DEVICE_RECOVERY_MODULE_PPI instance. \r | |
255 | @param CapsuleInstance Specifies for which capsule instance to \r | |
256 | retrieve the information.T his parameter must \r | |
257 | be between one and the value returned by \r | |
258 | GetNumberRecoveryCapsules() in \r | |
259 | NumberRecoveryCapsules. \r | |
260 | @param Size A pointer to a caller-allocated UINTN in which \r | |
261 | the size of the requested recovery module is \r | |
262 | returned. \r | |
263 | @param CapsuleType A pointer to a caller-allocated EFI_GUID in \r | |
264 | which the type of the requested recovery \r | |
265 | capsule is returned.T he semantic meaning of \r | |
266 | the value returned is defined by the \r | |
267 | implementation. \r | |
268 | \r | |
269 | @retval EFI_SUCCESS The capsule type and size were retrieved. \r | |
270 | @retval EFI_INVALID_PARAMETER The input CapsuleInstance does not match any \r | |
271 | discovered recovery capsule.\r | |
272 | \r | |
273 | **/\r | |
274 | EFI_STATUS\r | |
275 | EFIAPI\r | |
276 | GetRecoveryCapsuleInfo (\r | |
277 | IN EFI_PEI_SERVICES **PeiServices,\r | |
278 | IN EFI_PEI_DEVICE_RECOVERY_MODULE_PPI *This,\r | |
279 | IN UINTN CapsuleInstance,\r | |
280 | OUT UINTN *Size,\r | |
281 | OUT EFI_GUID *CapsuleType\r | |
282 | );\r | |
283 | \r | |
284 | \r | |
285 | /**\r | |
286 | Loads a DXE capsule from some media into memory.\r | |
287 | \r | |
288 | This function, by whatever mechanism, retrieves a DXE capsule from some device\r | |
289 | and loads it into memory. Note that the published interface is device neutral.\r | |
290 | \r | |
291 | @param[in] PeiServices General-purpose services that are available \r | |
292 | to every PEIM\r | |
293 | @param[in] This Indicates the EFI_PEI_DEVICE_RECOVERY_MODULE_PPI\r | |
294 | instance.\r | |
295 | @param[in] CapsuleInstance Specifies which capsule instance to retrieve.\r | |
296 | @param[out] Buffer Specifies a caller-allocated buffer in which \r | |
297 | the requested recovery capsule will be returned.\r | |
298 | \r | |
299 | @retval EFI_SUCCESS The capsule was loaded correctly.\r | |
300 | @retval EFI_DEVICE_ERROR A device error occurred.\r | |
301 | @retval EFI_NOT_FOUND A requested recovery DXE capsule cannot be found.\r | |
302 | \r | |
303 | **/\r | |
304 | EFI_STATUS\r | |
305 | EFIAPI\r | |
306 | LoadRecoveryCapsule (\r | |
307 | IN EFI_PEI_SERVICES **PeiServices,\r | |
308 | IN EFI_PEI_DEVICE_RECOVERY_MODULE_PPI *This,\r | |
309 | IN UINTN CapsuleInstance,\r | |
310 | OUT VOID *Buffer\r | |
311 | );\r | |
312 | \r | |
313 | \r | |
314 | /**\r | |
315 | This version is different from the version in Unicode collation\r | |
316 | protocol in that this version strips off trailing blanks.\r | |
317 | Converts an 8.3 FAT file name using an OEM character set\r | |
318 | to a Null-terminated Unicode string.\r | |
319 | Here does not expand DBCS FAT chars.\r | |
320 | \r | |
321 | @param FatSize The size of the string Fat in bytes. \r | |
322 | @param Fat A pointer to a Null-terminated string that contains \r | |
323 | an 8.3 file name using an OEM character set. \r | |
324 | @param Str A pointer to a Null-terminated Unicode string. The \r | |
325 | string must be allocated in advance to hold FatSize \r | |
326 | Unicode characters\r | |
327 | \r | |
328 | **/\r | |
329 | VOID\r | |
330 | EngFatToStr (\r | |
331 | IN UINTN FatSize,\r | |
332 | IN CHAR8 *Fat,\r | |
333 | OUT CHAR16 *Str\r | |
334 | );\r | |
335 | \r | |
336 | \r | |
337 | /**\r | |
338 | Performs a case-insensitive comparison of two Null-terminated Unicode strings.\r | |
339 | \r | |
340 | @param PrivateData Global memory map for accessing global variables \r | |
341 | @param Str1 First string to perform case insensitive comparison. \r | |
342 | @param Str2 Second string to perform case insensitive comparison.\r | |
343 | \r | |
344 | **/\r | |
345 | BOOLEAN\r | |
346 | EngStriColl (\r | |
347 | IN PEI_FAT_PRIVATE_DATA *PrivateData,\r | |
348 | IN CHAR16 *Str1,\r | |
349 | IN CHAR16 *Str2\r | |
350 | );\r | |
351 | \r | |
352 | \r | |
353 | /**\r | |
354 | Reads a block of data from the block device by calling\r | |
355 | underlying Block I/O service.\r | |
356 | \r | |
357 | @param PrivateData Global memory map for accessing global variables \r | |
358 | @param BlockDeviceNo The index for the block device number. \r | |
359 | @param Lba The logic block address to read data from. \r | |
360 | @param BufferSize The size of data in byte to read. \r | |
361 | @param Buffer The buffer of the \r | |
362 | \r | |
363 | @retval EFI_DEVICE_ERROR The specified block device number exceeds the maximum \r | |
364 | device number. \r | |
365 | @retval EFI_DEVICE_ERROR The maximum address has exceeded the maximum address \r | |
366 | of the block device.\r | |
367 | \r | |
368 | **/\r | |
369 | EFI_STATUS\r | |
370 | FatReadBlock (\r | |
371 | IN PEI_FAT_PRIVATE_DATA *PrivateData,\r | |
372 | IN UINTN BlockDeviceNo,\r | |
373 | IN EFI_PEI_LBA Lba,\r | |
374 | IN UINTN BufferSize,\r | |
375 | OUT VOID *Buffer\r | |
376 | );\r | |
377 | \r | |
378 | \r | |
379 | /**\r | |
380 | Check if there is a valid FAT in the corresponding Block device\r | |
381 | of the volume and if yes, fill in the relevant fields for the\r | |
382 | volume structure. Note there should be a valid Block device number\r | |
383 | already set.\r | |
384 | \r | |
385 | @param PrivateData Global memory map for accessing global \r | |
386 | variables. \r | |
387 | @param Volume On input, the BlockDeviceNumber field of the \r | |
388 | Volume should be a valid value. On successful \r | |
389 | output, all fields except the VolumeNumber \r | |
390 | field is initialized. \r | |
391 | \r | |
392 | @retval EFI_SUCCESS A FAT is found and the volume structure is \r | |
393 | initialized. \r | |
394 | @retval EFI_NOT_FOUND There is no FAT on the corresponding device. \r | |
395 | @retval EFI_DEVICE_ERROR There is something error while accessing device.\r | |
396 | \r | |
397 | **/\r | |
398 | EFI_STATUS\r | |
399 | FatGetBpbInfo (\r | |
400 | IN PEI_FAT_PRIVATE_DATA *PrivateData,\r | |
401 | IN OUT PEI_FAT_VOLUME *Volume\r | |
402 | );\r | |
403 | \r | |
404 | \r | |
405 | /**\r | |
406 | Gets the next cluster in the cluster chain.\r | |
407 | \r | |
408 | @param PrivateData Global memory map for accessing global variables \r | |
409 | @param Volume The volume \r | |
410 | @param Cluster The cluster \r | |
411 | @param NextCluster The cluster number of the next cluster \r | |
412 | \r | |
413 | @retval EFI_SUCCESS The address is got \r | |
414 | @retval EFI_INVALID_PARAMETER ClusterNo exceeds the MaxCluster of the volume. \r | |
415 | @retval EFI_DEVICE_ERROR Read disk error\r | |
416 | \r | |
417 | **/\r | |
418 | EFI_STATUS\r | |
419 | FatGetNextCluster (\r | |
420 | IN PEI_FAT_PRIVATE_DATA *PrivateData,\r | |
421 | IN PEI_FAT_VOLUME *Volume,\r | |
422 | IN UINT32 Cluster,\r | |
423 | OUT UINT32 *NextCluster\r | |
424 | );\r | |
425 | \r | |
426 | \r | |
427 | /**\r | |
428 | Disk reading.\r | |
429 | \r | |
430 | @param PrivateData the global memory map; \r | |
431 | @param BlockDeviceNo the block device to read; \r | |
432 | @param StartingAddress the starting address. \r | |
433 | @param Size the amount of data to read. \r | |
434 | @param Buffer the buffer holding the data \r | |
435 | \r | |
436 | @retval EFI_SUCCESS The function completed successfully.\r | |
437 | @retval EFI_DEVICE_ERROR Something error.\r | |
438 | \r | |
439 | **/\r | |
440 | EFI_STATUS\r | |
441 | FatReadDisk (\r | |
442 | IN PEI_FAT_PRIVATE_DATA *PrivateData,\r | |
443 | IN UINTN BlockDeviceNo,\r | |
444 | IN UINT64 StartingAddress,\r | |
445 | IN UINTN Size,\r | |
446 | OUT VOID *Buffer\r | |
447 | );\r | |
448 | \r | |
449 | \r | |
450 | /**\r | |
451 | Set a file's CurrentPos and CurrentCluster, then compute StraightReadAmount.\r | |
452 | \r | |
453 | @param PrivateData the global memory map \r | |
454 | @param File the file \r | |
455 | @param Pos the Position which is offset from the file's \r | |
456 | CurrentPos \r | |
457 | \r | |
458 | @retval EFI_SUCCESS Success. \r | |
459 | @retval EFI_INVALID_PARAMETER Pos is beyond file's size. \r | |
460 | @retval EFI_DEVICE_ERROR Something error while accessing media.\r | |
461 | \r | |
462 | **/\r | |
463 | EFI_STATUS\r | |
464 | FatSetFilePos (\r | |
465 | IN PEI_FAT_PRIVATE_DATA *PrivateData,\r | |
466 | IN PEI_FAT_FILE *File,\r | |
467 | IN UINT32 Pos\r | |
468 | );\r | |
469 | \r | |
470 | \r | |
471 | /**\r | |
472 | Reads file data. Updates the file's CurrentPos.\r | |
473 | \r | |
474 | @param PrivateData Global memory map for accessing global variables \r | |
475 | @param File The file. \r | |
476 | @param Size The amount of data to read. \r | |
477 | @param Buffer The buffer storing the data. \r | |
478 | \r | |
479 | @retval EFI_SUCCESS The data is read. \r | |
480 | @retval EFI_INVALID_PARAMETER File is invalid. \r | |
481 | @retval EFI_DEVICE_ERROR Something error while accessing media.\r | |
482 | \r | |
483 | **/\r | |
484 | EFI_STATUS\r | |
485 | FatReadFile (\r | |
486 | IN PEI_FAT_PRIVATE_DATA *PrivateData,\r | |
487 | IN PEI_FAT_FILE *File,\r | |
488 | IN UINTN Size,\r | |
489 | OUT VOID *Buffer\r | |
490 | );\r | |
491 | \r | |
492 | \r | |
493 | /**\r | |
494 | This function reads the next item in the parent directory and\r | |
495 | initializes the output parameter SubFile (CurrentPos is initialized to 0).\r | |
496 | The function updates the CurrentPos of the parent dir to after the item read.\r | |
497 | If no more items were found, the function returns EFI_NOT_FOUND.\r | |
498 | \r | |
499 | @param PrivateData Global memory map for accessing global variables \r | |
500 | @param ParentDir The parent directory. \r | |
501 | @param SubFile The File structure containing the sub file that \r | |
502 | is caught. \r | |
503 | \r | |
504 | @retval EFI_SUCCESS The next sub file is obtained. \r | |
505 | @retval EFI_INVALID_PARAMETER The ParentDir is not a directory. \r | |
506 | @retval EFI_NOT_FOUND No more sub file exists. \r | |
507 | @retval EFI_DEVICE_ERROR Something error while accessing media.\r | |
508 | \r | |
509 | **/\r | |
510 | EFI_STATUS\r | |
511 | FatReadNextDirectoryEntry (\r | |
512 | IN PEI_FAT_PRIVATE_DATA *PrivateData,\r | |
513 | IN PEI_FAT_FILE *ParentDir,\r | |
514 | OUT PEI_FAT_FILE *SubFile\r | |
515 | );\r | |
516 | \r | |
517 | \r | |
518 | /**\r | |
519 | This function finds partitions (logical devices) in physical block devices.\r | |
520 | \r | |
521 | @param PrivateData Global memory map for accessing global variables.\r | |
522 | \r | |
523 | **/\r | |
524 | VOID\r | |
525 | FatFindPartitions (\r | |
526 | IN PEI_FAT_PRIVATE_DATA *PrivateData\r | |
527 | );\r | |
528 | \r | |
529 | #endif // _FAT_PEIM_H_\r |