]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdePkg/Include/Protocol/SimpleFileSystem.h
MdePkg: Replace BSD License with BSD+Patent License
[mirror_edk2.git] / MdePkg / Include / Protocol / SimpleFileSystem.h
index 3f7f98d8fee0acba50c3588d315c93d8f91d56c8..38d54db8070ab491fb6f00bbfc8af8708126eda3 100644 (file)
@@ -1,20 +1,14 @@
 /** @file\r
   SimpleFileSystem protocol as defined in the UEFI 2.0 specification.\r
 \r
-  The SimpleFileSystem protocol is the programmatic access to the FAT (12,16,32) \r
-  file system specified in UEFI 2.0. It can also be used to abstract a file  \r
+  The SimpleFileSystem protocol is the programmatic access to the FAT (12,16,32)\r
+  file system specified in UEFI 2.0. It can also be used to abstract a file\r
   system other than FAT.\r
 \r
   UEFI 2.0 can boot from any valid EFI image contained in a SimpleFileSystem.\r
 \r
-  Copyright (c) 2006 - 2009, Intel Corporation                                                         \r
-  All rights reserved. This program and the accompanying materials                          \r
-  are licensed and made available under the terms and conditions of the BSD License         \r
-  which accompanies this distribution.  The full text of the license may be found at        \r
-  http://opensource.org/licenses/bsd-license.php                                            \r
-\r
-  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,                     \r
-  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.             \r
+Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR>\r
+SPDX-License-Identifier: BSD-2-Clause-Patent\r
 \r
 **/\r
 \r
@@ -33,28 +27,33 @@ typedef struct _EFI_FILE_PROTOCOL         *EFI_FILE_HANDLE;
 \r
 ///\r
 /// Protocol GUID name defined in EFI1.1.\r
-/// \r
+///\r
 #define SIMPLE_FILE_SYSTEM_PROTOCOL       EFI_SIMPLE_FILE_SYSTEM_PROTOCOL_GUID\r
 \r
 ///\r
 /// Protocol name defined in EFI1.1.\r
-/// \r
+///\r
 typedef EFI_SIMPLE_FILE_SYSTEM_PROTOCOL   EFI_FILE_IO_INTERFACE;\r
 typedef EFI_FILE_PROTOCOL                 EFI_FILE;\r
 \r
 /**\r
   Open the root directory on a volume.\r
 \r
-  @param  This Protocol instance pointer.\r
-  @param  Root Returns an Open file handle for the root directory\r
+  @param  This A pointer to the volume to open the root directory.\r
+  @param  Root A pointer to the location to return the opened file handle for the\r
+               root directory.\r
 \r
   @retval EFI_SUCCESS          The device was opened.\r
-  @retval EFI_UNSUPPORTED      This volume does not support the file system.\r
-  @retval EFI_NO_MEDIA         The device has no media.\r
+  @retval EFI_UNSUPPORTED      This volume does not support the requested file system type.\r
+  @retval EFI_NO_MEDIA         The device has no medium.\r
   @retval EFI_DEVICE_ERROR     The device reported an error.\r
-  @retval EFI_VOLUME_CORRUPTED The file system structures are corrupted\r
-  @retval EFI_ACCESS_DENIED    The service denied access to the file\r
-  @retval EFI_OUT_OF_RESOURCES The volume was not opened due to lack of resources\r
+  @retval EFI_VOLUME_CORRUPTED The file system structures are corrupted.\r
+  @retval EFI_ACCESS_DENIED    The service denied access to the file.\r
+  @retval EFI_OUT_OF_RESOURCES The volume was not opened due to lack of resources.\r
+  @retval EFI_MEDIA_CHANGED    The device has a different medium in it or the medium is no\r
+                               longer supported. Any existing file handles for this volume are\r
+                               no longer valid. To access the files on the new medium, the\r
+                               volume must be reopened with OpenVolume().\r
 \r
 **/\r
 typedef\r
@@ -68,7 +67,7 @@ EFI_STATUS
 \r
 ///\r
 /// Revision defined in EFI1.1\r
-/// \r
+///\r
 #define EFI_FILE_IO_INTERFACE_REVISION  EFI_SIMPLE_FILE_SYSTEM_PROTOCOL_REVISION\r
 \r
 struct _EFI_SIMPLE_FILE_SYSTEM_PROTOCOL {\r
@@ -84,20 +83,30 @@ struct _EFI_SIMPLE_FILE_SYSTEM_PROTOCOL {
 /**\r
   Opens a new file relative to the source file's location.\r
 \r
-  @param  This       Protocol instance pointer.\r
-  @param  NewHandle  Returns File Handle for FileName\r
-  @param  FileName   Null terminated string. "\", ".", and ".." are supported\r
-  @param  OpenMode   Open mode for file.\r
-  @param  Attributes Only used for EFI_FILE_MODE_CREATE\r
-\r
-  @retval EFI_SUCCESS          The device was opened.\r
-  @retval EFI_NOT_FOUND        The specified file could not be found on the device\r
-  @retval EFI_NO_MEDIA         The device has no media.\r
-  @retval EFI_MEDIA_CHANGED    The media has changed\r
+  @param  This       A pointer to the EFI_FILE_PROTOCOL instance that is the file\r
+                     handle to the source location. This would typically be an open\r
+                     handle to a directory.\r
+  @param  NewHandle  A pointer to the location to return the opened handle for the new\r
+                     file.\r
+  @param  FileName   The Null-terminated string of the name of the file to be opened.\r
+                     The file name may contain the following path modifiers: "\", ".",\r
+                     and "..".\r
+  @param  OpenMode   The mode to open the file. The only valid combinations that the\r
+                     file may be opened with are: Read, Read/Write, or Create/Read/Write.\r
+  @param  Attributes Only valid for EFI_FILE_MODE_CREATE, in which case these are the\r
+                     attribute bits for the newly created file.\r
+\r
+  @retval EFI_SUCCESS          The file was opened.\r
+  @retval EFI_NOT_FOUND        The specified file could not be found on the device.\r
+  @retval EFI_NO_MEDIA         The device has no medium.\r
+  @retval EFI_MEDIA_CHANGED    The device has a different medium in it or the medium is no\r
+                               longer supported.\r
   @retval EFI_DEVICE_ERROR     The device reported an error.\r
-  @retval EFI_VOLUME_CORRUPTED The file system structures are corrupted\r
-  @retval EFI_ACCESS_DENIED    The service denied access to the file\r
-  @retval EFI_OUT_OF_RESOURCES The volume was not opened due to lack of resources\r
+  @retval EFI_VOLUME_CORRUPTED The file system structures are corrupted.\r
+  @retval EFI_WRITE_PROTECTED  An attempt was made to create a file, or open a file for write\r
+                               when the media is write-protected.\r
+  @retval EFI_ACCESS_DENIED    The service denied access to the file.\r
+  @retval EFI_OUT_OF_RESOURCES Not enough resources were available to open the file.\r
   @retval EFI_VOLUME_FULL      The volume is full.\r
 \r
 **/\r
@@ -130,11 +139,12 @@ EFI_STATUS
 #define EFI_FILE_VALID_ATTR 0x0000000000000037ULL\r
 \r
 /**\r
-  Close the file handle\r
+  Closes a specified file handle.\r
 \r
-  @param  This          Protocol instance pointer.\r
+  @param  This          A pointer to the EFI_FILE_PROTOCOL instance that is the file\r
+                        handle to close.\r
 \r
-  @retval EFI_SUCCESS   The device was opened.\r
+  @retval EFI_SUCCESS   The file was closed.\r
 \r
 **/\r
 typedef\r
@@ -144,12 +154,13 @@ EFI_STATUS
   );\r
 \r
 /**\r
-  Close and delete the file handle\r
+  Close and delete the file handle.\r
+\r
+  @param  This                     A pointer to the EFI_FILE_PROTOCOL instance that is the\r
+                                   handle to the file to delete.\r
 \r
-  @param  This                     Protocol instance pointer.\r
-                                   \r
-  @retval EFI_SUCCESS              The device was opened.\r
-  @retval EFI_WARN_DELETE_FAILURE  The handle was closed but the file was not deleted\r
+  @retval EFI_SUCCESS              The file was closed and deleted, and the handle was closed.\r
+  @retval EFI_WARN_DELETE_FAILURE  The handle was closed, but the file was not deleted.\r
 \r
 **/\r
 typedef\r
@@ -159,17 +170,23 @@ EFI_STATUS
   );\r
 \r
 /**\r
-  Read data from the file.\r
+  Reads data from a file.\r
 \r
-  @param  This       Protocol instance pointer.\r
-  @param  BufferSize On input size of buffer, on output amount of data in buffer.\r
-  @param  Buffer     The buffer in which data is read.\r
+  @param  This       A pointer to the EFI_FILE_PROTOCOL instance that is the file\r
+                     handle to read data from.\r
+  @param  BufferSize On input, the size of the Buffer. On output, the amount of data\r
+                     returned in Buffer. In both cases, the size is measured in bytes.\r
+  @param  Buffer     The buffer into which the data is read.\r
 \r
   @retval EFI_SUCCESS          Data was read.\r
-  @retval EFI_NO_MEDIA         The device has no media\r
-  @retval EFI_DEVICE_ERROR     The device reported an error\r
-  @retval EFI_VOLUME_CORRUPTED The file system structures are corrupted\r
-  @retval EFI_BUFFER_TO_SMALL  BufferSize is too small. BufferSize contains required size\r
+  @retval EFI_NO_MEDIA         The device has no medium.\r
+  @retval EFI_DEVICE_ERROR     The device reported an error.\r
+  @retval EFI_DEVICE_ERROR     An attempt was made to read from a deleted file.\r
+  @retval EFI_DEVICE_ERROR     On entry, the current file position is beyond the end of the file.\r
+  @retval EFI_VOLUME_CORRUPTED The file system structures are corrupted.\r
+  @retval EFI_BUFFER_TOO_SMALL The BufferSize is too small to read the current directory\r
+                               entry. BufferSize has been updated with the size\r
+                               needed to complete the request.\r
 \r
 **/\r
 typedef\r
@@ -181,21 +198,23 @@ EFI_STATUS
   );\r
 \r
 /**\r
-  Write data to a file.\r
+  Writes data to a file.\r
 \r
-  @param  This       Protocol instance pointer.\r
-  @param  BufferSize On input size of buffer, on output amount of data in buffer.\r
-  @param  Buffer     The buffer in which data to write.\r
+  @param  This       A pointer to the EFI_FILE_PROTOCOL instance that is the file\r
+                     handle to write data to.\r
+  @param  BufferSize On input, the size of the Buffer. On output, the amount of data\r
+                     actually written. In both cases, the size is measured in bytes.\r
+  @param  Buffer     The buffer of data to write.\r
 \r
   @retval EFI_SUCCESS          Data was written.\r
-  @retval EFI_UNSUPPORT        Writes to Open directory are not supported\r
-  @retval EFI_NO_MEDIA         The device has no media\r
-  @retval EFI_DEVICE_ERROR     The device reported an error\r
-  @retval EFI_DEVICE_ERROR     An attempt was made to write to a deleted file\r
-  @retval EFI_VOLUME_CORRUPTED The file system structures are corrupted\r
-  @retval EFI_WRITE_PROTECTED  The device is write protected\r
-  @retval EFI_ACCESS_DENIED    The file was open for read only\r
-  @retval EFI_VOLUME_FULL      The volume is full\r
+  @retval EFI_UNSUPPORTED      Writes to open directory files are not supported.\r
+  @retval EFI_NO_MEDIA         The device has no medium.\r
+  @retval EFI_DEVICE_ERROR     The device reported an error.\r
+  @retval EFI_DEVICE_ERROR     An attempt was made to write to a deleted file.\r
+  @retval EFI_VOLUME_CORRUPTED The file system structures are corrupted.\r
+  @retval EFI_WRITE_PROTECTED  The file or medium is write-protected.\r
+  @retval EFI_ACCESS_DENIED    The file was opened read only.\r
+  @retval EFI_VOLUME_FULL      The volume is full.\r
 \r
 **/\r
 typedef\r
@@ -207,13 +226,16 @@ EFI_STATUS
   );\r
 \r
 /**\r
-  Set a files current position\r
+  Sets a file's current position.\r
+\r
+  @param  This            A pointer to the EFI_FILE_PROTOCOL instance that is the\r
+                          file handle to set the requested position on.\r
+  @param  Position        The byte position from the start of the file to set.\r
 \r
-  @param  This            Protocol instance pointer.\r
-  @param  Position        Byte position from the start of the file\r
-                          \r
-  @retval EFI_SUCCESS     Data was written.\r
-  @retval EFI_UNSUPPORTED Seek request for non-zero is not valid on open.\r
+  @retval EFI_SUCCESS      The position was set.\r
+  @retval EFI_UNSUPPORTED  The seek request for nonzero is not valid on open\r
+                           directories.\r
+  @retval EFI_DEVICE_ERROR An attempt was made to set the position of a deleted file.\r
 \r
 **/\r
 typedef\r
@@ -224,13 +246,15 @@ EFI_STATUS
   );\r
 \r
 /**\r
-  Get a file's current position\r
+  Returns a file's current position.\r
+\r
+  @param  This            A pointer to the EFI_FILE_PROTOCOL instance that is the file\r
+                          handle to get the current position on.\r
+  @param  Position        The address to return the file's current position value.\r
 \r
-  @param  This            Protocol instance pointer.\r
-  @param  Position        Byte position from the start of the file\r
-                          \r
-  @retval EFI_SUCCESS     Data was written.\r
-  @retval EFI_UNSUPPORTED Seek request for non-zero is not valid on open.\r
+  @retval EFI_SUCCESS      The position was returned.\r
+  @retval EFI_UNSUPPORTED  The request is not valid on open directories.\r
+  @retval EFI_DEVICE_ERROR An attempt was made to get the position from a deleted file.\r
 \r
 **/\r
 typedef\r
@@ -241,22 +265,24 @@ EFI_STATUS
   );\r
 \r
 /**\r
-  Get information about a file\r
-\r
-  @param  This            Protocol instance pointer.\r
-  @param  InformationType Type of info to return in Buffer\r
-  @param  BufferSize      On input size of buffer, on output amount of data in buffer.\r
-  @param  Buffer          The buffer to return data.\r
-\r
-  @retval EFI_SUCCESS          Data was returned.\r
-  @retval EFI_UNSUPPORT        InformationType is not supported\r
-  @retval EFI_NO_MEDIA         The device has no media\r
-  @retval EFI_DEVICE_ERROR     The device reported an error\r
-  @retval EFI_VOLUME_CORRUPTED The file system structures are corrupted\r
-  @retval EFI_WRITE_PROTECTED  The device is write protected\r
-  @retval EFI_ACCESS_DENIED    The file was open for read only\r
-  @retval EFI_BUFFER_TOO_SMALL Buffer was too small, required size returned in BufferSize\r
-\r
+  Returns information about a file.\r
+\r
+  @param  This            A pointer to the EFI_FILE_PROTOCOL instance that is the file\r
+                          handle the requested information is for.\r
+  @param  InformationType The type identifier for the information being requested.\r
+  @param  BufferSize      On input, the size of Buffer. On output, the amount of data\r
+                          returned in Buffer. In both cases, the size is measured in bytes.\r
+  @param  Buffer          A pointer to the data buffer to return. The buffer's type is\r
+                          indicated by InformationType.\r
+\r
+  @retval EFI_SUCCESS          The information was returned.\r
+  @retval EFI_UNSUPPORTED      The InformationType is not known.\r
+  @retval EFI_NO_MEDIA         The device has no medium.\r
+  @retval EFI_DEVICE_ERROR     The device reported an error.\r
+  @retval EFI_VOLUME_CORRUPTED The file system structures are corrupted.\r
+  @retval EFI_BUFFER_TOO_SMALL The BufferSize is too small to read the current directory entry.\r
+                               BufferSize has been updated with the size needed to complete\r
+                               the request.\r
 **/\r
 typedef\r
 EFI_STATUS\r
@@ -268,20 +294,37 @@ EFI_STATUS
   );\r
 \r
 /**\r
-  Set information about a file\r
-\r
-  @param  File            Protocol instance pointer.\r
-  @param  InformationType Type of info in Buffer\r
-  @param  BufferSize      Size of buffer.\r
-  @param  Buffer          The data to write.\r
-\r
-  @retval EFI_SUCCESS          Data was returned.\r
-  @retval EFI_UNSUPPORT        InformationType is not supported\r
-  @retval EFI_NO_MEDIA         The device has no media\r
-  @retval EFI_DEVICE_ERROR     The device reported an error\r
-  @retval EFI_VOLUME_CORRUPTED The file system structures are corrupted\r
-  @retval EFI_WRITE_PROTECTED  The device is write protected\r
-  @retval EFI_ACCESS_DENIED    The file was open for read only\r
+  Sets information about a file.\r
+\r
+  @param  File            A pointer to the EFI_FILE_PROTOCOL instance that is the file\r
+                          handle the information is for.\r
+  @param  InformationType The type identifier for the information being set.\r
+  @param  BufferSize      The size, in bytes, of Buffer.\r
+  @param  Buffer          A pointer to the data buffer to write. The buffer's type is\r
+                          indicated by InformationType.\r
+\r
+  @retval EFI_SUCCESS          The information was set.\r
+  @retval EFI_UNSUPPORTED      The InformationType is not known.\r
+  @retval EFI_NO_MEDIA         The device has no medium.\r
+  @retval EFI_DEVICE_ERROR     The device reported an error.\r
+  @retval EFI_VOLUME_CORRUPTED The file system structures are corrupted.\r
+  @retval EFI_WRITE_PROTECTED  InformationType is EFI_FILE_INFO_ID and the media is\r
+                               read-only.\r
+  @retval EFI_WRITE_PROTECTED  InformationType is EFI_FILE_PROTOCOL_SYSTEM_INFO_ID\r
+                               and the media is read only.\r
+  @retval EFI_WRITE_PROTECTED  InformationType is EFI_FILE_SYSTEM_VOLUME_LABEL_ID\r
+                               and the media is read-only.\r
+  @retval EFI_ACCESS_DENIED    An attempt is made to change the name of a file to a\r
+                               file that is already present.\r
+  @retval EFI_ACCESS_DENIED    An attempt is being made to change the EFI_FILE_DIRECTORY\r
+                               Attribute.\r
+  @retval EFI_ACCESS_DENIED    An attempt is being made to change the size of a directory.\r
+  @retval EFI_ACCESS_DENIED    InformationType is EFI_FILE_INFO_ID and the file was opened\r
+                               read-only and an attempt is being made to modify a field\r
+                               other than Attribute.\r
+  @retval EFI_VOLUME_FULL      The volume is full.\r
+  @retval EFI_BAD_BUFFER_SIZE  BufferSize is smaller than the size of the type indicated\r
+                               by InformationType.\r
 \r
 **/\r
 typedef\r
@@ -294,18 +337,18 @@ EFI_STATUS
   );\r
 \r
 /**\r
-  Flush data back for the file handle\r
+  Flushes all modified data associated with a file to a device.\r
 \r
-  @param  This Protocol instance pointer.\r
+  @param  This A pointer to the EFI_FILE_PROTOCOL instance that is the file\r
+               handle to flush.\r
 \r
-  @retval EFI_SUCCESS          Data was written.\r
-  @retval EFI_UNSUPPORT        Writes to Open directory are not supported\r
-  @retval EFI_NO_MEDIA         The device has no media\r
-  @retval EFI_DEVICE_ERROR     The device reported an error\r
-  @retval EFI_VOLUME_CORRUPTED The file system structures are corrupted\r
-  @retval EFI_WRITE_PROTECTED  The device is write protected\r
-  @retval EFI_ACCESS_DENIED    The file was open for read only\r
-  @retval EFI_VOLUME_FULL      The volume is full\r
+  @retval EFI_SUCCESS          The data was flushed.\r
+  @retval EFI_NO_MEDIA         The device has no medium.\r
+  @retval EFI_DEVICE_ERROR     The device reported an error.\r
+  @retval EFI_VOLUME_CORRUPTED The file system structures are corrupted.\r
+  @retval EFI_WRITE_PROTECTED  The file or medium is write-protected.\r
+  @retval EFI_ACCESS_DENIED    The file was opened read-only.\r
+  @retval EFI_VOLUME_FULL      The volume is full.\r
 \r
 **/\r
 typedef\r
@@ -314,24 +357,181 @@ EFI_STATUS
   IN EFI_FILE_PROTOCOL  *This\r
   );\r
 \r
-#define EFI_FILE_PROTOCOL_REVISION   0x00010000\r
+typedef struct {\r
+  //\r
+  // If Event is NULL, then blocking I/O is performed.\r
+  // If Event is not NULL and non-blocking I/O is supported, then non-blocking I/O is performed,\r
+  // and Event will be signaled when the read request is completed.\r
+  // The caller must be prepared to handle the case where the callback associated with Event\r
+  // occurs before the original asynchronous I/O request call returns.\r
+  //\r
+  EFI_EVENT                   Event;\r
+\r
+  //\r
+  // Defines whether or not the signaled event encountered an error.\r
+  //\r
+  EFI_STATUS                  Status;\r
+\r
+  //\r
+  // For OpenEx():  Not Used, ignored.\r
+  // For ReadEx():  On input, the size of the Buffer. On output, the amount of data returned in Buffer.\r
+  //                In both cases, the size is measured in bytes.\r
+  // For WriteEx(): On input, the size of the Buffer. On output, the amount of data actually written.\r
+  //                In both cases, the size is measured in bytes.\r
+  // For FlushEx(): Not used, ignored.\r
+  //\r
+  UINTN                       BufferSize;\r
+\r
+  //\r
+  // For OpenEx():  Not Used, ignored.\r
+  // For ReadEx():  The buffer into which the data is read.\r
+  // For WriteEx(): The buffer of data to write.\r
+  // For FlushEx(): Not Used, ignored.\r
+  //\r
+  VOID                        *Buffer;\r
+} EFI_FILE_IO_TOKEN;\r
+\r
+/**\r
+  Opens a new file relative to the source directory's location.\r
+\r
+  @param  This       A pointer to the EFI_FILE_PROTOCOL instance that is the file\r
+                     handle to the source location.\r
+  @param  NewHandle  A pointer to the location to return the opened handle for the new\r
+                     file.\r
+  @param  FileName   The Null-terminated string of the name of the file to be opened.\r
+                     The file name may contain the following path modifiers: "\", ".",\r
+                     and "..".\r
+  @param  OpenMode   The mode to open the file. The only valid combinations that the\r
+                     file may be opened with are: Read, Read/Write, or Create/Read/Write.\r
+  @param  Attributes Only valid for EFI_FILE_MODE_CREATE, in which case these are the\r
+                     attribute bits for the newly created file.\r
+  @param  Token      A pointer to the token associated with the transaction.\r
+\r
+  @retval EFI_SUCCESS          If Event is NULL (blocking I/O): The data was read successfully.\r
+                               If Event is not NULL (asynchronous I/O): The request was successfully\r
+                                                                        queued for processing.\r
+  @retval EFI_NOT_FOUND        The specified file could not be found on the device.\r
+  @retval EFI_NO_MEDIA         The device has no medium.\r
+  @retval EFI_MEDIA_CHANGED    The device has a different medium in it or the medium is no\r
+                               longer supported.\r
+  @retval EFI_DEVICE_ERROR     The device reported an error.\r
+  @retval EFI_VOLUME_CORRUPTED The file system structures are corrupted.\r
+  @retval EFI_WRITE_PROTECTED  An attempt was made to create a file, or open a file for write\r
+                               when the media is write-protected.\r
+  @retval EFI_ACCESS_DENIED    The service denied access to the file.\r
+  @retval EFI_OUT_OF_RESOURCES Not enough resources were available to open the file.\r
+  @retval EFI_VOLUME_FULL      The volume is full.\r
+\r
+**/\r
+typedef\r
+EFI_STATUS\r
+(EFIAPI *EFI_FILE_OPEN_EX)(\r
+  IN EFI_FILE_PROTOCOL        *This,\r
+  OUT EFI_FILE_PROTOCOL       **NewHandle,\r
+  IN CHAR16                   *FileName,\r
+  IN UINT64                   OpenMode,\r
+  IN UINT64                   Attributes,\r
+  IN OUT EFI_FILE_IO_TOKEN    *Token\r
+  );\r
+\r
+\r
+/**\r
+  Reads data from a file.\r
+\r
+  @param  This       A pointer to the EFI_FILE_PROTOCOL instance that is the file handle to read data from.\r
+  @param  Token      A pointer to the token associated with the transaction.\r
+\r
+  @retval EFI_SUCCESS          If Event is NULL (blocking I/O): The data was read successfully.\r
+                               If Event is not NULL (asynchronous I/O): The request was successfully\r
+                                                                        queued for processing.\r
+  @retval EFI_NO_MEDIA         The device has no medium.\r
+  @retval EFI_DEVICE_ERROR     The device reported an error.\r
+  @retval EFI_DEVICE_ERROR     An attempt was made to read from a deleted file.\r
+  @retval EFI_DEVICE_ERROR     On entry, the current file position is beyond the end of the file.\r
+  @retval EFI_VOLUME_CORRUPTED The file system structures are corrupted.\r
+  @retval EFI_OUT_OF_RESOURCES Unable to queue the request due to lack of resources.\r
+**/\r
+typedef\r
+EFI_STATUS\r
+(EFIAPI *EFI_FILE_READ_EX) (\r
+  IN EFI_FILE_PROTOCOL        *This,\r
+  IN OUT EFI_FILE_IO_TOKEN    *Token\r
+);\r
+\r
+\r
+/**\r
+  Writes data to a file.\r
+\r
+  @param  This       A pointer to the EFI_FILE_PROTOCOL instance that is the file handle to write data to.\r
+  @param  Token      A pointer to the token associated with the transaction.\r
+\r
+  @retval EFI_SUCCESS          If Event is NULL (blocking I/O): The data was read successfully.\r
+                               If Event is not NULL (asynchronous I/O): The request was successfully\r
+                                                                        queued for processing.\r
+  @retval EFI_UNSUPPORTED      Writes to open directory files are not supported.\r
+  @retval EFI_NO_MEDIA         The device has no medium.\r
+  @retval EFI_DEVICE_ERROR     The device reported an error.\r
+  @retval EFI_DEVICE_ERROR     An attempt was made to write to a deleted file.\r
+  @retval EFI_VOLUME_CORRUPTED The file system structures are corrupted.\r
+  @retval EFI_WRITE_PROTECTED  The file or medium is write-protected.\r
+  @retval EFI_ACCESS_DENIED    The file was opened read only.\r
+  @retval EFI_VOLUME_FULL      The volume is full.\r
+  @retval EFI_OUT_OF_RESOURCES Unable to queue the request due to lack of resources.\r
+**/\r
+typedef\r
+EFI_STATUS\r
+(EFIAPI *EFI_FILE_WRITE_EX) (\r
+  IN EFI_FILE_PROTOCOL        *This,\r
+  IN OUT EFI_FILE_IO_TOKEN    *Token\r
+);\r
+\r
+/**\r
+  Flushes all modified data associated with a file to a device.\r
+\r
+  @param  This  A pointer to the EFI_FILE_PROTOCOL instance that is the file\r
+                handle to flush.\r
+  @param  Token A pointer to the token associated with the transaction.\r
+\r
+  @retval EFI_SUCCESS          If Event is NULL (blocking I/O): The data was read successfully.\r
+                               If Event is not NULL (asynchronous I/O): The request was successfully\r
+                                                                        queued for processing.\r
+  @retval EFI_NO_MEDIA         The device has no medium.\r
+  @retval EFI_DEVICE_ERROR     The device reported an error.\r
+  @retval EFI_VOLUME_CORRUPTED The file system structures are corrupted.\r
+  @retval EFI_WRITE_PROTECTED  The file or medium is write-protected.\r
+  @retval EFI_ACCESS_DENIED    The file was opened read-only.\r
+  @retval EFI_VOLUME_FULL      The volume is full.\r
+  @retval EFI_OUT_OF_RESOURCES Unable to queue the request due to lack of resources.\r
+\r
+**/\r
+typedef\r
+EFI_STATUS\r
+(EFIAPI *EFI_FILE_FLUSH_EX) (\r
+  IN EFI_FILE_PROTOCOL        *This,\r
+  IN OUT EFI_FILE_IO_TOKEN    *Token\r
+  );\r
+\r
+#define EFI_FILE_PROTOCOL_REVISION        0x00010000\r
+#define EFI_FILE_PROTOCOL_REVISION2       0x00020000\r
+#define EFI_FILE_PROTOCOL_LATEST_REVISION EFI_FILE_PROTOCOL_REVISION2\r
+\r
 //\r
 // Revision defined in EFI1.1.\r
-// \r
+//\r
 #define EFI_FILE_REVISION   EFI_FILE_PROTOCOL_REVISION\r
 \r
 ///\r
 /// The EFI_FILE_PROTOCOL provides file IO access to supported file systems.\r
-/// An EFI_FILE_PROTOCOL provides access to a file's or directory's contents, \r
-/// and is also a reference to a location in the directory tree of the file system \r
-/// in which the file resides. With any given file handle, other files may be opened \r
+/// An EFI_FILE_PROTOCOL provides access to a file's or directory's contents,\r
+/// and is also a reference to a location in the directory tree of the file system\r
+/// in which the file resides. With any given file handle, other files may be opened\r
 /// relative to this file's location, yielding new file handles.\r
 ///\r
 struct _EFI_FILE_PROTOCOL {\r
   ///\r
-  /// The version of the EFI_FILE_PROTOCOL interface. The version specified \r
-  /// by this specification is 0x00010000. Future versions are required \r
-  /// to be backward compatible to version 1.0.\r
+  /// The version of the EFI_FILE_PROTOCOL interface. The version specified\r
+  /// by this specification is EFI_FILE_PROTOCOL_LATEST_REVISION.\r
+  /// Future versions are required to be backward compatible to version 1.0.\r
   ///\r
   UINT64                Revision;\r
   EFI_FILE_OPEN         Open;\r
@@ -344,6 +544,10 @@ struct _EFI_FILE_PROTOCOL {
   EFI_FILE_GET_INFO     GetInfo;\r
   EFI_FILE_SET_INFO     SetInfo;\r
   EFI_FILE_FLUSH        Flush;\r
+  EFI_FILE_OPEN_EX      OpenEx;\r
+  EFI_FILE_READ_EX      ReadEx;\r
+  EFI_FILE_WRITE_EX     WriteEx;\r
+  EFI_FILE_FLUSH_EX     FlushEx;\r
 };\r
 \r
 \r