SVC: Difference between revisions
_ZN2nn3svc7aarch644lp6426SynchronizePreemptionStateEv |
add docs for svcCallSecureMonitor. |
||
Line 239: | Line 239: | ||
| 0x7E || svcSetResourceLimitLimitValue || W0=reslimit_handle, W1=[[#LimitableResource]], X2=value || W0=result | | 0x7E || svcSetResourceLimitLimitValue || W0=reslimit_handle, W1=[[#LimitableResource]], X2=value || W0=result | ||
|- | |- | ||
| 0x7F || svcCallSecureMonitor || X0=smc_sub_id, X1,X2,X3,X4,X5,X6,X7=smc_args || X0,X1,X2,X3,X4,X5,X6,X7=result | | 0x7F || [[#svcCallSecureMonitor]] || X0=smc_sub_id, X1,X2,X3,X4,X5,X6,X7=smc_args || X0,X1,X2,X3,X4,X5,X6,X7=result | ||
|} | |} | ||
Line 1,521: | Line 1,521: | ||
Returns an enum with value 0-7. | Returns an enum with value 0-7. | ||
== svcCallSecureMonitor == | |||
<div style="display: inline-block;"> | |||
{| class="wikitable" border="1" | |||
|- | |||
! Argument || Type || Name | |||
|- | |||
| (In) X0 || u64 || [[SMC#ID_0|Function ID]] | |||
|- | |||
| (In) X1-X7 || u64 || SMC sub-arguments | |||
|- | |||
| (Out) X0 || [[SMC#Errors|SMC Result]] || Result of SMC | |||
|- | |||
| (Out) X1-X7 || u64 || SMC sub-output | |||
|} | |||
</div> | |||
Takes in a SMC function ID in X0, and arguments for that SMC function in X1-X7. | |||
Passing an invalid SMC function ID or calling from a core other than core 3 will result in a secure monitor panic. | |||
The kernel parses bits 9-15 in the passed SMC function ID (per the ARM SMC calling convention), and when set uses as an indicator to translate a pointer in the associated register (X1-X7) to a physical address. The kernel will translate any address mapped as R-W, other addresses (R--, R-X, or invalid pointers) will be translated as 0/NULL. | |||
Output is returned raw from the Secure Monitor; X0 will be the untranslated SMC result and X1-X7 will contain other SMC output (or be unchanged, depending on the SMC). | |||
== Debugging == | == Debugging == |