2007-06-19 12:12:02 +02:00
|
|
|
/** @file
|
2007-11-22 07:00:39 +01:00
|
|
|
SimpleFileSystem protocol as defined in the UEFI 2.0 specification.
|
2007-06-19 12:12:02 +02:00
|
|
|
|
2009-06-04 07:49:29 +02:00
|
|
|
The SimpleFileSystem protocol is the programmatic access to the FAT (12,16,32)
|
2007-11-22 07:00:39 +01:00
|
|
|
file system specified in UEFI 2.0. It can also be used to abstract a file
|
2007-06-19 12:12:02 +02:00
|
|
|
system other than FAT.
|
|
|
|
|
2009-06-04 07:49:29 +02:00
|
|
|
UEFI 2.0 can boot from any valid EFI image contained in a SimpleFileSystem.
|
2007-06-19 12:12:02 +02:00
|
|
|
|
2008-07-25 12:37:15 +02:00
|
|
|
Copyright (c) 2006 - 2008, Intel Corporation
|
2007-06-19 12:12:02 +02:00
|
|
|
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.
|
|
|
|
|
|
|
|
**/
|
|
|
|
|
|
|
|
#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;
|
2007-06-21 09:16:27 +02:00
|
|
|
|
|
|
|
typedef struct _EFI_FILE_PROTOCOL EFI_FILE_PROTOCOL;
|
|
|
|
typedef struct _EFI_FILE_PROTOCOL *EFI_FILE_HANDLE;
|
|
|
|
|
2008-08-14 06:29:48 +02:00
|
|
|
///
|
2008-12-09 15:04:41 +01:00
|
|
|
/// Protocol GUID name defined in EFI1.1.
|
2008-08-14 06:29:48 +02:00
|
|
|
///
|
2007-06-21 09:16:27 +02:00
|
|
|
#define SIMPLE_FILE_SYSTEM_PROTOCOL EFI_SIMPLE_FILE_SYSTEM_PROTOCOL_GUID
|
|
|
|
|
2008-08-14 06:29:48 +02:00
|
|
|
///
|
2008-12-09 15:04:41 +01:00
|
|
|
/// Protocol name defined in EFI1.1.
|
2008-08-14 06:29:48 +02:00
|
|
|
///
|
2007-06-21 09:16:27 +02:00
|
|
|
typedef EFI_SIMPLE_FILE_SYSTEM_PROTOCOL EFI_FILE_IO_INTERFACE;
|
|
|
|
typedef struct _EFI_FILE_PROTOCOL EFI_FILE;
|
2007-06-19 12:12:02 +02:00
|
|
|
|
|
|
|
/**
|
|
|
|
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
|
2008-06-24 09:14:18 +02:00
|
|
|
(EFIAPI *EFI_SIMPLE_FILE_SYSTEM_PROTOCOL_OPEN_VOLUME)(
|
2007-06-19 12:12:02 +02:00
|
|
|
IN EFI_SIMPLE_FILE_SYSTEM_PROTOCOL *This,
|
2007-06-21 09:16:27 +02:00
|
|
|
OUT EFI_FILE_PROTOCOL **Root
|
2008-09-04 11:37:28 +02:00
|
|
|
);
|
2007-06-19 12:12:02 +02:00
|
|
|
|
|
|
|
#define EFI_SIMPLE_FILE_SYSTEM_PROTOCOL_REVISION 0x00010000
|
2008-12-09 15:04:41 +01:00
|
|
|
|
2008-08-14 06:29:48 +02:00
|
|
|
///
|
|
|
|
/// Revision defined in EFI1.1
|
|
|
|
///
|
2007-06-21 09:16:27 +02:00
|
|
|
#define EFI_FILE_IO_INTERFACE_REVISION EFI_SIMPLE_FILE_SYSTEM_PROTOCOL_REVISION
|
2007-06-19 12:12:02 +02:00
|
|
|
|
|
|
|
struct _EFI_SIMPLE_FILE_SYSTEM_PROTOCOL {
|
2008-12-09 15:04:41 +01:00
|
|
|
///
|
|
|
|
/// The version of the EFI_SIMPLE_FILE_SYSTEM_PROTOCOL. The version
|
|
|
|
/// specified by this specification is 0x00010000. All future revisions
|
|
|
|
/// must be backwards compatible.
|
|
|
|
///
|
2007-06-19 12:12:02 +02:00
|
|
|
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
|
2008-06-24 09:14:18 +02:00
|
|
|
(EFIAPI *EFI_FILE_OPEN)(
|
2007-06-21 09:16:27 +02:00
|
|
|
IN EFI_FILE_PROTOCOL *This,
|
|
|
|
OUT EFI_FILE_PROTOCOL **NewHandle,
|
2007-06-19 12:12:02 +02:00
|
|
|
IN CHAR16 *FileName,
|
|
|
|
IN UINT64 OpenMode,
|
|
|
|
IN UINT64 Attributes
|
2008-09-04 11:37:28 +02:00
|
|
|
);
|
2007-06-19 12:12:02 +02:00
|
|
|
|
|
|
|
//
|
|
|
|
// 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
|
2008-06-24 09:14:18 +02:00
|
|
|
(EFIAPI *EFI_FILE_CLOSE)(
|
2007-06-19 12:12:02 +02:00
|
|
|
IN EFI_FILE *This
|
2008-09-04 11:37:28 +02:00
|
|
|
);
|
2007-06-19 12:12:02 +02:00
|
|
|
|
|
|
|
/**
|
|
|
|
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
|
2008-06-24 09:14:18 +02:00
|
|
|
(EFIAPI *EFI_FILE_DELETE)(
|
2007-06-19 12:12:02 +02:00
|
|
|
IN EFI_FILE *This
|
2008-09-04 11:37:28 +02:00
|
|
|
);
|
2007-06-19 12:12:02 +02:00
|
|
|
|
|
|
|
/**
|
|
|
|
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
|
2008-06-24 09:14:18 +02:00
|
|
|
(EFIAPI *EFI_FILE_READ)(
|
2007-06-21 09:16:27 +02:00
|
|
|
IN EFI_FILE_PROTOCOL *This,
|
2007-06-19 12:12:02 +02:00
|
|
|
IN OUT UINTN *BufferSize,
|
|
|
|
OUT VOID *Buffer
|
2008-09-04 11:37:28 +02:00
|
|
|
);
|
2007-06-19 12:12:02 +02:00
|
|
|
|
|
|
|
/**
|
2009-06-04 07:49:29 +02:00
|
|
|
Write data from or to the file.
|
2007-06-19 12:12:02 +02:00
|
|
|
|
|
|
|
@param This Protocol instance pointer.
|
2009-06-04 07:49:29 +02:00
|
|
|
@param BufferSize On input: size of buffer. On output: amount of data in buffer.
|
|
|
|
@param Buffer The buffer in which to write data.
|
2007-06-19 12:12:02 +02:00
|
|
|
|
|
|
|
@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
|
2008-06-24 09:14:18 +02:00
|
|
|
(EFIAPI *EFI_FILE_WRITE)(
|
2007-06-21 09:16:27 +02:00
|
|
|
IN EFI_FILE_PROTOCOL *This,
|
2007-06-19 12:12:02 +02:00
|
|
|
IN OUT UINTN *BufferSize,
|
|
|
|
IN VOID *Buffer
|
2008-09-04 11:37:28 +02:00
|
|
|
);
|
2007-06-19 12:12:02 +02:00
|
|
|
|
|
|
|
/**
|
|
|
|
Set a files current position
|
|
|
|
|
|
|
|
@param This Protocol instance pointer.
|
2009-06-04 07:49:29 +02:00
|
|
|
@param Position Byte position, from the start of the file
|
2007-06-19 12:12:02 +02:00
|
|
|
|
|
|
|
@retval EFI_SUCCESS Data was written.
|
|
|
|
@retval EFI_UNSUPPORTED Seek request for non-zero is not valid on open.
|
|
|
|
|
|
|
|
**/
|
|
|
|
typedef
|
|
|
|
EFI_STATUS
|
2008-06-24 09:14:18 +02:00
|
|
|
(EFIAPI *EFI_FILE_SET_POSITION)(
|
2007-06-21 09:16:27 +02:00
|
|
|
IN EFI_FILE_PROTOCOL *This,
|
2007-06-19 12:12:02 +02:00
|
|
|
IN UINT64 Position
|
2008-09-04 11:37:28 +02:00
|
|
|
);
|
2007-06-19 12:12:02 +02:00
|
|
|
|
|
|
|
/**
|
2009-06-04 07:49:29 +02:00
|
|
|
Get a file's current position
|
2007-06-19 12:12:02 +02:00
|
|
|
|
|
|
|
@param This Protocol instance pointer.
|
2009-06-04 07:49:29 +02:00
|
|
|
@param Position Byte position, from the start of the file
|
2007-06-19 12:12:02 +02:00
|
|
|
|
|
|
|
@retval EFI_SUCCESS Data was written.
|
|
|
|
@retval EFI_UNSUPPORTED Seek request for non-zero is not valid on open.
|
|
|
|
|
|
|
|
**/
|
|
|
|
typedef
|
|
|
|
EFI_STATUS
|
2008-06-24 09:14:18 +02:00
|
|
|
(EFIAPI *EFI_FILE_GET_POSITION)(
|
2007-06-21 09:16:27 +02:00
|
|
|
IN EFI_FILE_PROTOCOL *This,
|
2007-06-19 12:12:02 +02:00
|
|
|
OUT UINT64 *Position
|
2008-09-04 11:37:28 +02:00
|
|
|
);
|
2007-06-19 12:12:02 +02:00
|
|
|
|
|
|
|
/**
|
|
|
|
Get information about a file
|
|
|
|
|
|
|
|
@param This Protocol instance pointer.
|
|
|
|
@param InformationType Type of info to return in Buffer
|
2009-06-04 07:49:29 +02:00
|
|
|
@param BufferSize On input: size of buffer. On output: amount of data in buffer.
|
2007-06-19 12:12:02 +02:00
|
|
|
@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
|
2008-06-24 09:14:18 +02:00
|
|
|
(EFIAPI *EFI_FILE_GET_INFO)(
|
2007-06-21 09:16:27 +02:00
|
|
|
IN EFI_FILE_PROTOCOL *This,
|
2007-06-19 12:12:02 +02:00
|
|
|
IN EFI_GUID *InformationType,
|
|
|
|
IN OUT UINTN *BufferSize,
|
|
|
|
OUT VOID *Buffer
|
2008-09-04 11:37:28 +02:00
|
|
|
);
|
2007-06-19 12:12:02 +02:00
|
|
|
|
|
|
|
/**
|
|
|
|
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
|
2008-06-24 09:14:18 +02:00
|
|
|
(EFIAPI *EFI_FILE_SET_INFO)(
|
2007-06-21 09:16:27 +02:00
|
|
|
IN EFI_FILE_PROTOCOL *This,
|
2007-06-19 12:12:02 +02:00
|
|
|
IN EFI_GUID *InformationType,
|
|
|
|
IN UINTN BufferSize,
|
|
|
|
IN VOID *Buffer
|
2008-09-04 11:37:28 +02:00
|
|
|
);
|
2007-06-19 12:12:02 +02:00
|
|
|
|
|
|
|
/**
|
|
|
|
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
|
2008-06-24 09:14:18 +02:00
|
|
|
(EFIAPI *EFI_FILE_FLUSH)(
|
2007-06-19 12:12:02 +02:00
|
|
|
IN EFI_FILE *This
|
2008-09-04 11:37:28 +02:00
|
|
|
);
|
2007-06-19 12:12:02 +02:00
|
|
|
|
2007-06-21 09:16:27 +02:00
|
|
|
#define EFI_FILE_PROTOCOL_REVISION 0x00010000
|
|
|
|
//
|
|
|
|
// Revision defined in EFI1.1.
|
|
|
|
//
|
|
|
|
#define EFI_FILE_REVISION EFI_FILE_PROTOCOL_REVISION
|
2007-06-19 12:12:02 +02:00
|
|
|
|
2008-10-13 04:54:29 +02:00
|
|
|
///
|
|
|
|
/// 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.
|
|
|
|
///
|
2007-06-21 09:16:27 +02:00
|
|
|
struct _EFI_FILE_PROTOCOL {
|
2008-10-09 21:17:35 +02:00
|
|
|
///
|
|
|
|
/// The version of the EFI_FILE_PROTOCOL interface. The version specified
|
|
|
|
/// by this specification is 0x00010000. Future versions are required
|
|
|
|
/// to be backward compatible to version 1.0.
|
|
|
|
///
|
2007-06-19 12:12:02 +02:00
|
|
|
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
|