/** @file | |
* | |
* Copyright (c) 2012-2014, ARM Limited. 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 __BOOTMON_FS_API_H | |
#define __BOOTMON_FS_API_H | |
#include <Protocol/SimpleFileSystem.h> | |
EFI_STATUS | |
BootMonFsInitialize ( | |
IN BOOTMON_FS_INSTANCE *Instance | |
); | |
UINT32 | |
BootMonFsChecksum ( | |
IN VOID *Data, | |
IN UINT32 Size | |
); | |
EFI_STATUS | |
BootMonFsComputeFooterChecksum ( | |
IN OUT HW_IMAGE_DESCRIPTION *Footer | |
); | |
EFIAPI | |
EFI_STATUS | |
OpenBootMonFsOpenVolume ( | |
IN EFI_SIMPLE_FILE_SYSTEM_PROTOCOL *This, | |
OUT EFI_FILE_PROTOCOL **Root | |
); | |
UINT32 | |
BootMonFsGetImageLength ( | |
IN BOOTMON_FS_FILE *File | |
); | |
UINTN | |
BootMonFsGetPhysicalSize ( | |
IN BOOTMON_FS_FILE* File | |
); | |
EFI_STATUS | |
BootMonFsCreateFile ( | |
IN BOOTMON_FS_INSTANCE *Instance, | |
OUT BOOTMON_FS_FILE **File | |
); | |
EFIAPI | |
EFI_STATUS | |
BootMonFsGetInfo ( | |
IN EFI_FILE_PROTOCOL *This, | |
IN EFI_GUID *InformationType, | |
IN OUT UINTN *BufferSize, | |
OUT VOID *Buffer | |
); | |
EFIAPI | |
EFI_STATUS | |
BootMonFsReadDirectory ( | |
IN EFI_FILE_PROTOCOL *This, | |
IN OUT UINTN *BufferSize, | |
OUT VOID *Buffer | |
); | |
EFIAPI | |
EFI_STATUS | |
BootMonFsFlushDirectory ( | |
IN EFI_FILE_PROTOCOL *This | |
); | |
/** | |
Flush all modified data associated with a file to a device. | |
@param[in] 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_ACCESS_DENIED The file was opened read-only. | |
@retval EFI_DEVICE_ERROR The device reported an error. | |
@retval EFI_VOLUME_FULL The volume is full. | |
@retval EFI_OUT_OF_RESOURCES Not enough resources were available to flush the data. | |
@retval EFI_INVALID_PARAMETER At least one of the parameters is invalid. | |
**/ | |
EFIAPI | |
EFI_STATUS | |
BootMonFsFlushFile ( | |
IN EFI_FILE_PROTOCOL *This | |
); | |
/** | |
Close a specified file handle. | |
@param[in] This A pointer to the EFI_FILE_PROTOCOL instance that is the file | |
handle to close. | |
@retval EFI_SUCCESS The file was closed. | |
@retval EFI_INVALID_PARAMETER The parameter "This" is NULL or is not an open | |
file handle. | |
**/ | |
EFIAPI | |
EFI_STATUS | |
BootMonFsCloseFile ( | |
IN EFI_FILE_PROTOCOL *This | |
); | |
/** | |
Open a file on the boot monitor file system. | |
The boot monitor file system does not allow for sub-directories. There is only | |
one directory, the root one. On any attempt to create a directory, the function | |
returns in error with the EFI_WRITE_PROTECTED error code. | |
@param[in] This A pointer to the EFI_FILE_PROTOCOL instance that is | |
the file handle to source location. | |
@param[out] NewHandle A pointer to the location to return the opened | |
handle for the new file. | |
@param[in] FileName The Null-terminated string of the name of the file | |
to be opened. | |
@param[in] OpenMode The mode to open the file : Read or Read/Write or | |
Read/Write/Create | |
@param[in] Attributes Attributes of the file in case of a file creation | |
@retval EFI_SUCCESS The file was open. | |
@retval EFI_NOT_FOUND The specified file could not be found or the specified | |
directory in which to create a file could not be found. | |
@retval EFI_DEVICE_ERROR The device reported an error. | |
@retval EFI_WRITE_PROTECTED Attempt to create a directory. This is not possible | |
with the Boot Monitor file system. | |
@retval EFI_OUT_OF_RESOURCES Not enough resources were available to open the file. | |
@retval EFI_INVALID_PARAMETER At least one of the parameters is invalid. | |
**/ | |
EFIAPI | |
EFI_STATUS | |
BootMonFsOpenFile ( | |
IN EFI_FILE_PROTOCOL *This, | |
OUT EFI_FILE_PROTOCOL **NewHandle, | |
IN CHAR16 *FileName, | |
IN UINT64 OpenMode, | |
IN UINT64 Attributes | |
); | |
/** | |
Read data from an open file. | |
@param[in] This A pointer to the EFI_FILE_PROTOCOL instance that | |
is the file handle to read data from. | |
@param[in out] 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[out] Buffer The buffer into which the data is read. | |
@retval EFI_SUCCESS The data was read. | |
@retval EFI_DEVICE_ERROR On entry, the current file position is | |
beyond the end of the file, or the device | |
reported an error while performing the read | |
operation. | |
@retval EFI_INVALID_PARAMETER At least one of the parameters is invalid. | |
**/ | |
EFIAPI | |
EFI_STATUS | |
BootMonFsReadFile ( | |
IN EFI_FILE_PROTOCOL *This, | |
IN OUT UINTN *BufferSize, | |
OUT VOID *Buffer | |
); | |
EFIAPI | |
EFI_STATUS | |
BootMonFsSetDirPosition ( | |
IN EFI_FILE_PROTOCOL *This, | |
IN UINT64 Position | |
); | |
EFIAPI | |
EFI_STATUS | |
BootMonFsGetPosition ( | |
IN EFI_FILE_PROTOCOL *This, | |
OUT UINT64 *Position | |
); | |
/** | |
Write data to an open file. | |
The data is not written to the flash yet. It will be written when the file | |
will be either read, closed or flushed. | |
@param[in] This A pointer to the EFI_FILE_PROTOCOL instance that | |
is the file handle to write data to. | |
@param[in out] BufferSize On input, the size of the Buffer. On output, the | |
size of the data actually written. In both cases, | |
the size is measured in bytes. | |
@param[in] Buffer The buffer of data to write. | |
@retval EFI_SUCCESS The data was written. | |
@retval EFI_ACCESS_DENIED The file was opened read only. | |
@retval EFI_OUT_OF_RESOURCES Unable to allocate the buffer to store the | |
data to write. | |
@retval EFI_INVALID_PARAMETER At least one of the parameters is invalid. | |
**/ | |
EFIAPI | |
EFI_STATUS | |
BootMonFsWriteFile ( | |
IN EFI_FILE_PROTOCOL *This, | |
IN OUT UINTN *BufferSize, | |
IN VOID *Buffer | |
); | |
EFIAPI | |
EFI_STATUS | |
BootMonFsDeleteFail ( | |
IN EFI_FILE_PROTOCOL *This | |
); | |
/** | |
Close and delete a file from the boot monitor file system. | |
@param[in] This A pointer to the EFI_FILE_PROTOCOL instance that is the file | |
handle to delete. | |
@retval EFI_SUCCESS The file was closed and deleted. | |
@retval EFI_INVALID_PARAMETER The parameter "This" is NULL or is not an open | |
file handle. | |
@retval EFI_WARN_DELETE_FAILURE The handle was closed, but the file was not deleted. | |
**/ | |
EFIAPI | |
EFI_STATUS | |
BootMonFsDelete ( | |
IN EFI_FILE_PROTOCOL *This | |
); | |
/** | |
Set a file's current position. | |
@param[in] This A pointer to the EFI_FILE_PROTOCOL instance that is | |
the file handle to set the requested position on. | |
@param[in] Position The byte position from the start of the file to set. | |
@retval EFI_SUCCESS The position was set. | |
@retval EFI_INVALID_PARAMETER At least one of the parameters is invalid. | |
**/ | |
EFIAPI | |
EFI_STATUS | |
BootMonFsSetPosition ( | |
IN EFI_FILE_PROTOCOL *This, | |
IN UINT64 Position | |
); | |
/** | |
Return a file's current position. | |
@param[in] This A pointer to the EFI_FILE_PROTOCOL instance that is | |
the file handle to get the current position on. | |
@param[out] Position The address to return the file's current position value. | |
@retval EFI_SUCCESS The position was returned. | |
@retval EFI_INVALID_PARAMETER At least one of the parameters is invalid. | |
**/ | |
EFIAPI | |
EFI_STATUS | |
BootMonFsGetPosition( | |
IN EFI_FILE_PROTOCOL *This, | |
OUT UINT64 *Position | |
); | |
// | |
// UNSUPPORTED OPERATIONS | |
// | |
EFIAPI | |
EFI_STATUS | |
BootMonFsGetPositionUnsupported ( | |
IN EFI_FILE_PROTOCOL *This, | |
OUT UINT64 *Position | |
); | |
/** | |
Set information about a file or a volume. | |
@param[in] This A pointer to the EFI_FILE_PROTOCOL instance that | |
is the file handle the information is for. | |
@param[in] InformationType The type identifier for the information being set : | |
EFI_FILE_INFO_ID or EFI_FILE_SYSTEM_INFO_ID or | |
EFI_FILE_SYSTEM_VOLUME_LABEL_ID | |
@param[in] BufferSize The size, in bytes, of Buffer. | |
@param[in] Buffer A pointer to the data buffer to write. The type of the | |
data inside the buffer is indicated by InformationType. | |
@retval EFI_SUCCESS The information was set. | |
@retval EFI_UNSUPPORTED The InformationType is not known. | |
@retval EFI_DEVICE_ERROR The last issued semi-hosting operation failed. | |
@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 InformationType is EFI_FILE_INFO_ID and | |
the file was opened in read-only mode and an | |
attempt is being made to modify a field other | |
than Attribute. | |
@retval EFI_WRITE_PROTECTED An attempt is being made to modify a read-only | |
attribute. | |
@retval EFI_BAD_BUFFER_SIZE The size of the buffer is lower than that indicated by | |
the data inside the buffer. | |
@retval EFI_OUT_OF_RESOURCES A allocation needed to process the request failed. | |
@retval EFI_INVALID_PARAMETER At least one of the parameters is invalid. | |
**/ | |
EFIAPI | |
EFI_STATUS | |
BootMonFsSetInfo ( | |
IN EFI_FILE_PROTOCOL *This, | |
IN EFI_GUID *InformationType, | |
IN UINTN BufferSize, | |
IN VOID *Buffer | |
); | |
// | |
// Directory API | |
// | |
EFI_STATUS | |
BootMonFsOpenDirectory ( | |
OUT EFI_FILE_PROTOCOL **NewHandle, | |
IN CHAR16 *FileName, | |
IN BOOTMON_FS_INSTANCE *Volume | |
); | |
// | |
// Internal API | |
// | |
/** | |
Search for a file given its name coded in Ascii. | |
When searching through the files of the volume, if a file is currently not | |
open, its name was written on the media and is kept in RAM in the | |
"HwDescription.Footer.Filename[]" field of the file's description. | |
If a file is currently open, its name might not have been written on the | |
media yet, and as the "HwDescription" is a mirror in RAM of what is on the | |
media the "HwDescription.Footer.Filename[]" might be outdated. In that case, | |
the up to date name of the file is stored in the "Info" field of the file's | |
description. | |
@param[in] Instance Pointer to the description of the volume in which | |
the file has to be search for. | |
@param[in] AsciiFileName Name of the file. | |
@param[out] File Pointer to the description of the file if the | |
file was found. | |
@retval EFI_SUCCESS The file was found. | |
@retval EFI_NOT_FOUND The file was not found. | |
**/ | |
EFI_STATUS | |
BootMonGetFileFromAsciiFileName ( | |
IN BOOTMON_FS_INSTANCE *Instance, | |
IN CHAR8* AsciiFileName, | |
OUT BOOTMON_FS_FILE **File | |
); | |
EFI_STATUS | |
BootMonGetFileFromPosition ( | |
IN BOOTMON_FS_INSTANCE *Instance, | |
IN UINTN Position, | |
OUT BOOTMON_FS_FILE **File | |
); | |
#endif |