mirror of
https://github.com/tianocore/edk2.git
synced 2025-08-26 22:07:55 +00:00

As an implementation of an industry specification-defined interface, ArmSmcLib is more appropriately placed in MdePkg. This update relocates both the header definition and the implementation of ArmSmcLib to MdePkg, thereby supporting the monitor call primitives for all other packages that depend on this interface. Continuous-integration-options: PatchCheck.ignore-multi-package Signed-off-by: Kun Qin <kun.qin@microsoft.com>
124 lines
2.5 KiB
C
124 lines
2.5 KiB
C
/** @file
|
|
*
|
|
* Copyright (c) 2021, NUVIA Inc. All rights reserved.<BR>
|
|
* Copyright (c) 2012-2014, ARM Limited. All rights reserved.
|
|
*
|
|
* SPDX-License-Identifier: BSD-2-Clause-Patent
|
|
*
|
|
**/
|
|
|
|
#ifndef ARM_SMC_LIB_H_
|
|
#define ARM_SMC_LIB_H_
|
|
|
|
/**
|
|
* The size of the SMC arguments are different between AArch64 and AArch32.
|
|
* The native size is used for the arguments.
|
|
*/
|
|
typedef struct {
|
|
UINTN Arg0;
|
|
UINTN Arg1;
|
|
UINTN Arg2;
|
|
UINTN Arg3;
|
|
UINTN Arg4;
|
|
UINTN Arg5;
|
|
UINTN Arg6;
|
|
UINTN Arg7;
|
|
UINTN Arg8;
|
|
UINTN Arg9;
|
|
UINTN Arg10;
|
|
UINTN Arg11;
|
|
UINTN Arg12;
|
|
UINTN Arg13;
|
|
UINTN Arg14;
|
|
UINTN Arg15;
|
|
UINTN Arg16;
|
|
UINTN Arg17;
|
|
} ARM_SMC_ARGS;
|
|
|
|
/**
|
|
Trigger an SMC call
|
|
|
|
SMC calls can take up to 7 arguments and return up to 4 return values.
|
|
Therefore, the 4 first fields in the ARM_SMC_ARGS structure are used
|
|
for both input and output values.
|
|
|
|
**/
|
|
VOID
|
|
ArmCallSmc (
|
|
IN OUT ARM_SMC_ARGS *Args
|
|
);
|
|
|
|
/** Trigger an SMC call with 3 arguments.
|
|
|
|
@param Function The SMC function.
|
|
@param Arg1 Argument/result.
|
|
@param Arg2 Argument/result.
|
|
@param Arg3 Argument/result.
|
|
|
|
@return The SMC error code.
|
|
|
|
**/
|
|
UINTN
|
|
ArmCallSmc3 (
|
|
IN UINTN Function,
|
|
IN OUT UINTN *Arg1 OPTIONAL,
|
|
IN OUT UINTN *Arg2 OPTIONAL,
|
|
IN OUT UINTN *Arg3 OPTIONAL
|
|
);
|
|
|
|
/** Trigger an SMC call with 2 arguments.
|
|
|
|
@param Function The SMC function.
|
|
@param Arg1 Argument/result.
|
|
@param Arg2 Argument/result.
|
|
@param Arg3 Result.
|
|
|
|
@return The SMC error code.
|
|
|
|
**/
|
|
UINTN
|
|
ArmCallSmc2 (
|
|
IN UINTN Function,
|
|
IN OUT UINTN *Arg1 OPTIONAL,
|
|
IN OUT UINTN *Arg2 OPTIONAL,
|
|
OUT UINTN *Arg3 OPTIONAL
|
|
);
|
|
|
|
/** Trigger an SMC call with 1 argument.
|
|
|
|
@param Function The SMC function.
|
|
@param Arg1 Argument/result.
|
|
@param Arg2 Result.
|
|
@param Arg3 Result.
|
|
|
|
@return The SMC error code.
|
|
|
|
**/
|
|
UINTN
|
|
ArmCallSmc1 (
|
|
IN UINTN Function,
|
|
IN OUT UINTN *Arg1 OPTIONAL,
|
|
OUT UINTN *Arg2 OPTIONAL,
|
|
OUT UINTN *Arg3 OPTIONAL
|
|
);
|
|
|
|
/** Trigger an SMC call with 0 arguments.
|
|
|
|
@param Function The SMC function.
|
|
@param Arg1 Result.
|
|
@param Arg2 Result.
|
|
@param Arg3 Result.
|
|
|
|
@return The SMC error code.
|
|
|
|
**/
|
|
UINTN
|
|
ArmCallSmc0 (
|
|
IN UINTN Function,
|
|
OUT UINTN *Arg1 OPTIONAL,
|
|
OUT UINTN *Arg2 OPTIONAL,
|
|
OUT UINTN *Arg3 OPTIONAL
|
|
);
|
|
|
|
#endif // ARM_SMC_LIB_H_
|