blob: e5e8abb0d92d1416491e93f3cf0732f6bc496a0c [file] [log] [blame]
Matt Spinler03c1d912019-07-10 14:12:15 -05001#include "user_header.hpp"
2
Matt Spinler1a94cc32019-09-11 13:32:12 -05003#include "pel_types.hpp"
4
Matt Spinler03c1d912019-07-10 14:12:15 -05005#include <phosphor-logging/log.hpp>
6
7namespace openpower
8{
9namespace pels
10{
11
12using namespace phosphor::logging;
13
Matt Spinlercf5a8d02019-09-05 12:58:53 -050014void UserHeader::unflatten(Stream& stream)
Matt Spinler03c1d912019-07-10 14:12:15 -050015{
Matt Spinlercf5a8d02019-09-05 12:58:53 -050016 stream >> _header >> _eventSubsystem >> _eventScope >> _eventSeverity >>
17 _eventType >> _reserved4Byte1 >> _problemDomain >> _problemVector >>
18 _actionFlags >> _reserved4Byte2;
Matt Spinler03c1d912019-07-10 14:12:15 -050019}
20
Matt Spinlercf5a8d02019-09-05 12:58:53 -050021void UserHeader::flatten(Stream& stream)
Matt Spinler03c1d912019-07-10 14:12:15 -050022{
Matt Spinlercf5a8d02019-09-05 12:58:53 -050023 stream << _header << _eventSubsystem << _eventScope << _eventSeverity
24 << _eventType << _reserved4Byte1 << _problemDomain << _problemVector
25 << _actionFlags << _reserved4Byte2;
Matt Spinler03c1d912019-07-10 14:12:15 -050026}
27
28UserHeader::UserHeader(Stream& pel)
29{
30 try
31 {
Matt Spinlercf5a8d02019-09-05 12:58:53 -050032 unflatten(pel);
Matt Spinler03c1d912019-07-10 14:12:15 -050033 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
43void UserHeader::validate()
44{
45 bool failed = false;
Matt Spinler1a94cc32019-09-11 13:32:12 -050046 if (header().id != static_cast<uint16_t>(SectionID::userHeader))
Matt Spinler03c1d912019-07-10 14:12:15 -050047 {
48 log<level::ERR>("Invalid user header section ID",
49 entry("ID=0x%X", header().id));
50 failed = true;
Matt Spinler03c1d912019-07-10 14:12:15 -050051 }
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;
Matt Spinler03c1d912019-07-10 14:12:15 -050058 }
59
60 _valid = (failed) ? false : true;
61}
62
63} // namespace pels
64} // namespace openpower