mirror of https://github.com/acidanthera/audk.git
ArmPkg/ArmSvcLib: Return x4-x7 in output parameters
The Arm SMC calling convention standard v1.2 allows 8 input and output parameter registers. The FF-A specification relies on this communication. This patch extends the number of output registers returned by ArmCallSvc() to match this convention. Signed-off-by: Achin Gupta <achin.gupta@arm.com> Reviewed-by: Sami Mujawar <sami.mujawar@arm.com> Reviewed-by: Ard Biesheuvel <ardb@kernel.org>
This commit is contained in:
parent
37ef4bb1a7
commit
af0c597e98
|
@ -27,10 +27,16 @@ typedef struct {
|
|||
/**
|
||||
Trigger an SVC call
|
||||
|
||||
SVC calls can take up to 7 arguments and return up to 4 return values.
|
||||
Therefore, the 4 first fields in the ARM_SVC_ARGS structure are used
|
||||
SVC calls can take up to 8 arguments and return up to 8 return values.
|
||||
Therefore, the 8 first fields in the ARM_SVC_ARGS structure are used
|
||||
for both input and output values.
|
||||
|
||||
@param[in, out] Args Arguments to be passed as part of the SVC call
|
||||
The return values of the SVC call are also placed
|
||||
in the same structure
|
||||
|
||||
@retval None
|
||||
|
||||
**/
|
||||
VOID
|
||||
ArmCallSvc (
|
||||
|
|
|
@ -33,9 +33,11 @@ ASM_PFX(ArmCallSvc):
|
|||
ldr x9, [sp, #16]
|
||||
|
||||
// Store the SVC returned values into the ARM_SVC_ARGS structure.
|
||||
// A SVC call can return up to 4 values - we do not need to store back x4-x7.
|
||||
// A SVC call can return up to 8 values
|
||||
stp x0, x1, [x9, #0]
|
||||
stp x2, x3, [x9, #16]
|
||||
stp x4, x5, [x9, #32]
|
||||
stp x6, x7, [x9, #48]
|
||||
|
||||
mov x0, x9
|
||||
|
||||
|
|
Loading…
Reference in New Issue