blob: 8187ca191253a75560a6d1ad3f314c000513a5db [file] [log] [blame]
Gilbert Chen6c7fed42022-02-22 15:40:17 +00001#pragma once
2
3#include "libpldm/platform.h"
4#include "libpldm/pldm.h"
5
6#include "terminus.hpp"
7#include "terminus_manager.hpp"
8
Gilbert Chende2a1322022-05-24 15:35:21 +01009#include <vector>
10
Gilbert Chen6c7fed42022-02-22 15:40:17 +000011namespace pldm
12{
13
14namespace platform_mc
15{
16
17/**
18 * @brief PlatformManager
19 *
20 * PlatformManager class manages the actions outlined in the platform spec.
21 */
22class PlatformManager
23{
24 public:
25 PlatformManager() = delete;
26 PlatformManager(const PlatformManager&) = delete;
27 PlatformManager(PlatformManager&&) = delete;
28 PlatformManager& operator=(const PlatformManager&) = delete;
29 PlatformManager& operator=(PlatformManager&&) = delete;
30 ~PlatformManager() = default;
31
32 explicit PlatformManager(TerminusManager& terminusManager,
33 TerminiMapper& termini) :
34 terminusManager(terminusManager),
35 termini(termini)
36 {}
37
38 /** @brief Initialize terminus which supports PLDM Type 2
39 *
40 * @return coroutine return_value - PLDM completion code
41 */
42 exec::task<int> initTerminus();
43
44 private:
Gilbert Chende2a1322022-05-24 15:35:21 +010045 /** @brief Fetch all PDRs from terminus.
46 *
47 * @param[in] terminus - The terminus object to store fetched PDRs
48 * @return coroutine return_value - PLDM completion code
49 */
50 exec::task<int> getPDRs(std::shared_ptr<Terminus> terminus);
51
52 /** @brief Fetch PDR from terminus
53 *
54 * @param[in] tid - Destination TID
55 * @param[in] recordHndl - Record handle
56 * @param[in] dataTransferHndl - Data transfer handle
57 * @param[in] transferOpFlag - Transfer Operation Flag
58 * @param[in] requstCnt - Request Count of data
59 * @param[in] recordChgNum - Record change number
60 * @param[out] nextRecordHndl - Next record handle
61 * @param[out] nextDataTransferHndl - Next data transfer handle
62 * @param[out] transferFlag - Transfer flag
63 * @param[out] responseCnt - Response count of record data
64 * @param[out] recordData - Returned record data
65 * @param[out] transferCrc - CRC value when record data is last part of PDR
66 * @return coroutine return_value - PLDM completion code
67 */
68 exec::task<int>
69 getPDR(const pldm_tid_t tid, const uint32_t recordHndl,
70 const uint32_t dataTransferHndl, const uint8_t transferOpFlag,
71 const uint16_t requestCnt, const uint16_t recordChgNum,
72 uint32_t& nextRecordHndl, uint32_t& nextDataTransferHndl,
73 uint8_t& transferFlag, uint16_t& responseCnt,
74 std::vector<uint8_t>& recordData, uint8_t& transferCrc);
75
76 /** @brief get PDR repository information.
77 *
78 * @param[in] tid - Destination TID
79 * @param[out] repositoryState - the state of repository
80 * @param[out] recordCount - number of records
81 * @param[out] repositorySize - repository size
82 * @param[out] largestRecordSize - largest record size
83 * *
84 * @return coroutine return_value - PLDM completion code
85 */
86 exec::task<int> getPDRRepositoryInfo(const pldm_tid_t tid,
87 uint8_t& repositoryState,
88 uint32_t& recordCount,
89 uint32_t& repositorySize,
90 uint32_t& largestRecordSize);
91
Gilbert Chen6c7fed42022-02-22 15:40:17 +000092 /** reference of TerminusManager for sending PLDM request to terminus*/
93 TerminusManager& terminusManager;
94
95 /** @brief Managed termini list */
96 TerminiMapper& termini;
97};
98} // namespace platform_mc
99} // namespace pldm