xref: /openbmc/openpower-vpd-parser/vpd-parser/memory_vpd_parser.hpp (revision 3ab26a74c68da014af3860c7c070b617d6195bd7)
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 memory
12 {
13 namespace parser
14 {
15 using ParserInterface = openpower::vpd::parser::interface::ParserInterface;
16 using kwdVpdMap = openpower::vpd::inventory::KeywordVpdMap;
17 
18 class memoryVpdParser : public ParserInterface
19 {
20   public:
21     memoryVpdParser() = delete;
22     memoryVpdParser(const memoryVpdParser&) = delete;
23     memoryVpdParser& operator=(const memoryVpdParser&) = delete;
24     memoryVpdParser(memoryVpdParser&&) = delete;
25     memoryVpdParser& operator=(memoryVpdParser&&) = delete;
26     ~memoryVpdParser() = default;
27 
28     /**
29      * @brief Constructor
30      *
31      * Move memVpdVector to parser object's memVpdVector
32      */
33     memoryVpdParser(const Binary& VpdVector) : memVpd(VpdVector)
34     {
35     }
36 
37     /**
38      * @brief Parse the memory VPD 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      * publish 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 DIMM VPD
63      *
64      * @param[in] iterator - iterator to buffer containing VPD
65      * @return calculated data or 0 in case of any error.
66      */
67     auto getDimmSize(Binary::const_iterator iterator);
68 
69     // vdp file to be parsed
70     const Binary& memVpd;
71 };
72 } // namespace parser
73 } // namespace memory
74 } // namespace vpd
75 } // namespace openpower