1 /* 2 * This file and its contents are supplied under the terms of the 3 * Common Development and Distribution License ("CDDL"), version 1.0. 4 * You may only use this file in accordance with the terms of version 5 * 1.0 of the CDDL. 6 * 7 * A full copy of the text of the CDDL should have accompanied this 8 * source. A copy of the CDDL is also available via the Internet at 9 * http://www.illumos.org/license/CDDL. 10 */ 11 12 /* 13 * Copyright 2024 Oxide Computer Company 14 */ 15 16 /* 17 * libnvme logic specific to Micron device families. Currently this has support 18 * for the Micron 7300, 7400, 7450, 6500, and 7500 device generations. Right now 19 * we only have support for some of the device-specific log pages. 20 */ 21 22 #include <sys/sysmacros.h> 23 #include <sys/nvme/micron.h> 24 25 #include "libnvme_impl.h" 26 27 static const nvme_log_page_info_t micron_7300_log_pages[] = { { 28 .nlpi_short = "micron/smart", 29 .nlpi_human = "Vendor Unique SMART", 30 .nlpi_lid = MICRON_7300_LOG_SMART, 31 .nlpi_csi = NVME_CSI_NVM, 32 .nlpi_kind = NVME_LOG_ID_VENDOR_SPECIFIC, 33 .nlpi_source = NVME_LOG_DISC_S_DB, 34 .nlpi_scope = NVME_LOG_SCOPE_CTRL, 35 .nlpi_len = sizeof (micron_vul_smart_t) 36 }, { 37 .nlpi_short = "micron/extsmart", 38 .nlpi_human = "Extended SMART", 39 .nlpi_lid = MICRON_7300_LOG_EXT_SMART, 40 .nlpi_csi = NVME_CSI_NVM, 41 .nlpi_kind = NVME_LOG_ID_VENDOR_SPECIFIC, 42 .nlpi_source = NVME_LOG_DISC_S_DB, 43 .nlpi_scope = NVME_LOG_SCOPE_CTRL, 44 .nlpi_len = sizeof (micron_vul_ext_smart_t) 45 } }; 46 47 static const nvme_log_page_info_t micron_74x0_log_pages[] = { { 48 .nlpi_short = "micron/extsmart", 49 .nlpi_human = "Extended SMART", 50 .nlpi_lid = MICRON_74x0_LOG_EXT_SMART, 51 .nlpi_csi = NVME_CSI_NVM, 52 .nlpi_kind = NVME_LOG_ID_VENDOR_SPECIFIC, 53 .nlpi_source = NVME_LOG_DISC_S_DB, 54 .nlpi_scope = NVME_LOG_SCOPE_CTRL, 55 .nlpi_len = sizeof (micron_vul_ext_smart_t) 56 } }; 57 58 static const nvme_log_page_info_t micron_x500_log_pages[] = { { 59 .nlpi_short = "ocp/smart", 60 .nlpi_human = "OCP SMART / Health Information", 61 .nlpi_lid = OCP_LOG_DSSD_SMART, 62 .nlpi_csi = NVME_CSI_NVM, 63 .nlpi_kind = NVME_LOG_ID_VENDOR_SPECIFIC, 64 .nlpi_source = NVME_LOG_DISC_S_DB, 65 .nlpi_scope = NVME_LOG_SCOPE_NVM, 66 .nlpi_len = sizeof (ocp_vul_smart_t), 67 }, { 68 .nlpi_short = "ocp/errrec", 69 .nlpi_human = "OCP Error Recovery", 70 .nlpi_lid = OCP_LOG_DSSD_ERROR_REC, 71 .nlpi_csi = NVME_CSI_NVM, 72 .nlpi_kind = NVME_LOG_ID_VENDOR_SPECIFIC, 73 .nlpi_source = NVME_LOG_DISC_S_DB, 74 .nlpi_scope = NVME_LOG_SCOPE_NVM, 75 .nlpi_len = sizeof (ocp_vul_errrec_t), 76 }, { 77 .nlpi_short = "ocp/fwact", 78 .nlpi_human = "OCP Firmware Activation", 79 .nlpi_lid = OCP_LOG_DSSD_FWACT, 80 .nlpi_csi = NVME_CSI_NVM, 81 .nlpi_kind = NVME_LOG_ID_VENDOR_SPECIFIC, 82 .nlpi_source = NVME_LOG_DISC_S_DB, 83 .nlpi_scope = NVME_LOG_SCOPE_NVM, 84 .nlpi_len = sizeof (ocp_vul_fwact_t), 85 }, { 86 .nlpi_short = "ocp/latency", 87 .nlpi_human = "OCP Latency Monitor", 88 .nlpi_lid = OCP_LOG_DSSD_LATENCY, 89 .nlpi_csi = NVME_CSI_NVM, 90 .nlpi_kind = NVME_LOG_ID_VENDOR_SPECIFIC, 91 .nlpi_source = NVME_LOG_DISC_S_DB, 92 .nlpi_scope = NVME_LOG_SCOPE_NVM, 93 .nlpi_len = sizeof (ocp_vul_lat_t), 94 }, { 95 .nlpi_short = "ocp/devcap", 96 .nlpi_human = "OCP Device Capabilities", 97 .nlpi_lid = OCP_LOG_DSSD_DEV_CAP, 98 .nlpi_csi = NVME_CSI_NVM, 99 .nlpi_kind = NVME_LOG_ID_VENDOR_SPECIFIC, 100 .nlpi_source = NVME_LOG_DISC_S_DB, 101 .nlpi_scope = NVME_LOG_SCOPE_NVM, 102 .nlpi_len = sizeof (ocp_vul_devcap_t), 103 }, { 104 .nlpi_short = "ocp/unsup", 105 .nlpi_human = "OCP Unsupported Requirements", 106 .nlpi_lid = OCP_LOG_DSSD_UNSUP_REQ, 107 .nlpi_csi = NVME_CSI_NVM, 108 .nlpi_kind = NVME_LOG_ID_VENDOR_SPECIFIC, 109 .nlpi_source = NVME_LOG_DISC_S_DB, 110 .nlpi_scope = NVME_LOG_SCOPE_NVM, 111 .nlpi_len = sizeof (ocp_vul_unsup_req_t), 112 } }; 113 114 const nvme_vsd_t micron_7300_pro = { 115 .nvd_vid = MICRON_PCI_VID, 116 .nvd_did = MICRON_7300_PRO_DID, 117 .nvd_human = "Micron 7300 Pro", 118 .nvd_logs = micron_7300_log_pages, 119 .nvd_nlogs = ARRAY_SIZE(micron_7300_log_pages) 120 }; 121 122 const nvme_vsd_t micron_7300_max = { 123 .nvd_vid = MICRON_PCI_VID, 124 .nvd_did = MICRON_7300_MAX_DID, 125 .nvd_human = "Micron 7300 Max", 126 .nvd_logs = micron_7300_log_pages, 127 .nvd_nlogs = ARRAY_SIZE(micron_7300_log_pages) 128 }; 129 130 const nvme_vsd_t micron_7400_pro = { 131 .nvd_vid = MICRON_PCI_VID, 132 .nvd_did = MICRON_7400_PRO_DID, 133 .nvd_human = "Micron 7400 Pro", 134 .nvd_logs = micron_74x0_log_pages, 135 .nvd_nlogs = ARRAY_SIZE(micron_74x0_log_pages) 136 }; 137 138 const nvme_vsd_t micron_7400_max = { 139 .nvd_vid = MICRON_PCI_VID, 140 .nvd_did = MICRON_7400_MAX_DID, 141 .nvd_human = "Micron 7400 Max", 142 .nvd_logs = micron_74x0_log_pages, 143 .nvd_nlogs = ARRAY_SIZE(micron_74x0_log_pages) 144 }; 145 146 const nvme_vsd_t micron_7450_pro = { 147 .nvd_vid = MICRON_PCI_VID, 148 .nvd_did = MICRON_7450_PRO_DID, 149 .nvd_human = "Micron 7450 Pro", 150 .nvd_logs = micron_74x0_log_pages, 151 .nvd_nlogs = ARRAY_SIZE(micron_74x0_log_pages) 152 }; 153 154 const nvme_vsd_t micron_7450_max = { 155 .nvd_vid = MICRON_PCI_VID, 156 .nvd_did = MICRON_7450_MAX_DID, 157 .nvd_human = "Micron 7450 Max", 158 .nvd_logs = micron_74x0_log_pages, 159 .nvd_nlogs = ARRAY_SIZE(micron_74x0_log_pages) 160 }; 161 162 const nvme_vsd_t micron_6500_ion = { 163 .nvd_vid = MICRON_PCI_VID, 164 .nvd_did = MICRON_6500_ION_DID, 165 .nvd_human = "Micron 6500 ION", 166 .nvd_logs = micron_x500_log_pages, 167 .nvd_nlogs = ARRAY_SIZE(micron_x500_log_pages) 168 }; 169 170 const nvme_vsd_t micron_7500_pro = { 171 .nvd_vid = MICRON_PCI_VID, 172 .nvd_did = MICRON_7500_PRO_DID, 173 .nvd_human = "Micron 7500 Pro", 174 .nvd_logs = micron_x500_log_pages, 175 .nvd_nlogs = ARRAY_SIZE(micron_x500_log_pages) 176 }; 177 178 const nvme_vsd_t micron_7500_max = { 179 .nvd_vid = MICRON_PCI_VID, 180 .nvd_did = MICRON_7500_MAX_DID, 181 .nvd_human = "Micron 7500 Max", 182 .nvd_logs = micron_x500_log_pages, 183 .nvd_nlogs = ARRAY_SIZE(micron_x500_log_pages) 184 }; 185