#ifndef _SYS_NVME_KIOXIA_CD8_H
#define _SYS_NVME_KIOXIA_CD8_H
#include <sys/debug.h>
#include <sys/nvme/ocp.h>
#ifdef __cplusplus
extern "C" {
#endif
#define KIOXIA_CD8_DID 0x1f
#define KIOXIA_CD8P_DID 0x2b
typedef enum {
KIOXIA_CD8_LOG_OCP_SMART = OCP_LOG_DSSD_SMART,
KIOXIA_CD8_LOG_OCP_ERRREC = OCP_LOG_DSSD_ERROR_REC,
KIOXIA_CD8_LOG_OCP_FWACT = OCP_LOG_DSSD_FWACT,
KIOXIA_CD8_LOG_OCP_LATENCY = OCP_LOG_DSSD_LATENCY,
KIOXIA_CD8_LOG_OCP_DEV_CAP = OCP_LOG_DSSD_DEV_CAP,
KIOXIA_CD8_LOG_OCP_UNSUP = OCP_LOG_DSSD_UNSUP_REQ,
KIOXIA_CD8_LOG_EXTSMART = 0xca
} kioxia_cd8_vul_t;
#pragma pack(1)
typedef struct {
uint8_t kes_id;
uint8_t kes_rsvd1[2];
uint8_t kse_norm;
uint8_t kes_rsvd4;
uint8_t kse_raw[6];
uint8_t kse_rsvd11;
} kioxia_extsmart_ent_t;
typedef enum {
KIOXIA_SMART_TYPE_PROGRAM_FAIL = 0xab,
KIOXIA_SMART_TYPE_ERASE_FAIL = 0xac,
KIOXIA_SMART_TYPE_WEAR_LEVEL = 0xad,
KIOXIA_SMART_TYPE_E2E_ERROR_DET = 0xb8,
KIOXIA_SMART_TYPE_CRC_ERROR = 0xc7,
KIOXIA_SMART_TYPE_NAND_WRITE = 0xf4,
KIOXIA_SMART_TYPE_HOST_WRITE = 0xf5
} kioxia_smart_type_t;
typedef struct {
kioxia_extsmart_ent_t cds_prog_fail;
kioxia_extsmart_ent_t cds_erase_fail;
kioxia_extsmart_ent_t cds_wear_level;
kioxia_extsmart_ent_t cds_e2e_det;
kioxia_extsmart_ent_t cds_crc_error;
uint8_t cds_rvsd60[132 - 60];
kioxia_extsmart_ent_t cds_nand_write;
kioxia_extsmart_ent_t cds_host_write;
uint8_t cds_rsvd156[256 - 156];
kioxia_extsmart_ent_t cds_crit_warn;
kioxia_extsmart_ent_t cds_host_read;
kioxia_extsmart_ent_t cds_comp_temp;
kioxia_extsmart_ent_t cds_life_used;
kioxia_extsmart_ent_t cds_power_cycles;
kioxia_extsmart_ent_t cds_power_hours;
kioxia_extsmart_ent_t cds_unsafe_shut;
uint8_t cds_rsvd340[512 - 340];
} kioxia_vul_cd8_smart_t;
#pragma pack()
#ifndef __CHECKER__
CTASSERT(sizeof (kioxia_extsmart_ent_t) == 12);
CTASSERT(sizeof (kioxia_vul_cd8_smart_t) == 512);
#endif
#ifdef __cplusplus
}
#endif
#endif