]> git.proxmox.com Git - mirror_edk2.git/blame - ArmPkg/Library/SemihostLib/SemihostPrivate.h
ArmPkg/SemihostLib: Add library functions
[mirror_edk2.git] / ArmPkg / Library / SemihostLib / SemihostPrivate.h
CommitLineData
1e57a462 1/** @file\r
2\r
3 Copyright (c) 2008 - 2009, Apple Inc. All rights reserved.<BR>\r
228fdff4 4 Copyright (c) 2013 - 2014, ARM Ltd. All rights reserved.<BR>\r
1e57a462 5\r
6 This program and the accompanying materials\r
7 are licensed and made available under the terms and conditions of the BSD License\r
8 which accompanies this distribution. The full text of the license may be found at\r
9 http://opensource.org/licenses/bsd-license.php\r
10\r
11 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
12 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
13\r
14**/\r
15\r
16#ifndef __SEMIHOST_PRIVATE_H__\r
17#define __SEMIHOST_PRIVATE_H__\r
18\r
19typedef struct {\r
20 CHAR8 *FileName;\r
228fdff4
HL
21 UINTN Mode;\r
22 UINTN NameLength;\r
1e57a462 23} SEMIHOST_FILE_OPEN_BLOCK;\r
24\r
25typedef struct {\r
228fdff4 26 UINTN Handle;\r
1e57a462 27 VOID *Buffer;\r
228fdff4 28 UINTN Length;\r
1e57a462 29} SEMIHOST_FILE_READ_WRITE_BLOCK;\r
30\r
31typedef struct {\r
228fdff4
HL
32 UINTN Handle;\r
33 UINTN Location;\r
1e57a462 34} SEMIHOST_FILE_SEEK_BLOCK;\r
35\r
5521b5cc
RC
36typedef struct {\r
37 VOID *Buffer;\r
38 UINTN Identifier;\r
39 UINTN Length;\r
40} SEMIHOST_FILE_TMPNAME_BLOCK;\r
41\r
1e57a462 42typedef struct {\r
43 CHAR8 *FileName;\r
228fdff4 44 UINTN NameLength;\r
1e57a462 45} SEMIHOST_FILE_REMOVE_BLOCK;\r
46\r
5521b5cc
RC
47typedef struct {\r
48 CHAR8 *FileName;\r
49 UINTN FileNameLength;\r
50 CHAR8 *NewFileName;\r
51 UINTN NewFileNameLength;\r
52} SEMIHOST_FILE_RENAME_BLOCK;\r
53\r
1e57a462 54typedef struct {\r
55 CHAR8 *CommandLine;\r
228fdff4 56 UINTN CommandLength;\r
1e57a462 57} SEMIHOST_SYSTEM_BLOCK;\r
58\r
3402aac7 59#if defined(__CC_ARM)\r
1e57a462 60\r
61#if defined(__thumb__)\r
62#define SWI 0xAB\r
63#else\r
64#define SWI 0x123456\r
65#endif\r
66\r
67#define SEMIHOST_SUPPORTED TRUE\r
68\r
69__swi(SWI)\r
70INT32\r
71_Semihost_SYS_OPEN(\r
72 IN UINTN SWI_0x01,\r
73 IN SEMIHOST_FILE_OPEN_BLOCK *OpenBlock\r
74 );\r
75\r
76__swi(SWI)\r
77INT32\r
78_Semihost_SYS_CLOSE(\r
79 IN UINTN SWI_0x02,\r
80 IN UINT32 *Handle\r
81 );\r
82\r
83__swi(SWI)\r
84VOID\r
85_Semihost_SYS_WRITEC(\r
86 IN UINTN SWI_0x03,\r
87 IN CHAR8 *Character\r
88 );\r
89\r
90__swi(SWI)\r
91VOID\r
92_Semihost_SYS_WRITE0(\r
93 IN UINTN SWI_0x04,\r
94 IN CHAR8 *String\r
95 );\r
96\r
97__swi(SWI)\r
98UINT32\r
99_Semihost_SYS_WRITE(\r
100 IN UINTN SWI_0x05,\r
101 IN OUT SEMIHOST_FILE_READ_WRITE_BLOCK *WriteBlock\r
102 );\r
103\r
104__swi(SWI)\r
105UINT32\r
106_Semihost_SYS_READ(\r
107 IN UINTN SWI_0x06,\r
108 IN OUT SEMIHOST_FILE_READ_WRITE_BLOCK *ReadBlock\r
109 );\r
110\r
111__swi(SWI)\r
112CHAR8\r
113_Semihost_SYS_READC(\r
114 IN UINTN SWI_0x07,\r
115 IN UINTN Zero\r
116 );\r
117\r
118__swi(SWI)\r
119INT32\r
120_Semihost_SYS_SEEK(\r
121 IN UINTN SWI_0x0A,\r
122 IN SEMIHOST_FILE_SEEK_BLOCK *SeekBlock\r
123 );\r
124\r
125__swi(SWI)\r
126INT32\r
127_Semihost_SYS_FLEN(\r
128 IN UINTN SWI_0x0C,\r
129 IN UINT32 *Handle\r
130 );\r
131\r
5521b5cc
RC
132__swi(SWI)\r
133UINT32\r
134_Semihost_SYS_TMPNAME(\r
135 IN UINTN SWI_0x0D,\r
136 IN SEMIHOST_FILE_TMPNAME_BLOCK *TmpNameBlock\r
137 );\r
138\r
1e57a462 139__swi(SWI)\r
140UINT32\r
141_Semihost_SYS_REMOVE(\r
142 IN UINTN SWI_0x0E,\r
143 IN SEMIHOST_FILE_REMOVE_BLOCK *RemoveBlock\r
144 );\r
145\r
5521b5cc
RC
146__swi(SWI)\r
147UINT32\r
148_Semihost_SYS_RENAME(\r
149 IN UINTN SWI_0x0F,\r
150 IN SEMIHOST_FILE_RENAME_BLOCK *RenameBlock\r
151 );\r
152\r
1e57a462 153__swi(SWI)\r
154UINT32\r
155_Semihost_SYS_SYSTEM(\r
156 IN UINTN SWI_0x12,\r
157 IN SEMIHOST_SYSTEM_BLOCK *SystemBlock\r
158 );\r
159\r
160#define Semihost_SYS_OPEN(OpenBlock) _Semihost_SYS_OPEN(0x01, OpenBlock)\r
161#define Semihost_SYS_CLOSE(Handle) _Semihost_SYS_CLOSE(0x02, Handle)\r
162#define Semihost_SYS_WRITE0(String) _Semihost_SYS_WRITE0(0x04, String)\r
163#define Semihost_SYS_WRITEC(Character) _Semihost_SYS_WRITEC(0x03, Character)\r
164#define Semihost_SYS_WRITE(WriteBlock) _Semihost_SYS_WRITE(0x05, WriteBlock)\r
165#define Semihost_SYS_READ(ReadBlock) _Semihost_SYS_READ(0x06, ReadBlock)\r
166#define Semihost_SYS_READC() _Semihost_SYS_READC(0x07, 0)\r
167#define Semihost_SYS_SEEK(SeekBlock) _Semihost_SYS_SEEK(0x0A, SeekBlock)\r
168#define Semihost_SYS_FLEN(Handle) _Semihost_SYS_FLEN(0x0C, Handle)\r
5521b5cc 169#define Semihost_SYS_TMPNAME(TmpNameBlock) _Semihost_SYS_TMPNAME(0x0D, TmpNameBlock)\r
1e57a462 170#define Semihost_SYS_REMOVE(RemoveBlock) _Semihost_SYS_REMOVE(0x0E, RemoveBlock)\r
5521b5cc 171#define Semihost_SYS_RENAME(RenameBlock) _Semihost_SYS_RENAME(0x0F, RenameBlock)\r
1e57a462 172#define Semihost_SYS_SYSTEM(SystemBlock) _Semihost_SYS_SYSTEM(0x12, SystemBlock)\r
173\r
174#elif defined(__GNUC__) // __CC_ARM\r
175\r
176#define SEMIHOST_SUPPORTED TRUE\r
177\r
178UINT32\r
179GccSemihostCall (\r
180 IN UINT32 Operation,\r
181 IN UINTN SystemBlockAddress\r
182 ); // __attribute__ ((interrupt ("SVC")));\r
183\r
184#define Semihost_SYS_OPEN(OpenBlock) GccSemihostCall(0x01, (UINTN)(OpenBlock))\r
185#define Semihost_SYS_CLOSE(Handle) GccSemihostCall(0x02, (UINTN)(Handle))\r
186#define Semihost_SYS_WRITE0(String) GccSemihostCall(0x04, (UINTN)(String))\r
187#define Semihost_SYS_WRITEC(Character) GccSemihostCall(0x03, (UINTN)(Character))\r
188#define Semihost_SYS_WRITE(WriteBlock) GccSemihostCall(0x05, (UINTN)(WriteBlock))\r
189#define Semihost_SYS_READ(ReadBlock) GccSemihostCall(0x06, (UINTN)(ReadBlock))\r
190#define Semihost_SYS_READC() GccSemihostCall(0x07, (UINTN)(0))\r
191#define Semihost_SYS_SEEK(SeekBlock) GccSemihostCall(0x0A, (UINTN)(SeekBlock))\r
192#define Semihost_SYS_FLEN(Handle) GccSemihostCall(0x0C, (UINTN)(Handle))\r
5521b5cc 193#define Semihost_SYS_TMPNAME(TmpNameBlock) GccSemihostCall(0x0D, (UINTN)(TmpNameBlock))\r
1e57a462 194#define Semihost_SYS_REMOVE(RemoveBlock) GccSemihostCall(0x0E, (UINTN)(RemoveBlock))\r
5521b5cc 195#define Semihost_SYS_RENAME(RenameBlock) GccSemihostCall(0x0F, (UINTN)(RenameBlock))\r
1e57a462 196#define Semihost_SYS_SYSTEM(SystemBlock) GccSemihostCall(0x12, (UINTN)(SystemBlock))\r
197\r
198#else // __CC_ARM\r
199\r
200#define SEMIHOST_SUPPORTED FALSE\r
201\r
202#define Semihost_SYS_OPEN(OpenBlock) (-1)\r
203#define Semihost_SYS_CLOSE(Handle) (-1)\r
204#define Semihost_SYS_WRITE0(String)\r
205#define Semihost_SYS_WRITEC(Character)\r
206#define Semihost_SYS_WRITE(WriteBlock) (0)\r
207#define Semihost_SYS_READ(ReadBlock) ((ReadBlock)->Length)\r
208#define Semihost_SYS_READC() ('x')\r
209#define Semihost_SYS_SEEK(SeekBlock) (-1)\r
210#define Semihost_SYS_FLEN(Handle) (-1)\r
5521b5cc 211#define Semihost_SYS_TMPNAME(TmpNameBlock) (-1)\r
1e57a462 212#define Semihost_SYS_REMOVE(RemoveBlock) (-1)\r
5521b5cc 213#define Semihost_SYS_RENAME(RenameBlock) (-1)\r
1e57a462 214#define Semihost_SYS_SYSTEM(SystemBlock) (-1)\r
215\r
216#endif // __CC_ARM\r
217\r
218#endif //__SEMIHOST_PRIVATE_H__\r