Qualcomm MSM Chip-sets
(not complete - actively being edited)
Most HTC devices have at their core Qualcomm System-on-Chip (SoC) Mobile Station Modem (MSM) integrated circuits. These are based on Advanced RISC Machines Ltd. (ARM) micro-processor and supporting systems designs. In most Smart Phone devices the SoC consists of two ARM micro-processors, one to manage the communications hardware (radio transmitters) and the other to manage the user applications and interface. These are generally known as the modem (or radio or baseband) processor and the applications (or apps) processor. These processors may not be identical since their functions are different.
The MSM SoC contains a large number of integrated controllers and peripherals, all of which need to communicate with one or all micro-processors.
Direct Memory Access (DMA) controllers set-up and supervise direct transfers of large blocks of data directly to or from a peripheral out of or into Random Access Memory (RAM). DMA releases the micro-processor from having to use its own Input/Output (I/O) instructions to move data one word (a word is the number of bits the data bus can move in one clock tick) at a time inside a loop. The effect of DMA is to make data transfers to or from peripherals many times faster than the micro-processor could achieve, and allows the micro-processor to get on with other tasks until the DMA controller sends it an interrupt request (IRQ) notifying it that a DMA transfer is complete.
MSM chipsets have two DMA engines called Data Movers (DM or DMOV). They are the Modem Data Mover (mDM) and Applications Data Mover (aDM). Each provides sixteen data-transfer channels that can operate at the same time. Ownership of each channel is determined by security domain (SD), where the modem micro-processor operates in SD0 and SD1, the applications Digital Signal Processor (aDSP) operates in SD2, and the apps processor operates in SD3. Only the modem processor can change the security domain channel assignments.
Inter Integrated Circuit (I2C) Communications
I2C is a two-wire bus for communications between integrated circuits. These are usually off-chip (not integrated into the SoC) devices. MSM typically uses them for keyboard, touch-pad, micro-controller,
memory, Liquid Crystal Display (LCD) driver and stereo sound. Typically the devices do not need to high speeds nor to move large amounts of data or commands.
Single Wire Serial Bus Interface
The Single-wire Serial Bus Interface (SSBI) is similar to I2C but it combines power and data on a single wire. The clients incorporate a small capacitor to store charge when the master has put the wire into data mode. Unlike I2C though, it is a point-to-point interface (only ever two devices connected by it).
The radio micro-processor is in command of the entire system. It can and does prevent access to some core hardware and services by the apps micro-processor. It also provides several methods for the apps processor to communicate with it using Inter Processor Communications (IPC). The methods vary based on the objective of the communication.
The IPC methods are high-level Application Programming Interfaces (APIs) implemented on top of a common Shared Memory (SMEM) design. SMEM uses defined ranges within the address-space of the system (232 - 1) which all the micro-processors have access to. These ranges are called channels. An 'IPC call' consists of the caller storing a data structure in an SMEM channel and then initiating a hardware interrupt (IRQ) on the callee micro-processor. The callee IRQ handler walks the list of open SMEM channels to discover which one has been updated, and then calls a local function that has registered to handle the channel.
Remote Procedure Call (RPC)
RPC allows functions on a client micro-processor to call functions on the server micro-processor which then executes the requested function and returns the result to the caller. The client will place function arguments into SMEM and the server will place the return value in SMEM. The definition of client and server is purely based on which micro-processor initiates the RPC, although in some designs it is possible that only one micro-processor runs an RPC server.