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