1 /** @file 2 SimpleFileSystem protocol as defined in the UEFI 2.0 specification. 3 4 The SimpleFileSystem protocol is the programmatic access to the FAT (12,16,32) 5 file system specified in UEFI 2.0. It can also be used to abstract a file 6 system other than FAT. 7 8 UEFI 2.0 can boot from any valid EFI image contained in a SimpleFileSystem. 9 10 Copyright (c) 2006 - 2014, Intel Corporation. All rights reserved.<BR> 11 This program and the accompanying materials are licensed and made available under 12 the terms and conditions of the BSD License that accompanies this distribution. 13 The full text of the license may be found at 14 http://opensource.org/licenses/bsd-license.php. 15 16 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, 17 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. 18 19 **/ 20 21 #ifndef __SIMPLE_FILE_SYSTEM_H__ 22 #define __SIMPLE_FILE_SYSTEM_H__ 23 24 FILE_LICENCE ( BSD3 ); 25 26 #define EFI_SIMPLE_FILE_SYSTEM_PROTOCOL_GUID \ 27 { \ 28 0x964e5b22, 0x6459, 0x11d2, {0x8e, 0x39, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b } \ 29 } 30 31 typedef struct _EFI_SIMPLE_FILE_SYSTEM_PROTOCOL EFI_SIMPLE_FILE_SYSTEM_PROTOCOL; 32 33 typedef struct _EFI_FILE_PROTOCOL EFI_FILE_PROTOCOL; 34 typedef struct _EFI_FILE_PROTOCOL *EFI_FILE_HANDLE; 35 36 /// 37 /// Protocol GUID name defined in EFI1.1. 38 /// 39 #define SIMPLE_FILE_SYSTEM_PROTOCOL EFI_SIMPLE_FILE_SYSTEM_PROTOCOL_GUID 40 41 /// 42 /// Protocol name defined in EFI1.1. 43 /// 44 typedef EFI_SIMPLE_FILE_SYSTEM_PROTOCOL EFI_FILE_IO_INTERFACE; 45 typedef EFI_FILE_PROTOCOL EFI_FILE; 46 47 /** 48 Open the root directory on a volume. 49 50 @param This A pointer to the volume to open the root directory. 51 @param Root A pointer to the location to return the opened file handle for the 52 root directory. 53 54 @retval EFI_SUCCESS The device was opened. 55 @retval EFI_UNSUPPORTED This volume does not support the requested file system type. 56 @retval EFI_NO_MEDIA The device has no medium. 57 @retval EFI_DEVICE_ERROR The device reported an error. 58 @retval EFI_VOLUME_CORRUPTED The file system structures are corrupted. 59 @retval EFI_ACCESS_DENIED The service denied access to the file. 60 @retval EFI_OUT_OF_RESOURCES The volume was not opened due to lack of resources. 61 @retval EFI_MEDIA_CHANGED The device has a different medium in it or the medium is no 62 longer supported. Any existing file handles for this volume are 63 no longer valid. To access the files on the new medium, the 64 volume must be reopened with OpenVolume(). 65 66 **/ 67 typedef 68 EFI_STATUS 69 (EFIAPI *EFI_SIMPLE_FILE_SYSTEM_PROTOCOL_OPEN_VOLUME)( 70 IN EFI_SIMPLE_FILE_SYSTEM_PROTOCOL *This, 71 OUT EFI_FILE_PROTOCOL **Root 72 ); 73 74 #define EFI_SIMPLE_FILE_SYSTEM_PROTOCOL_REVISION 0x00010000 75 76 /// 77 /// Revision defined in EFI1.1 78 /// 79 #define EFI_FILE_IO_INTERFACE_REVISION EFI_SIMPLE_FILE_SYSTEM_PROTOCOL_REVISION 80 81 struct _EFI_SIMPLE_FILE_SYSTEM_PROTOCOL { 82 /// 83 /// The version of the EFI_SIMPLE_FILE_SYSTEM_PROTOCOL. The version 84 /// specified by this specification is 0x00010000. All future revisions 85 /// must be backwards compatible. 86 /// 87 UINT64 Revision; 88 EFI_SIMPLE_FILE_SYSTEM_PROTOCOL_OPEN_VOLUME OpenVolume; 89 }; 90 91 /** 92 Opens a new file relative to the source file's location. 93 94 @param This A pointer to the EFI_FILE_PROTOCOL instance that is the file 95 handle to the source location. This would typically be an open 96 handle to a directory. 97 @param NewHandle A pointer to the location to return the opened handle for the new 98 file. 99 @param FileName The Null-terminated string of the name of the file to be opened. 100 The file name may contain the following path modifiers: "\", ".", 101 and "..". 102 @param OpenMode The mode to open the file. The only valid combinations that the 103 file may be opened with are: Read, Read/Write, or Create/Read/Write. 104 @param Attributes Only valid for EFI_FILE_MODE_CREATE, in which case these are the 105 attribute bits for the newly created file. 106 107 @retval EFI_SUCCESS The file was opened. 108 @retval EFI_NOT_FOUND The specified file could not be found on the device. 109 @retval EFI_NO_MEDIA The device has no medium. 110 @retval EFI_MEDIA_CHANGED The device has a different medium in it or the medium is no 111 longer supported. 112 @retval EFI_DEVICE_ERROR The device reported an error. 113 @retval EFI_VOLUME_CORRUPTED The file system structures are corrupted. 114 @retval EFI_WRITE_PROTECTED An attempt was made to create a file, or open a file for write 115 when the media is write-protected. 116 @retval EFI_ACCESS_DENIED The service denied access to the file. 117 @retval EFI_OUT_OF_RESOURCES Not enough resources were available to open the file. 118 @retval EFI_VOLUME_FULL The volume is full. 119 120 **/ 121 typedef 122 EFI_STATUS 123 (EFIAPI *EFI_FILE_OPEN)( 124 IN EFI_FILE_PROTOCOL *This, 125 OUT EFI_FILE_PROTOCOL **NewHandle, 126 IN CHAR16 *FileName, 127 IN UINT64 OpenMode, 128 IN UINT64 Attributes 129 ); 130 131 // 132 // Open modes 133 // 134 #define EFI_FILE_MODE_READ 0x0000000000000001ULL 135 #define EFI_FILE_MODE_WRITE 0x0000000000000002ULL 136 #define EFI_FILE_MODE_CREATE 0x8000000000000000ULL 137 138 // 139 // File attributes 140 // 141 #define EFI_FILE_READ_ONLY 0x0000000000000001ULL 142 #define EFI_FILE_HIDDEN 0x0000000000000002ULL 143 #define EFI_FILE_SYSTEM 0x0000000000000004ULL 144 #define EFI_FILE_RESERVED 0x0000000000000008ULL 145 #define EFI_FILE_DIRECTORY 0x0000000000000010ULL 146 #define EFI_FILE_ARCHIVE 0x0000000000000020ULL 147 #define EFI_FILE_VALID_ATTR 0x0000000000000037ULL 148 149 /** 150 Closes a specified file handle. 151 152 @param This A pointer to the EFI_FILE_PROTOCOL instance that is the file 153 handle to close. 154 155 @retval EFI_SUCCESS The file was closed. 156 157 **/ 158 typedef 159 EFI_STATUS 160 (EFIAPI *EFI_FILE_CLOSE)( 161 IN EFI_FILE_PROTOCOL *This 162 ); 163 164 /** 165 Close and delete the file handle. 166 167 @param This A pointer to the EFI_FILE_PROTOCOL instance that is the 168 handle to the file to delete. 169 170 @retval EFI_SUCCESS The file was closed and deleted, and the handle was closed. 171 @retval EFI_WARN_DELETE_FAILURE The handle was closed, but the file was not deleted. 172 173 **/ 174 typedef 175 EFI_STATUS 176 (EFIAPI *EFI_FILE_DELETE)( 177 IN EFI_FILE_PROTOCOL *This 178 ); 179 180 /** 181 Reads data from a file. 182 183 @param This A pointer to the EFI_FILE_PROTOCOL instance that is the file 184 handle to read data from. 185 @param BufferSize On input, the size of the Buffer. On output, the amount of data 186 returned in Buffer. In both cases, the size is measured in bytes. 187 @param Buffer The buffer into which the data is read. 188 189 @retval EFI_SUCCESS Data was read. 190 @retval EFI_NO_MEDIA The device has no medium. 191 @retval EFI_DEVICE_ERROR The device reported an error. 192 @retval EFI_DEVICE_ERROR An attempt was made to read from a deleted file. 193 @retval EFI_DEVICE_ERROR On entry, the current file position is beyond the end of the file. 194 @retval EFI_VOLUME_CORRUPTED The file system structures are corrupted. 195 @retval EFI_BUFFER_TOO_SMALL The BufferSize is too small to read the current directory 196 entry. BufferSize has been updated with the size 197 needed to complete the request. 198 199 **/ 200 typedef 201 EFI_STATUS 202 (EFIAPI *EFI_FILE_READ)( 203 IN EFI_FILE_PROTOCOL *This, 204 IN OUT UINTN *BufferSize, 205 OUT VOID *Buffer 206 ); 207 208 /** 209 Writes data to a file. 210 211 @param This A pointer to the EFI_FILE_PROTOCOL instance that is the file 212 handle to write data to. 213 @param BufferSize On input, the size of the Buffer. On output, the amount of data 214 actually written. In both cases, the size is measured in bytes. 215 @param Buffer The buffer of data to write. 216 217 @retval EFI_SUCCESS Data was written. 218 @retval EFI_UNSUPPORTED Writes to open directory files are not supported. 219 @retval EFI_NO_MEDIA The device has no medium. 220 @retval EFI_DEVICE_ERROR The device reported an error. 221 @retval EFI_DEVICE_ERROR An attempt was made to write to a deleted file. 222 @retval EFI_VOLUME_CORRUPTED The file system structures are corrupted. 223 @retval EFI_WRITE_PROTECTED The file or medium is write-protected. 224 @retval EFI_ACCESS_DENIED The file was opened read only. 225 @retval EFI_VOLUME_FULL The volume is full. 226 227 **/ 228 typedef 229 EFI_STATUS 230 (EFIAPI *EFI_FILE_WRITE)( 231 IN EFI_FILE_PROTOCOL *This, 232 IN OUT UINTN *BufferSize, 233 IN VOID *Buffer 234 ); 235 236 /** 237 Sets a file's current position. 238 239 @param This A pointer to the EFI_FILE_PROTOCOL instance that is the 240 file handle to set the requested position on. 241 @param Position The byte position from the start of the file to set. 242 243 @retval EFI_SUCCESS The position was set. 244 @retval EFI_UNSUPPORTED The seek request for nonzero is not valid on open 245 directories. 246 @retval EFI_DEVICE_ERROR An attempt was made to set the position of a deleted file. 247 248 **/ 249 typedef 250 EFI_STATUS 251 (EFIAPI *EFI_FILE_SET_POSITION)( 252 IN EFI_FILE_PROTOCOL *This, 253 IN UINT64 Position 254 ); 255 256 /** 257 Returns a file's current position. 258 259 @param This A pointer to the EFI_FILE_PROTOCOL instance that is the file 260 handle to get the current position on. 261 @param Position The address to return the file's current position value. 262 263 @retval EFI_SUCCESS The position was returned. 264 @retval EFI_UNSUPPORTED The request is not valid on open directories. 265 @retval EFI_DEVICE_ERROR An attempt was made to get the position from a deleted file. 266 267 **/ 268 typedef 269 EFI_STATUS 270 (EFIAPI *EFI_FILE_GET_POSITION)( 271 IN EFI_FILE_PROTOCOL *This, 272 OUT UINT64 *Position 273 ); 274 275 /** 276 Returns information about a file. 277 278 @param This A pointer to the EFI_FILE_PROTOCOL instance that is the file 279 handle the requested information is for. 280 @param InformationType The type identifier for the information being requested. 281 @param BufferSize On input, the size of Buffer. On output, the amount of data 282 returned in Buffer. In both cases, the size is measured in bytes. 283 @param Buffer A pointer to the data buffer to return. The buffer's type is 284 indicated by InformationType. 285 286 @retval EFI_SUCCESS The information was returned. 287 @retval EFI_UNSUPPORTED The InformationType is not known. 288 @retval EFI_NO_MEDIA The device has no medium. 289 @retval EFI_DEVICE_ERROR The device reported an error. 290 @retval EFI_VOLUME_CORRUPTED The file system structures are corrupted. 291 @retval EFI_BUFFER_TOO_SMALL The BufferSize is too small to read the current directory entry. 292 BufferSize has been updated with the size needed to complete 293 the request. 294 **/ 295 typedef 296 EFI_STATUS 297 (EFIAPI *EFI_FILE_GET_INFO)( 298 IN EFI_FILE_PROTOCOL *This, 299 IN EFI_GUID *InformationType, 300 IN OUT UINTN *BufferSize, 301 OUT VOID *Buffer 302 ); 303 304 /** 305 Sets information about a file. 306 307 @param File A pointer to the EFI_FILE_PROTOCOL instance that is the file 308 handle the information is for. 309 @param InformationType The type identifier for the information being set. 310 @param BufferSize The size, in bytes, of Buffer. 311 @param Buffer A pointer to the data buffer to write. The buffer's type is 312 indicated by InformationType. 313 314 @retval EFI_SUCCESS The information was set. 315 @retval EFI_UNSUPPORTED The InformationType is not known. 316 @retval EFI_NO_MEDIA The device has no medium. 317 @retval EFI_DEVICE_ERROR The device reported an error. 318 @retval EFI_VOLUME_CORRUPTED The file system structures are corrupted. 319 @retval EFI_WRITE_PROTECTED InformationType is EFI_FILE_INFO_ID and the media is 320 read-only. 321 @retval EFI_WRITE_PROTECTED InformationType is EFI_FILE_PROTOCOL_SYSTEM_INFO_ID 322 and the media is read only. 323 @retval EFI_WRITE_PROTECTED InformationType is EFI_FILE_SYSTEM_VOLUME_LABEL_ID 324 and the media is read-only. 325 @retval EFI_ACCESS_DENIED An attempt is made to change the name of a file to a 326 file that is already present. 327 @retval EFI_ACCESS_DENIED An attempt is being made to change the EFI_FILE_DIRECTORY 328 Attribute. 329 @retval EFI_ACCESS_DENIED An attempt is being made to change the size of a directory. 330 @retval EFI_ACCESS_DENIED InformationType is EFI_FILE_INFO_ID and the file was opened 331 read-only and an attempt is being made to modify a field 332 other than Attribute. 333 @retval EFI_VOLUME_FULL The volume is full. 334 @retval EFI_BAD_BUFFER_SIZE BufferSize is smaller than the size of the type indicated 335 by InformationType. 336 337 **/ 338 typedef 339 EFI_STATUS 340 (EFIAPI *EFI_FILE_SET_INFO)( 341 IN EFI_FILE_PROTOCOL *This, 342 IN EFI_GUID *InformationType, 343 IN UINTN BufferSize, 344 IN VOID *Buffer 345 ); 346 347 /** 348 Flushes all modified data associated with a file to a device. 349 350 @param This A pointer to the EFI_FILE_PROTOCOL instance that is the file 351 handle to flush. 352 353 @retval EFI_SUCCESS The data was flushed. 354 @retval EFI_NO_MEDIA The device has no medium. 355 @retval EFI_DEVICE_ERROR The device reported an error. 356 @retval EFI_VOLUME_CORRUPTED The file system structures are corrupted. 357 @retval EFI_WRITE_PROTECTED The file or medium is write-protected. 358 @retval EFI_ACCESS_DENIED The file was opened read-only. 359 @retval EFI_VOLUME_FULL The volume is full. 360 361 **/ 362 typedef 363 EFI_STATUS 364 (EFIAPI *EFI_FILE_FLUSH)( 365 IN EFI_FILE_PROTOCOL *This 366 ); 367 368 typedef struct { 369 // 370 // If Event is NULL, then blocking I/O is performed. 371 // If Event is not NULL and non-blocking I/O is supported, then non-blocking I/O is performed, 372 // and Event will be signaled when the read request is completed. 373 // The caller must be prepared to handle the case where the callback associated with Event 374 // occurs before the original asynchronous I/O request call returns. 375 // 376 EFI_EVENT Event; 377 378 // 379 // Defines whether or not the signaled event encountered an error. 380 // 381 EFI_STATUS Status; 382 383 // 384 // For OpenEx(): Not Used, ignored. 385 // For ReadEx(): On input, the size of the Buffer. On output, the amount of data returned in Buffer. 386 // In both cases, the size is measured in bytes. 387 // For WriteEx(): On input, the size of the Buffer. On output, the amount of data actually written. 388 // In both cases, the size is measured in bytes. 389 // For FlushEx(): Not used, ignored. 390 // 391 UINTN BufferSize; 392 393 // 394 // For OpenEx(): Not Used, ignored. 395 // For ReadEx(): The buffer into which the data is read. 396 // For WriteEx(): The buffer of data to write. 397 // For FlushEx(): Not Used, ignored. 398 // 399 VOID *Buffer; 400 } EFI_FILE_IO_TOKEN; 401 402 /** 403 Opens a new file relative to the source directory's location. 404 405 @param This A pointer to the EFI_FILE_PROTOCOL instance that is the file 406 handle to the source location. 407 @param NewHandle A pointer to the location to return the opened handle for the new 408 file. 409 @param FileName The Null-terminated string of the name of the file to be opened. 410 The file name may contain the following path modifiers: "\", ".", 411 and "..". 412 @param OpenMode The mode to open the file. The only valid combinations that the 413 file may be opened with are: Read, Read/Write, or Create/Read/Write. 414 @param Attributes Only valid for EFI_FILE_MODE_CREATE, in which case these are the 415 attribute bits for the newly created file. 416 @param Token A pointer to the token associated with the transaction. 417 418 @retval EFI_SUCCESS If Event is NULL (blocking I/O): The data was read successfully. 419 If Event is not NULL (asynchronous I/O): The request was successfully 420 queued for processing. 421 @retval EFI_NOT_FOUND The specified file could not be found on the device. 422 @retval EFI_NO_MEDIA The device has no medium. 423 @retval EFI_MEDIA_CHANGED The device has a different medium in it or the medium is no 424 longer supported. 425 @retval EFI_DEVICE_ERROR The device reported an error. 426 @retval EFI_VOLUME_CORRUPTED The file system structures are corrupted. 427 @retval EFI_WRITE_PROTECTED An attempt was made to create a file, or open a file for write 428 when the media is write-protected. 429 @retval EFI_ACCESS_DENIED The service denied access to the file. 430 @retval EFI_OUT_OF_RESOURCES Not enough resources were available to open the file. 431 @retval EFI_VOLUME_FULL The volume is full. 432 433 **/ 434 typedef 435 EFI_STATUS 436 (EFIAPI *EFI_FILE_OPEN_EX)( 437 IN EFI_FILE_PROTOCOL *This, 438 OUT EFI_FILE_PROTOCOL **NewHandle, 439 IN CHAR16 *FileName, 440 IN UINT64 OpenMode, 441 IN UINT64 Attributes, 442 IN OUT EFI_FILE_IO_TOKEN *Token 443 ); 444 445 446 /** 447 Reads data from a file. 448 449 @param This A pointer to the EFI_FILE_PROTOCOL instance that is the file handle to read data from. 450 @param Token A pointer to the token associated with the transaction. 451 452 @retval EFI_SUCCESS If Event is NULL (blocking I/O): The data was read successfully. 453 If Event is not NULL (asynchronous I/O): The request was successfully 454 queued for processing. 455 @retval EFI_NO_MEDIA The device has no medium. 456 @retval EFI_DEVICE_ERROR The device reported an error. 457 @retval EFI_DEVICE_ERROR An attempt was made to read from a deleted file. 458 @retval EFI_DEVICE_ERROR On entry, the current file position is beyond the end of the file. 459 @retval EFI_VOLUME_CORRUPTED The file system structures are corrupted. 460 @retval EFI_OUT_OF_RESOURCES Unable to queue the request due to lack of resources. 461 **/ 462 typedef 463 EFI_STATUS 464 (EFIAPI *EFI_FILE_READ_EX) ( 465 IN EFI_FILE_PROTOCOL *This, 466 IN OUT EFI_FILE_IO_TOKEN *Token 467 ); 468 469 470 /** 471 Writes data to a file. 472 473 @param This A pointer to the EFI_FILE_PROTOCOL instance that is the file handle to write data to. 474 @param Token A pointer to the token associated with the transaction. 475 476 @retval EFI_SUCCESS If Event is NULL (blocking I/O): The data was read successfully. 477 If Event is not NULL (asynchronous I/O): The request was successfully 478 queued for processing. 479 @retval EFI_UNSUPPORTED Writes to open directory files are not supported. 480 @retval EFI_NO_MEDIA The device has no medium. 481 @retval EFI_DEVICE_ERROR The device reported an error. 482 @retval EFI_DEVICE_ERROR An attempt was made to write to a deleted file. 483 @retval EFI_VOLUME_CORRUPTED The file system structures are corrupted. 484 @retval EFI_WRITE_PROTECTED The file or medium is write-protected. 485 @retval EFI_ACCESS_DENIED The file was opened read only. 486 @retval EFI_VOLUME_FULL The volume is full. 487 @retval EFI_OUT_OF_RESOURCES Unable to queue the request due to lack of resources. 488 **/ 489 typedef 490 EFI_STATUS 491 (EFIAPI *EFI_FILE_WRITE_EX) ( 492 IN EFI_FILE_PROTOCOL *This, 493 IN OUT EFI_FILE_IO_TOKEN *Token 494 ); 495 496 /** 497 Flushes all modified data associated with a file to a device. 498 499 @param This A pointer to the EFI_FILE_PROTOCOL instance that is the file 500 handle to flush. 501 @param Token A pointer to the token associated with the transaction. 502 503 @retval EFI_SUCCESS If Event is NULL (blocking I/O): The data was read successfully. 504 If Event is not NULL (asynchronous I/O): The request was successfully 505 queued for processing. 506 @retval EFI_NO_MEDIA The device has no medium. 507 @retval EFI_DEVICE_ERROR The device reported an error. 508 @retval EFI_VOLUME_CORRUPTED The file system structures are corrupted. 509 @retval EFI_WRITE_PROTECTED The file or medium is write-protected. 510 @retval EFI_ACCESS_DENIED The file was opened read-only. 511 @retval EFI_VOLUME_FULL The volume is full. 512 @retval EFI_OUT_OF_RESOURCES Unable to queue the request due to lack of resources. 513 514 **/ 515 typedef 516 EFI_STATUS 517 (EFIAPI *EFI_FILE_FLUSH_EX) ( 518 IN EFI_FILE_PROTOCOL *This, 519 IN OUT EFI_FILE_IO_TOKEN *Token 520 ); 521 522 #define EFI_FILE_PROTOCOL_REVISION 0x00010000 523 #define EFI_FILE_PROTOCOL_REVISION2 0x00020000 524 #define EFI_FILE_PROTOCOL_LATEST_REVISION EFI_FILE_PROTOCOL_REVISION2 525 526 // 527 // Revision defined in EFI1.1. 528 // 529 #define EFI_FILE_REVISION EFI_FILE_PROTOCOL_REVISION 530 531 /// 532 /// The EFI_FILE_PROTOCOL provides file IO access to supported file systems. 533 /// An EFI_FILE_PROTOCOL provides access to a file's or directory's contents, 534 /// and is also a reference to a location in the directory tree of the file system 535 /// in which the file resides. With any given file handle, other files may be opened 536 /// relative to this file's location, yielding new file handles. 537 /// 538 struct _EFI_FILE_PROTOCOL { 539 /// 540 /// The version of the EFI_FILE_PROTOCOL interface. The version specified 541 /// by this specification is EFI_FILE_PROTOCOL_LATEST_REVISION. 542 /// Future versions are required to be backward compatible to version 1.0. 543 /// 544 UINT64 Revision; 545 EFI_FILE_OPEN Open; 546 EFI_FILE_CLOSE Close; 547 EFI_FILE_DELETE Delete; 548 EFI_FILE_READ Read; 549 EFI_FILE_WRITE Write; 550 EFI_FILE_GET_POSITION GetPosition; 551 EFI_FILE_SET_POSITION SetPosition; 552 EFI_FILE_GET_INFO GetInfo; 553 EFI_FILE_SET_INFO SetInfo; 554 EFI_FILE_FLUSH Flush; 555 EFI_FILE_OPEN_EX OpenEx; 556 EFI_FILE_READ_EX ReadEx; 557 EFI_FILE_WRITE_EX WriteEx; 558 EFI_FILE_FLUSH_EX FlushEx; 559 }; 560 561 562 extern EFI_GUID gEfiSimpleFileSystemProtocolGuid; 563 564 #endif 565