DDI UFM and friends

Review Request #2189 — Created July 16, 2019 and submitted — Latest diff uploaded

11257, 11258

This is a review request for the port of the following changes from illumos-joyent:

11257 Add DDI support for Upgradable Firmware Modules
11258 Add libtopo support for Upgradable Firmware Modules

The first change (11257) extends the illumos Device Driver Interface (DDI) to provide a common set of interfaces that drivers can use to report firmware information.

In order to both prove out and exercise the new interfaces, 11257 also includes changes to the mpt_sas and i40e drivers to expose their firmware information via the DDI UFM interfaces.

Additionally, a new pseudo driver (ufm) is introduced which provides access to UFM information from userland via an ioctl interface that is described in the new ufm(7d) man page.

The second change (11258) extends the hc-scheme topology to allow upgradeable firmware modules to be represented as nodes in the topology and adds new module interfaces to libtopo so that enumerators can easily add ufm and slot nodes to their respective subtrees.

In order to both prove out and exercise the new topo interfaces, 11258 also includes changes to the disk, pcibus and smbios enumerator modules to expose firmware information for disks/ssds, motherboards and participating pci/pcie devices in the hc-scheme topo tree.

Below is the original illumos-joyent changeset, which was originally reviewed by Robert Mustacchi and Patrick Mooney:

commit 285d665c1bfb19b7a0d31074cbb554aae649ca56
Author: Rob Johnston rob.johnston@joyent.com
CommitDate: Wed Jun 19 23:38:21 2019 +0000

OS-7014 Add libtopo support for Upgradable Firmware Modules
OS-7026 Add DDI support for Upgradable Firmware Modules
Reviewed by: Robert Mustacchi robert.mustacchi@joyent.com
Reviewed by: Patrick Mooney patrick.mooney@joyent.com
Approved by: Jerry Jelinek jerry.jelinek@joyent.com

The changes targeting illumos-gate for the most part are identical to what was integrated into illumos-joyent. The main differences being the changes to the IPS package manifests (which were not necessary for SmartOS) and a few corrections of typos in man pages that I spotted during the port.

Sample output and testing data is in the original SmartOS tickets: