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