This Secure Monitor Call Calling Convention (SMCCC) and HyperVisor Call (HVC) convention describes the standard mechanism that is to be used with the SMCCC and HVC instructions, in both the Armv7 and Armv8 architectures.
The SMCCC instruction is used to generate a synchronous exception that is handled by Secure Monitor code, running in EL3. Arguments and return values are passed in registers. After being handled by the Secure Monitor, calls that result from the instructions can be passed on to a Trusted OS or some other entity in the secure software stack.
The HVC instruction is used to generate a synchronous exception that is handled by a hypervisor, running in EL2. Arguments and return values are passed in registers. Hypervisors can also trap SMCCC calls that are made by Guest Operating Systems (at EL1), which allows the calls to be emulated, passed through, or denied as appropriate.
This specification aims to ease integration and reduce fragmentation between software layers, for example Operating Systems, hypervisors, Trusted OSs, Secure Monitors, and System Firmware.