| /** @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 |