1*6c7fed4cSGilbert Chen #pragma once
2*6c7fed4cSGilbert Chen 
3*6c7fed4cSGilbert Chen #include "libpldm/platform.h"
4*6c7fed4cSGilbert Chen #include "libpldm/pldm.h"
5*6c7fed4cSGilbert Chen 
6*6c7fed4cSGilbert Chen #include "terminus.hpp"
7*6c7fed4cSGilbert Chen #include "terminus_manager.hpp"
8*6c7fed4cSGilbert Chen 
9*6c7fed4cSGilbert Chen namespace pldm
10*6c7fed4cSGilbert Chen {
11*6c7fed4cSGilbert Chen 
12*6c7fed4cSGilbert Chen namespace platform_mc
13*6c7fed4cSGilbert Chen {
14*6c7fed4cSGilbert Chen 
15*6c7fed4cSGilbert Chen /**
16*6c7fed4cSGilbert Chen  * @brief PlatformManager
17*6c7fed4cSGilbert Chen  *
18*6c7fed4cSGilbert Chen  * PlatformManager class manages the actions outlined in the platform spec.
19*6c7fed4cSGilbert Chen  */
20*6c7fed4cSGilbert Chen class PlatformManager
21*6c7fed4cSGilbert Chen {
22*6c7fed4cSGilbert Chen   public:
23*6c7fed4cSGilbert Chen     PlatformManager() = delete;
24*6c7fed4cSGilbert Chen     PlatformManager(const PlatformManager&) = delete;
25*6c7fed4cSGilbert Chen     PlatformManager(PlatformManager&&) = delete;
26*6c7fed4cSGilbert Chen     PlatformManager& operator=(const PlatformManager&) = delete;
27*6c7fed4cSGilbert Chen     PlatformManager& operator=(PlatformManager&&) = delete;
28*6c7fed4cSGilbert Chen     ~PlatformManager() = default;
29*6c7fed4cSGilbert Chen 
PlatformManager(TerminusManager & terminusManager,TerminiMapper & termini)30*6c7fed4cSGilbert Chen     explicit PlatformManager(TerminusManager& terminusManager,
31*6c7fed4cSGilbert Chen                              TerminiMapper& termini) :
32*6c7fed4cSGilbert Chen         terminusManager(terminusManager),
33*6c7fed4cSGilbert Chen         termini(termini)
34*6c7fed4cSGilbert Chen     {}
35*6c7fed4cSGilbert Chen 
36*6c7fed4cSGilbert Chen     /** @brief Initialize terminus which supports PLDM Type 2
37*6c7fed4cSGilbert Chen      *
38*6c7fed4cSGilbert Chen      *  @return coroutine return_value - PLDM completion code
39*6c7fed4cSGilbert Chen      */
40*6c7fed4cSGilbert Chen     exec::task<int> initTerminus();
41*6c7fed4cSGilbert Chen 
42*6c7fed4cSGilbert Chen   private:
43*6c7fed4cSGilbert Chen     /** reference of TerminusManager for sending PLDM request to terminus*/
44*6c7fed4cSGilbert Chen     TerminusManager& terminusManager;
45*6c7fed4cSGilbert Chen 
46*6c7fed4cSGilbert Chen     /** @brief Managed termini list */
47*6c7fed4cSGilbert Chen     TerminiMapper& termini;
48*6c7fed4cSGilbert Chen };
49*6c7fed4cSGilbert Chen } // namespace platform_mc
50*6c7fed4cSGilbert Chen } // namespace pldm
51