TianoCore EDK2 master
Loading...
Searching...
No Matches
SemihostFs.c File Reference

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);
 

Functions

SEMIHOST_FCBAllocateFCB (VOID)
 
VOID FreeFCB (IN SEMIHOST_FCB *Fcb)
 
EFI_STATUS VolumeOpen (IN EFI_SIMPLE_FILE_SYSTEM_PROTOCOL *This, OUT EFI_FILE **Root)
 
EFI_STATUS FileOpen (IN EFI_FILE *This, OUT EFI_FILE **NewHandle, IN CHAR16 *FileName, IN UINT64 OpenMode, IN UINT64 Attributes)
 
STATIC EFI_STATUS TruncateFile (IN CHAR8 *FileName, IN UINTN Size)
 
EFI_STATUS FileClose (IN EFI_FILE *This)
 
EFI_STATUS FileDelete (IN EFI_FILE *This)
 
EFI_STATUS FileRead (IN EFI_FILE *This, IN OUT UINTN *BufferSize, OUT VOID *Buffer)
 
STATIC EFI_STATUS ExtendFile (IN SEMIHOST_FCB *Fcb, IN UINTN Size)
 
EFI_STATUS FileWrite (IN EFI_FILE *This, IN OUT UINTN *BufferSize, IN VOID *Buffer)
 
EFI_STATUS FileGetPosition (IN EFI_FILE *This, OUT UINT64 *Position)
 
EFI_STATUS FileSetPosition (IN EFI_FILE *This, IN UINT64 Position)
 
STATIC EFI_STATUS GetFileInfo (IN SEMIHOST_FCB *Fcb, IN OUT UINTN *BufferSize, OUT VOID *Buffer)
 
STATIC EFI_STATUS GetFilesystemInfo (IN SEMIHOST_FCB *Fcb, IN OUT UINTN *BufferSize, OUT VOID *Buffer)
 
EFI_STATUS FileGetInfo (IN EFI_FILE *This, IN EFI_GUID *InformationType, IN OUT UINTN *BufferSize, OUT VOID *Buffer)
 
STATIC EFI_STATUS SetFileInfo (IN SEMIHOST_FCB *Fcb, IN EFI_FILE_INFO *Info)
 
EFI_STATUS FileSetInfo (IN EFI_FILE *This, IN EFI_GUID *InformationType, IN UINTN BufferSize, IN VOID *Buffer)
 
EFI_STATUS FileFlush (IN EFI_FILE *File)
 
EFI_STATUS SemihostFsEntryPoint (IN EFI_HANDLE ImageHandle, IN EFI_SYSTEM_TABLE *SystemTable)
 

Variables

STATIC CHAR16 * mSemihostFsLabel
 
EFI_SIMPLE_FILE_SYSTEM_PROTOCOL gSemihostFs
 
EFI_FILE gSemihostFsFile
 
SEMIHOST_DEVICE_PATH gDevicePath
 
EFI_HANDLE gInstallHandle = NULL
 
LIST_ENTRY gFileList = INITIALIZE_LIST_HEAD_VARIABLE (gFileList)
 

Detailed Description

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.

Macro Definition Documentation

◆ DEFAULT_SEMIHOST_FS_LABEL

#define DEFAULT_SEMIHOST_FS_LABEL   L"SemihostFs"

Definition at line 30 of file SemihostFs.c.

◆ SEMIHOST_FCB_FROM_LINK

#define SEMIHOST_FCB_FROM_LINK (   a)    CR(a, SEMIHOST_FCB, Link, SEMIHOST_FCB_SIGNATURE);

Definition at line 85 of file SemihostFs.c.

◆ SEMIHOST_FCB_FROM_THIS

#define SEMIHOST_FCB_FROM_THIS (   a)    CR(a, SEMIHOST_FCB, File, SEMIHOST_FCB_SIGNATURE)

Definition at line 84 of file SemihostFs.c.

◆ SEMIHOST_FCB_SIGNATURE

#define SEMIHOST_FCB_SIGNATURE   SIGNATURE_32( 'S', 'H', 'F', 'C' )

Definition at line 83 of file SemihostFs.c.

Function Documentation

◆ AllocateFCB()

SEMIHOST_FCB * AllocateFCB ( VOID  )

Definition at line 91 of file SemihostFs.c.

◆ ExtendFile()

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.

Parameters
[in]FcbInternal description of the opened file
[in]SizeThe number of bytes, the file has to be extended.
Return values
EFI_SUCCESSThe file was extended.
EFI_DEVICE_ERRORThe last issued semi-hosting operation failed.

Definition at line 560 of file SemihostFs.c.

◆ FileClose()

EFI_STATUS FileClose ( IN EFI_FILE This)

Close a specified file handle.

Parameters
[in]ThisA pointer to the EFI_FILE_PROTOCOL instance that is the file handle to close.
Return values
EFI_SUCCESSThe file was closed.
EFI_INVALID_PARAMETERThe parameter "This" is NULL.

Definition at line 407 of file SemihostFs.c.

◆ FileDelete()

EFI_STATUS FileDelete ( IN EFI_FILE This)

Close and delete a file.

Parameters
[in]ThisA pointer to the EFI_FILE_PROTOCOL instance that is the file handle to delete.
Return values
EFI_SUCCESSThe file was closed and deleted.
EFI_WARN_DELETE_FAILUREThe handle was closed, but the file was not deleted.
EFI_INVALID_PARAMETERThe parameter "This" is NULL.

Definition at line 450 of file SemihostFs.c.

◆ FileFlush()

EFI_STATUS FileFlush ( IN EFI_FILE File)

Definition at line 1181 of file SemihostFs.c.

◆ FileGetInfo()

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.

Parameters
[in]ThisA pointer to the EFI_FILE_PROTOCOL instance that is the file handle the requested information is for.
[in]InformationTypeThe 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]BufferSizeThe size, in bytes, of Buffer.
[out]BufferA pointer to the data buffer to return. The type of the data inside the buffer is indicated by InformationType.
Return values
EFI_SUCCESSThe information was returned.
EFI_UNSUPPORTEDThe InformationType is not known.
EFI_BUFFER_TOO_SMALLThe BufferSize is too small to return the information. BufferSize has been updated with the size needed to complete the request.
EFI_INVALID_PARAMETERThe 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.

◆ FileGetPosition()

EFI_STATUS FileGetPosition ( IN EFI_FILE This,
OUT UINT64 *  Position 
)

Return a file's current position.

Parameters
[in]ThisA pointer to the EFI_FILE_PROTOCOL instance that is the file handle to get the current position on.
[out]PositionThe address to return the file's current position value.
Return values
EFI_SUCCESSThe position was returned.
EFI_INVALID_PARAMETERThe parameter "This" or "Position" is NULL.

Definition at line 682 of file SemihostFs.c.

◆ FileOpen()

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.

Parameters
[in]ThisA pointer to the EFI_FILE_PROTOCOL instance that is the file handle to source location.
[out]NewHandleA pointer to the location to return the opened handle for the new file.
[in]FileNameThe Null-terminated string of the name of the file to be opened.
[in]OpenModeThe mode to open the file : Read or Read/Write or Read/Write/Create
[in]AttributesOnly 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.
Return values
EFI_SUCCESSThe file was open.
EFI_NOT_FOUNDThe specified file could not be found.
EFI_DEVICE_ERRORThe last issued semi-hosting operation failed.
EFI_WRITE_PROTECTEDAttempt to create a directory. This is not possible with the semi-hosting interface.
EFI_OUT_OF_RESOURCESNot enough resources were available to open the file.
EFI_INVALID_PARAMETERAt least one of the parameters is invalid.

Definition at line 174 of file SemihostFs.c.

◆ FileRead()

EFI_STATUS FileRead ( IN EFI_FILE This,
IN OUT UINTN BufferSize,
OUT VOID *  Buffer 
)

Read data from an open file.

Parameters
[in]ThisA pointer to the EFI_FILE_PROTOCOL instance that is the file handle to read data from.
[in,out]BufferSizeOn 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]BufferThe buffer into which the data is read.
Return values
EFI_SUCCESSThe data was read.
EFI_DEVICE_ERROROn 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_PARAMETERAt least one of the three input pointers is NULL.

Definition at line 507 of file SemihostFs.c.

◆ FileSetInfo()

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.

Parameters
[in]ThisA pointer to the EFI_FILE_PROTOCOL instance that is the file handle the information is for.
[in]InformationTypeThe 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]BufferSizeThe size, in bytes, of Buffer.
[in]BufferA pointer to the data buffer to write. The type of the data inside the buffer is indicated by InformationType.
Return values
EFI_SUCCESSThe information was set.
EFI_UNSUPPORTEDThe InformationType is not known.
EFI_DEVICE_ERRORThe last issued semi-hosting operation failed.
EFI_ACCESS_DENIEDAn attempt is being made to change the EFI_FILE_DIRECTORY Attribute.
EFI_ACCESS_DENIEDInformationType 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_DENIEDAn attempt is made to change the name of a file to a file that is already present.
EFI_WRITE_PROTECTEDAn attempt is being made to modify a read-only attribute.
EFI_BAD_BUFFER_SIZEThe size of the buffer is lower than that indicated by the data inside the buffer.
EFI_OUT_OF_RESOURCESAn allocation needed to process the request failed.
EFI_INVALID_PARAMETERAt least one of the parameters is invalid.

Definition at line 1118 of file SemihostFs.c.

◆ FileSetPosition()

EFI_STATUS FileSetPosition ( IN EFI_FILE This,
IN UINT64  Position 
)

Set a file's current position.

Parameters
[in]ThisA pointer to the EFI_FILE_PROTOCOL instance that is the file handle to set the requested position on.
[in]PositionThe byte position from the start of the file to set.
Return values
EFI_SUCCESSThe position was set.
EFI_DEVICE_ERRORThe semi-hosting positioning operation failed.
EFI_UNSUPPORTEDThe seek request for nonzero is not valid on open directories.
EFI_INVALID_PARAMETERThe parameter "This" is NULL.

Definition at line 715 of file SemihostFs.c.

◆ FileWrite()

EFI_STATUS FileWrite ( IN EFI_FILE This,
IN OUT UINTN BufferSize,
IN VOID *  Buffer 
)

Write data to an open file.

Parameters
[in]ThisA pointer to the EFI_FILE_PROTOCOL instance that is the file handle to write data to.
[in,out]BufferSizeOn 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]BufferThe buffer of data to write.
Return values
EFI_SUCCESSThe data was written.
EFI_ACCESS_DENIEDAttempt to write into a read only file or in a file opened in read only mode.
EFI_DEVICE_ERRORThe last issued semi-hosting operation failed.
EFI_INVALID_PARAMETERAt least one of the three input pointers is NULL.

Definition at line 610 of file SemihostFs.c.

◆ FreeFCB()

VOID FreeFCB ( IN SEMIHOST_FCB Fcb)

Definition at line 107 of file SemihostFs.c.

◆ GetFileInfo()

STATIC EFI_STATUS GetFileInfo ( IN SEMIHOST_FCB Fcb,
IN OUT UINTN BufferSize,
OUT VOID *  Buffer 
)

Return information about a file.

Parameters
[in]FcbA pointer to the description of an open file.
[in,out]BufferSizeThe size, in bytes, of Buffer.
[out]BufferA pointer to the data buffer to return. Not NULL if "*BufferSize" is greater than 0.
Return values
EFI_SUCCESSThe information was returned.
EFI_BUFFER_TOO_SMALLThe 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.

◆ GetFilesystemInfo()

STATIC EFI_STATUS GetFilesystemInfo ( IN SEMIHOST_FCB Fcb,
IN OUT UINTN BufferSize,
OUT VOID *  Buffer 
)

Return information about a file system.

Parameters
[in]FcbA pointer to the description of an open file which belongs to the file system, the information is requested for.
[in,out]BufferSizeThe size, in bytes, of Buffer.
[out]BufferA pointer to the data buffer to return. Not NULL if "*BufferSize" is greater than 0.
Return values
EFI_SUCCESSThe information was returned.
EFI_BUFFER_TOO_SMALLThe 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.

◆ SemihostFsEntryPoint()

EFI_STATUS SemihostFsEntryPoint ( IN EFI_HANDLE  ImageHandle,
IN EFI_SYSTEM_TABLE SystemTable 
)

Definition at line 1203 of file SemihostFs.c.

◆ SetFileInfo()

STATIC EFI_STATUS SetFileInfo ( IN SEMIHOST_FCB Fcb,
IN EFI_FILE_INFO Info 
)

Set information about a file.

Parameters
[in]FcbA pointer to the description of the open file.
[in]InfoA pointer to the file information to write.
Return values
EFI_SUCCESSThe information was set.
EFI_ACCESS_DENIEDAn attempt is made to change the name of a file to a file that is already present.
EFI_ACCESS_DENIEDAn attempt is being made to change the EFI_FILE_DIRECTORY Attribute.
EFI_ACCESS_DENIEDThe 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_PROTECTEDAn attempt is being made to modify a read-only attribute.
EFI_DEVICE_ERRORThe last issued semi-hosting operation failed.
EFI_OUT_OF_RESOURCESA allocation needed to process the request failed.

Definition at line 956 of file SemihostFs.c.

◆ TruncateFile()

STATIC EFI_STATUS TruncateFile ( IN CHAR8 *  FileName,
IN UINTN  Size 
)

Worker function that truncate a file specified by its name to a given size.

Parameters
[in]FileNameThe Null-terminated string of the name of the file to be opened.
[in]SizeThe target size for the file.
Return values
EFI_SUCCESSThe file was truncated.
EFI_DEVICE_ERRORThe last issued semi-hosting operation failed.

Definition at line 314 of file SemihostFs.c.

◆ VolumeOpen()

EFI_STATUS VolumeOpen ( IN EFI_SIMPLE_FILE_SYSTEM_PROTOCOL This,
OUT EFI_FILE **  Root 
)

Definition at line 121 of file SemihostFs.c.

Variable Documentation

◆ gDevicePath

SEMIHOST_DEVICE_PATH gDevicePath
Initial value:
= {
{
},
EFI_CALLER_ID_GUID
},
{ END_DEVICE_PATH_TYPE, END_ENTIRE_DEVICE_PATH_SUBTYPE, { sizeof (EFI_DEVICE_PATH_PROTOCOL), 0 }
}
}
#define HARDWARE_DEVICE_PATH
Definition: DevicePath.h:68
#define HW_VENDOR_DP
Definition: DevicePath.h:133

Definition at line 61 of file SemihostFs.c.

◆ gFileList

LIST_ENTRY gFileList = INITIALIZE_LIST_HEAD_VARIABLE (gFileList)

Definition at line 88 of file SemihostFs.c.

◆ gInstallHandle

EFI_HANDLE gInstallHandle = NULL

Definition at line 87 of file SemihostFs.c.

◆ gSemihostFs

Initial value:
= {
EFI_SIMPLE_FILE_SYSTEM_PROTOCOL_REVISION,
VolumeOpen
}

Definition at line 34 of file SemihostFs.c.

◆ gSemihostFsFile

EFI_FILE gSemihostFsFile
Initial value:
= {
EFI_FILE_PROTOCOL_REVISION,
FileFlush
}
EFI_STATUS FileOpen(IN EFI_FILE *This, OUT EFI_FILE **NewHandle, IN CHAR16 *FileName, IN UINT64 OpenMode, IN UINT64 Attributes)
Definition: SemihostFs.c:174
EFI_STATUS FileClose(IN EFI_FILE *This)
Definition: SemihostFs.c:407
EFI_STATUS FileSetInfo(IN EFI_FILE *This, IN EFI_GUID *InformationType, IN UINTN BufferSize, IN VOID *Buffer)
Definition: SemihostFs.c:1118
EFI_STATUS FileDelete(IN EFI_FILE *This)
Definition: SemihostFs.c:450
EFI_STATUS FileRead(IN EFI_FILE *This, IN OUT UINTN *BufferSize, OUT VOID *Buffer)
Definition: SemihostFs.c:507
EFI_STATUS FileSetPosition(IN EFI_FILE *This, IN UINT64 Position)
Definition: SemihostFs.c:715
EFI_STATUS FileGetInfo(IN EFI_FILE *This, IN EFI_GUID *InformationType, IN OUT UINTN *BufferSize, OUT VOID *Buffer)
Definition: SemihostFs.c:890
EFI_STATUS FileWrite(IN EFI_FILE *This, IN OUT UINTN *BufferSize, IN VOID *Buffer)
Definition: SemihostFs.c:610
EFI_STATUS FileGetPosition(IN EFI_FILE *This, OUT UINT64 *Position)
Definition: SemihostFs.c:682

Definition at line 39 of file SemihostFs.c.

◆ mSemihostFsLabel

STATIC CHAR16* mSemihostFsLabel

Definition at line 32 of file SemihostFs.c.