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