Fusion-MPT
Fusion-MPT (Message Passing Technology) is an architecture, think umbrella term, which encompasses Fusion-MPT firmware, hardware (Ultra320 SCSI, FC, SAS) and OS level drivers. It was announced in the year 2000, about 2 years after Symbios acquisition and all IOCs and RoCs released since then are based on (or rather implement) this architecture.
Unfortunately technical details about this architecture are rather scarce and words Fusion-MPT can take on different meaning in different contexts, making it difficult to accurately explain what it actually is and/or does. Let’s take a closer look at each individual piece of this architecture.
Fusion-MPT Architecture Diagram (source: LSISAS_Invalid_Page_Analysis.pdf)
Hardware
At a hardware level Fusion-MPT is designed to support multiple physical interfaces as well as be easily extensible to new physical interfaces. First ever Fusion-MPT chip was FC909 fibre channel controller, followed by LSI53C1030 Ultra320 SCSI controller. Interestingly, PR documents of that era also talk about InfiniBand support, though I am not aware of any commercial InfiniBand product from LSI. SAS1064 was the first controller to add SAS support and SAS3408/SAS3508 introduced NVMe support.
Fusion-MPT MPI (Message Passing Interface)
Fusion-MPT MPI is probably the most important feature of the Fusion-MPT architecture. It provides an “abstraction” layer between host driver and Fusion-MPT chip. It is a standard communication protocol that defines how host driver and applications interfaces with all Fusion-MPT compatible devices. This enables single device driver to support all Fusion-MPT devices and makes drivers impervious to silicone or firmware changes. MPI can also be used for custom device driver implementation or value-added application programming, such as Integrated RAID.
MPI proper (
Message Passing Interface - Wikipedia) is actually a standardized message-passing standard intended for use in parallel computing architectures e.g. supercomputers. It is maintained by a group of research and industry partners and was first released in 1994. Fusion-MPT MPI is implemented using MPI standard.
OS Driver and Firmware
OS level driver is responsible for sending MPI request messages to firmware and firmware replies with MPI reply messages after processing the request. This is a verbatim quote from one of the LSI’s technical docs that better explains this:
"
The LSI SAS firmware is part of the Fusion-MPT device driver architecture. The role of the SAS firmware is to do an I/O request that is issued from a host driver, and to reply with a success or failure status. Note that the host driver could be a driver stack in an operating system (such as the Windows SCSI Port and Miniport drivers), or it could be RAID firmware running on an LSI controller or on an external IOP. A key part of the architecture is that the host driver is in control, and the firmware just does what the driver tells it to do. In this architecture, the host driver stack is responsible for most retry logic and timeouts for commands it sends. In most cases when an error is detected, the firmware replies with an error status to the host and allows the host driver stack to determine if it wants to fail the I/O to the OS, or retry it, or do something else. The Fusion-MPT architecture is a SCSI Command Set based architecture in which the host driver passes a message to the firmware that includes a SCSI command, and the firmware attempts to send the command to a target. Then the firmware replies to the host driver with a status of success or failure. Failure responses include SCSI Status and Sense Data from the target, if present."
MPI messages are used not only for SCSI I/O, but also for controller configuration and maintenance tasks. There are messages that can be used to reset the IOC, enable/disable port, flash firmware, configure RAID, etc. These maintenance messages are used not only by the driver, but also by the BIOS, WebBIOS, UEFI BSD as well as user space applications such as LSIUtil.
LSI Logic's Fusion-MPT Architecture (2007)
Fusion-MPT Device Management User Guide v1.3 (2007)
Fusion-MPT Device Management User Guide v1.2 (2002)
Fusion-MPT FCode User's Guide (2004)
LSISAS_Invalid_Page_Analysis.pdf <- This is an interesting document (in Chinese, use translator) that takes a deeper look into MPI messages, Linux kernel driver and few other things.