blob: 09598934ea3d795197c3820b6167b4fa7975ede8 [file] [log] [blame]
Pavithra Barithayaa410c652021-07-22 01:32:47 -05001#pragma once
2
3#include "common/utils.hpp"
4#include "libpldmresponder/fru.hpp"
5#include "libpldmresponder/oem_handler.hpp"
Pavithra Barithaya5e542be2021-08-13 00:33:31 -05006#include "oem/ibm/libpldmresponder/utils.hpp"
Pavithra Barithayaa410c652021-07-22 01:32:47 -05007
8#include <libpldm/oem/ibm/fru.h>
9
10namespace pldm
11{
12namespace responder
13{
14using ObjectPath = std::string;
15using AssociatedEntityMap = std::map<ObjectPath, pldm_entity>;
16
17namespace oem_ibm_fru
18{
19
20// structure of the PCIE config space data
21struct PcieConfigSpaceData
22{
23 uint16_t vendorId;
24 uint16_t deviceId;
25 uint32_t first_reserved;
26 uint8_t revisionId;
27 std::array<uint8_t, 3> classCode;
28 uint32_t second_reserved[8];
29 uint16_t subSystemVendorId;
30 uint16_t subSystemId;
31 uint32_t last_reserved[4];
32
33} __attribute__((packed));
34
35class Handler : public oem_fru::Handler
36{
37 public:
38 Handler(pldm_pdr* repo) : pdrRepo(repo) {}
39
40 /** @brief Method to set the fru handler in the
41 * oem_ibm_handler class
42 *
43 * @param[in] handler - pointer to PLDM platform handler
44 */
45 void setIBMFruHandler(pldm::responder::fru::Handler* handler);
46
47 /** @brief Process OEM FRU table
48 *
49 * @param[in] fruData - the data of the fru records
50 *
51 * @return success or failure
52 */
53 int processOEMFRUTable(const std::vector<uint8_t>& fruData);
54
55 virtual const AssociatedEntityMap& getAssociateEntityMap()
56 {
57 return fruHandler->getAssociateEntityMap();
58 }
59
60 ~Handler() = default;
61
62 private:
63 /** @brief pointer to BMC's primary PDR repo */
64 const pldm_pdr* pdrRepo;
65
66 pldm::responder::fru::Handler* fruHandler; //!< pointer to PLDM fru handler
67
68 /** @brief update the DBus property
69 *
70 * @param[in] fruRSI - fru record set identifier
71 * @param[in] fruAssociationMap - the dbus path to pldm entity stored while
72 * creating the pldm fru records
73 * @param[in] vendorId - the vendor ID
74 * @param[in] deviceId - the device ID
75 * @param[in] revisionId - the revision ID
76 * @param[in] classCode - the class Code
77 * @param[in] subSystemVendorId - the subSystemVendor ID
78 * @param[in] subSystemId - the subSystem ID
79 */
80 void updateDBusProperty(
81 uint16_t fruRSI, const AssociatedEntityMap& fruAssociationMap,
82 const std::string& vendorId, const std::string& deviceId,
83 const std::string& revisionId, const std::string& classCode,
84 const std::string& subSystemVendorId, const std::string& subSystemId);
85
86 /** @brief DBus Map update
87 *
88 * @param[in] adapterObjectPath - the fru object path
89 * @param[in] propertyName - the fru property name
90 * @param[in] propValue - the fru property value
91 */
92 void dbus_map_update(const std::string& adapterObjectPath,
93 const std::string& propertyName,
94 const std::string& propValue);
Pavithra Barithayac8bcefb2021-11-23 07:03:00 -060095
96 /** @brief setting firmware UAK (Update Access Key)
97 *
98 * @param[in] data - value to be set
99 */
100 void setFirmwareUAK(const std::vector<uint8_t>& data);
Pavithra Barithayaa410c652021-07-22 01:32:47 -0500101};
102
103} // namespace oem_ibm_fru
104} // namespace responder
105} // namespace pldm