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