10ec8b83dSEd Tanous #pragma once 20ec8b83dSEd Tanous #include <nlohmann/json.hpp> 30ec8b83dSEd Tanous 40ec8b83dSEd Tanous namespace memory 50ec8b83dSEd Tanous { 60ec8b83dSEd Tanous // clang-format off 70ec8b83dSEd Tanous 80ec8b83dSEd Tanous enum class MemoryType{ 90ec8b83dSEd Tanous Invalid, 100ec8b83dSEd Tanous DRAM, 110ec8b83dSEd Tanous NVDIMM_N, 120ec8b83dSEd Tanous NVDIMM_F, 130ec8b83dSEd Tanous NVDIMM_P, 140ec8b83dSEd Tanous IntelOptane, 15*f2a8e57eSGunnar Mills Cache, 160ec8b83dSEd Tanous }; 170ec8b83dSEd Tanous 180ec8b83dSEd Tanous enum class MemoryDeviceType{ 190ec8b83dSEd Tanous Invalid, 200ec8b83dSEd Tanous DDR, 210ec8b83dSEd Tanous DDR2, 220ec8b83dSEd Tanous DDR3, 230ec8b83dSEd Tanous DDR4, 240ec8b83dSEd Tanous DDR4_SDRAM, 250ec8b83dSEd Tanous DDR4E_SDRAM, 260ec8b83dSEd Tanous LPDDR4_SDRAM, 270ec8b83dSEd Tanous DDR3_SDRAM, 280ec8b83dSEd Tanous LPDDR3_SDRAM, 290ec8b83dSEd Tanous DDR2_SDRAM, 300ec8b83dSEd Tanous DDR2_SDRAM_FB_DIMM, 310ec8b83dSEd Tanous DDR2_SDRAM_FB_DIMM_PROBE, 320ec8b83dSEd Tanous DDR_SGRAM, 330ec8b83dSEd Tanous DDR_SDRAM, 340ec8b83dSEd Tanous ROM, 350ec8b83dSEd Tanous SDRAM, 360ec8b83dSEd Tanous EDO, 370ec8b83dSEd Tanous FastPageMode, 380ec8b83dSEd Tanous PipelinedNibble, 390ec8b83dSEd Tanous Logical, 400ec8b83dSEd Tanous HBM, 410ec8b83dSEd Tanous HBM2, 42a8d8f9d8SEd Tanous HBM2E, 430ec8b83dSEd Tanous HBM3, 440ec8b83dSEd Tanous GDDR, 450ec8b83dSEd Tanous GDDR2, 460ec8b83dSEd Tanous GDDR3, 470ec8b83dSEd Tanous GDDR4, 480ec8b83dSEd Tanous GDDR5, 490ec8b83dSEd Tanous GDDR5X, 500ec8b83dSEd Tanous GDDR6, 510ec8b83dSEd Tanous DDR5, 520ec8b83dSEd Tanous OEM, 532ae81db9SGunnar Mills LPDDR5_SDRAM, 540ec8b83dSEd Tanous }; 550ec8b83dSEd Tanous 560ec8b83dSEd Tanous enum class BaseModuleType{ 570ec8b83dSEd Tanous Invalid, 580ec8b83dSEd Tanous RDIMM, 590ec8b83dSEd Tanous UDIMM, 600ec8b83dSEd Tanous SO_DIMM, 610ec8b83dSEd Tanous LRDIMM, 620ec8b83dSEd Tanous Mini_RDIMM, 630ec8b83dSEd Tanous Mini_UDIMM, 640ec8b83dSEd Tanous SO_RDIMM_72b, 650ec8b83dSEd Tanous SO_UDIMM_72b, 660ec8b83dSEd Tanous SO_DIMM_16b, 670ec8b83dSEd Tanous SO_DIMM_32b, 680ec8b83dSEd Tanous Die, 690ec8b83dSEd Tanous }; 700ec8b83dSEd Tanous 710ec8b83dSEd Tanous enum class MemoryMedia{ 720ec8b83dSEd Tanous Invalid, 730ec8b83dSEd Tanous DRAM, 740ec8b83dSEd Tanous NAND, 750ec8b83dSEd Tanous Intel3DXPoint, 760ec8b83dSEd Tanous Proprietary, 770ec8b83dSEd Tanous }; 780ec8b83dSEd Tanous 790ec8b83dSEd Tanous enum class SecurityStates{ 800ec8b83dSEd Tanous Invalid, 810ec8b83dSEd Tanous Enabled, 820ec8b83dSEd Tanous Disabled, 830ec8b83dSEd Tanous Unlocked, 840ec8b83dSEd Tanous Locked, 850ec8b83dSEd Tanous Frozen, 860ec8b83dSEd Tanous Passphraselimit, 870ec8b83dSEd Tanous }; 880ec8b83dSEd Tanous 890ec8b83dSEd Tanous enum class ErrorCorrection{ 900ec8b83dSEd Tanous Invalid, 910ec8b83dSEd Tanous NoECC, 920ec8b83dSEd Tanous SingleBitECC, 930ec8b83dSEd Tanous MultiBitECC, 940ec8b83dSEd Tanous AddressParity, 950ec8b83dSEd Tanous }; 960ec8b83dSEd Tanous 970ec8b83dSEd Tanous enum class MemoryClassification{ 980ec8b83dSEd Tanous Invalid, 990ec8b83dSEd Tanous Volatile, 1000ec8b83dSEd Tanous ByteAccessiblePersistent, 1010ec8b83dSEd Tanous Block, 1020ec8b83dSEd Tanous }; 1030ec8b83dSEd Tanous 1040ec8b83dSEd Tanous enum class OperatingMemoryModes{ 1050ec8b83dSEd Tanous Invalid, 1060ec8b83dSEd Tanous Volatile, 1070ec8b83dSEd Tanous PMEM, 1080ec8b83dSEd Tanous Block, 1090ec8b83dSEd Tanous }; 1100ec8b83dSEd Tanous 1110ec8b83dSEd Tanous NLOHMANN_JSON_SERIALIZE_ENUM(MemoryType, { 1120ec8b83dSEd Tanous {MemoryType::Invalid, "Invalid"}, 1130ec8b83dSEd Tanous {MemoryType::DRAM, "DRAM"}, 1140ec8b83dSEd Tanous {MemoryType::NVDIMM_N, "NVDIMM_N"}, 1150ec8b83dSEd Tanous {MemoryType::NVDIMM_F, "NVDIMM_F"}, 1160ec8b83dSEd Tanous {MemoryType::NVDIMM_P, "NVDIMM_P"}, 1170ec8b83dSEd Tanous {MemoryType::IntelOptane, "IntelOptane"}, 118*f2a8e57eSGunnar Mills {MemoryType::Cache, "Cache"}, 1190ec8b83dSEd Tanous }); 1200ec8b83dSEd Tanous 1210ec8b83dSEd Tanous NLOHMANN_JSON_SERIALIZE_ENUM(MemoryDeviceType, { 1220ec8b83dSEd Tanous {MemoryDeviceType::Invalid, "Invalid"}, 1230ec8b83dSEd Tanous {MemoryDeviceType::DDR, "DDR"}, 1240ec8b83dSEd Tanous {MemoryDeviceType::DDR2, "DDR2"}, 1250ec8b83dSEd Tanous {MemoryDeviceType::DDR3, "DDR3"}, 1260ec8b83dSEd Tanous {MemoryDeviceType::DDR4, "DDR4"}, 1270ec8b83dSEd Tanous {MemoryDeviceType::DDR4_SDRAM, "DDR4_SDRAM"}, 1280ec8b83dSEd Tanous {MemoryDeviceType::DDR4E_SDRAM, "DDR4E_SDRAM"}, 1290ec8b83dSEd Tanous {MemoryDeviceType::LPDDR4_SDRAM, "LPDDR4_SDRAM"}, 1300ec8b83dSEd Tanous {MemoryDeviceType::DDR3_SDRAM, "DDR3_SDRAM"}, 1310ec8b83dSEd Tanous {MemoryDeviceType::LPDDR3_SDRAM, "LPDDR3_SDRAM"}, 1320ec8b83dSEd Tanous {MemoryDeviceType::DDR2_SDRAM, "DDR2_SDRAM"}, 1330ec8b83dSEd Tanous {MemoryDeviceType::DDR2_SDRAM_FB_DIMM, "DDR2_SDRAM_FB_DIMM"}, 1340ec8b83dSEd Tanous {MemoryDeviceType::DDR2_SDRAM_FB_DIMM_PROBE, "DDR2_SDRAM_FB_DIMM_PROBE"}, 1350ec8b83dSEd Tanous {MemoryDeviceType::DDR_SGRAM, "DDR_SGRAM"}, 1360ec8b83dSEd Tanous {MemoryDeviceType::DDR_SDRAM, "DDR_SDRAM"}, 1370ec8b83dSEd Tanous {MemoryDeviceType::ROM, "ROM"}, 1380ec8b83dSEd Tanous {MemoryDeviceType::SDRAM, "SDRAM"}, 1390ec8b83dSEd Tanous {MemoryDeviceType::EDO, "EDO"}, 1400ec8b83dSEd Tanous {MemoryDeviceType::FastPageMode, "FastPageMode"}, 1410ec8b83dSEd Tanous {MemoryDeviceType::PipelinedNibble, "PipelinedNibble"}, 1420ec8b83dSEd Tanous {MemoryDeviceType::Logical, "Logical"}, 1430ec8b83dSEd Tanous {MemoryDeviceType::HBM, "HBM"}, 1440ec8b83dSEd Tanous {MemoryDeviceType::HBM2, "HBM2"}, 145a8d8f9d8SEd Tanous {MemoryDeviceType::HBM2E, "HBM2E"}, 1460ec8b83dSEd Tanous {MemoryDeviceType::HBM3, "HBM3"}, 1470ec8b83dSEd Tanous {MemoryDeviceType::GDDR, "GDDR"}, 1480ec8b83dSEd Tanous {MemoryDeviceType::GDDR2, "GDDR2"}, 1490ec8b83dSEd Tanous {MemoryDeviceType::GDDR3, "GDDR3"}, 1500ec8b83dSEd Tanous {MemoryDeviceType::GDDR4, "GDDR4"}, 1510ec8b83dSEd Tanous {MemoryDeviceType::GDDR5, "GDDR5"}, 1520ec8b83dSEd Tanous {MemoryDeviceType::GDDR5X, "GDDR5X"}, 1530ec8b83dSEd Tanous {MemoryDeviceType::GDDR6, "GDDR6"}, 1540ec8b83dSEd Tanous {MemoryDeviceType::DDR5, "DDR5"}, 1550ec8b83dSEd Tanous {MemoryDeviceType::OEM, "OEM"}, 1562ae81db9SGunnar Mills {MemoryDeviceType::LPDDR5_SDRAM, "LPDDR5_SDRAM"}, 1570ec8b83dSEd Tanous }); 1580ec8b83dSEd Tanous 1590ec8b83dSEd Tanous NLOHMANN_JSON_SERIALIZE_ENUM(BaseModuleType, { 1600ec8b83dSEd Tanous {BaseModuleType::Invalid, "Invalid"}, 1610ec8b83dSEd Tanous {BaseModuleType::RDIMM, "RDIMM"}, 1620ec8b83dSEd Tanous {BaseModuleType::UDIMM, "UDIMM"}, 1630ec8b83dSEd Tanous {BaseModuleType::SO_DIMM, "SO_DIMM"}, 1640ec8b83dSEd Tanous {BaseModuleType::LRDIMM, "LRDIMM"}, 1650ec8b83dSEd Tanous {BaseModuleType::Mini_RDIMM, "Mini_RDIMM"}, 1660ec8b83dSEd Tanous {BaseModuleType::Mini_UDIMM, "Mini_UDIMM"}, 1670ec8b83dSEd Tanous {BaseModuleType::SO_RDIMM_72b, "SO_RDIMM_72b"}, 1680ec8b83dSEd Tanous {BaseModuleType::SO_UDIMM_72b, "SO_UDIMM_72b"}, 1690ec8b83dSEd Tanous {BaseModuleType::SO_DIMM_16b, "SO_DIMM_16b"}, 1700ec8b83dSEd Tanous {BaseModuleType::SO_DIMM_32b, "SO_DIMM_32b"}, 1710ec8b83dSEd Tanous {BaseModuleType::Die, "Die"}, 1720ec8b83dSEd Tanous }); 1730ec8b83dSEd Tanous 1740ec8b83dSEd Tanous NLOHMANN_JSON_SERIALIZE_ENUM(MemoryMedia, { 1750ec8b83dSEd Tanous {MemoryMedia::Invalid, "Invalid"}, 1760ec8b83dSEd Tanous {MemoryMedia::DRAM, "DRAM"}, 1770ec8b83dSEd Tanous {MemoryMedia::NAND, "NAND"}, 1780ec8b83dSEd Tanous {MemoryMedia::Intel3DXPoint, "Intel3DXPoint"}, 1790ec8b83dSEd Tanous {MemoryMedia::Proprietary, "Proprietary"}, 1800ec8b83dSEd Tanous }); 1810ec8b83dSEd Tanous 1820ec8b83dSEd Tanous NLOHMANN_JSON_SERIALIZE_ENUM(SecurityStates, { 1830ec8b83dSEd Tanous {SecurityStates::Invalid, "Invalid"}, 1840ec8b83dSEd Tanous {SecurityStates::Enabled, "Enabled"}, 1850ec8b83dSEd Tanous {SecurityStates::Disabled, "Disabled"}, 1860ec8b83dSEd Tanous {SecurityStates::Unlocked, "Unlocked"}, 1870ec8b83dSEd Tanous {SecurityStates::Locked, "Locked"}, 1880ec8b83dSEd Tanous {SecurityStates::Frozen, "Frozen"}, 1890ec8b83dSEd Tanous {SecurityStates::Passphraselimit, "Passphraselimit"}, 1900ec8b83dSEd Tanous }); 1910ec8b83dSEd Tanous 1920ec8b83dSEd Tanous NLOHMANN_JSON_SERIALIZE_ENUM(ErrorCorrection, { 1930ec8b83dSEd Tanous {ErrorCorrection::Invalid, "Invalid"}, 1940ec8b83dSEd Tanous {ErrorCorrection::NoECC, "NoECC"}, 1950ec8b83dSEd Tanous {ErrorCorrection::SingleBitECC, "SingleBitECC"}, 1960ec8b83dSEd Tanous {ErrorCorrection::MultiBitECC, "MultiBitECC"}, 1970ec8b83dSEd Tanous {ErrorCorrection::AddressParity, "AddressParity"}, 1980ec8b83dSEd Tanous }); 1990ec8b83dSEd Tanous 2000ec8b83dSEd Tanous NLOHMANN_JSON_SERIALIZE_ENUM(MemoryClassification, { 2010ec8b83dSEd Tanous {MemoryClassification::Invalid, "Invalid"}, 2020ec8b83dSEd Tanous {MemoryClassification::Volatile, "Volatile"}, 2030ec8b83dSEd Tanous {MemoryClassification::ByteAccessiblePersistent, "ByteAccessiblePersistent"}, 2040ec8b83dSEd Tanous {MemoryClassification::Block, "Block"}, 2050ec8b83dSEd Tanous }); 2060ec8b83dSEd Tanous 2070ec8b83dSEd Tanous NLOHMANN_JSON_SERIALIZE_ENUM(OperatingMemoryModes, { 2080ec8b83dSEd Tanous {OperatingMemoryModes::Invalid, "Invalid"}, 2090ec8b83dSEd Tanous {OperatingMemoryModes::Volatile, "Volatile"}, 2100ec8b83dSEd Tanous {OperatingMemoryModes::PMEM, "PMEM"}, 2110ec8b83dSEd Tanous {OperatingMemoryModes::Block, "Block"}, 2120ec8b83dSEd Tanous }); 2130ec8b83dSEd Tanous 2140ec8b83dSEd Tanous } 2150ec8b83dSEd Tanous // clang-format on 216