1# SMBIOS Parser 2 3The main application in this repo is `smbiosmdrv2app`, capable of parsing a 4binary [SMBIOS][1] table and publishing the system information on D-Bus, to be 5consumed by other OpenBMC applications. 6 7The SMBIOS table is usually sent to the BMC by the host firmware (BIOS). The 8system designer can theoretically choose any transport and mechanism for sending 9the SMBIOS data, but there are at least two implementation today: 10 11## MDRv2 12 13The primary API is a set of Intel OEM IPMI commands called Managed Data Region 14version 2 (MDRv2), which provides a means for host firmware to send data through 15the VGA shared memory region. MDRv2 has a concept of multiple agents, each 16maintaining a "directory" containing directory entries (aka data sets). The host 17can query for the existence and version of directories to determine when it 18needs to send an updated SMBIOS table. 19 20`intel-ipmi-oem` implements the [IPMI command handlers][2], routing commands and 21data to the correct agent (e.g. `smbios-mdr`). The [D-Bus interface][3] between 22the IPMI handler and `smbios-mdr` is largely a mirror of IPMI commands. 23 24## phosphor-ipmi-blobs 25 26[`phosphor-ipmi-blobs`][4] is an alternative implementation of a generic IPMI 27blob transfer API. Compared to MDRv2, it is simpler and easier to use, but also 28transfers the data in-band with the IPMI commands and therefore slower than 29using a shared memory region (which may or may not be a concern). 30 31`phosphor-ipmi-blobs` provides a blob manager shared library for `ipmid` which 32implements the IPMI commands. In turn, it loads blob handler libraries that each 33implement support for specific blobs. Here in `smbios-mdr` we provide such a 34blob handler for the `/smbios` blob. It works by writing the data into 35`/var/lib/smbios/smbios2` (the local persistent cache for the SMBIOS table) and 36calling the `AgentSynchronizeData` D-Bus method to trigger `smbios-mdr` to 37reload and parse the table from that file. 38 39# Intel CPU Info 40 41`cpuinfoapp` is an Intel-specific application that uses I2C and PECI to gather 42more details about Xeon CPUs that aren't included in the SMBIOS table for some 43reason. It also implements discovery and control for Intel Speed Select 44Technology (SST). 45 46[1]: https://www.dmtf.org/standards/smbios 47[2]: 48 https://github.com/openbmc/intel-ipmi-oem/blob/84c203d2b74680e9dd60d1c48a2f6ca8f58462bf/src/smbiosmdrv2handler.cpp#L1272 49[3]: 50 https://github.com/openbmc/phosphor-dbus-interfaces/blob/d1484a1499bc241316853934e6e8b735166deee2/yaml/xyz/openbmc_project/Smbios/MDR_V2.interface.yaml 51[4]: https://github.com/openbmc/phosphor-ipmi-blobs 52