| .. SPDX-License-Identifier: GPL-2.0 |
| |
| ============ |
| MHI Topology |
| ============ |
| |
| This document provides information about the MHI topology modeling and |
| representation in the kernel. |
| |
| MHI Controller |
| -------------- |
| |
| MHI controller driver manages the interaction with the MHI client devices |
| such as the external modems and WiFi chipsets. It is also the MHI bus master |
| which is in charge of managing the physical link between the host and device. |
| It is however not involved in the actual data transfer as the data transfer |
| is taken care by the physical bus such as PCIe. Each controller driver exposes |
| channels and events based on the client device type. |
| |
| Below are the roles of the MHI controller driver: |
| |
| * Turns on the physical bus and establishes the link to the device |
| * Configures IRQs, IOMMU, and IOMEM |
| * Allocates struct mhi_controller and registers with the MHI bus framework |
| with channel and event configurations using mhi_register_controller. |
| * Initiates power on and shutdown sequence |
| * Initiates suspend and resume power management operations of the device. |
| |
| MHI Device |
| ---------- |
| |
| MHI device is the logical device which binds to a maximum of two MHI channels |
| for bi-directional communication. Once MHI is in powered on state, the MHI |
| core will create MHI devices based on the channel configuration exposed |
| by the controller. There can be a single MHI device for each channel or for a |
| couple of channels. |
| |
| Each supported device is enumerated in:: |
| |
| /sys/bus/mhi/devices/ |
| |
| MHI Driver |
| ---------- |
| |
| MHI driver is the client driver which binds to one or more MHI devices. The MHI |
| driver sends and receives the upper-layer protocol packets like IP packets, |
| modem control messages, and diagnostics messages over MHI. The MHI core will |
| bind the MHI devices to the MHI driver. |
| |
| Each supported driver is enumerated in:: |
| |
| /sys/bus/mhi/drivers/ |
| |
| Below are the roles of the MHI driver: |
| |
| * Registers the driver with the MHI bus framework using mhi_driver_register. |
| * Prepares the device for transfer by calling mhi_prepare_for_transfer. |
| * Initiates data transfer by calling mhi_queue_transfer. |
| * Once the data transfer is finished, calls mhi_unprepare_from_transfer to |
| end data transfer. |