/** @file | |
SimpleFileSystem protocol as defined in the EFI 1.0 specification. | |
The SimpleFileSystem protocol is the programatic access to the FAT (12,16,32) | |
file system specified in EFI 1.0. It can also be used to abstract a file | |
system other than FAT. | |
EFI 1.0 can boot from any valid EFI image contained in a SimpleFileSystem | |
Copyright (c) 2006, Intel Corporation | |
All rights reserved. This program and the accompanying materials | |
are licensed and made available under the terms and conditions of the BSD License | |
which 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. | |
Module Name: SimpleFileSystem.h | |
**/ | |
#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 EFI_FILE; | |
typedef struct _EFI_FILE *EFI_FILE_HANDLE; | |
typedef struct _EFI_FILE EFI_FILE_PROTOCOL; | |
/** | |
Open the root directory on a volume. | |
@param This Protocol instance pointer. | |
@param Root Returns an Open file handle for the root directory | |
@retval EFI_SUCCESS The device was opened. | |
@retval EFI_UNSUPPORTED This volume does not suppor the file system. | |
@retval EFI_NO_MEDIA The device has no media. | |
@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 | |
**/ | |
typedef | |
EFI_STATUS | |
(EFIAPI *EFI_SIMPLE_FILE_SYSTEM_PROTOCOL_OPEN_VOLUME) ( | |
IN EFI_SIMPLE_FILE_SYSTEM_PROTOCOL *This, | |
OUT EFI_FILE **Root | |
) | |
; | |
#define EFI_SIMPLE_FILE_SYSTEM_PROTOCOL_REVISION 0x00010000 | |
struct _EFI_SIMPLE_FILE_SYSTEM_PROTOCOL { | |
UINT64 Revision; | |
EFI_SIMPLE_FILE_SYSTEM_PROTOCOL_OPEN_VOLUME OpenVolume; | |
}; | |
/** | |
Open the root directory on a volume. | |
@param This Protocol instance pointer. | |
@param NewHandle Returns File Handle for FileName | |
@param FileName Null terminated string. "\", ".", and ".." are supported | |
@param OpenMode Open mode for file. | |
@param Attributes Only used for EFI_FILE_MODE_CREATE | |
@retval EFI_SUCCESS The device was opened. | |
@retval EFI_NOT_FOUND The specified file could not be found on the device | |
@retval EFI_NO_MEDIA The device has no media. | |
@retval EFI_MEDIA_CHANGED The media has changed | |
@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_VOLUME_FULL The volume is full. | |
**/ | |
typedef | |
EFI_STATUS | |
(EFIAPI *EFI_FILE_OPEN) ( | |
IN EFI_FILE *This, | |
OUT EFI_FILE **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 | |
/** | |
Close the file handle | |
@param This Protocol instance pointer. | |
@retval EFI_SUCCESS The device was opened. | |
**/ | |
typedef | |
EFI_STATUS | |
(EFIAPI *EFI_FILE_CLOSE) ( | |
IN EFI_FILE *This | |
) | |
; | |
/** | |
Close and delete the file handle | |
@param This Protocol instance pointer. | |
@retval EFI_SUCCESS The device was opened. | |
@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 *This | |
) | |
; | |
/** | |
Read data from the file. | |
@param This Protocol instance pointer. | |
@param BufferSize On input size of buffer, on output amount of data in buffer. | |
@param Buffer The buffer in which data is read. | |
@retval EFI_SUCCESS Data was read. | |
@retval EFI_NO_MEDIA The device has no media | |
@retval EFI_DEVICE_ERROR The device reported an error | |
@retval EFI_VOLUME_CORRUPTED The file system structures are corrupted | |
@retval EFI_BUFFER_TO_SMALL BufferSize is too small. BufferSize contains required size | |
**/ | |
typedef | |
EFI_STATUS | |
(EFIAPI *EFI_FILE_READ) ( | |
IN EFI_FILE *This, | |
IN OUT UINTN *BufferSize, | |
OUT VOID *Buffer | |
) | |
; | |
/** | |
Write data from to the file. | |
@param This Protocol instance pointer. | |
@param BufferSize On input size of buffer, on output amount of data in buffer. | |
@param Buffer The buffer in which data to write. | |
@retval EFI_SUCCESS Data was written. | |
@retval EFI_UNSUPPORT Writes to Open directory are not supported | |
@retval EFI_NO_MEDIA The device has no media | |
@retval EFI_DEVICE_ERROR The device reported an error | |
@retval EFI_VOLUME_CORRUPTED The file system structures are corrupted | |
@retval EFI_WRITE_PROTECTED The device is write protected | |
@retval EFI_ACCESS_DENIED The file was open for read only | |
@retval EFI_VOLUME_FULL The volume is full | |
**/ | |
typedef | |
EFI_STATUS | |
(EFIAPI *EFI_FILE_WRITE) ( | |
IN EFI_FILE *This, | |
IN OUT UINTN *BufferSize, | |
IN VOID *Buffer | |
) | |
; | |
/** | |
Set a files current position | |
@param This Protocol instance pointer. | |
@param Position Byte possition from the start of the file | |
@retval EFI_SUCCESS Data was written. | |
@retval EFI_UNSUPPORTED Seek request for non-zero is not valid on open. | |
**/ | |
typedef | |
EFI_STATUS | |
(EFIAPI *EFI_FILE_SET_POSITION) ( | |
IN EFI_FILE *This, | |
IN UINT64 Position | |
) | |
; | |
/** | |
Get a files current position | |
@param This Protocol instance pointer. | |
@param Position Byte possition from the start of the file | |
@retval EFI_SUCCESS Data was written. | |
@retval EFI_UNSUPPORTED Seek request for non-zero is not valid on open. | |
**/ | |
typedef | |
EFI_STATUS | |
(EFIAPI *EFI_FILE_GET_POSITION) ( | |
IN EFI_FILE *This, | |
OUT UINT64 *Position | |
) | |
; | |
/** | |
Get information about a file | |
@param This Protocol instance pointer. | |
@param InformationType Type of info to return in Buffer | |
@param BufferSize On input size of buffer, on output amount of data in buffer. | |
@param Buffer The buffer to return data. | |
@retval EFI_SUCCESS Data was returned. | |
@retval EFI_UNSUPPORT InformationType is not supported | |
@retval EFI_NO_MEDIA The device has no media | |
@retval EFI_DEVICE_ERROR The device reported an error | |
@retval EFI_VOLUME_CORRUPTED The file system structures are corrupted | |
@retval EFI_WRITE_PROTECTED The device is write protected | |
@retval EFI_ACCESS_DENIED The file was open for read only | |
@retval EFI_BUFFER_TOO_SMALL Buffer was too small, required size returned in BufferSize | |
**/ | |
typedef | |
EFI_STATUS | |
(EFIAPI *EFI_FILE_GET_INFO) ( | |
IN EFI_FILE *This, | |
IN EFI_GUID *InformationType, | |
IN OUT UINTN *BufferSize, | |
OUT VOID *Buffer | |
) | |
; | |
/** | |
Set information about a file | |
@param File Protocol instance pointer. | |
@param InformationType Type of info in Buffer | |
@param BufferSize Size of buffer. | |
@param Buffer The data to write. | |
@retval EFI_SUCCESS Data was returned. | |
@retval EFI_UNSUPPORT InformationType is not supported | |
@retval EFI_NO_MEDIA The device has no media | |
@retval EFI_DEVICE_ERROR The device reported an error | |
@retval EFI_VOLUME_CORRUPTED The file system structures are corrupted | |
@retval EFI_WRITE_PROTECTED The device is write protected | |
@retval EFI_ACCESS_DENIED The file was open for read only | |
**/ | |
typedef | |
EFI_STATUS | |
(EFIAPI *EFI_FILE_SET_INFO) ( | |
IN EFI_FILE *This, | |
IN EFI_GUID *InformationType, | |
IN UINTN BufferSize, | |
IN VOID *Buffer | |
) | |
; | |
/** | |
Flush data back for the file handle | |
@param This Protocol instance pointer. | |
@retval EFI_SUCCESS Data was written. | |
@retval EFI_UNSUPPORT Writes to Open directory are not supported | |
@retval EFI_NO_MEDIA The device has no media | |
@retval EFI_DEVICE_ERROR The device reported an error | |
@retval EFI_VOLUME_CORRUPTED The file system structures are corrupted | |
@retval EFI_WRITE_PROTECTED The device is write protected | |
@retval EFI_ACCESS_DENIED The file was open for read only | |
@retval EFI_VOLUME_FULL The volume is full | |
**/ | |
typedef | |
EFI_STATUS | |
(EFIAPI *EFI_FILE_FLUSH) ( | |
IN EFI_FILE *This | |
) | |
; | |
#define EFI_FILE_HANDLE_REVISION 0x00010000 | |
#define EFI_FILE_PROTOCOL_REVISION EFI_FILE_HANDLE_REVISION | |
struct _EFI_FILE { | |
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; | |
}; | |
extern EFI_GUID gEfiSimpleFileSystemProtocolGuid; | |
#endif |