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