# SMC invoke 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` |
The module creates a bridge between the user space client and kernel.
A client using SMC invoke must use libminkdescriptor to communicate with the kernel.
The libminkdescriptor.so is available at /usr/lib/libminkdescriptor.so
The driver in the Linux kernel communicates with application clients and the trusted applications in the TrustZone.
The SMC invoke driver source code is available at /kernel/drivers/soc/qcom/smcinvoke/smcinvoke.c.