+++ /dev/null
-/** @file\r
-\r
- Copyright (c) 2008 - 2009, Apple Inc. All rights reserved.<BR>\r
-\r
- This program and the accompanying materials\r
- are licensed and made available under the terms and conditions of the BSD License\r
- which accompanies this distribution. The full text of the license may be found at\r
- http://opensource.org/licenses/bsd-license.php\r
-\r
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
-\r
-**/\r
-\r
-#ifndef __SEMIHOST_PRIVATE_H__\r
-#define __SEMIHOST_PRIVATE_H__\r
-\r
-typedef struct {\r
- CHAR8 *FileName;\r
- UINT32 Mode;\r
- UINT32 NameLength;\r
-} SEMIHOST_FILE_OPEN_BLOCK;\r
-\r
-typedef struct {\r
- UINT32 Handle;\r
- VOID *Buffer;\r
- UINT32 Length;\r
-} SEMIHOST_FILE_READ_WRITE_BLOCK;\r
-\r
-typedef struct {\r
- UINT32 Handle;\r
- UINT32 Location;\r
-} SEMIHOST_FILE_SEEK_BLOCK;\r
-\r
-typedef struct {\r
- CHAR8 *FileName;\r
- UINT32 NameLength;\r
-} SEMIHOST_FILE_REMOVE_BLOCK;\r
-\r
-typedef struct {\r
- CHAR8 *CommandLine;\r
- UINT32 CommandLength;\r
-} SEMIHOST_SYSTEM_BLOCK;\r
-\r
-#if defined(__CC_ARM) \r
-\r
-#if defined(__thumb__)\r
-#define SWI 0xAB\r
-#else\r
-#define SWI 0x123456\r
-#endif\r
-\r
-#define SEMIHOST_SUPPORTED TRUE\r
-\r
-__swi(SWI)\r
-INT32\r
-_Semihost_SYS_OPEN(\r
- IN UINTN SWI_0x01,\r
- IN SEMIHOST_FILE_OPEN_BLOCK *OpenBlock\r
- );\r
-\r
-__swi(SWI)\r
-INT32\r
-_Semihost_SYS_CLOSE(\r
- IN UINTN SWI_0x02,\r
- IN UINT32 *Handle\r
- );\r
-\r
-__swi(SWI)\r
-VOID\r
-_Semihost_SYS_WRITEC(\r
- IN UINTN SWI_0x03,\r
- IN CHAR8 *Character\r
- );\r
-\r
-__swi(SWI)\r
-VOID\r
-_Semihost_SYS_WRITE0(\r
- IN UINTN SWI_0x04,\r
- IN CHAR8 *String\r
- );\r
-\r
-__swi(SWI)\r
-UINT32\r
-_Semihost_SYS_WRITE(\r
- IN UINTN SWI_0x05,\r
- IN OUT SEMIHOST_FILE_READ_WRITE_BLOCK *WriteBlock\r
- );\r
-\r
-__swi(SWI)\r
-UINT32\r
-_Semihost_SYS_READ(\r
- IN UINTN SWI_0x06,\r
- IN OUT SEMIHOST_FILE_READ_WRITE_BLOCK *ReadBlock\r
- );\r
-\r
-__swi(SWI)\r
-CHAR8\r
-_Semihost_SYS_READC(\r
- IN UINTN SWI_0x07,\r
- IN UINTN Zero\r
- );\r
-\r
-__swi(SWI)\r
-INT32\r
-_Semihost_SYS_SEEK(\r
- IN UINTN SWI_0x0A,\r
- IN SEMIHOST_FILE_SEEK_BLOCK *SeekBlock\r
- );\r
-\r
-__swi(SWI)\r
-INT32\r
-_Semihost_SYS_FLEN(\r
- IN UINTN SWI_0x0C,\r
- IN UINT32 *Handle\r
- );\r
-\r
-__swi(SWI)\r
-UINT32\r
-_Semihost_SYS_REMOVE(\r
- IN UINTN SWI_0x0E,\r
- IN SEMIHOST_FILE_REMOVE_BLOCK *RemoveBlock\r
- );\r
-\r
-__swi(SWI)\r
-UINT32\r
-_Semihost_SYS_SYSTEM(\r
- IN UINTN SWI_0x12,\r
- IN SEMIHOST_SYSTEM_BLOCK *SystemBlock\r
- );\r
-\r
-#define Semihost_SYS_OPEN(OpenBlock) _Semihost_SYS_OPEN(0x01, OpenBlock)\r
-#define Semihost_SYS_CLOSE(Handle) _Semihost_SYS_CLOSE(0x02, Handle)\r
-#define Semihost_SYS_WRITE0(String) _Semihost_SYS_WRITE0(0x04, String)\r
-#define Semihost_SYS_WRITEC(Character) _Semihost_SYS_WRITEC(0x03, Character)\r
-#define Semihost_SYS_WRITE(WriteBlock) _Semihost_SYS_WRITE(0x05, WriteBlock)\r
-#define Semihost_SYS_READ(ReadBlock) _Semihost_SYS_READ(0x06, ReadBlock)\r
-#define Semihost_SYS_READC() _Semihost_SYS_READC(0x07, 0)\r
-#define Semihost_SYS_SEEK(SeekBlock) _Semihost_SYS_SEEK(0x0A, SeekBlock)\r
-#define Semihost_SYS_FLEN(Handle) _Semihost_SYS_FLEN(0x0C, Handle)\r
-#define Semihost_SYS_REMOVE(RemoveBlock) _Semihost_SYS_REMOVE(0x0E, RemoveBlock)\r
-#define Semihost_SYS_SYSTEM(SystemBlock) _Semihost_SYS_SYSTEM(0x12, SystemBlock)\r
-\r
-#elif defined(__GNUC__) // __CC_ARM\r
-\r
-#define SEMIHOST_SUPPORTED TRUE\r
-\r
-UINT32\r
-GccSemihostCall (\r
- IN UINT32 Operation,\r
- IN UINTN SystemBlockAddress\r
- ); // __attribute__ ((interrupt ("SVC")));\r
-\r
-#define Semihost_SYS_OPEN(OpenBlock) GccSemihostCall(0x01, (UINTN)(OpenBlock))\r
-#define Semihost_SYS_CLOSE(Handle) GccSemihostCall(0x02, (UINTN)(Handle))\r
-#define Semihost_SYS_WRITE0(String) GccSemihostCall(0x04, (UINTN)(String))\r
-#define Semihost_SYS_WRITEC(Character) GccSemihostCall(0x03, (UINTN)(Character))\r
-#define Semihost_SYS_WRITE(WriteBlock) GccSemihostCall(0x05, (UINTN)(WriteBlock))\r
-#define Semihost_SYS_READ(ReadBlock) GccSemihostCall(0x06, (UINTN)(ReadBlock))\r
-#define Semihost_SYS_READC() GccSemihostCall(0x07, (UINTN)(0))\r
-#define Semihost_SYS_SEEK(SeekBlock) GccSemihostCall(0x0A, (UINTN)(SeekBlock))\r
-#define Semihost_SYS_FLEN(Handle) GccSemihostCall(0x0C, (UINTN)(Handle))\r
-#define Semihost_SYS_REMOVE(RemoveBlock) GccSemihostCall(0x0E, (UINTN)(RemoveBlock))\r
-#define Semihost_SYS_SYSTEM(SystemBlock) GccSemihostCall(0x12, (UINTN)(SystemBlock))\r
-\r
-#else // __CC_ARM\r
-\r
-#define SEMIHOST_SUPPORTED FALSE\r
-\r
-#define Semihost_SYS_OPEN(OpenBlock) (-1)\r
-#define Semihost_SYS_CLOSE(Handle) (-1)\r
-#define Semihost_SYS_WRITE0(String)\r
-#define Semihost_SYS_WRITEC(Character)\r
-#define Semihost_SYS_WRITE(WriteBlock) (0)\r
-#define Semihost_SYS_READ(ReadBlock) ((ReadBlock)->Length)\r
-#define Semihost_SYS_READC() ('x')\r
-#define Semihost_SYS_SEEK(SeekBlock) (-1)\r
-#define Semihost_SYS_FLEN(Handle) (-1)\r
-#define Semihost_SYS_REMOVE(RemoveBlock) (-1)\r
-#define Semihost_SYS_SYSTEM(SystemBlock) (-1)\r
-\r
-#endif // __CC_ARM\r
-\r
-#endif //__SEMIHOST_PRIVATE_H__\r