ArmPkg: Extend number of parameter registers in SMC call
The Realm Service Interface (RSI) commands use registers between
X1-X10 as parameters and between X0-X8 as return values for SMC
calls.
According to the SMCCC Section 2.6 SMC32/HVC32 argument passing
When an SMC32/HVC32 call is made from AArch32:
- Arguments are passed in registers R1-R7.
- Results are returned in R0-R7.
When an SMC32/HVC32 call is made from AArch64:
- Arguments are passed in registers W1-W7.
- Results are returned in W0-W7.
According to SMCCC Section 2.7 SMC64/HVC64 argument passing
When an SMC64/HVC64 call is made from AArch64:
- Arguments are passed in registers X1-X17.
- Results are returned in X0-X17.
This means SMC calls can take up to 7/17 arguments and return up
to 7/17 return values.
However, for the current use-case(s):
- SMC32/HVC32 calls made from AArch32/AArch64 require up to 7
arguments and 4 return values.
- SMC64/HVC64 calls made from AArch64 require up to 10 arguments
and 9 return values.
Therefore, for SMC32/HVC32 calls made from AArch32/AArch64 there is
no update required. However, for AMC64/HVC64 calls made from AArch64,
extend the ArmCallSmc () to use registers X1-X11 as parameters and
return values for SMC call.
Signed-off-by:
Sami Mujawar <sami.mujawar@arm.com>
Loading
Please register or sign in to comment