1*0ec8b83dSEd Tanous #pragma once 2*0ec8b83dSEd Tanous #include <nlohmann/json.hpp> 3*0ec8b83dSEd Tanous 4*0ec8b83dSEd Tanous namespace memory 5*0ec8b83dSEd Tanous { 6*0ec8b83dSEd Tanous // clang-format off 7*0ec8b83dSEd Tanous 8*0ec8b83dSEd Tanous enum class MemoryType{ 9*0ec8b83dSEd Tanous Invalid, 10*0ec8b83dSEd Tanous DRAM, 11*0ec8b83dSEd Tanous NVDIMM_N, 12*0ec8b83dSEd Tanous NVDIMM_F, 13*0ec8b83dSEd Tanous NVDIMM_P, 14*0ec8b83dSEd Tanous IntelOptane, 15*0ec8b83dSEd Tanous }; 16*0ec8b83dSEd Tanous 17*0ec8b83dSEd Tanous enum class MemoryDeviceType{ 18*0ec8b83dSEd Tanous Invalid, 19*0ec8b83dSEd Tanous DDR, 20*0ec8b83dSEd Tanous DDR2, 21*0ec8b83dSEd Tanous DDR3, 22*0ec8b83dSEd Tanous DDR4, 23*0ec8b83dSEd Tanous DDR4_SDRAM, 24*0ec8b83dSEd Tanous DDR4E_SDRAM, 25*0ec8b83dSEd Tanous LPDDR4_SDRAM, 26*0ec8b83dSEd Tanous DDR3_SDRAM, 27*0ec8b83dSEd Tanous LPDDR3_SDRAM, 28*0ec8b83dSEd Tanous DDR2_SDRAM, 29*0ec8b83dSEd Tanous DDR2_SDRAM_FB_DIMM, 30*0ec8b83dSEd Tanous DDR2_SDRAM_FB_DIMM_PROBE, 31*0ec8b83dSEd Tanous DDR_SGRAM, 32*0ec8b83dSEd Tanous DDR_SDRAM, 33*0ec8b83dSEd Tanous ROM, 34*0ec8b83dSEd Tanous SDRAM, 35*0ec8b83dSEd Tanous EDO, 36*0ec8b83dSEd Tanous FastPageMode, 37*0ec8b83dSEd Tanous PipelinedNibble, 38*0ec8b83dSEd Tanous Logical, 39*0ec8b83dSEd Tanous HBM, 40*0ec8b83dSEd Tanous HBM2, 41*0ec8b83dSEd Tanous HBM3, 42*0ec8b83dSEd Tanous GDDR, 43*0ec8b83dSEd Tanous GDDR2, 44*0ec8b83dSEd Tanous GDDR3, 45*0ec8b83dSEd Tanous GDDR4, 46*0ec8b83dSEd Tanous GDDR5, 47*0ec8b83dSEd Tanous GDDR5X, 48*0ec8b83dSEd Tanous GDDR6, 49*0ec8b83dSEd Tanous DDR5, 50*0ec8b83dSEd Tanous OEM, 51*0ec8b83dSEd Tanous }; 52*0ec8b83dSEd Tanous 53*0ec8b83dSEd Tanous enum class BaseModuleType{ 54*0ec8b83dSEd Tanous Invalid, 55*0ec8b83dSEd Tanous RDIMM, 56*0ec8b83dSEd Tanous UDIMM, 57*0ec8b83dSEd Tanous SO_DIMM, 58*0ec8b83dSEd Tanous LRDIMM, 59*0ec8b83dSEd Tanous Mini_RDIMM, 60*0ec8b83dSEd Tanous Mini_UDIMM, 61*0ec8b83dSEd Tanous SO_RDIMM_72b, 62*0ec8b83dSEd Tanous SO_UDIMM_72b, 63*0ec8b83dSEd Tanous SO_DIMM_16b, 64*0ec8b83dSEd Tanous SO_DIMM_32b, 65*0ec8b83dSEd Tanous Die, 66*0ec8b83dSEd Tanous }; 67*0ec8b83dSEd Tanous 68*0ec8b83dSEd Tanous enum class MemoryMedia{ 69*0ec8b83dSEd Tanous Invalid, 70*0ec8b83dSEd Tanous DRAM, 71*0ec8b83dSEd Tanous NAND, 72*0ec8b83dSEd Tanous Intel3DXPoint, 73*0ec8b83dSEd Tanous Proprietary, 74*0ec8b83dSEd Tanous }; 75*0ec8b83dSEd Tanous 76*0ec8b83dSEd Tanous enum class SecurityStates{ 77*0ec8b83dSEd Tanous Invalid, 78*0ec8b83dSEd Tanous Enabled, 79*0ec8b83dSEd Tanous Disabled, 80*0ec8b83dSEd Tanous Unlocked, 81*0ec8b83dSEd Tanous Locked, 82*0ec8b83dSEd Tanous Frozen, 83*0ec8b83dSEd Tanous Passphraselimit, 84*0ec8b83dSEd Tanous }; 85*0ec8b83dSEd Tanous 86*0ec8b83dSEd Tanous enum class ErrorCorrection{ 87*0ec8b83dSEd Tanous Invalid, 88*0ec8b83dSEd Tanous NoECC, 89*0ec8b83dSEd Tanous SingleBitECC, 90*0ec8b83dSEd Tanous MultiBitECC, 91*0ec8b83dSEd Tanous AddressParity, 92*0ec8b83dSEd Tanous }; 93*0ec8b83dSEd Tanous 94*0ec8b83dSEd Tanous enum class MemoryClassification{ 95*0ec8b83dSEd Tanous Invalid, 96*0ec8b83dSEd Tanous Volatile, 97*0ec8b83dSEd Tanous ByteAccessiblePersistent, 98*0ec8b83dSEd Tanous Block, 99*0ec8b83dSEd Tanous }; 100*0ec8b83dSEd Tanous 101*0ec8b83dSEd Tanous enum class OperatingMemoryModes{ 102*0ec8b83dSEd Tanous Invalid, 103*0ec8b83dSEd Tanous Volatile, 104*0ec8b83dSEd Tanous PMEM, 105*0ec8b83dSEd Tanous Block, 106*0ec8b83dSEd Tanous }; 107*0ec8b83dSEd Tanous 108*0ec8b83dSEd Tanous NLOHMANN_JSON_SERIALIZE_ENUM(MemoryType, { 109*0ec8b83dSEd Tanous {MemoryType::Invalid, "Invalid"}, 110*0ec8b83dSEd Tanous {MemoryType::DRAM, "DRAM"}, 111*0ec8b83dSEd Tanous {MemoryType::NVDIMM_N, "NVDIMM_N"}, 112*0ec8b83dSEd Tanous {MemoryType::NVDIMM_F, "NVDIMM_F"}, 113*0ec8b83dSEd Tanous {MemoryType::NVDIMM_P, "NVDIMM_P"}, 114*0ec8b83dSEd Tanous {MemoryType::IntelOptane, "IntelOptane"}, 115*0ec8b83dSEd Tanous }); 116*0ec8b83dSEd Tanous 117*0ec8b83dSEd Tanous NLOHMANN_JSON_SERIALIZE_ENUM(MemoryDeviceType, { 118*0ec8b83dSEd Tanous {MemoryDeviceType::Invalid, "Invalid"}, 119*0ec8b83dSEd Tanous {MemoryDeviceType::DDR, "DDR"}, 120*0ec8b83dSEd Tanous {MemoryDeviceType::DDR2, "DDR2"}, 121*0ec8b83dSEd Tanous {MemoryDeviceType::DDR3, "DDR3"}, 122*0ec8b83dSEd Tanous {MemoryDeviceType::DDR4, "DDR4"}, 123*0ec8b83dSEd Tanous {MemoryDeviceType::DDR4_SDRAM, "DDR4_SDRAM"}, 124*0ec8b83dSEd Tanous {MemoryDeviceType::DDR4E_SDRAM, "DDR4E_SDRAM"}, 125*0ec8b83dSEd Tanous {MemoryDeviceType::LPDDR4_SDRAM, "LPDDR4_SDRAM"}, 126*0ec8b83dSEd Tanous {MemoryDeviceType::DDR3_SDRAM, "DDR3_SDRAM"}, 127*0ec8b83dSEd Tanous {MemoryDeviceType::LPDDR3_SDRAM, "LPDDR3_SDRAM"}, 128*0ec8b83dSEd Tanous {MemoryDeviceType::DDR2_SDRAM, "DDR2_SDRAM"}, 129*0ec8b83dSEd Tanous {MemoryDeviceType::DDR2_SDRAM_FB_DIMM, "DDR2_SDRAM_FB_DIMM"}, 130*0ec8b83dSEd Tanous {MemoryDeviceType::DDR2_SDRAM_FB_DIMM_PROBE, "DDR2_SDRAM_FB_DIMM_PROBE"}, 131*0ec8b83dSEd Tanous {MemoryDeviceType::DDR_SGRAM, "DDR_SGRAM"}, 132*0ec8b83dSEd Tanous {MemoryDeviceType::DDR_SDRAM, "DDR_SDRAM"}, 133*0ec8b83dSEd Tanous {MemoryDeviceType::ROM, "ROM"}, 134*0ec8b83dSEd Tanous {MemoryDeviceType::SDRAM, "SDRAM"}, 135*0ec8b83dSEd Tanous {MemoryDeviceType::EDO, "EDO"}, 136*0ec8b83dSEd Tanous {MemoryDeviceType::FastPageMode, "FastPageMode"}, 137*0ec8b83dSEd Tanous {MemoryDeviceType::PipelinedNibble, "PipelinedNibble"}, 138*0ec8b83dSEd Tanous {MemoryDeviceType::Logical, "Logical"}, 139*0ec8b83dSEd Tanous {MemoryDeviceType::HBM, "HBM"}, 140*0ec8b83dSEd Tanous {MemoryDeviceType::HBM2, "HBM2"}, 141*0ec8b83dSEd Tanous {MemoryDeviceType::HBM3, "HBM3"}, 142*0ec8b83dSEd Tanous {MemoryDeviceType::GDDR, "GDDR"}, 143*0ec8b83dSEd Tanous {MemoryDeviceType::GDDR2, "GDDR2"}, 144*0ec8b83dSEd Tanous {MemoryDeviceType::GDDR3, "GDDR3"}, 145*0ec8b83dSEd Tanous {MemoryDeviceType::GDDR4, "GDDR4"}, 146*0ec8b83dSEd Tanous {MemoryDeviceType::GDDR5, "GDDR5"}, 147*0ec8b83dSEd Tanous {MemoryDeviceType::GDDR5X, "GDDR5X"}, 148*0ec8b83dSEd Tanous {MemoryDeviceType::GDDR6, "GDDR6"}, 149*0ec8b83dSEd Tanous {MemoryDeviceType::DDR5, "DDR5"}, 150*0ec8b83dSEd Tanous {MemoryDeviceType::OEM, "OEM"}, 151*0ec8b83dSEd Tanous }); 152*0ec8b83dSEd Tanous 153*0ec8b83dSEd Tanous NLOHMANN_JSON_SERIALIZE_ENUM(BaseModuleType, { 154*0ec8b83dSEd Tanous {BaseModuleType::Invalid, "Invalid"}, 155*0ec8b83dSEd Tanous {BaseModuleType::RDIMM, "RDIMM"}, 156*0ec8b83dSEd Tanous {BaseModuleType::UDIMM, "UDIMM"}, 157*0ec8b83dSEd Tanous {BaseModuleType::SO_DIMM, "SO_DIMM"}, 158*0ec8b83dSEd Tanous {BaseModuleType::LRDIMM, "LRDIMM"}, 159*0ec8b83dSEd Tanous {BaseModuleType::Mini_RDIMM, "Mini_RDIMM"}, 160*0ec8b83dSEd Tanous {BaseModuleType::Mini_UDIMM, "Mini_UDIMM"}, 161*0ec8b83dSEd Tanous {BaseModuleType::SO_RDIMM_72b, "SO_RDIMM_72b"}, 162*0ec8b83dSEd Tanous {BaseModuleType::SO_UDIMM_72b, "SO_UDIMM_72b"}, 163*0ec8b83dSEd Tanous {BaseModuleType::SO_DIMM_16b, "SO_DIMM_16b"}, 164*0ec8b83dSEd Tanous {BaseModuleType::SO_DIMM_32b, "SO_DIMM_32b"}, 165*0ec8b83dSEd Tanous {BaseModuleType::Die, "Die"}, 166*0ec8b83dSEd Tanous }); 167*0ec8b83dSEd Tanous 168*0ec8b83dSEd Tanous NLOHMANN_JSON_SERIALIZE_ENUM(MemoryMedia, { 169*0ec8b83dSEd Tanous {MemoryMedia::Invalid, "Invalid"}, 170*0ec8b83dSEd Tanous {MemoryMedia::DRAM, "DRAM"}, 171*0ec8b83dSEd Tanous {MemoryMedia::NAND, "NAND"}, 172*0ec8b83dSEd Tanous {MemoryMedia::Intel3DXPoint, "Intel3DXPoint"}, 173*0ec8b83dSEd Tanous {MemoryMedia::Proprietary, "Proprietary"}, 174*0ec8b83dSEd Tanous }); 175*0ec8b83dSEd Tanous 176*0ec8b83dSEd Tanous NLOHMANN_JSON_SERIALIZE_ENUM(SecurityStates, { 177*0ec8b83dSEd Tanous {SecurityStates::Invalid, "Invalid"}, 178*0ec8b83dSEd Tanous {SecurityStates::Enabled, "Enabled"}, 179*0ec8b83dSEd Tanous {SecurityStates::Disabled, "Disabled"}, 180*0ec8b83dSEd Tanous {SecurityStates::Unlocked, "Unlocked"}, 181*0ec8b83dSEd Tanous {SecurityStates::Locked, "Locked"}, 182*0ec8b83dSEd Tanous {SecurityStates::Frozen, "Frozen"}, 183*0ec8b83dSEd Tanous {SecurityStates::Passphraselimit, "Passphraselimit"}, 184*0ec8b83dSEd Tanous }); 185*0ec8b83dSEd Tanous 186*0ec8b83dSEd Tanous NLOHMANN_JSON_SERIALIZE_ENUM(ErrorCorrection, { 187*0ec8b83dSEd Tanous {ErrorCorrection::Invalid, "Invalid"}, 188*0ec8b83dSEd Tanous {ErrorCorrection::NoECC, "NoECC"}, 189*0ec8b83dSEd Tanous {ErrorCorrection::SingleBitECC, "SingleBitECC"}, 190*0ec8b83dSEd Tanous {ErrorCorrection::MultiBitECC, "MultiBitECC"}, 191*0ec8b83dSEd Tanous {ErrorCorrection::AddressParity, "AddressParity"}, 192*0ec8b83dSEd Tanous }); 193*0ec8b83dSEd Tanous 194*0ec8b83dSEd Tanous NLOHMANN_JSON_SERIALIZE_ENUM(MemoryClassification, { 195*0ec8b83dSEd Tanous {MemoryClassification::Invalid, "Invalid"}, 196*0ec8b83dSEd Tanous {MemoryClassification::Volatile, "Volatile"}, 197*0ec8b83dSEd Tanous {MemoryClassification::ByteAccessiblePersistent, "ByteAccessiblePersistent"}, 198*0ec8b83dSEd Tanous {MemoryClassification::Block, "Block"}, 199*0ec8b83dSEd Tanous }); 200*0ec8b83dSEd Tanous 201*0ec8b83dSEd Tanous NLOHMANN_JSON_SERIALIZE_ENUM(OperatingMemoryModes, { 202*0ec8b83dSEd Tanous {OperatingMemoryModes::Invalid, "Invalid"}, 203*0ec8b83dSEd Tanous {OperatingMemoryModes::Volatile, "Volatile"}, 204*0ec8b83dSEd Tanous {OperatingMemoryModes::PMEM, "PMEM"}, 205*0ec8b83dSEd Tanous {OperatingMemoryModes::Block, "Block"}, 206*0ec8b83dSEd Tanous }); 207*0ec8b83dSEd Tanous 208*0ec8b83dSEd Tanous } 209*0ec8b83dSEd Tanous // clang-format on 210