]> 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 7522bc8b8f32454244dfdc4deac0f1d04b1cf370..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 - 2011, 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
+Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR>\r
+SPDX-License-Identifier: BSD-2-Clause-Patent\r
 \r
 **/\r
 \r
@@ -33,12 +27,12 @@ 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
@@ -73,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
@@ -99,7 +93,7 @@ struct _EFI_SIMPLE_FILE_SYSTEM_PROTOCOL {
                      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
+  @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
@@ -147,7 +141,7 @@ EFI_STATUS
 /**\r
   Closes a specified file handle.\r
 \r
-  @param  This          A pointer to the EFI_FILE_PROTOCOL instance that is the file \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 file was closed.\r
@@ -190,7 +184,7 @@ EFI_STATUS
   @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_TO_SMALL  The BufferSize is too small to read the current directory\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
@@ -345,7 +339,7 @@ EFI_STATUS
 /**\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
+  @param  This A pointer to the EFI_FILE_PROTOCOL instance that is the file\r
                handle to flush.\r
 \r
   @retval EFI_SUCCESS          The data was flushed.\r
@@ -363,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
@@ -393,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