TianoCore EDK2 master
|
#include <Uefi.h>
#include <Guid/FileInfo.h>
#include <Guid/FileSystemInfo.h>
#include <Guid/FileSystemVolumeLabelInfo.h>
#include <Library/BaseLib.h>
#include <Library/BaseMemoryLib.h>
#include <Library/DebugLib.h>
#include <Library/MemoryAllocationLib.h>
#include <Library/SemihostLib.h>
#include <Library/UefiBootServicesTableLib.h>
#include <Library/UefiLib.h>
#include <Protocol/DevicePath.h>
#include <Protocol/SimpleFileSystem.h>
#include "SemihostFs.h"
Go to the source code of this file.
Data Structures | |
struct | SEMIHOST_DEVICE_PATH |
struct | SEMIHOST_FCB |
Macros | |
#define | DEFAULT_SEMIHOST_FS_LABEL L"SemihostFs" |
#define | SEMIHOST_FCB_SIGNATURE SIGNATURE_32( 'S', 'H', 'F', 'C' ) |
#define | SEMIHOST_FCB_FROM_THIS(a) CR(a, SEMIHOST_FCB, File, SEMIHOST_FCB_SIGNATURE) |
#define | SEMIHOST_FCB_FROM_LINK(a) CR(a, SEMIHOST_FCB, Link, SEMIHOST_FCB_SIGNATURE); |
Support a Semi Host file system over a debuggers JTAG
Copyright (c) 2008 - 2009, Apple Inc. All rights reserved.
Portions copyright (c) 2011 - 2021, Arm Limited. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent
Definition in file SemihostFs.c.
#define DEFAULT_SEMIHOST_FS_LABEL L"SemihostFs" |
Definition at line 30 of file SemihostFs.c.
#define SEMIHOST_FCB_FROM_LINK | ( | a | ) | CR(a, SEMIHOST_FCB, Link, SEMIHOST_FCB_SIGNATURE); |
Definition at line 85 of file SemihostFs.c.
#define SEMIHOST_FCB_FROM_THIS | ( | a | ) | CR(a, SEMIHOST_FCB, File, SEMIHOST_FCB_SIGNATURE) |
Definition at line 84 of file SemihostFs.c.
#define SEMIHOST_FCB_SIGNATURE SIGNATURE_32( 'S', 'H', 'F', 'C' ) |
Definition at line 83 of file SemihostFs.c.
SEMIHOST_FCB * AllocateFCB | ( | VOID | ) |
Definition at line 91 of file SemihostFs.c.
STATIC EFI_STATUS ExtendFile | ( | IN SEMIHOST_FCB * | Fcb, |
IN UINTN | Size | ||
) |
Worker function that extends the size of an open file.
The extension is filled with zeros.
[in] | Fcb | Internal description of the opened file |
[in] | Size | The number of bytes, the file has to be extended. |
EFI_SUCCESS | The file was extended. |
EFI_DEVICE_ERROR | The last issued semi-hosting operation failed. |
Definition at line 560 of file SemihostFs.c.
EFI_STATUS FileClose | ( | IN EFI_FILE * | This | ) |
Close a specified file handle.
[in] | This | A pointer to the EFI_FILE_PROTOCOL instance that is the file handle to close. |
EFI_SUCCESS | The file was closed. |
EFI_INVALID_PARAMETER | The parameter "This" is NULL. |
Definition at line 407 of file SemihostFs.c.
EFI_STATUS FileDelete | ( | IN EFI_FILE * | This | ) |
Close and delete a file.
[in] | This | A pointer to the EFI_FILE_PROTOCOL instance that is the file handle to delete. |
EFI_SUCCESS | The file was closed and deleted. |
EFI_WARN_DELETE_FAILURE | The handle was closed, but the file was not deleted. |
EFI_INVALID_PARAMETER | The parameter "This" is NULL. |
Definition at line 450 of file SemihostFs.c.
EFI_STATUS FileFlush | ( | IN EFI_FILE * | File | ) |
Definition at line 1181 of file SemihostFs.c.
EFI_STATUS FileGetInfo | ( | IN EFI_FILE * | This, |
IN EFI_GUID * | InformationType, | ||
IN OUT UINTN * | BufferSize, | ||
OUT VOID * | Buffer | ||
) |
Return information about a file or a file system.
[in] | This | A pointer to the EFI_FILE_PROTOCOL instance that is the file handle the requested information is for. |
[in] | InformationType | The type identifier for the information being requested : EFI_FILE_INFO_ID or EFI_FILE_SYSTEM_INFO_ID or EFI_FILE_SYSTEM_VOLUME_LABEL_ID |
[in,out] | BufferSize | The size, in bytes, of Buffer. |
[out] | Buffer | A pointer to the data buffer to return. The type of the data inside the buffer is indicated by InformationType. |
EFI_SUCCESS | The information was returned. |
EFI_UNSUPPORTED | The InformationType is not known. |
EFI_BUFFER_TOO_SMALL | The BufferSize is too small to return the information. BufferSize has been updated with the size needed to complete the request. |
EFI_INVALID_PARAMETER | The parameter "This" or "InformationType" or "BufferSize" is NULL or "Buffer" is NULL and "*Buffersize" is greater than 0. |
Definition at line 890 of file SemihostFs.c.
EFI_STATUS FileGetPosition | ( | IN EFI_FILE * | This, |
OUT UINT64 * | Position | ||
) |
Return a file's current position.
[in] | This | A pointer to the EFI_FILE_PROTOCOL instance that is the file handle to get the current position on. |
[out] | Position | The address to return the file's current position value. |
EFI_SUCCESS | The position was returned. |
EFI_INVALID_PARAMETER | The parameter "This" or "Position" is NULL. |
Definition at line 682 of file SemihostFs.c.
EFI_STATUS FileOpen | ( | IN EFI_FILE * | This, |
OUT EFI_FILE ** | NewHandle, | ||
IN CHAR16 * | FileName, | ||
IN UINT64 | OpenMode, | ||
IN UINT64 | Attributes | ||
) |
Open a file on the host system by means of the semihosting interface.
[in] | This | A pointer to the EFI_FILE_PROTOCOL instance that is the file handle to source location. |
[out] | NewHandle | A pointer to the location to return the opened handle for the new file. |
[in] | FileName | The Null-terminated string of the name of the file to be opened. |
[in] | OpenMode | The mode to open the file : Read or Read/Write or Read/Write/Create |
[in] | Attributes | Only valid for EFI_FILE_MODE_CREATE, in which case these are the attribute bits for the newly created file. The mnemonics of the attribute bits are : EFI_FILE_READ_ONLY, EFI_FILE_HIDDEN, EFI_FILE_SYSTEM, EFI_FILE_RESERVED, EFI_FILE_DIRECTORY and EFI_FILE_ARCHIVE. |
EFI_SUCCESS | The file was open. |
EFI_NOT_FOUND | The specified file could not be found. |
EFI_DEVICE_ERROR | The last issued semi-hosting operation failed. |
EFI_WRITE_PROTECTED | Attempt to create a directory. This is not possible with the semi-hosting interface. |
EFI_OUT_OF_RESOURCES | Not enough resources were available to open the file. |
EFI_INVALID_PARAMETER | At least one of the parameters is invalid. |
Definition at line 174 of file SemihostFs.c.
Read data from an open file.
[in] | This | A pointer to the EFI_FILE_PROTOCOL instance that is the file handle to read data from. |
[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. |
[out] | Buffer | The buffer into which the data is read. |
EFI_SUCCESS | The data was read. |
EFI_DEVICE_ERROR | On entry, the current file position is beyond the end of the file, or the semi-hosting interface reported an error while performing the read operation. |
EFI_INVALID_PARAMETER | At least one of the three input pointers is NULL. |
Definition at line 507 of file SemihostFs.c.
EFI_STATUS FileSetInfo | ( | IN EFI_FILE * | This, |
IN EFI_GUID * | InformationType, | ||
IN UINTN | BufferSize, | ||
IN VOID * | Buffer | ||
) |
Set information about a file or a file system.
[in] | This | A pointer to the EFI_FILE_PROTOCOL instance that is the file handle the information is for. |
[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 |
[in] | BufferSize | The size, in bytes, of Buffer. |
[in] | Buffer | A pointer to the data buffer to write. The type of the data inside the buffer is indicated by InformationType. |
EFI_SUCCESS | The information was set. |
EFI_UNSUPPORTED | The InformationType is not known. |
EFI_DEVICE_ERROR | The last issued semi-hosting operation failed. |
EFI_ACCESS_DENIED | An attempt is being made to change the EFI_FILE_DIRECTORY Attribute. |
EFI_ACCESS_DENIED | InformationType is EFI_FILE_INFO_ID and the file is a read-only file or has been opened in read-only mode and an attempt is being made to modify a field other than Attribute. |
EFI_ACCESS_DENIED | An attempt is made to change the name of a file to a file that is already present. |
EFI_WRITE_PROTECTED | An attempt is being made to modify a read-only attribute. |
EFI_BAD_BUFFER_SIZE | The size of the buffer is lower than that indicated by the data inside the buffer. |
EFI_OUT_OF_RESOURCES | An allocation needed to process the request failed. |
EFI_INVALID_PARAMETER | At least one of the parameters is invalid. |
Definition at line 1118 of file SemihostFs.c.
EFI_STATUS FileSetPosition | ( | IN EFI_FILE * | This, |
IN UINT64 | Position | ||
) |
Set a file's current position.
[in] | This | A pointer to the EFI_FILE_PROTOCOL instance that is the file handle to set the requested position on. |
[in] | Position | The byte position from the start of the file to set. |
EFI_SUCCESS | The position was set. |
EFI_DEVICE_ERROR | The semi-hosting positioning operation failed. |
EFI_UNSUPPORTED | The seek request for nonzero is not valid on open directories. |
EFI_INVALID_PARAMETER | The parameter "This" is NULL. |
Definition at line 715 of file SemihostFs.c.
Write data to an open file.
[in] | This | A pointer to the EFI_FILE_PROTOCOL instance that is the file handle to write data to. |
[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. |
[in] | Buffer | The buffer of data to write. |
EFI_SUCCESS | The data was written. |
EFI_ACCESS_DENIED | Attempt to write into a read only file or in a file opened in read only mode. |
EFI_DEVICE_ERROR | The last issued semi-hosting operation failed. |
EFI_INVALID_PARAMETER | At least one of the three input pointers is NULL. |
Definition at line 610 of file SemihostFs.c.
VOID FreeFCB | ( | IN SEMIHOST_FCB * | Fcb | ) |
Definition at line 107 of file SemihostFs.c.
STATIC EFI_STATUS GetFileInfo | ( | IN SEMIHOST_FCB * | Fcb, |
IN OUT UINTN * | BufferSize, | ||
OUT VOID * | Buffer | ||
) |
Return information about a file.
[in] | Fcb | A pointer to the description of an open file. |
[in,out] | BufferSize | The size, in bytes, of Buffer. |
[out] | Buffer | A pointer to the data buffer to return. Not NULL if "*BufferSize" is greater than 0. |
EFI_SUCCESS | The information was returned. |
EFI_BUFFER_TOO_SMALL | The BufferSize is too small to return the information. BufferSize has been updated with the size needed to complete the request. |
Definition at line 769 of file SemihostFs.c.
STATIC EFI_STATUS GetFilesystemInfo | ( | IN SEMIHOST_FCB * | Fcb, |
IN OUT UINTN * | BufferSize, | ||
OUT VOID * | Buffer | ||
) |
Return information about a file system.
[in] | Fcb | A pointer to the description of an open file which belongs to the file system, the information is requested for. |
[in,out] | BufferSize | The size, in bytes, of Buffer. |
[out] | Buffer | A pointer to the data buffer to return. Not NULL if "*BufferSize" is greater than 0. |
EFI_SUCCESS | The information was returned. |
EFI_BUFFER_TOO_SMALL | The BufferSize is too small to return the information. BufferSize has been updated with the size needed to complete the request. |
Definition at line 832 of file SemihostFs.c.
EFI_STATUS SemihostFsEntryPoint | ( | IN EFI_HANDLE | ImageHandle, |
IN EFI_SYSTEM_TABLE * | SystemTable | ||
) |
Definition at line 1203 of file SemihostFs.c.
STATIC EFI_STATUS SetFileInfo | ( | IN SEMIHOST_FCB * | Fcb, |
IN EFI_FILE_INFO * | Info | ||
) |
Set information about a file.
[in] | Fcb | A pointer to the description of the open file. |
[in] | Info | A pointer to the file information to write. |
EFI_SUCCESS | The information was set. |
EFI_ACCESS_DENIED | An attempt is made to change the name of a file to a file that is already present. |
EFI_ACCESS_DENIED | An attempt is being made to change the EFI_FILE_DIRECTORY Attribute. |
EFI_ACCESS_DENIED | The file is a read-only file or has been opened in read-only mode and an attempt is being made to modify a field other than Attribute. |
EFI_WRITE_PROTECTED | An attempt is being made to modify a read-only attribute. |
EFI_DEVICE_ERROR | The last issued semi-hosting operation failed. |
EFI_OUT_OF_RESOURCES | A allocation needed to process the request failed. |
Definition at line 956 of file SemihostFs.c.
STATIC EFI_STATUS TruncateFile | ( | IN CHAR8 * | FileName, |
IN UINTN | Size | ||
) |
Worker function that truncate a file specified by its name to a given size.
[in] | FileName | The Null-terminated string of the name of the file to be opened. |
[in] | Size | The target size for the file. |
EFI_SUCCESS | The file was truncated. |
EFI_DEVICE_ERROR | The last issued semi-hosting operation failed. |
Definition at line 314 of file SemihostFs.c.
EFI_STATUS VolumeOpen | ( | IN EFI_SIMPLE_FILE_SYSTEM_PROTOCOL * | This, |
OUT EFI_FILE ** | Root | ||
) |
Definition at line 121 of file SemihostFs.c.
SEMIHOST_DEVICE_PATH gDevicePath |
Definition at line 61 of file SemihostFs.c.
LIST_ENTRY gFileList = INITIALIZE_LIST_HEAD_VARIABLE (gFileList) |
Definition at line 88 of file SemihostFs.c.
EFI_HANDLE gInstallHandle = NULL |
Definition at line 87 of file SemihostFs.c.
EFI_SIMPLE_FILE_SYSTEM_PROTOCOL gSemihostFs |
Definition at line 34 of file SemihostFs.c.
EFI_FILE gSemihostFsFile |
Definition at line 39 of file SemihostFs.c.
STATIC CHAR16* mSemihostFsLabel |
Definition at line 32 of file SemihostFs.c.