blob: 4a6d21bc846a5193d22a7c3be921518e29569a73 [file] [log] [blame]
#pragma once
#include "parser_interface.hpp"
#include "types.hpp"
#include <string_view>
namespace vpd
{
/**
* @brief Concrete class to implement JEDEC SPD parsing.
*
* The class inherits ParserInterface interface class and overrides the parser
* functionality to implement parsing logic for JEDEC SPD format.
*/
class JedecSpdParser : public ParserInterface
{
public:
// Deleted API's
JedecSpdParser() = delete;
JedecSpdParser(const JedecSpdParser&) = delete;
JedecSpdParser& operator=(const JedecSpdParser&) = delete;
JedecSpdParser(JedecSpdParser&&) = delete;
JedecSpdParser& operator=(JedecSpdParser&&) = delete;
~JedecSpdParser() = default;
/**
* @brief Constructor
*
* @param[in] i_spdVector - JEDEC SPD data.
*/
explicit JedecSpdParser(const types::BinaryVector& i_spdVector) :
m_memSpd(i_spdVector)
{}
/**
* @brief Parse the memory SPD binary data.
*
* Collects and emplace the keyword-value pairs in map.
*
* @return map of keyword:value
*/
types::VPDMapVariant parse();
private:
/**
* @brief An API to read keywords.
*
* @param[in] i_iterator - iterator to buffer containing SPD
* @return- map of kwd:value
*/
types::JedecSpdMap readKeywords(
types::BinaryVector::const_iterator& i_iterator);
/**
* @brief This function calculates DIMM size from DDR4 SPD
*
* @param[in] i_iterator - iterator to buffer containing SPD
* @return calculated size or 0 in case of any error.
*/
auto getDDR4DimmCapacity(types::BinaryVector::const_iterator& i_iterator);
/**
* @brief This function calculates part number from DDR4 SPD
*
* @param[in] i_iterator - iterator to buffer containing SPD
* @return calculated part number or a default value.
*/
std::string_view getDDR4PartNumber(
types::BinaryVector::const_iterator& i_iterator);
/**
* @brief This function calculates serial number from DDR4 SPD
*
* @param[in] i_iterator - iterator to buffer containing SPD
* @return calculated serial number or a default value.
*/
std::string getDDR4SerialNumber(
types::BinaryVector::const_iterator& i_iterator);
/**
* @brief This function allocates FRU number based on part number
*
* Mappings for FRU number from calculated part number is used
* for DDR4 ISDIMM.
*
* @param[in] i_partNumber - part number of the DIMM
* @param[in] i_iterator - iterator to buffer containing SPD
* @return allocated FRU number or a default value
*/
std::string_view getDDR4FruNumber(
const std::string& i_partNumber,
types::BinaryVector::const_iterator& i_iterator);
/**
* @brief This function allocates CCIN based on part number for DDR4 SPD
*
* @param[in] i_partNumber - part number of the DIMM
* @return allocated CCIN or a default value.
*/
std::string_view getDDR4CCIN(const std::string& i_partNumber);
/**
* @brief This function returns manufacturer's ID for DDR4 DIMM.
*
* @return manufacturer ID.
*/
types::BinaryVector getDDR4ManufacturerId();
/**
* @brief This function calculates DIMM size from DDR5 SPD
*
* @param[in] i_iterator - iterator to buffer containing SPD
* @return calculated size or 0 in case of any error.
*/
auto getDDR5DimmCapacity(types::BinaryVector::const_iterator& i_iterator);
/**
* @brief This function calculates part number from DDR5 SPD
*
* @param[in] i_iterator - iterator to buffer containing SPD
* @return calculated part number or a default value.
*/
auto getDDR5PartNumber(types::BinaryVector::const_iterator& i_iterator);
/**
* @brief This function calculates serial number from DDR5 SPD
*
* @param[in] i_iterator - iterator to buffer containing SPD
* @return calculated serial number.
*/
auto getDDR5SerialNumber(types::BinaryVector::const_iterator& i_iterator);
/**
* @brief This function allocates FRU number based on part number
*
* Mappings for FRU number from calculated part number is used
* for DDR5 ISDIMM.
*
* @param[in] i_partNumber - part number of the DIMM
* @return allocated FRU number.
*/
auto getDDR5FruNumber(const std::string& i_partNumber);
/**
* @brief This function allocates CCIN based on part number for DDR5 SPD
*
* @param[in] i_partNumber - part number of the DIMM
* @return allocated CCIN.
*/
auto getDDR5CCIN(const std::string& i_partNumber);
// SPD file to be parsed
const types::BinaryVector& m_memSpd;
};
} // namespace vpd