/** @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
- 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
+ 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 - 2018, Intel Corporation. All rights reserved.<BR>\r
+SPDX-License-Identifier: BSD-2-Clause-Patent\r
\r
**/\r
\r
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
+/// 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
+/// 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
(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
///\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
+ ///\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
IN CHAR16 *FileName,\r
IN UINT64 OpenMode,\r
IN UINT64 Attributes\r
- )\r
-;\r
+ );\r
\r
//\r
// Open modes\r
#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
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
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
(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
(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
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
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 GetPosition\r
- Returns the current file position. \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 SetPosition\r
- Sets 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 GetInfo\r
- Gets the requested file or volume information. \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
- @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
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