]> git.proxmox.com Git - mirror_edk2.git/blob - ArmPkg/Include/Library/ArmSmcLib.h
UefiCpuPkg: Move AsmRelocateApLoopStart from Mpfuncs.nasm to AmdSev.nasm
[mirror_edk2.git] / ArmPkg / Include / Library / ArmSmcLib.h
1 /** @file
2 *
3 * Copyright (c) 2021, NUVIA Inc. All rights reserved.<BR>
4 * Copyright (c) 2012-2014, ARM Limited. All rights reserved.
5 *
6 * SPDX-License-Identifier: BSD-2-Clause-Patent
7 *
8 **/
9
10 #ifndef ARM_SMC_LIB_H_
11 #define ARM_SMC_LIB_H_
12
13 /**
14 * The size of the SMC arguments are different between AArch64 and AArch32.
15 * The native size is used for the arguments.
16 */
17 typedef struct {
18 UINTN Arg0;
19 UINTN Arg1;
20 UINTN Arg2;
21 UINTN Arg3;
22 UINTN Arg4;
23 UINTN Arg5;
24 UINTN Arg6;
25 UINTN Arg7;
26 } ARM_SMC_ARGS;
27
28 /**
29 Trigger an SMC call
30
31 SMC calls can take up to 7 arguments and return up to 4 return values.
32 Therefore, the 4 first fields in the ARM_SMC_ARGS structure are used
33 for both input and output values.
34
35 **/
36 VOID
37 ArmCallSmc (
38 IN OUT ARM_SMC_ARGS *Args
39 );
40
41 /** Trigger an SMC call with 3 arguments.
42
43 @param Function The SMC function.
44 @param Arg1 Argument/result.
45 @param Arg2 Argument/result.
46 @param Arg3 Argument/result.
47
48 @return The SMC error code.
49
50 **/
51 UINTN
52 ArmCallSmc3 (
53 IN UINTN Function,
54 IN OUT UINTN *Arg1 OPTIONAL,
55 IN OUT UINTN *Arg2 OPTIONAL,
56 IN OUT UINTN *Arg3 OPTIONAL
57 );
58
59 /** Trigger an SMC call with 2 arguments.
60
61 @param Function The SMC function.
62 @param Arg1 Argument/result.
63 @param Arg2 Argument/result.
64 @param Arg3 Result.
65
66 @return The SMC error code.
67
68 **/
69 UINTN
70 ArmCallSmc2 (
71 IN UINTN Function,
72 IN OUT UINTN *Arg1 OPTIONAL,
73 IN OUT UINTN *Arg2 OPTIONAL,
74 OUT UINTN *Arg3 OPTIONAL
75 );
76
77 /** Trigger an SMC call with 1 argument.
78
79 @param Function The SMC function.
80 @param Arg1 Argument/result.
81 @param Arg2 Result.
82 @param Arg3 Result.
83
84 @return The SMC error code.
85
86 **/
87 UINTN
88 ArmCallSmc1 (
89 IN UINTN Function,
90 IN OUT UINTN *Arg1 OPTIONAL,
91 OUT UINTN *Arg2 OPTIONAL,
92 OUT UINTN *Arg3 OPTIONAL
93 );
94
95 /** Trigger an SMC call with 0 arguments.
96
97 @param Function The SMC function.
98 @param Arg1 Result.
99 @param Arg2 Result.
100 @param Arg3 Result.
101
102 @return The SMC error code.
103
104 **/
105 UINTN
106 ArmCallSmc0 (
107 IN UINTN Function,
108 OUT UINTN *Arg1 OPTIONAL,
109 OUT UINTN *Arg2 OPTIONAL,
110 OUT UINTN *Arg3 OPTIONAL
111 );
112
113 #endif // ARM_SMC_LIB_H_