ArmPkg/SemihostLib: Add library functions

Add library functions to rename a file and get a temporary name
for a file through the semi-hosting interface.

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Ronald Cron <ronald.cron@arm.com>
Reviewed-By: Olivier Martin <olivier.martin@arm.com>



git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@16238 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
Ronald Cron
2014-10-27 10:38:18 +00:00
committed by oliviermartin
parent c20f8ec661
commit 5521b5cc73
3 changed files with 148 additions and 0 deletions

View File

@@ -33,11 +33,24 @@ typedef struct {
UINTN Location;
} SEMIHOST_FILE_SEEK_BLOCK;
typedef struct {
VOID *Buffer;
UINTN Identifier;
UINTN Length;
} SEMIHOST_FILE_TMPNAME_BLOCK;
typedef struct {
CHAR8 *FileName;
UINTN NameLength;
} SEMIHOST_FILE_REMOVE_BLOCK;
typedef struct {
CHAR8 *FileName;
UINTN FileNameLength;
CHAR8 *NewFileName;
UINTN NewFileNameLength;
} SEMIHOST_FILE_RENAME_BLOCK;
typedef struct {
CHAR8 *CommandLine;
UINTN CommandLength;
@@ -116,6 +129,13 @@ _Semihost_SYS_FLEN(
IN UINT32 *Handle
);
__swi(SWI)
UINT32
_Semihost_SYS_TMPNAME(
IN UINTN SWI_0x0D,
IN SEMIHOST_FILE_TMPNAME_BLOCK *TmpNameBlock
);
__swi(SWI)
UINT32
_Semihost_SYS_REMOVE(
@@ -123,6 +143,13 @@ _Semihost_SYS_REMOVE(
IN SEMIHOST_FILE_REMOVE_BLOCK *RemoveBlock
);
__swi(SWI)
UINT32
_Semihost_SYS_RENAME(
IN UINTN SWI_0x0F,
IN SEMIHOST_FILE_RENAME_BLOCK *RenameBlock
);
__swi(SWI)
UINT32
_Semihost_SYS_SYSTEM(
@@ -139,7 +166,9 @@ _Semihost_SYS_SYSTEM(
#define Semihost_SYS_READC() _Semihost_SYS_READC(0x07, 0)
#define Semihost_SYS_SEEK(SeekBlock) _Semihost_SYS_SEEK(0x0A, SeekBlock)
#define Semihost_SYS_FLEN(Handle) _Semihost_SYS_FLEN(0x0C, Handle)
#define Semihost_SYS_TMPNAME(TmpNameBlock) _Semihost_SYS_TMPNAME(0x0D, TmpNameBlock)
#define Semihost_SYS_REMOVE(RemoveBlock) _Semihost_SYS_REMOVE(0x0E, RemoveBlock)
#define Semihost_SYS_RENAME(RenameBlock) _Semihost_SYS_RENAME(0x0F, RenameBlock)
#define Semihost_SYS_SYSTEM(SystemBlock) _Semihost_SYS_SYSTEM(0x12, SystemBlock)
#elif defined(__GNUC__) // __CC_ARM
@@ -161,7 +190,9 @@ GccSemihostCall (
#define Semihost_SYS_READC() GccSemihostCall(0x07, (UINTN)(0))
#define Semihost_SYS_SEEK(SeekBlock) GccSemihostCall(0x0A, (UINTN)(SeekBlock))
#define Semihost_SYS_FLEN(Handle) GccSemihostCall(0x0C, (UINTN)(Handle))
#define Semihost_SYS_TMPNAME(TmpNameBlock) GccSemihostCall(0x0D, (UINTN)(TmpNameBlock))
#define Semihost_SYS_REMOVE(RemoveBlock) GccSemihostCall(0x0E, (UINTN)(RemoveBlock))
#define Semihost_SYS_RENAME(RenameBlock) GccSemihostCall(0x0F, (UINTN)(RenameBlock))
#define Semihost_SYS_SYSTEM(SystemBlock) GccSemihostCall(0x12, (UINTN)(SystemBlock))
#else // __CC_ARM
@@ -177,7 +208,9 @@ GccSemihostCall (
#define Semihost_SYS_READC() ('x')
#define Semihost_SYS_SEEK(SeekBlock) (-1)
#define Semihost_SYS_FLEN(Handle) (-1)
#define Semihost_SYS_TMPNAME(TmpNameBlock) (-1)
#define Semihost_SYS_REMOVE(RemoveBlock) (-1)
#define Semihost_SYS_RENAME(RenameBlock) (-1)
#define Semihost_SYS_SYSTEM(SystemBlock) (-1)
#endif // __CC_ARM