Name Date Size #Lines LOC

..Today-

include/H14-Nov-2024-1,7841,330

service_files/H21-Aug-2023-4940

src/H04-Sep-2024-4,9113,749

subprojects/H11-May-2024-6647

tools/H21-Aug-2023-425334

.clang-formatH A D04-Sep-20243.7 KiB137135

.gitignoreH A D11-May-2024310 1512

LICENSEH A D21-Aug-202311.1 KiB202169

OWNERSH A D21-Aug-20231.8 KiB5751

README.mdH A D16-Aug-20242.6 KiB5441

meson.buildH A D21-Aug-2023545 2822

meson.optionsH A D29-Mar-2024852 4942

README.md

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