]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdePkg/Include/Protocol/SimpleFileSystem.h
MdePkg/ProcessorBind: add defines for page allocation granularity
[mirror_edk2.git] / MdePkg / Include / Protocol / SimpleFileSystem.h
index dfc8bc31fb1b6ec5a04efd6dcfeec971e3958211..461e568225f6fc56e85630664c675a160e875cfe 100644 (file)
@@ -1,20 +1,20 @@
 /** @file\r
   SimpleFileSystem protocol as defined in the UEFI 2.0 specification.\r
 \r
-  The SimpleFileSystem protocol is the programatic access to the FAT (12,16,32) \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
+  UEFI 2.0 can boot from any valid EFI image contained in a SimpleFileSystem.\r
 \r
-  Copyright (c) 2006 - 2008, 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 - 2014, Intel Corporation. All rights reserved.<BR>\r
+This program and the accompanying materials are licensed and made available under \r
+the terms and conditions of the BSD License that accompanies this distribution.  \r
+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
 \r
 **/\r
 \r
@@ -31,31 +31,35 @@ typedef struct _EFI_SIMPLE_FILE_SYSTEM_PROTOCOL  EFI_SIMPLE_FILE_SYSTEM_PROTOCOL
 typedef struct _EFI_FILE_PROTOCOL         EFI_FILE_PROTOCOL;\r
 typedef struct _EFI_FILE_PROTOCOL         *EFI_FILE_HANDLE;\r
 \r
-\r
-//\r
-// Protocol GUID defined in EFI1.1.\r
-// \r
+///\r
+/// Protocol GUID name defined in EFI1.1.\r
+/// \r
 #define SIMPLE_FILE_SYSTEM_PROTOCOL       EFI_SIMPLE_FILE_SYSTEM_PROTOCOL_GUID\r
 \r
-//\r
-// Protocol defined in EFI1.1.\r
-// \r
+///\r
+/// Protocol name defined in EFI1.1.\r
+/// \r
 typedef EFI_SIMPLE_FILE_SYSTEM_PROTOCOL   EFI_FILE_IO_INTERFACE;\r
-typedef struct _EFI_FILE_PROTOCOL         EFI_FILE;\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 suppor 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
@@ -63,37 +67,52 @@ EFI_STATUS
 (EFIAPI *EFI_SIMPLE_FILE_SYSTEM_PROTOCOL_OPEN_VOLUME)(\r
   IN EFI_SIMPLE_FILE_SYSTEM_PROTOCOL    *This,\r
   OUT EFI_FILE_PROTOCOL                 **Root\r
-  )\r
-;\r
+  );\r
 \r
 #define EFI_SIMPLE_FILE_SYSTEM_PROTOCOL_REVISION  0x00010000\r
-//\r
-// Revision defined in EFI1.1\r
-// \r
+\r
+///\r
+/// Revision defined in EFI1.1\r
+/// \r
 #define EFI_FILE_IO_INTERFACE_REVISION  EFI_SIMPLE_FILE_SYSTEM_PROTOCOL_REVISION\r
 \r
 struct _EFI_SIMPLE_FILE_SYSTEM_PROTOCOL {\r
+  ///\r
+  /// The version of the EFI_SIMPLE_FILE_SYSTEM_PROTOCOL. The version\r
+  /// specified by this specification is 0x00010000. All future revisions\r
+  /// must be backwards compatible.\r
+  ///\r
   UINT64                                      Revision;\r
   EFI_SIMPLE_FILE_SYSTEM_PROTOCOL_OPEN_VOLUME OpenVolume;\r
 };\r
 \r
 /**\r
-  Open the root directory on a volume.\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
+  Opens a new file relative to the source file's location.\r
+\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
@@ -105,8 +124,7 @@ EFI_STATUS
   IN CHAR16                   *FileName,\r
   IN UINT64                   OpenMode,\r
   IN UINT64                   Attributes\r
-  )\r
-;\r
+  );\r
 \r
 //\r
 // Open modes\r
@@ -127,48 +145,54 @@ 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
 EFI_STATUS\r
 (EFIAPI *EFI_FILE_CLOSE)(\r
-  IN EFI_FILE  *This\r
-  )\r
-;\r
+  IN EFI_FILE_PROTOCOL  *This\r
+  );\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
 EFI_STATUS\r
 (EFIAPI *EFI_FILE_DELETE)(\r
-  IN EFI_FILE  *This\r
-  )\r
-;\r
+  IN EFI_FILE_PROTOCOL  *This\r
+  );\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
@@ -177,24 +201,26 @@ EFI_STATUS
   IN EFI_FILE_PROTOCOL        *This,\r
   IN OUT UINTN                *BufferSize,\r
   OUT VOID                    *Buffer\r
-  )\r
-;\r
+  );\r
 \r
 /**\r
-  Write data from to the 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_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
@@ -203,17 +229,19 @@ EFI_STATUS
   IN EFI_FILE_PROTOCOL        *This,\r
   IN OUT UINTN                *BufferSize,\r
   IN VOID                     *Buffer\r
-  )\r
-;\r
+  );\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 possition 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
@@ -221,17 +249,18 @@ EFI_STATUS
 (EFIAPI *EFI_FILE_SET_POSITION)(\r
   IN EFI_FILE_PROTOCOL        *This,\r
   IN UINT64                   Position\r
-  )\r
-;\r
+  );\r
 \r
 /**\r
-  Get a files current position\r
+  Returns a file's current position.\r
 \r
-  @param  This            Protocol instance pointer.\r
-  @param  Position        Byte possition 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
+  @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
+  @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
@@ -239,26 +268,27 @@ EFI_STATUS
 (EFIAPI *EFI_FILE_GET_POSITION)(\r
   IN EFI_FILE_PROTOCOL        *This,\r
   OUT UINT64                  *Position\r
-  )\r
-;\r
+  );\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
@@ -267,24 +297,40 @@ EFI_STATUS
   IN EFI_GUID                 *InformationType,\r
   IN OUT UINTN                *BufferSize,\r
   OUT VOID                    *Buffer\r
-  )\r
-;\r
+  );\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,81 +340,205 @@ EFI_STATUS
   IN EFI_GUID                 *InformationType,\r
   IN UINTN                    BufferSize,\r
   IN VOID                     *Buffer\r
-  )\r
-;\r
+  );\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
 EFI_STATUS\r
 (EFIAPI *EFI_FILE_FLUSH)(\r
-  IN EFI_FILE  *This\r
-  )\r
-;\r
+  IN EFI_FILE_PROTOCOL  *This\r
+  );\r
+\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
-#define EFI_FILE_PROTOCOL_REVISION   0x00010000\r
-//\r
-// Revision defined in EFI1.1.\r
-// \r
-#define EFI_FILE_REVISION   EFI_FILE_PROTOCOL_REVISION\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
-  @par Protocol Description:\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
-  relative to this file's location, yielding new file handles.\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
-  @param Revision\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
 \r
-  @param Open\r
-  Opens or creates a new file. \r
+/**\r
+  Reads data from a file.\r
 \r
-  @param Close\r
-  Closes the current file handle. \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
-  @param Delete\r
-  Deletes a file. \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
-  @param Read\r
-  Reads bytes from a file. \r
 \r
-  @param Write\r
-  Writes bytes to a file. \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
-  @param GetPosition\r
-  Returns the current file position. \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
-  @param SetPosition\r
-  Sets the current file position. \r
+/**\r
+  Flushes all modified data associated with a file to a device.\r
 \r
-  @param GetInfo\r
-  Gets the requested file or volume information. \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
-  @param SetInfo\r
-  Sets the requested file information. \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
-  @param Flush\r
-  Flushes all modified data associated with the file to the device. \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
+#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
+/// 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 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
   EFI_FILE_CLOSE        Close;\r
@@ -380,6 +550,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