smbios-mdr: Parse PCIE slot tables

System slot tables have SMBIOS table type 9. Parse system slot tables
and select all PCIE slots. PCIE slot inventory DBus objects will have
the xyz.openbmc_project.Inventory.Item.PCIeSlot interface defined in
phosphor-dbus-interfaces.

Tested:
Tests on a Intel platform. Some DBus command outputs as follows:

busctl introspect xyz.openbmc_project.Smbios.MDR_V2 \
/xyz/openbmc_project/inventory/system/chassis/motherboard/pcieslot3

NAME                                                 TYPE      SIGNATURE RESULT/VALUE                             FLAGS
org.freedesktop.DBus.Introspectable                  interface -         -                                        -herboard/p
.Introspect                                          method    -         s                                        -
org.freedesktop.DBus.Peer                            interface -         -                                        -
.GetMachineId                                        method    -         s                                        -
.Ping                                                method    -         -                                        -
org.freedesktop.DBus.Properties                      interface -         -                                        -
.Get                                                 method    ss        v                                        -
.GetAll                                              method    s         a{sv}                                    -
.Set                                                 method    ssv       -                                        -
.PropertiesChanged                                   signal    sa{sv}as  -                                        -
xyz.openbmc_project.Inventory.Decorator.LocationCode interface -         -                                        -
.LocationCode                                        property  s         "PE3"                                    emits-change writable
xyz.openbmc_project.Inventory.Item                   interface -         -                                        -
.Present                                             property  b         true                                     emits-change writable
.PrettyName                                          property  s         ""                                       emits-change writable
xyz.openbmc_project.Inventory.Item.PCIeSlot          interface -         -                                        -
.Generation                                          property  s         "xyz.openbmc_project.Inventory.Item.P... emits-change writable
.HotPluggable                                        property  b         false                                    emits-change writable
.Lanes                                               property  u         16                                       emits-change writable
.SlotType                                            property  s         "xyz.openbmc_project.Inventory.Item.P... emits-change writable

busctl get-property xyz.openbmc_project.Smbios.MDR_V2 \
/xyz/openbmc_project/inventory/system/chassis/motherboard/pcieslot3 \
xyz.openbmc_project.Inventory.Item.PCIeSlot Generation

s "xyz.openbmc_project.Inventory.Item.PCIeSlot.Generations.Gen5"

busctl get-property xyz.openbmc_project.Smbios.MDR_V2 \
/xyz/openbmc_project/inventory/system/chassis/motherboard/pcieslot3 \
xyz.openbmc_project.Inventory.Item.PCIeSlot SlotType

s "xyz.openbmc_project.Inventory.Item.PCIeSlot.SlotTypes.Unknown"

Note that it shows unknown PCIE slot types, as SMBIOS system slot record
does not have the information that a PCIE slot is full-length,
half-length or low-profile.

Signed-off-by: Jie Yang <jjy@google.com>
Change-Id: Ie9179ceb57dea3f659c15939611e873411de7320
6 files changed