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 2026 Oxide Computer Company 14 */ 15 16 /* 17 * Field information for most the various supported classes logs: supported log 18 * pages, supported commands, supported features, and supported management 19 * commands. 20 */ 21 22 #include <sys/stddef.h> 23 #include <sys/sysmacros.h> 24 25 #include "nvmeadm.h" 26 27 static const nvmeadm_field_bit_t suplog_fid_bits[] = { { 28 .nfb_lowbit = 0, .nfb_hibit = 0, 29 .nfb_short = "lsupp", 30 .nfb_desc = "Log Page Identifier", 31 .nfb_type = NVMEADM_FT_STRMAP, 32 .nfb_strs = { "unsupported", "supported" } 33 }, { 34 .nfb_lowbit = 1, .nfb_hibit = 1, 35 .nfb_short = "ios", 36 .nfb_desc = "Index Offset", 37 .nfb_type = NVMEADM_FT_STRMAP, 38 .nfb_strs = { "unsupported", "supported" } 39 }, { 40 .nfb_lowbit = 16, .nfb_hibit = 31, 41 .nfb_short = "lidsp", 42 .nfb_desc = "LID Specific Parameter", 43 .nfb_type = NVMEADM_FT_HEX 44 } }; 45 46 #define SUPLOG(f) { .nf_off = offsetof(nvme_suplog_log_t, nl_logs[f]), \ 47 .nf_len = sizeof (((nvme_suplog_log_t *)NULL)->nl_logs[f]), \ 48 .nf_short = "lids" #f, .nf_desc = "Log Page Identifier " #f, \ 49 NVMEADM_F_BITS(suplog_fid_bits) } 50 51 static const nvmeadm_field_t suplog_fields[] = { 52 SUPLOG(0), SUPLOG(1), SUPLOG(2), SUPLOG(3), 53 SUPLOG(4), SUPLOG(5), SUPLOG(6), SUPLOG(7), 54 SUPLOG(8), SUPLOG(9), SUPLOG(10), SUPLOG(11), 55 SUPLOG(12), SUPLOG(13), SUPLOG(14), SUPLOG(15), 56 SUPLOG(16), SUPLOG(17), SUPLOG(18), SUPLOG(19), 57 SUPLOG(20), SUPLOG(21), SUPLOG(22), SUPLOG(23), 58 SUPLOG(24), SUPLOG(25), SUPLOG(26), SUPLOG(27), 59 SUPLOG(28), SUPLOG(29), SUPLOG(30), SUPLOG(31), 60 SUPLOG(32), SUPLOG(33), SUPLOG(34), SUPLOG(35), 61 SUPLOG(36), SUPLOG(37), SUPLOG(38), SUPLOG(39), 62 SUPLOG(40), SUPLOG(41), SUPLOG(42), SUPLOG(43), 63 SUPLOG(44), SUPLOG(45), SUPLOG(46), SUPLOG(47), 64 SUPLOG(48), SUPLOG(49), SUPLOG(50), SUPLOG(51), 65 SUPLOG(52), SUPLOG(53), SUPLOG(54), SUPLOG(55), 66 SUPLOG(56), SUPLOG(57), SUPLOG(58), SUPLOG(59), 67 SUPLOG(60), SUPLOG(61), SUPLOG(62), SUPLOG(63), 68 SUPLOG(64), SUPLOG(65), SUPLOG(66), SUPLOG(67), 69 SUPLOG(68), SUPLOG(69), SUPLOG(70), SUPLOG(71), 70 SUPLOG(72), SUPLOG(73), SUPLOG(74), SUPLOG(75), 71 SUPLOG(76), SUPLOG(77), SUPLOG(78), SUPLOG(79), 72 SUPLOG(80), SUPLOG(81), SUPLOG(82), SUPLOG(83), 73 SUPLOG(84), SUPLOG(85), SUPLOG(86), SUPLOG(87), 74 SUPLOG(88), SUPLOG(89), SUPLOG(90), SUPLOG(91), 75 SUPLOG(92), SUPLOG(93), SUPLOG(94), SUPLOG(95), 76 SUPLOG(96), SUPLOG(97), SUPLOG(98), SUPLOG(99), 77 SUPLOG(100), SUPLOG(101), SUPLOG(102), SUPLOG(103), 78 SUPLOG(104), SUPLOG(105), SUPLOG(106), SUPLOG(107), 79 SUPLOG(108), SUPLOG(109), SUPLOG(110), SUPLOG(111), 80 SUPLOG(112), SUPLOG(113), SUPLOG(114), SUPLOG(115), 81 SUPLOG(116), SUPLOG(117), SUPLOG(118), SUPLOG(119), 82 SUPLOG(120), SUPLOG(121), SUPLOG(122), SUPLOG(123), 83 SUPLOG(124), SUPLOG(125), SUPLOG(126), SUPLOG(127), 84 SUPLOG(128), SUPLOG(129), SUPLOG(130), SUPLOG(131), 85 SUPLOG(132), SUPLOG(133), SUPLOG(134), SUPLOG(135), 86 SUPLOG(136), SUPLOG(137), SUPLOG(138), SUPLOG(139), 87 SUPLOG(140), SUPLOG(141), SUPLOG(142), SUPLOG(143), 88 SUPLOG(144), SUPLOG(145), SUPLOG(146), SUPLOG(147), 89 SUPLOG(148), SUPLOG(149), SUPLOG(150), SUPLOG(151), 90 SUPLOG(152), SUPLOG(153), SUPLOG(154), SUPLOG(155), 91 SUPLOG(156), SUPLOG(157), SUPLOG(158), SUPLOG(159), 92 SUPLOG(160), SUPLOG(161), SUPLOG(162), SUPLOG(163), 93 SUPLOG(164), SUPLOG(165), SUPLOG(166), SUPLOG(167), 94 SUPLOG(168), SUPLOG(169), SUPLOG(170), SUPLOG(171), 95 SUPLOG(172), SUPLOG(173), SUPLOG(174), SUPLOG(175), 96 SUPLOG(176), SUPLOG(177), SUPLOG(178), SUPLOG(179), 97 SUPLOG(180), SUPLOG(181), SUPLOG(182), SUPLOG(183), 98 SUPLOG(184), SUPLOG(185), SUPLOG(186), SUPLOG(187), 99 SUPLOG(188), SUPLOG(189), SUPLOG(190), SUPLOG(191), 100 SUPLOG(192), SUPLOG(193), SUPLOG(194), SUPLOG(195), 101 SUPLOG(196), SUPLOG(197), SUPLOG(198), SUPLOG(199), 102 SUPLOG(200), SUPLOG(201), SUPLOG(202), SUPLOG(203), 103 SUPLOG(204), SUPLOG(205), SUPLOG(206), SUPLOG(207), 104 SUPLOG(208), SUPLOG(209), SUPLOG(210), SUPLOG(211), 105 SUPLOG(212), SUPLOG(213), SUPLOG(214), SUPLOG(215), 106 SUPLOG(216), SUPLOG(217), SUPLOG(218), SUPLOG(219), 107 SUPLOG(220), SUPLOG(221), SUPLOG(222), SUPLOG(223), 108 SUPLOG(224), SUPLOG(225), SUPLOG(226), SUPLOG(227), 109 SUPLOG(228), SUPLOG(229), SUPLOG(230), SUPLOG(231), 110 SUPLOG(232), SUPLOG(233), SUPLOG(234), SUPLOG(235), 111 SUPLOG(236), SUPLOG(237), SUPLOG(238), SUPLOG(239), 112 SUPLOG(240), SUPLOG(241), SUPLOG(242), SUPLOG(243), 113 SUPLOG(244), SUPLOG(245), SUPLOG(246), SUPLOG(247), 114 SUPLOG(248), SUPLOG(249), SUPLOG(250), SUPLOG(251), 115 SUPLOG(252), SUPLOG(253), SUPLOG(254), SUPLOG(255) 116 }; 117 118 const nvmeadm_log_field_info_t suplog_field_info = { 119 .nlfi_log = "suplog", 120 .nlfi_fields = suplog_fields, 121 .nlfi_nfields = ARRAY_SIZE(suplog_fields), 122 .nlfi_min = sizeof (nvme_suplog_t), 123 }; 124 125 static const nvmeadm_field_bit_t supcmd_csp_bits[] = { { 126 .nfb_lowbit = 0, .nfb_hibit = 0, 127 .nfb_short = "nscpe", 128 .nfb_desc = "Namespace Scope", 129 .nfb_type = NVMEADM_FT_STRMAP, 130 .nfb_strs = { "no", "yes" } 131 }, { 132 .nfb_lowbit = 1, .nfb_hibit = 1, 133 .nfb_short = "cscpe", 134 .nfb_desc = "Controller Scope", 135 .nfb_type = NVMEADM_FT_STRMAP, 136 .nfb_strs = { "no", "yes" } 137 }, { 138 .nfb_lowbit = 2, .nfb_hibit = 2, 139 .nfb_short = "nsetcpe", 140 .nfb_desc = "NVM Set Scope", 141 .nfb_type = NVMEADM_FT_STRMAP, 142 .nfb_strs = { "no", "yes" } 143 }, { 144 .nfb_lowbit = 3, .nfb_hibit = 3, 145 .nfb_short = "egscpe", 146 .nfb_desc = "Endurance Group Scope", 147 .nfb_type = NVMEADM_FT_STRMAP, 148 .nfb_strs = { "no", "yes" } 149 }, { 150 .nfb_lowbit = 4, .nfb_hibit = 4, 151 .nfb_short = "dscpe", 152 .nfb_desc = "Domain Scope", 153 .nfb_type = NVMEADM_FT_STRMAP, 154 .nfb_strs = { "no", "yes" } 155 }, { 156 .nfb_lowbit = 5, .nfb_hibit = 5, 157 .nfb_short = "nsscpe", 158 .nfb_desc = "NVM Subsystem Scope", 159 .nfb_type = NVMEADM_FT_STRMAP, 160 .nfb_strs = { "no", "yes" } 161 } }; 162 163 static const nvmeadm_field_bit_t supcmd_cs_bits[] = { { 164 .nfb_lowbit = 0, .nfb_hibit = 0, 165 .nfb_short = "csupp", 166 .nfb_desc = "Command", 167 .nfb_type = NVMEADM_FT_STRMAP, 168 .nfb_strs = { "unsupported", "supported" } 169 }, { 170 .nfb_lowbit = 1, .nfb_hibit = 1, 171 .nfb_short = "lbcc", 172 .nfb_desc = "Logical Block Content", 173 .nfb_type = NVMEADM_FT_STRMAP, 174 .nfb_strs = { "unchanged", "changed" } 175 }, { 176 .nfb_lowbit = 2, .nfb_hibit = 2, 177 .nfb_short = "ncc", 178 .nfb_desc = "Namespace Capability", 179 .nfb_type = NVMEADM_FT_STRMAP, 180 .nfb_strs = { "unchanged", "changed" } 181 }, { 182 .nfb_lowbit = 3, .nfb_hibit = 3, 183 .nfb_short = "nic", 184 .nfb_desc = "Namespace Inventory", 185 .nfb_type = NVMEADM_FT_STRMAP, 186 .nfb_strs = { "unchanged", "changed" } 187 }, { 188 .nfb_lowbit = 4, .nfb_hibit = 4, 189 .nfb_short = "ccc", 190 .nfb_desc = "Controller Capability", 191 .nfb_type = NVMEADM_FT_STRMAP, 192 .nfb_strs = { "unchanged", "changed" } 193 }, { 194 .nfb_lowbit = 14, .nfb_hibit = 15, 195 .nfb_short = "cser", 196 .nfb_desc = "Command Submission and Execution Relaxations", 197 .nfb_vers = &nvme_vers_2v1, 198 .nfb_type = NVMEADM_FT_STRMAP, 199 .nfb_strs = { "no relaxation", "any namespace" }, 200 }, { 201 .nfb_lowbit = 16, .nfb_hibit = 18, 202 .nfb_short = "cse", 203 .nfb_desc = "Command Submission and Execution", 204 .nfb_type = NVMEADM_FT_STRMAP, 205 .nfb_strs = { "no restriction", "same namespace", "any namespace" }, 206 }, { 207 .nfb_lowbit = 19, .nfb_hibit = 19, 208 .nfb_short = "uss", 209 .nfb_vers = &nvme_vers_1v4, 210 .nfb_desc = "UUID Selection", 211 .nfb_type = NVMEADM_FT_STRMAP, 212 .nfb_strs = { "unsupported", "supported" } 213 }, { 214 .nfb_lowbit = 20, .nfb_hibit = 31, 215 .nfb_short = "csp", 216 .nfb_desc = "Command Scope", 217 .nfb_vers = &nvme_vers_2v0, 218 NVMEADM_FB_BITS(supcmd_csp_bits) 219 } }; 220 221 #define SUPCMD_A(f) { .nf_off = offsetof(nvme_cmdeff_log_t, cme_admin[f]), \ 222 .nf_len = sizeof (((nvme_cmdeff_log_t *)NULL)->cme_admin[f]), \ 223 .nf_short = "acs" #f, .nf_desc = "Admin Command Supported " #f, \ 224 NVMEADM_F_BITS(supcmd_cs_bits) } 225 226 #define SUPCMD_I(f) { .nf_off = offsetof(nvme_cmdeff_log_t, cme_io[f]), \ 227 .nf_len = sizeof (((nvme_cmdeff_log_t *)NULL)->cme_io[f]), \ 228 .nf_short = "iocs" #f, .nf_desc = "I/O Command Supported " #f, \ 229 NVMEADM_F_BITS(supcmd_cs_bits) } 230 231 232 static const nvmeadm_field_t supcmd_fields[] = { 233 SUPCMD_A(0), SUPCMD_A(1), SUPCMD_A(2), SUPCMD_A(3), 234 SUPCMD_A(4), SUPCMD_A(5), SUPCMD_A(6), SUPCMD_A(7), 235 SUPCMD_A(8), SUPCMD_A(9), SUPCMD_A(10), SUPCMD_A(11), 236 SUPCMD_A(12), SUPCMD_A(13), SUPCMD_A(14), SUPCMD_A(15), 237 SUPCMD_A(16), SUPCMD_A(17), SUPCMD_A(18), SUPCMD_A(19), 238 SUPCMD_A(20), SUPCMD_A(21), SUPCMD_A(22), SUPCMD_A(23), 239 SUPCMD_A(24), SUPCMD_A(25), SUPCMD_A(26), SUPCMD_A(27), 240 SUPCMD_A(28), SUPCMD_A(29), SUPCMD_A(30), SUPCMD_A(31), 241 SUPCMD_A(32), SUPCMD_A(33), SUPCMD_A(34), SUPCMD_A(35), 242 SUPCMD_A(36), SUPCMD_A(37), SUPCMD_A(38), SUPCMD_A(39), 243 SUPCMD_A(40), SUPCMD_A(41), SUPCMD_A(42), SUPCMD_A(43), 244 SUPCMD_A(44), SUPCMD_A(45), SUPCMD_A(46), SUPCMD_A(47), 245 SUPCMD_A(48), SUPCMD_A(49), SUPCMD_A(50), SUPCMD_A(51), 246 SUPCMD_A(52), SUPCMD_A(53), SUPCMD_A(54), SUPCMD_A(55), 247 SUPCMD_A(56), SUPCMD_A(57), SUPCMD_A(58), SUPCMD_A(59), 248 SUPCMD_A(60), SUPCMD_A(61), SUPCMD_A(62), SUPCMD_A(63), 249 SUPCMD_A(64), SUPCMD_A(65), SUPCMD_A(66), SUPCMD_A(67), 250 SUPCMD_A(68), SUPCMD_A(69), SUPCMD_A(70), SUPCMD_A(71), 251 SUPCMD_A(72), SUPCMD_A(73), SUPCMD_A(74), SUPCMD_A(75), 252 SUPCMD_A(76), SUPCMD_A(77), SUPCMD_A(78), SUPCMD_A(79), 253 SUPCMD_A(80), SUPCMD_A(81), SUPCMD_A(82), SUPCMD_A(83), 254 SUPCMD_A(84), SUPCMD_A(85), SUPCMD_A(86), SUPCMD_A(87), 255 SUPCMD_A(88), SUPCMD_A(89), SUPCMD_A(90), SUPCMD_A(91), 256 SUPCMD_A(92), SUPCMD_A(93), SUPCMD_A(94), SUPCMD_A(95), 257 SUPCMD_A(96), SUPCMD_A(97), SUPCMD_A(98), SUPCMD_A(99), 258 SUPCMD_A(100), SUPCMD_A(101), SUPCMD_A(102), SUPCMD_A(103), 259 SUPCMD_A(104), SUPCMD_A(105), SUPCMD_A(106), SUPCMD_A(107), 260 SUPCMD_A(108), SUPCMD_A(109), SUPCMD_A(110), SUPCMD_A(111), 261 SUPCMD_A(112), SUPCMD_A(113), SUPCMD_A(114), SUPCMD_A(115), 262 SUPCMD_A(116), SUPCMD_A(117), SUPCMD_A(118), SUPCMD_A(119), 263 SUPCMD_A(120), SUPCMD_A(121), SUPCMD_A(122), SUPCMD_A(123), 264 SUPCMD_A(124), SUPCMD_A(125), SUPCMD_A(126), SUPCMD_A(127), 265 SUPCMD_A(128), SUPCMD_A(129), SUPCMD_A(130), SUPCMD_A(131), 266 SUPCMD_A(132), SUPCMD_A(133), SUPCMD_A(134), SUPCMD_A(135), 267 SUPCMD_A(136), SUPCMD_A(137), SUPCMD_A(138), SUPCMD_A(139), 268 SUPCMD_A(140), SUPCMD_A(141), SUPCMD_A(142), SUPCMD_A(143), 269 SUPCMD_A(144), SUPCMD_A(145), SUPCMD_A(146), SUPCMD_A(147), 270 SUPCMD_A(148), SUPCMD_A(149), SUPCMD_A(150), SUPCMD_A(151), 271 SUPCMD_A(152), SUPCMD_A(153), SUPCMD_A(154), SUPCMD_A(155), 272 SUPCMD_A(156), SUPCMD_A(157), SUPCMD_A(158), SUPCMD_A(159), 273 SUPCMD_A(160), SUPCMD_A(161), SUPCMD_A(162), SUPCMD_A(163), 274 SUPCMD_A(164), SUPCMD_A(165), SUPCMD_A(166), SUPCMD_A(167), 275 SUPCMD_A(168), SUPCMD_A(169), SUPCMD_A(170), SUPCMD_A(171), 276 SUPCMD_A(172), SUPCMD_A(173), SUPCMD_A(174), SUPCMD_A(175), 277 SUPCMD_A(176), SUPCMD_A(177), SUPCMD_A(178), SUPCMD_A(179), 278 SUPCMD_A(180), SUPCMD_A(181), SUPCMD_A(182), SUPCMD_A(183), 279 SUPCMD_A(184), SUPCMD_A(185), SUPCMD_A(186), SUPCMD_A(187), 280 SUPCMD_A(188), SUPCMD_A(189), SUPCMD_A(190), SUPCMD_A(191), 281 SUPCMD_A(192), SUPCMD_A(193), SUPCMD_A(194), SUPCMD_A(195), 282 SUPCMD_A(196), SUPCMD_A(197), SUPCMD_A(198), SUPCMD_A(199), 283 SUPCMD_A(200), SUPCMD_A(201), SUPCMD_A(202), SUPCMD_A(203), 284 SUPCMD_A(204), SUPCMD_A(205), SUPCMD_A(206), SUPCMD_A(207), 285 SUPCMD_A(208), SUPCMD_A(209), SUPCMD_A(210), SUPCMD_A(211), 286 SUPCMD_A(212), SUPCMD_A(213), SUPCMD_A(214), SUPCMD_A(215), 287 SUPCMD_A(216), SUPCMD_A(217), SUPCMD_A(218), SUPCMD_A(219), 288 SUPCMD_A(220), SUPCMD_A(221), SUPCMD_A(222), SUPCMD_A(223), 289 SUPCMD_A(224), SUPCMD_A(225), SUPCMD_A(226), SUPCMD_A(227), 290 SUPCMD_A(228), SUPCMD_A(229), SUPCMD_A(230), SUPCMD_A(231), 291 SUPCMD_A(232), SUPCMD_A(233), SUPCMD_A(234), SUPCMD_A(235), 292 SUPCMD_A(236), SUPCMD_A(237), SUPCMD_A(238), SUPCMD_A(239), 293 SUPCMD_A(240), SUPCMD_A(241), SUPCMD_A(242), SUPCMD_A(243), 294 SUPCMD_A(244), SUPCMD_A(245), SUPCMD_A(246), SUPCMD_A(247), 295 SUPCMD_A(248), SUPCMD_A(249), SUPCMD_A(250), SUPCMD_A(251), 296 SUPCMD_A(252), SUPCMD_A(253), SUPCMD_A(254), SUPCMD_A(255), 297 SUPCMD_I(0), SUPCMD_I(1), SUPCMD_I(2), SUPCMD_I(3), 298 SUPCMD_I(4), SUPCMD_I(5), SUPCMD_I(6), SUPCMD_I(7), 299 SUPCMD_I(8), SUPCMD_I(9), SUPCMD_I(10), SUPCMD_I(11), 300 SUPCMD_I(12), SUPCMD_I(13), SUPCMD_I(14), SUPCMD_I(15), 301 SUPCMD_I(16), SUPCMD_I(17), SUPCMD_I(18), SUPCMD_I(19), 302 SUPCMD_I(20), SUPCMD_I(21), SUPCMD_I(22), SUPCMD_I(23), 303 SUPCMD_I(24), SUPCMD_I(25), SUPCMD_I(26), SUPCMD_I(27), 304 SUPCMD_I(28), SUPCMD_I(29), SUPCMD_I(30), SUPCMD_I(31), 305 SUPCMD_I(32), SUPCMD_I(33), SUPCMD_I(34), SUPCMD_I(35), 306 SUPCMD_I(36), SUPCMD_I(37), SUPCMD_I(38), SUPCMD_I(39), 307 SUPCMD_I(40), SUPCMD_I(41), SUPCMD_I(42), SUPCMD_I(43), 308 SUPCMD_I(44), SUPCMD_I(45), SUPCMD_I(46), SUPCMD_I(47), 309 SUPCMD_I(48), SUPCMD_I(49), SUPCMD_I(50), SUPCMD_I(51), 310 SUPCMD_I(52), SUPCMD_I(53), SUPCMD_I(54), SUPCMD_I(55), 311 SUPCMD_I(56), SUPCMD_I(57), SUPCMD_I(58), SUPCMD_I(59), 312 SUPCMD_I(60), SUPCMD_I(61), SUPCMD_I(62), SUPCMD_I(63), 313 SUPCMD_I(64), SUPCMD_I(65), SUPCMD_I(66), SUPCMD_I(67), 314 SUPCMD_I(68), SUPCMD_I(69), SUPCMD_I(70), SUPCMD_I(71), 315 SUPCMD_I(72), SUPCMD_I(73), SUPCMD_I(74), SUPCMD_I(75), 316 SUPCMD_I(76), SUPCMD_I(77), SUPCMD_I(78), SUPCMD_I(79), 317 SUPCMD_I(80), SUPCMD_I(81), SUPCMD_I(82), SUPCMD_I(83), 318 SUPCMD_I(84), SUPCMD_I(85), SUPCMD_I(86), SUPCMD_I(87), 319 SUPCMD_I(88), SUPCMD_I(89), SUPCMD_I(90), SUPCMD_I(91), 320 SUPCMD_I(92), SUPCMD_I(93), SUPCMD_I(94), SUPCMD_I(95), 321 SUPCMD_I(96), SUPCMD_I(97), SUPCMD_I(98), SUPCMD_I(99), 322 SUPCMD_I(100), SUPCMD_I(101), SUPCMD_I(102), SUPCMD_I(103), 323 SUPCMD_I(104), SUPCMD_I(105), SUPCMD_I(106), SUPCMD_I(107), 324 SUPCMD_I(108), SUPCMD_I(109), SUPCMD_I(110), SUPCMD_I(111), 325 SUPCMD_I(112), SUPCMD_I(113), SUPCMD_I(114), SUPCMD_I(115), 326 SUPCMD_I(116), SUPCMD_I(117), SUPCMD_I(118), SUPCMD_I(119), 327 SUPCMD_I(120), SUPCMD_I(121), SUPCMD_I(122), SUPCMD_I(123), 328 SUPCMD_I(124), SUPCMD_I(125), SUPCMD_I(126), SUPCMD_I(127), 329 SUPCMD_I(128), SUPCMD_I(129), SUPCMD_I(130), SUPCMD_I(131), 330 SUPCMD_I(132), SUPCMD_I(133), SUPCMD_I(134), SUPCMD_I(135), 331 SUPCMD_I(136), SUPCMD_I(137), SUPCMD_I(138), SUPCMD_I(139), 332 SUPCMD_I(140), SUPCMD_I(141), SUPCMD_I(142), SUPCMD_I(143), 333 SUPCMD_I(144), SUPCMD_I(145), SUPCMD_I(146), SUPCMD_I(147), 334 SUPCMD_I(148), SUPCMD_I(149), SUPCMD_I(150), SUPCMD_I(151), 335 SUPCMD_I(152), SUPCMD_I(153), SUPCMD_I(154), SUPCMD_I(155), 336 SUPCMD_I(156), SUPCMD_I(157), SUPCMD_I(158), SUPCMD_I(159), 337 SUPCMD_I(160), SUPCMD_I(161), SUPCMD_I(162), SUPCMD_I(163), 338 SUPCMD_I(164), SUPCMD_I(165), SUPCMD_I(166), SUPCMD_I(167), 339 SUPCMD_I(168), SUPCMD_I(169), SUPCMD_I(170), SUPCMD_I(171), 340 SUPCMD_I(172), SUPCMD_I(173), SUPCMD_I(174), SUPCMD_I(175), 341 SUPCMD_I(176), SUPCMD_I(177), SUPCMD_I(178), SUPCMD_I(179), 342 SUPCMD_I(180), SUPCMD_I(181), SUPCMD_I(182), SUPCMD_I(183), 343 SUPCMD_I(184), SUPCMD_I(185), SUPCMD_I(186), SUPCMD_I(187), 344 SUPCMD_I(188), SUPCMD_I(189), SUPCMD_I(190), SUPCMD_I(191), 345 SUPCMD_I(192), SUPCMD_I(193), SUPCMD_I(194), SUPCMD_I(195), 346 SUPCMD_I(196), SUPCMD_I(197), SUPCMD_I(198), SUPCMD_I(199), 347 SUPCMD_I(200), SUPCMD_I(201), SUPCMD_I(202), SUPCMD_I(203), 348 SUPCMD_I(204), SUPCMD_I(205), SUPCMD_I(206), SUPCMD_I(207), 349 SUPCMD_I(208), SUPCMD_I(209), SUPCMD_I(210), SUPCMD_I(211), 350 SUPCMD_I(212), SUPCMD_I(213), SUPCMD_I(214), SUPCMD_I(215), 351 SUPCMD_I(216), SUPCMD_I(217), SUPCMD_I(218), SUPCMD_I(219), 352 SUPCMD_I(220), SUPCMD_I(221), SUPCMD_I(222), SUPCMD_I(223), 353 SUPCMD_I(224), SUPCMD_I(225), SUPCMD_I(226), SUPCMD_I(227), 354 SUPCMD_I(228), SUPCMD_I(229), SUPCMD_I(230), SUPCMD_I(231), 355 SUPCMD_I(232), SUPCMD_I(233), SUPCMD_I(234), SUPCMD_I(235), 356 SUPCMD_I(236), SUPCMD_I(237), SUPCMD_I(238), SUPCMD_I(239), 357 SUPCMD_I(240), SUPCMD_I(241), SUPCMD_I(242), SUPCMD_I(243), 358 SUPCMD_I(244), SUPCMD_I(245), SUPCMD_I(246), SUPCMD_I(247), 359 SUPCMD_I(248), SUPCMD_I(249), SUPCMD_I(250), SUPCMD_I(251), 360 SUPCMD_I(252), SUPCMD_I(253), SUPCMD_I(254), SUPCMD_I(255) 361 }; 362 363 const nvmeadm_log_field_info_t supcmd_field_info = { 364 .nlfi_log = "supcmd", 365 .nlfi_fields = supcmd_fields, 366 .nlfi_nfields = ARRAY_SIZE(supcmd_fields), 367 .nlfi_min = sizeof (nvme_cmdeff_log_t), 368 }; 369 370 static const nvmeadm_field_bit_t supmicmd_cs_bits[] = { { 371 .nfb_lowbit = 0, .nfb_hibit = 0, 372 .nfb_short = "csupp", 373 .nfb_desc = "Command", 374 .nfb_type = NVMEADM_FT_STRMAP, 375 .nfb_strs = { "unsupported", "supported" } 376 }, { 377 .nfb_lowbit = 1, .nfb_hibit = 1, 378 .nfb_short = "lbcc", 379 .nfb_desc = "Logical Block Content", 380 .nfb_type = NVMEADM_FT_STRMAP, 381 .nfb_strs = { "unchanged", "changed" } 382 }, { 383 .nfb_lowbit = 2, .nfb_hibit = 2, 384 .nfb_short = "ncc", 385 .nfb_desc = "Namespace Capability", 386 .nfb_type = NVMEADM_FT_STRMAP, 387 .nfb_strs = { "unchanged", "changed" } 388 }, { 389 .nfb_lowbit = 3, .nfb_hibit = 3, 390 .nfb_short = "nic", 391 .nfb_desc = "Namespace Inventory", 392 .nfb_type = NVMEADM_FT_STRMAP, 393 .nfb_strs = { "unchanged", "changed" } 394 }, { 395 .nfb_lowbit = 4, .nfb_hibit = 4, 396 .nfb_short = "ccc", 397 .nfb_desc = "Controller Capability", 398 .nfb_type = NVMEADM_FT_STRMAP, 399 .nfb_strs = { "unchanged", "changed" } 400 }, { 401 .nfb_lowbit = 20, .nfb_hibit = 31, 402 .nfb_short = "csp", 403 .nfb_desc = "Command Scope", 404 .nfb_vers = &nvme_vers_2v0, 405 NVMEADM_FB_BITS(supcmd_csp_bits) 406 } }; 407 408 #define SUPMICMD(f) { .nf_off = offsetof(nvme_supmicmd_log_t, \ 409 mcl_cmds[f]), \ 410 .nf_len = sizeof (((nvme_supmicmd_log_t *)NULL)->mcl_cmds[f]), \ 411 .nf_short = "mics" #f, .nf_desc = \ 412 "Management Interface Command Supported " #f, \ 413 NVMEADM_F_BITS(supmicmd_cs_bits) } 414 415 static const nvmeadm_field_t supmicmd_fields[] = { 416 SUPMICMD(0), SUPMICMD(1), SUPMICMD(2), SUPMICMD(3), 417 SUPMICMD(4), SUPMICMD(5), SUPMICMD(6), SUPMICMD(7), 418 SUPMICMD(8), SUPMICMD(9), SUPMICMD(10), SUPMICMD(11), 419 SUPMICMD(12), SUPMICMD(13), SUPMICMD(14), SUPMICMD(15), 420 SUPMICMD(16), SUPMICMD(17), SUPMICMD(18), SUPMICMD(19), 421 SUPMICMD(20), SUPMICMD(21), SUPMICMD(22), SUPMICMD(23), 422 SUPMICMD(24), SUPMICMD(25), SUPMICMD(26), SUPMICMD(27), 423 SUPMICMD(28), SUPMICMD(29), SUPMICMD(30), SUPMICMD(31), 424 SUPMICMD(32), SUPMICMD(33), SUPMICMD(34), SUPMICMD(35), 425 SUPMICMD(36), SUPMICMD(37), SUPMICMD(38), SUPMICMD(39), 426 SUPMICMD(40), SUPMICMD(41), SUPMICMD(42), SUPMICMD(43), 427 SUPMICMD(44), SUPMICMD(45), SUPMICMD(46), SUPMICMD(47), 428 SUPMICMD(48), SUPMICMD(49), SUPMICMD(50), SUPMICMD(51), 429 SUPMICMD(52), SUPMICMD(53), SUPMICMD(54), SUPMICMD(55), 430 SUPMICMD(56), SUPMICMD(57), SUPMICMD(58), SUPMICMD(59), 431 SUPMICMD(60), SUPMICMD(61), SUPMICMD(62), SUPMICMD(63), 432 SUPMICMD(64), SUPMICMD(65), SUPMICMD(66), SUPMICMD(67), 433 SUPMICMD(68), SUPMICMD(69), SUPMICMD(70), SUPMICMD(71), 434 SUPMICMD(72), SUPMICMD(73), SUPMICMD(74), SUPMICMD(75), 435 SUPMICMD(76), SUPMICMD(77), SUPMICMD(78), SUPMICMD(79), 436 SUPMICMD(80), SUPMICMD(81), SUPMICMD(82), SUPMICMD(83), 437 SUPMICMD(84), SUPMICMD(85), SUPMICMD(86), SUPMICMD(87), 438 SUPMICMD(88), SUPMICMD(89), SUPMICMD(90), SUPMICMD(91), 439 SUPMICMD(92), SUPMICMD(93), SUPMICMD(94), SUPMICMD(95), 440 SUPMICMD(96), SUPMICMD(97), SUPMICMD(98), SUPMICMD(99), 441 SUPMICMD(100), SUPMICMD(101), SUPMICMD(102), SUPMICMD(103), 442 SUPMICMD(104), SUPMICMD(105), SUPMICMD(106), SUPMICMD(107), 443 SUPMICMD(108), SUPMICMD(109), SUPMICMD(110), SUPMICMD(111), 444 SUPMICMD(112), SUPMICMD(113), SUPMICMD(114), SUPMICMD(115), 445 SUPMICMD(116), SUPMICMD(117), SUPMICMD(118), SUPMICMD(119), 446 SUPMICMD(120), SUPMICMD(121), SUPMICMD(122), SUPMICMD(123), 447 SUPMICMD(124), SUPMICMD(125), SUPMICMD(126), SUPMICMD(127), 448 SUPMICMD(128), SUPMICMD(129), SUPMICMD(130), SUPMICMD(131), 449 SUPMICMD(132), SUPMICMD(133), SUPMICMD(134), SUPMICMD(135), 450 SUPMICMD(136), SUPMICMD(137), SUPMICMD(138), SUPMICMD(139), 451 SUPMICMD(140), SUPMICMD(141), SUPMICMD(142), SUPMICMD(143), 452 SUPMICMD(144), SUPMICMD(145), SUPMICMD(146), SUPMICMD(147), 453 SUPMICMD(148), SUPMICMD(149), SUPMICMD(150), SUPMICMD(151), 454 SUPMICMD(152), SUPMICMD(153), SUPMICMD(154), SUPMICMD(155), 455 SUPMICMD(156), SUPMICMD(157), SUPMICMD(158), SUPMICMD(159), 456 SUPMICMD(160), SUPMICMD(161), SUPMICMD(162), SUPMICMD(163), 457 SUPMICMD(164), SUPMICMD(165), SUPMICMD(166), SUPMICMD(167), 458 SUPMICMD(168), SUPMICMD(169), SUPMICMD(170), SUPMICMD(171), 459 SUPMICMD(172), SUPMICMD(173), SUPMICMD(174), SUPMICMD(175), 460 SUPMICMD(176), SUPMICMD(177), SUPMICMD(178), SUPMICMD(179), 461 SUPMICMD(180), SUPMICMD(181), SUPMICMD(182), SUPMICMD(183), 462 SUPMICMD(184), SUPMICMD(185), SUPMICMD(186), SUPMICMD(187), 463 SUPMICMD(188), SUPMICMD(189), SUPMICMD(190), SUPMICMD(191), 464 SUPMICMD(192), SUPMICMD(193), SUPMICMD(194), SUPMICMD(195), 465 SUPMICMD(196), SUPMICMD(197), SUPMICMD(198), SUPMICMD(199), 466 SUPMICMD(200), SUPMICMD(201), SUPMICMD(202), SUPMICMD(203), 467 SUPMICMD(204), SUPMICMD(205), SUPMICMD(206), SUPMICMD(207), 468 SUPMICMD(208), SUPMICMD(209), SUPMICMD(210), SUPMICMD(211), 469 SUPMICMD(212), SUPMICMD(213), SUPMICMD(214), SUPMICMD(215), 470 SUPMICMD(216), SUPMICMD(217), SUPMICMD(218), SUPMICMD(219), 471 SUPMICMD(220), SUPMICMD(221), SUPMICMD(222), SUPMICMD(223), 472 SUPMICMD(224), SUPMICMD(225), SUPMICMD(226), SUPMICMD(227), 473 SUPMICMD(228), SUPMICMD(229), SUPMICMD(230), SUPMICMD(231), 474 SUPMICMD(232), SUPMICMD(233), SUPMICMD(234), SUPMICMD(235), 475 SUPMICMD(236), SUPMICMD(237), SUPMICMD(238), SUPMICMD(239), 476 SUPMICMD(240), SUPMICMD(241), SUPMICMD(242), SUPMICMD(243), 477 SUPMICMD(244), SUPMICMD(245), SUPMICMD(246), SUPMICMD(247), 478 SUPMICMD(248), SUPMICMD(249), SUPMICMD(250), SUPMICMD(251), 479 SUPMICMD(252), SUPMICMD(253), SUPMICMD(254), SUPMICMD(255), 480 }; 481 482 const nvmeadm_log_field_info_t supmicmd_field_info = { 483 .nlfi_log = "supmicmd", 484 .nlfi_fields = supmicmd_fields, 485 .nlfi_nfields = ARRAY_SIZE(supmicmd_fields), 486 .nlfi_min = sizeof (nvme_supmicmd_log_t), 487 }; 488 489 static const nvmeadm_field_bit_t supfeat_csp_bits[] = { { 490 .nfb_lowbit = 0, .nfb_hibit = 0, 491 .nfb_short = "nscpe", 492 .nfb_desc = "Namespace Scope", 493 .nfb_type = NVMEADM_FT_STRMAP, 494 .nfb_strs = { "no", "yes" } 495 }, { 496 .nfb_lowbit = 1, .nfb_hibit = 1, 497 .nfb_short = "cscpe", 498 .nfb_desc = "Controller Scope", 499 .nfb_type = NVMEADM_FT_STRMAP, 500 .nfb_strs = { "no", "yes" } 501 }, { 502 .nfb_lowbit = 2, .nfb_hibit = 2, 503 .nfb_short = "nsetcpe", 504 .nfb_desc = "NVM Set Scope", 505 .nfb_type = NVMEADM_FT_STRMAP, 506 .nfb_strs = { "no", "yes" } 507 }, { 508 .nfb_lowbit = 3, .nfb_hibit = 3, 509 .nfb_short = "egscpe", 510 .nfb_desc = "Endurance Group Scope", 511 .nfb_type = NVMEADM_FT_STRMAP, 512 .nfb_strs = { "no", "yes" } 513 }, { 514 .nfb_lowbit = 4, .nfb_hibit = 4, 515 .nfb_short = "dscpe", 516 .nfb_desc = "Domain Scope", 517 .nfb_type = NVMEADM_FT_STRMAP, 518 .nfb_strs = { "no", "yes" } 519 }, { 520 .nfb_lowbit = 5, .nfb_hibit = 5, 521 .nfb_short = "nsscpe", 522 .nfb_desc = "NVM Subsystem Scope", 523 .nfb_type = NVMEADM_FT_STRMAP, 524 .nfb_strs = { "no", "yes" } 525 }, { 526 .nfb_lowbit = 6, .nfb_hibit = 6, 527 .nfb_short = "cdqscp", 528 .nfb_desc = "Controller Data Queue", 529 .nfb_vers = &nvme_vers_2v1, 530 .nfb_type = NVMEADM_FT_STRMAP, 531 .nfb_strs = { "no", "yes" } 532 } }; 533 534 static const nvmeadm_field_bit_t supfeat_cs_bits[] = { { 535 .nfb_lowbit = 0, .nfb_hibit = 0, 536 .nfb_short = "fsupp", 537 .nfb_desc = "Feature", 538 .nfb_type = NVMEADM_FT_STRMAP, 539 .nfb_strs = { "unsupported", "supported" } 540 }, { 541 .nfb_lowbit = 1, .nfb_hibit = 1, 542 .nfb_short = "lbcc", 543 .nfb_desc = "Logical Block Content", 544 .nfb_type = NVMEADM_FT_STRMAP, 545 .nfb_strs = { "unchanged", "changed" } 546 }, { 547 .nfb_lowbit = 2, .nfb_hibit = 2, 548 .nfb_short = "ncc", 549 .nfb_desc = "Namespace Capability", 550 .nfb_type = NVMEADM_FT_STRMAP, 551 .nfb_strs = { "unchanged", "changed" } 552 }, { 553 .nfb_lowbit = 3, .nfb_hibit = 3, 554 .nfb_short = "nic", 555 .nfb_desc = "Namespace Inventory", 556 .nfb_type = NVMEADM_FT_STRMAP, 557 .nfb_strs = { "unchanged", "changed" } 558 }, { 559 .nfb_lowbit = 4, .nfb_hibit = 4, 560 .nfb_short = "ccc", 561 .nfb_desc = "Controller Capability", 562 .nfb_type = NVMEADM_FT_STRMAP, 563 .nfb_strs = { "unchanged", "changed" } 564 }, { 565 .nfb_lowbit = 19, .nfb_hibit = 19, 566 .nfb_short = "uss", 567 .nfb_vers = &nvme_vers_1v4, 568 .nfb_desc = "UUID Selection", 569 .nfb_type = NVMEADM_FT_STRMAP, 570 .nfb_strs = { "unsupported", "supported" } 571 }, { 572 .nfb_lowbit = 20, .nfb_hibit = 31, 573 .nfb_short = "csp", 574 .nfb_desc = "Command Scope", 575 .nfb_vers = &nvme_vers_2v0, 576 NVMEADM_FB_BITS(supfeat_csp_bits) 577 } }; 578 579 #define SUPFEAT(f) { .nf_off = offsetof(nvme_supfeat_log_t, \ 580 nsl_feats[f]), \ 581 .nf_len = sizeof (((nvme_supfeat_log_t *)NULL)->nsl_feats[f]), \ 582 .nf_short = "fis" #f, .nf_desc = "Feature Identifier Supported " #f, \ 583 NVMEADM_F_BITS(supfeat_cs_bits) } 584 585 static const nvmeadm_field_t supfeat_fields[] = { 586 SUPFEAT(0), SUPFEAT(1), SUPFEAT(2), SUPFEAT(3), 587 SUPFEAT(4), SUPFEAT(5), SUPFEAT(6), SUPFEAT(7), 588 SUPFEAT(8), SUPFEAT(9), SUPFEAT(10), SUPFEAT(11), 589 SUPFEAT(12), SUPFEAT(13), SUPFEAT(14), SUPFEAT(15), 590 SUPFEAT(16), SUPFEAT(17), SUPFEAT(18), SUPFEAT(19), 591 SUPFEAT(20), SUPFEAT(21), SUPFEAT(22), SUPFEAT(23), 592 SUPFEAT(24), SUPFEAT(25), SUPFEAT(26), SUPFEAT(27), 593 SUPFEAT(28), SUPFEAT(29), SUPFEAT(30), SUPFEAT(31), 594 SUPFEAT(32), SUPFEAT(33), SUPFEAT(34), SUPFEAT(35), 595 SUPFEAT(36), SUPFEAT(37), SUPFEAT(38), SUPFEAT(39), 596 SUPFEAT(40), SUPFEAT(41), SUPFEAT(42), SUPFEAT(43), 597 SUPFEAT(44), SUPFEAT(45), SUPFEAT(46), SUPFEAT(47), 598 SUPFEAT(48), SUPFEAT(49), SUPFEAT(50), SUPFEAT(51), 599 SUPFEAT(52), SUPFEAT(53), SUPFEAT(54), SUPFEAT(55), 600 SUPFEAT(56), SUPFEAT(57), SUPFEAT(58), SUPFEAT(59), 601 SUPFEAT(60), SUPFEAT(61), SUPFEAT(62), SUPFEAT(63), 602 SUPFEAT(64), SUPFEAT(65), SUPFEAT(66), SUPFEAT(67), 603 SUPFEAT(68), SUPFEAT(69), SUPFEAT(70), SUPFEAT(71), 604 SUPFEAT(72), SUPFEAT(73), SUPFEAT(74), SUPFEAT(75), 605 SUPFEAT(76), SUPFEAT(77), SUPFEAT(78), SUPFEAT(79), 606 SUPFEAT(80), SUPFEAT(81), SUPFEAT(82), SUPFEAT(83), 607 SUPFEAT(84), SUPFEAT(85), SUPFEAT(86), SUPFEAT(87), 608 SUPFEAT(88), SUPFEAT(89), SUPFEAT(90), SUPFEAT(91), 609 SUPFEAT(92), SUPFEAT(93), SUPFEAT(94), SUPFEAT(95), 610 SUPFEAT(96), SUPFEAT(97), SUPFEAT(98), SUPFEAT(99), 611 SUPFEAT(100), SUPFEAT(101), SUPFEAT(102), SUPFEAT(103), 612 SUPFEAT(104), SUPFEAT(105), SUPFEAT(106), SUPFEAT(107), 613 SUPFEAT(108), SUPFEAT(109), SUPFEAT(110), SUPFEAT(111), 614 SUPFEAT(112), SUPFEAT(113), SUPFEAT(114), SUPFEAT(115), 615 SUPFEAT(116), SUPFEAT(117), SUPFEAT(118), SUPFEAT(119), 616 SUPFEAT(120), SUPFEAT(121), SUPFEAT(122), SUPFEAT(123), 617 SUPFEAT(124), SUPFEAT(125), SUPFEAT(126), SUPFEAT(127), 618 SUPFEAT(128), SUPFEAT(129), SUPFEAT(130), SUPFEAT(131), 619 SUPFEAT(132), SUPFEAT(133), SUPFEAT(134), SUPFEAT(135), 620 SUPFEAT(136), SUPFEAT(137), SUPFEAT(138), SUPFEAT(139), 621 SUPFEAT(140), SUPFEAT(141), SUPFEAT(142), SUPFEAT(143), 622 SUPFEAT(144), SUPFEAT(145), SUPFEAT(146), SUPFEAT(147), 623 SUPFEAT(148), SUPFEAT(149), SUPFEAT(150), SUPFEAT(151), 624 SUPFEAT(152), SUPFEAT(153), SUPFEAT(154), SUPFEAT(155), 625 SUPFEAT(156), SUPFEAT(157), SUPFEAT(158), SUPFEAT(159), 626 SUPFEAT(160), SUPFEAT(161), SUPFEAT(162), SUPFEAT(163), 627 SUPFEAT(164), SUPFEAT(165), SUPFEAT(166), SUPFEAT(167), 628 SUPFEAT(168), SUPFEAT(169), SUPFEAT(170), SUPFEAT(171), 629 SUPFEAT(172), SUPFEAT(173), SUPFEAT(174), SUPFEAT(175), 630 SUPFEAT(176), SUPFEAT(177), SUPFEAT(178), SUPFEAT(179), 631 SUPFEAT(180), SUPFEAT(181), SUPFEAT(182), SUPFEAT(183), 632 SUPFEAT(184), SUPFEAT(185), SUPFEAT(186), SUPFEAT(187), 633 SUPFEAT(188), SUPFEAT(189), SUPFEAT(190), SUPFEAT(191), 634 SUPFEAT(192), SUPFEAT(193), SUPFEAT(194), SUPFEAT(195), 635 SUPFEAT(196), SUPFEAT(197), SUPFEAT(198), SUPFEAT(199), 636 SUPFEAT(200), SUPFEAT(201), SUPFEAT(202), SUPFEAT(203), 637 SUPFEAT(204), SUPFEAT(205), SUPFEAT(206), SUPFEAT(207), 638 SUPFEAT(208), SUPFEAT(209), SUPFEAT(210), SUPFEAT(211), 639 SUPFEAT(212), SUPFEAT(213), SUPFEAT(214), SUPFEAT(215), 640 SUPFEAT(216), SUPFEAT(217), SUPFEAT(218), SUPFEAT(219), 641 SUPFEAT(220), SUPFEAT(221), SUPFEAT(222), SUPFEAT(223), 642 SUPFEAT(224), SUPFEAT(225), SUPFEAT(226), SUPFEAT(227), 643 SUPFEAT(228), SUPFEAT(229), SUPFEAT(230), SUPFEAT(231), 644 SUPFEAT(232), SUPFEAT(233), SUPFEAT(234), SUPFEAT(235), 645 SUPFEAT(236), SUPFEAT(237), SUPFEAT(238), SUPFEAT(239), 646 SUPFEAT(240), SUPFEAT(241), SUPFEAT(242), SUPFEAT(243), 647 SUPFEAT(244), SUPFEAT(245), SUPFEAT(246), SUPFEAT(247), 648 SUPFEAT(248), SUPFEAT(249), SUPFEAT(250), SUPFEAT(251), 649 SUPFEAT(252), SUPFEAT(253), SUPFEAT(254), SUPFEAT(255), 650 }; 651 652 const nvmeadm_log_field_info_t supfeat_field_info = { 653 .nlfi_log = "supfeat", 654 .nlfi_fields = supfeat_fields, 655 .nlfi_nfields = ARRAY_SIZE(supfeat_fields), 656 .nlfi_min = sizeof (nvme_supfeat_log_t), 657 }; 658