1fa5e4d32SSunny Srivastava #pragma once 2fa5e4d32SSunny Srivastava 3fa5e4d32SSunny Srivastava #include "parser_interface.hpp" 4fa5e4d32SSunny Srivastava #include "types.hpp" 5fa5e4d32SSunny Srivastava 6fa5e4d32SSunny Srivastava #include <string_view> 7fa5e4d32SSunny Srivastava 8fa5e4d32SSunny Srivastava namespace vpd 9fa5e4d32SSunny Srivastava { 10fa5e4d32SSunny Srivastava /** 11fa5e4d32SSunny Srivastava * @brief Concrete class to implement JEDEC SPD parsing. 12fa5e4d32SSunny Srivastava * 13fa5e4d32SSunny Srivastava * The class inherits ParserInterface interface class and overrides the parser 14fa5e4d32SSunny Srivastava * functionality to implement parsing logic for JEDEC SPD format. 15fa5e4d32SSunny Srivastava */ 16fa5e4d32SSunny Srivastava class JedecSpdParser : public ParserInterface 17fa5e4d32SSunny Srivastava { 18fa5e4d32SSunny Srivastava public: 19fa5e4d32SSunny Srivastava // Deleted API's 20fa5e4d32SSunny Srivastava JedecSpdParser() = delete; 21fa5e4d32SSunny Srivastava JedecSpdParser(const JedecSpdParser&) = delete; 22fa5e4d32SSunny Srivastava JedecSpdParser& operator=(const JedecSpdParser&) = delete; 23fa5e4d32SSunny Srivastava JedecSpdParser(JedecSpdParser&&) = delete; 24fa5e4d32SSunny Srivastava JedecSpdParser& operator=(JedecSpdParser&&) = delete; 25fa5e4d32SSunny Srivastava ~JedecSpdParser() = default; 26fa5e4d32SSunny Srivastava 27fa5e4d32SSunny Srivastava /** 28fa5e4d32SSunny Srivastava * @brief Constructor 29fa5e4d32SSunny Srivastava * 30fa5e4d32SSunny Srivastava * @param[in] i_spdVector - JEDEC SPD data. 31fa5e4d32SSunny Srivastava */ JedecSpdParser(const types::BinaryVector & i_spdVector)32fa5e4d32SSunny Srivastava explicit JedecSpdParser(const types::BinaryVector& i_spdVector) : 33fa5e4d32SSunny Srivastava m_memSpd(i_spdVector) 34fa5e4d32SSunny Srivastava {} 35fa5e4d32SSunny Srivastava 36fa5e4d32SSunny Srivastava /** 37fa5e4d32SSunny Srivastava * @brief Parse the memory SPD binary data. 38fa5e4d32SSunny Srivastava * 39fa5e4d32SSunny Srivastava * Collects and emplace the keyword-value pairs in map. 40fa5e4d32SSunny Srivastava * 41fa5e4d32SSunny Srivastava * @return map of keyword:value 42fa5e4d32SSunny Srivastava */ 43fa5e4d32SSunny Srivastava types::VPDMapVariant parse(); 44fa5e4d32SSunny Srivastava 45fa5e4d32SSunny Srivastava private: 46fa5e4d32SSunny Srivastava /** 47fa5e4d32SSunny Srivastava * @brief An API to read keywords. 48fa5e4d32SSunny Srivastava * 49fa5e4d32SSunny Srivastava * @param[in] i_iterator - iterator to buffer containing SPD 50fa5e4d32SSunny Srivastava * @return- map of kwd:value 51fa5e4d32SSunny Srivastava */ 52*43fedabcSPatrick Williams types::JedecSpdMap readKeywords( 53*43fedabcSPatrick Williams types::BinaryVector::const_iterator& i_iterator); 54fa5e4d32SSunny Srivastava 55fa5e4d32SSunny Srivastava /** 56fa5e4d32SSunny Srivastava * @brief This function calculates DIMM size from DDR4 SPD 57fa5e4d32SSunny Srivastava * 58fa5e4d32SSunny Srivastava * @param[in] i_iterator - iterator to buffer containing SPD 59fa5e4d32SSunny Srivastava * @return calculated size or 0 in case of any error. 60fa5e4d32SSunny Srivastava */ 61fa5e4d32SSunny Srivastava auto getDDR4DimmCapacity(types::BinaryVector::const_iterator& i_iterator); 62fa5e4d32SSunny Srivastava 63fa5e4d32SSunny Srivastava /** 64fa5e4d32SSunny Srivastava * @brief This function calculates part number from DDR4 SPD 65fa5e4d32SSunny Srivastava * 66fa5e4d32SSunny Srivastava * @param[in] i_iterator - iterator to buffer containing SPD 67fa5e4d32SSunny Srivastava * @return calculated part number or a default value. 68fa5e4d32SSunny Srivastava */ 69*43fedabcSPatrick Williams std::string_view getDDR4PartNumber( 70*43fedabcSPatrick Williams types::BinaryVector::const_iterator& i_iterator); 71fa5e4d32SSunny Srivastava 72fa5e4d32SSunny Srivastava /** 73fa5e4d32SSunny Srivastava * @brief This function calculates serial number from DDR4 SPD 74fa5e4d32SSunny Srivastava * 75fa5e4d32SSunny Srivastava * @param[in] i_iterator - iterator to buffer containing SPD 76fa5e4d32SSunny Srivastava * @return calculated serial number or a default value. 77fa5e4d32SSunny Srivastava */ 78*43fedabcSPatrick Williams std::string getDDR4SerialNumber( 79*43fedabcSPatrick Williams types::BinaryVector::const_iterator& i_iterator); 80fa5e4d32SSunny Srivastava 81fa5e4d32SSunny Srivastava /** 82fa5e4d32SSunny Srivastava * @brief This function allocates FRU number based on part number 83fa5e4d32SSunny Srivastava * 84fa5e4d32SSunny Srivastava * Mappings for FRU number from calculated part number is used 85fa5e4d32SSunny Srivastava * for DDR4 ISDIMM. 86fa5e4d32SSunny Srivastava * 87fa5e4d32SSunny Srivastava * @param[in] i_partNumber - part number of the DIMM 88fa5e4d32SSunny Srivastava * @param[in] i_iterator - iterator to buffer containing SPD 89fa5e4d32SSunny Srivastava * @return allocated FRU number or a default value 90fa5e4d32SSunny Srivastava */ 91*43fedabcSPatrick Williams std::string_view getDDR4FruNumber( 92*43fedabcSPatrick Williams const std::string& i_partNumber, 93fa5e4d32SSunny Srivastava types::BinaryVector::const_iterator& i_iterator); 94fa5e4d32SSunny Srivastava 95fa5e4d32SSunny Srivastava /** 96fa5e4d32SSunny Srivastava * @brief This function allocates CCIN based on part number for DDR4 SPD 97fa5e4d32SSunny Srivastava * 98fa5e4d32SSunny Srivastava * @param[in] i_partNumber - part number of the DIMM 99fa5e4d32SSunny Srivastava * @return allocated CCIN or a default value. 100fa5e4d32SSunny Srivastava */ 101fa5e4d32SSunny Srivastava std::string_view getDDR4CCIN(const std::string& i_partNumber); 102fa5e4d32SSunny Srivastava 103fa5e4d32SSunny Srivastava /** 104e606f061SPriyanga Ramasamy * @brief This function returns manufacturer's ID for DDR4 DIMM. 105e606f061SPriyanga Ramasamy * 106e606f061SPriyanga Ramasamy * @return manufacturer ID. 107e606f061SPriyanga Ramasamy */ 108e606f061SPriyanga Ramasamy types::BinaryVector getDDR4ManufacturerId(); 109e606f061SPriyanga Ramasamy 110e606f061SPriyanga Ramasamy /** 111fa5e4d32SSunny Srivastava * @brief This function calculates DIMM size from DDR5 SPD 112fa5e4d32SSunny Srivastava * 113fa5e4d32SSunny Srivastava * @param[in] i_iterator - iterator to buffer containing SPD 114fa5e4d32SSunny Srivastava * @return calculated size or 0 in case of any error. 115fa5e4d32SSunny Srivastava */ 116fa5e4d32SSunny Srivastava auto getDDR5DimmCapacity(types::BinaryVector::const_iterator& i_iterator); 117fa5e4d32SSunny Srivastava 118fa5e4d32SSunny Srivastava /** 119fa5e4d32SSunny Srivastava * @brief This function calculates part number from DDR5 SPD 120fa5e4d32SSunny Srivastava * 121fa5e4d32SSunny Srivastava * @param[in] i_iterator - iterator to buffer containing SPD 122fa5e4d32SSunny Srivastava * @return calculated part number or a default value. 123fa5e4d32SSunny Srivastava */ 124fa5e4d32SSunny Srivastava auto getDDR5PartNumber(types::BinaryVector::const_iterator& i_iterator); 125fa5e4d32SSunny Srivastava 126fa5e4d32SSunny Srivastava /** 127fa5e4d32SSunny Srivastava * @brief This function calculates serial number from DDR5 SPD 128fa5e4d32SSunny Srivastava * 129fa5e4d32SSunny Srivastava * @param[in] i_iterator - iterator to buffer containing SPD 130fa5e4d32SSunny Srivastava * @return calculated serial number. 131fa5e4d32SSunny Srivastava */ 132fa5e4d32SSunny Srivastava auto getDDR5SerialNumber(types::BinaryVector::const_iterator& i_iterator); 133fa5e4d32SSunny Srivastava 134fa5e4d32SSunny Srivastava /** 135fa5e4d32SSunny Srivastava * @brief This function allocates FRU number based on part number 136fa5e4d32SSunny Srivastava * 137fa5e4d32SSunny Srivastava * Mappings for FRU number from calculated part number is used 138fa5e4d32SSunny Srivastava * for DDR5 ISDIMM. 139fa5e4d32SSunny Srivastava * 140fa5e4d32SSunny Srivastava * @param[in] i_partNumber - part number of the DIMM 141fa5e4d32SSunny Srivastava * @return allocated FRU number. 142fa5e4d32SSunny Srivastava */ 143fa5e4d32SSunny Srivastava auto getDDR5FruNumber(const std::string& i_partNumber); 144fa5e4d32SSunny Srivastava 145fa5e4d32SSunny Srivastava /** 146fa5e4d32SSunny Srivastava * @brief This function allocates CCIN based on part number for DDR5 SPD 147fa5e4d32SSunny Srivastava * 148fa5e4d32SSunny Srivastava * @param[in] i_partNumber - part number of the DIMM 149fa5e4d32SSunny Srivastava * @return allocated CCIN. 150fa5e4d32SSunny Srivastava */ 151fa5e4d32SSunny Srivastava auto getDDR5CCIN(const std::string& i_partNumber); 152fa5e4d32SSunny Srivastava 153fa5e4d32SSunny Srivastava // SPD file to be parsed 154fa5e4d32SSunny Srivastava const types::BinaryVector& m_memSpd; 155fa5e4d32SSunny Srivastava }; 156fa5e4d32SSunny Srivastava 157fa5e4d32SSunny Srivastava } // namespace vpd 158