Add dbus service to support MDR V2 ipmi command

Add send and get DataInfo function for MDR V2 ipmi
command store and get data through dbus interface.

Signed-off-by: Cheng C Yang <cheng.c.yang@linux.intel.com>
Change-Id: Ic069e4670e69de1fb92b4123da6be6588ac45244
diff --git a/include/mdrv2.hpp b/include/mdrv2.hpp
index 5313bec..4a46c12 100644
--- a/include/mdrv2.hpp
+++ b/include/mdrv2.hpp
@@ -24,12 +24,14 @@
 #include <phosphor-logging/log.hpp>
 #include <sdbusplus/server.hpp>
 #include <sdbusplus/timer.hpp>
+#include <smbios.hpp>
+#include <xyz/openbmc_project/Smbios/MDR_V2/server.hpp>
 
 static constexpr uint8_t mdr2Version = 2;
 static constexpr uint32_t mdr2SMSize = 0x00100000;
-static constexpr uint16_t mdrSMBIOSSize = 32 * 1024;
 static constexpr uint32_t mdr2SMBaseAddress = 0x9FF00000;
 static constexpr const char* mdrType2File = "/var/lib/smbios/smbios2";
+static constexpr const char* mdrV2Path = "/xyz/openbmc_project/Smbios/MDR_V2";
 
 enum class MDR2SMBIOSStatusEnum
 {
@@ -95,7 +97,8 @@
 namespace smbios
 {
 
-class MDR_V2
+class MDR_V2 : sdbusplus::server::object::object<
+                   sdbusplus::xyz::openbmc_project::Smbios::server::MDR_V2>
 {
   public:
     MDR_V2() = delete;
@@ -106,6 +109,8 @@
     ~MDR_V2() = default;
 
     MDR_V2(sdbusplus::bus::bus& bus, const char* path, sd_event* event) :
+        sdbusplus::server::object::object<
+            sdbusplus::xyz::openbmc_project::Smbios::server::MDR_V2>(bus, path),
         bus(bus), timer(event, [&](void) { agentSynchronizeData(); })
     {
 
@@ -124,6 +129,29 @@
         agentSynchronizeData();
     }
 
+    std::vector<uint8_t> getDirectoryInformation(uint8_t dirIndex) override;
+
+    std::vector<uint8_t> getDataInformation(uint8_t idIndex) override;
+
+    bool sendDirectoryInformation(uint8_t dirVersion, uint8_t dirIndex,
+                                  uint8_t returnedEntries,
+                                  uint8_t remainingEntries,
+                                  std::vector<uint8_t> dirEntry) override;
+
+    std::vector<uint8_t> getDataOffer() override;
+
+    bool sendDataInformation(uint8_t idIndex, uint8_t flag, uint32_t dataLen,
+                             uint32_t dataVer, uint32_t timeStamp) override;
+
+    int findIdIndex(std::vector<uint8_t> dataInfo) override;
+
+    bool agentSynchronizeData() override;
+
+    std::vector<uint32_t>
+        synchronizeDirectoryCommonData(uint8_t idIndex, uint32_t size) override;
+
+    uint8_t directoryEntries(uint8_t value) override;
+
   private:
     Timer timer;
 
diff --git a/include/smbios.hpp b/include/smbios.hpp
index b39229d..71140de 100644
--- a/include/smbios.hpp
+++ b/include/smbios.hpp
@@ -31,6 +31,7 @@
 static constexpr uint32_t smbiosTableTimestamp = 0x45464748;
 static constexpr uint32_t smbiosTableStorageSize = 64 * 1024;
 static constexpr const char* smbiosPath = "/var/lib/smbios";
+static constexpr uint16_t mdrSMBIOSSize = 32 * 1024;
 
 enum class DirDataRequestEnum
 {