| /** @file |
| SimpleFileSystem protocol as defined in the UEFI 2.0 specification. |
| |
| The SimpleFileSystem protocol is the programmatic access to the FAT (12,16,32) |
| file system specified in UEFI 2.0. It can also be used to abstract a file |
| system other than FAT. |
| |
| UEFI 2.0 can boot from any valid EFI image contained in a SimpleFileSystem. |
| |
| Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR> |
| SPDX-License-Identifier: BSD-2-Clause-Patent |
| |
| **/ |
| |
| #ifndef __SIMPLE_FILE_SYSTEM_H__ |
| #define __SIMPLE_FILE_SYSTEM_H__ |
| |
| #define EFI_SIMPLE_FILE_SYSTEM_PROTOCOL_GUID \ |
| { \ |
| 0x964e5b22, 0x6459, 0x11d2, {0x8e, 0x39, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b } \ |
| } |
| |
| typedef struct _EFI_SIMPLE_FILE_SYSTEM_PROTOCOL EFI_SIMPLE_FILE_SYSTEM_PROTOCOL; |
| |
| typedef struct _EFI_FILE_PROTOCOL EFI_FILE_PROTOCOL; |
| typedef struct _EFI_FILE_PROTOCOL *EFI_FILE_HANDLE; |
| |
| /// |
| /// Protocol GUID name defined in EFI1.1. |
| /// |
| #define SIMPLE_FILE_SYSTEM_PROTOCOL EFI_SIMPLE_FILE_SYSTEM_PROTOCOL_GUID |
| |
| /// |
| /// Protocol name defined in EFI1.1. |
| /// |
| typedef EFI_SIMPLE_FILE_SYSTEM_PROTOCOL EFI_FILE_IO_INTERFACE; |
| typedef EFI_FILE_PROTOCOL EFI_FILE; |
| |
| /** |
| Open the root directory on a volume. |
| |
| @param This A pointer to the volume to open the root directory. |
| @param Root A pointer to the location to return the opened file handle for the |
| root directory. |
| |
| @retval EFI_SUCCESS The device was opened. |
| @retval EFI_UNSUPPORTED This volume does not support the requested file system type. |
| @retval EFI_NO_MEDIA The device has no medium. |
| @retval EFI_DEVICE_ERROR The device reported an error. |
| @retval EFI_VOLUME_CORRUPTED The file system structures are corrupted. |
| @retval EFI_ACCESS_DENIED The service denied access to the file. |
| @retval EFI_OUT_OF_RESOURCES The volume was not opened due to lack of resources. |
| @retval EFI_MEDIA_CHANGED The device has a different medium in it or the medium is no |
| longer supported. Any existing file handles for this volume are |
| no longer valid. To access the files on the new medium, the |
| volume must be reopened with OpenVolume(). |
| |
| **/ |
| typedef |
| EFI_STATUS |
| (EFIAPI *EFI_SIMPLE_FILE_SYSTEM_PROTOCOL_OPEN_VOLUME)( |
| IN EFI_SIMPLE_FILE_SYSTEM_PROTOCOL *This, |
| OUT EFI_FILE_PROTOCOL **Root |
| ); |
| |
| #define EFI_SIMPLE_FILE_SYSTEM_PROTOCOL_REVISION 0x00010000 |
| |
| /// |
| /// Revision defined in EFI1.1 |
| /// |
| #define EFI_FILE_IO_INTERFACE_REVISION EFI_SIMPLE_FILE_SYSTEM_PROTOCOL_REVISION |
| |
| struct _EFI_SIMPLE_FILE_SYSTEM_PROTOCOL { |
| /// |
| /// The version of the EFI_SIMPLE_FILE_SYSTEM_PROTOCOL. The version |
| /// specified by this specification is 0x00010000. All future revisions |
| /// must be backwards compatible. |
| /// |
| UINT64 Revision; |
| EFI_SIMPLE_FILE_SYSTEM_PROTOCOL_OPEN_VOLUME OpenVolume; |
| }; |
| |
| /** |
| Opens a new file relative to the source file's location. |
| |
| @param This A pointer to the EFI_FILE_PROTOCOL instance that is the file |
| handle to the source location. This would typically be an open |
| handle to a directory. |
| @param NewHandle A pointer to the location to return the opened handle for the new |
| file. |
| @param FileName The Null-terminated string of the name of the file to be opened. |
| The file name may contain the following path modifiers: "\", ".", |
| and "..". |
| @param OpenMode The mode to open the file. The only valid combinations that the |
| file may be opened with are: Read, Read/Write, or Create/Read/Write. |
| @param Attributes Only valid for EFI_FILE_MODE_CREATE, in which case these are the |
| attribute bits for the newly created file. |
| |
| @retval EFI_SUCCESS The file was opened. |
| @retval EFI_NOT_FOUND The specified file could not be found on the device. |
| @retval EFI_NO_MEDIA The device has no medium. |
| @retval EFI_MEDIA_CHANGED The device has a different medium in it or the medium is no |
| longer supported. |
| @retval EFI_DEVICE_ERROR The device reported an error. |
| @retval EFI_VOLUME_CORRUPTED The file system structures are corrupted. |
| @retval EFI_WRITE_PROTECTED An attempt was made to create a file, or open a file for write |
| when the media is write-protected. |
| @retval EFI_ACCESS_DENIED The service denied access to the file. |
| @retval EFI_OUT_OF_RESOURCES Not enough resources were available to open the file. |
| @retval EFI_VOLUME_FULL The volume is full. |
| |
| **/ |
| typedef |
| EFI_STATUS |
| (EFIAPI *EFI_FILE_OPEN)( |
| IN EFI_FILE_PROTOCOL *This, |
| OUT EFI_FILE_PROTOCOL **NewHandle, |
| IN CHAR16 *FileName, |
| IN UINT64 OpenMode, |
| IN UINT64 Attributes |
| ); |
| |
| // |
| // Open modes |
| // |
| #define EFI_FILE_MODE_READ 0x0000000000000001ULL |
| #define EFI_FILE_MODE_WRITE 0x0000000000000002ULL |
| #define EFI_FILE_MODE_CREATE 0x8000000000000000ULL |
| |
| // |
| // File attributes |
| // |
| #define EFI_FILE_READ_ONLY 0x0000000000000001ULL |
| #define EFI_FILE_HIDDEN 0x0000000000000002ULL |
| #define EFI_FILE_SYSTEM 0x0000000000000004ULL |
| #define EFI_FILE_RESERVED 0x0000000000000008ULL |
| #define EFI_FILE_DIRECTORY 0x0000000000000010ULL |
| #define EFI_FILE_ARCHIVE 0x0000000000000020ULL |
| #define EFI_FILE_VALID_ATTR 0x0000000000000037ULL |
| |
| /** |
| Closes a specified file handle. |
| |
| @param This A pointer to the EFI_FILE_PROTOCOL instance that is the file |
| handle to close. |
| |
| @retval EFI_SUCCESS The file was closed. |
| |
| **/ |
| typedef |
| EFI_STATUS |
| (EFIAPI *EFI_FILE_CLOSE)( |
| IN EFI_FILE_PROTOCOL *This |
| ); |
| |
| /** |
| Close and delete the file handle. |
| |
| @param This A pointer to the EFI_FILE_PROTOCOL instance that is the |
| handle to the file to delete. |
| |
| @retval EFI_SUCCESS The file was closed and deleted, and the handle was closed. |
| @retval EFI_WARN_DELETE_FAILURE The handle was closed, but the file was not deleted. |
| |
| **/ |
| typedef |
| EFI_STATUS |
| (EFIAPI *EFI_FILE_DELETE)( |
| IN EFI_FILE_PROTOCOL *This |
| ); |
| |
| /** |
| Reads data from a file. |
| |
| @param This A pointer to the EFI_FILE_PROTOCOL instance that is the file |
| handle to read data from. |
| @param BufferSize On input, the size of the Buffer. On output, the amount of data |
| returned in Buffer. In both cases, the size is measured in bytes. |
| @param Buffer The buffer into which the data is read. |
| |
| @retval EFI_SUCCESS Data was read. |
| @retval EFI_NO_MEDIA The device has no medium. |
| @retval EFI_DEVICE_ERROR The device reported an error. |
| @retval EFI_DEVICE_ERROR An attempt was made to read from a deleted file. |
| @retval EFI_DEVICE_ERROR On entry, the current file position is beyond the end of the file. |
| @retval EFI_VOLUME_CORRUPTED The file system structures are corrupted. |
| @retval EFI_BUFFER_TOO_SMALL The BufferSize is too small to read the current directory |
| entry. BufferSize has been updated with the size |
| needed to complete the request. |
| |
| **/ |
| typedef |
| EFI_STATUS |
| (EFIAPI *EFI_FILE_READ)( |
| IN EFI_FILE_PROTOCOL *This, |
| IN OUT UINTN *BufferSize, |
| OUT VOID *Buffer |
| ); |
| |
| /** |
| Writes data to a file. |
| |
| @param This A pointer to the EFI_FILE_PROTOCOL instance that is the file |
| handle to write data to. |
| @param BufferSize On input, the size of the Buffer. On output, the amount of data |
| actually written. In both cases, the size is measured in bytes. |
| @param Buffer The buffer of data to write. |
| |
| @retval EFI_SUCCESS Data was written. |
| @retval EFI_UNSUPPORTED Writes to open directory files are not supported. |
| @retval EFI_NO_MEDIA The device has no medium. |
| @retval EFI_DEVICE_ERROR The device reported an error. |
| @retval EFI_DEVICE_ERROR An attempt was made to write to a deleted file. |
| @retval EFI_VOLUME_CORRUPTED The file system structures are corrupted. |
| @retval EFI_WRITE_PROTECTED The file or medium is write-protected. |
| @retval EFI_ACCESS_DENIED The file was opened read only. |
| @retval EFI_VOLUME_FULL The volume is full. |
| |
| **/ |
| typedef |
| EFI_STATUS |
| (EFIAPI *EFI_FILE_WRITE)( |
| IN EFI_FILE_PROTOCOL *This, |
| IN OUT UINTN *BufferSize, |
| IN VOID *Buffer |
| ); |
| |
| /** |
| Sets a file's current position. |
| |
| @param This A pointer to the EFI_FILE_PROTOCOL instance that is the |
| file handle to set the requested position on. |
| @param Position The byte position from the start of the file to set. |
| |
| @retval EFI_SUCCESS The position was set. |
| @retval EFI_UNSUPPORTED The seek request for nonzero is not valid on open |
| directories. |
| @retval EFI_DEVICE_ERROR An attempt was made to set the position of a deleted file. |
| |
| **/ |
| typedef |
| EFI_STATUS |
| (EFIAPI *EFI_FILE_SET_POSITION)( |
| IN EFI_FILE_PROTOCOL *This, |
| IN UINT64 Position |
| ); |
| |
| /** |
| Returns a file's current position. |
| |
| @param This A pointer to the EFI_FILE_PROTOCOL instance that is the file |
| handle to get the current position on. |
| @param Position The address to return the file's current position value. |
| |
| @retval EFI_SUCCESS The position was returned. |
| @retval EFI_UNSUPPORTED The request is not valid on open directories. |
| @retval EFI_DEVICE_ERROR An attempt was made to get the position from a deleted file. |
| |
| **/ |
| typedef |
| EFI_STATUS |
| (EFIAPI *EFI_FILE_GET_POSITION)( |
| IN EFI_FILE_PROTOCOL *This, |
| OUT UINT64 *Position |
| ); |
| |
| /** |
| Returns information about a file. |
| |
| @param This A pointer to the EFI_FILE_PROTOCOL instance that is the file |
| handle the requested information is for. |
| @param InformationType The type identifier for the information being requested. |
| @param BufferSize On input, the size of Buffer. On output, the amount of data |
| returned in Buffer. In both cases, the size is measured in bytes. |
| @param Buffer A pointer to the data buffer to return. The buffer's type is |
| indicated by InformationType. |
| |
| @retval EFI_SUCCESS The information was returned. |
| @retval EFI_UNSUPPORTED The InformationType is not known. |
| @retval EFI_NO_MEDIA The device has no medium. |
| @retval EFI_DEVICE_ERROR The device reported an error. |
| @retval EFI_VOLUME_CORRUPTED The file system structures are corrupted. |
| @retval EFI_BUFFER_TOO_SMALL The BufferSize is too small to read the current directory entry. |
| BufferSize has been updated with the size needed to complete |
| the request. |
| **/ |
| typedef |
| EFI_STATUS |
| (EFIAPI *EFI_FILE_GET_INFO)( |
| IN EFI_FILE_PROTOCOL *This, |
| IN EFI_GUID *InformationType, |
| IN OUT UINTN *BufferSize, |
| OUT VOID *Buffer |
| ); |
| |
| /** |
| Sets information about a file. |
| |
| @param File A pointer to the EFI_FILE_PROTOCOL instance that is the file |
| handle the information is for. |
| @param InformationType The type identifier for the information being set. |
| @param BufferSize The size, in bytes, of Buffer. |
| @param Buffer A pointer to the data buffer to write. The buffer's type is |
| indicated by InformationType. |
| |
| @retval EFI_SUCCESS The information was set. |
| @retval EFI_UNSUPPORTED The InformationType is not known. |
| @retval EFI_NO_MEDIA The device has no medium. |
| @retval EFI_DEVICE_ERROR The device reported an error. |
| @retval EFI_VOLUME_CORRUPTED The file system structures are corrupted. |
| @retval EFI_WRITE_PROTECTED InformationType is EFI_FILE_INFO_ID and the media is |
| read-only. |
| @retval EFI_WRITE_PROTECTED InformationType is EFI_FILE_PROTOCOL_SYSTEM_INFO_ID |
| and the media is read only. |
| @retval EFI_WRITE_PROTECTED InformationType is EFI_FILE_SYSTEM_VOLUME_LABEL_ID |
| and the media is read-only. |
| @retval EFI_ACCESS_DENIED An attempt is made to change the name of a file to a |
| file that is already present. |
| @retval EFI_ACCESS_DENIED An attempt is being made to change the EFI_FILE_DIRECTORY |
| Attribute. |
| @retval EFI_ACCESS_DENIED An attempt is being made to change the size of a directory. |
| @retval EFI_ACCESS_DENIED InformationType is EFI_FILE_INFO_ID and the file was opened |
| read-only and an attempt is being made to modify a field |
| other than Attribute. |
| @retval EFI_VOLUME_FULL The volume is full. |
| @retval EFI_BAD_BUFFER_SIZE BufferSize is smaller than the size of the type indicated |
| by InformationType. |
| |
| **/ |
| typedef |
| EFI_STATUS |
| (EFIAPI *EFI_FILE_SET_INFO)( |
| IN EFI_FILE_PROTOCOL *This, |
| IN EFI_GUID *InformationType, |
| IN UINTN BufferSize, |
| IN VOID *Buffer |
| ); |
| |
| /** |
| Flushes all modified data associated with a file to a device. |
| |
| @param This A pointer to the EFI_FILE_PROTOCOL instance that is the file |
| handle to flush. |
| |
| @retval EFI_SUCCESS The data was flushed. |
| @retval EFI_NO_MEDIA The device has no medium. |
| @retval EFI_DEVICE_ERROR The device reported an error. |
| @retval EFI_VOLUME_CORRUPTED The file system structures are corrupted. |
| @retval EFI_WRITE_PROTECTED The file or medium is write-protected. |
| @retval EFI_ACCESS_DENIED The file was opened read-only. |
| @retval EFI_VOLUME_FULL The volume is full. |
| |
| **/ |
| typedef |
| EFI_STATUS |
| (EFIAPI *EFI_FILE_FLUSH)( |
| IN EFI_FILE_PROTOCOL *This |
| ); |
| |
| typedef struct { |
| // |
| // If Event is NULL, then blocking I/O is performed. |
| // If Event is not NULL and non-blocking I/O is supported, then non-blocking I/O is performed, |
| // and Event will be signaled when the read request is completed. |
| // The caller must be prepared to handle the case where the callback associated with Event |
| // occurs before the original asynchronous I/O request call returns. |
| // |
| EFI_EVENT Event; |
| |
| // |
| // Defines whether or not the signaled event encountered an error. |
| // |
| EFI_STATUS Status; |
| |
| // |
| // For OpenEx(): Not Used, ignored. |
| // For ReadEx(): On input, the size of the Buffer. On output, the amount of data returned in Buffer. |
| // In both cases, the size is measured in bytes. |
| // For WriteEx(): On input, the size of the Buffer. On output, the amount of data actually written. |
| // In both cases, the size is measured in bytes. |
| // For FlushEx(): Not used, ignored. |
| // |
| UINTN BufferSize; |
| |
| // |
| // For OpenEx(): Not Used, ignored. |
| // For ReadEx(): The buffer into which the data is read. |
| // For WriteEx(): The buffer of data to write. |
| // For FlushEx(): Not Used, ignored. |
| // |
| VOID *Buffer; |
| } EFI_FILE_IO_TOKEN; |
| |
| /** |
| Opens a new file relative to the source directory's location. |
| |
| @param This A pointer to the EFI_FILE_PROTOCOL instance that is the file |
| handle to the source location. |
| @param NewHandle A pointer to the location to return the opened handle for the new |
| file. |
| @param FileName The Null-terminated string of the name of the file to be opened. |
| The file name may contain the following path modifiers: "\", ".", |
| and "..". |
| @param OpenMode The mode to open the file. The only valid combinations that the |
| file may be opened with are: Read, Read/Write, or Create/Read/Write. |
| @param Attributes Only valid for EFI_FILE_MODE_CREATE, in which case these are the |
| attribute bits for the newly created file. |
| @param Token A pointer to the token associated with the transaction. |
| |
| @retval EFI_SUCCESS If Event is NULL (blocking I/O): The data was read successfully. |
| If Event is not NULL (asynchronous I/O): The request was successfully |
| queued for processing. |
| @retval EFI_NOT_FOUND The specified file could not be found on the device. |
| @retval EFI_NO_MEDIA The device has no medium. |
| @retval EFI_MEDIA_CHANGED The device has a different medium in it or the medium is no |
| longer supported. |
| @retval EFI_DEVICE_ERROR The device reported an error. |
| @retval EFI_VOLUME_CORRUPTED The file system structures are corrupted. |
| @retval EFI_WRITE_PROTECTED An attempt was made to create a file, or open a file for write |
| when the media is write-protected. |
| @retval EFI_ACCESS_DENIED The service denied access to the file. |
| @retval EFI_OUT_OF_RESOURCES Not enough resources were available to open the file. |
| @retval EFI_VOLUME_FULL The volume is full. |
| |
| **/ |
| typedef |
| EFI_STATUS |
| (EFIAPI *EFI_FILE_OPEN_EX)( |
| IN EFI_FILE_PROTOCOL *This, |
| OUT EFI_FILE_PROTOCOL **NewHandle, |
| IN CHAR16 *FileName, |
| IN UINT64 OpenMode, |
| IN UINT64 Attributes, |
| IN OUT EFI_FILE_IO_TOKEN *Token |
| ); |
| |
| /** |
| Reads data from a file. |
| |
| @param This A pointer to the EFI_FILE_PROTOCOL instance that is the file handle to read data from. |
| @param Token A pointer to the token associated with the transaction. |
| |
| @retval EFI_SUCCESS If Event is NULL (blocking I/O): The data was read successfully. |
| If Event is not NULL (asynchronous I/O): The request was successfully |
| queued for processing. |
| @retval EFI_NO_MEDIA The device has no medium. |
| @retval EFI_DEVICE_ERROR The device reported an error. |
| @retval EFI_DEVICE_ERROR An attempt was made to read from a deleted file. |
| @retval EFI_DEVICE_ERROR On entry, the current file position is beyond the end of the file. |
| @retval EFI_VOLUME_CORRUPTED The file system structures are corrupted. |
| @retval EFI_OUT_OF_RESOURCES Unable to queue the request due to lack of resources. |
| **/ |
| typedef |
| EFI_STATUS |
| (EFIAPI *EFI_FILE_READ_EX)( |
| IN EFI_FILE_PROTOCOL *This, |
| IN OUT EFI_FILE_IO_TOKEN *Token |
| ); |
| |
| /** |
| Writes data to a file. |
| |
| @param This A pointer to the EFI_FILE_PROTOCOL instance that is the file handle to write data to. |
| @param Token A pointer to the token associated with the transaction. |
| |
| @retval EFI_SUCCESS If Event is NULL (blocking I/O): The data was read successfully. |
| If Event is not NULL (asynchronous I/O): The request was successfully |
| queued for processing. |
| @retval EFI_UNSUPPORTED Writes to open directory files are not supported. |
| @retval EFI_NO_MEDIA The device has no medium. |
| @retval EFI_DEVICE_ERROR The device reported an error. |
| @retval EFI_DEVICE_ERROR An attempt was made to write to a deleted file. |
| @retval EFI_VOLUME_CORRUPTED The file system structures are corrupted. |
| @retval EFI_WRITE_PROTECTED The file or medium is write-protected. |
| @retval EFI_ACCESS_DENIED The file was opened read only. |
| @retval EFI_VOLUME_FULL The volume is full. |
| @retval EFI_OUT_OF_RESOURCES Unable to queue the request due to lack of resources. |
| **/ |
| typedef |
| EFI_STATUS |
| (EFIAPI *EFI_FILE_WRITE_EX)( |
| IN EFI_FILE_PROTOCOL *This, |
| IN OUT EFI_FILE_IO_TOKEN *Token |
| ); |
| |
| /** |
| Flushes all modified data associated with a file to a device. |
| |
| @param This A pointer to the EFI_FILE_PROTOCOL instance that is the file |
| handle to flush. |
| @param Token A pointer to the token associated with the transaction. |
| |
| @retval EFI_SUCCESS If Event is NULL (blocking I/O): The data was read successfully. |
| If Event is not NULL (asynchronous I/O): The request was successfully |
| queued for processing. |
| @retval EFI_NO_MEDIA The device has no medium. |
| @retval EFI_DEVICE_ERROR The device reported an error. |
| @retval EFI_VOLUME_CORRUPTED The file system structures are corrupted. |
| @retval EFI_WRITE_PROTECTED The file or medium is write-protected. |
| @retval EFI_ACCESS_DENIED The file was opened read-only. |
| @retval EFI_VOLUME_FULL The volume is full. |
| @retval EFI_OUT_OF_RESOURCES Unable to queue the request due to lack of resources. |
| |
| **/ |
| typedef |
| EFI_STATUS |
| (EFIAPI *EFI_FILE_FLUSH_EX)( |
| IN EFI_FILE_PROTOCOL *This, |
| IN OUT EFI_FILE_IO_TOKEN *Token |
| ); |
| |
| #define EFI_FILE_PROTOCOL_REVISION 0x00010000 |
| #define EFI_FILE_PROTOCOL_REVISION2 0x00020000 |
| #define EFI_FILE_PROTOCOL_LATEST_REVISION EFI_FILE_PROTOCOL_REVISION2 |
| |
| // |
| // Revision defined in EFI1.1. |
| // |
| #define EFI_FILE_REVISION EFI_FILE_PROTOCOL_REVISION |
| |
| /// |
| /// The EFI_FILE_PROTOCOL provides file IO access to supported file systems. |
| /// An EFI_FILE_PROTOCOL provides access to a file's or directory's contents, |
| /// and is also a reference to a location in the directory tree of the file system |
| /// in which the file resides. With any given file handle, other files may be opened |
| /// relative to this file's location, yielding new file handles. |
| /// |
| struct _EFI_FILE_PROTOCOL { |
| /// |
| /// The version of the EFI_FILE_PROTOCOL interface. The version specified |
| /// by this specification is EFI_FILE_PROTOCOL_LATEST_REVISION. |
| /// Future versions are required to be backward compatible to version 1.0. |
| /// |
| UINT64 Revision; |
| EFI_FILE_OPEN Open; |
| EFI_FILE_CLOSE Close; |
| EFI_FILE_DELETE Delete; |
| EFI_FILE_READ Read; |
| EFI_FILE_WRITE Write; |
| EFI_FILE_GET_POSITION GetPosition; |
| EFI_FILE_SET_POSITION SetPosition; |
| EFI_FILE_GET_INFO GetInfo; |
| EFI_FILE_SET_INFO SetInfo; |
| EFI_FILE_FLUSH Flush; |
| EFI_FILE_OPEN_EX OpenEx; |
| EFI_FILE_READ_EX ReadEx; |
| EFI_FILE_WRITE_EX WriteEx; |
| EFI_FILE_FLUSH_EX FlushEx; |
| }; |
| |
| extern EFI_GUID gEfiSimpleFileSystemProtocolGuid; |
| |
| #endif |