/** @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
\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
///\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
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
/**\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
@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
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
+ @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
/**\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
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
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