> ## Documentation Index
> Fetch the complete documentation index at: https://dragonwingdocs.qualcomm.com/llms.txt
> Use this file to discover all available pages before exploring further.

# IPC Overview

> Production-focused guide to the Qualcomm IPC stack, transport protocols, and service interfaces.

Inter-process communication (IPC) lets software running on separate processors or in separate execution environments exchange control messages and data. The Qualcomm IPC stack separates transport, routing, and service semantics so that a service can communicate without depending on one physical link.

## IPC stack at a glance

```mermaid theme={null}
flowchart LR
    App[Client or service] --> QMI[QMI messages]
    QMI --> QRTR[QRTR routing]
    QRTR --> GLINK[GLink transport]
    GLINK --> XPRT[Transport plug-in]
    XPRT --> PHY[Shared Memory / RPM]
    PHY --> Remote[Remote processor]
```

The layers have different responsibilities:

| Layer     | Responsibility                                                                                                         |
| --------- | ---------------------------------------------------------------------------------------------------------------------- |
| **GLink** | Moves channel data across a physical transport and manages channel state, buffer ownership, and transport negotiation. |
| **QRTR**  | Routes connectionless messages between node/port endpoints and provides service-name discovery.                        |
| **QMI**   | Defines the client/service message format, including requests, responses, indications, and TLV-encoded payloads.       |

A QMI transaction can therefore travel through QRTR and GLink, while each layer maintains its own addressing, flow control, and lifecycle state.

## How to use this guide

Use the GLink section when the problem involves transport registration, channel state, receive intents, buffer ownership, or subsystem restart. Use QMI when the problem involves service discovery, message descriptors, encoding and decoding, callbacks, or request handling. Use QRTR when the problem involves nodes, ports, service lookup, routing, socket endpoints, or router control messages.

The examples use kernel-oriented interfaces and C data structures. Names and constants should be checked against the target kernel tree before they are used in a driver.
