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