1/** @file
2*
3*  Copyright (c) 2012-2014, ARM Limited. All rights reserved.
4*
5*  This program and the accompanying materials
6*  are licensed and made available under the terms and conditions of the BSD License
7*  which accompanies this distribution.  The full text of the license may be found at
8*  http://opensource.org/licenses/bsd-license.php
9*
10*  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
11*  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
12*
13**/
14
15#ifndef __ARM_SMC_LIB__
16#define __ARM_SMC_LIB__
17
18/**
19 * The size of the SMC arguments are different between AArch64 and AArch32.
20 * The native size is used for the arguments.
21 */
22typedef struct {
23  UINTN  Arg0;
24  UINTN  Arg1;
25  UINTN  Arg2;
26  UINTN  Arg3;
27  UINTN  Arg4;
28  UINTN  Arg5;
29  UINTN  Arg6;
30  UINTN  Arg7;
31} ARM_SMC_ARGS;
32
33/**
34  Trigger an SMC call
35
36  SMC calls can take up to 7 arguments and return up to 4 return values.
37  Therefore, the 4 first fields in the ARM_SMC_ARGS structure are used
38  for both input and output values.
39
40**/
41VOID
42ArmCallSmc (
43  IN OUT ARM_SMC_ARGS *Args
44  );
45
46#endif
47