Add functions ArmCallSmc0/1/2/3 to do SMC calls with 0, 1, 2 or 3 arguments. The functions return up to 3 values. Signed-off-by: Rebecca Cran <rebecca@nuviainc.com> Reviewed-by: Sami Mujawar <sami.mujawar@arm.com>
		
			
				
	
	
		
			102 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			102 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| //
 | |
| //  Copyright (c) 2021, NUVIA Inc. All rights reserved.
 | |
| //  Copyright (c) 2016, Linaro Limited. All rights reserved.
 | |
| //
 | |
| //  SPDX-License-Identifier: BSD-2-Clause-Patent
 | |
| //
 | |
| //
 | |
| 
 | |
| #include <Base.h>
 | |
| #include <Library/ArmSmcLib.h>
 | |
| #include <IndustryStandard/ArmStdSmc.h>
 | |
| 
 | |
| VOID
 | |
| ArmCallSmc (
 | |
|   IN OUT ARM_SMC_ARGS  *Args
 | |
|   )
 | |
| {
 | |
| }
 | |
| 
 | |
| /** Triggers 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
 | |
|   )
 | |
| {
 | |
|   return SMC_ARCH_CALL_NOT_SUPPORTED;
 | |
| }
 | |
| 
 | |
| /** 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
 | |
|   )
 | |
| {
 | |
|   return SMC_ARCH_CALL_NOT_SUPPORTED;
 | |
| }
 | |
| 
 | |
| /** 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
 | |
|   )
 | |
| {
 | |
|   return SMC_ARCH_CALL_NOT_SUPPORTED;
 | |
| }
 | |
| 
 | |
| /** 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
 | |
|   )
 | |
| {
 | |
|   return SMC_ARCH_CALL_NOT_SUPPORTED;
 | |
| }
 |