1 #pragma once
2 
3 #include "file_io_by_type.hpp"
4 
5 #include <unordered_map>
6 
7 namespace pldm
8 {
9 namespace responder
10 {
11 
12 /** @class PCIeInfoHandler
13  *
14  *  @brief Inherits and implements FileHandler. This class is used to handle the
15  *  pcie topology file and cable information from remote PLDM terminus to the
16  *  bmc
17  */
18 class PCIeInfoHandler : public FileHandler
19 {
20   public:
21     /** @brief PCIeInfoHandler constructor
22      */
23     PCIeInfoHandler(uint32_t fileHandle, uint16_t fileType);
24 
25     virtual int writeFromMemory(uint32_t offset, uint32_t length,
26                                 uint64_t address,
27                                 oem_platform::Handler* /*oemPlatformHandler*/);
28 
29     virtual int write(const char* buffer, uint32_t offset, uint32_t& length,
30                       oem_platform::Handler* /*oemPlatformHandler*/);
31 
32     virtual int fileAck(uint8_t fileStatus);
33 
34     virtual int readIntoMemory(uint32_t /*offset*/, uint32_t /*length*/,
35                                uint64_t /*address*/,
36                                oem_platform::Handler* /*oemPlatformHandler*/)
37     {
38         return PLDM_ERROR_UNSUPPORTED_PLDM_CMD;
39     }
40 
41     virtual int read(uint32_t /*offset*/, uint32_t& /*length*/,
42                      Response& /*response*/,
43                      oem_platform::Handler* /*oemPlatformHandler*/)
44     {
45         return PLDM_ERROR_UNSUPPORTED_PLDM_CMD;
46     }
47 
48     virtual int newFileAvailable(uint64_t /*length*/)
49     {
50         return PLDM_ERROR_UNSUPPORTED_PLDM_CMD;
51     }
52 
53     virtual int fileAckWithMetaData(uint8_t /*fileStatus*/,
54                                     uint32_t /*metaDataValue1*/,
55                                     uint32_t /*metaDataValue2*/,
56                                     uint32_t /*metaDataValue3*/,
57                                     uint32_t /*metaDataValue4*/)
58     {
59         return PLDM_ERROR_UNSUPPORTED_PLDM_CMD;
60     }
61 
62     virtual int newFileAvailableWithMetaData(uint64_t /*length*/,
63                                              uint32_t /*metaDataValue1*/,
64                                              uint32_t /*metaDataValue2*/,
65                                              uint32_t /*metaDataValue3*/,
66                                              uint32_t /*metaDataValue4*/)
67     {
68         return PLDM_ERROR_UNSUPPORTED_PLDM_CMD;
69     }
70 
71     /** @brief PCIeInfoHandler destructor
72      */
73     ~PCIeInfoHandler() {}
74 
75   private:
76     uint16_t infoType; //!< type of the information
77 
78     /** @brief A static unordered map storing information about received files.
79      *
80      *  This unordered map associates file type with a boolean value indicating
81      *  whether the file of that type has been received or not.
82      */
83     static std::unordered_map<uint16_t, bool> receivedFiles;
84 };
85 
86 } // namespace responder
87 } // namespace pldm
88