Manivannan Sadhasivam | 9435dc3 | 2020-02-20 15:28:39 +0530 | [diff] [blame] | 1 | .. SPDX-License-Identifier: GPL-2.0 |
| 2 | |
| 3 | ============ |
| 4 | MHI Topology |
| 5 | ============ |
| 6 | |
| 7 | This document provides information about the MHI topology modeling and |
| 8 | representation in the kernel. |
| 9 | |
| 10 | MHI Controller |
| 11 | -------------- |
| 12 | |
| 13 | MHI controller driver manages the interaction with the MHI client devices |
| 14 | such as the external modems and WiFi chipsets. It is also the MHI bus master |
| 15 | which is in charge of managing the physical link between the host and device. |
| 16 | It is however not involved in the actual data transfer as the data transfer |
| 17 | is taken care by the physical bus such as PCIe. Each controller driver exposes |
| 18 | channels and events based on the client device type. |
| 19 | |
| 20 | Below are the roles of the MHI controller driver: |
| 21 | |
| 22 | * Turns on the physical bus and establishes the link to the device |
| 23 | * Configures IRQs, IOMMU, and IOMEM |
| 24 | * Allocates struct mhi_controller and registers with the MHI bus framework |
| 25 | with channel and event configurations using mhi_register_controller. |
| 26 | * Initiates power on and shutdown sequence |
| 27 | * Initiates suspend and resume power management operations of the device. |
| 28 | |
| 29 | MHI Device |
| 30 | ---------- |
| 31 | |
| 32 | MHI device is the logical device which binds to a maximum of two MHI channels |
| 33 | for bi-directional communication. Once MHI is in powered on state, the MHI |
| 34 | core will create MHI devices based on the channel configuration exposed |
| 35 | by the controller. There can be a single MHI device for each channel or for a |
| 36 | couple of channels. |
| 37 | |
| 38 | Each supported device is enumerated in:: |
| 39 | |
| 40 | /sys/bus/mhi/devices/ |
| 41 | |
| 42 | MHI Driver |
| 43 | ---------- |
| 44 | |
| 45 | MHI driver is the client driver which binds to one or more MHI devices. The MHI |
| 46 | driver sends and receives the upper-layer protocol packets like IP packets, |
| 47 | modem control messages, and diagnostics messages over MHI. The MHI core will |
| 48 | bind the MHI devices to the MHI driver. |
| 49 | |
| 50 | Each supported driver is enumerated in:: |
| 51 | |
| 52 | /sys/bus/mhi/drivers/ |
| 53 | |
| 54 | Below are the roles of the MHI driver: |
| 55 | |
| 56 | * Registers the driver with the MHI bus framework using mhi_driver_register. |
| 57 | * Prepares the device for transfer by calling mhi_prepare_for_transfer. |
| 58 | * Initiates data transfer by calling mhi_queue_transfer. |
| 59 | * Once the data transfer is finished, calls mhi_unprepare_from_transfer to |
| 60 | end data transfer. |