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      * @brief Parse the memory SPD binary data.
37      * Collects and emplace the keyword-value pairs in map.
38      *
39      * @return map of keyword:value
40      */
41     std::variant<kwdVpdMap, Store> parse();
42 
43     /**
44      * @brief An api to return interface name with respect to
45      * published data on cache
46      *
47      * @return - Interface name for that vpd type.
48      */
49     std::string getInterfaceName() const;
50 
51   private:
52     /**
53      * @brief An api to read keywords.
54      *
55      * @return- map of kwd:value
56      */
57     kwdVpdMap readKeywords(Binary::const_iterator& iterator);
58 
59     /**
60      * @brief This function calculates DIMM size from SPD
61      *
62      * @param[in] iterator - iterator to buffer containing SPD
63      * @return calculated data or 0 in case of any error.
64      */
65     auto getDDR4DimmCapacity(Binary::const_iterator& iterator);
66 
67     /**
68      * @brief This function calculates part number from SPD
69      *
70      * @param[in] iterator - iterator to buffer containing SPD
71      * @return calculated part number.
72      */
73     auto getDDR4PartNumber(Binary::const_iterator& iterator);
74 
75     /**
76      * @brief This function calculates serial number from SPD
77      *
78      * @param[in] iterator - iterator to buffer containing SPD
79      * @return calculated serial number.
80      */
81     auto getDDR4SerialNumber(Binary::const_iterator& iterator);
82 
83     /**
84      * @brief This function allocates FRU number based on part number
85      *
86      * @param[in] partNumber - part number of the DIMM
87      * @param[in] iterator - iterator to buffer containing SPD
88      * @return allocated FRU number.
89      */
90     auto getDDR4FruNumber(const std::string& partNumber,
91                           Binary::const_iterator& iterator);
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