xref: /illumos-gate/usr/src/test/nvme-tests/tests/unit/vuc.c (revision 533affcbc7fc4d0c8132976ea454aaa715fe2307)
1*533affcbSRobert Mustacchi /*
2*533affcbSRobert Mustacchi  * This file and its contents are supplied under the terms of the
3*533affcbSRobert Mustacchi  * Common Development and Distribution License ("CDDL"), version 1.0.
4*533affcbSRobert Mustacchi  * You may only use this file in accordance with the terms of version
5*533affcbSRobert Mustacchi  * 1.0 of the CDDL.
6*533affcbSRobert Mustacchi  *
7*533affcbSRobert Mustacchi  * A full copy of the text of the CDDL should have accompanied this
8*533affcbSRobert Mustacchi  * source.  A copy of the CDDL is also available via the Internet at
9*533affcbSRobert Mustacchi  * http://www.illumos.org/license/CDDL.
10*533affcbSRobert Mustacchi  */
11*533affcbSRobert Mustacchi 
12*533affcbSRobert Mustacchi /*
13*533affcbSRobert Mustacchi  * Copyright 2024 Oxide Computer Company
14*533affcbSRobert Mustacchi  */
15*533affcbSRobert Mustacchi 
16*533affcbSRobert Mustacchi /*
17*533affcbSRobert Mustacchi  * Validate fields for the various VUC fields. Note, these do not change with
18*533affcbSRobert Mustacchi  * the controller itself. These have been the same since NVMe 1.0.
19*533affcbSRobert Mustacchi  */
20*533affcbSRobert Mustacchi 
21*533affcbSRobert Mustacchi #include <stdlib.h>
22*533affcbSRobert Mustacchi #include <sys/sysmacros.h>
23*533affcbSRobert Mustacchi #include <err.h>
24*533affcbSRobert Mustacchi 
25*533affcbSRobert Mustacchi #include "nvme_unit.h"
26*533affcbSRobert Mustacchi 
27*533affcbSRobert Mustacchi static const nvme_unit_field_test_t vuc_field_tests[] = { {
28*533affcbSRobert Mustacchi 	.nu_desc = "invalid opcode (1)",
29*533affcbSRobert Mustacchi 	.nu_fields = nvme_vuc_fields,
30*533affcbSRobert Mustacchi 	.nu_index = NVME_VUC_REQ_FIELD_OPC,
31*533affcbSRobert Mustacchi 	.nu_data = &nvme_ctrl_base_1v0,
32*533affcbSRobert Mustacchi 	.nu_value = 0xbf,
33*533affcbSRobert Mustacchi 	.nu_ret = NVME_FIELD_ERR_BAD_VALUE
34*533affcbSRobert Mustacchi }, {
35*533affcbSRobert Mustacchi 	.nu_desc = "invalid opcode (2)",
36*533affcbSRobert Mustacchi 	.nu_fields = nvme_vuc_fields,
37*533affcbSRobert Mustacchi 	.nu_index = NVME_VUC_REQ_FIELD_OPC,
38*533affcbSRobert Mustacchi 	.nu_data = &nvme_ctrl_base_1v0,
39*533affcbSRobert Mustacchi 	.nu_value = 0x100,
40*533affcbSRobert Mustacchi 	.nu_ret = NVME_FIELD_ERR_BAD_VALUE
41*533affcbSRobert Mustacchi }, {
42*533affcbSRobert Mustacchi 	.nu_desc = "invalid opcode (3)",
43*533affcbSRobert Mustacchi 	.nu_fields = nvme_vuc_fields,
44*533affcbSRobert Mustacchi 	.nu_index = NVME_VUC_REQ_FIELD_OPC,
45*533affcbSRobert Mustacchi 	.nu_data = &nvme_ctrl_base_1v0,
46*533affcbSRobert Mustacchi 	.nu_value = 0x3,
47*533affcbSRobert Mustacchi 	.nu_ret = NVME_FIELD_ERR_BAD_VALUE
48*533affcbSRobert Mustacchi }, {
49*533affcbSRobert Mustacchi 	.nu_desc = "valid opcode (1)",
50*533affcbSRobert Mustacchi 	.nu_fields = nvme_vuc_fields,
51*533affcbSRobert Mustacchi 	.nu_index = NVME_VUC_REQ_FIELD_OPC,
52*533affcbSRobert Mustacchi 	.nu_data = &nvme_ctrl_base_1v0,
53*533affcbSRobert Mustacchi 	.nu_value = 0xc0,
54*533affcbSRobert Mustacchi 	.nu_ret = NVME_FIELD_ERR_OK
55*533affcbSRobert Mustacchi }, {
56*533affcbSRobert Mustacchi 	.nu_desc = "valid opcode (2)",
57*533affcbSRobert Mustacchi 	.nu_fields = nvme_vuc_fields,
58*533affcbSRobert Mustacchi 	.nu_index = NVME_VUC_REQ_FIELD_OPC,
59*533affcbSRobert Mustacchi 	.nu_data = &nvme_ctrl_base_1v0,
60*533affcbSRobert Mustacchi 	.nu_value = 0xff,
61*533affcbSRobert Mustacchi 	.nu_ret = NVME_FIELD_ERR_OK
62*533affcbSRobert Mustacchi }, {
63*533affcbSRobert Mustacchi 	.nu_desc = "valid opcode (3)",
64*533affcbSRobert Mustacchi 	.nu_fields = nvme_vuc_fields,
65*533affcbSRobert Mustacchi 	.nu_index = NVME_VUC_REQ_FIELD_OPC,
66*533affcbSRobert Mustacchi 	.nu_data = &nvme_ctrl_base_1v0,
67*533affcbSRobert Mustacchi 	.nu_value = 0xde,
68*533affcbSRobert Mustacchi 	.nu_ret = NVME_FIELD_ERR_OK
69*533affcbSRobert Mustacchi }, {
70*533affcbSRobert Mustacchi 	.nu_desc = "invalid namespace (1)",
71*533affcbSRobert Mustacchi 	.nu_fields = nvme_vuc_fields,
72*533affcbSRobert Mustacchi 	.nu_index = NVME_VUC_REQ_FIELD_NSID,
73*533affcbSRobert Mustacchi 	.nu_data = &nvme_ctrl_base_1v0,
74*533affcbSRobert Mustacchi 	.nu_value = 0x33,
75*533affcbSRobert Mustacchi 	.nu_ret = NVME_FIELD_ERR_BAD_VALUE
76*533affcbSRobert Mustacchi }, {
77*533affcbSRobert Mustacchi 	.nu_desc = "valid namespace (1)",
78*533affcbSRobert Mustacchi 	.nu_fields = nvme_vuc_fields,
79*533affcbSRobert Mustacchi 	.nu_index = NVME_VUC_REQ_FIELD_NSID,
80*533affcbSRobert Mustacchi 	.nu_data = &nvme_ctrl_base_1v0,
81*533affcbSRobert Mustacchi 	.nu_value = 0x0,
82*533affcbSRobert Mustacchi 	.nu_ret = NVME_FIELD_ERR_OK
83*533affcbSRobert Mustacchi }, {
84*533affcbSRobert Mustacchi 	.nu_desc = "valid namespace (2)",
85*533affcbSRobert Mustacchi 	.nu_fields = nvme_vuc_fields,
86*533affcbSRobert Mustacchi 	.nu_index = NVME_VUC_REQ_FIELD_NSID,
87*533affcbSRobert Mustacchi 	.nu_data = &nvme_ctrl_base_1v0,
88*533affcbSRobert Mustacchi 	.nu_value = NVME_NSID_BCAST,
89*533affcbSRobert Mustacchi 	.nu_ret = NVME_FIELD_ERR_OK
90*533affcbSRobert Mustacchi }, {
91*533affcbSRobert Mustacchi 	.nu_desc = "valid namespace (3)",
92*533affcbSRobert Mustacchi 	.nu_fields = nvme_vuc_fields,
93*533affcbSRobert Mustacchi 	.nu_index = NVME_VUC_REQ_FIELD_NSID,
94*533affcbSRobert Mustacchi 	.nu_data = &nvme_ctrl_base_1v0,
95*533affcbSRobert Mustacchi 	.nu_value = 0x1,
96*533affcbSRobert Mustacchi 	.nu_ret = NVME_FIELD_ERR_OK
97*533affcbSRobert Mustacchi }, {
98*533affcbSRobert Mustacchi 	.nu_desc = "invalid cdw12",
99*533affcbSRobert Mustacchi 	.nu_fields = nvme_vuc_fields,
100*533affcbSRobert Mustacchi 	.nu_index = NVME_VUC_REQ_FIELD_CDW12,
101*533affcbSRobert Mustacchi 	.nu_data = &nvme_ctrl_base_1v0,
102*533affcbSRobert Mustacchi 	.nu_value = 0x100000000,
103*533affcbSRobert Mustacchi 	.nu_ret = NVME_FIELD_ERR_BAD_VALUE
104*533affcbSRobert Mustacchi }, {
105*533affcbSRobert Mustacchi 	.nu_desc = "valid cdw12",
106*533affcbSRobert Mustacchi 	.nu_fields = nvme_vuc_fields,
107*533affcbSRobert Mustacchi 	.nu_index = NVME_VUC_REQ_FIELD_CDW12,
108*533affcbSRobert Mustacchi 	.nu_data = &nvme_ctrl_base_1v0,
109*533affcbSRobert Mustacchi 	.nu_value = 0x7777,
110*533affcbSRobert Mustacchi 	.nu_ret = NVME_FIELD_ERR_OK
111*533affcbSRobert Mustacchi }, {
112*533affcbSRobert Mustacchi 	.nu_desc = "invalid cdw13",
113*533affcbSRobert Mustacchi 	.nu_fields = nvme_vuc_fields,
114*533affcbSRobert Mustacchi 	.nu_index = NVME_VUC_REQ_FIELD_CDW13,
115*533affcbSRobert Mustacchi 	.nu_data = &nvme_ctrl_base_1v0,
116*533affcbSRobert Mustacchi 	.nu_value = 0x100000000,
117*533affcbSRobert Mustacchi 	.nu_ret = NVME_FIELD_ERR_BAD_VALUE
118*533affcbSRobert Mustacchi }, {
119*533affcbSRobert Mustacchi 	.nu_desc = "valid cdw13",
120*533affcbSRobert Mustacchi 	.nu_fields = nvme_vuc_fields,
121*533affcbSRobert Mustacchi 	.nu_index = NVME_VUC_REQ_FIELD_CDW13,
122*533affcbSRobert Mustacchi 	.nu_data = &nvme_ctrl_base_1v0,
123*533affcbSRobert Mustacchi 	.nu_value = 0x6666,
124*533affcbSRobert Mustacchi 	.nu_ret = NVME_FIELD_ERR_OK
125*533affcbSRobert Mustacchi }, {
126*533affcbSRobert Mustacchi 	.nu_desc = "invalid cdw14",
127*533affcbSRobert Mustacchi 	.nu_fields = nvme_vuc_fields,
128*533affcbSRobert Mustacchi 	.nu_index = NVME_VUC_REQ_FIELD_CDW14,
129*533affcbSRobert Mustacchi 	.nu_data = &nvme_ctrl_base_1v0,
130*533affcbSRobert Mustacchi 	.nu_value = 0x100000000,
131*533affcbSRobert Mustacchi 	.nu_ret = NVME_FIELD_ERR_BAD_VALUE
132*533affcbSRobert Mustacchi }, {
133*533affcbSRobert Mustacchi 	.nu_desc = "valid cdw14",
134*533affcbSRobert Mustacchi 	.nu_fields = nvme_vuc_fields,
135*533affcbSRobert Mustacchi 	.nu_index = NVME_VUC_REQ_FIELD_CDW14,
136*533affcbSRobert Mustacchi 	.nu_data = &nvme_ctrl_base_1v0,
137*533affcbSRobert Mustacchi 	.nu_value = 0x5555,
138*533affcbSRobert Mustacchi 	.nu_ret = NVME_FIELD_ERR_OK
139*533affcbSRobert Mustacchi }, {
140*533affcbSRobert Mustacchi 	.nu_desc = "invalid cdw15",
141*533affcbSRobert Mustacchi 	.nu_fields = nvme_vuc_fields,
142*533affcbSRobert Mustacchi 	.nu_index = NVME_VUC_REQ_FIELD_CDW15,
143*533affcbSRobert Mustacchi 	.nu_data = &nvme_ctrl_base_1v0,
144*533affcbSRobert Mustacchi 	.nu_value = 0x100000000,
145*533affcbSRobert Mustacchi 	.nu_ret = NVME_FIELD_ERR_BAD_VALUE
146*533affcbSRobert Mustacchi }, {
147*533affcbSRobert Mustacchi 	.nu_desc = "valid cdw15",
148*533affcbSRobert Mustacchi 	.nu_fields = nvme_vuc_fields,
149*533affcbSRobert Mustacchi 	.nu_index = NVME_VUC_REQ_FIELD_CDW15,
150*533affcbSRobert Mustacchi 	.nu_data = &nvme_ctrl_base_1v0,
151*533affcbSRobert Mustacchi 	.nu_value = 0x4444,
152*533affcbSRobert Mustacchi 	.nu_ret = NVME_FIELD_ERR_OK
153*533affcbSRobert Mustacchi }, {
154*533affcbSRobert Mustacchi 	.nu_desc = "invalid ndt (1)",
155*533affcbSRobert Mustacchi 	.nu_fields = nvme_vuc_fields,
156*533affcbSRobert Mustacchi 	.nu_index = NVME_VUC_REQ_FIELD_NDT,
157*533affcbSRobert Mustacchi 	.nu_data = &nvme_ctrl_base_1v0,
158*533affcbSRobert Mustacchi 	.nu_value = 0x400000000,
159*533affcbSRobert Mustacchi 	.nu_ret = NVME_FIELD_ERR_BAD_VALUE
160*533affcbSRobert Mustacchi }, {
161*533affcbSRobert Mustacchi 	.nu_desc = "invalid ndt (2)",
162*533affcbSRobert Mustacchi 	.nu_fields = nvme_vuc_fields,
163*533affcbSRobert Mustacchi 	.nu_index = NVME_VUC_REQ_FIELD_NDT,
164*533affcbSRobert Mustacchi 	.nu_data = &nvme_ctrl_base_1v0,
165*533affcbSRobert Mustacchi 	.nu_value = 0x3,
166*533affcbSRobert Mustacchi 	.nu_ret = NVME_FIELD_ERR_BAD_VALUE
167*533affcbSRobert Mustacchi }, {
168*533affcbSRobert Mustacchi 	.nu_desc = "invalid ndt (3)",
169*533affcbSRobert Mustacchi 	.nu_fields = nvme_vuc_fields,
170*533affcbSRobert Mustacchi 	.nu_index = NVME_VUC_REQ_FIELD_NDT,
171*533affcbSRobert Mustacchi 	.nu_data = &nvme_ctrl_base_1v0,
172*533affcbSRobert Mustacchi 	.nu_value = 0x17,
173*533affcbSRobert Mustacchi 	.nu_ret = NVME_FIELD_ERR_BAD_VALUE
174*533affcbSRobert Mustacchi }, {
175*533affcbSRobert Mustacchi 	.nu_desc = "valid ndt (1)",
176*533affcbSRobert Mustacchi 	.nu_fields = nvme_vuc_fields,
177*533affcbSRobert Mustacchi 	.nu_index = NVME_VUC_REQ_FIELD_NDT,
178*533affcbSRobert Mustacchi 	.nu_data = &nvme_ctrl_base_1v0,
179*533affcbSRobert Mustacchi 	.nu_value = 0x3fffffffc,
180*533affcbSRobert Mustacchi 	.nu_ret = NVME_FIELD_ERR_OK
181*533affcbSRobert Mustacchi }, {
182*533affcbSRobert Mustacchi 	.nu_desc = "valid ndt (2)",
183*533affcbSRobert Mustacchi 	.nu_fields = nvme_vuc_fields,
184*533affcbSRobert Mustacchi 	.nu_index = NVME_VUC_REQ_FIELD_NDT,
185*533affcbSRobert Mustacchi 	.nu_data = &nvme_ctrl_base_1v0,
186*533affcbSRobert Mustacchi 	.nu_value = 0x0,
187*533affcbSRobert Mustacchi 	.nu_ret = NVME_FIELD_ERR_OK
188*533affcbSRobert Mustacchi }, {
189*533affcbSRobert Mustacchi 	.nu_desc = "valid ndt (3)",
190*533affcbSRobert Mustacchi 	.nu_fields = nvme_vuc_fields,
191*533affcbSRobert Mustacchi 	.nu_index = NVME_VUC_REQ_FIELD_NDT,
192*533affcbSRobert Mustacchi 	.nu_data = &nvme_ctrl_base_1v0,
193*533affcbSRobert Mustacchi 	.nu_value = 0x1234,
194*533affcbSRobert Mustacchi 	.nu_ret = NVME_FIELD_ERR_OK
195*533affcbSRobert Mustacchi }, {
196*533affcbSRobert Mustacchi 	.nu_desc = "invalid timeout (1)",
197*533affcbSRobert Mustacchi 	.nu_fields = nvme_vuc_fields,
198*533affcbSRobert Mustacchi 	.nu_index = NVME_VUC_REQ_FIELD_TO,
199*533affcbSRobert Mustacchi 	.nu_data = &nvme_ctrl_base_1v0,
200*533affcbSRobert Mustacchi 	.nu_value = 0x0,
201*533affcbSRobert Mustacchi 	.nu_ret = NVME_FIELD_ERR_BAD_VALUE
202*533affcbSRobert Mustacchi }, {
203*533affcbSRobert Mustacchi 	.nu_desc = "invalid timeout (2)",
204*533affcbSRobert Mustacchi 	.nu_fields = nvme_vuc_fields,
205*533affcbSRobert Mustacchi 	.nu_index = NVME_VUC_REQ_FIELD_TO,
206*533affcbSRobert Mustacchi 	.nu_data = &nvme_ctrl_base_1v0,
207*533affcbSRobert Mustacchi 	.nu_value = 0x100000000,
208*533affcbSRobert Mustacchi 	.nu_ret = NVME_FIELD_ERR_BAD_VALUE
209*533affcbSRobert Mustacchi }, {
210*533affcbSRobert Mustacchi 	.nu_desc = "valid timeout (1)",
211*533affcbSRobert Mustacchi 	.nu_fields = nvme_vuc_fields,
212*533affcbSRobert Mustacchi 	.nu_index = NVME_VUC_REQ_FIELD_TO,
213*533affcbSRobert Mustacchi 	.nu_data = &nvme_ctrl_base_1v0,
214*533affcbSRobert Mustacchi 	.nu_value = 0x1,
215*533affcbSRobert Mustacchi 	.nu_ret = NVME_FIELD_ERR_OK
216*533affcbSRobert Mustacchi }, {
217*533affcbSRobert Mustacchi 	.nu_desc = "valid timeout (2)",
218*533affcbSRobert Mustacchi 	.nu_fields = nvme_vuc_fields,
219*533affcbSRobert Mustacchi 	.nu_index = NVME_VUC_REQ_FIELD_TO,
220*533affcbSRobert Mustacchi 	.nu_data = &nvme_ctrl_base_1v0,
221*533affcbSRobert Mustacchi 	.nu_value = 0x101,
222*533affcbSRobert Mustacchi 	.nu_ret = NVME_FIELD_ERR_OK
223*533affcbSRobert Mustacchi } };
224*533affcbSRobert Mustacchi 
225*533affcbSRobert Mustacchi int
main(void)226*533affcbSRobert Mustacchi main(void)
227*533affcbSRobert Mustacchi {
228*533affcbSRobert Mustacchi 	int ret = EXIT_SUCCESS;
229*533affcbSRobert Mustacchi 
230*533affcbSRobert Mustacchi 	if (!nvme_unit_field_test(vuc_field_tests,
231*533affcbSRobert Mustacchi 	    ARRAY_SIZE(vuc_field_tests))) {
232*533affcbSRobert Mustacchi 		ret = EXIT_FAILURE;
233*533affcbSRobert Mustacchi 	}
234*533affcbSRobert Mustacchi 
235*533affcbSRobert Mustacchi 	if (ret == EXIT_SUCCESS) {
236*533affcbSRobert Mustacchi 		(void) printf("All tests passed successfully!\n");
237*533affcbSRobert Mustacchi 	}
238*533affcbSRobert Mustacchi 
239*533affcbSRobert Mustacchi 	return (ret);
240*533affcbSRobert Mustacchi }
241