From 2d080551eb07d137ca5cd0d2674564274ccb4a5b Mon Sep 17 00:00:00 2001 From: Nikita Kosenkov Date: Fri, 26 Aug 2022 18:58:55 +0300 Subject: Add location and present setters --- include/dimm.hpp | 47 +++++++++++++++++++++++++++++++++++++---------- src/dimm.cpp | 33 ++++++++++++++++++++++++++++----- 2 files changed, 65 insertions(+), 15 deletions(-) diff --git a/include/dimm.hpp b/include/dimm.hpp index caac229..00fa9bb 100644 --- a/include/dimm.hpp +++ b/include/dimm.hpp @@ -15,9 +15,14 @@ */ #pragma once +#include "smbios.hpp" + #include #include -#include "smbios.hpp" +#include +#include +#include +#include namespace phosphor { @@ -28,11 +33,19 @@ namespace smbios using DeviceType = sdbusplus::xyz::openbmc_project::Inventory::Item::server::Dimm::DeviceType; -class Dimm - : sdbusplus::server::object::object< - sdbusplus::xyz::openbmc_project::Inventory::Item::server::Dimm>, - sdbusplus::server::object::object< - sdbusplus::xyz::openbmc_project::Inventory::Decorator::server::Asset> +class Dimm : + sdbusplus::server::object_t< + sdbusplus::xyz::openbmc_project::Inventory::Item::server::Dimm>, + sdbusplus::server::object_t< + sdbusplus::xyz::openbmc_project::Inventory::Decorator::server::Asset>, + sdbusplus::server::object_t, + sdbusplus::server::object_t< + sdbusplus::xyz::openbmc_project::Inventory::server::Item>, + sdbusplus::server::object_t, + sdbusplus::server::object_t< + sdbusplus::xyz::openbmc_project::Inventory::Connector::server::Slot> { public: @@ -46,12 +59,24 @@ class Dimm Dimm(sdbusplus::bus::bus &bus, const std::string &objPath, const uint8_t &dimmId, struct ManagedDataRegion *region) : - sdbusplus::server::object::object< + sdbusplus::server::object_t< sdbusplus::xyz::openbmc_project::Inventory::Item::server::Dimm>( bus, objPath.c_str()), - sdbusplus::server::object::object< - sdbusplus::xyz::openbmc_project::Inventory::Decorator::server:: - Asset>(bus, objPath.c_str()), + sdbusplus::server::object_t( + bus, objPath.c_str()), + sdbusplus::server::object_t( + bus, objPath.c_str()), + sdbusplus::server::object_t< + sdbusplus::xyz::openbmc_project::Inventory::server::Item>( + bus, objPath.c_str()), + sdbusplus::server::object_t( + bus, objPath.c_str()), + sdbusplus::server::object_t( + bus, objPath.c_str()), dimmNum(dimmId), regionS(region) { memoryInfoUpdate(); @@ -66,8 +91,10 @@ class Dimm std::string memoryTypeDetail(std::string value) override; uint16_t maxMemorySpeedInMhz(uint16_t value) override; std::string manufacturer(std::string value) override; + bool present(bool value) override; std::string serialNumber(std::string value) override; std::string partNumber(std::string value) override; + std::string locationCode(std::string value) override; uint8_t memoryAttributes(uint8_t value) override; uint16_t memoryConfiguredSpeedInMhz(uint16_t value) override; diff --git a/src/dimm.cpp b/src/dimm.cpp index 346c701..b25b0f8 100644 --- a/src/dimm.cpp +++ b/src/dimm.cpp @@ -109,11 +109,11 @@ uint32_t Dimm::memorySizeInKB(uint32_t value) void Dimm::dimmDeviceLocator(uint8_t positionNum, uint8_t structLen, uint8_t *dataIn) { - std::string result; - - result = positionToString(positionNum, structLen, dataIn); + std::string result = positionToString(positionNum, structLen, dataIn); memoryDeviceLocator(result); + + locationCode(result); } std::string Dimm::memoryDeviceLocator(std::string value) @@ -170,11 +170,22 @@ uint16_t Dimm::maxMemorySpeedInMhz(uint16_t value) void Dimm::dimmManufacturer(uint8_t positionNum, uint8_t structLen, uint8_t *dataIn) { - std::string result; + std::string result = positionToString(positionNum, structLen, dataIn); - result = positionToString(positionNum, structLen, dataIn); + bool val = true; + if (result == "NO DIMM") + { + val = false; + + // No dimm presence so making manufacturer value as "" (instead of + // NO DIMM - as there won't be any manufacturer for DIMM which is not + // present). + result = ""; + } manufacturer(result); + present(val); + functional(val); } std::string Dimm::manufacturer(std::string value) @@ -183,6 +194,12 @@ std::string Dimm::manufacturer(std::string value) Asset::manufacturer(value); } +bool Dimm::present(bool value) +{ + return sdbusplus::xyz::openbmc_project::Inventory::server::Item::present( + value); +} + void Dimm::dimmSerialNum(uint8_t positionNum, uint8_t structLen, uint8_t *dataIn) { @@ -214,6 +231,12 @@ std::string Dimm::partNumber(std::string value) Asset::partNumber(value); } +std::string Dimm::locationCode(std::string value) +{ + return sdbusplus::xyz::openbmc_project::Inventory::Decorator::server:: + LocationCode::locationCode(value); +} + uint8_t Dimm::memoryAttributes(uint8_t value) { return sdbusplus::xyz::openbmc_project::Inventory::Item::server::Dimm:: -- cgit v1.2.3