xref: /illumos-gate/usr/src/test/util-tests/tests/libjedec/hex2spd/libjedec_hex2spd.h (revision 8119dad84d6416f13557b0ba8e2aaf9064cbcfd3)
1*8119dad8SRobert Mustacchi /*
2*8119dad8SRobert Mustacchi  * This file and its contents are supplied under the terms of the
3*8119dad8SRobert Mustacchi  * Common Development and Distribution License ("CDDL"), version 1.0.
4*8119dad8SRobert Mustacchi  * You may only use this file in accordance with the terms of version
5*8119dad8SRobert Mustacchi  * 1.0 of the CDDL.
6*8119dad8SRobert Mustacchi  *
7*8119dad8SRobert Mustacchi  * A full copy of the text of the CDDL should have accompanied this
8*8119dad8SRobert Mustacchi  * source.  A copy of the CDDL is also available via the Internet at
9*8119dad8SRobert Mustacchi  * http://www.illumos.org/license/CDDL.
10*8119dad8SRobert Mustacchi  */
11*8119dad8SRobert Mustacchi 
12*8119dad8SRobert Mustacchi /*
13*8119dad8SRobert Mustacchi  * Copyright 2024 Oxide Computer Company
14*8119dad8SRobert Mustacchi  */
15*8119dad8SRobert Mustacchi 
16*8119dad8SRobert Mustacchi #ifndef _LIBJEDEC_HEX2SPD_H
17*8119dad8SRobert Mustacchi #define	_LIBJEDEC_HEX2SPD_H
18*8119dad8SRobert Mustacchi 
19*8119dad8SRobert Mustacchi /*
20*8119dad8SRobert Mustacchi  * Common definitions for the hex2spd test.
21*8119dad8SRobert Mustacchi  */
22*8119dad8SRobert Mustacchi 
23*8119dad8SRobert Mustacchi #ifdef __cplusplus
24*8119dad8SRobert Mustacchi extern "C" {
25*8119dad8SRobert Mustacchi #endif
26*8119dad8SRobert Mustacchi 
27*8119dad8SRobert Mustacchi #include <libnvpair.h>
28*8119dad8SRobert Mustacchi #include <stdint.h>
29*8119dad8SRobert Mustacchi #include <stdbool.h>
30*8119dad8SRobert Mustacchi 
31*8119dad8SRobert Mustacchi /*
32*8119dad8SRobert Mustacchi  * This is an arbitrary value to give us an upper bound on the number of array
33*8119dad8SRobert Mustacchi  * entries that we'll support. Currently the largest array we have is 15 entries
34*8119dad8SRobert Mustacchi  * which is the DDR3 LRDIMM personality bytes.
35*8119dad8SRobert Mustacchi  */
36*8119dad8SRobert Mustacchi #define	HEX2SPD_ARR_MAX	16
37*8119dad8SRobert Mustacchi 
38*8119dad8SRobert Mustacchi /*
39*8119dad8SRobert Mustacchi  * Represents an individual check against a particular nvlist_t payload. The
40*8119dad8SRobert Mustacchi  * data type is the nvlist_t type of the key. The corresponding value will be
41*8119dad8SRobert Mustacchi  * used.
42*8119dad8SRobert Mustacchi  */
43*8119dad8SRobert Mustacchi typedef struct {
44*8119dad8SRobert Mustacchi 	const char *hs_key;
45*8119dad8SRobert Mustacchi 	data_type_t hs_type;
46*8119dad8SRobert Mustacchi 	union {
47*8119dad8SRobert Mustacchi 		uint32_t hs_u32;
48*8119dad8SRobert Mustacchi 		uint64_t hs_u64;
49*8119dad8SRobert Mustacchi 		const char *hs_str;
50*8119dad8SRobert Mustacchi 		bool hs_bool;
51*8119dad8SRobert Mustacchi 		struct {
52*8119dad8SRobert Mustacchi 			uint32_t ha_nval;
53*8119dad8SRobert Mustacchi 			uint8_t ha_vals[HEX2SPD_ARR_MAX];
54*8119dad8SRobert Mustacchi 		} hs_u8a;
55*8119dad8SRobert Mustacchi 		struct {
56*8119dad8SRobert Mustacchi 			uint32_t ha_nval;
57*8119dad8SRobert Mustacchi 			uint32_t ha_vals[HEX2SPD_ARR_MAX];
58*8119dad8SRobert Mustacchi 		} hs_u32a;
59*8119dad8SRobert Mustacchi 		struct {
60*8119dad8SRobert Mustacchi 			uint32_t ha_nval;
61*8119dad8SRobert Mustacchi 			uint64_t ha_vals[HEX2SPD_ARR_MAX];
62*8119dad8SRobert Mustacchi 		} hs_u64a;
63*8119dad8SRobert Mustacchi 		struct {
64*8119dad8SRobert Mustacchi 			uint32_t ha_nval;
65*8119dad8SRobert Mustacchi 			boolean_t ha_vals[HEX2SPD_ARR_MAX];
66*8119dad8SRobert Mustacchi 		} hs_ba;
67*8119dad8SRobert Mustacchi 	} hs_val;
68*8119dad8SRobert Mustacchi } hex2spd_spd_t;
69*8119dad8SRobert Mustacchi 
70*8119dad8SRobert Mustacchi /*
71*8119dad8SRobert Mustacchi  * Represents a set of tests to run against a specific SPD file. The last of the
72*8119dad8SRobert Mustacchi  * checks should have a key of NULL to indicate the end of the run.
73*8119dad8SRobert Mustacchi  */
74*8119dad8SRobert Mustacchi typedef struct {
75*8119dad8SRobert Mustacchi 	const char *ht_file;
76*8119dad8SRobert Mustacchi 	hex2spd_spd_t ht_checks[];
77*8119dad8SRobert Mustacchi } hex2spd_test_t;
78*8119dad8SRobert Mustacchi 
79*8119dad8SRobert Mustacchi extern const hex2spd_test_t samsung_ddr3_rdimm;
80*8119dad8SRobert Mustacchi extern const hex2spd_test_t micron_ddr3_lrdimm;
81*8119dad8SRobert Mustacchi 
82*8119dad8SRobert Mustacchi extern const hex2spd_test_t micron_ddr4_rdimm;
83*8119dad8SRobert Mustacchi extern const hex2spd_test_t samsung_ddr4_lrdimm;
84*8119dad8SRobert Mustacchi extern const hex2spd_test_t advantech_ddr4_sodimm;
85*8119dad8SRobert Mustacchi extern const hex2spd_test_t advantech_ddr4_udimm;
86*8119dad8SRobert Mustacchi 
87*8119dad8SRobert Mustacchi extern const hex2spd_test_t micron_ddr5_rdimm;
88*8119dad8SRobert Mustacchi extern const hex2spd_test_t advantech_ddr5_rdimm;
89*8119dad8SRobert Mustacchi 
90*8119dad8SRobert Mustacchi extern const hex2spd_test_t nanya_lp3;
91*8119dad8SRobert Mustacchi extern const hex2spd_test_t micron_lp4;
92*8119dad8SRobert Mustacchi extern const hex2spd_test_t micron_lp5;
93*8119dad8SRobert Mustacchi extern const hex2spd_test_t fake_lp5_camm2;
94*8119dad8SRobert Mustacchi 
95*8119dad8SRobert Mustacchi #ifdef __cplusplus
96*8119dad8SRobert Mustacchi }
97*8119dad8SRobert Mustacchi #endif
98*8119dad8SRobert Mustacchi 
99*8119dad8SRobert Mustacchi #endif /* _LIBJEDEC_HEX2SPD_H */
100