diff options
author | Matt Spinler <spinler@us.ibm.com> | 2019-09-10 15:24:10 -0500 |
---|---|---|
committer | Matt Spinler <spinler@us.ibm.com> | 2019-09-27 14:26:13 -0500 |
commit | b666433986470ba76ed7357ea026db39ad0b404b (patch) | |
tree | b370fb517086b037a5c17b468f89003d987b4bd7 /extensions/openpower-pels/mtms.cpp | |
parent | 72575f51ed7b7ead4d55c87b23c186d882ae8345 (diff) | |
download | phosphor-logging-b666433986470ba76ed7357ea026db39ad0b404b.tar.gz phosphor-logging-b666433986470ba76ed7357ea026db39ad0b404b.zip |
PEL: MTMS class to handle the type-model and SN
This class represents the (M)achine (T)ype-(M)odel (S)erial number
structure for the PEL, where it is used in both the ExtendedUserHeader
and FailingMTMS sections.
It consists of an 8 byte machine type+model field of the form TTT-MMMM,
followed by a 12 byte machine serial number field. Unused bytes are set
to 0.
Note that this is not a PEL section itself. It's just used by other PEL
sections.
Signed-off-by: Matt Spinler <spinler@us.ibm.com>
Change-Id: I15f9858e951a913ab2353cf93b7f20cc2709c502
Diffstat (limited to 'extensions/openpower-pels/mtms.cpp')
-rw-r--r-- | extensions/openpower-pels/mtms.cpp | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/extensions/openpower-pels/mtms.cpp b/extensions/openpower-pels/mtms.cpp new file mode 100644 index 0000000..355431f --- /dev/null +++ b/extensions/openpower-pels/mtms.cpp @@ -0,0 +1,80 @@ +#include "mtms.hpp" + +namespace openpower +{ +namespace pels +{ + +MTMS::MTMS() +{ + memset(_machineTypeAndModel.data(), 0, mtmSize); + memset(_serialNumber.data(), 0, snSize); +} + +MTMS::MTMS(const std::string& typeModel, const std::string& serialNumber) +{ + memset(_machineTypeAndModel.data(), 0, mtmSize); + memset(_serialNumber.data(), 0, snSize); + + // Copy in as much as the fields as possible + for (size_t i = 0; i < mtmSize; i++) + { + if (typeModel.size() > i) + { + _machineTypeAndModel[i] = typeModel[i]; + } + } + + for (size_t i = 0; i < snSize; i++) + { + if (serialNumber.size() > i) + { + _serialNumber[i] = serialNumber[i]; + } + } +} + +MTMS::MTMS(Stream& stream) +{ + for (size_t i = 0; i < mtmSize; i++) + { + stream >> _machineTypeAndModel[i]; + } + + for (size_t i = 0; i < snSize; i++) + { + stream >> _serialNumber[i]; + } +} + +Stream& operator<<(Stream& s, MTMS& mtms) +{ + for (size_t i = 0; i < MTMS::mtmSize; i++) + { + s << mtms.machineTypeAndModel()[i]; + } + + for (size_t i = 0; i < MTMS::snSize; i++) + { + s << mtms.machineSerialNumber()[i]; + } + + return s; +} + +Stream& operator>>(Stream& s, MTMS& mtms) +{ + for (size_t i = 0; i < MTMS::mtmSize; i++) + { + s >> mtms.machineTypeAndModel()[i]; + } + + for (size_t i = 0; i < MTMS::snSize; i++) + { + s >> mtms.machineSerialNumber()[i]; + } + + return s; +} +} // namespace pels +} // namespace openpower |