1*b2cc7f9cSGeorge Liu# smbios-mdr 2*b2cc7f9cSGeorge Liu 3*b2cc7f9cSGeorge Liu## SMBIOS Parser 485aaf53bSJonathan Doman 585aaf53bSJonathan DomanThe main application in this repo is `smbiosmdrv2app`, capable of parsing a 685aaf53bSJonathan Domanbinary [SMBIOS][1] table and publishing the system information on D-Bus, to be 785aaf53bSJonathan Domanconsumed by other OpenBMC applications. 885aaf53bSJonathan Doman 985aaf53bSJonathan DomanThe SMBIOS table is usually sent to the BMC by the host firmware (BIOS). The 1085aaf53bSJonathan Domansystem designer can theoretically choose any transport and mechanism for sending 1185aaf53bSJonathan Domanthe SMBIOS data, but there are at least two implementation today: 1285aaf53bSJonathan Doman 13*b2cc7f9cSGeorge Liu### MDRv2 1485aaf53bSJonathan Doman 1585aaf53bSJonathan DomanThe primary API is a set of Intel OEM IPMI commands called Managed Data Region 1685aaf53bSJonathan Domanversion 2 (MDRv2), which provides a means for host firmware to send data through 1785aaf53bSJonathan Domanthe VGA shared memory region. MDRv2 has a concept of multiple agents, each 1885aaf53bSJonathan Domanmaintaining a "directory" containing directory entries (aka data sets). The host 1985aaf53bSJonathan Domancan query for the existence and version of directories to determine when it 2085aaf53bSJonathan Domanneeds to send an updated SMBIOS table. 2185aaf53bSJonathan Doman 2285aaf53bSJonathan Doman`intel-ipmi-oem` implements the [IPMI command handlers][2], routing commands and 2385aaf53bSJonathan Domandata to the correct agent (e.g. `smbios-mdr`). The [D-Bus interface][3] between 2485aaf53bSJonathan Domanthe IPMI handler and `smbios-mdr` is largely a mirror of IPMI commands. 2585aaf53bSJonathan Doman 26*b2cc7f9cSGeorge Liu### phosphor-ipmi-blobs 2785aaf53bSJonathan Doman 2885aaf53bSJonathan Doman[`phosphor-ipmi-blobs`][4] is an alternative implementation of a generic IPMI 2985aaf53bSJonathan Domanblob transfer API. Compared to MDRv2, it is simpler and easier to use, but also 3085aaf53bSJonathan Domantransfers the data in-band with the IPMI commands and therefore slower than 3185aaf53bSJonathan Domanusing a shared memory region (which may or may not be a concern). 3285aaf53bSJonathan Doman 3385aaf53bSJonathan Doman`phosphor-ipmi-blobs` provides a blob manager shared library for `ipmid` which 3485aaf53bSJonathan Domanimplements the IPMI commands. In turn, it loads blob handler libraries that each 3585aaf53bSJonathan Domanimplement support for specific blobs. Here in `smbios-mdr` we provide such a 3685aaf53bSJonathan Domanblob handler for the `/smbios` blob. It works by writing the data into 3785aaf53bSJonathan Doman`/var/lib/smbios/smbios2` (the local persistent cache for the SMBIOS table) and 3885aaf53bSJonathan Domancalling the `AgentSynchronizeData` D-Bus method to trigger `smbios-mdr` to 3985aaf53bSJonathan Domanreload and parse the table from that file. 4085aaf53bSJonathan Doman 41*b2cc7f9cSGeorge Liu## Intel CPU Info 4285aaf53bSJonathan Doman 4385aaf53bSJonathan Doman`cpuinfoapp` is an Intel-specific application that uses I2C and PECI to gather 4485aaf53bSJonathan Domanmore details about Xeon CPUs that aren't included in the SMBIOS table for some 4585aaf53bSJonathan Domanreason. It also implements discovery and control for Intel Speed Select 4685aaf53bSJonathan DomanTechnology (SST). 4785aaf53bSJonathan Doman 4885aaf53bSJonathan Doman[1]: https://www.dmtf.org/standards/smbios 4985aaf53bSJonathan Doman[2]: 5085aaf53bSJonathan Doman https://github.com/openbmc/intel-ipmi-oem/blob/84c203d2b74680e9dd60d1c48a2f6ca8f58462bf/src/smbiosmdrv2handler.cpp#L1272 5185aaf53bSJonathan Doman[3]: 5285aaf53bSJonathan Doman https://github.com/openbmc/phosphor-dbus-interfaces/blob/d1484a1499bc241316853934e6e8b735166deee2/yaml/xyz/openbmc_project/Smbios/MDR_V2.interface.yaml 5385aaf53bSJonathan Doman[4]: https://github.com/openbmc/phosphor-ipmi-blobs 54