]> git.proxmox.com Git - mirror_edk2.git/blob - MdePkg/Include/IndustryStandard/SdramSpdDdr4.h
MdePkg: Replace BSD License with BSD+Patent License
[mirror_edk2.git] / MdePkg / Include / IndustryStandard / SdramSpdDdr4.h
1 /** @file
2 This file contains definitions for SPD DDR4.
3
4 Copyright (c) 2016, Intel Corporation. All rights reserved.<BR>
5 SPDX-License-Identifier: BSD-2-Clause-Patent
6
7 @par Revision Reference:
8 - Serial Presence Detect (SPD) for DDR4 SDRAM Modules Document Release 4
9 http://www.jedec.org/standards-documents/docs/spd412l-4
10 **/
11
12 #ifndef _SDRAM_SPD_DDR4_H_
13 #define _SDRAM_SPD_DDR4_H_
14
15 #pragma pack (push, 1)
16
17 typedef union {
18 struct {
19 UINT8 BytesUsed : 4; ///< Bits 3:0
20 UINT8 BytesTotal : 3; ///< Bits 6:4
21 UINT8 CrcCoverage : 1; ///< Bits 7:7
22 } Bits;
23 UINT8 Data;
24 } SPD4_DEVICE_DESCRIPTION_STRUCT;
25
26 typedef union {
27 struct {
28 UINT8 Minor : 4; ///< Bits 3:0
29 UINT8 Major : 4; ///< Bits 7:4
30 } Bits;
31 UINT8 Data;
32 } SPD4_REVISION_STRUCT;
33
34 typedef union {
35 struct {
36 UINT8 Type : 8; ///< Bits 7:0
37 } Bits;
38 UINT8 Data;
39 } SPD4_DRAM_DEVICE_TYPE_STRUCT;
40
41 typedef union {
42 struct {
43 UINT8 ModuleType : 4; ///< Bits 3:0
44 UINT8 HybridMedia : 3; ///< Bits 6:4
45 UINT8 Hybrid : 1; ///< Bits 7:7
46 } Bits;
47 UINT8 Data;
48 } SPD4_MODULE_TYPE_STRUCT;
49
50 typedef union {
51 struct {
52 UINT8 Density : 4; ///< Bits 3:0
53 UINT8 BankAddress : 2; ///< Bits 5:4
54 UINT8 BankGroup : 2; ///< Bits 7:6
55 } Bits;
56 UINT8 Data;
57 } SPD4_SDRAM_DENSITY_BANKS_STRUCT;
58
59 typedef union {
60 struct {
61 UINT8 ColumnAddress : 3; ///< Bits 2:0
62 UINT8 RowAddress : 3; ///< Bits 5:3
63 UINT8 Reserved : 2; ///< Bits 7:6
64 } Bits;
65 UINT8 Data;
66 } SPD4_SDRAM_ADDRESSING_STRUCT;
67
68 typedef union {
69 struct {
70 UINT8 SignalLoading : 2; ///< Bits 1:0
71 UINT8 Reserved : 2; ///< Bits 3:2
72 UINT8 DieCount : 3; ///< Bits 6:4
73 UINT8 SdramPackageType : 1; ///< Bits 7:7
74 } Bits;
75 UINT8 Data;
76 } SPD4_PRIMARY_SDRAM_PACKAGE_TYPE_STRUCT;
77
78 typedef union {
79 struct {
80 UINT8 MaximumActivateCount : 4; ///< Bits 3:0
81 UINT8 MaximumActivateWindow : 2; ///< Bits 5:4
82 UINT8 Reserved : 2; ///< Bits 7:6
83 } Bits;
84 UINT8 Data;
85 } SPD4_SDRAM_OPTIONAL_FEATURES_STRUCT;
86
87 typedef union {
88 struct {
89 UINT8 Reserved : 8; ///< Bits 7:0
90 } Bits;
91 UINT8 Data;
92 } SPD4_SDRAM_THERMAL_REFRESH_STRUCT;
93
94 typedef union {
95 struct {
96 UINT8 Reserved : 5; ///< Bits 4:0
97 UINT8 SoftPPR : 1; ///< Bits 5:5
98 UINT8 PostPackageRepair : 2; ///< Bits 7:6
99 } Bits;
100 UINT8 Data;
101 } SPD4_OTHER_SDRAM_OPTIONAL_FEATURES_STRUCT;
102
103 typedef union {
104 struct {
105 UINT8 SignalLoading : 2; ///< Bits 1:0
106 UINT8 DRAMDensityRatio : 2; ///< Bits 3:2
107 UINT8 DieCount : 3; ///< Bits 6:4
108 UINT8 SdramPackageType : 1; ///< Bits 7:7
109 } Bits;
110 UINT8 Data;
111 } SPD4_SECONDARY_SDRAM_PACKAGE_TYPE_STRUCT;
112
113 typedef union {
114 struct {
115 UINT8 OperationAt1_20 : 1; ///< Bits 0:0
116 UINT8 EndurantAt1_20 : 1; ///< Bits 1:1
117 UINT8 Reserved : 6; ///< Bits 7:2
118 } Bits;
119 UINT8 Data;
120 } SPD4_MODULE_NOMINAL_VOLTAGE_STRUCT;
121
122 typedef union {
123 struct {
124 UINT8 SdramDeviceWidth : 3; ///< Bits 2:0
125 UINT8 RankCount : 3; ///< Bits 5:3
126 UINT8 RankMix : 1; ///< Bits 6:6
127 UINT8 Reserved : 1; ///< Bits 7:7
128 } Bits;
129 UINT8 Data;
130 } SPD4_MODULE_ORGANIZATION_STRUCT;
131
132 typedef union {
133 struct {
134 UINT8 PrimaryBusWidth : 3; ///< Bits 2:0
135 UINT8 BusWidthExtension : 2; ///< Bits 4:3
136 UINT8 Reserved : 3; ///< Bits 7:5
137 } Bits;
138 UINT8 Data;
139 } SPD4_MODULE_MEMORY_BUS_WIDTH_STRUCT;
140
141 typedef union {
142 struct {
143 UINT8 Reserved : 7; ///< Bits 6:0
144 UINT8 ThermalSensorPresence : 1; ///< Bits 7:7
145 } Bits;
146 UINT8 Data;
147 } SPD4_MODULE_THERMAL_SENSOR_STRUCT;
148
149 typedef union {
150 struct {
151 UINT8 ExtendedBaseModuleType : 4; ///< Bits 3:0
152 UINT8 Reserved : 4; ///< Bits 7:4
153 } Bits;
154 UINT8 Data;
155 } SPD4_EXTENDED_MODULE_TYPE_STRUCT;
156
157 typedef union {
158 struct {
159 UINT8 Fine : 2; ///< Bits 1:0
160 UINT8 Medium : 2; ///< Bits 3:2
161 UINT8 Reserved : 4; ///< Bits 7:4
162 } Bits;
163 UINT8 Data;
164 } SPD4_TIMEBASE_STRUCT;
165
166 typedef union {
167 struct {
168 UINT8 tCKmin : 8; ///< Bits 7:0
169 } Bits;
170 UINT8 Data;
171 } SPD4_TCK_MIN_MTB_STRUCT;
172
173 typedef union {
174 struct {
175 UINT8 tCKmax : 8; ///< Bits 7:0
176 } Bits;
177 UINT8 Data;
178 } SPD4_TCK_MAX_MTB_STRUCT;
179
180 typedef union {
181 struct {
182 UINT32 Cl7 : 1; ///< Bits 0:0
183 UINT32 Cl8 : 1; ///< Bits 1:1
184 UINT32 Cl9 : 1; ///< Bits 2:2
185 UINT32 Cl10 : 1; ///< Bits 3:3
186 UINT32 Cl11 : 1; ///< Bits 4:4
187 UINT32 Cl12 : 1; ///< Bits 5:5
188 UINT32 Cl13 : 1; ///< Bits 6:6
189 UINT32 Cl14 : 1; ///< Bits 7:7
190 UINT32 Cl15 : 1; ///< Bits 8:8
191 UINT32 Cl16 : 1; ///< Bits 9:9
192 UINT32 Cl17 : 1; ///< Bits 10:10
193 UINT32 Cl18 : 1; ///< Bits 11:11
194 UINT32 Cl19 : 1; ///< Bits 12:12
195 UINT32 Cl20 : 1; ///< Bits 13:13
196 UINT32 Cl21 : 1; ///< Bits 14:14
197 UINT32 Cl22 : 1; ///< Bits 15:15
198 UINT32 Cl23 : 1; ///< Bits 16:16
199 UINT32 Cl24 : 1; ///< Bits 17:17
200 UINT32 Cl25 : 1; ///< Bits 18:18
201 UINT32 Cl26 : 1; ///< Bits 19:19
202 UINT32 Cl27 : 1; ///< Bits 20:20
203 UINT32 Cl28 : 1; ///< Bits 21:21
204 UINT32 Cl29 : 1; ///< Bits 22:22
205 UINT32 Cl30 : 1; ///< Bits 23:23
206 UINT32 Cl31 : 1; ///< Bits 24:24
207 UINT32 Cl32 : 1; ///< Bits 25:25
208 UINT32 Cl33 : 1; ///< Bits 26:26
209 UINT32 Cl34 : 1; ///< Bits 27:27
210 UINT32 Cl35 : 1; ///< Bits 28:28
211 UINT32 Cl36 : 1; ///< Bits 29:29
212 UINT32 Reserved : 1; ///< Bits 30:30
213 UINT32 ClRange : 1; ///< Bits 31:31
214 } Bits;
215 struct {
216 UINT32 Cl23 : 1; ///< Bits 0:0
217 UINT32 Cl24 : 1; ///< Bits 1:1
218 UINT32 Cl25 : 1; ///< Bits 2:2
219 UINT32 Cl26 : 1; ///< Bits 3:3
220 UINT32 Cl27 : 1; ///< Bits 4:4
221 UINT32 Cl28 : 1; ///< Bits 5:5
222 UINT32 Cl29 : 1; ///< Bits 6:6
223 UINT32 Cl30 : 1; ///< Bits 7:7
224 UINT32 Cl31 : 1; ///< Bits 8:8
225 UINT32 Cl32 : 1; ///< Bits 9:9
226 UINT32 Cl33 : 1; ///< Bits 10:10
227 UINT32 Cl34 : 1; ///< Bits 11:11
228 UINT32 Cl35 : 1; ///< Bits 12:12
229 UINT32 Cl36 : 1; ///< Bits 13:13
230 UINT32 Cl37 : 1; ///< Bits 14:14
231 UINT32 Cl38 : 1; ///< Bits 15:15
232 UINT32 Cl39 : 1; ///< Bits 16:16
233 UINT32 Cl40 : 1; ///< Bits 17:17
234 UINT32 Cl41 : 1; ///< Bits 18:18
235 UINT32 Cl42 : 1; ///< Bits 19:19
236 UINT32 Cl43 : 1; ///< Bits 20:20
237 UINT32 Cl44 : 1; ///< Bits 21:21
238 UINT32 Cl45 : 1; ///< Bits 22:22
239 UINT32 Cl46 : 1; ///< Bits 23:23
240 UINT32 Cl47 : 1; ///< Bits 24:24
241 UINT32 Cl48 : 1; ///< Bits 25:25
242 UINT32 Cl49 : 1; ///< Bits 26:26
243 UINT32 Cl50 : 1; ///< Bits 27:27
244 UINT32 Cl51 : 1; ///< Bits 28:28
245 UINT32 Cl52 : 1; ///< Bits 29:29
246 UINT32 Reserved : 1; ///< Bits 30:30
247 UINT32 ClRange : 1; ///< Bits 31:31
248 } HighRangeBits;
249 UINT32 Data;
250 UINT16 Data16[2];
251 UINT8 Data8[4];
252 } SPD4_CAS_LATENCIES_SUPPORTED_STRUCT;
253
254 typedef union {
255 struct {
256 UINT8 tAAmin : 8; ///< Bits 7:0
257 } Bits;
258 UINT8 Data;
259 } SPD4_TAA_MIN_MTB_STRUCT;
260
261 typedef union {
262 struct {
263 UINT8 tRCDmin : 8; ///< Bits 7:0
264 } Bits;
265 UINT8 Data;
266 } SPD4_TRCD_MIN_MTB_STRUCT;
267
268 typedef union {
269 struct {
270 UINT8 tRPmin : 8; ///< Bits 7:0
271 } Bits;
272 UINT8 Data;
273 } SPD4_TRP_MIN_MTB_STRUCT;
274
275 typedef union {
276 struct {
277 UINT8 tRASminUpper : 4; ///< Bits 3:0
278 UINT8 tRCminUpper : 4; ///< Bits 7:4
279 } Bits;
280 UINT8 Data;
281 } SPD4_TRAS_TRC_MIN_MTB_STRUCT;
282
283 typedef union {
284 struct {
285 UINT8 tRASmin : 8; ///< Bits 7:0
286 } Bits;
287 UINT8 Data;
288 } SPD4_TRAS_MIN_MTB_STRUCT;
289
290 typedef union {
291 struct {
292 UINT8 tRCmin : 8; ///< Bits 7:0
293 } Bits;
294 UINT8 Data;
295 } SPD4_TRC_MIN_MTB_STRUCT;
296
297 typedef union {
298 struct {
299 UINT16 tRFCmin : 16; ///< Bits 15:0
300 } Bits;
301 UINT16 Data;
302 UINT8 Data8[2];
303 } SPD4_TRFC_MIN_MTB_STRUCT;
304
305 typedef union {
306 struct {
307 UINT8 tFAWminUpper : 4; ///< Bits 3:0
308 UINT8 Reserved : 4; ///< Bits 7:4
309 } Bits;
310 UINT8 Data;
311 } SPD4_TFAW_MIN_MTB_UPPER_STRUCT;
312
313 typedef union {
314 struct {
315 UINT8 tFAWmin : 8; ///< Bits 7:0
316 } Bits;
317 UINT8 Data;
318 } SPD4_TFAW_MIN_MTB_STRUCT;
319
320 typedef union {
321 struct {
322 UINT8 tRRDmin : 8; ///< Bits 7:0
323 } Bits;
324 UINT8 Data;
325 } SPD4_TRRD_MIN_MTB_STRUCT;
326
327 typedef union {
328 struct {
329 UINT8 tCCDmin : 8; ///< Bits 7:0
330 } Bits;
331 UINT8 Data;
332 } SPD4_TCCD_MIN_MTB_STRUCT;
333
334 typedef union {
335 struct {
336 UINT8 tWRminMostSignificantNibble : 4; ///< Bits 3:0
337 UINT8 Reserved : 4; ///< Bits 7:4
338 } Bits;
339 UINT8 Data;
340 } SPD4_TWR_UPPER_NIBBLE_STRUCT;
341
342 typedef union {
343 struct {
344 UINT8 tWRmin : 8; ///< Bits 7:0
345 } Bits;
346 UINT8 Data;
347 } SPD4_TWR_MIN_MTB_STRUCT;
348
349 typedef union {
350 struct {
351 UINT8 tWTR_SminMostSignificantNibble : 4; ///< Bits 3:0
352 UINT8 tWTR_LminMostSignificantNibble : 4; ///< Bits 7:4
353 } Bits;
354 UINT8 Data;
355 } SPD4_TWTR_UPPER_NIBBLE_STRUCT;
356
357 typedef union {
358 struct {
359 UINT8 tWTRmin : 8; ///< Bits 7:0
360 } Bits;
361 UINT8 Data;
362 } SPD4_TWTR_MIN_MTB_STRUCT;
363
364 typedef union {
365 struct {
366 UINT8 BitOrderatSDRAM : 5; ///< Bits 4:0
367 UINT8 WiredtoUpperLowerNibble : 1; ///< Bits 5:5
368 UINT8 PackageRankMap : 2; ///< Bits 7:6
369 } Bits;
370 UINT8 Data;
371 } SPD4_CONNECTOR_BIT_MAPPING_BYTE_STRUCT;
372
373 typedef union {
374 struct {
375 INT8 tCCDminFine : 8; ///< Bits 7:0
376 } Bits;
377 INT8 Data;
378 } SPD4_TCCD_MIN_FTB_STRUCT;
379
380 typedef union {
381 struct {
382 INT8 tRRDminFine : 8; ///< Bits 7:0
383 } Bits;
384 INT8 Data;
385 } SPD4_TRRD_MIN_FTB_STRUCT;
386
387 typedef union {
388 struct {
389 INT8 tRCminFine : 8; ///< Bits 7:0
390 } Bits;
391 INT8 Data;
392 } SPD4_TRC_MIN_FTB_STRUCT;
393
394 typedef union {
395 struct {
396 INT8 tRPminFine : 8; ///< Bits 7:0
397 } Bits;
398 INT8 Data;
399 } SPD4_TRP_MIN_FTB_STRUCT;
400
401 typedef union {
402 struct {
403 INT8 tRCDminFine : 8; ///< Bits 7:0
404 } Bits;
405 INT8 Data;
406 } SPD4_TRCD_MIN_FTB_STRUCT;
407
408 typedef union {
409 struct {
410 INT8 tAAminFine : 8; ///< Bits 7:0
411 } Bits;
412 INT8 Data;
413 } SPD4_TAA_MIN_FTB_STRUCT;
414
415 typedef union {
416 struct {
417 INT8 tCKmaxFine : 8; ///< Bits 7:0
418 } Bits;
419 INT8 Data;
420 } SPD4_TCK_MAX_FTB_STRUCT;
421
422 typedef union {
423 struct {
424 INT8 tCKminFine : 8; ///< Bits 7:0
425 } Bits;
426 INT8 Data;
427 } SPD4_TCK_MIN_FTB_STRUCT;
428
429 typedef union {
430 struct {
431 UINT8 Height : 5; ///< Bits 4:0
432 UINT8 RawCardExtension : 3; ///< Bits 7:5
433 } Bits;
434 UINT8 Data;
435 } SPD4_UNBUF_MODULE_NOMINAL_HEIGHT;
436
437 typedef union {
438 struct {
439 UINT8 FrontThickness : 4; ///< Bits 3:0
440 UINT8 BackThickness : 4; ///< Bits 7:4
441 } Bits;
442 UINT8 Data;
443 } SPD4_UNBUF_MODULE_NOMINAL_THICKNESS;
444
445 typedef union {
446 struct {
447 UINT8 Card : 5; ///< Bits 4:0
448 UINT8 Revision : 2; ///< Bits 6:5
449 UINT8 Extension : 1; ///< Bits 7:7
450 } Bits;
451 UINT8 Data;
452 } SPD4_UNBUF_REFERENCE_RAW_CARD;
453
454 typedef union {
455 struct {
456 UINT8 MappingRank1 : 1; ///< Bits 0:0
457 UINT8 Reserved : 7; ///< Bits 7:1
458 } Bits;
459 UINT8 Data;
460 } SPD4_UNBUF_ADDRESS_MAPPING;
461
462 typedef union {
463 struct {
464 UINT8 Height : 5; ///< Bits 4:0
465 UINT8 Reserved : 3; ///< Bits 7:5
466 } Bits;
467 UINT8 Data;
468 } SPD4_RDIMM_MODULE_NOMINAL_HEIGHT;
469
470 typedef union {
471 struct {
472 UINT8 FrontThickness : 4; ///< Bits 3:0
473 UINT8 BackThickness : 4; ///< Bits 7:4
474 } Bits;
475 UINT8 Data;
476 } SPD4_RDIMM_MODULE_NOMINAL_THICKNESS;
477
478 typedef union {
479 struct {
480 UINT8 Card : 5; ///< Bits 4:0
481 UINT8 Revision : 2; ///< Bits 6:5
482 UINT8 Extension : 1; ///< Bits 7:7
483 } Bits;
484 UINT8 Data;
485 } SPD4_RDIMM_REFERENCE_RAW_CARD;
486
487 typedef union {
488 struct {
489 UINT8 RegisterCount : 2; ///< Bits 1:0
490 UINT8 DramRowCount : 2; ///< Bits 3:2
491 UINT8 RegisterType : 4; ///< Bits 7:4
492 } Bits;
493 UINT8 Data;
494 } SPD4_RDIMM_MODULE_ATTRIBUTES;
495
496 typedef union {
497 struct {
498 UINT8 HeatSpreaderThermalCharacteristics : 7; ///< Bits 6:0
499 UINT8 HeatSpreaderSolution : 1; ///< Bits 7:7
500 } Bits;
501 UINT8 Data;
502 } SPD4_RDIMM_THERMAL_HEAT_SPREADER_SOLUTION;
503
504 typedef union {
505 struct {
506 UINT16 ContinuationCount : 7; ///< Bits 6:0
507 UINT16 ContinuationParity : 1; ///< Bits 7:7
508 UINT16 LastNonZeroByte : 8; ///< Bits 15:8
509 } Bits;
510 UINT16 Data;
511 UINT8 Data8[2];
512 } SPD4_MANUFACTURER_ID_CODE;
513
514 typedef union {
515 struct {
516 UINT8 RegisterRevisionNumber; ///< Bits 7:0
517 } Bits;
518 UINT8 Data;
519 } SPD4_RDIMM_REGISTER_REVISION_NUMBER;
520
521 typedef union {
522 struct {
523 UINT8 Rank1Mapping : 1; ///< Bits 0:0
524 UINT8 Reserved : 7; ///< Bits 7:1
525 } Bits;
526 UINT8 Data;
527 } SPD4_RDIMM_ADDRESS_MAPPING_FROM_REGISTER_TO_DRAM;
528
529 typedef union {
530 struct {
531 UINT8 Cke : 2; ///< Bits 1:0
532 UINT8 Odt : 2; ///< Bits 3:2
533 UINT8 CommandAddress : 2; ///< Bits 5:4
534 UINT8 ChipSelect : 2; ///< Bits 7:6
535 } Bits;
536 UINT8 Data;
537 } SPD4_RDIMM_REGISTER_OUTPUT_DRIVE_STRENGTH_FOR_CONTROL_COMMAND_ADDRESS;
538
539 typedef union {
540 struct {
541 UINT8 Y0Y2 : 2; ///< Bits 1:0
542 UINT8 Y1Y3 : 2; ///< Bits 3:2
543 UINT8 Reserved0 : 2; ///< Bits 5:4
544 UINT8 RcdOutputSlewRateControl : 1; ///< Bits 6:6
545 UINT8 Reserved1 : 1; ///< Bits 7:7
546 } Bits;
547 UINT8 Data;
548 } SPD4_RDIMM_REGISTER_OUTPUT_DRIVE_STRENGTH_FOR_CLOCK;
549
550 typedef union {
551 struct {
552 UINT8 Height : 5; ///< Bits 4:0
553 UINT8 Reserved : 3; ///< Bits 7:5
554 } Bits;
555 UINT8 Data;
556 } SPD4_LRDIMM_MODULE_NOMINAL_HEIGHT;
557
558 typedef union {
559 struct {
560 UINT8 FrontThickness : 4; ///< Bits 3:0
561 UINT8 BackThickness : 4; ///< Bits 7:4
562 } Bits;
563 UINT8 Data;
564 } SPD4_LRDIMM_MODULE_NOMINAL_THICKNESS;
565
566 typedef union {
567 struct {
568 UINT8 Card : 5; ///< Bits 4:0
569 UINT8 Revision : 2; ///< Bits 6:5
570 UINT8 Extension : 1; ///< Bits 7:7
571 } Bits;
572 UINT8 Data;
573 } SPD4_LRDIMM_REFERENCE_RAW_CARD;
574
575 typedef union {
576 struct {
577 UINT8 RegisterCount : 2; ///< Bits 1:0
578 UINT8 DramRowCount : 2; ///< Bits 3:2
579 UINT8 RegisterType : 4; ///< Bits 7:4
580 } Bits;
581 UINT8 Data;
582 } SPD4_LRDIMM_MODULE_ATTRIBUTES;
583
584 typedef union {
585 struct {
586 UINT8 HeatSpreaderThermalCharacteristics : 7; ///< Bits 6:0
587 UINT8 HeatSpreaderSolution : 1; ///< Bits 7:7
588 } Bits;
589 UINT8 Data;
590 } SPD4_LRDIMM_THERMAL_HEAT_SPREADER_SOLUTION;
591
592 typedef union {
593 struct {
594 UINT8 RegisterRevisionNumber; ///< Bits 7:0
595 } Bits;
596 UINT8 Data;
597 } SPD4_LRDIMM_REGISTER_REVISION_NUMBER;
598
599 typedef union {
600 struct {
601 UINT8 Rank1Mapping : 1; ///< Bits 0:0
602 UINT8 Reserved : 7; ///< Bits 7:1
603 } Bits;
604 UINT8 Data;
605 } SPD4_LRDIMM_ADDRESS_MAPPING_FROM_REGISTER_TO_DRAM;
606
607 typedef union {
608 struct {
609 UINT8 Cke : 2; ///< Bits 1:0
610 UINT8 Odt : 2; ///< Bits 3:2
611 UINT8 CommandAddress : 2; ///< Bits 5:4
612 UINT8 ChipSelect : 2; ///< Bits 7:6
613 } Bits;
614 UINT8 Data;
615 } SPD4_LRDIMM_REGISTER_OUTPUT_DRIVE_STRENGTH_FOR_CONTROL_COMMAND_ADDRESS;
616
617 typedef union {
618 struct {
619 UINT8 Y0Y2 : 2; ///< Bits 1:0
620 UINT8 Y1Y3 : 2; ///< Bits 3:2
621 UINT8 Reserved0 : 2; ///< Bits 5:4
622 UINT8 RcdOutputSlewRateControl : 1; ///< Bits 6:6
623 UINT8 Reserved1 : 1; ///< Bits 7:7
624 } Bits;
625 UINT8 Data;
626 } SPD4_LRDIMM_REGISTER_OUTPUT_DRIVE_STRENGTH_FOR_CLOCK;
627
628 typedef struct {
629 UINT8 DataBufferRevisionNumber;
630 } SPD4_LRDIMM_DATA_BUFFER_REVISION_NUMBER;
631
632 typedef union {
633 struct {
634 UINT8 DramVrefDQForPackageRank0 : 6; ///< Bits 5:0
635 UINT8 Reserved : 2; ///< Bits 7:6
636 } Bits;
637 UINT8 Data;
638 } SPD4_LRDIMM_DRAM_VREFDQ_FOR_PACKAGE_RANK;
639
640 typedef struct {
641 UINT8 DataBufferVrefDQforDramInterface;
642 } SPD4_LRDIMM_DATA_BUFFER_VREFDQ_FOR_DRAM_INTERFACE;
643
644 typedef union {
645 struct {
646 UINT8 DramInterfaceMdqDriveStrength : 4; ///< Bits 3:0
647 UINT8 DramInterfaceMdqReadTerminationStrength : 4; ///< Bits 7:4
648 } Bits;
649 UINT8 Data;
650 } SPD4_LRDIMM_DATA_BUFFER_MDQ_DRIVE_STRENGTH_RTT_FOR_DATA_RATE;
651
652 typedef union {
653 struct {
654 UINT8 DataRateLe1866 : 2; ///< Bits 1:0
655 UINT8 DataRateLe2400 : 2; ///< Bits 3:2
656 UINT8 DataRateLe3200 : 2; ///< Bits 5:4
657 UINT8 Reserved : 2; ///< Bits 7:6
658 } Bits;
659 UINT8 Data;
660 } SPD4_LRDIMM_DRAM_DRIVE_STRENGTH;
661
662 typedef union {
663 struct {
664 UINT8 Rtt_Nom : 3; ///< Bits 2:0
665 UINT8 Rtt_WR : 3; ///< Bits 5:3
666 UINT8 Reserved : 2; ///< Bits 7:6
667 } Bits;
668 UINT8 Data;
669 } SPD4_LRDIMM_DRAM_ODT_RTT_WR_RTT_NOM_FOR_DATA_RATE;
670
671 typedef union {
672 struct {
673 UINT8 PackageRanks0_1 : 3; ///< Bits 2:0
674 UINT8 PackageRanks2_3 : 3; ///< Bits 5:3
675 UINT8 Reserved : 2; ///< Bits 7:6
676 } Bits;
677 UINT8 Data;
678 } SPD4_LRDIMM_DRAM_ODT_RTT_PARK_FOR_DATA_RATE;
679
680 typedef union {
681 struct {
682 UINT8 Rank0 : 1; ///< Bits 0:0
683 UINT8 Rank1 : 1; ///< Bits 1:1
684 UINT8 Rank2 : 1; ///< Bits 2:2
685 UINT8 Rank3 : 1; ///< Bits 3:3
686 UINT8 DataBuffer : 1; ///< Bits 4:4
687 UINT8 Reserved : 3; ///< Bits 7:5
688 } Bits;
689 UINT8 Data;
690 } SPD4_LRDIMM_DATA_BUFFER_VREFDQ_FOR_DRAM_INTERFACE_RANGE;
691
692 typedef union {
693 struct {
694 UINT8 DataBufferGainAdjustment : 1; ///< Bits 0:0
695 UINT8 DataBufferDfe : 1; ///< Bits 1:1
696 UINT8 Reserved : 6; ///< Bits 7:2
697 } Bits;
698 UINT8 Data;
699 } SPD4_LRDIMM_DATA_BUFFER_DQ_DECISION_FEEDBACK_EQUALIZATION;
700
701 typedef UINT16 SPD4_NVDIMM_MODULE_PRODUCT_IDENTIFIER;
702
703 typedef union {
704 struct {
705 UINT16 ContinuationCount : 7; ///< Bits 6:0
706 UINT16 ContinuationParity : 1; ///< Bits 7:7
707 UINT16 LastNonZeroByte : 8; ///< Bits 15:8
708 } Bits;
709 UINT16 Data;
710 UINT8 Data8[2];
711 } SPD4_NVDIMM_SUBSYSTEM_CONTROLLER_MANUFACTURER_ID_CODE;
712
713 typedef UINT16 SPD4_NVDIMM_SUBSYSTEM_CONTROLLER_IDENTIFIER;
714
715 typedef UINT8 SPD4_NVDIMM_SUBSYSTEM_CONTROLLER_REVISION_CODE;
716
717 typedef union {
718 struct {
719 UINT8 Card : 5; ///< Bits 4:0
720 UINT8 Revision : 2; ///< Bits 6:5
721 UINT8 Extension : 1; ///< Bits 7:7
722 } Bits;
723 UINT8 Data;
724 } SPD4_NVDIMM_REFERENCE_RAW_CARD;
725
726 typedef union {
727 struct {
728 UINT8 Reserved : 4; ///< Bits 3:0
729 UINT8 Extension : 4; ///< Bits 7:4
730 } Bits;
731 UINT8 Data;
732 } SPD4_NVDIMM_MODULE_CHARACTERISTICS;
733
734 typedef struct {
735 UINT8 Reserved;
736 UINT8 MediaType;
737 } SPD4_NVDIMM_HYBRID_MODULE_MEDIA_TYPES;
738
739 typedef UINT8 SPD4_NVDIMM_MAXIMUM_NONVOLATILE_MEMORY_INITIALIZATION_TIME;
740
741 typedef union {
742 struct {
743 UINT16 FunctionInterface : 5; ///< Bits 4:0
744 UINT16 FunctionClass : 5; ///< Bits 9:5
745 UINT16 BlockOffset : 4; ///< Bits 13:10
746 UINT16 Reserved : 1; ///< Bits 14:14
747 UINT16 Implemented : 1; ///< Bits 15:15
748 } Bits;
749 UINT16 Data;
750 UINT8 Data8[2];
751 } SPD4_NVDIMM_FUNCTION_INTERFACE_DESCRIPTOR;
752
753 typedef struct {
754 UINT8 Year; ///< Year represented in BCD (00h = 2000)
755 UINT8 Week; ///< Year represented in BCD (47h = week 47)
756 } SPD4_MANUFACTURING_DATE;
757
758 typedef union {
759 UINT32 Data;
760 UINT16 SerialNumber16[2];
761 UINT8 SerialNumber8[4];
762 } SPD4_MANUFACTURER_SERIAL_NUMBER;
763
764 typedef struct {
765 UINT8 Location; ///< Module Manufacturing Location
766 } SPD4_MANUFACTURING_LOCATION;
767
768 typedef struct {
769 SPD4_MANUFACTURER_ID_CODE IdCode; ///< Module Manufacturer ID Code
770 SPD4_MANUFACTURING_LOCATION Location; ///< Module Manufacturing Location
771 SPD4_MANUFACTURING_DATE Date; ///< Module Manufacturing Year, in BCD (range: 2000-2255)
772 SPD4_MANUFACTURER_SERIAL_NUMBER SerialNumber; ///< Module Serial Number
773 } SPD4_UNIQUE_MODULE_ID;
774
775 typedef union {
776 UINT16 Crc[1];
777 UINT8 Data8[2];
778 } SPD4_CYCLIC_REDUNDANCY_CODE;
779
780 typedef struct {
781 SPD4_DEVICE_DESCRIPTION_STRUCT Description; ///< 0 Number of Serial PD Bytes Written / SPD Device Size / CRC Coverage 1, 2
782 SPD4_REVISION_STRUCT Revision; ///< 1 SPD Revision
783 SPD4_DRAM_DEVICE_TYPE_STRUCT DramDeviceType; ///< 2 DRAM Device Type
784 SPD4_MODULE_TYPE_STRUCT ModuleType; ///< 3 Module Type
785 SPD4_SDRAM_DENSITY_BANKS_STRUCT SdramDensityAndBanks; ///< 4 SDRAM Density and Banks
786 SPD4_SDRAM_ADDRESSING_STRUCT SdramAddressing; ///< 5 SDRAM Addressing
787 SPD4_PRIMARY_SDRAM_PACKAGE_TYPE_STRUCT PrimarySdramPackageType; ///< 6 Primary SDRAM Package Type
788 SPD4_SDRAM_OPTIONAL_FEATURES_STRUCT SdramOptionalFeatures; ///< 7 SDRAM Optional Features
789 SPD4_SDRAM_THERMAL_REFRESH_STRUCT ThermalAndRefreshOptions; ///< 8 SDRAM Thermal and Refresh Options
790 SPD4_OTHER_SDRAM_OPTIONAL_FEATURES_STRUCT OtherOptionalFeatures; ///< 9 Other SDRAM Optional Features
791 SPD4_SECONDARY_SDRAM_PACKAGE_TYPE_STRUCT SecondarySdramPackageType;///< 10 Secondary SDRAM Package Type
792 SPD4_MODULE_NOMINAL_VOLTAGE_STRUCT ModuleNominalVoltage; ///< 11 Module Nominal Voltage, VDD
793 SPD4_MODULE_ORGANIZATION_STRUCT ModuleOrganization; ///< 12 Module Organization
794 SPD4_MODULE_MEMORY_BUS_WIDTH_STRUCT ModuleMemoryBusWidth; ///< 13 Module Memory Bus Width
795 SPD4_MODULE_THERMAL_SENSOR_STRUCT ModuleThermalSensor; ///< 14 Module Thermal Sensor
796 SPD4_EXTENDED_MODULE_TYPE_STRUCT ExtendedModuleType; ///< 15 Extended Module Type
797 UINT8 Reserved0; ///< 16 Reserved
798 SPD4_TIMEBASE_STRUCT Timebase; ///< 17 Timebases
799 SPD4_TCK_MIN_MTB_STRUCT tCKmin; ///< 18 SDRAM Minimum Cycle Time (tCKmin)
800 SPD4_TCK_MAX_MTB_STRUCT tCKmax; ///< 19 SDRAM Maximum Cycle Time (tCKmax)
801 SPD4_CAS_LATENCIES_SUPPORTED_STRUCT CasLatencies; ///< 20-23 CAS Latencies Supported
802 SPD4_TAA_MIN_MTB_STRUCT tAAmin; ///< 24 Minimum CAS Latency Time (tAAmin)
803 SPD4_TRCD_MIN_MTB_STRUCT tRCDmin; ///< 25 Minimum RAS# to CAS# Delay Time (tRCDmin)
804 SPD4_TRP_MIN_MTB_STRUCT tRPmin; ///< 26 Minimum Row Precharge Delay Time (tRPmin)
805 SPD4_TRAS_TRC_MIN_MTB_STRUCT tRASMintRCMinUpper; ///< 27 Upper Nibbles for tRAS and tRC
806 SPD4_TRAS_MIN_MTB_STRUCT tRASmin; ///< 28 Minimum Active to Precharge Delay Time (tRASmin), Least Significant Byte
807 SPD4_TRC_MIN_MTB_STRUCT tRCmin; ///< 29 Minimum Active to Active/Refresh Delay Time (tRCmin), Least Significant Byte
808 SPD4_TRFC_MIN_MTB_STRUCT tRFC1min; ///< 30-31 Minimum Refresh Recovery Delay Time (tRFC1min)
809 SPD4_TRFC_MIN_MTB_STRUCT tRFC2min; ///< 32-33 Minimum Refresh Recovery Delay Time (tRFC2min)
810 SPD4_TRFC_MIN_MTB_STRUCT tRFC4min; ///< 34-35 Minimum Refresh Recovery Delay Time (tRFC4min)
811 SPD4_TFAW_MIN_MTB_UPPER_STRUCT tFAWMinUpper; ///< 36 Upper Nibble for tFAW
812 SPD4_TFAW_MIN_MTB_STRUCT tFAWmin; ///< 37 Minimum Four Activate Window Delay Time (tFAWmin)
813 SPD4_TRRD_MIN_MTB_STRUCT tRRD_Smin; ///< 38 Minimum Activate to Activate Delay Time (tRRD_Smin), different bank group
814 SPD4_TRRD_MIN_MTB_STRUCT tRRD_Lmin; ///< 39 Minimum Activate to Activate Delay Time (tRRD_Lmin), same bank group
815 SPD4_TCCD_MIN_MTB_STRUCT tCCD_Lmin; ///< 40 Minimum CAS to CAS Delay Time (tCCD_Lmin), Same Bank Group
816 SPD4_TWR_UPPER_NIBBLE_STRUCT tWRUpperNibble; ///< 41 Upper Nibble for tWRmin
817 SPD4_TWR_MIN_MTB_STRUCT tWRmin; ///< 42 Minimum Write Recovery Time (tWRmin)
818 SPD4_TWTR_UPPER_NIBBLE_STRUCT tWTRUpperNibble; ///< 43 Upper Nibbles for tWTRmin
819 SPD4_TWTR_MIN_MTB_STRUCT tWTR_Smin; ///< 44 Minimum Write to Read Time (tWTR_Smin), Different Bank Group
820 SPD4_TWTR_MIN_MTB_STRUCT tWTR_Lmin; ///< 45 Minimum Write to Read Time (tWTR_Lmin), Same Bank Group
821 UINT8 Reserved1[59 - 46 + 1]; ///< 46-59 Reserved
822 SPD4_CONNECTOR_BIT_MAPPING_BYTE_STRUCT BitMapping[77 - 60 + 1]; ///< 60-77 Connector to SDRAM Bit Mapping
823 UINT8 Reserved2[116 - 78 + 1]; ///< 78-116 Reserved
824 SPD4_TCCD_MIN_FTB_STRUCT tCCD_LminFine; ///< 117 Fine Offset for Minimum CAS to CAS Delay Time (tCCD_Lmin), same bank group
825 SPD4_TRRD_MIN_FTB_STRUCT tRRD_LminFine; ///< 118 Fine Offset for Minimum Activate to Activate Delay Time (tRRD_Lmin), different bank group
826 SPD4_TRRD_MIN_FTB_STRUCT tRRD_SminFine; ///< 119 Fine Offset for Minimum Activate to Activate Delay Time (tRRD_Smin), same bank group
827 SPD4_TRC_MIN_FTB_STRUCT tRCminFine; ///< 120 Fine Offset for Minimum Active to Active/Refresh Delay Time (tRCmin)
828 SPD4_TRP_MIN_FTB_STRUCT tRPminFine; ///< 121 Fine Offset for Minimum Row Precharge Delay Time (tRPabmin)
829 SPD4_TRCD_MIN_FTB_STRUCT tRCDminFine; ///< 122 Fine Offset for Minimum RAS# to CAS# Delay Time (tRCDmin)
830 SPD4_TAA_MIN_FTB_STRUCT tAAminFine; ///< 123 Fine Offset for Minimum CAS Latency Time (tAAmin)
831 SPD4_TCK_MAX_FTB_STRUCT tCKmaxFine; ///< 124 Fine Offset for SDRAM Minimum Cycle Time (tCKmax)
832 SPD4_TCK_MIN_FTB_STRUCT tCKminFine; ///< 125 Fine Offset for SDRAM Maximum Cycle Time (tCKmin)
833 SPD4_CYCLIC_REDUNDANCY_CODE Crc; ///< 126-127 Cyclical Redundancy Code (CRC)
834 } SPD4_BASE_SECTION;
835
836 typedef struct {
837 SPD4_UNBUF_MODULE_NOMINAL_HEIGHT ModuleNominalHeight; ///< 128 Module Nominal Height
838 SPD4_UNBUF_MODULE_NOMINAL_THICKNESS ModuleMaximumThickness; ///< 129 Module Maximum Thickness
839 SPD4_UNBUF_REFERENCE_RAW_CARD ReferenceRawCardUsed; ///< 130 Reference Raw Card Used
840 SPD4_UNBUF_ADDRESS_MAPPING AddressMappingEdgeConn; ///< 131 Address Mapping from Edge Connector to DRAM
841 UINT8 Reserved[253 - 132 + 1]; ///< 132-253 Reserved
842 SPD4_CYCLIC_REDUNDANCY_CODE Crc; ///< 254-255 Cyclical Redundancy Code (CRC)
843 } SPD4_MODULE_UNBUFFERED;
844
845 typedef struct {
846 SPD4_RDIMM_MODULE_NOMINAL_HEIGHT ModuleNominalHeight; ///< 128 Module Nominal Height
847 SPD4_RDIMM_MODULE_NOMINAL_THICKNESS ModuleMaximumThickness; ///< 129 Module Maximum Thickness
848 SPD4_RDIMM_REFERENCE_RAW_CARD ReferenceRawCardUsed; ///< 130 Reference Raw Card Used
849 SPD4_RDIMM_MODULE_ATTRIBUTES DimmModuleAttributes; ///< 131 DIMM Module Attributes
850 SPD4_RDIMM_THERMAL_HEAT_SPREADER_SOLUTION DimmThermalHeatSpreaderSolution; ///< 132 RDIMM Thermal Heat Spreader Solution
851 SPD4_MANUFACTURER_ID_CODE RegisterManufacturerIdCode; ///< 133-134 Register Manufacturer ID Code
852 SPD4_RDIMM_REGISTER_REVISION_NUMBER RegisterRevisionNumber; ///< 135 Register Revision Number
853 SPD4_RDIMM_ADDRESS_MAPPING_FROM_REGISTER_TO_DRAM AddressMappingFromRegisterToDRAM; ///< 136 Address Mapping from Register to DRAM
854 SPD4_RDIMM_REGISTER_OUTPUT_DRIVE_STRENGTH_FOR_CONTROL_COMMAND_ADDRESS RegisterOutputDriveStrengthForControlCommandAddress; ///< 137 Register Output Drive Strength for Control and Command Address
855 SPD4_RDIMM_REGISTER_OUTPUT_DRIVE_STRENGTH_FOR_CLOCK RegisterOutputDriveStrengthForClock; ///< 138 Register Output Drive Strength for Clock
856 UINT8 Reserved[253 - 139 + 1]; ///< 253-139 Reserved
857 SPD4_CYCLIC_REDUNDANCY_CODE Crc; ///< 254-255 Cyclical Redundancy Code (CRC)
858 } SPD4_MODULE_REGISTERED;
859
860 typedef struct {
861 SPD4_LRDIMM_MODULE_NOMINAL_HEIGHT ModuleNominalHeight; ///< 128 Module Nominal Height
862 SPD4_LRDIMM_MODULE_NOMINAL_THICKNESS ModuleMaximumThickness; ///< 129 Module Maximum Thickness
863 SPD4_LRDIMM_REFERENCE_RAW_CARD ReferenceRawCardUsed; ///< 130 Reference Raw Card Used
864 SPD4_LRDIMM_MODULE_ATTRIBUTES DimmModuleAttributes; ///< 131 DIMM Module Attributes
865 SPD4_LRDIMM_THERMAL_HEAT_SPREADER_SOLUTION ThermalHeatSpreaderSolution; ///< 132 RDIMM Thermal Heat Spreader Solution
866 SPD4_MANUFACTURER_ID_CODE RegisterManufacturerIdCode; ///< 133-134 Register Manufacturer ID Code
867 SPD4_LRDIMM_REGISTER_REVISION_NUMBER RegisterRevisionNumber; ///< 135 Register Revision Number
868 SPD4_LRDIMM_ADDRESS_MAPPING_FROM_REGISTER_TO_DRAM AddressMappingFromRegisterToDram; ///< 136 Address Mapping from Register to DRAM
869 SPD4_LRDIMM_REGISTER_OUTPUT_DRIVE_STRENGTH_FOR_CONTROL_COMMAND_ADDRESS RegisterOutputDriveStrengthForControlCommandAddress; ///< 137 Register Output Drive Strength for Control and Command Address
870 SPD4_LRDIMM_REGISTER_OUTPUT_DRIVE_STRENGTH_FOR_CLOCK RegisterOutputDriveStrengthForClock; ///< 138 Register Output Drive Strength for Clock
871 SPD4_LRDIMM_DATA_BUFFER_REVISION_NUMBER DataBufferRevisionNumber; ///< 139 Data Buffer Revision Number
872 SPD4_LRDIMM_DRAM_VREFDQ_FOR_PACKAGE_RANK DramVrefDQForPackageRank0; ///< 140 DRAM VrefDQ for Package Rank 0
873 SPD4_LRDIMM_DRAM_VREFDQ_FOR_PACKAGE_RANK DramVrefDQForPackageRank1; ///< 141 DRAM VrefDQ for Package Rank 1
874 SPD4_LRDIMM_DRAM_VREFDQ_FOR_PACKAGE_RANK DramVrefDQForPackageRank2; ///< 142 DRAM VrefDQ for Package Rank 2
875 SPD4_LRDIMM_DRAM_VREFDQ_FOR_PACKAGE_RANK DramVrefDQForPackageRank3; ///< 143 DRAM VrefDQ for Package Rank 3
876 SPD4_LRDIMM_DATA_BUFFER_VREFDQ_FOR_DRAM_INTERFACE DataBufferVrefDQForDramInterface; ///< 144 Data Buffer VrefDQ for DRAM Interface
877 SPD4_LRDIMM_DATA_BUFFER_MDQ_DRIVE_STRENGTH_RTT_FOR_DATA_RATE DataBufferMdqDriveStrengthRttForDataRateLe1866; ///< 145 Data Buffer MDQ Drive Strength and RTT for data rate <= 1866
878 SPD4_LRDIMM_DATA_BUFFER_MDQ_DRIVE_STRENGTH_RTT_FOR_DATA_RATE DataBufferMdqDriveStrengthRttForDataRateLe2400; ///< 146 Data Buffer MDQ Drive Strength and RTT for data rate <=2400
879 SPD4_LRDIMM_DATA_BUFFER_MDQ_DRIVE_STRENGTH_RTT_FOR_DATA_RATE DataBufferMdqDriveStrengthRttForDataRateLe3200; ///< 147 Data Buffer MDQ Drive Strength and RTT for data rate <=3200
880 SPD4_LRDIMM_DRAM_DRIVE_STRENGTH DramDriveStrength; ///< 148 DRAM Drive Strength
881 SPD4_LRDIMM_DRAM_ODT_RTT_WR_RTT_NOM_FOR_DATA_RATE DramOdtRttWrRttNomForDataRateLe1866; ///< 149 DRAM ODT (RTT_WR and RTT_NOM) for data rate <= 1866
882 SPD4_LRDIMM_DRAM_ODT_RTT_WR_RTT_NOM_FOR_DATA_RATE DramOdtRttWrRttNomForDataRateLe2400; ///< 150 DRAM ODT (RTT_WR and RTT_NOM) for data rate <= 2400
883 SPD4_LRDIMM_DRAM_ODT_RTT_WR_RTT_NOM_FOR_DATA_RATE DramOdtRttWrRttNomForDataRateLe3200; ///< 151 DRAM ODT (RTT_WR and RTT_NOM) for data rate <= 3200
884 SPD4_LRDIMM_DRAM_ODT_RTT_PARK_FOR_DATA_RATE DramOdtRttParkForDataRateLe1866; ///< 152 DRAM ODT (RTT_PARK) for data rate <= 1866
885 SPD4_LRDIMM_DRAM_ODT_RTT_PARK_FOR_DATA_RATE DramOdtRttParkForDataRateLe2400; ///< 153 DRAM ODT (RTT_PARK) for data rate <= 2400
886 SPD4_LRDIMM_DRAM_ODT_RTT_PARK_FOR_DATA_RATE DramOdtRttParkForDataRateLe3200; ///< 154 DRAM ODT (RTT_PARK) for data rate <= 3200
887 SPD4_LRDIMM_DATA_BUFFER_VREFDQ_FOR_DRAM_INTERFACE_RANGE DataBufferVrefDQForDramInterfaceRange; ///< 155 Data Buffer VrefDQ for DRAM Interface Range
888 SPD4_LRDIMM_DATA_BUFFER_DQ_DECISION_FEEDBACK_EQUALIZATION DataBufferDqDecisionFeedbackEqualization; ///< 156 Data Buffer DQ Decision Feedback Equalization
889 UINT8 Reserved[253 - 157 + 1]; ///< 253-132 Reserved
890 SPD4_CYCLIC_REDUNDANCY_CODE Crc; ///< 254-255 Cyclical Redundancy Code (CRC)
891 } SPD4_MODULE_LOADREDUCED;
892
893 typedef struct {
894 UINT8 Reserved0[191 - 128 + 1]; ///< 128-191 Reserved
895 SPD4_NVDIMM_MODULE_PRODUCT_IDENTIFIER ModuleProductIdentifier; ///< 192-193 Module Product Identifier
896 SPD4_NVDIMM_SUBSYSTEM_CONTROLLER_MANUFACTURER_ID_CODE SubsystemControllerManufacturerIdCode; ///< 194-195 Subsystem Controller Manufacturer's ID Code
897 SPD4_NVDIMM_SUBSYSTEM_CONTROLLER_IDENTIFIER SubsystemControllerIdentifier; ///< 196-197 Subsystem Controller Identifier
898 SPD4_NVDIMM_SUBSYSTEM_CONTROLLER_REVISION_CODE SubsystemControllerRevisionCode; ///< 198 Subsystem Controller Revision Code
899 SPD4_NVDIMM_REFERENCE_RAW_CARD ReferenceRawCardUsed; ///< 199 Reference Raw Card Used
900 SPD4_NVDIMM_MODULE_CHARACTERISTICS ModuleCharacteristics; ///< 200 Module Characteristics
901 SPD4_NVDIMM_HYBRID_MODULE_MEDIA_TYPES HybridModuleMediaTypes; ///< 201-202 Hybrid Module Media Types
902 SPD4_NVDIMM_MAXIMUM_NONVOLATILE_MEMORY_INITIALIZATION_TIME MaximumNonVolatileMemoryInitializationTime; ///< 203 Maximum Non-Volatile Memory Initialization Time
903 SPD4_NVDIMM_FUNCTION_INTERFACE_DESCRIPTOR FunctionInterfaceDescriptors[8]; ///< 204-219 Function Interface Descriptors
904 UINT8 Reserved[253 - 220 + 1]; ///< 220-253 Reserved
905 SPD4_CYCLIC_REDUNDANCY_CODE Crc; ///< 254-255 Cyclical Redundancy Code (CRC)
906 } SPD4_MODULE_NVDIMM;
907
908 typedef union {
909 SPD4_MODULE_UNBUFFERED Unbuffered; ///< 128-255 Unbuffered Memory Module Types
910 SPD4_MODULE_REGISTERED Registered; ///< 128-255 Registered Memory Module Types
911 SPD4_MODULE_LOADREDUCED LoadReduced; ///< 128-255 Load Reduced Memory Module Types
912 SPD4_MODULE_NVDIMM NonVolatile; ///< 128-255 Non-Volatile (NVDIMM-N) Hybrid Memory Parameters
913 } SPD4_MODULE_SPECIFIC;
914
915 typedef struct {
916 UINT8 ModulePartNumber[348 - 329 + 1]; ///< 329-348 Module Part Number
917 } SPD4_MODULE_PART_NUMBER;
918
919 typedef struct {
920 UINT8 ManufacturerSpecificData[381 - 353 + 1]; ///< 353-381 Manufacturer's Specific Data
921 } SPD4_MANUFACTURER_SPECIFIC;
922
923 typedef UINT8 SPD4_MODULE_REVISION_CODE;///< 349 Module Revision Code
924 typedef UINT8 SPD4_DRAM_STEPPING; ///< 352 Dram Stepping
925
926 typedef struct {
927 SPD4_UNIQUE_MODULE_ID ModuleId; ///< 320-328 Unique Module ID
928 SPD4_MODULE_PART_NUMBER ModulePartNumber; ///< 329-348 Module Part Number
929 SPD4_MODULE_REVISION_CODE ModuleRevisionCode; ///< 349 Module Revision Code
930 SPD4_MANUFACTURER_ID_CODE DramIdCode; ///< 350-351 Dram Manufacturer ID Code
931 SPD4_DRAM_STEPPING DramStepping; ///< 352 Dram Stepping
932 SPD4_MANUFACTURER_SPECIFIC ManufacturerSpecificData; ///< 353-381 Manufacturer's Specific Data
933 UINT8 Reserved[2]; ///< 382-383 Reserved
934 } SPD4_MANUFACTURING_DATA;
935
936 typedef struct {
937 UINT8 Reserved[511 - 384 + 1]; ///< 384-511 Unbuffered Memory Module Types
938 } SPD4_END_USER_SECTION;
939
940 ///
941 /// DDR4 Serial Presence Detect structure
942 ///
943 typedef struct {
944 SPD4_BASE_SECTION Base; ///< 0-127 Base Configuration and DRAM Parameters
945 SPD4_MODULE_SPECIFIC Module; ///< 128-255 Module-Specific Section
946 UINT8 Reserved[319 - 256 + 1]; ///< 256-319 Reserved
947 SPD4_MANUFACTURING_DATA ManufactureInfo; ///< 320-383 Manufacturing Information
948 SPD4_END_USER_SECTION EndUser; ///< 384-511 End User Programmable
949 } SPD_DDR4;
950
951 #pragma pack (pop)
952 #endif