xref: /f-stack/dpdk/app/test-bbdev/test_bbdev.c (revision d30ea906)
1*d30ea906Sjfb8856606 /* SPDX-License-Identifier: BSD-3-Clause
2*d30ea906Sjfb8856606  * Copyright(c) 2017 Intel Corporation
3*d30ea906Sjfb8856606  */
4*d30ea906Sjfb8856606 
5*d30ea906Sjfb8856606 #include <rte_common.h>
6*d30ea906Sjfb8856606 #include <rte_hexdump.h>
7*d30ea906Sjfb8856606 #include <rte_mbuf.h>
8*d30ea906Sjfb8856606 #include <rte_malloc.h>
9*d30ea906Sjfb8856606 #include <rte_memcpy.h>
10*d30ea906Sjfb8856606 #include <rte_cycles.h>
11*d30ea906Sjfb8856606 
12*d30ea906Sjfb8856606 #include <rte_bus_vdev.h>
13*d30ea906Sjfb8856606 
14*d30ea906Sjfb8856606 #include <rte_bbdev.h>
15*d30ea906Sjfb8856606 #include <rte_bbdev_op.h>
16*d30ea906Sjfb8856606 #include <rte_bbdev_pmd.h>
17*d30ea906Sjfb8856606 
18*d30ea906Sjfb8856606 #include "main.h"
19*d30ea906Sjfb8856606 
20*d30ea906Sjfb8856606 
21*d30ea906Sjfb8856606 #define BBDEV_NAME_NULL          ("bbdev_null")
22*d30ea906Sjfb8856606 
23*d30ea906Sjfb8856606 struct bbdev_testsuite_params {
24*d30ea906Sjfb8856606 	struct rte_bbdev_queue_conf qconf;
25*d30ea906Sjfb8856606 };
26*d30ea906Sjfb8856606 
27*d30ea906Sjfb8856606 static struct bbdev_testsuite_params testsuite_params;
28*d30ea906Sjfb8856606 
29*d30ea906Sjfb8856606 static uint8_t null_dev_id;
30*d30ea906Sjfb8856606 
31*d30ea906Sjfb8856606 static int
32*d30ea906Sjfb8856606 testsuite_setup(void)
33*d30ea906Sjfb8856606 {
34*d30ea906Sjfb8856606 	uint8_t nb_devs;
35*d30ea906Sjfb8856606 	int ret;
36*d30ea906Sjfb8856606 	char buf[RTE_BBDEV_NAME_MAX_LEN];
37*d30ea906Sjfb8856606 
38*d30ea906Sjfb8856606 	/* Create test device */
39*d30ea906Sjfb8856606 	snprintf(buf, sizeof(buf), "%s_unittest", BBDEV_NAME_NULL);
40*d30ea906Sjfb8856606 	ret = rte_vdev_init(buf, NULL);
41*d30ea906Sjfb8856606 	TEST_ASSERT(ret == 0, "Failed to create instance of pmd: %s", buf);
42*d30ea906Sjfb8856606 
43*d30ea906Sjfb8856606 	nb_devs = rte_bbdev_count();
44*d30ea906Sjfb8856606 	TEST_ASSERT(nb_devs != 0, "No devices found");
45*d30ea906Sjfb8856606 
46*d30ea906Sjfb8856606 	/* Most recently created device is our device */
47*d30ea906Sjfb8856606 	null_dev_id = nb_devs - 1;
48*d30ea906Sjfb8856606 
49*d30ea906Sjfb8856606 	return TEST_SUCCESS;
50*d30ea906Sjfb8856606 }
51*d30ea906Sjfb8856606 
52*d30ea906Sjfb8856606 static void
53*d30ea906Sjfb8856606 testsuite_teardown(void)
54*d30ea906Sjfb8856606 {
55*d30ea906Sjfb8856606 	char buf[RTE_BBDEV_NAME_MAX_LEN];
56*d30ea906Sjfb8856606 
57*d30ea906Sjfb8856606 	snprintf(buf, sizeof(buf), "%s_unittest", BBDEV_NAME_NULL);
58*d30ea906Sjfb8856606 	rte_vdev_uninit(buf);
59*d30ea906Sjfb8856606 }
60*d30ea906Sjfb8856606 
61*d30ea906Sjfb8856606 static int
62*d30ea906Sjfb8856606 ut_setup(void)
63*d30ea906Sjfb8856606 {
64*d30ea906Sjfb8856606 	struct bbdev_testsuite_params *ts_params = &testsuite_params;
65*d30ea906Sjfb8856606 	uint8_t num_queues;
66*d30ea906Sjfb8856606 
67*d30ea906Sjfb8856606 	/* Valid queue configuration */
68*d30ea906Sjfb8856606 	ts_params->qconf.priority = 0;
69*d30ea906Sjfb8856606 	ts_params->qconf.socket = SOCKET_ID_ANY;
70*d30ea906Sjfb8856606 	ts_params->qconf.deferred_start = 1;
71*d30ea906Sjfb8856606 
72*d30ea906Sjfb8856606 	num_queues = 1;
73*d30ea906Sjfb8856606 	TEST_ASSERT_SUCCESS(rte_bbdev_setup_queues(null_dev_id, num_queues,
74*d30ea906Sjfb8856606 			SOCKET_ID_ANY), "Failed to setup queues for bbdev %u",
75*d30ea906Sjfb8856606 			0);
76*d30ea906Sjfb8856606 
77*d30ea906Sjfb8856606 	/* Start the device */
78*d30ea906Sjfb8856606 	TEST_ASSERT_SUCCESS(rte_bbdev_start(null_dev_id),
79*d30ea906Sjfb8856606 			"Failed to start bbdev %u", 0);
80*d30ea906Sjfb8856606 
81*d30ea906Sjfb8856606 	return TEST_SUCCESS;
82*d30ea906Sjfb8856606 }
83*d30ea906Sjfb8856606 
84*d30ea906Sjfb8856606 static void
85*d30ea906Sjfb8856606 ut_teardown(void)
86*d30ea906Sjfb8856606 {
87*d30ea906Sjfb8856606 	rte_bbdev_close(null_dev_id);
88*d30ea906Sjfb8856606 }
89*d30ea906Sjfb8856606 
90*d30ea906Sjfb8856606 static int
91*d30ea906Sjfb8856606 test_bbdev_configure_invalid_dev_id(void)
92*d30ea906Sjfb8856606 {
93*d30ea906Sjfb8856606 	uint8_t dev_id;
94*d30ea906Sjfb8856606 	uint8_t num_queues;
95*d30ea906Sjfb8856606 
96*d30ea906Sjfb8856606 	num_queues = 1;
97*d30ea906Sjfb8856606 	for (dev_id = 0; dev_id < RTE_BBDEV_MAX_DEVS; dev_id++) {
98*d30ea906Sjfb8856606 		if (!rte_bbdev_is_valid(dev_id)) {
99*d30ea906Sjfb8856606 			TEST_ASSERT_FAIL(rte_bbdev_setup_queues(dev_id,
100*d30ea906Sjfb8856606 					num_queues, SOCKET_ID_ANY),
101*d30ea906Sjfb8856606 					"Failed test for rte_bbdev_setup_queues: "
102*d30ea906Sjfb8856606 					"invalid dev_num %u", dev_id);
103*d30ea906Sjfb8856606 			TEST_ASSERT(rte_bbdev_intr_enable(dev_id) == -ENODEV,
104*d30ea906Sjfb8856606 					"Failed test for rte_bbdev_intr_enable: "
105*d30ea906Sjfb8856606 					"invalid dev_num %u", dev_id);
106*d30ea906Sjfb8856606 			break;
107*d30ea906Sjfb8856606 		}
108*d30ea906Sjfb8856606 	}
109*d30ea906Sjfb8856606 
110*d30ea906Sjfb8856606 	return TEST_SUCCESS;
111*d30ea906Sjfb8856606 }
112*d30ea906Sjfb8856606 
113*d30ea906Sjfb8856606 static int
114*d30ea906Sjfb8856606 test_bbdev_configure_invalid_num_queues(void)
115*d30ea906Sjfb8856606 {
116*d30ea906Sjfb8856606 	struct rte_bbdev_info info;
117*d30ea906Sjfb8856606 	uint8_t dev_id, num_devs;
118*d30ea906Sjfb8856606 	uint8_t num_queues;
119*d30ea906Sjfb8856606 	int return_value;
120*d30ea906Sjfb8856606 
121*d30ea906Sjfb8856606 	TEST_ASSERT((num_devs = rte_bbdev_count()) >= 1,
122*d30ea906Sjfb8856606 			"Need at least %d devices for test", 1);
123*d30ea906Sjfb8856606 
124*d30ea906Sjfb8856606 	/* valid num_queues values */
125*d30ea906Sjfb8856606 	num_queues = 8;
126*d30ea906Sjfb8856606 
127*d30ea906Sjfb8856606 	/* valid dev_id values */
128*d30ea906Sjfb8856606 	dev_id = null_dev_id;
129*d30ea906Sjfb8856606 
130*d30ea906Sjfb8856606 	/* Stop the device in case it's started so it can be configured */
131*d30ea906Sjfb8856606 	rte_bbdev_stop(dev_id);
132*d30ea906Sjfb8856606 
133*d30ea906Sjfb8856606 	TEST_ASSERT_FAIL(rte_bbdev_setup_queues(dev_id, 0, SOCKET_ID_ANY),
134*d30ea906Sjfb8856606 			"Failed test for rte_bbdev_setup_queues: "
135*d30ea906Sjfb8856606 			"invalid num_queues %d", 0);
136*d30ea906Sjfb8856606 
137*d30ea906Sjfb8856606 	TEST_ASSERT_SUCCESS(rte_bbdev_setup_queues(dev_id, num_queues,
138*d30ea906Sjfb8856606 			SOCKET_ID_ANY),
139*d30ea906Sjfb8856606 			"Failed test for rte_bbdev_setup_queues: "
140*d30ea906Sjfb8856606 			"invalid dev_num %u", dev_id);
141*d30ea906Sjfb8856606 
142*d30ea906Sjfb8856606 	TEST_ASSERT_FAIL(return_value = rte_bbdev_info_get(dev_id, NULL),
143*d30ea906Sjfb8856606 			 "Failed test for rte_bbdev_info_get: "
144*d30ea906Sjfb8856606 			 "returned value:%i", return_value);
145*d30ea906Sjfb8856606 
146*d30ea906Sjfb8856606 	TEST_ASSERT_SUCCESS(return_value = rte_bbdev_info_get(dev_id, &info),
147*d30ea906Sjfb8856606 			"Failed test for rte_bbdev_info_get: "
148*d30ea906Sjfb8856606 			"invalid return value:%i", return_value);
149*d30ea906Sjfb8856606 
150*d30ea906Sjfb8856606 	TEST_ASSERT(info.num_queues == num_queues,
151*d30ea906Sjfb8856606 			"Failed test for rte_bbdev_info_get: "
152*d30ea906Sjfb8856606 			"invalid num_queues:%u", info.num_queues);
153*d30ea906Sjfb8856606 
154*d30ea906Sjfb8856606 	num_queues = info.drv.max_num_queues;
155*d30ea906Sjfb8856606 	TEST_ASSERT_SUCCESS(rte_bbdev_setup_queues(dev_id, num_queues,
156*d30ea906Sjfb8856606 			SOCKET_ID_ANY),
157*d30ea906Sjfb8856606 			"Failed test for rte_bbdev_setup_queues: "
158*d30ea906Sjfb8856606 			"invalid num_queues: %u", num_queues);
159*d30ea906Sjfb8856606 
160*d30ea906Sjfb8856606 	num_queues++;
161*d30ea906Sjfb8856606 	TEST_ASSERT_FAIL(rte_bbdev_setup_queues(dev_id, num_queues,
162*d30ea906Sjfb8856606 			SOCKET_ID_ANY),
163*d30ea906Sjfb8856606 			"Failed test for rte_bbdev_setup_queues: "
164*d30ea906Sjfb8856606 			"invalid num_queues: %u", num_queues);
165*d30ea906Sjfb8856606 
166*d30ea906Sjfb8856606 	return TEST_SUCCESS;
167*d30ea906Sjfb8856606 }
168*d30ea906Sjfb8856606 
169*d30ea906Sjfb8856606 static int
170*d30ea906Sjfb8856606 test_bbdev_configure_stop_device(void)
171*d30ea906Sjfb8856606 {
172*d30ea906Sjfb8856606 	struct rte_bbdev_info info;
173*d30ea906Sjfb8856606 	uint8_t dev_id;
174*d30ea906Sjfb8856606 	int return_value;
175*d30ea906Sjfb8856606 
176*d30ea906Sjfb8856606 	/* valid dev_id values */
177*d30ea906Sjfb8856606 	dev_id = null_dev_id;
178*d30ea906Sjfb8856606 
179*d30ea906Sjfb8856606 	/* Stop the device so it can be configured */
180*d30ea906Sjfb8856606 	rte_bbdev_stop(dev_id);
181*d30ea906Sjfb8856606 
182*d30ea906Sjfb8856606 	TEST_ASSERT_SUCCESS(return_value = rte_bbdev_info_get(dev_id, &info),
183*d30ea906Sjfb8856606 			"Failed test for rte_bbdev_info_get: "
184*d30ea906Sjfb8856606 			"invalid return value from "
185*d30ea906Sjfb8856606 			"rte_bbdev_info_get function: %i", return_value);
186*d30ea906Sjfb8856606 
187*d30ea906Sjfb8856606 	TEST_ASSERT_SUCCESS(info.started, "Failed test for rte_bbdev_info_get: "
188*d30ea906Sjfb8856606 			"started value: %u", info.started);
189*d30ea906Sjfb8856606 
190*d30ea906Sjfb8856606 	TEST_ASSERT_SUCCESS(rte_bbdev_setup_queues(dev_id,
191*d30ea906Sjfb8856606 			info.drv.max_num_queues, SOCKET_ID_ANY),
192*d30ea906Sjfb8856606 			"Failed test for rte_bbdev_setup_queues: "
193*d30ea906Sjfb8856606 			"device should be stopped, dev_id: %u", dev_id);
194*d30ea906Sjfb8856606 
195*d30ea906Sjfb8856606 	return_value = rte_bbdev_intr_enable(dev_id);
196*d30ea906Sjfb8856606 	TEST_ASSERT(return_value != -EBUSY,
197*d30ea906Sjfb8856606 			"Failed test for rte_bbdev_intr_enable: device should be stopped, dev_id: %u",
198*d30ea906Sjfb8856606 			dev_id);
199*d30ea906Sjfb8856606 
200*d30ea906Sjfb8856606 	/* Start the device so it cannot be configured */
201*d30ea906Sjfb8856606 	TEST_ASSERT_FAIL(rte_bbdev_start(RTE_BBDEV_MAX_DEVS),
202*d30ea906Sjfb8856606 			"Failed to start bbdev %u", dev_id);
203*d30ea906Sjfb8856606 
204*d30ea906Sjfb8856606 	TEST_ASSERT_SUCCESS(rte_bbdev_start(dev_id),
205*d30ea906Sjfb8856606 			"Failed to start bbdev %u", dev_id);
206*d30ea906Sjfb8856606 
207*d30ea906Sjfb8856606 	TEST_ASSERT_SUCCESS(return_value = rte_bbdev_info_get(dev_id, &info),
208*d30ea906Sjfb8856606 			"Failed test for rte_bbdev_info_get: "
209*d30ea906Sjfb8856606 			"invalid return value from "
210*d30ea906Sjfb8856606 			"rte_bbdev_info_get function: %i", return_value);
211*d30ea906Sjfb8856606 
212*d30ea906Sjfb8856606 	TEST_ASSERT_FAIL(info.started, "Failed test for rte_bbdev_info_get: "
213*d30ea906Sjfb8856606 			"started value: %u", info.started);
214*d30ea906Sjfb8856606 
215*d30ea906Sjfb8856606 	TEST_ASSERT_FAIL(rte_bbdev_setup_queues(dev_id,
216*d30ea906Sjfb8856606 			info.drv.max_num_queues, SOCKET_ID_ANY),
217*d30ea906Sjfb8856606 			"Failed test for rte_bbdev_setup_queues: "
218*d30ea906Sjfb8856606 			"device should be started, dev_id: %u", dev_id);
219*d30ea906Sjfb8856606 
220*d30ea906Sjfb8856606 	return_value = rte_bbdev_intr_enable(dev_id);
221*d30ea906Sjfb8856606 	TEST_ASSERT(return_value == -EBUSY,
222*d30ea906Sjfb8856606 			"Failed test for rte_bbdev_intr_enable: device should be started, dev_id: %u",
223*d30ea906Sjfb8856606 			dev_id);
224*d30ea906Sjfb8856606 
225*d30ea906Sjfb8856606 	/* Stop again the device so it can be once again configured */
226*d30ea906Sjfb8856606 	TEST_ASSERT_FAIL(rte_bbdev_stop(RTE_BBDEV_MAX_DEVS),
227*d30ea906Sjfb8856606 			"Failed to start bbdev %u", dev_id);
228*d30ea906Sjfb8856606 
229*d30ea906Sjfb8856606 	TEST_ASSERT_SUCCESS(rte_bbdev_stop(dev_id), "Failed to stop bbdev %u",
230*d30ea906Sjfb8856606 			dev_id);
231*d30ea906Sjfb8856606 
232*d30ea906Sjfb8856606 	TEST_ASSERT_SUCCESS(return_value = rte_bbdev_info_get(dev_id, &info),
233*d30ea906Sjfb8856606 			"Failed test for rte_bbdev_info_get: "
234*d30ea906Sjfb8856606 			"invalid return value from "
235*d30ea906Sjfb8856606 			"rte_bbdev_info_get function: %i", return_value);
236*d30ea906Sjfb8856606 
237*d30ea906Sjfb8856606 	TEST_ASSERT_SUCCESS(info.started, "Failed test for rte_bbdev_info_get: "
238*d30ea906Sjfb8856606 			"started value: %u", info.started);
239*d30ea906Sjfb8856606 
240*d30ea906Sjfb8856606 	TEST_ASSERT_SUCCESS(rte_bbdev_setup_queues(dev_id,
241*d30ea906Sjfb8856606 			info.drv.max_num_queues, SOCKET_ID_ANY),
242*d30ea906Sjfb8856606 			"Failed test for rte_bbdev_setup_queues: "
243*d30ea906Sjfb8856606 			"device should be stopped, dev_id: %u", dev_id);
244*d30ea906Sjfb8856606 
245*d30ea906Sjfb8856606 	return_value = rte_bbdev_intr_enable(dev_id);
246*d30ea906Sjfb8856606 	TEST_ASSERT(return_value != -EBUSY,
247*d30ea906Sjfb8856606 			"Failed test for rte_bbdev_intr_enable: device should be stopped, dev_id: %u",
248*d30ea906Sjfb8856606 			dev_id);
249*d30ea906Sjfb8856606 
250*d30ea906Sjfb8856606 	return TEST_SUCCESS;
251*d30ea906Sjfb8856606 }
252*d30ea906Sjfb8856606 
253*d30ea906Sjfb8856606 static int
254*d30ea906Sjfb8856606 test_bbdev_configure_stop_queue(void)
255*d30ea906Sjfb8856606 {
256*d30ea906Sjfb8856606 	struct bbdev_testsuite_params *ts_params = &testsuite_params;
257*d30ea906Sjfb8856606 	struct rte_bbdev_info info;
258*d30ea906Sjfb8856606 	struct rte_bbdev_queue_info qinfo;
259*d30ea906Sjfb8856606 	uint8_t dev_id;
260*d30ea906Sjfb8856606 	uint16_t queue_id;
261*d30ea906Sjfb8856606 	int return_value;
262*d30ea906Sjfb8856606 
263*d30ea906Sjfb8856606 	/* Valid dev_id values */
264*d30ea906Sjfb8856606 	dev_id = null_dev_id;
265*d30ea906Sjfb8856606 
266*d30ea906Sjfb8856606 	/* Valid queue_id values */
267*d30ea906Sjfb8856606 	queue_id = 0;
268*d30ea906Sjfb8856606 
269*d30ea906Sjfb8856606 	rte_bbdev_stop(dev_id);
270*d30ea906Sjfb8856606 	TEST_ASSERT_SUCCESS(return_value = rte_bbdev_info_get(dev_id, &info),
271*d30ea906Sjfb8856606 			"Failed test for rte_bbdev_info_get: "
272*d30ea906Sjfb8856606 			"invalid return value:%i", return_value);
273*d30ea906Sjfb8856606 
274*d30ea906Sjfb8856606 	/* Valid queue configuration */
275*d30ea906Sjfb8856606 	ts_params->qconf.queue_size = info.drv.queue_size_lim;
276*d30ea906Sjfb8856606 	ts_params->qconf.priority = info.drv.max_ul_queue_priority;
277*d30ea906Sjfb8856606 
278*d30ea906Sjfb8856606 	/* Device - started; queue - started */
279*d30ea906Sjfb8856606 	rte_bbdev_start(dev_id);
280*d30ea906Sjfb8856606 
281*d30ea906Sjfb8856606 	TEST_ASSERT_FAIL(rte_bbdev_queue_configure(dev_id, queue_id,
282*d30ea906Sjfb8856606 			&ts_params->qconf),
283*d30ea906Sjfb8856606 			"Failed test for rte_bbdev_queue_configure: "
284*d30ea906Sjfb8856606 			"queue:%u on device:%u should be stopped",
285*d30ea906Sjfb8856606 			 queue_id, dev_id);
286*d30ea906Sjfb8856606 
287*d30ea906Sjfb8856606 	/* Device - stopped; queue - started */
288*d30ea906Sjfb8856606 	rte_bbdev_stop(dev_id);
289*d30ea906Sjfb8856606 
290*d30ea906Sjfb8856606 	TEST_ASSERT_FAIL(rte_bbdev_queue_configure(dev_id, queue_id,
291*d30ea906Sjfb8856606 			&ts_params->qconf),
292*d30ea906Sjfb8856606 			"Failed test for rte_bbdev_queue_configure: "
293*d30ea906Sjfb8856606 			"queue:%u on device:%u should be stopped",
294*d30ea906Sjfb8856606 			 queue_id, dev_id);
295*d30ea906Sjfb8856606 
296*d30ea906Sjfb8856606 	TEST_ASSERT_FAIL(rte_bbdev_queue_stop(RTE_BBDEV_MAX_DEVS, queue_id),
297*d30ea906Sjfb8856606 			"Failed test for rte_bbdev_queue_stop "
298*d30ea906Sjfb8856606 			"invalid dev_id ");
299*d30ea906Sjfb8856606 
300*d30ea906Sjfb8856606 	TEST_ASSERT_FAIL(rte_bbdev_queue_stop(dev_id, RTE_MAX_QUEUES_PER_PORT),
301*d30ea906Sjfb8856606 			"Failed test for rte_bbdev_queue_stop "
302*d30ea906Sjfb8856606 			"invalid queue_id ");
303*d30ea906Sjfb8856606 
304*d30ea906Sjfb8856606 	/* Device - stopped; queue - stopped */
305*d30ea906Sjfb8856606 	rte_bbdev_queue_stop(dev_id, queue_id);
306*d30ea906Sjfb8856606 
307*d30ea906Sjfb8856606 	TEST_ASSERT_SUCCESS(rte_bbdev_queue_configure(dev_id, queue_id,
308*d30ea906Sjfb8856606 			&ts_params->qconf),
309*d30ea906Sjfb8856606 			"Failed test for rte_bbdev_queue_configure: "
310*d30ea906Sjfb8856606 			"queue:%u on device:%u should be stopped", queue_id,
311*d30ea906Sjfb8856606 			dev_id);
312*d30ea906Sjfb8856606 
313*d30ea906Sjfb8856606 	TEST_ASSERT_SUCCESS(return_value = rte_bbdev_queue_info_get(dev_id,
314*d30ea906Sjfb8856606 			queue_id, &qinfo),
315*d30ea906Sjfb8856606 			"Failed test for rte_bbdev_info_get: "
316*d30ea906Sjfb8856606 			"invalid return value from "
317*d30ea906Sjfb8856606 			"rte_bbdev_queue_info_get function: %i", return_value);
318*d30ea906Sjfb8856606 
319*d30ea906Sjfb8856606 	TEST_ASSERT(qinfo.conf.socket == ts_params->qconf.socket,
320*d30ea906Sjfb8856606 			"Failed test for rte_bbdev_queue_info_get: "
321*d30ea906Sjfb8856606 			"invalid queue_size:%u", qinfo.conf.socket);
322*d30ea906Sjfb8856606 
323*d30ea906Sjfb8856606 	TEST_ASSERT(qinfo.conf.queue_size == ts_params->qconf.queue_size,
324*d30ea906Sjfb8856606 			"Failed test for rte_bbdev_queue_info_get: "
325*d30ea906Sjfb8856606 			"invalid queue_size:%u", qinfo.conf.queue_size);
326*d30ea906Sjfb8856606 
327*d30ea906Sjfb8856606 	TEST_ASSERT(qinfo.conf.priority == ts_params->qconf.priority,
328*d30ea906Sjfb8856606 			"Failed test for rte_bbdev_queue_info_get: "
329*d30ea906Sjfb8856606 			"invalid queue_size:%u", qinfo.conf.priority);
330*d30ea906Sjfb8856606 
331*d30ea906Sjfb8856606 	TEST_ASSERT(qinfo.conf.deferred_start ==
332*d30ea906Sjfb8856606 			ts_params->qconf.deferred_start,
333*d30ea906Sjfb8856606 			"Failed test for rte_bbdev_queue_info_get: "
334*d30ea906Sjfb8856606 			"invalid queue_size:%u", qinfo.conf.deferred_start);
335*d30ea906Sjfb8856606 
336*d30ea906Sjfb8856606 	/* Device - started; queue - stopped */
337*d30ea906Sjfb8856606 	rte_bbdev_start(dev_id);
338*d30ea906Sjfb8856606 	rte_bbdev_queue_stop(dev_id, queue_id);
339*d30ea906Sjfb8856606 
340*d30ea906Sjfb8856606 	TEST_ASSERT_FAIL(rte_bbdev_queue_configure(dev_id, queue_id,
341*d30ea906Sjfb8856606 			&ts_params->qconf),
342*d30ea906Sjfb8856606 			"Failed test for rte_bbdev_queue_configure: "
343*d30ea906Sjfb8856606 			"queue:%u on device:%u should be stopped", queue_id,
344*d30ea906Sjfb8856606 			dev_id);
345*d30ea906Sjfb8856606 
346*d30ea906Sjfb8856606 	rte_bbdev_stop(dev_id);
347*d30ea906Sjfb8856606 
348*d30ea906Sjfb8856606 	/* After rte_bbdev_start(dev_id):
349*d30ea906Sjfb8856606 	 * - queue should be still stopped if deferred_start ==
350*d30ea906Sjfb8856606 	 */
351*d30ea906Sjfb8856606 	rte_bbdev_start(dev_id);
352*d30ea906Sjfb8856606 
353*d30ea906Sjfb8856606 	TEST_ASSERT_SUCCESS(return_value = rte_bbdev_queue_info_get(dev_id,
354*d30ea906Sjfb8856606 			queue_id, &qinfo),
355*d30ea906Sjfb8856606 			"Failed test for rte_bbdev_info_get: "
356*d30ea906Sjfb8856606 			"invalid return value from "
357*d30ea906Sjfb8856606 			"rte_bbdev_queue_info_get function: %i", return_value);
358*d30ea906Sjfb8856606 
359*d30ea906Sjfb8856606 	TEST_ASSERT(qinfo.started == 0,
360*d30ea906Sjfb8856606 			"Failed test for rte_bbdev_queue_info_get: "
361*d30ea906Sjfb8856606 			"invalid value for qinfo.started:%u", qinfo.started);
362*d30ea906Sjfb8856606 
363*d30ea906Sjfb8856606 	rte_bbdev_stop(dev_id);
364*d30ea906Sjfb8856606 
365*d30ea906Sjfb8856606 	/* After rte_bbdev_start(dev_id):
366*d30ea906Sjfb8856606 	 * - queue should be started if deferred_start ==
367*d30ea906Sjfb8856606 	 */
368*d30ea906Sjfb8856606 	ts_params->qconf.deferred_start = 0;
369*d30ea906Sjfb8856606 	rte_bbdev_queue_configure(dev_id, queue_id, &ts_params->qconf);
370*d30ea906Sjfb8856606 	rte_bbdev_start(dev_id);
371*d30ea906Sjfb8856606 
372*d30ea906Sjfb8856606 	TEST_ASSERT_SUCCESS(return_value = rte_bbdev_queue_info_get(dev_id,
373*d30ea906Sjfb8856606 			queue_id, &qinfo),
374*d30ea906Sjfb8856606 			"Failed test for rte_bbdev_info_get: "
375*d30ea906Sjfb8856606 			"invalid return value from "
376*d30ea906Sjfb8856606 			"rte_bbdev_queue_info_get function: %i", return_value);
377*d30ea906Sjfb8856606 
378*d30ea906Sjfb8856606 	TEST_ASSERT(qinfo.started == 1,
379*d30ea906Sjfb8856606 			"Failed test for rte_bbdev_queue_info_get: "
380*d30ea906Sjfb8856606 			"invalid value for qinfo.started:%u", qinfo.started);
381*d30ea906Sjfb8856606 
382*d30ea906Sjfb8856606 	return TEST_SUCCESS;
383*d30ea906Sjfb8856606 }
384*d30ea906Sjfb8856606 
385*d30ea906Sjfb8856606 static int
386*d30ea906Sjfb8856606 test_bbdev_configure_invalid_queue_configure(void)
387*d30ea906Sjfb8856606 {
388*d30ea906Sjfb8856606 	struct bbdev_testsuite_params *ts_params = &testsuite_params;
389*d30ea906Sjfb8856606 	int return_value;
390*d30ea906Sjfb8856606 	struct rte_bbdev_info info;
391*d30ea906Sjfb8856606 	uint8_t dev_id;
392*d30ea906Sjfb8856606 	uint16_t queue_id;
393*d30ea906Sjfb8856606 
394*d30ea906Sjfb8856606 	/* Valid dev_id values */
395*d30ea906Sjfb8856606 	dev_id = null_dev_id;
396*d30ea906Sjfb8856606 
397*d30ea906Sjfb8856606 	/* Valid queue_id values */
398*d30ea906Sjfb8856606 	queue_id = 0;
399*d30ea906Sjfb8856606 
400*d30ea906Sjfb8856606 	rte_bbdev_stop(dev_id);
401*d30ea906Sjfb8856606 
402*d30ea906Sjfb8856606 	TEST_ASSERT_SUCCESS(return_value = rte_bbdev_info_get(dev_id, &info),
403*d30ea906Sjfb8856606 			"Failed test for rte_bbdev_info_get: "
404*d30ea906Sjfb8856606 			"invalid return value:%i", return_value);
405*d30ea906Sjfb8856606 
406*d30ea906Sjfb8856606 	rte_bbdev_queue_stop(dev_id, queue_id);
407*d30ea906Sjfb8856606 
408*d30ea906Sjfb8856606 	ts_params->qconf.queue_size = info.drv.queue_size_lim + 1;
409*d30ea906Sjfb8856606 	TEST_ASSERT_FAIL(rte_bbdev_queue_configure(dev_id, queue_id,
410*d30ea906Sjfb8856606 			&ts_params->qconf),
411*d30ea906Sjfb8856606 			"Failed test for rte_bbdev_queue_configure: "
412*d30ea906Sjfb8856606 			"invalid value qconf.queue_size: %u",
413*d30ea906Sjfb8856606 			ts_params->qconf.queue_size);
414*d30ea906Sjfb8856606 
415*d30ea906Sjfb8856606 	ts_params->qconf.queue_size = info.drv.queue_size_lim;
416*d30ea906Sjfb8856606 	ts_params->qconf.priority = info.drv.max_ul_queue_priority;
417*d30ea906Sjfb8856606 	queue_id = info.num_queues;
418*d30ea906Sjfb8856606 	TEST_ASSERT_FAIL(rte_bbdev_queue_configure(dev_id, queue_id,
419*d30ea906Sjfb8856606 			&ts_params->qconf),
420*d30ea906Sjfb8856606 			"Failed test for rte_bbdev_queue_configure: "
421*d30ea906Sjfb8856606 			"invalid value queue_id: %u", queue_id);
422*d30ea906Sjfb8856606 
423*d30ea906Sjfb8856606 	queue_id = 0;
424*d30ea906Sjfb8856606 	TEST_ASSERT_SUCCESS(rte_bbdev_queue_configure(dev_id, queue_id, NULL),
425*d30ea906Sjfb8856606 			"Failed test for rte_bbdev_queue_configure: "
426*d30ea906Sjfb8856606 			"NULL qconf structure ");
427*d30ea906Sjfb8856606 
428*d30ea906Sjfb8856606 	ts_params->qconf.socket = RTE_MAX_NUMA_NODES;
429*d30ea906Sjfb8856606 	TEST_ASSERT_FAIL(rte_bbdev_queue_configure(dev_id, queue_id,
430*d30ea906Sjfb8856606 			&ts_params->qconf),
431*d30ea906Sjfb8856606 			"Failed test for rte_bbdev_queue_configure: "
432*d30ea906Sjfb8856606 			"invalid socket number ");
433*d30ea906Sjfb8856606 
434*d30ea906Sjfb8856606 	ts_params->qconf.socket = SOCKET_ID_ANY;
435*d30ea906Sjfb8856606 	TEST_ASSERT_SUCCESS(rte_bbdev_queue_configure(dev_id, queue_id,
436*d30ea906Sjfb8856606 			&ts_params->qconf),
437*d30ea906Sjfb8856606 			"Failed test for rte_bbdev_queue_configure: "
438*d30ea906Sjfb8856606 			"invalid value qconf.queue_size: %u",
439*d30ea906Sjfb8856606 			ts_params->qconf.queue_size);
440*d30ea906Sjfb8856606 
441*d30ea906Sjfb8856606 	TEST_ASSERT_FAIL(rte_bbdev_queue_configure(RTE_BBDEV_MAX_DEVS, queue_id,
442*d30ea906Sjfb8856606 			&ts_params->qconf),
443*d30ea906Sjfb8856606 			"Failed test for rte_bbdev_queue_configure: "
444*d30ea906Sjfb8856606 			"invalid dev_id");
445*d30ea906Sjfb8856606 
446*d30ea906Sjfb8856606 	TEST_ASSERT_SUCCESS(rte_bbdev_queue_configure(dev_id, queue_id, NULL),
447*d30ea906Sjfb8856606 			"Failed test for rte_bbdev_queue_configure: "
448*d30ea906Sjfb8856606 			"invalid value qconf.queue_size: %u",
449*d30ea906Sjfb8856606 			ts_params->qconf.queue_size);
450*d30ea906Sjfb8856606 
451*d30ea906Sjfb8856606 	return TEST_SUCCESS;
452*d30ea906Sjfb8856606 }
453*d30ea906Sjfb8856606 
454*d30ea906Sjfb8856606 static int
455*d30ea906Sjfb8856606 test_bbdev_op_pool(void)
456*d30ea906Sjfb8856606 {
457*d30ea906Sjfb8856606 	struct rte_mempool *mp;
458*d30ea906Sjfb8856606 
459*d30ea906Sjfb8856606 	unsigned int dec_size = sizeof(struct rte_bbdev_dec_op);
460*d30ea906Sjfb8856606 	unsigned int enc_size = sizeof(struct rte_bbdev_enc_op);
461*d30ea906Sjfb8856606 
462*d30ea906Sjfb8856606 	const char *pool_dec = "Test_DEC";
463*d30ea906Sjfb8856606 	const char *pool_enc = "Test_ENC";
464*d30ea906Sjfb8856606 
465*d30ea906Sjfb8856606 	/* Valid pool configuration */
466*d30ea906Sjfb8856606 	uint32_t size = 256;
467*d30ea906Sjfb8856606 	uint32_t cache_size = 128;
468*d30ea906Sjfb8856606 
469*d30ea906Sjfb8856606 	TEST_ASSERT(rte_bbdev_op_pool_create(NULL,
470*d30ea906Sjfb8856606 			RTE_BBDEV_OP_TURBO_DEC, size, cache_size, 0) == NULL,
471*d30ea906Sjfb8856606 			"Failed test for rte_bbdev_op_pool_create: "
472*d30ea906Sjfb8856606 			"NULL name parameter");
473*d30ea906Sjfb8856606 
474*d30ea906Sjfb8856606 	TEST_ASSERT((mp = rte_bbdev_op_pool_create(pool_dec,
475*d30ea906Sjfb8856606 			RTE_BBDEV_OP_TURBO_DEC, size, cache_size, 0)) != NULL,
476*d30ea906Sjfb8856606 			"Failed test for rte_bbdev_op_pool_create: "
477*d30ea906Sjfb8856606 			"returned value is empty");
478*d30ea906Sjfb8856606 
479*d30ea906Sjfb8856606 	TEST_ASSERT(mp->size == size,
480*d30ea906Sjfb8856606 			"Failed test for rte_bbdev_op_pool_create: "
481*d30ea906Sjfb8856606 			"invalid size of the mempool, mp->size: %u", mp->size);
482*d30ea906Sjfb8856606 
483*d30ea906Sjfb8856606 	TEST_ASSERT(mp->cache_size == cache_size,
484*d30ea906Sjfb8856606 			"Failed test for rte_bbdev_op_pool_create: "
485*d30ea906Sjfb8856606 			"invalid size of the mempool, mp->size: %u",
486*d30ea906Sjfb8856606 			mp->cache_size);
487*d30ea906Sjfb8856606 
488*d30ea906Sjfb8856606 	TEST_ASSERT_SUCCESS(strcmp(mp->name, pool_dec),
489*d30ea906Sjfb8856606 			"Failed test for rte_bbdev_op_pool_create: "
490*d30ea906Sjfb8856606 			"invalid name of mempool, mp->name: %s", mp->name);
491*d30ea906Sjfb8856606 
492*d30ea906Sjfb8856606 	TEST_ASSERT(mp->elt_size == dec_size,
493*d30ea906Sjfb8856606 			"Failed test for rte_bbdev_op_pool_create: "
494*d30ea906Sjfb8856606 			"invalid element size for RTE_BBDEV_OP_TURBO_DEC, "
495*d30ea906Sjfb8856606 			"mp->elt_size: %u", mp->elt_size);
496*d30ea906Sjfb8856606 
497*d30ea906Sjfb8856606 	rte_mempool_free(mp);
498*d30ea906Sjfb8856606 
499*d30ea906Sjfb8856606 	TEST_ASSERT((mp = rte_bbdev_op_pool_create(pool_enc,
500*d30ea906Sjfb8856606 			RTE_BBDEV_OP_TURBO_ENC, size, cache_size, 0)) != NULL,
501*d30ea906Sjfb8856606 			 "Failed test for rte_bbdev_op_pool_create: "
502*d30ea906Sjfb8856606 			"returned value is empty");
503*d30ea906Sjfb8856606 
504*d30ea906Sjfb8856606 	TEST_ASSERT(mp->elt_size == enc_size,
505*d30ea906Sjfb8856606 			"Failed test for rte_bbdev_op_pool_create: "
506*d30ea906Sjfb8856606 			"invalid element size for RTE_BBDEV_OP_TURBO_ENC, "
507*d30ea906Sjfb8856606 			"mp->elt_size: %u", mp->elt_size);
508*d30ea906Sjfb8856606 
509*d30ea906Sjfb8856606 	rte_mempool_free(mp);
510*d30ea906Sjfb8856606 
511*d30ea906Sjfb8856606 	TEST_ASSERT((mp = rte_bbdev_op_pool_create("Test_NONE",
512*d30ea906Sjfb8856606 			RTE_BBDEV_OP_NONE, size, cache_size, 0)) != NULL,
513*d30ea906Sjfb8856606 			"Failed test for rte_bbdev_op_pool_create: "
514*d30ea906Sjfb8856606 			"returned value is empty for RTE_BBDEV_OP_NONE");
515*d30ea906Sjfb8856606 
516*d30ea906Sjfb8856606 	TEST_ASSERT(mp->elt_size == (enc_size > dec_size ? enc_size : dec_size),
517*d30ea906Sjfb8856606 			"Failed test for rte_bbdev_op_pool_create: "
518*d30ea906Sjfb8856606 			"invalid  size for RTE_BBDEV_OP_NONE, mp->elt_size: %u",
519*d30ea906Sjfb8856606 			mp->elt_size);
520*d30ea906Sjfb8856606 
521*d30ea906Sjfb8856606 	rte_mempool_free(mp);
522*d30ea906Sjfb8856606 
523*d30ea906Sjfb8856606 	TEST_ASSERT((mp = rte_bbdev_op_pool_create("Test_INV",
524*d30ea906Sjfb8856606 			RTE_BBDEV_OP_TYPE_COUNT, size, cache_size, 0)) == NULL,
525*d30ea906Sjfb8856606 			"Failed test for rte_bbdev_op_pool_create: "
526*d30ea906Sjfb8856606 			"returned value is not NULL for invalid type");
527*d30ea906Sjfb8856606 
528*d30ea906Sjfb8856606 	/* Invalid pool configuration */
529*d30ea906Sjfb8856606 	size = 128;
530*d30ea906Sjfb8856606 	cache_size = 256;
531*d30ea906Sjfb8856606 
532*d30ea906Sjfb8856606 	TEST_ASSERT((mp = rte_bbdev_op_pool_create("Test_InvSize",
533*d30ea906Sjfb8856606 			RTE_BBDEV_OP_NONE, size, cache_size, 0)) == NULL,
534*d30ea906Sjfb8856606 			"Failed test for rte_bbdev_op_pool_create: "
535*d30ea906Sjfb8856606 			"returned value should be empty "
536*d30ea906Sjfb8856606 			"because size of per-lcore local cache "
537*d30ea906Sjfb8856606 			"is greater than size of the mempool.");
538*d30ea906Sjfb8856606 
539*d30ea906Sjfb8856606 	return TEST_SUCCESS;
540*d30ea906Sjfb8856606 }
541*d30ea906Sjfb8856606 
542*d30ea906Sjfb8856606 /**
543*d30ea906Sjfb8856606  *  Create pool of OP types RTE_BBDEV_OP_NONE, RTE_BBDEV_OP_TURBO_DEC and
544*d30ea906Sjfb8856606  *  RTE_BBDEV_OP_TURBO_ENC and check that only ops of that type can be
545*d30ea906Sjfb8856606  *  allocated
546*d30ea906Sjfb8856606  */
547*d30ea906Sjfb8856606 static int
548*d30ea906Sjfb8856606 test_bbdev_op_type(void)
549*d30ea906Sjfb8856606 {
550*d30ea906Sjfb8856606 	struct rte_mempool *mp_dec;
551*d30ea906Sjfb8856606 
552*d30ea906Sjfb8856606 	const unsigned int OPS_COUNT = 32;
553*d30ea906Sjfb8856606 	struct rte_bbdev_dec_op *dec_ops_arr[OPS_COUNT];
554*d30ea906Sjfb8856606 	struct rte_bbdev_enc_op *enc_ops_arr[OPS_COUNT];
555*d30ea906Sjfb8856606 
556*d30ea906Sjfb8856606 	const char *pool_dec = "Test_op_dec";
557*d30ea906Sjfb8856606 
558*d30ea906Sjfb8856606 	/* Valid pool configuration */
559*d30ea906Sjfb8856606 	uint32_t num_elements = 256;
560*d30ea906Sjfb8856606 	uint32_t cache_size = 128;
561*d30ea906Sjfb8856606 
562*d30ea906Sjfb8856606 	/* mempool type : RTE_BBDEV_OP_TURBO_DEC */
563*d30ea906Sjfb8856606 	mp_dec = rte_bbdev_op_pool_create(pool_dec,
564*d30ea906Sjfb8856606 			RTE_BBDEV_OP_TURBO_DEC, num_elements, cache_size, 0);
565*d30ea906Sjfb8856606 	TEST_ASSERT(mp_dec != NULL, "Failed to create %s mempool", pool_dec);
566*d30ea906Sjfb8856606 
567*d30ea906Sjfb8856606 	TEST_ASSERT(rte_bbdev_dec_op_alloc_bulk(mp_dec, dec_ops_arr, 1) == 0,
568*d30ea906Sjfb8856606 			"Failed test for rte_bbdev_op_alloc_bulk TURBO_DEC: "
569*d30ea906Sjfb8856606 			"OPs type: RTE_BBDEV_OP_TURBO_DEC");
570*d30ea906Sjfb8856606 
571*d30ea906Sjfb8856606 	TEST_ASSERT(rte_bbdev_enc_op_alloc_bulk(mp_dec, enc_ops_arr, 1) != 0,
572*d30ea906Sjfb8856606 			"Failed test for rte_bbdev_op_alloc_bulk TURBO_DEC: "
573*d30ea906Sjfb8856606 			"OPs type: RTE_BBDEV_OP_TURBO_ENC");
574*d30ea906Sjfb8856606 
575*d30ea906Sjfb8856606 	rte_mempool_free(mp_dec);
576*d30ea906Sjfb8856606 
577*d30ea906Sjfb8856606 	return TEST_SUCCESS;
578*d30ea906Sjfb8856606 }
579*d30ea906Sjfb8856606 
580*d30ea906Sjfb8856606 static int
581*d30ea906Sjfb8856606 test_bbdev_op_pool_size(void)
582*d30ea906Sjfb8856606 {
583*d30ea906Sjfb8856606 	struct rte_mempool *mp_none;
584*d30ea906Sjfb8856606 
585*d30ea906Sjfb8856606 	const unsigned int OPS_COUNT = 128;
586*d30ea906Sjfb8856606 	struct rte_bbdev_enc_op *ops_enc_arr[OPS_COUNT];
587*d30ea906Sjfb8856606 	struct rte_bbdev_enc_op *ops_ext_arr[OPS_COUNT];
588*d30ea906Sjfb8856606 	struct rte_bbdev_enc_op *ops_ext2_arr[OPS_COUNT];
589*d30ea906Sjfb8856606 
590*d30ea906Sjfb8856606 	const char *pool_none = "Test_pool_size";
591*d30ea906Sjfb8856606 
592*d30ea906Sjfb8856606 	/* Valid pool configuration */
593*d30ea906Sjfb8856606 	uint32_t num_elements = 256;
594*d30ea906Sjfb8856606 	uint32_t cache_size = 0;
595*d30ea906Sjfb8856606 
596*d30ea906Sjfb8856606 	/* Create mempool type : RTE_BBDEV_OP_TURBO_ENC, size : 256 */
597*d30ea906Sjfb8856606 	mp_none = rte_bbdev_op_pool_create(pool_none, RTE_BBDEV_OP_TURBO_ENC,
598*d30ea906Sjfb8856606 			num_elements, cache_size, 0);
599*d30ea906Sjfb8856606 	TEST_ASSERT(mp_none != NULL, "Failed to create %s mempool", pool_none);
600*d30ea906Sjfb8856606 
601*d30ea906Sjfb8856606 	/* Add 128 RTE_BBDEV_OP_TURBO_ENC ops */
602*d30ea906Sjfb8856606 	rte_bbdev_enc_op_alloc_bulk(mp_none, ops_enc_arr, OPS_COUNT);
603*d30ea906Sjfb8856606 
604*d30ea906Sjfb8856606 	/* Add 128 RTE_BBDEV_OP_TURBO_ENC ops */
605*d30ea906Sjfb8856606 	TEST_ASSERT(rte_bbdev_enc_op_alloc_bulk(mp_none, ops_ext_arr,
606*d30ea906Sjfb8856606 			OPS_COUNT) == 0,
607*d30ea906Sjfb8856606 			"Failed test for allocating bbdev ops: "
608*d30ea906Sjfb8856606 			"Mempool size: 256, Free : 128, Attempted to add: 128");
609*d30ea906Sjfb8856606 
610*d30ea906Sjfb8856606 	/* Try adding 128 more RTE_BBDEV_OP_TURBO_ENC ops, this should fail */
611*d30ea906Sjfb8856606 	TEST_ASSERT(rte_bbdev_enc_op_alloc_bulk(mp_none, ops_ext2_arr,
612*d30ea906Sjfb8856606 			OPS_COUNT) != 0,
613*d30ea906Sjfb8856606 			"Failed test for allocating bbdev ops: "
614*d30ea906Sjfb8856606 			"Mempool size: 256, Free : 0, Attempted to add: 128");
615*d30ea906Sjfb8856606 
616*d30ea906Sjfb8856606 	/* Free-up 128 RTE_BBDEV_OP_TURBO_ENC ops */
617*d30ea906Sjfb8856606 	rte_bbdev_enc_op_free_bulk(ops_enc_arr, OPS_COUNT);
618*d30ea906Sjfb8856606 
619*d30ea906Sjfb8856606 	/* Try adding 128 RTE_BBDEV_OP_TURBO_DEC ops, this should succeed */
620*d30ea906Sjfb8856606 	/* Cache size > 0 causes reallocation of ops size > 127 fail */
621*d30ea906Sjfb8856606 	TEST_ASSERT(rte_bbdev_enc_op_alloc_bulk(mp_none, ops_ext2_arr,
622*d30ea906Sjfb8856606 			OPS_COUNT) == 0,
623*d30ea906Sjfb8856606 			"Failed test for allocating ops after mempool freed:  "
624*d30ea906Sjfb8856606 			"Mempool size: 256, Free : 128, Attempted to add: 128");
625*d30ea906Sjfb8856606 
626*d30ea906Sjfb8856606 	rte_mempool_free(mp_none);
627*d30ea906Sjfb8856606 
628*d30ea906Sjfb8856606 	return TEST_SUCCESS;
629*d30ea906Sjfb8856606 }
630*d30ea906Sjfb8856606 
631*d30ea906Sjfb8856606 static int
632*d30ea906Sjfb8856606 test_bbdev_count(void)
633*d30ea906Sjfb8856606 {
634*d30ea906Sjfb8856606 	uint8_t num_devs, num_valid_devs = 0;
635*d30ea906Sjfb8856606 
636*d30ea906Sjfb8856606 	for (num_devs = 0; num_devs < RTE_BBDEV_MAX_DEVS; num_devs++) {
637*d30ea906Sjfb8856606 		if (rte_bbdev_is_valid(num_devs))
638*d30ea906Sjfb8856606 			num_valid_devs++;
639*d30ea906Sjfb8856606 	}
640*d30ea906Sjfb8856606 
641*d30ea906Sjfb8856606 	num_devs = rte_bbdev_count();
642*d30ea906Sjfb8856606 	TEST_ASSERT(num_valid_devs == num_devs,
643*d30ea906Sjfb8856606 			"Failed test for rte_bbdev_is_valid: "
644*d30ea906Sjfb8856606 			"invalid num_devs %u ", num_devs);
645*d30ea906Sjfb8856606 
646*d30ea906Sjfb8856606 	return TEST_SUCCESS;
647*d30ea906Sjfb8856606 }
648*d30ea906Sjfb8856606 
649*d30ea906Sjfb8856606 static int
650*d30ea906Sjfb8856606 test_bbdev_stats(void)
651*d30ea906Sjfb8856606 {
652*d30ea906Sjfb8856606 	uint8_t dev_id = null_dev_id;
653*d30ea906Sjfb8856606 	uint16_t queue_id = 0;
654*d30ea906Sjfb8856606 	struct rte_bbdev_dec_op *dec_ops[4096] = { 0 };
655*d30ea906Sjfb8856606 	struct rte_bbdev_dec_op *dec_proc_ops[4096] = { 0 };
656*d30ea906Sjfb8856606 	struct rte_bbdev_enc_op *enc_ops[4096] = { 0 };
657*d30ea906Sjfb8856606 	struct rte_bbdev_enc_op *enc_proc_ops[4096] = { 0 };
658*d30ea906Sjfb8856606 	uint16_t num_ops = 236;
659*d30ea906Sjfb8856606 	struct rte_bbdev_stats stats;
660*d30ea906Sjfb8856606 	struct bbdev_testsuite_params *ts_params = &testsuite_params;
661*d30ea906Sjfb8856606 
662*d30ea906Sjfb8856606 	TEST_ASSERT_SUCCESS(rte_bbdev_queue_stop(dev_id, queue_id),
663*d30ea906Sjfb8856606 			"Failed to stop queue %u on device %u ", queue_id,
664*d30ea906Sjfb8856606 			dev_id);
665*d30ea906Sjfb8856606 	TEST_ASSERT_SUCCESS(rte_bbdev_stop(dev_id),
666*d30ea906Sjfb8856606 			"Failed to stop bbdev %u ", dev_id);
667*d30ea906Sjfb8856606 
668*d30ea906Sjfb8856606 	TEST_ASSERT_SUCCESS(rte_bbdev_queue_configure(dev_id, queue_id,
669*d30ea906Sjfb8856606 			&ts_params->qconf),
670*d30ea906Sjfb8856606 			"Failed to configure queue %u on device %u ",
671*d30ea906Sjfb8856606 			queue_id, dev_id);
672*d30ea906Sjfb8856606 
673*d30ea906Sjfb8856606 	TEST_ASSERT_SUCCESS(rte_bbdev_start(dev_id),
674*d30ea906Sjfb8856606 			"Failed to start bbdev %u ", dev_id);
675*d30ea906Sjfb8856606 
676*d30ea906Sjfb8856606 	TEST_ASSERT_SUCCESS(rte_bbdev_queue_start(dev_id, queue_id),
677*d30ea906Sjfb8856606 			"Failed to start queue %u on device %u ", queue_id,
678*d30ea906Sjfb8856606 			dev_id);
679*d30ea906Sjfb8856606 
680*d30ea906Sjfb8856606 	TEST_ASSERT_SUCCESS(rte_bbdev_queue_start(dev_id, queue_id),
681*d30ea906Sjfb8856606 			"Failed to start queue %u on device %u ", queue_id,
682*d30ea906Sjfb8856606 			dev_id);
683*d30ea906Sjfb8856606 
684*d30ea906Sjfb8856606 	/* Tests after enqueue operation */
685*d30ea906Sjfb8856606 	rte_bbdev_enqueue_enc_ops(dev_id, queue_id, enc_ops, num_ops);
686*d30ea906Sjfb8856606 	rte_bbdev_enqueue_dec_ops(dev_id, queue_id, dec_ops, num_ops);
687*d30ea906Sjfb8856606 
688*d30ea906Sjfb8856606 	TEST_ASSERT_FAIL(rte_bbdev_stats_get(RTE_BBDEV_MAX_DEVS, &stats),
689*d30ea906Sjfb8856606 			"Failed test for rte_bbdev_stats_get on device %u ",
690*d30ea906Sjfb8856606 			dev_id);
691*d30ea906Sjfb8856606 
692*d30ea906Sjfb8856606 	TEST_ASSERT_FAIL(rte_bbdev_stats_get(dev_id, NULL),
693*d30ea906Sjfb8856606 			"Failed test for rte_bbdev_stats_get on device %u ",
694*d30ea906Sjfb8856606 			dev_id);
695*d30ea906Sjfb8856606 
696*d30ea906Sjfb8856606 	TEST_ASSERT_SUCCESS(rte_bbdev_stats_get(dev_id, &stats),
697*d30ea906Sjfb8856606 			"Failed test for rte_bbdev_stats_get on device %u ",
698*d30ea906Sjfb8856606 			dev_id);
699*d30ea906Sjfb8856606 
700*d30ea906Sjfb8856606 	TEST_ASSERT(stats.enqueued_count == 2 * num_ops,
701*d30ea906Sjfb8856606 			"Failed test for rte_bbdev_enqueue_ops: "
702*d30ea906Sjfb8856606 			"invalid enqueued_count %" PRIu64 " ",
703*d30ea906Sjfb8856606 			stats.enqueued_count);
704*d30ea906Sjfb8856606 
705*d30ea906Sjfb8856606 	TEST_ASSERT(stats.dequeued_count == 0,
706*d30ea906Sjfb8856606 			"Failed test for rte_bbdev_stats_reset: "
707*d30ea906Sjfb8856606 			"invalid dequeued_count %" PRIu64 " ",
708*d30ea906Sjfb8856606 			stats.dequeued_count);
709*d30ea906Sjfb8856606 
710*d30ea906Sjfb8856606 	/* Tests after dequeue operation */
711*d30ea906Sjfb8856606 	rte_bbdev_dequeue_enc_ops(dev_id, queue_id, enc_proc_ops, num_ops);
712*d30ea906Sjfb8856606 	rte_bbdev_dequeue_dec_ops(dev_id, queue_id, dec_proc_ops, num_ops);
713*d30ea906Sjfb8856606 
714*d30ea906Sjfb8856606 	TEST_ASSERT_SUCCESS(rte_bbdev_stats_get(dev_id, &stats),
715*d30ea906Sjfb8856606 			"Failed test for rte_bbdev_stats_get on device %u ",
716*d30ea906Sjfb8856606 			dev_id);
717*d30ea906Sjfb8856606 
718*d30ea906Sjfb8856606 	TEST_ASSERT(stats.dequeued_count == 2 * num_ops,
719*d30ea906Sjfb8856606 			"Failed test for rte_bbdev_dequeue_ops: "
720*d30ea906Sjfb8856606 			"invalid enqueued_count %" PRIu64 " ",
721*d30ea906Sjfb8856606 			stats.dequeued_count);
722*d30ea906Sjfb8856606 
723*d30ea906Sjfb8856606 	TEST_ASSERT(stats.enqueue_err_count == 0,
724*d30ea906Sjfb8856606 			"Failed test for rte_bbdev_stats_reset: "
725*d30ea906Sjfb8856606 			"invalid enqueue_err_count %" PRIu64 " ",
726*d30ea906Sjfb8856606 			stats.enqueue_err_count);
727*d30ea906Sjfb8856606 
728*d30ea906Sjfb8856606 	TEST_ASSERT(stats.dequeue_err_count == 0,
729*d30ea906Sjfb8856606 			"Failed test for rte_bbdev_stats_reset: "
730*d30ea906Sjfb8856606 			"invalid dequeue_err_count %" PRIu64 " ",
731*d30ea906Sjfb8856606 			stats.dequeue_err_count);
732*d30ea906Sjfb8856606 
733*d30ea906Sjfb8856606 	/* Tests after reset operation */
734*d30ea906Sjfb8856606 	TEST_ASSERT_FAIL(rte_bbdev_stats_reset(RTE_BBDEV_MAX_DEVS),
735*d30ea906Sjfb8856606 			"Failed to reset statistic for device %u ", dev_id);
736*d30ea906Sjfb8856606 
737*d30ea906Sjfb8856606 	TEST_ASSERT_SUCCESS(rte_bbdev_stats_reset(dev_id),
738*d30ea906Sjfb8856606 			"Failed to reset statistic for device %u ", dev_id);
739*d30ea906Sjfb8856606 	TEST_ASSERT_SUCCESS(rte_bbdev_stats_get(dev_id, &stats),
740*d30ea906Sjfb8856606 			"Failed test for rte_bbdev_stats_get on device %u ",
741*d30ea906Sjfb8856606 			dev_id);
742*d30ea906Sjfb8856606 
743*d30ea906Sjfb8856606 	TEST_ASSERT(stats.enqueued_count == 0,
744*d30ea906Sjfb8856606 			"Failed test for rte_bbdev_stats_reset: "
745*d30ea906Sjfb8856606 			"invalid enqueued_count %" PRIu64 " ",
746*d30ea906Sjfb8856606 			stats.enqueued_count);
747*d30ea906Sjfb8856606 
748*d30ea906Sjfb8856606 	TEST_ASSERT(stats.dequeued_count == 0,
749*d30ea906Sjfb8856606 			"Failed test for rte_bbdev_stats_reset: "
750*d30ea906Sjfb8856606 			"invalid dequeued_count %" PRIu64 " ",
751*d30ea906Sjfb8856606 			stats.dequeued_count);
752*d30ea906Sjfb8856606 
753*d30ea906Sjfb8856606 	TEST_ASSERT(stats.enqueue_err_count == 0,
754*d30ea906Sjfb8856606 			"Failed test for rte_bbdev_stats_reset: "
755*d30ea906Sjfb8856606 			"invalid enqueue_err_count %" PRIu64 " ",
756*d30ea906Sjfb8856606 			stats.enqueue_err_count);
757*d30ea906Sjfb8856606 
758*d30ea906Sjfb8856606 	TEST_ASSERT(stats.dequeue_err_count == 0,
759*d30ea906Sjfb8856606 			"Failed test for rte_bbdev_stats_reset: "
760*d30ea906Sjfb8856606 			"invalid dequeue_err_count %" PRIu64 " ",
761*d30ea906Sjfb8856606 			stats.dequeue_err_count);
762*d30ea906Sjfb8856606 
763*d30ea906Sjfb8856606 	return TEST_SUCCESS;
764*d30ea906Sjfb8856606 }
765*d30ea906Sjfb8856606 
766*d30ea906Sjfb8856606 static int
767*d30ea906Sjfb8856606 test_bbdev_driver_init(void)
768*d30ea906Sjfb8856606 {
769*d30ea906Sjfb8856606 	struct rte_bbdev *dev1, *dev2;
770*d30ea906Sjfb8856606 	const char *name = "dev_name";
771*d30ea906Sjfb8856606 	char name_tmp[16];
772*d30ea906Sjfb8856606 	int num_devs, num_devs_tmp;
773*d30ea906Sjfb8856606 
774*d30ea906Sjfb8856606 	dev1 = rte_bbdev_allocate(NULL);
775*d30ea906Sjfb8856606 	TEST_ASSERT(dev1 == NULL,
776*d30ea906Sjfb8856606 			"Failed initialize bbdev driver with NULL name");
777*d30ea906Sjfb8856606 
778*d30ea906Sjfb8856606 	dev1 = rte_bbdev_allocate(name);
779*d30ea906Sjfb8856606 	TEST_ASSERT(dev1 != NULL, "Failed to initialize bbdev driver");
780*d30ea906Sjfb8856606 
781*d30ea906Sjfb8856606 	dev2 = rte_bbdev_allocate(name);
782*d30ea906Sjfb8856606 	TEST_ASSERT(dev2 == NULL,
783*d30ea906Sjfb8856606 			"Failed to initialize bbdev driver: "
784*d30ea906Sjfb8856606 			"driver with the same name has been initialized before");
785*d30ea906Sjfb8856606 
786*d30ea906Sjfb8856606 	num_devs = rte_bbdev_count() - 1;
787*d30ea906Sjfb8856606 	num_devs_tmp = num_devs;
788*d30ea906Sjfb8856606 
789*d30ea906Sjfb8856606 	/* Initialize the maximum amount of devices */
790*d30ea906Sjfb8856606 	do {
791*d30ea906Sjfb8856606 		sprintf(name_tmp, "%s%i", "name_", num_devs);
792*d30ea906Sjfb8856606 		dev2 = rte_bbdev_allocate(name_tmp);
793*d30ea906Sjfb8856606 		TEST_ASSERT(dev2 != NULL,
794*d30ea906Sjfb8856606 				"Failed to initialize bbdev driver");
795*d30ea906Sjfb8856606 		++num_devs;
796*d30ea906Sjfb8856606 	} while (num_devs < (RTE_BBDEV_MAX_DEVS - 1));
797*d30ea906Sjfb8856606 
798*d30ea906Sjfb8856606 	sprintf(name_tmp, "%s%i", "name_", num_devs);
799*d30ea906Sjfb8856606 	dev2 = rte_bbdev_allocate(name_tmp);
800*d30ea906Sjfb8856606 	TEST_ASSERT(dev2 == NULL, "Failed to initialize bbdev driver number %d "
801*d30ea906Sjfb8856606 			"more drivers than RTE_BBDEV_MAX_DEVS: %d ", num_devs,
802*d30ea906Sjfb8856606 			RTE_BBDEV_MAX_DEVS);
803*d30ea906Sjfb8856606 
804*d30ea906Sjfb8856606 	num_devs--;
805*d30ea906Sjfb8856606 
806*d30ea906Sjfb8856606 	while (num_devs >= num_devs_tmp) {
807*d30ea906Sjfb8856606 		sprintf(name_tmp, "%s%i", "name_", num_devs);
808*d30ea906Sjfb8856606 		dev2 = rte_bbdev_get_named_dev(name_tmp);
809*d30ea906Sjfb8856606 		TEST_ASSERT_SUCCESS(rte_bbdev_release(dev2),
810*d30ea906Sjfb8856606 				"Failed to uninitialize bbdev driver %s ",
811*d30ea906Sjfb8856606 				name_tmp);
812*d30ea906Sjfb8856606 		num_devs--;
813*d30ea906Sjfb8856606 	}
814*d30ea906Sjfb8856606 
815*d30ea906Sjfb8856606 	TEST_ASSERT(dev1->data->dev_id < RTE_BBDEV_MAX_DEVS,
816*d30ea906Sjfb8856606 			"Failed test rte_bbdev_allocate: "
817*d30ea906Sjfb8856606 			"invalid dev_id %" PRIu8 ", max number of devices %d ",
818*d30ea906Sjfb8856606 			dev1->data->dev_id, RTE_BBDEV_MAX_DEVS);
819*d30ea906Sjfb8856606 
820*d30ea906Sjfb8856606 	TEST_ASSERT(dev1->state == RTE_BBDEV_INITIALIZED,
821*d30ea906Sjfb8856606 			"Failed test rte_bbdev_allocate: "
822*d30ea906Sjfb8856606 			"invalid state %d (0 - RTE_BBDEV_UNUSED, 1 - RTE_BBDEV_INITIALIZED",
823*d30ea906Sjfb8856606 			dev1->state);
824*d30ea906Sjfb8856606 
825*d30ea906Sjfb8856606 	TEST_ASSERT_FAIL(rte_bbdev_release(NULL),
826*d30ea906Sjfb8856606 			"Failed to uninitialize bbdev driver with NULL bbdev");
827*d30ea906Sjfb8856606 
828*d30ea906Sjfb8856606 	sprintf(name_tmp, "%s", "invalid_name");
829*d30ea906Sjfb8856606 	dev2 = rte_bbdev_get_named_dev(name_tmp);
830*d30ea906Sjfb8856606 	TEST_ASSERT_FAIL(rte_bbdev_release(dev2),
831*d30ea906Sjfb8856606 			"Failed to uninitialize bbdev driver with invalid name");
832*d30ea906Sjfb8856606 
833*d30ea906Sjfb8856606 	dev2 = rte_bbdev_get_named_dev(name);
834*d30ea906Sjfb8856606 	TEST_ASSERT_SUCCESS(rte_bbdev_release(dev2),
835*d30ea906Sjfb8856606 			"Failed to uninitialize bbdev driver: %s ", name);
836*d30ea906Sjfb8856606 
837*d30ea906Sjfb8856606 	return TEST_SUCCESS;
838*d30ea906Sjfb8856606 }
839*d30ea906Sjfb8856606 
840*d30ea906Sjfb8856606 static void
841*d30ea906Sjfb8856606 event_callback(uint16_t dev_id, enum rte_bbdev_event_type type, void *param,
842*d30ea906Sjfb8856606 		void *ret_param)
843*d30ea906Sjfb8856606 {
844*d30ea906Sjfb8856606 	RTE_SET_USED(dev_id);
845*d30ea906Sjfb8856606 	RTE_SET_USED(ret_param);
846*d30ea906Sjfb8856606 
847*d30ea906Sjfb8856606 	if (param == NULL)
848*d30ea906Sjfb8856606 		return;
849*d30ea906Sjfb8856606 
850*d30ea906Sjfb8856606 	if (type == RTE_BBDEV_EVENT_UNKNOWN ||
851*d30ea906Sjfb8856606 			type == RTE_BBDEV_EVENT_ERROR ||
852*d30ea906Sjfb8856606 			type == RTE_BBDEV_EVENT_MAX)
853*d30ea906Sjfb8856606 		*(int *)param = type;
854*d30ea906Sjfb8856606 }
855*d30ea906Sjfb8856606 
856*d30ea906Sjfb8856606 static int
857*d30ea906Sjfb8856606 test_bbdev_callback(void)
858*d30ea906Sjfb8856606 {
859*d30ea906Sjfb8856606 	struct rte_bbdev *dev1, *dev2;
860*d30ea906Sjfb8856606 	const char *name = "dev_name1";
861*d30ea906Sjfb8856606 	const char *name2 = "dev_name2";
862*d30ea906Sjfb8856606 	int event_status;
863*d30ea906Sjfb8856606 	uint8_t invalid_dev_id = RTE_BBDEV_MAX_DEVS;
864*d30ea906Sjfb8856606 	enum rte_bbdev_event_type invalid_event_type = RTE_BBDEV_EVENT_MAX;
865*d30ea906Sjfb8856606 	uint8_t dev_id;
866*d30ea906Sjfb8856606 
867*d30ea906Sjfb8856606 	dev1 = rte_bbdev_allocate(name);
868*d30ea906Sjfb8856606 	TEST_ASSERT(dev1 != NULL, "Failed to initialize bbdev driver");
869*d30ea906Sjfb8856606 
870*d30ea906Sjfb8856606 	/*
871*d30ea906Sjfb8856606 	 * RTE_BBDEV_EVENT_UNKNOWN - unregistered
872*d30ea906Sjfb8856606 	 * RTE_BBDEV_EVENT_ERROR - unregistered
873*d30ea906Sjfb8856606 	 */
874*d30ea906Sjfb8856606 	event_status = -1;
875*d30ea906Sjfb8856606 	rte_bbdev_pmd_callback_process(dev1, RTE_BBDEV_EVENT_UNKNOWN, NULL);
876*d30ea906Sjfb8856606 	rte_bbdev_pmd_callback_process(dev1, RTE_BBDEV_EVENT_ERROR, NULL);
877*d30ea906Sjfb8856606 	TEST_ASSERT(event_status == -1,
878*d30ea906Sjfb8856606 			"Failed test for rte_bbdev_pmd_callback_process: "
879*d30ea906Sjfb8856606 			"events were not registered ");
880*d30ea906Sjfb8856606 
881*d30ea906Sjfb8856606 	TEST_ASSERT_FAIL(rte_bbdev_callback_register(dev1->data->dev_id,
882*d30ea906Sjfb8856606 			RTE_BBDEV_EVENT_MAX, event_callback, NULL),
883*d30ea906Sjfb8856606 			"Failed to callback register for RTE_BBDEV_EVENT_MAX ");
884*d30ea906Sjfb8856606 
885*d30ea906Sjfb8856606 	TEST_ASSERT_FAIL(rte_bbdev_callback_unregister(dev1->data->dev_id,
886*d30ea906Sjfb8856606 			RTE_BBDEV_EVENT_MAX, event_callback, NULL),
887*d30ea906Sjfb8856606 			"Failed to unregister RTE_BBDEV_EVENT_MAX ");
888*d30ea906Sjfb8856606 
889*d30ea906Sjfb8856606 	/*
890*d30ea906Sjfb8856606 	 * RTE_BBDEV_EVENT_UNKNOWN - registered
891*d30ea906Sjfb8856606 	 * RTE_BBDEV_EVENT_ERROR - unregistered
892*d30ea906Sjfb8856606 	 */
893*d30ea906Sjfb8856606 	TEST_ASSERT_SUCCESS(rte_bbdev_callback_register(dev1->data->dev_id,
894*d30ea906Sjfb8856606 			RTE_BBDEV_EVENT_UNKNOWN, event_callback, &event_status),
895*d30ea906Sjfb8856606 			"Failed to callback rgstr for RTE_BBDEV_EVENT_UNKNOWN");
896*d30ea906Sjfb8856606 
897*d30ea906Sjfb8856606 	rte_bbdev_pmd_callback_process(dev1, RTE_BBDEV_EVENT_UNKNOWN, NULL);
898*d30ea906Sjfb8856606 	TEST_ASSERT(event_status == (int) RTE_BBDEV_EVENT_UNKNOWN,
899*d30ea906Sjfb8856606 			"Failed test for rte_bbdev_pmd_callback_process "
900*d30ea906Sjfb8856606 			"for RTE_BBDEV_EVENT_UNKNOWN ");
901*d30ea906Sjfb8856606 
902*d30ea906Sjfb8856606 	rte_bbdev_pmd_callback_process(dev1, RTE_BBDEV_EVENT_ERROR, NULL);
903*d30ea906Sjfb8856606 	TEST_ASSERT(event_status == (int) RTE_BBDEV_EVENT_UNKNOWN,
904*d30ea906Sjfb8856606 			"Failed test for rte_bbdev_pmd_callback_process: "
905*d30ea906Sjfb8856606 			"event RTE_BBDEV_EVENT_ERROR was not registered ");
906*d30ea906Sjfb8856606 
907*d30ea906Sjfb8856606 	/*
908*d30ea906Sjfb8856606 	 * RTE_BBDEV_EVENT_UNKNOWN - registered
909*d30ea906Sjfb8856606 	 * RTE_BBDEV_EVENT_ERROR - registered
910*d30ea906Sjfb8856606 	 */
911*d30ea906Sjfb8856606 	TEST_ASSERT_SUCCESS(rte_bbdev_callback_register(dev1->data->dev_id,
912*d30ea906Sjfb8856606 			RTE_BBDEV_EVENT_ERROR, event_callback, &event_status),
913*d30ea906Sjfb8856606 			"Failed to callback rgstr for RTE_BBDEV_EVENT_ERROR ");
914*d30ea906Sjfb8856606 
915*d30ea906Sjfb8856606 	TEST_ASSERT_SUCCESS(rte_bbdev_callback_register(dev1->data->dev_id,
916*d30ea906Sjfb8856606 			RTE_BBDEV_EVENT_ERROR, event_callback, &event_status),
917*d30ea906Sjfb8856606 			"Failed to callback register for RTE_BBDEV_EVENT_ERROR"
918*d30ea906Sjfb8856606 			"(re-registration) ");
919*d30ea906Sjfb8856606 
920*d30ea906Sjfb8856606 	event_status = -1;
921*d30ea906Sjfb8856606 	rte_bbdev_pmd_callback_process(dev1, RTE_BBDEV_EVENT_UNKNOWN, NULL);
922*d30ea906Sjfb8856606 	TEST_ASSERT(event_status == (int) RTE_BBDEV_EVENT_UNKNOWN,
923*d30ea906Sjfb8856606 			"Failed test for rte_bbdev_pmd_callback_process "
924*d30ea906Sjfb8856606 			"for RTE_BBDEV_EVENT_UNKNOWN ");
925*d30ea906Sjfb8856606 
926*d30ea906Sjfb8856606 	rte_bbdev_pmd_callback_process(dev1, RTE_BBDEV_EVENT_ERROR, NULL);
927*d30ea906Sjfb8856606 	TEST_ASSERT(event_status == (int) RTE_BBDEV_EVENT_ERROR,
928*d30ea906Sjfb8856606 			"Failed test for rte_bbdev_pmd_callback_process "
929*d30ea906Sjfb8856606 			"for RTE_BBDEV_EVENT_ERROR ");
930*d30ea906Sjfb8856606 
931*d30ea906Sjfb8856606 	/*
932*d30ea906Sjfb8856606 	 * RTE_BBDEV_EVENT_UNKNOWN - registered
933*d30ea906Sjfb8856606 	 * RTE_BBDEV_EVENT_ERROR - unregistered
934*d30ea906Sjfb8856606 	 */
935*d30ea906Sjfb8856606 	TEST_ASSERT_SUCCESS(rte_bbdev_callback_unregister(dev1->data->dev_id,
936*d30ea906Sjfb8856606 			RTE_BBDEV_EVENT_ERROR, event_callback, &event_status),
937*d30ea906Sjfb8856606 			"Failed to unregister RTE_BBDEV_EVENT_ERROR ");
938*d30ea906Sjfb8856606 
939*d30ea906Sjfb8856606 	event_status = -1;
940*d30ea906Sjfb8856606 	rte_bbdev_pmd_callback_process(dev1, RTE_BBDEV_EVENT_UNKNOWN, NULL);
941*d30ea906Sjfb8856606 	TEST_ASSERT(event_status == (int) RTE_BBDEV_EVENT_UNKNOWN,
942*d30ea906Sjfb8856606 			"Failed test for rte_bbdev_pmd_callback_process "
943*d30ea906Sjfb8856606 			"for RTE_BBDEV_EVENT_UNKNOWN ");
944*d30ea906Sjfb8856606 
945*d30ea906Sjfb8856606 	rte_bbdev_pmd_callback_process(dev1, RTE_BBDEV_EVENT_ERROR, NULL);
946*d30ea906Sjfb8856606 	TEST_ASSERT(event_status == (int) RTE_BBDEV_EVENT_UNKNOWN,
947*d30ea906Sjfb8856606 			"Failed test for rte_bbdev_pmd_callback_process: "
948*d30ea906Sjfb8856606 			"event RTE_BBDEV_EVENT_ERROR was unregistered ");
949*d30ea906Sjfb8856606 
950*d30ea906Sjfb8856606 	/* rte_bbdev_callback_register with invalid inputs */
951*d30ea906Sjfb8856606 	TEST_ASSERT_FAIL(rte_bbdev_callback_register(invalid_dev_id,
952*d30ea906Sjfb8856606 			RTE_BBDEV_EVENT_ERROR, event_callback, &event_status),
953*d30ea906Sjfb8856606 			"Failed test for rte_bbdev_callback_register "
954*d30ea906Sjfb8856606 			"for invalid_dev_id ");
955*d30ea906Sjfb8856606 
956*d30ea906Sjfb8856606 	TEST_ASSERT_FAIL(rte_bbdev_callback_register(dev1->data->dev_id,
957*d30ea906Sjfb8856606 			invalid_event_type, event_callback, &event_status),
958*d30ea906Sjfb8856606 			"Failed to callback register for invalid event type ");
959*d30ea906Sjfb8856606 
960*d30ea906Sjfb8856606 	TEST_ASSERT_FAIL(rte_bbdev_callback_register(dev1->data->dev_id,
961*d30ea906Sjfb8856606 			RTE_BBDEV_EVENT_ERROR, NULL, &event_status),
962*d30ea906Sjfb8856606 			"Failed to callback register - no callback function ");
963*d30ea906Sjfb8856606 
964*d30ea906Sjfb8856606 	/* The impact of devices on each other */
965*d30ea906Sjfb8856606 	dev2 = rte_bbdev_allocate(name2);
966*d30ea906Sjfb8856606 	TEST_ASSERT(dev2 != NULL,
967*d30ea906Sjfb8856606 			"Failed to initialize bbdev driver");
968*d30ea906Sjfb8856606 
969*d30ea906Sjfb8856606 	/*
970*d30ea906Sjfb8856606 	 * dev2:
971*d30ea906Sjfb8856606 	 * RTE_BBDEV_EVENT_UNKNOWN - unregistered
972*d30ea906Sjfb8856606 	 * RTE_BBDEV_EVENT_ERROR - unregistered
973*d30ea906Sjfb8856606 	 */
974*d30ea906Sjfb8856606 	event_status = -1;
975*d30ea906Sjfb8856606 	rte_bbdev_pmd_callback_process(dev2, RTE_BBDEV_EVENT_UNKNOWN, NULL);
976*d30ea906Sjfb8856606 	rte_bbdev_pmd_callback_process(dev2, RTE_BBDEV_EVENT_ERROR, NULL);
977*d30ea906Sjfb8856606 	TEST_ASSERT(event_status == -1,
978*d30ea906Sjfb8856606 			"Failed test for rte_bbdev_pmd_callback_process: "
979*d30ea906Sjfb8856606 			"events were not registered ");
980*d30ea906Sjfb8856606 
981*d30ea906Sjfb8856606 	/*
982*d30ea906Sjfb8856606 	 * dev1: RTE_BBDEV_EVENT_ERROR - unregistered
983*d30ea906Sjfb8856606 	 * dev2: RTE_BBDEV_EVENT_ERROR - registered
984*d30ea906Sjfb8856606 	 */
985*d30ea906Sjfb8856606 	TEST_ASSERT_SUCCESS(rte_bbdev_callback_register(dev2->data->dev_id,
986*d30ea906Sjfb8856606 			RTE_BBDEV_EVENT_ERROR, event_callback, &event_status),
987*d30ea906Sjfb8856606 			"Failed to callback rgstr for RTE_BBDEV_EVENT_ERROR");
988*d30ea906Sjfb8856606 
989*d30ea906Sjfb8856606 	rte_bbdev_pmd_callback_process(dev1, RTE_BBDEV_EVENT_ERROR, NULL);
990*d30ea906Sjfb8856606 	TEST_ASSERT(event_status == -1,
991*d30ea906Sjfb8856606 		"Failed test for rte_bbdev_pmd_callback_process in dev1 "
992*d30ea906Sjfb8856606 		"for RTE_BBDEV_EVENT_ERROR ");
993*d30ea906Sjfb8856606 
994*d30ea906Sjfb8856606 	rte_bbdev_pmd_callback_process(dev2, RTE_BBDEV_EVENT_ERROR, NULL);
995*d30ea906Sjfb8856606 	TEST_ASSERT(event_status == (int) RTE_BBDEV_EVENT_ERROR,
996*d30ea906Sjfb8856606 		"Failed test for rte_bbdev_pmd_callback_process in dev2 "
997*d30ea906Sjfb8856606 		"for RTE_BBDEV_EVENT_ERROR ");
998*d30ea906Sjfb8856606 
999*d30ea906Sjfb8856606 	/*
1000*d30ea906Sjfb8856606 	 * dev1: RTE_BBDEV_EVENT_UNKNOWN - registered
1001*d30ea906Sjfb8856606 	 * dev2: RTE_BBDEV_EVENT_UNKNOWN - unregistered
1002*d30ea906Sjfb8856606 	 */
1003*d30ea906Sjfb8856606 	TEST_ASSERT_SUCCESS(rte_bbdev_callback_register(dev2->data->dev_id,
1004*d30ea906Sjfb8856606 			RTE_BBDEV_EVENT_UNKNOWN, event_callback, &event_status),
1005*d30ea906Sjfb8856606 			"Failed to callback register for RTE_BBDEV_EVENT_UNKNOWN "
1006*d30ea906Sjfb8856606 			"in dev 2 ");
1007*d30ea906Sjfb8856606 
1008*d30ea906Sjfb8856606 	rte_bbdev_pmd_callback_process(dev2, RTE_BBDEV_EVENT_UNKNOWN, NULL);
1009*d30ea906Sjfb8856606 	TEST_ASSERT(event_status == (int) RTE_BBDEV_EVENT_UNKNOWN,
1010*d30ea906Sjfb8856606 			"Failed test for rte_bbdev_pmd_callback_process in dev2"
1011*d30ea906Sjfb8856606 			" for RTE_BBDEV_EVENT_UNKNOWN ");
1012*d30ea906Sjfb8856606 
1013*d30ea906Sjfb8856606 	TEST_ASSERT_SUCCESS(rte_bbdev_callback_unregister(dev2->data->dev_id,
1014*d30ea906Sjfb8856606 			RTE_BBDEV_EVENT_UNKNOWN, event_callback, &event_status),
1015*d30ea906Sjfb8856606 			"Failed to unregister RTE_BBDEV_EVENT_UNKNOWN ");
1016*d30ea906Sjfb8856606 
1017*d30ea906Sjfb8856606 	TEST_ASSERT_SUCCESS(rte_bbdev_callback_unregister(dev2->data->dev_id,
1018*d30ea906Sjfb8856606 			RTE_BBDEV_EVENT_UNKNOWN, event_callback, &event_status),
1019*d30ea906Sjfb8856606 			"Failed to unregister RTE_BBDEV_EVENT_UNKNOWN : "
1020*d30ea906Sjfb8856606 			"unregister function called once again ");
1021*d30ea906Sjfb8856606 
1022*d30ea906Sjfb8856606 	event_status = -1;
1023*d30ea906Sjfb8856606 	rte_bbdev_pmd_callback_process(dev2, RTE_BBDEV_EVENT_UNKNOWN, NULL);
1024*d30ea906Sjfb8856606 	TEST_ASSERT(event_status == -1,
1025*d30ea906Sjfb8856606 			"Failed test for rte_bbdev_pmd_callback_process in dev2"
1026*d30ea906Sjfb8856606 		" for RTE_BBDEV_EVENT_UNKNOWN ");
1027*d30ea906Sjfb8856606 
1028*d30ea906Sjfb8856606 	rte_bbdev_pmd_callback_process(dev1, RTE_BBDEV_EVENT_UNKNOWN, NULL);
1029*d30ea906Sjfb8856606 	TEST_ASSERT(event_status == (int) RTE_BBDEV_EVENT_UNKNOWN,
1030*d30ea906Sjfb8856606 			"Failed test for rte_bbdev_pmd_callback_process in dev2 "
1031*d30ea906Sjfb8856606 			"for RTE_BBDEV_EVENT_UNKNOWN ");
1032*d30ea906Sjfb8856606 
1033*d30ea906Sjfb8856606 	/* rte_bbdev_pmd_callback_process with invalid inputs */
1034*d30ea906Sjfb8856606 	rte_bbdev_pmd_callback_process(NULL, RTE_BBDEV_EVENT_UNKNOWN, NULL);
1035*d30ea906Sjfb8856606 
1036*d30ea906Sjfb8856606 	event_status = -1;
1037*d30ea906Sjfb8856606 	rte_bbdev_pmd_callback_process(dev1, invalid_event_type, NULL);
1038*d30ea906Sjfb8856606 	TEST_ASSERT(event_status == -1,
1039*d30ea906Sjfb8856606 			"Failed test for rte_bbdev_pmd_callback_process: "
1040*d30ea906Sjfb8856606 			"for invalid event type ");
1041*d30ea906Sjfb8856606 
1042*d30ea906Sjfb8856606 	/* rte_dev_callback_unregister with invalid inputs */
1043*d30ea906Sjfb8856606 	TEST_ASSERT_FAIL(rte_bbdev_callback_unregister(invalid_dev_id,
1044*d30ea906Sjfb8856606 			RTE_BBDEV_EVENT_UNKNOWN, event_callback, &event_status),
1045*d30ea906Sjfb8856606 			"Failed test for rte_dev_callback_unregister "
1046*d30ea906Sjfb8856606 			"for invalid_dev_id ");
1047*d30ea906Sjfb8856606 
1048*d30ea906Sjfb8856606 	TEST_ASSERT_FAIL(rte_bbdev_callback_unregister(dev1->data->dev_id,
1049*d30ea906Sjfb8856606 			invalid_event_type, event_callback, &event_status),
1050*d30ea906Sjfb8856606 			"Failed rte_dev_callback_unregister "
1051*d30ea906Sjfb8856606 			"for invalid event type ");
1052*d30ea906Sjfb8856606 
1053*d30ea906Sjfb8856606 	TEST_ASSERT_FAIL(rte_bbdev_callback_unregister(dev1->data->dev_id,
1054*d30ea906Sjfb8856606 			invalid_event_type, NULL, &event_status),
1055*d30ea906Sjfb8856606 			"Failed rte_dev_callback_unregister "
1056*d30ea906Sjfb8856606 			"when no callback function ");
1057*d30ea906Sjfb8856606 
1058*d30ea906Sjfb8856606 	dev_id = dev1->data->dev_id;
1059*d30ea906Sjfb8856606 
1060*d30ea906Sjfb8856606 	rte_bbdev_release(dev1);
1061*d30ea906Sjfb8856606 	rte_bbdev_release(dev2);
1062*d30ea906Sjfb8856606 
1063*d30ea906Sjfb8856606 	TEST_ASSERT_FAIL(rte_bbdev_callback_register(dev_id,
1064*d30ea906Sjfb8856606 			RTE_BBDEV_EVENT_ERROR, event_callback, &event_status),
1065*d30ea906Sjfb8856606 			"Failed test for rte_bbdev_callback_register: "
1066*d30ea906Sjfb8856606 			"function called after rte_bbdev_driver_uninit .");
1067*d30ea906Sjfb8856606 
1068*d30ea906Sjfb8856606 	TEST_ASSERT_FAIL(rte_bbdev_callback_unregister(dev_id,
1069*d30ea906Sjfb8856606 			RTE_BBDEV_EVENT_ERROR, event_callback, &event_status),
1070*d30ea906Sjfb8856606 			"Failed test for rte_dev_callback_unregister: "
1071*d30ea906Sjfb8856606 			"function called after rte_bbdev_driver_uninit. ");
1072*d30ea906Sjfb8856606 
1073*d30ea906Sjfb8856606 	event_status = -1;
1074*d30ea906Sjfb8856606 	rte_bbdev_pmd_callback_process(dev1, RTE_BBDEV_EVENT_UNKNOWN, NULL);
1075*d30ea906Sjfb8856606 	rte_bbdev_pmd_callback_process(dev1, RTE_BBDEV_EVENT_ERROR, NULL);
1076*d30ea906Sjfb8856606 	rte_bbdev_pmd_callback_process(dev2, RTE_BBDEV_EVENT_UNKNOWN, NULL);
1077*d30ea906Sjfb8856606 	rte_bbdev_pmd_callback_process(dev2, RTE_BBDEV_EVENT_ERROR, NULL);
1078*d30ea906Sjfb8856606 	TEST_ASSERT(event_status == -1,
1079*d30ea906Sjfb8856606 			"Failed test for rte_bbdev_pmd_callback_process: "
1080*d30ea906Sjfb8856606 			"callback function was called after rte_bbdev_driver_uninit");
1081*d30ea906Sjfb8856606 
1082*d30ea906Sjfb8856606 	return TEST_SUCCESS;
1083*d30ea906Sjfb8856606 }
1084*d30ea906Sjfb8856606 
1085*d30ea906Sjfb8856606 static int
1086*d30ea906Sjfb8856606 test_bbdev_invalid_driver(void)
1087*d30ea906Sjfb8856606 {
1088*d30ea906Sjfb8856606 	struct rte_bbdev dev1, *dev2;
1089*d30ea906Sjfb8856606 	uint8_t dev_id = null_dev_id;
1090*d30ea906Sjfb8856606 	uint16_t queue_id = 0;
1091*d30ea906Sjfb8856606 	struct rte_bbdev_stats stats;
1092*d30ea906Sjfb8856606 	struct bbdev_testsuite_params *ts_params = &testsuite_params;
1093*d30ea906Sjfb8856606 	struct rte_bbdev_queue_info qinfo;
1094*d30ea906Sjfb8856606 	struct rte_bbdev_ops dev_ops_tmp;
1095*d30ea906Sjfb8856606 
1096*d30ea906Sjfb8856606 	TEST_ASSERT_SUCCESS(rte_bbdev_stop(dev_id), "Failed to stop bbdev %u ",
1097*d30ea906Sjfb8856606 			dev_id);
1098*d30ea906Sjfb8856606 
1099*d30ea906Sjfb8856606 	dev1 = rte_bbdev_devices[dev_id];
1100*d30ea906Sjfb8856606 	dev2 = &rte_bbdev_devices[dev_id];
1101*d30ea906Sjfb8856606 
1102*d30ea906Sjfb8856606 	/* Tests for rte_bbdev_setup_queues */
1103*d30ea906Sjfb8856606 	dev2->dev_ops = NULL;
1104*d30ea906Sjfb8856606 	TEST_ASSERT_FAIL(rte_bbdev_setup_queues(dev_id, 1, SOCKET_ID_ANY),
1105*d30ea906Sjfb8856606 			"Failed test for rte_bbdev_setup_queues: "
1106*d30ea906Sjfb8856606 			"NULL dev_ops structure ");
1107*d30ea906Sjfb8856606 	dev2->dev_ops = dev1.dev_ops;
1108*d30ea906Sjfb8856606 
1109*d30ea906Sjfb8856606 	dev_ops_tmp = *dev2->dev_ops;
1110*d30ea906Sjfb8856606 	dev_ops_tmp.info_get = NULL;
1111*d30ea906Sjfb8856606 	dev2->dev_ops = &dev_ops_tmp;
1112*d30ea906Sjfb8856606 	TEST_ASSERT_FAIL(rte_bbdev_setup_queues(dev_id, 1, SOCKET_ID_ANY),
1113*d30ea906Sjfb8856606 			"Failed test for rte_bbdev_setup_queues: "
1114*d30ea906Sjfb8856606 			"NULL info_get ");
1115*d30ea906Sjfb8856606 	dev2->dev_ops = dev1.dev_ops;
1116*d30ea906Sjfb8856606 
1117*d30ea906Sjfb8856606 	dev_ops_tmp = *dev2->dev_ops;
1118*d30ea906Sjfb8856606 	dev_ops_tmp.queue_release = NULL;
1119*d30ea906Sjfb8856606 	dev2->dev_ops = &dev_ops_tmp;
1120*d30ea906Sjfb8856606 	TEST_ASSERT_FAIL(rte_bbdev_setup_queues(dev_id, 1, SOCKET_ID_ANY),
1121*d30ea906Sjfb8856606 			"Failed test for rte_bbdev_setup_queues: "
1122*d30ea906Sjfb8856606 			"NULL queue_release ");
1123*d30ea906Sjfb8856606 	dev2->dev_ops = dev1.dev_ops;
1124*d30ea906Sjfb8856606 
1125*d30ea906Sjfb8856606 	dev2->data->socket_id = SOCKET_ID_ANY;
1126*d30ea906Sjfb8856606 	TEST_ASSERT_SUCCESS(rte_bbdev_setup_queues(dev_id, 1,
1127*d30ea906Sjfb8856606 			SOCKET_ID_ANY), "Failed to configure bbdev %u", dev_id);
1128*d30ea906Sjfb8856606 
1129*d30ea906Sjfb8856606 	/* Test for rte_bbdev_queue_configure */
1130*d30ea906Sjfb8856606 	dev2->dev_ops = NULL;
1131*d30ea906Sjfb8856606 	TEST_ASSERT_FAIL(rte_bbdev_queue_configure(dev_id, queue_id,
1132*d30ea906Sjfb8856606 			&ts_params->qconf),
1133*d30ea906Sjfb8856606 			"Failed to configure queue %u on device %u "
1134*d30ea906Sjfb8856606 			"with NULL dev_ops structure ", queue_id, dev_id);
1135*d30ea906Sjfb8856606 	dev2->dev_ops = dev1.dev_ops;
1136*d30ea906Sjfb8856606 
1137*d30ea906Sjfb8856606 	dev_ops_tmp = *dev2->dev_ops;
1138*d30ea906Sjfb8856606 	dev_ops_tmp.queue_setup = NULL;
1139*d30ea906Sjfb8856606 	dev2->dev_ops = &dev_ops_tmp;
1140*d30ea906Sjfb8856606 	TEST_ASSERT_FAIL(rte_bbdev_queue_configure(dev_id, queue_id,
1141*d30ea906Sjfb8856606 			&ts_params->qconf),
1142*d30ea906Sjfb8856606 			"Failed to configure queue %u on device %u "
1143*d30ea906Sjfb8856606 			"with NULL queue_setup ", queue_id, dev_id);
1144*d30ea906Sjfb8856606 	dev2->dev_ops = dev1.dev_ops;
1145*d30ea906Sjfb8856606 
1146*d30ea906Sjfb8856606 	dev_ops_tmp = *dev2->dev_ops;
1147*d30ea906Sjfb8856606 	dev_ops_tmp.info_get = NULL;
1148*d30ea906Sjfb8856606 	dev2->dev_ops = &dev_ops_tmp;
1149*d30ea906Sjfb8856606 	TEST_ASSERT_FAIL(rte_bbdev_queue_configure(dev_id, queue_id,
1150*d30ea906Sjfb8856606 			&ts_params->qconf),
1151*d30ea906Sjfb8856606 			"Failed to configure queue %u on device %u "
1152*d30ea906Sjfb8856606 			"with NULL info_get ", queue_id, dev_id);
1153*d30ea906Sjfb8856606 	dev2->dev_ops = dev1.dev_ops;
1154*d30ea906Sjfb8856606 
1155*d30ea906Sjfb8856606 	TEST_ASSERT_FAIL(rte_bbdev_queue_configure(RTE_BBDEV_MAX_DEVS,
1156*d30ea906Sjfb8856606 			queue_id, &ts_params->qconf),
1157*d30ea906Sjfb8856606 			"Failed to configure queue %u on device %u ",
1158*d30ea906Sjfb8856606 			queue_id, dev_id);
1159*d30ea906Sjfb8856606 
1160*d30ea906Sjfb8856606 	TEST_ASSERT_SUCCESS(rte_bbdev_queue_configure(dev_id, queue_id,
1161*d30ea906Sjfb8856606 			&ts_params->qconf),
1162*d30ea906Sjfb8856606 			"Failed to configure queue %u on device %u ",
1163*d30ea906Sjfb8856606 			queue_id, dev_id);
1164*d30ea906Sjfb8856606 
1165*d30ea906Sjfb8856606 	/* Test for rte_bbdev_queue_info_get */
1166*d30ea906Sjfb8856606 	dev2->dev_ops = NULL;
1167*d30ea906Sjfb8856606 	TEST_ASSERT_SUCCESS(rte_bbdev_queue_info_get(dev_id, queue_id, &qinfo),
1168*d30ea906Sjfb8856606 			"Failed test for rte_bbdev_info_get: "
1169*d30ea906Sjfb8856606 			"NULL dev_ops structure  ");
1170*d30ea906Sjfb8856606 	dev2->dev_ops = dev1.dev_ops;
1171*d30ea906Sjfb8856606 
1172*d30ea906Sjfb8856606 	TEST_ASSERT_FAIL(rte_bbdev_queue_info_get(RTE_BBDEV_MAX_DEVS,
1173*d30ea906Sjfb8856606 			queue_id, &qinfo),
1174*d30ea906Sjfb8856606 			"Failed test for rte_bbdev_info_get: "
1175*d30ea906Sjfb8856606 			"invalid dev_id ");
1176*d30ea906Sjfb8856606 
1177*d30ea906Sjfb8856606 	TEST_ASSERT_FAIL(rte_bbdev_queue_info_get(dev_id,
1178*d30ea906Sjfb8856606 			RTE_MAX_QUEUES_PER_PORT, &qinfo),
1179*d30ea906Sjfb8856606 			"Failed test for rte_bbdev_info_get: "
1180*d30ea906Sjfb8856606 			"invalid queue_id ");
1181*d30ea906Sjfb8856606 
1182*d30ea906Sjfb8856606 	TEST_ASSERT_FAIL(rte_bbdev_queue_info_get(dev_id, queue_id, NULL),
1183*d30ea906Sjfb8856606 			"Failed test for rte_bbdev_info_get: "
1184*d30ea906Sjfb8856606 			"invalid dev_info ");
1185*d30ea906Sjfb8856606 
1186*d30ea906Sjfb8856606 	/* Test for rte_bbdev_start */
1187*d30ea906Sjfb8856606 	dev2->dev_ops = NULL;
1188*d30ea906Sjfb8856606 	TEST_ASSERT_FAIL(rte_bbdev_start(dev_id),
1189*d30ea906Sjfb8856606 			"Failed to start bbdev %u "
1190*d30ea906Sjfb8856606 			"with NULL dev_ops structure ", dev_id);
1191*d30ea906Sjfb8856606 	dev2->dev_ops = dev1.dev_ops;
1192*d30ea906Sjfb8856606 
1193*d30ea906Sjfb8856606 	TEST_ASSERT_SUCCESS(rte_bbdev_start(dev_id),
1194*d30ea906Sjfb8856606 			"Failed to start bbdev %u ", dev_id);
1195*d30ea906Sjfb8856606 
1196*d30ea906Sjfb8856606 	/* Test for rte_bbdev_queue_start */
1197*d30ea906Sjfb8856606 	dev2->dev_ops = NULL;
1198*d30ea906Sjfb8856606 	TEST_ASSERT_FAIL(rte_bbdev_queue_start(dev_id, queue_id),
1199*d30ea906Sjfb8856606 			"Failed to start queue %u on device %u: "
1200*d30ea906Sjfb8856606 			"NULL dev_ops structure", queue_id, dev_id);
1201*d30ea906Sjfb8856606 	dev2->dev_ops = dev1.dev_ops;
1202*d30ea906Sjfb8856606 
1203*d30ea906Sjfb8856606 	TEST_ASSERT_SUCCESS(rte_bbdev_queue_start(dev_id, queue_id),
1204*d30ea906Sjfb8856606 			"Failed to start queue %u on device %u ", queue_id,
1205*d30ea906Sjfb8856606 			dev_id);
1206*d30ea906Sjfb8856606 
1207*d30ea906Sjfb8856606 	/* Tests for rte_bbdev_stats_get */
1208*d30ea906Sjfb8856606 	dev2->dev_ops = NULL;
1209*d30ea906Sjfb8856606 	TEST_ASSERT_FAIL(rte_bbdev_stats_get(dev_id, &stats),
1210*d30ea906Sjfb8856606 			"Failed test for rte_bbdev_stats_get on device %u ",
1211*d30ea906Sjfb8856606 			dev_id);
1212*d30ea906Sjfb8856606 	dev2->dev_ops = dev1.dev_ops;
1213*d30ea906Sjfb8856606 
1214*d30ea906Sjfb8856606 	dev_ops_tmp = *dev2->dev_ops;
1215*d30ea906Sjfb8856606 	dev_ops_tmp.stats_reset = NULL;
1216*d30ea906Sjfb8856606 	dev2->dev_ops = &dev_ops_tmp;
1217*d30ea906Sjfb8856606 	TEST_ASSERT_SUCCESS(rte_bbdev_stats_get(dev_id, &stats),
1218*d30ea906Sjfb8856606 			"Failed test for rte_bbdev_stats_get: "
1219*d30ea906Sjfb8856606 			"NULL stats_get ");
1220*d30ea906Sjfb8856606 	dev2->dev_ops = dev1.dev_ops;
1221*d30ea906Sjfb8856606 
1222*d30ea906Sjfb8856606 	TEST_ASSERT_SUCCESS(rte_bbdev_stats_get(dev_id, &stats),
1223*d30ea906Sjfb8856606 			"Failed test for rte_bbdev_stats_get on device %u ",
1224*d30ea906Sjfb8856606 			dev_id);
1225*d30ea906Sjfb8856606 
1226*d30ea906Sjfb8856606 	/*
1227*d30ea906Sjfb8856606 	 * Tests for:
1228*d30ea906Sjfb8856606 	 * rte_bbdev_callback_register,
1229*d30ea906Sjfb8856606 	 * rte_bbdev_pmd_callback_process,
1230*d30ea906Sjfb8856606 	 * rte_dev_callback_unregister
1231*d30ea906Sjfb8856606 	 */
1232*d30ea906Sjfb8856606 	dev2->dev_ops = NULL;
1233*d30ea906Sjfb8856606 	TEST_ASSERT_SUCCESS(rte_bbdev_callback_register(dev_id,
1234*d30ea906Sjfb8856606 			RTE_BBDEV_EVENT_UNKNOWN, event_callback, NULL),
1235*d30ea906Sjfb8856606 			"Failed to callback rgstr for RTE_BBDEV_EVENT_UNKNOWN");
1236*d30ea906Sjfb8856606 	rte_bbdev_pmd_callback_process(dev2, RTE_BBDEV_EVENT_UNKNOWN, NULL);
1237*d30ea906Sjfb8856606 
1238*d30ea906Sjfb8856606 	TEST_ASSERT_SUCCESS(rte_bbdev_callback_unregister(dev_id,
1239*d30ea906Sjfb8856606 			RTE_BBDEV_EVENT_UNKNOWN, event_callback, NULL),
1240*d30ea906Sjfb8856606 			"Failed to unregister RTE_BBDEV_EVENT_ERROR ");
1241*d30ea906Sjfb8856606 	dev2->dev_ops = dev1.dev_ops;
1242*d30ea906Sjfb8856606 
1243*d30ea906Sjfb8856606 	/* Tests for rte_bbdev_stats_reset */
1244*d30ea906Sjfb8856606 	dev2->dev_ops = NULL;
1245*d30ea906Sjfb8856606 	TEST_ASSERT_FAIL(rte_bbdev_stats_reset(dev_id),
1246*d30ea906Sjfb8856606 			"Failed to reset statistic for device %u ", dev_id);
1247*d30ea906Sjfb8856606 	dev2->dev_ops = dev1.dev_ops;
1248*d30ea906Sjfb8856606 
1249*d30ea906Sjfb8856606 	dev_ops_tmp = *dev2->dev_ops;
1250*d30ea906Sjfb8856606 	dev_ops_tmp.stats_reset = NULL;
1251*d30ea906Sjfb8856606 	dev2->dev_ops = &dev_ops_tmp;
1252*d30ea906Sjfb8856606 	TEST_ASSERT_SUCCESS(rte_bbdev_stats_reset(dev_id),
1253*d30ea906Sjfb8856606 			"Failed test for rte_bbdev_stats_reset: "
1254*d30ea906Sjfb8856606 			"NULL stats_reset ");
1255*d30ea906Sjfb8856606 	dev2->dev_ops = dev1.dev_ops;
1256*d30ea906Sjfb8856606 
1257*d30ea906Sjfb8856606 	TEST_ASSERT_SUCCESS(rte_bbdev_stats_reset(dev_id),
1258*d30ea906Sjfb8856606 			"Failed to reset statistic for device %u ", dev_id);
1259*d30ea906Sjfb8856606 
1260*d30ea906Sjfb8856606 	/* Tests for rte_bbdev_queue_stop */
1261*d30ea906Sjfb8856606 	dev2->dev_ops = NULL;
1262*d30ea906Sjfb8856606 	TEST_ASSERT_FAIL(rte_bbdev_queue_stop(dev_id, queue_id),
1263*d30ea906Sjfb8856606 			"Failed to stop queue %u on device %u: "
1264*d30ea906Sjfb8856606 			"NULL dev_ops structure", queue_id, dev_id);
1265*d30ea906Sjfb8856606 	dev2->dev_ops = dev1.dev_ops;
1266*d30ea906Sjfb8856606 
1267*d30ea906Sjfb8856606 	TEST_ASSERT_SUCCESS(rte_bbdev_queue_stop(dev_id, queue_id),
1268*d30ea906Sjfb8856606 			"Failed to stop queue %u on device %u ", queue_id,
1269*d30ea906Sjfb8856606 			dev_id);
1270*d30ea906Sjfb8856606 
1271*d30ea906Sjfb8856606 	/* Tests for rte_bbdev_stop */
1272*d30ea906Sjfb8856606 	dev2->dev_ops = NULL;
1273*d30ea906Sjfb8856606 	TEST_ASSERT_FAIL(rte_bbdev_stop(dev_id),
1274*d30ea906Sjfb8856606 			"Failed to stop bbdev %u with NULL dev_ops structure ",
1275*d30ea906Sjfb8856606 			dev_id);
1276*d30ea906Sjfb8856606 	dev2->dev_ops = dev1.dev_ops;
1277*d30ea906Sjfb8856606 
1278*d30ea906Sjfb8856606 	TEST_ASSERT_SUCCESS(rte_bbdev_stop(dev_id),
1279*d30ea906Sjfb8856606 			"Failed to stop bbdev %u ", dev_id);
1280*d30ea906Sjfb8856606 
1281*d30ea906Sjfb8856606 	/* Tests for rte_bbdev_close */
1282*d30ea906Sjfb8856606 	TEST_ASSERT_FAIL(rte_bbdev_close(RTE_BBDEV_MAX_DEVS),
1283*d30ea906Sjfb8856606 			"Failed to close bbdev with invalid dev_id");
1284*d30ea906Sjfb8856606 
1285*d30ea906Sjfb8856606 	dev2->dev_ops = NULL;
1286*d30ea906Sjfb8856606 	TEST_ASSERT_FAIL(rte_bbdev_close(dev_id),
1287*d30ea906Sjfb8856606 			"Failed to close bbdev %u with NULL dev_ops structure ",
1288*d30ea906Sjfb8856606 			dev_id);
1289*d30ea906Sjfb8856606 	dev2->dev_ops = dev1.dev_ops;
1290*d30ea906Sjfb8856606 
1291*d30ea906Sjfb8856606 	TEST_ASSERT_SUCCESS(rte_bbdev_close(dev_id),
1292*d30ea906Sjfb8856606 			"Failed to close bbdev %u ", dev_id);
1293*d30ea906Sjfb8856606 
1294*d30ea906Sjfb8856606 	return TEST_SUCCESS;
1295*d30ea906Sjfb8856606 }
1296*d30ea906Sjfb8856606 
1297*d30ea906Sjfb8856606 static int
1298*d30ea906Sjfb8856606 test_bbdev_get_named_dev(void)
1299*d30ea906Sjfb8856606 {
1300*d30ea906Sjfb8856606 	struct rte_bbdev *dev, *dev_tmp;
1301*d30ea906Sjfb8856606 	const char *name = "name";
1302*d30ea906Sjfb8856606 
1303*d30ea906Sjfb8856606 	dev = rte_bbdev_allocate(name);
1304*d30ea906Sjfb8856606 	TEST_ASSERT(dev != NULL, "Failed to initialize bbdev driver");
1305*d30ea906Sjfb8856606 
1306*d30ea906Sjfb8856606 	dev_tmp = rte_bbdev_get_named_dev(NULL);
1307*d30ea906Sjfb8856606 	TEST_ASSERT(dev_tmp == NULL, "Failed test for rte_bbdev_get_named_dev: "
1308*d30ea906Sjfb8856606 			"function called with NULL parameter");
1309*d30ea906Sjfb8856606 
1310*d30ea906Sjfb8856606 	dev_tmp = rte_bbdev_get_named_dev(name);
1311*d30ea906Sjfb8856606 
1312*d30ea906Sjfb8856606 	TEST_ASSERT(dev == dev_tmp, "Failed test for rte_bbdev_get_named_dev: "
1313*d30ea906Sjfb8856606 			"wrong device was returned ");
1314*d30ea906Sjfb8856606 
1315*d30ea906Sjfb8856606 	TEST_ASSERT_SUCCESS(rte_bbdev_release(dev),
1316*d30ea906Sjfb8856606 			"Failed to uninitialize bbdev driver %s ", name);
1317*d30ea906Sjfb8856606 
1318*d30ea906Sjfb8856606 	return TEST_SUCCESS;
1319*d30ea906Sjfb8856606 }
1320*d30ea906Sjfb8856606 
1321*d30ea906Sjfb8856606 static struct unit_test_suite bbdev_null_testsuite = {
1322*d30ea906Sjfb8856606 	.suite_name = "BBDEV NULL Unit Test Suite",
1323*d30ea906Sjfb8856606 	.setup = testsuite_setup,
1324*d30ea906Sjfb8856606 	.teardown = testsuite_teardown,
1325*d30ea906Sjfb8856606 	.unit_test_cases = {
1326*d30ea906Sjfb8856606 
1327*d30ea906Sjfb8856606 		TEST_CASE(test_bbdev_configure_invalid_dev_id),
1328*d30ea906Sjfb8856606 
1329*d30ea906Sjfb8856606 		TEST_CASE_ST(ut_setup, ut_teardown,
1330*d30ea906Sjfb8856606 				test_bbdev_configure_invalid_num_queues),
1331*d30ea906Sjfb8856606 
1332*d30ea906Sjfb8856606 		TEST_CASE_ST(ut_setup, ut_teardown,
1333*d30ea906Sjfb8856606 				test_bbdev_configure_stop_device),
1334*d30ea906Sjfb8856606 
1335*d30ea906Sjfb8856606 		TEST_CASE_ST(ut_setup, ut_teardown,
1336*d30ea906Sjfb8856606 				test_bbdev_configure_stop_queue),
1337*d30ea906Sjfb8856606 
1338*d30ea906Sjfb8856606 		TEST_CASE_ST(ut_setup, ut_teardown,
1339*d30ea906Sjfb8856606 				test_bbdev_configure_invalid_queue_configure),
1340*d30ea906Sjfb8856606 
1341*d30ea906Sjfb8856606 		TEST_CASE_ST(ut_setup, ut_teardown,
1342*d30ea906Sjfb8856606 				test_bbdev_op_pool),
1343*d30ea906Sjfb8856606 
1344*d30ea906Sjfb8856606 		TEST_CASE_ST(ut_setup, ut_teardown,
1345*d30ea906Sjfb8856606 				test_bbdev_op_type),
1346*d30ea906Sjfb8856606 
1347*d30ea906Sjfb8856606 		TEST_CASE_ST(ut_setup, ut_teardown,
1348*d30ea906Sjfb8856606 				test_bbdev_op_pool_size),
1349*d30ea906Sjfb8856606 
1350*d30ea906Sjfb8856606 		TEST_CASE_ST(ut_setup, ut_teardown,
1351*d30ea906Sjfb8856606 				test_bbdev_stats),
1352*d30ea906Sjfb8856606 
1353*d30ea906Sjfb8856606 		TEST_CASE_ST(ut_setup, ut_teardown,
1354*d30ea906Sjfb8856606 				test_bbdev_driver_init),
1355*d30ea906Sjfb8856606 
1356*d30ea906Sjfb8856606 		TEST_CASE_ST(ut_setup, ut_teardown,
1357*d30ea906Sjfb8856606 				test_bbdev_callback),
1358*d30ea906Sjfb8856606 
1359*d30ea906Sjfb8856606 		TEST_CASE_ST(ut_setup, ut_teardown,
1360*d30ea906Sjfb8856606 				test_bbdev_invalid_driver),
1361*d30ea906Sjfb8856606 
1362*d30ea906Sjfb8856606 		TEST_CASE_ST(ut_setup, ut_teardown,
1363*d30ea906Sjfb8856606 				test_bbdev_get_named_dev),
1364*d30ea906Sjfb8856606 
1365*d30ea906Sjfb8856606 		TEST_CASE(test_bbdev_count),
1366*d30ea906Sjfb8856606 
1367*d30ea906Sjfb8856606 		TEST_CASES_END() /**< NULL terminate unit test array */
1368*d30ea906Sjfb8856606 	}
1369*d30ea906Sjfb8856606 };
1370*d30ea906Sjfb8856606 
1371*d30ea906Sjfb8856606 REGISTER_TEST_COMMAND(unittest, bbdev_null_testsuite);
1372