1*5b080c3aSRobert Mustacchi /* 2*5b080c3aSRobert Mustacchi * This file and its contents are supplied under the terms of the 3*5b080c3aSRobert Mustacchi * Common Development and Distribution License ("CDDL"), version 1.0. 4*5b080c3aSRobert Mustacchi * You may only use this file in accordance with the terms of version 5*5b080c3aSRobert Mustacchi * 1.0 of the CDDL. 6*5b080c3aSRobert Mustacchi * 7*5b080c3aSRobert Mustacchi * A full copy of the text of the CDDL should have accompanied this 8*5b080c3aSRobert Mustacchi * source. A copy of the CDDL is also available via the Internet at 9*5b080c3aSRobert Mustacchi * http://www.illumos.org/license/CDDL. 10*5b080c3aSRobert Mustacchi */ 11*5b080c3aSRobert Mustacchi 12*5b080c3aSRobert Mustacchi /* 13*5b080c3aSRobert Mustacchi * Copyright 2024 Oxide Computer Company 14*5b080c3aSRobert Mustacchi */ 15*5b080c3aSRobert Mustacchi 16*5b080c3aSRobert Mustacchi #ifndef _SYS_NVME_KIOXIA_CD8_H 17*5b080c3aSRobert Mustacchi #define _SYS_NVME_KIOXIA_CD8_H 18*5b080c3aSRobert Mustacchi 19*5b080c3aSRobert Mustacchi /* 20*5b080c3aSRobert Mustacchi * This header defines vendor-specific NVMe interfaces and is not a committed 21*5b080c3aSRobert Mustacchi * interface. Its contents and existence are subject to change. 22*5b080c3aSRobert Mustacchi * 23*5b080c3aSRobert Mustacchi * Vendor-specific definitions for the Kioxia CD8 and CD8P. 24*5b080c3aSRobert Mustacchi */ 25*5b080c3aSRobert Mustacchi 26*5b080c3aSRobert Mustacchi #include <sys/debug.h> 27*5b080c3aSRobert Mustacchi #include <sys/nvme/ocp.h> 28*5b080c3aSRobert Mustacchi 29*5b080c3aSRobert Mustacchi #ifdef __cplusplus 30*5b080c3aSRobert Mustacchi extern "C" { 31*5b080c3aSRobert Mustacchi #endif 32*5b080c3aSRobert Mustacchi 33*5b080c3aSRobert Mustacchi #define KIOXIA_CD8_DID 0x1f 34*5b080c3aSRobert Mustacchi #define KIOXIA_CD8P_DID 0x2b 35*5b080c3aSRobert Mustacchi 36*5b080c3aSRobert Mustacchi typedef enum { 37*5b080c3aSRobert Mustacchi KIOXIA_CD8_LOG_OCP_SMART = OCP_LOG_DSSD_SMART, 38*5b080c3aSRobert Mustacchi KIOXIA_CD8_LOG_OCP_ERRREC = OCP_LOG_DSSD_ERROR_REC, 39*5b080c3aSRobert Mustacchi KIOXIA_CD8_LOG_OCP_FWACT = OCP_LOG_DSSD_FWACT, 40*5b080c3aSRobert Mustacchi KIOXIA_CD8_LOG_OCP_LATENCY = OCP_LOG_DSSD_LATENCY, 41*5b080c3aSRobert Mustacchi KIOXIA_CD8_LOG_OCP_DEV_CAP = OCP_LOG_DSSD_DEV_CAP, 42*5b080c3aSRobert Mustacchi KIOXIA_CD8_LOG_OCP_UNSUP = OCP_LOG_DSSD_UNSUP_REQ, 43*5b080c3aSRobert Mustacchi /* 44*5b080c3aSRobert Mustacchi * Uses the kioxia_vul_cd8_extsmart_t. 45*5b080c3aSRobert Mustacchi */ 46*5b080c3aSRobert Mustacchi KIOXIA_CD8_LOG_EXTSMART = 0xca 47*5b080c3aSRobert Mustacchi } kioxia_cd8_vul_t; 48*5b080c3aSRobert Mustacchi 49*5b080c3aSRobert Mustacchi /* 50*5b080c3aSRobert Mustacchi * All data structures must be packed to account for the layout from the various 51*5b080c3aSRobert Mustacchi * programmer's manuals. 52*5b080c3aSRobert Mustacchi */ 53*5b080c3aSRobert Mustacchi #pragma pack(1) 54*5b080c3aSRobert Mustacchi typedef struct { 55*5b080c3aSRobert Mustacchi uint8_t kes_id; 56*5b080c3aSRobert Mustacchi uint8_t kes_rsvd1[2]; 57*5b080c3aSRobert Mustacchi uint8_t kse_norm; 58*5b080c3aSRobert Mustacchi uint8_t kes_rsvd4; 59*5b080c3aSRobert Mustacchi uint8_t kse_raw[6]; 60*5b080c3aSRobert Mustacchi uint8_t kse_rsvd11; 61*5b080c3aSRobert Mustacchi } kioxia_extsmart_ent_t; 62*5b080c3aSRobert Mustacchi 63*5b080c3aSRobert Mustacchi /* 64*5b080c3aSRobert Mustacchi * These are the different type keys that exist for the kioxia_extsmart_ent_t 65*5b080c3aSRobert Mustacchi * above. Note, entries in the latter part of the log just use zero keys. 66*5b080c3aSRobert Mustacchi */ 67*5b080c3aSRobert Mustacchi typedef enum { 68*5b080c3aSRobert Mustacchi SOLIDIGM_SMART_TYPE_PROGRAM_FAIL = 0xab, 69*5b080c3aSRobert Mustacchi SOLIDIGM_SMART_TYPE_ERASE_FAIL = 0xac, 70*5b080c3aSRobert Mustacchi SOLIDIGM_SMART_TYPE_WEAR_LEVEL = 0xad, 71*5b080c3aSRobert Mustacchi SOLIDIGM_SMART_TYPE_E2E_ERROR_DET = 0xb8, 72*5b080c3aSRobert Mustacchi SOLIDIGM_SMART_TYPE_CRC_ERROR = 0xc7, 73*5b080c3aSRobert Mustacchi SOLIDIGM_SMART_TYPE_NAND_WRITE = 0xf4, 74*5b080c3aSRobert Mustacchi SOLIDIGM_SMART_TYPE_HOST_WRITE = 0xf5 75*5b080c3aSRobert Mustacchi } solidigm_smart_type_t; 76*5b080c3aSRobert Mustacchi 77*5b080c3aSRobert Mustacchi 78*5b080c3aSRobert Mustacchi typedef struct { 79*5b080c3aSRobert Mustacchi kioxia_extsmart_ent_t cds_prog_fail; 80*5b080c3aSRobert Mustacchi kioxia_extsmart_ent_t cds_erase_fail; 81*5b080c3aSRobert Mustacchi kioxia_extsmart_ent_t cds_wear_level; 82*5b080c3aSRobert Mustacchi kioxia_extsmart_ent_t cds_e2e_det; 83*5b080c3aSRobert Mustacchi kioxia_extsmart_ent_t cds_crc_error; 84*5b080c3aSRobert Mustacchi uint8_t cds_rvsd60[132 - 60]; 85*5b080c3aSRobert Mustacchi kioxia_extsmart_ent_t cds_nand_write; 86*5b080c3aSRobert Mustacchi kioxia_extsmart_ent_t cds_host_write; 87*5b080c3aSRobert Mustacchi uint8_t cds_rsvd156[256 - 156]; 88*5b080c3aSRobert Mustacchi kioxia_extsmart_ent_t cds_crit_warn; 89*5b080c3aSRobert Mustacchi kioxia_extsmart_ent_t cds_host_read; 90*5b080c3aSRobert Mustacchi kioxia_extsmart_ent_t cds_comp_temp; 91*5b080c3aSRobert Mustacchi kioxia_extsmart_ent_t cds_life_used; 92*5b080c3aSRobert Mustacchi kioxia_extsmart_ent_t cds_power_cycles; 93*5b080c3aSRobert Mustacchi kioxia_extsmart_ent_t cds_power_hours; 94*5b080c3aSRobert Mustacchi kioxia_extsmart_ent_t cds_unsafe_shut; 95*5b080c3aSRobert Mustacchi uint8_t cds_rsvd340[512 - 340]; 96*5b080c3aSRobert Mustacchi } kioxia_vul_cd8_smart_t; 97*5b080c3aSRobert Mustacchi #pragma pack() /* pack(1) */ 98*5b080c3aSRobert Mustacchi /* 99*5b080c3aSRobert Mustacchi * Our current version of smatch cannot handle packed structures. 100*5b080c3aSRobert Mustacchi */ 101*5b080c3aSRobert Mustacchi #ifndef __CHECKER__ 102*5b080c3aSRobert Mustacchi CTASSERT(sizeof (kioxia_extsmart_ent_t) == 12); 103*5b080c3aSRobert Mustacchi CTASSERT(sizeof (kioxia_vul_cd8_smart_t) == 512); 104*5b080c3aSRobert Mustacchi #endif /* __CHECKER__ */ 105*5b080c3aSRobert Mustacchi 106*5b080c3aSRobert Mustacchi #ifdef __cplusplus 107*5b080c3aSRobert Mustacchi } 108*5b080c3aSRobert Mustacchi #endif 109*5b080c3aSRobert Mustacchi 110*5b080c3aSRobert Mustacchi #endif /* _SYS_NVME_KIOXIA_CD8_H */ 111