/** @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 - 2014, Intel Corporation. All rights reserved.<BR> | |
This program and the accompanying materials are licensed and made available under | |
the terms and conditions of the BSD License that accompanies this distribution. | |
The full text of the license may be found at | |
http://opensource.org/licenses/bsd-license.php. | |
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, | |
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. | |
**/ | |
#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 |