blob: 9673e8991997d1ebf0976d3b241ca110b1116134 [file] [log] [blame]
Prithvi Pai5af42bb2025-02-11 17:59:07 +05301#pragma once
2#include "smbios_mdrv2.hpp"
3
4#include <sdbusplus/asio/connection.hpp>
Prithvi Pai5af42bb2025-02-11 17:59:07 +05305#include <xyz/openbmc_project/Inventory/Decorator/Asset/server.hpp>
Prithvi Pai6a84b4c2025-05-02 12:41:21 +05306#include <xyz/openbmc_project/Inventory/Item/TrustedComponent/server.hpp>
Prithvi Pai5af42bb2025-02-11 17:59:07 +05307#include <xyz/openbmc_project/Inventory/Item/server.hpp>
8#include <xyz/openbmc_project/Software/Version/server.hpp>
9
10namespace phosphor
11{
12
13namespace smbios
14{
15
Prithvi Pai6a84b4c2025-05-02 12:41:21 +053016using trustedComponent =
17 sdbusplus::server::xyz::openbmc_project::inventory::item::TrustedComponent;
Prithvi Pai5af42bb2025-02-11 17:59:07 +053018using asset =
19 sdbusplus::server::xyz::openbmc_project::inventory::decorator::Asset;
20using Item = sdbusplus::server::xyz::openbmc_project::inventory::Item;
21using softwareversion =
22 sdbusplus::server::xyz::openbmc_project::software::Version;
Prithvi Pai5af42bb2025-02-11 17:59:07 +053023
24constexpr uint8_t tpmMajorVerion1 = 0x01;
25constexpr uint8_t tpmMajorVerion2 = 0x02;
26
27class Tpm :
Prithvi Pai6a84b4c2025-05-02 12:41:21 +053028 sdbusplus::server::object_t<trustedComponent, asset, Item, softwareversion>
Prithvi Pai5af42bb2025-02-11 17:59:07 +053029{
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
38 Tpm(sdbusplus::bus_t& bus, const std::string& objPath, const uint8_t tpmID,
39 uint8_t* smbiosTableStorage, const std::string& motherboard) :
Prithvi Pai6a84b4c2025-05-02 12:41:21 +053040 sdbusplus::server::object_t<trustedComponent, asset, Item,
Prithvi Pai5af42bb2025-02-11 17:59:07 +053041 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