# SMC invoke
Source: [https://docs.qualcomm.com/doc/80-70015-11/topic/smcinvoke.html](https://docs.qualcomm.com/doc/80-70015-11/topic/smcinvoke.html)
The secure monitor call (SMC) invoke is used to expose the services and interfaces
implemented in Qualcomm TEE to Linux clients. It provides identification information about
the requesting processes to Qualcomm TEE.
The SMC invoke is an object-oriented, capability-based framework that enables
communication between Linux clients, TrustZone, and the TrustZone applications, which
use mini-kernel (MINK) invoke objects.
During the SMC invoke process, the following objects are involved:
Table : Objects – SMC invoke
| Objects | Owner execution environment | Description |
| --- | --- | --- |
| Remote | TrustZone | Linux obtains references to remote objects through the invoked
operations. For example, an AppLoader, which is a remote object. |
| Callback | Linux | Linux sends references of the required callback objects through the
invoked operations to the TrustZone, which may invoke these objects as
needed. |
| Memory | Linux | These memory objects are useful for efficiently sharing large buffers
between TrustZone and Linux. |
The figure shows the SMC invoke architecture:

The SMC invoke has the following components:
- Linux kernel:
The SMC invoke driver in the kernel is responsible for transporting
user space requests between the TrustZone and the Linux user space clients. It
exposes the following input/output controls (IOCTL).
- `SMCINVOKE_IOCTL_INVOKE_REQ`
- `SMCINVOKE_IOCTL_ACCEPT_REQ`
- `SMCINVOKE_IOCTL_SERVER_REQ`
- `SMCINVOKE_IOCTL_ACK_LOCAL_OBJ`
- Linux user space:
The SMC invoke in the user space includes
`libminkdescriptor.so` and the SSGTZD daemon.
Table : SMC invoke modules
| Module | Description |
| --- | --- |
| `SMCInvoke client` | This client communicates with the trusted applications in Qualcomm
TEE through the SMC invoke driver. |
| `TA client` | This client communicates with the TrustZone applications through the
SMC invoke driver. |
| `Libminkdescriptor` |
libminkdescriptor to communicate with thelibminkdescriptor.so is available at/usr/lib/libminkdescriptor.so/kernel/drivers/soc/qcom/smcinvoke/smcinvoke.c.