xref: /openbmc/smbios-mdr/README.md (revision b2cc7f9c7ad5a5c43441614d08102727177f2a60)
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