]> git.proxmox.com Git - mirror_edk2.git/blob - ArmPkg/Library/SemihostLib/SemihostPrivate.h
UefiCpuPkg: Move AsmRelocateApLoopStart from Mpfuncs.nasm to AmdSev.nasm
[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 - 2021, Arm Limited. All rights reserved.<BR>
5
6 SPDX-License-Identifier: BSD-2-Clause-Patent
7
8 **/
9
10 #ifndef SEMIHOST_PRIVATE_H_
11 #define SEMIHOST_PRIVATE_H_
12
13 typedef struct {
14 CHAR8 *FileName;
15 UINTN Mode;
16 UINTN NameLength;
17 } SEMIHOST_FILE_OPEN_BLOCK;
18
19 typedef struct {
20 UINTN Handle;
21 VOID *Buffer;
22 UINTN Length;
23 } SEMIHOST_FILE_READ_WRITE_BLOCK;
24
25 typedef struct {
26 UINTN Handle;
27 UINTN Location;
28 } SEMIHOST_FILE_SEEK_BLOCK;
29
30 typedef struct {
31 VOID *Buffer;
32 UINTN Identifier;
33 UINTN Length;
34 } SEMIHOST_FILE_TMPNAME_BLOCK;
35
36 typedef struct {
37 CHAR8 *FileName;
38 UINTN NameLength;
39 } SEMIHOST_FILE_REMOVE_BLOCK;
40
41 typedef struct {
42 CHAR8 *FileName;
43 UINTN FileNameLength;
44 CHAR8 *NewFileName;
45 UINTN NewFileNameLength;
46 } SEMIHOST_FILE_RENAME_BLOCK;
47
48 typedef struct {
49 CHAR8 *CommandLine;
50 UINTN CommandLength;
51 } SEMIHOST_SYSTEM_BLOCK;
52
53 #if defined (__CC_ARM)
54
55 #if defined (__thumb__)
56 #define SWI 0xAB
57 #else
58 #define SWI 0x123456
59 #endif
60
61 #define SEMIHOST_SUPPORTED TRUE
62
63 __swi (SWI)
64 INT32
65 _Semihost_SYS_OPEN (
66 IN UINTN SWI_0x01,
67 IN SEMIHOST_FILE_OPEN_BLOCK *OpenBlock
68 );
69
70 __swi (SWI)
71 INT32
72 _Semihost_SYS_CLOSE (
73 IN UINTN SWI_0x02,
74 IN UINT32 *Handle
75 );
76
77 __swi (SWI)
78 VOID
79 _Semihost_SYS_WRITEC (
80 IN UINTN SWI_0x03,
81 IN CHAR8 *Character
82 );
83
84 __swi (SWI)
85 VOID
86 _Semihost_SYS_WRITE0 (
87 IN UINTN SWI_0x04,
88 IN CHAR8 *String
89 );
90
91 __swi (SWI)
92 UINT32
93 _Semihost_SYS_WRITE (
94 IN UINTN SWI_0x05,
95 IN OUT SEMIHOST_FILE_READ_WRITE_BLOCK *WriteBlock
96 );
97
98 __swi (SWI)
99 UINT32
100 _Semihost_SYS_READ (
101 IN UINTN SWI_0x06,
102 IN OUT SEMIHOST_FILE_READ_WRITE_BLOCK *ReadBlock
103 );
104
105 __swi (SWI)
106 CHAR8
107 _Semihost_SYS_READC (
108 IN UINTN SWI_0x07,
109 IN UINTN Zero
110 );
111
112 __swi (SWI)
113 INT32
114 _Semihost_SYS_SEEK (
115 IN UINTN SWI_0x0A,
116 IN SEMIHOST_FILE_SEEK_BLOCK *SeekBlock
117 );
118
119 __swi (SWI)
120 INT32
121 _Semihost_SYS_FLEN (
122 IN UINTN SWI_0x0C,
123 IN UINT32 *Handle
124 );
125
126 __swi (SWI)
127 UINT32
128 _Semihost_SYS_TMPNAME (
129 IN UINTN SWI_0x0D,
130 IN SEMIHOST_FILE_TMPNAME_BLOCK *TmpNameBlock
131 );
132
133 __swi (SWI)
134 UINT32
135 _Semihost_SYS_REMOVE (
136 IN UINTN SWI_0x0E,
137 IN SEMIHOST_FILE_REMOVE_BLOCK *RemoveBlock
138 );
139
140 __swi (SWI)
141 UINT32
142 _Semihost_SYS_RENAME (
143 IN UINTN SWI_0x0F,
144 IN SEMIHOST_FILE_RENAME_BLOCK *RenameBlock
145 );
146
147 __swi (SWI)
148 UINT32
149 _Semihost_SYS_SYSTEM (
150 IN UINTN SWI_0x12,
151 IN SEMIHOST_SYSTEM_BLOCK *SystemBlock
152 );
153
154 #define SEMIHOST_SYS_OPEN(OpenBlock) _Semihost_SYS_OPEN(0x01, OpenBlock)
155 #define SEMIHOST_SYS_CLOSE(Handle) _Semihost_SYS_CLOSE(0x02, Handle)
156 #define SEMIHOST_SYS_WRITE0(String) _Semihost_SYS_WRITE0(0x04, String)
157 #define SEMIHOST_SYS_WRITEC(Character) _Semihost_SYS_WRITEC(0x03, Character)
158 #define SEMIHOST_SYS_WRITE(WriteBlock) _Semihost_SYS_WRITE(0x05, WriteBlock)
159 #define SEMIHOST_SYS_READ(ReadBlock) _Semihost_SYS_READ(0x06, ReadBlock)
160 #define SEMIHOST_SYS_READC() _Semihost_SYS_READC(0x07, 0)
161 #define SEMIHOST_SYS_SEEK(SeekBlock) _Semihost_SYS_SEEK(0x0A, SeekBlock)
162 #define SEMIHOST_SYS_FLEN(Handle) _Semihost_SYS_FLEN(0x0C, Handle)
163 #define SEMIHOST_SYS_TMPNAME(TmpNameBlock) _Semihost_SYS_TMPNAME(0x0D, TmpNameBlock)
164 #define SEMIHOST_SYS_REMOVE(RemoveBlock) _Semihost_SYS_REMOVE(0x0E, RemoveBlock)
165 #define SEMIHOST_SYS_RENAME(RenameBlock) _Semihost_SYS_RENAME(0x0F, RenameBlock)
166 #define SEMIHOST_SYS_SYSTEM(SystemBlock) _Semihost_SYS_SYSTEM(0x12, SystemBlock)
167
168 #elif defined (__GNUC__) // __CC_ARM
169
170 #define SEMIHOST_SUPPORTED TRUE
171
172 UINT32
173 GccSemihostCall (
174 IN UINT32 Operation,
175 IN UINTN SystemBlockAddress
176 ); // __attribute__ ((interrupt ("SVC")));
177
178 #define SEMIHOST_SYS_OPEN(OpenBlock) GccSemihostCall(0x01, (UINTN)(OpenBlock))
179 #define SEMIHOST_SYS_CLOSE(Handle) GccSemihostCall(0x02, (UINTN)(Handle))
180 #define SEMIHOST_SYS_WRITE0(String) GccSemihostCall(0x04, (UINTN)(String))
181 #define SEMIHOST_SYS_WRITEC(Character) GccSemihostCall(0x03, (UINTN)(Character))
182 #define SEMIHOST_SYS_WRITE(WriteBlock) GccSemihostCall(0x05, (UINTN)(WriteBlock))
183 #define SEMIHOST_SYS_READ(ReadBlock) GccSemihostCall(0x06, (UINTN)(ReadBlock))
184 #define SEMIHOST_SYS_READC() GccSemihostCall(0x07, (UINTN)(0))
185 #define SEMIHOST_SYS_SEEK(SeekBlock) GccSemihostCall(0x0A, (UINTN)(SeekBlock))
186 #define SEMIHOST_SYS_FLEN(Handle) GccSemihostCall(0x0C, (UINTN)(Handle))
187 #define SEMIHOST_SYS_TMPNAME(TmpNameBlock) GccSemihostCall(0x0D, (UINTN)(TmpNameBlock))
188 #define SEMIHOST_SYS_REMOVE(RemoveBlock) GccSemihostCall(0x0E, (UINTN)(RemoveBlock))
189 #define SEMIHOST_SYS_RENAME(RenameBlock) GccSemihostCall(0x0F, (UINTN)(RenameBlock))
190 #define SEMIHOST_SYS_SYSTEM(SystemBlock) GccSemihostCall(0x12, (UINTN)(SystemBlock))
191
192 #else // __CC_ARM
193
194 #define SEMIHOST_SUPPORTED FALSE
195
196 #define SEMIHOST_SYS_OPEN(OpenBlock) (-1)
197 #define SEMIHOST_SYS_CLOSE(Handle) (-1)
198 #define SEMIHOST_SYS_WRITE0(String)
199 #define SEMIHOST_SYS_WRITEC(Character)
200 #define SEMIHOST_SYS_WRITE(WriteBlock) (0)
201 #define SEMIHOST_SYS_READ(ReadBlock) ((ReadBlock)->Length)
202 #define SEMIHOST_SYS_READC() ('x')
203 #define SEMIHOST_SYS_SEEK(SeekBlock) (-1)
204 #define SEMIHOST_SYS_FLEN(Handle) (-1)
205 #define SEMIHOST_SYS_TMPNAME(TmpNameBlock) (-1)
206 #define SEMIHOST_SYS_REMOVE(RemoveBlock) (-1)
207 #define SEMIHOST_SYS_RENAME(RenameBlock) (-1)
208 #define SEMIHOST_SYS_SYSTEM(SystemBlock) (-1)
209
210 #endif // __CC_ARM
211
212 #endif // SEMIHOST_PRIVATE_H_