]> git.proxmox.com Git - mirror_edk2.git/blame - ArmPkg/Library/SemihostLib/SemihostPrivate.h
UefiCpuPkg: Move AsmRelocateApLoopStart from Mpfuncs.nasm to AmdSev.nasm
[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
429309e0 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
429309e0 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 30typedef struct {\r
429309e0 31 VOID *Buffer;\r
5521b5cc
RC
32 UINTN Identifier;\r
33 UINTN Length;\r
34} SEMIHOST_FILE_TMPNAME_BLOCK;\r
35\r
1e57a462 36typedef struct {\r
429309e0 37 CHAR8 *FileName;\r
228fdff4 38 UINTN NameLength;\r
1e57a462 39} SEMIHOST_FILE_REMOVE_BLOCK;\r
40\r
5521b5cc 41typedef struct {\r
429309e0 42 CHAR8 *FileName;\r
5521b5cc 43 UINTN FileNameLength;\r
429309e0 44 CHAR8 *NewFileName;\r
5521b5cc
RC
45 UINTN NewFileNameLength;\r
46} SEMIHOST_FILE_RENAME_BLOCK;\r
47\r
1e57a462 48typedef struct {\r
429309e0 49 CHAR8 *CommandLine;\r
228fdff4 50 UINTN CommandLength;\r
1e57a462 51} SEMIHOST_SYSTEM_BLOCK;\r
52\r
429309e0 53#if defined (__CC_ARM)\r
1e57a462 54\r
429309e0
MK
55 #if defined (__thumb__)\r
56#define SWI 0xAB\r
57 #else\r
58#define SWI 0x123456\r
59 #endif\r
1e57a462 60\r
61#define SEMIHOST_SUPPORTED TRUE\r
62\r
429309e0 63__swi (SWI)\r
1e57a462 64INT32\r
429309e0
MK
65_Semihost_SYS_OPEN (\r
66 IN UINTN SWI_0x01,\r
67 IN SEMIHOST_FILE_OPEN_BLOCK *OpenBlock\r
1e57a462 68 );\r
69\r
429309e0 70__swi (SWI)\r
1e57a462 71INT32\r
429309e0
MK
72_Semihost_SYS_CLOSE (\r
73 IN UINTN SWI_0x02,\r
74 IN UINT32 *Handle\r
1e57a462 75 );\r
76\r
429309e0 77__swi (SWI)\r
1e57a462 78VOID\r
429309e0
MK
79_Semihost_SYS_WRITEC (\r
80 IN UINTN SWI_0x03,\r
81 IN CHAR8 *Character\r
1e57a462 82 );\r
83\r
429309e0 84__swi (SWI)\r
1e57a462 85VOID\r
429309e0
MK
86_Semihost_SYS_WRITE0 (\r
87 IN UINTN SWI_0x04,\r
88 IN CHAR8 *String\r
1e57a462 89 );\r
90\r
429309e0 91__swi (SWI)\r
1e57a462 92UINT32\r
429309e0
MK
93_Semihost_SYS_WRITE (\r
94 IN UINTN SWI_0x05,\r
95 IN OUT SEMIHOST_FILE_READ_WRITE_BLOCK *WriteBlock\r
1e57a462 96 );\r
97\r
429309e0 98__swi (SWI)\r
1e57a462 99UINT32\r
429309e0
MK
100_Semihost_SYS_READ (\r
101 IN UINTN SWI_0x06,\r
102 IN OUT SEMIHOST_FILE_READ_WRITE_BLOCK *ReadBlock\r
1e57a462 103 );\r
104\r
429309e0 105__swi (SWI)\r
1e57a462 106CHAR8\r
429309e0
MK
107_Semihost_SYS_READC (\r
108 IN UINTN SWI_0x07,\r
109 IN UINTN Zero\r
1e57a462 110 );\r
111\r
429309e0 112__swi (SWI)\r
1e57a462 113INT32\r
429309e0
MK
114_Semihost_SYS_SEEK (\r
115 IN UINTN SWI_0x0A,\r
116 IN SEMIHOST_FILE_SEEK_BLOCK *SeekBlock\r
1e57a462 117 );\r
118\r
429309e0 119__swi (SWI)\r
1e57a462 120INT32\r
429309e0
MK
121_Semihost_SYS_FLEN (\r
122 IN UINTN SWI_0x0C,\r
123 IN UINT32 *Handle\r
1e57a462 124 );\r
125\r
429309e0 126__swi (SWI)\r
5521b5cc 127UINT32\r
429309e0
MK
128_Semihost_SYS_TMPNAME (\r
129 IN UINTN SWI_0x0D,\r
130 IN SEMIHOST_FILE_TMPNAME_BLOCK *TmpNameBlock\r
5521b5cc
RC
131 );\r
132\r
429309e0 133__swi (SWI)\r
1e57a462 134UINT32\r
429309e0
MK
135_Semihost_SYS_REMOVE (\r
136 IN UINTN SWI_0x0E,\r
137 IN SEMIHOST_FILE_REMOVE_BLOCK *RemoveBlock\r
1e57a462 138 );\r
139\r
429309e0 140__swi (SWI)\r
5521b5cc 141UINT32\r
429309e0
MK
142_Semihost_SYS_RENAME (\r
143 IN UINTN SWI_0x0F,\r
144 IN SEMIHOST_FILE_RENAME_BLOCK *RenameBlock\r
5521b5cc
RC
145 );\r
146\r
429309e0 147__swi (SWI)\r
1e57a462 148UINT32\r
429309e0
MK
149_Semihost_SYS_SYSTEM (\r
150 IN UINTN SWI_0x12,\r
151 IN SEMIHOST_SYSTEM_BLOCK *SystemBlock\r
1e57a462 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
429309e0 168#elif defined (__GNUC__) // __CC_ARM\r
1e57a462 169\r
170#define SEMIHOST_SUPPORTED TRUE\r
171\r
172UINT32\r
173GccSemihostCall (\r
429309e0
MK
174 IN UINT32 Operation,\r
175 IN UINTN SystemBlockAddress\r
1e57a462 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
429309e0
MK
196#define SEMIHOST_SYS_OPEN(OpenBlock) (-1)\r
197#define SEMIHOST_SYS_CLOSE(Handle) (-1)\r
b9d49769
PG
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