xref: /illumos-gate/usr/src/cmd/nvmeadm/nvmeadm_field_suplog.c (revision ffd3f1847d39a0d148aa934d9051f453189adfe2)
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