xref: /openbmc/openpower-vpd-parser/vpd-parser/ipz_parser.hpp (revision 08dc31cd99172460b86e7552d0eeb21eb4197446)
1 #pragma once
2 
3 #include "const.hpp"
4 #include "parser_interface.hpp"
5 #include "store.hpp"
6 #include "types.hpp"
7 
8 #include <vector>
9 
10 namespace openpower
11 {
12 namespace vpd
13 {
14 namespace ipz
15 {
16 namespace parser
17 {
18 
19 using ParserInterface = openpower::vpd::parser::interface::ParserInterface;
20 using kwdVpdMap = openpower::vpd::inventory::KeywordVpdMap;
21 
22 class IpzVpdParser : public ParserInterface
23 {
24   public:
25     IpzVpdParser() = delete;
26     IpzVpdParser(const IpzVpdParser&) = delete;
27     IpzVpdParser& operator=(const IpzVpdParser&) = delete;
28     IpzVpdParser(IpzVpdParser&&) = delete;
29     IpzVpdParser& operator=(IpzVpdParser&&) = delete;
30     ~IpzVpdParser() = default;
31 
32     /**
33      * @brief Constructor
34      * @param[in] - VpdVector - vpd buffer
35      * @param[in] - path - Inventory Path
36      * @param[in] - vpdFilePath - VPD H/w path
37      * @param[in] - vpdStartOffset - VPD starting offset
38      */
IpzVpdParser(const Binary & VpdVector,const std::string & path,const std::string & vpdFilePath,uint32_t vpdStartOffset)39     IpzVpdParser(const Binary& VpdVector, const std::string& path,
40                  const std::string& vpdFilePath, uint32_t vpdStartOffset) :
41         vpd(VpdVector), inventoryPath(path), vpdFilePath(vpdFilePath),
42         vpdStartOffset(vpdStartOffset)
43     {}
44 
45     /**
46      * @brief Parse the memory VPD binary data.
47      * Collects and emplace the keyword-value pairs in map.
48      *
49      * @return map of keyword:value
50      */
51     std::variant<kwdVpdMap, Store> parse();
52 
53     /**
54      * @brief An api to return interface name with respect to
55      * the parser selected.
56      *
57      * @return - Interface name for that vpd type.
58      */
59     std::string getInterfaceName() const;
60 
61     /** @brief API to check vpd header
62      *  @param [in] vpd - VPDheader in binary format
63      */
64     void processHeader();
65 
66   private:
67     const Binary& vpd;
68 
69     /*Inventory path of the FRU */
70     const std::string inventoryPath;
71 
72     /* VPD Path */
73     const std::string vpdFilePath;
74 
75     /* Offset */
76     uint32_t vpdStartOffset;
77 
78 }; // class IpzVpdParser
79 
80 } // namespace parser
81 } // namespace ipz
82 } // namespace vpd
83 } // namespace openpower
84