1 #pragma once 2 3 #include "impl.hpp" 4 #include "parser_interface.hpp" 5 #include "types.hpp" 6 7 namespace openpower 8 { 9 namespace vpd 10 { 11 namespace isdimm 12 { 13 namespace parser 14 { 15 using ParserInterface = openpower::vpd::parser::interface::ParserInterface; 16 using kwdVpdMap = inventory::KeywordVpdMap; 17 18 class isdimmVpdParser : public ParserInterface 19 { 20 public: 21 isdimmVpdParser() = delete; 22 isdimmVpdParser(const isdimmVpdParser&) = delete; 23 isdimmVpdParser& operator=(const isdimmVpdParser&) = delete; 24 isdimmVpdParser(isdimmVpdParser&&) = delete; 25 isdimmVpdParser& operator=(isdimmVpdParser&&) = delete; 26 ~isdimmVpdParser() = default; 27 28 /** 29 * @brief Constructor 30 * 31 * Move memVpdVector to parser object's memVpdVector 32 */ 33 isdimmVpdParser(const Binary& VpdVector) : memVpd(VpdVector) 34 { 35 } 36 37 /** 38 * @brief Parse the memory SPD binary data. 39 * Collects and emplace the keyword-value pairs in map. 40 * 41 * @return map of keyword:value 42 */ 43 std::variant<kwdVpdMap, Store> parse(); 44 45 /** 46 * @brief An api to return interface name with respect to 47 * published data on cache 48 * 49 * @return - Interface name for that vpd type. 50 */ 51 std::string getInterfaceName() const; 52 53 private: 54 /** 55 * @brief An api to read keywords. 56 * 57 * @return- map of kwd:value 58 */ 59 kwdVpdMap readKeywords(Binary::const_iterator& iterator); 60 61 /** 62 * @brief This function calculates DIMM size from SPD 63 * 64 * @param[in] iterator - iterator to buffer containing SPD 65 * @return calculated data or 0 in case of any error. 66 */ 67 auto getDDR4DimmCapacity(Binary::const_iterator& iterator); 68 69 /** 70 * @brief This function calculates part number from SPD 71 * 72 * @param[in] iterator - iterator to buffer containing SPD 73 * @return calculated part number. 74 */ 75 auto getDDR4PartNumber(Binary::const_iterator& iterator); 76 77 /** 78 * @brief This function calculates serial number from SPD 79 * 80 * @param[in] iterator - iterator to buffer containing SPD 81 * @return calculated serial number. 82 */ 83 auto getDDR4SerialNumber(Binary::const_iterator& iterator); 84 85 /** 86 * @brief This function allocates FRU number based on part number 87 * 88 * @param[in] partNumber - part number of the DIMM 89 * @return allocated FRU number. 90 */ 91 auto getDDR4FruNumber(const std::string& partNumber); 92 93 /** 94 * @brief This function allocates CCIN based on part number 95 * 96 * @param[in] partNumber - part number of the DIMM 97 * @return allocated CCIN. 98 */ 99 auto getDDR4CCIN(const std::string& partNumber); 100 101 /** 102 * @brief This function calculates DIMM size from SPD 103 * 104 * @param[in] iterator - iterator to buffer containing SPD 105 * @return calculated data or 0 in case of any error. 106 */ 107 auto getDDR5DimmCapacity(Binary::const_iterator& iterator); 108 109 /** 110 * @brief This function calculates part number from SPD 111 * 112 * @param[in] iterator - iterator to buffer containing SPD 113 * @return calculated part number. 114 */ 115 auto getDDR5PartNumber(Binary::const_iterator& iterator); 116 117 /** 118 * @brief This function calculates serial number from SPD 119 * 120 * @param[in] iterator - iterator to buffer containing SPD 121 * @return calculated serial number. 122 */ 123 auto getDDR5SerialNumber(Binary::const_iterator& iterator); 124 125 /** 126 * @brief This function allocates FRU number based on part number 127 * 128 * @param[in] partNumber - part number of the DIMM 129 * @return allocated FRU number. 130 */ 131 auto getDDR5FruNumber(const std::string& partNumber); 132 133 /** 134 * @brief This function allocates CCIN based on part number 135 * 136 * @param[in] partNumber - part number of the DIMM 137 * @return allocated CCIN. 138 */ 139 auto getDDR5CCIN(const std::string& partNumber); 140 141 // vdp file to be parsed 142 const Binary& memVpd; 143 }; 144 145 inline std::string isdimmVpdParser::getInterfaceName() const 146 { 147 return constants::memVpdInf; 148 } 149 150 } // namespace parser 151 } // namespace isdimm 152 } // namespace vpd 153 } // namespace openpower 154