1 #include "user_header.hpp" 2 3 #include "pel_types.hpp" 4 5 #include <phosphor-logging/log.hpp> 6 7 namespace openpower 8 { 9 namespace pels 10 { 11 12 using namespace phosphor::logging; 13 14 void UserHeader::unflatten(Stream& stream) 15 { 16 stream >> _header >> _eventSubsystem >> _eventScope >> _eventSeverity >> 17 _eventType >> _reserved4Byte1 >> _problemDomain >> _problemVector >> 18 _actionFlags >> _reserved4Byte2; 19 } 20 21 void UserHeader::flatten(Stream& stream) 22 { 23 stream << _header << _eventSubsystem << _eventScope << _eventSeverity 24 << _eventType << _reserved4Byte1 << _problemDomain << _problemVector 25 << _actionFlags << _reserved4Byte2; 26 } 27 28 UserHeader::UserHeader(Stream& pel) 29 { 30 try 31 { 32 unflatten(pel); 33 validate(); 34 } 35 catch (const std::exception& e) 36 { 37 log<level::ERR>("Cannot unflatten user header", 38 entry("ERROR=%s", e.what())); 39 _valid = false; 40 } 41 } 42 43 void UserHeader::validate() 44 { 45 bool failed = false; 46 if (header().id != static_cast<uint16_t>(SectionID::userHeader)) 47 { 48 log<level::ERR>("Invalid user header section ID", 49 entry("ID=0x%X", header().id)); 50 failed = true; 51 } 52 53 if (header().version != userHeaderVersion) 54 { 55 log<level::ERR>("Invalid user header version", 56 entry("VERSION=0x%X", header().version)); 57 failed = true; 58 } 59 60 _valid = (failed) ? false : true; 61 } 62 63 } // namespace pels 64 } // namespace openpower 65