xref: /illumos-gate/usr/src/uts/common/sys/nvme/micron_7300.h (revision 6a5dded72533447331efa78c840a7d3d2d04e877)
1*6a5dded7SRobert Mustacchi /*
2*6a5dded7SRobert Mustacchi  * This file and its contents are supplied under the terms of the
3*6a5dded7SRobert Mustacchi  * Common Development and Distribution License ("CDDL"), version 1.0.
4*6a5dded7SRobert Mustacchi  * You may only use this file in accordance with the terms of version
5*6a5dded7SRobert Mustacchi  * 1.0 of the CDDL.
6*6a5dded7SRobert Mustacchi  *
7*6a5dded7SRobert Mustacchi  * A full copy of the text of the CDDL should have accompanied this
8*6a5dded7SRobert Mustacchi  * source.  A copy of the CDDL is also available via the Internet at
9*6a5dded7SRobert Mustacchi  * http://www.illumos.org/license/CDDL.
10*6a5dded7SRobert Mustacchi  */
11*6a5dded7SRobert Mustacchi 
12*6a5dded7SRobert Mustacchi /*
13*6a5dded7SRobert Mustacchi  * Copyright 2024 Oxide Computer Company
14*6a5dded7SRobert Mustacchi  */
15*6a5dded7SRobert Mustacchi 
16*6a5dded7SRobert Mustacchi #ifndef _SYS_NVME_MICRON_7300_H
17*6a5dded7SRobert Mustacchi #define	_SYS_NVME_MICRON_7300_H
18*6a5dded7SRobert Mustacchi 
19*6a5dded7SRobert Mustacchi /*
20*6a5dded7SRobert Mustacchi  * This header defines vendor-specific NVMe interfaces and is not a committed
21*6a5dded7SRobert Mustacchi  * interface. Its contents and existence are subject to change.
22*6a5dded7SRobert Mustacchi  *
23*6a5dded7SRobert Mustacchi  * This header contains all of the current vendor-specific entries for known
24*6a5dded7SRobert Mustacchi  * Micron devices as well as common structures and definitions that are shared
25*6a5dded7SRobert Mustacchi  * across multiple device families.
26*6a5dded7SRobert Mustacchi  */
27*6a5dded7SRobert Mustacchi 
28*6a5dded7SRobert Mustacchi #ifdef __cplusplus
29*6a5dded7SRobert Mustacchi extern "C" {
30*6a5dded7SRobert Mustacchi #endif
31*6a5dded7SRobert Mustacchi 
32*6a5dded7SRobert Mustacchi #include <sys/debug.h>
33*6a5dded7SRobert Mustacchi #include <sys/stdint.h>
34*6a5dded7SRobert Mustacchi 
35*6a5dded7SRobert Mustacchi #define	MICRON_7300_PRO_DID	0x51a2
36*6a5dded7SRobert Mustacchi #define	MICRON_7300_MAX_DID	0x51a3
37*6a5dded7SRobert Mustacchi 
38*6a5dded7SRobert Mustacchi typedef enum {
39*6a5dded7SRobert Mustacchi 	/*
40*6a5dded7SRobert Mustacchi 	 * This log is supported by the [79]300, though when supported, the
41*6a5dded7SRobert Mustacchi 	 * extended SMART log is preferred.
42*6a5dded7SRobert Mustacchi 	 */
43*6a5dded7SRobert Mustacchi 	MICRON_7300_LOG_SMART		= 0xca,
44*6a5dded7SRobert Mustacchi 	/*
45*6a5dded7SRobert Mustacchi 	 * This log is the micron_vul_ext_smart_t.
46*6a5dded7SRobert Mustacchi 	 */
47*6a5dded7SRobert Mustacchi 	MICRON_7300_LOG_EXT_SMART	= 0xd0
48*6a5dded7SRobert Mustacchi } micron_7300_vul_t;
49*6a5dded7SRobert Mustacchi 
50*6a5dded7SRobert Mustacchi /*
51*6a5dded7SRobert Mustacchi  * All data structures must be packed to account for the layout from the various
52*6a5dded7SRobert Mustacchi  * programmer's manuals.
53*6a5dded7SRobert Mustacchi  */
54*6a5dded7SRobert Mustacchi #pragma pack(1)
55*6a5dded7SRobert Mustacchi 
56*6a5dded7SRobert Mustacchi /*
57*6a5dded7SRobert Mustacchi  * The Micron vendor-unique SMART log (0xca) is formed in terms of these data
58*6a5dded7SRobert Mustacchi  * entities that all have a fixed size. The type value tells you what it is
59*6a5dded7SRobert Mustacchi  * supposed to be (though the log has a fixed layout). The data payload
60*6a5dded7SRobert Mustacchi  * interpretation varies based on the type.
61*6a5dded7SRobert Mustacchi  */
62*6a5dded7SRobert Mustacchi typedef struct {
63*6a5dded7SRobert Mustacchi 	uint8_t vse_type;
64*6a5dded7SRobert Mustacchi 	uint8_t vse_rsvd[4];
65*6a5dded7SRobert Mustacchi 	uint8_t vse_data[7];
66*6a5dded7SRobert Mustacchi } micron_vul_smart_ent_t;
67*6a5dded7SRobert Mustacchi 
68*6a5dded7SRobert Mustacchi typedef struct {
69*6a5dded7SRobert Mustacchi 	micron_vul_smart_ent_t ms_writes;
70*6a5dded7SRobert Mustacchi 	micron_vul_smart_ent_t ms_reads;
71*6a5dded7SRobert Mustacchi 	micron_vul_smart_ent_t ms_throttle;
72*6a5dded7SRobert Mustacchi 	micron_vul_smart_ent_t ms_life_temp;
73*6a5dded7SRobert Mustacchi 	micron_vul_smart_ent_t ms_power;
74*6a5dded7SRobert Mustacchi 	micron_vul_smart_ent_t ms_poweron_temp;
75*6a5dded7SRobert Mustacchi } micron_vul_smart_t;
76*6a5dded7SRobert Mustacchi 
77*6a5dded7SRobert Mustacchi CTASSERT(sizeof (micron_vul_smart_t) == 0x48);
78*6a5dded7SRobert Mustacchi 
79*6a5dded7SRobert Mustacchi #pragma	pack()	/* pack(1) */
80*6a5dded7SRobert Mustacchi 
81*6a5dded7SRobert Mustacchi 
82*6a5dded7SRobert Mustacchi #ifdef __cplusplus
83*6a5dded7SRobert Mustacchi }
84*6a5dded7SRobert Mustacchi #endif
85*6a5dded7SRobert Mustacchi 
86*6a5dded7SRobert Mustacchi #endif /* _SYS_NVME_MICRON_7300_H */
87