Adding ISDIMM support
Added ISDIMM support for Bonnell machine
Change-Id: Ifdb2fc9e2d38267c8eb6cd5848d30102ab48efd1
Signed-off-by: jinuthomas <jinu.joy.thomas@in.ibm.com>
diff --git a/vpd-parser/isdimm_vpd_parser.hpp b/vpd-parser/isdimm_vpd_parser.hpp
new file mode 100644
index 0000000..cbcb1d5
--- /dev/null
+++ b/vpd-parser/isdimm_vpd_parser.hpp
@@ -0,0 +1,153 @@
+#pragma once
+
+#include "impl.hpp"
+#include "parser_interface.hpp"
+#include "types.hpp"
+
+namespace openpower
+{
+namespace vpd
+{
+namespace memory
+{
+namespace parser
+{
+using ParserInterface = openpower::vpd::parser::interface::ParserInterface;
+using kwdVpdMap = inventory::KeywordVpdMap;
+
+class isdimmVpdParser : public ParserInterface
+{
+ public:
+ isdimmVpdParser() = delete;
+ isdimmVpdParser(const isdimmVpdParser&) = delete;
+ isdimmVpdParser& operator=(const isdimmVpdParser&) = delete;
+ isdimmVpdParser(isdimmVpdParser&&) = delete;
+ isdimmVpdParser& operator=(isdimmVpdParser&&) = delete;
+ ~isdimmVpdParser() = default;
+
+ /**
+ * @brief Constructor
+ *
+ * Move memVpdVector to parser object's memVpdVector
+ */
+ isdimmVpdParser(const Binary& VpdVector) : memVpd(VpdVector)
+ {
+ }
+
+ /**
+ * @brief Parse the memory SPD binary data.
+ * Collects and emplace the keyword-value pairs in map.
+ *
+ * @return map of keyword:value
+ */
+ std::variant<kwdVpdMap, Store> parse();
+
+ /**
+ * @brief An api to return interface name with respect to
+ * published data on cache
+ *
+ * @return - Interface name for that vpd type.
+ */
+ std::string getInterfaceName() const;
+
+ private:
+ /**
+ * @brief An api to read keywords.
+ *
+ * @return- map of kwd:value
+ */
+ kwdVpdMap readKeywords(Binary::const_iterator& iterator);
+
+ /**
+ * @brief This function calculates DIMM size from SPD
+ *
+ * @param[in] iterator - iterator to buffer containing SPD
+ * @return calculated data or 0 in case of any error.
+ */
+ auto getDDR4DimmCapacity(Binary::const_iterator& iterator);
+
+ /**
+ * @brief This function calculates part number from SPD
+ *
+ * @param[in] iterator - iterator to buffer containing SPD
+ * @return calculated part number.
+ */
+ auto getDDR4PartNumber(Binary::const_iterator& iterator);
+
+ /**
+ * @brief This function calculates serial number from SPD
+ *
+ * @param[in] iterator - iterator to buffer containing SPD
+ * @return calculated serial number.
+ */
+ auto getDDR4SerialNumber(Binary::const_iterator& iterator);
+
+ /**
+ * @brief This function allocates FRU number based on part number
+ *
+ * @param[in] partNumber - part number of the DIMM
+ * @return allocated FRU number.
+ */
+ auto getDDR4FruNumber(const std::string& partNumber);
+
+ /**
+ * @brief This function allocates CCIN based on part number
+ *
+ * @param[in] partNumber - part number of the DIMM
+ * @return allocated CCIN.
+ */
+ auto getDDR4CCIN(const std::string& partNumber);
+
+ /**
+ * @brief This function calculates DIMM size from SPD
+ *
+ * @param[in] iterator - iterator to buffer containing SPD
+ * @return calculated data or 0 in case of any error.
+ */
+ auto getDDR5DimmCapacity(Binary::const_iterator& iterator);
+
+ /**
+ * @brief This function calculates part number from SPD
+ *
+ * @param[in] iterator - iterator to buffer containing SPD
+ * @return calculated part number.
+ */
+ auto getDDR5PartNumber(Binary::const_iterator& iterator);
+
+ /**
+ * @brief This function calculates serial number from SPD
+ *
+ * @param[in] iterator - iterator to buffer containing SPD
+ * @return calculated serial number.
+ */
+ auto getDDR5SerialNumber(Binary::const_iterator& iterator);
+
+ /**
+ * @brief This function allocates FRU number based on part number
+ *
+ * @param[in] partNumber - part number of the DIMM
+ * @return allocated FRU number.
+ */
+ auto getDDR5FruNumber(const std::string& partNumber);
+
+ /**
+ * @brief This function allocates CCIN based on part number
+ *
+ * @param[in] partNumber - part number of the DIMM
+ * @return allocated CCIN.
+ */
+ auto getDDR5CCIN(const std::string& partNumber);
+
+ // vdp file to be parsed
+ const Binary& memVpd;
+};
+
+inline std::string isdimmVpdParser::getInterfaceName() const
+{
+ return constants::memVpdInf;
+}
+
+} // namespace parser
+} // namespace memory
+} // namespace vpd
+} // namespace openpower