https://bugzilla.tianocore.org/show_bug.cgi?id=1373 Replace BSD 2-Clause License with BSD+Patent License. This change is based on the following emails: https://lists.01.org/pipermail/edk2-devel/2019-February/036260.html https://lists.01.org/pipermail/edk2-devel/2018-October/030385.html RFCs with detailed process for the license change: V3: https://lists.01.org/pipermail/edk2-devel/2019-March/038116.html V2: https://lists.01.org/pipermail/edk2-devel/2019-March/037669.html V1: https://lists.01.org/pipermail/edk2-devel/2019-March/037500.html Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Michael D Kinney <michael.d.kinney@intel.com> Reviewed-by: Leif Lindholm <leif.lindholm@linaro.org>
		
			
				
	
	
		
			213 lines
		
	
	
		
			5.8 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			213 lines
		
	
	
		
			5.8 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/** @file
 | 
						|
 | 
						|
  Copyright (c) 2008 - 2009, Apple Inc. All rights reserved.<BR>
 | 
						|
  Copyright (c) 2013 - 2014, ARM Ltd. All rights reserved.<BR>
 | 
						|
 | 
						|
  SPDX-License-Identifier: BSD-2-Clause-Patent
 | 
						|
 | 
						|
**/
 | 
						|
 | 
						|
#ifndef __SEMIHOST_PRIVATE_H__
 | 
						|
#define __SEMIHOST_PRIVATE_H__
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  CHAR8   *FileName;
 | 
						|
  UINTN    Mode;
 | 
						|
  UINTN    NameLength;
 | 
						|
} SEMIHOST_FILE_OPEN_BLOCK;
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  UINTN    Handle;
 | 
						|
  VOID    *Buffer;
 | 
						|
  UINTN    Length;
 | 
						|
} SEMIHOST_FILE_READ_WRITE_BLOCK;
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  UINTN    Handle;
 | 
						|
  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;
 | 
						|
} SEMIHOST_SYSTEM_BLOCK;
 | 
						|
 | 
						|
#if defined(__CC_ARM)
 | 
						|
 | 
						|
#if defined(__thumb__)
 | 
						|
#define SWI 0xAB
 | 
						|
#else
 | 
						|
#define SWI 0x123456
 | 
						|
#endif
 | 
						|
 | 
						|
#define SEMIHOST_SUPPORTED  TRUE
 | 
						|
 | 
						|
__swi(SWI)
 | 
						|
INT32
 | 
						|
_Semihost_SYS_OPEN(
 | 
						|
  IN UINTN                    SWI_0x01,
 | 
						|
  IN SEMIHOST_FILE_OPEN_BLOCK *OpenBlock
 | 
						|
  );
 | 
						|
 | 
						|
__swi(SWI)
 | 
						|
INT32
 | 
						|
_Semihost_SYS_CLOSE(
 | 
						|
  IN UINTN  SWI_0x02,
 | 
						|
  IN UINT32 *Handle
 | 
						|
  );
 | 
						|
 | 
						|
__swi(SWI)
 | 
						|
VOID
 | 
						|
_Semihost_SYS_WRITEC(
 | 
						|
  IN UINTN    SWI_0x03,
 | 
						|
  IN CHAR8    *Character
 | 
						|
  );
 | 
						|
 | 
						|
__swi(SWI)
 | 
						|
VOID
 | 
						|
_Semihost_SYS_WRITE0(
 | 
						|
  IN UINTN SWI_0x04,
 | 
						|
  IN CHAR8 *String
 | 
						|
  );
 | 
						|
 | 
						|
__swi(SWI)
 | 
						|
UINT32
 | 
						|
_Semihost_SYS_WRITE(
 | 
						|
  IN     UINTN                          SWI_0x05,
 | 
						|
  IN OUT SEMIHOST_FILE_READ_WRITE_BLOCK *WriteBlock
 | 
						|
  );
 | 
						|
 | 
						|
__swi(SWI)
 | 
						|
UINT32
 | 
						|
_Semihost_SYS_READ(
 | 
						|
  IN     UINTN                          SWI_0x06,
 | 
						|
  IN OUT SEMIHOST_FILE_READ_WRITE_BLOCK *ReadBlock
 | 
						|
  );
 | 
						|
 | 
						|
__swi(SWI)
 | 
						|
CHAR8
 | 
						|
_Semihost_SYS_READC(
 | 
						|
  IN     UINTN SWI_0x07,
 | 
						|
  IN     UINTN Zero
 | 
						|
  );
 | 
						|
 | 
						|
__swi(SWI)
 | 
						|
INT32
 | 
						|
_Semihost_SYS_SEEK(
 | 
						|
  IN UINTN                    SWI_0x0A,
 | 
						|
  IN SEMIHOST_FILE_SEEK_BLOCK *SeekBlock
 | 
						|
  );
 | 
						|
 | 
						|
__swi(SWI)
 | 
						|
INT32
 | 
						|
_Semihost_SYS_FLEN(
 | 
						|
  IN UINTN  SWI_0x0C,
 | 
						|
  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(
 | 
						|
  IN UINTN                      SWI_0x0E,
 | 
						|
  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(
 | 
						|
  IN UINTN                 SWI_0x12,
 | 
						|
  IN SEMIHOST_SYSTEM_BLOCK *SystemBlock
 | 
						|
  );
 | 
						|
 | 
						|
#define Semihost_SYS_OPEN(OpenBlock)        _Semihost_SYS_OPEN(0x01, OpenBlock)
 | 
						|
#define Semihost_SYS_CLOSE(Handle)          _Semihost_SYS_CLOSE(0x02, Handle)
 | 
						|
#define Semihost_SYS_WRITE0(String)         _Semihost_SYS_WRITE0(0x04, String)
 | 
						|
#define Semihost_SYS_WRITEC(Character)      _Semihost_SYS_WRITEC(0x03, Character)
 | 
						|
#define Semihost_SYS_WRITE(WriteBlock)      _Semihost_SYS_WRITE(0x05, WriteBlock)
 | 
						|
#define Semihost_SYS_READ(ReadBlock)        _Semihost_SYS_READ(0x06, ReadBlock)
 | 
						|
#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
 | 
						|
 | 
						|
#define SEMIHOST_SUPPORTED  TRUE
 | 
						|
 | 
						|
UINT32
 | 
						|
GccSemihostCall (
 | 
						|
  IN UINT32   Operation,
 | 
						|
  IN UINTN    SystemBlockAddress
 | 
						|
  ); // __attribute__ ((interrupt ("SVC")));
 | 
						|
 | 
						|
#define Semihost_SYS_OPEN(OpenBlock)        GccSemihostCall(0x01, (UINTN)(OpenBlock))
 | 
						|
#define Semihost_SYS_CLOSE(Handle)          GccSemihostCall(0x02, (UINTN)(Handle))
 | 
						|
#define Semihost_SYS_WRITE0(String)         GccSemihostCall(0x04, (UINTN)(String))
 | 
						|
#define Semihost_SYS_WRITEC(Character)      GccSemihostCall(0x03, (UINTN)(Character))
 | 
						|
#define Semihost_SYS_WRITE(WriteBlock)      GccSemihostCall(0x05, (UINTN)(WriteBlock))
 | 
						|
#define Semihost_SYS_READ(ReadBlock)        GccSemihostCall(0x06, (UINTN)(ReadBlock))
 | 
						|
#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
 | 
						|
 | 
						|
#define SEMIHOST_SUPPORTED  FALSE
 | 
						|
 | 
						|
#define Semihost_SYS_OPEN(OpenBlock)        (-1)
 | 
						|
#define Semihost_SYS_CLOSE(Handle)          (-1)
 | 
						|
#define Semihost_SYS_WRITE0(String)
 | 
						|
#define Semihost_SYS_WRITEC(Character)
 | 
						|
#define Semihost_SYS_WRITE(WriteBlock)      (0)
 | 
						|
#define Semihost_SYS_READ(ReadBlock)        ((ReadBlock)->Length)
 | 
						|
#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
 | 
						|
 | 
						|
#endif //__SEMIHOST_PRIVATE_H__
 |