Populate Memory attributes

Add support to populate MemoryMedia, Slot and Socket attribute values
to dbus attributes.

Tested:
Memory attributes MemoryMedia,Slot and Socket are populated in dbus
through busctl command
Command:
busctl introspect xyz.openbmc_project.Smbios.MDR_V2
   /xyz/openbmc_project/inventory/system/chassis/motherboard/dimm0
Response:
NAME                                                   TYPE      SIGNATURE RESULT/VALUE                             FLAGS
....

xyz.openbmc_project.Inventory.Decorator.LocationCode   interface -         -                                        -
.LocationCode                                          property  s         "BANK 0 CPU0_DIMM_A"                     emits-change writable
xyz.openbmc_project.Inventory.Item                     interface -         -                                        -
.Present                                               property  b         true                                     emits-change writable
.PrettyName                                            property  s         ""                                       emits-change writable
xyz.openbmc_project.Inventory.Item.Dimm                interface -         -                                        -

.MemoryAttributes                                      property  u         8388610                                  emits-change writable
.MemoryConfiguredSpeedInMhz                            property  q         19460                                    emits-change writable
.MemoryDataWidth                                       property  q         64                                       emits-change writable
.MemoryDeviceLocator                                   property  s         "BANK 0 CPU0_DIMM_A"                     emits-change writable
.MemoryMedia                                           property  s         "xyz.openbmc_project.Inventory.Item.D... emits-change writable
.MemorySizeInKB                                        property  u         1468006400                               emits-change writable
.MemoryTotalWidth                                      property  q         0                                        emits-change writable
.MemoryType                                            property  s         "xyz.openbmc_project.Inventory.Item.D... emits-change writable
.MemoryTypeDetail                                      property  s         "SynchronousRegistered"                  emits-change writable
.RevisionCode                                          property  q         0                                        emits-change writable
xyz.openbmc_project.Inventory.Item.Dimm.MemoryLocation interface -         -                                        -
.Channel                                               property  y         0                                        emits-change writable
.MemoryController                                      property  y         0                                        emits-change writable
.Slot                                                  property  y         65                                       emits-change writable
.Socket                                                property  y         1                                        emits-change writable
.....

Signed-off-by: poram srinivasa rao <poramx.srinivasa.rao@intel.com>
Signed-off-by: Jayaprakash Mutyala <mutyalax.jayaprakash@intel.com>
Change-Id: Iabc2a58642167344711550b669ed4f207fb39d45
diff --git a/include/dimm.hpp b/include/dimm.hpp
index 72885ff..26ba3d8 100644
--- a/include/dimm.hpp
+++ b/include/dimm.hpp
@@ -21,6 +21,7 @@
 #include <xyz/openbmc_project/Inventory/Connector/Slot/server.hpp>
 #include <xyz/openbmc_project/Inventory/Decorator/Asset/server.hpp>
 #include <xyz/openbmc_project/Inventory/Decorator/LocationCode/server.hpp>
+#include <xyz/openbmc_project/Inventory/Item/Dimm/MemoryLocation/server.hpp>
 #include <xyz/openbmc_project/Inventory/Item/Dimm/server.hpp>
 #include <xyz/openbmc_project/Inventory/Item/server.hpp>
 #include <xyz/openbmc_project/State/Decorator/OperationalStatus/server.hpp>
@@ -37,9 +38,14 @@
 using EccType =
     sdbusplus::server::xyz::openbmc_project::inventory::item::Dimm::Ecc;
 
+using MemoryTechType =
+    sdbusplus::server::xyz::openbmc_project::inventory::item::Dimm::MemoryTech;
+
 class Dimm :
     sdbusplus::server::object_t<
         sdbusplus::server::xyz::openbmc_project::inventory::item::Dimm>,
+    sdbusplus::server::object_t<sdbusplus::server::xyz::openbmc_project::
+                                    inventory::item::dimm::MemoryLocation>,
     sdbusplus::server::object_t<
         sdbusplus::server::xyz::openbmc_project::inventory::decorator::Asset>,
     sdbusplus::server::object_t<sdbusplus::server::xyz::openbmc_project::
@@ -69,6 +75,9 @@
             sdbusplus::server::xyz::openbmc_project::inventory::item::Dimm>(
             bus, objPath.c_str()),
         sdbusplus::server::object_t<sdbusplus::server::xyz::openbmc_project::
+                                        inventory::item::dimm::MemoryLocation>(
+            bus, objPath.c_str()),
+        sdbusplus::server::object_t<sdbusplus::server::xyz::openbmc_project::
                                         inventory::decorator::Asset>(
             bus, objPath.c_str()),
         sdbusplus::server::object_t<sdbusplus::server::xyz::openbmc_project::
@@ -106,6 +115,9 @@
     std::string partNumber(std::string value) override;
     std::string locationCode(std::string value) override;
     size_t memoryAttributes(size_t value) override;
+    MemoryTechType memoryMedia(MemoryTechType value) override;
+    uint8_t slot(uint8_t value) override;
+    uint8_t socket(uint8_t value) override;
     uint16_t memoryConfiguredSpeedInMhz(uint16_t value) override;
     bool functional(bool value) override;
     EccType ecc(EccType value) override;
@@ -126,6 +138,7 @@
     void dimmTypeDetail(const uint16_t detail);
     void dimmManufacturer(const uint8_t positionNum, const uint8_t structLen,
                           uint8_t* dataIn);
+    void dimmMedia(const uint8_t type);
     void dimmSerialNum(const uint8_t positionNum, const uint8_t structLen,
                        uint8_t* dataIn);
     void dimmPartNum(const uint8_t positionNum, const uint8_t structLen,
@@ -230,6 +243,12 @@
     {0x5, EccType::SingleBitECC}, {0x6, EccType::MultiBitECC},
     {0x7, EccType::NoECC}};
 
+const std::map<uint8_t, MemoryTechType> dimmMemoryTechTypeMap = {
+    {0x1, MemoryTechType::Other},      {0x2, MemoryTechType::Unknown},
+    {0x3, MemoryTechType::DRAM},       {0x4, MemoryTechType::NVDIMM_N},
+    {0x5, MemoryTechType::NVDIMM_F},   {0x6, MemoryTechType::NVDIMM_P},
+    {0x7, MemoryTechType::IntelOptane}};
+
 } // namespace smbios
 
 } // namespace phosphor