coreboot
coreboot is an Open Source project aimed at replacing the proprietary BIOS found in most computers.
svc.h
Go to the documentation of this file.
1 /* SPDX-License-Identifier: GPL-2.0-only */
2 
3 #ifndef PSP_VERSTAGE_SVC_H
4 #define PSP_VERSTAGE_SVC_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_H */