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