1 #pragma once 2 #include "smbios_mdrv2.hpp" 3 4 #include <sdbusplus/asio/connection.hpp> 5 #include <xyz/openbmc_project/Inventory/Decorator/Asset/server.hpp> 6 #include <xyz/openbmc_project/Inventory/Item/TrustedComponent/server.hpp> 7 #include <xyz/openbmc_project/Inventory/Item/server.hpp> 8 #include <xyz/openbmc_project/Software/Version/server.hpp> 9 10 namespace phosphor 11 { 12 13 namespace smbios 14 { 15 16 using trustedComponent = 17 sdbusplus::server::xyz::openbmc_project::inventory::item::TrustedComponent; 18 using asset = 19 sdbusplus::server::xyz::openbmc_project::inventory::decorator::Asset; 20 using Item = sdbusplus::server::xyz::openbmc_project::inventory::Item; 21 using softwareversion = 22 sdbusplus::server::xyz::openbmc_project::software::Version; 23 24 constexpr uint8_t tpmMajorVerion1 = 0x01; 25 constexpr uint8_t tpmMajorVerion2 = 0x02; 26 27 class Tpm : 28 sdbusplus::server::object_t<trustedComponent, asset, Item, softwareversion> 29 { 30 public: 31 Tpm() = delete; 32 ~Tpm() = default; 33 Tpm(const Tpm&) = delete; 34 Tpm& operator=(const Tpm&) = delete; 35 Tpm(Tpm&&) = default; 36 Tpm& operator=(Tpm&&) = default; 37 Tpm(sdbusplus::bus_t & bus,const std::string & objPath,const uint8_t tpmID,uint8_t * smbiosTableStorage,const std::string & motherboard)38 Tpm(sdbusplus::bus_t& bus, const std::string& objPath, const uint8_t tpmID, 39 uint8_t* smbiosTableStorage, const std::string& motherboard) : 40 sdbusplus::server::object_t<trustedComponent, asset, Item, 41 softwareversion>(bus, objPath.c_str()), 42 tpmId(tpmID), storage(smbiosTableStorage), motherboardPath(motherboard) 43 { 44 tpmInfoUpdate(smbiosTableStorage, motherboard); 45 } 46 47 void tpmInfoUpdate(uint8_t* smbiosTableStorage, 48 const std::string& motherboard); 49 50 private: 51 uint8_t tpmId; 52 53 uint8_t* storage; 54 55 std::string motherboardPath; 56 struct TPMInfo 57 { 58 uint8_t type; 59 uint8_t length; 60 uint16_t handle; 61 char vendor[4]; 62 uint8_t specMajor; 63 uint8_t specMinor; 64 uint32_t firmwareVersion1; 65 uint32_t firmwareVersion2; 66 uint8_t description; 67 uint64_t characteristics; 68 uint32_t oem; 69 } __attribute__((packed)); 70 71 struct TPMVersionSpec1 72 { 73 uint8_t specMajor; 74 uint8_t specMinor; 75 uint8_t revMajor; 76 uint8_t revMinor; 77 } __attribute__((packed)); 78 79 struct TPMVersionSpec2 80 { 81 uint16_t revMinor; 82 uint16_t revMajor; 83 } __attribute__((packed)); 84 85 void tpmVendor(const struct TPMInfo* tpmInfo); 86 void tpmFirmwareVersion(const struct TPMInfo* tpmInfo); 87 void tpmDescription(const uint8_t positionNum, const uint8_t structLen, 88 uint8_t* dataIn); 89 }; 90 91 } // namespace smbios 92 93 } // namespace phosphor 94