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