xref: /aosp_15_r20/external/coreboot/src/soc/amd/common/psp_verstage/include/svc_call.h (revision b9411a12aaaa7e1e6a6fb7c5e057f44ee179a49c)
1 /* SPDX-License-Identifier: GPL-2.0-only */
2 
3 #ifndef PSP_VERSTAGE_SVC_CALL_H
4 #define PSP_VERSTAGE_SVC_CALL_H
5 
6 #define SVC_CALL4(SVC_ID, R0, R1, R2, R3, Ret) \
7 	__asm__ __volatile__ ( \
8 	"mov r0, %[reg0]\n\t" \
9 	"mov r1, %[reg1]\n\t" \
10 	"mov r2, %[reg2]\n\t" \
11 	"mov r3, %[reg3]\n\t" \
12 	"svc %[id]\n\t" \
13 	"mov %[result], r0\n\t" \
14 	: [result] "=r" (Ret) /* output */ \
15 	: [id] "i" (SVC_ID), [reg0] "r" (R0), [reg1] "r" (R1), [reg2] "r" (R2), \
16 		[reg3] "r" (R3) /* input(s) */ \
17 	: "r0", "r1", "r2", "r3", "memory", "cc" /* list of clobbered registers */)
18 
19 #define SVC_CALL3(SVC_ID, R0,  R1, R2, Ret) \
20 	__asm__ __volatile__ ( \
21 	"mov r0, %[reg0]\n\t" \
22 	"mov r1, %[reg1]\n\t" \
23 	"mov r2, %[reg2]\n\t" \
24 	"svc %[id]\n\t" \
25 	"mov %[result], r0\n\t" \
26 	: [result] "=r" (Ret) /* output */ \
27 	: [id] "i" (SVC_ID), [reg0] "r" (R0), [reg1] "r" (R1), [reg2] "r" (R2) \
28 	: "r0", "r1", "r2", "memory", "cc" /* list of clobbered registers */)
29 
30 #define SVC_CALL2(SVC_ID, R0, R1, Ret) \
31 	__asm__ __volatile__ ( \
32 	"mov r0, %[reg0]\n\t" \
33 	"mov r1, %[reg1]\n\t" \
34 	"svc %[id]\n\t" \
35 	"mov %[result], r0\n\t" \
36 	: [result] "=r" (Ret) /* output */ \
37 	: [id] "i" (SVC_ID), [reg0] "r" (R0), [reg1] "r" (R1)/* input(s) */ \
38 	: "r0", "r1", "memory", "cc" /* list of clobbered registers */)
39 
40 #define SVC_CALL1(SVC_ID, R0, Ret) \
41 	__asm__ __volatile__ ( \
42 	"mov r0, %[reg0]\n\t" \
43 	"svc %[id]\n\t" \
44 	"mov %[result], r0\n\t" \
45 	: [result] "=r" (Ret) /* output */ \
46 	: [id] "i" (SVC_ID), [reg0] "r" (R0) /* input(s) */ \
47 	: "r0", "memory", "cc" /* list of clobbered registers */)
48 
49 #define SVC_CALL0(SVC_ID, Ret) \
50 	__asm__ __volatile__ ( \
51 	"svc %[id]\n\t" \
52 	"mov %[result], r0\n\t" \
53 	: [result] "=r" (Ret) /* output */ \
54 	: [id] "I" (SVC_ID) /* input(s) */ \
55 	: "memory", "cc" /* list of clobbered registers */)
56 
57 #endif /* PSP_VERSTAGE_SVC_CALL_H */
58