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