1a9de470cSBruce Richardson /* SPDX-License-Identifier: BSD-3-Clause 2a9de470cSBruce Richardson * Copyright(c) 2018 Intel Corporation. 3a9de470cSBruce Richardson * All rights reserved. 4a9de470cSBruce Richardson */ 5a9de470cSBruce Richardson 63c60274cSJie Zhou #include "test.h" 7a9de470cSBruce Richardson #include <string.h> 8a9de470cSBruce Richardson #include <rte_common.h> 9647a788dSAkhil Goyal #include <rte_malloc.h> 10a9de470cSBruce Richardson #include <rte_mempool.h> 11a9de470cSBruce Richardson #include <rte_mbuf.h> 12a9de470cSBruce Richardson #include <rte_cryptodev.h> 133c60274cSJie Zhou 143c60274cSJie Zhou #ifdef RTE_EXEC_ENV_WINDOWS 153c60274cSJie Zhou static int 163c60274cSJie Zhou test_event_crypto_adapter(void) 173c60274cSJie Zhou { 183c60274cSJie Zhou printf("event_crypto_adapter not supported on Windows, skipping test\n"); 193c60274cSJie Zhou return TEST_SKIPPED; 203c60274cSJie Zhou } 213c60274cSJie Zhou 223c60274cSJie Zhou #else 233c60274cSJie Zhou 24a9de470cSBruce Richardson #include <rte_eventdev.h> 25a9de470cSBruce Richardson #include <rte_bus_vdev.h> 26a9de470cSBruce Richardson #include <rte_service.h> 27a9de470cSBruce Richardson #include <rte_event_crypto_adapter.h> 28a9de470cSBruce Richardson 29a9de470cSBruce Richardson #define PKT_TRACE 0 30a9de470cSBruce Richardson #define NUM 1 31a9de470cSBruce Richardson #define DEFAULT_NUM_XFORMS (2) 32a9de470cSBruce Richardson #define NUM_MBUFS (8191) 33a9de470cSBruce Richardson #define MBUF_CACHE_SIZE (256) 34a9de470cSBruce Richardson #define MAXIMUM_IV_LENGTH (16) 3539b07dd7SAnoob Joseph #define DEFAULT_NUM_OPS_INFLIGHT 1024 36a9de470cSBruce Richardson #define MAX_NB_SESSIONS 4 37a9de470cSBruce Richardson #define TEST_APP_PORT_ID 0 38a9de470cSBruce Richardson #define TEST_APP_EV_QUEUE_ID 0 39a9de470cSBruce Richardson #define TEST_APP_EV_PRIORITY 0 40a9de470cSBruce Richardson #define TEST_APP_EV_FLOWID 0xAABB 41a9de470cSBruce Richardson #define TEST_CRYPTO_EV_QUEUE_ID 1 42a9de470cSBruce Richardson #define TEST_ADAPTER_ID 0 43a9de470cSBruce Richardson #define TEST_CDEV_ID 0 44a9de470cSBruce Richardson #define TEST_CDEV_QP_ID 0 45a9de470cSBruce Richardson #define PACKET_LENGTH 64 46a9de470cSBruce Richardson #define NB_TEST_PORTS 1 47a9de470cSBruce Richardson #define NB_TEST_QUEUES 2 48a9de470cSBruce Richardson #define NUM_CORES 1 49a9de470cSBruce Richardson #define CRYPTODEV_NAME_NULL_PMD crypto_null 50a9de470cSBruce Richardson 51a9de470cSBruce Richardson #define MBUF_SIZE (sizeof(struct rte_mbuf) + \ 52a9de470cSBruce Richardson RTE_PKTMBUF_HEADROOM + PACKET_LENGTH) 53a9de470cSBruce Richardson #define IV_OFFSET (sizeof(struct rte_crypto_op) + \ 54a9de470cSBruce Richardson sizeof(struct rte_crypto_sym_op) + \ 55a9de470cSBruce Richardson DEFAULT_NUM_XFORMS * \ 56a9de470cSBruce Richardson sizeof(struct rte_crypto_sym_xform)) 57a9de470cSBruce Richardson 58a9de470cSBruce Richardson /* Handle log statements in same manner as test macros */ 59a9de470cSBruce Richardson #define LOG_DBG(...) RTE_LOG(DEBUG, EAL, __VA_ARGS__) 60a9de470cSBruce Richardson 61a9de470cSBruce Richardson static const uint8_t text_64B[] = { 62a9de470cSBruce Richardson 0x05, 0x15, 0x77, 0x32, 0xc9, 0x66, 0x91, 0x50, 63a9de470cSBruce Richardson 0x93, 0x9f, 0xbb, 0x4e, 0x2e, 0x5a, 0x02, 0xd0, 64a9de470cSBruce Richardson 0x2d, 0x9d, 0x31, 0x5d, 0xc8, 0x9e, 0x86, 0x36, 65a9de470cSBruce Richardson 0x54, 0x5c, 0x50, 0xe8, 0x75, 0x54, 0x74, 0x5e, 66a9de470cSBruce Richardson 0xd5, 0xa2, 0x84, 0x21, 0x2d, 0xc5, 0xf8, 0x1c, 67a9de470cSBruce Richardson 0x55, 0x1a, 0xba, 0x91, 0xce, 0xb5, 0xa3, 0x1e, 68a9de470cSBruce Richardson 0x31, 0xbf, 0xe9, 0xa1, 0x97, 0x5c, 0x2b, 0xd6, 69a9de470cSBruce Richardson 0x57, 0xa5, 0x9f, 0xab, 0xbd, 0xb0, 0x9b, 0x9c 70a9de470cSBruce Richardson }; 71647a788dSAkhil Goyal #define DATA_SIZE 512 72647a788dSAkhil Goyal struct modex_test_data { 73647a788dSAkhil Goyal enum rte_crypto_asym_xform_type xform_type; 74647a788dSAkhil Goyal struct { 75647a788dSAkhil Goyal uint8_t data[DATA_SIZE]; 76647a788dSAkhil Goyal uint16_t len; 77647a788dSAkhil Goyal } base; 78647a788dSAkhil Goyal struct { 79647a788dSAkhil Goyal uint8_t data[DATA_SIZE]; 80647a788dSAkhil Goyal uint16_t len; 81647a788dSAkhil Goyal } exponent; 82647a788dSAkhil Goyal struct { 83647a788dSAkhil Goyal uint8_t data[DATA_SIZE]; 84647a788dSAkhil Goyal uint16_t len; 85647a788dSAkhil Goyal } modulus; 86647a788dSAkhil Goyal struct { 87647a788dSAkhil Goyal uint8_t data[DATA_SIZE]; 88647a788dSAkhil Goyal uint16_t len; 89647a788dSAkhil Goyal } reminder; 90647a788dSAkhil Goyal uint16_t result_len; 91647a788dSAkhil Goyal }; 92647a788dSAkhil Goyal 93647a788dSAkhil Goyal static struct 94647a788dSAkhil Goyal modex_test_data modex_test_case = { 95647a788dSAkhil Goyal .xform_type = RTE_CRYPTO_ASYM_XFORM_MODEX, 96647a788dSAkhil Goyal .base = { 97647a788dSAkhil Goyal .data = { 98647a788dSAkhil Goyal 0xF8, 0xBA, 0x1A, 0x55, 0xD0, 0x2F, 0x85, 99647a788dSAkhil Goyal 0xAE, 0x96, 0x7B, 0xB6, 0x2F, 0xB6, 0xCD, 100647a788dSAkhil Goyal 0xA8, 0xEB, 0x7E, 0x78, 0xA0, 0x50 101647a788dSAkhil Goyal }, 102647a788dSAkhil Goyal .len = 20, 103647a788dSAkhil Goyal }, 104647a788dSAkhil Goyal .exponent = { 105647a788dSAkhil Goyal .data = { 106647a788dSAkhil Goyal 0x01, 0x00, 0x01 107647a788dSAkhil Goyal }, 108647a788dSAkhil Goyal .len = 3, 109647a788dSAkhil Goyal }, 110647a788dSAkhil Goyal .reminder = { 111647a788dSAkhil Goyal .data = { 112647a788dSAkhil Goyal 0x2C, 0x60, 0x75, 0x45, 0x98, 0x9D, 0xE0, 0x72, 113647a788dSAkhil Goyal 0xA0, 0x9D, 0x3A, 0x9E, 0x03, 0x38, 0x73, 0x3C, 114647a788dSAkhil Goyal 0x31, 0x83, 0x04, 0xFE, 0x75, 0x43, 0xE6, 0x17, 115647a788dSAkhil Goyal 0x5C, 0x01, 0x29, 0x51, 0x69, 0x33, 0x62, 0x2D, 116647a788dSAkhil Goyal 0x78, 0xBE, 0xAE, 0xC4, 0xBC, 0xDE, 0x7E, 0x2C, 117647a788dSAkhil Goyal 0x77, 0x84, 0xF2, 0xC5, 0x14, 0xB5, 0x2F, 0xF7, 118647a788dSAkhil Goyal 0xC5, 0x94, 0xEF, 0x86, 0x75, 0x75, 0xB5, 0x11, 119647a788dSAkhil Goyal 0xE5, 0x0E, 0x0A, 0x29, 0x76, 0xE2, 0xEA, 0x32, 120647a788dSAkhil Goyal 0x0E, 0x43, 0x77, 0x7E, 0x2C, 0x27, 0xAC, 0x3B, 121647a788dSAkhil Goyal 0x86, 0xA5, 0xDB, 0xC9, 0x48, 0x40, 0xE8, 0x99, 122647a788dSAkhil Goyal 0x9A, 0x0A, 0x3D, 0xD6, 0x74, 0xFA, 0x2E, 0x2E, 123647a788dSAkhil Goyal 0x5B, 0xAF, 0x8C, 0x99, 0x44, 0x2A, 0x67, 0x38, 124647a788dSAkhil Goyal 0x27, 0x41, 0x59, 0x9D, 0xB8, 0x51, 0xC9, 0xF7, 125647a788dSAkhil Goyal 0x43, 0x61, 0x31, 0x6E, 0xF1, 0x25, 0x38, 0x7F, 126647a788dSAkhil Goyal 0xAE, 0xC6, 0xD0, 0xBB, 0x29, 0x76, 0x3F, 0x46, 127647a788dSAkhil Goyal 0x2E, 0x1B, 0xE4, 0x67, 0x71, 0xE3, 0x87, 0x5A 128647a788dSAkhil Goyal }, 129647a788dSAkhil Goyal .len = 128, 130647a788dSAkhil Goyal }, 131647a788dSAkhil Goyal .modulus = { 132647a788dSAkhil Goyal .data = { 133647a788dSAkhil Goyal 0xb3, 0xa1, 0xaf, 0xb7, 0x13, 0x08, 0x00, 0x0a, 134647a788dSAkhil Goyal 0x35, 0xdc, 0x2b, 0x20, 0x8d, 0xa1, 0xb5, 0xce, 135647a788dSAkhil Goyal 0x47, 0x8a, 0xc3, 0x80, 0xf4, 0x7d, 0x4a, 0xa2, 136647a788dSAkhil Goyal 0x62, 0xfd, 0x61, 0x7f, 0xb5, 0xa8, 0xde, 0x0a, 137647a788dSAkhil Goyal 0x17, 0x97, 0xa0, 0xbf, 0xdf, 0x56, 0x5a, 0x3d, 138647a788dSAkhil Goyal 0x51, 0x56, 0x4f, 0x70, 0x70, 0x3f, 0x63, 0x6a, 139647a788dSAkhil Goyal 0x44, 0x5b, 0xad, 0x84, 0x0d, 0x3f, 0x27, 0x6e, 140647a788dSAkhil Goyal 0x3b, 0x34, 0x91, 0x60, 0x14, 0xb9, 0xaa, 0x72, 141647a788dSAkhil Goyal 0xfd, 0xa3, 0x64, 0xd2, 0x03, 0xa7, 0x53, 0x87, 142647a788dSAkhil Goyal 0x9e, 0x88, 0x0b, 0xc1, 0x14, 0x93, 0x1a, 0x62, 143647a788dSAkhil Goyal 0xff, 0xb1, 0x5d, 0x74, 0xcd, 0x59, 0x63, 0x18, 144647a788dSAkhil Goyal 0x11, 0x3d, 0x4f, 0xba, 0x75, 0xd4, 0x33, 0x4e, 145647a788dSAkhil Goyal 0x23, 0x6b, 0x7b, 0x57, 0x44, 0xe1, 0xd3, 0x03, 146647a788dSAkhil Goyal 0x13, 0xa6, 0xf0, 0x8b, 0x60, 0xb0, 0x9e, 0xee, 147647a788dSAkhil Goyal 0x75, 0x08, 0x9d, 0x71, 0x63, 0x13, 0xcb, 0xa6, 148647a788dSAkhil Goyal 0x81, 0x92, 0x14, 0x03, 0x22, 0x2d, 0xde, 0x55 149647a788dSAkhil Goyal }, 150647a788dSAkhil Goyal .len = 128, 151647a788dSAkhil Goyal }, 152647a788dSAkhil Goyal .result_len = 128, 153647a788dSAkhil Goyal }; 154a9de470cSBruce Richardson 155a9de470cSBruce Richardson struct event_crypto_adapter_test_params { 156a9de470cSBruce Richardson struct rte_mempool *mbuf_pool; 157a9de470cSBruce Richardson struct rte_mempool *op_mpool; 158647a788dSAkhil Goyal struct rte_mempool *asym_op_mpool; 159a9de470cSBruce Richardson struct rte_mempool *session_mpool; 160647a788dSAkhil Goyal struct rte_mempool *asym_sess_mpool; 161a9de470cSBruce Richardson struct rte_cryptodev_config *config; 162a9de470cSBruce Richardson uint8_t crypto_event_port_id; 163b8ebe146SShijith Thotton uint8_t internal_port_op_fwd; 164a9de470cSBruce Richardson }; 165a9de470cSBruce Richardson 166a9de470cSBruce Richardson struct rte_event response_info = { 167a9de470cSBruce Richardson .queue_id = TEST_APP_EV_QUEUE_ID, 168a9de470cSBruce Richardson .sched_type = RTE_SCHED_TYPE_ATOMIC, 169a9de470cSBruce Richardson .flow_id = TEST_APP_EV_FLOWID, 170a9de470cSBruce Richardson .priority = TEST_APP_EV_PRIORITY 171a9de470cSBruce Richardson }; 172a9de470cSBruce Richardson 173a9de470cSBruce Richardson struct rte_event_crypto_request request_info = { 174a9de470cSBruce Richardson .cdev_id = TEST_CDEV_ID, 175a9de470cSBruce Richardson .queue_pair_id = TEST_CDEV_QP_ID 176a9de470cSBruce Richardson }; 177a9de470cSBruce Richardson 178a9de470cSBruce Richardson static struct event_crypto_adapter_test_params params; 179a9de470cSBruce Richardson static uint8_t crypto_adapter_setup_done; 180a9de470cSBruce Richardson static uint32_t slcore_id; 181a9de470cSBruce Richardson static int evdev; 182a9de470cSBruce Richardson 183a9de470cSBruce Richardson static struct rte_mbuf * 184a9de470cSBruce Richardson alloc_fill_mbuf(struct rte_mempool *mpool, const uint8_t *data, 185a9de470cSBruce Richardson size_t len, uint8_t blocksize) 186a9de470cSBruce Richardson { 187a9de470cSBruce Richardson struct rte_mbuf *m = rte_pktmbuf_alloc(mpool); 188a9de470cSBruce Richardson size_t t_len = len - (blocksize ? (len % blocksize) : 0); 189a9de470cSBruce Richardson 190a9de470cSBruce Richardson if (m) { 191a9de470cSBruce Richardson char *dst = rte_pktmbuf_append(m, t_len); 192a9de470cSBruce Richardson 193a9de470cSBruce Richardson if (!dst) { 194a9de470cSBruce Richardson rte_pktmbuf_free(m); 195a9de470cSBruce Richardson return NULL; 196a9de470cSBruce Richardson } 197a9de470cSBruce Richardson 198a9de470cSBruce Richardson rte_memcpy(dst, (const void *)data, t_len); 199a9de470cSBruce Richardson } 200a9de470cSBruce Richardson return m; 201a9de470cSBruce Richardson } 202a9de470cSBruce Richardson 203a9de470cSBruce Richardson static int 204a9de470cSBruce Richardson send_recv_ev(struct rte_event *ev) 205a9de470cSBruce Richardson { 206a9de470cSBruce Richardson struct rte_crypto_op *op; 207a9de470cSBruce Richardson struct rte_event recv_ev; 208a9de470cSBruce Richardson int ret; 209a9de470cSBruce Richardson 210b8ebe146SShijith Thotton if (params.internal_port_op_fwd) 211b8ebe146SShijith Thotton ret = rte_event_crypto_adapter_enqueue(evdev, TEST_APP_PORT_ID, 212b8ebe146SShijith Thotton ev, NUM); 213b8ebe146SShijith Thotton else 214a9de470cSBruce Richardson ret = rte_event_enqueue_burst(evdev, TEST_APP_PORT_ID, ev, NUM); 215b8ebe146SShijith Thotton TEST_ASSERT_EQUAL(ret, NUM, "Failed to send event to crypto adapter\n"); 216a9de470cSBruce Richardson 217a9de470cSBruce Richardson while (rte_event_dequeue_burst(evdev, 218a9de470cSBruce Richardson TEST_APP_PORT_ID, &recv_ev, NUM, 0) == 0) 219a9de470cSBruce Richardson rte_pause(); 220a9de470cSBruce Richardson 221a9de470cSBruce Richardson op = recv_ev.event_ptr; 222647a788dSAkhil Goyal if (op->type == RTE_CRYPTO_OP_TYPE_SYMMETRIC) { 223a9de470cSBruce Richardson #if PKT_TRACE 224a9de470cSBruce Richardson struct rte_mbuf *m = op->sym->m_src; 225a9de470cSBruce Richardson rte_pktmbuf_dump(stdout, m, rte_pktmbuf_pkt_len(m)); 226a9de470cSBruce Richardson #endif 227a9de470cSBruce Richardson rte_pktmbuf_free(op->sym->m_src); 228647a788dSAkhil Goyal } else { 229647a788dSAkhil Goyal uint8_t *data_expected = NULL, *data_received = NULL; 230647a788dSAkhil Goyal uint32_t data_size; 231647a788dSAkhil Goyal 232647a788dSAkhil Goyal data_expected = modex_test_case.reminder.data; 233647a788dSAkhil Goyal data_received = op->asym->modex.result.data; 234647a788dSAkhil Goyal data_size = op->asym->modex.result.length; 235647a788dSAkhil Goyal ret = memcmp(data_expected, data_received, data_size); 236647a788dSAkhil Goyal TEST_ASSERT_EQUAL(ret, 0, 237647a788dSAkhil Goyal "Data mismatch for asym crypto adapter\n"); 238647a788dSAkhil Goyal rte_free(op->asym->modex.result.data); 239647a788dSAkhil Goyal } 240a9de470cSBruce Richardson rte_crypto_op_free(op); 241a9de470cSBruce Richardson 242a9de470cSBruce Richardson return TEST_SUCCESS; 243a9de470cSBruce Richardson } 244a9de470cSBruce Richardson 245a9de470cSBruce Richardson static int 246a9de470cSBruce Richardson test_crypto_adapter_stats(void) 247a9de470cSBruce Richardson { 248a9de470cSBruce Richardson struct rte_event_crypto_adapter_stats stats; 249a9de470cSBruce Richardson 250a9de470cSBruce Richardson rte_event_crypto_adapter_stats_get(TEST_ADAPTER_ID, &stats); 251a9de470cSBruce Richardson printf(" +------------------------------------------------------+\n"); 252a9de470cSBruce Richardson printf(" + Crypto adapter stats for instance %u:\n", TEST_ADAPTER_ID); 253a9de470cSBruce Richardson printf(" + Event port poll count %" PRIx64 "\n", 254a9de470cSBruce Richardson stats.event_poll_count); 255a9de470cSBruce Richardson printf(" + Event dequeue count %" PRIx64 "\n", 256a9de470cSBruce Richardson stats.event_deq_count); 257a9de470cSBruce Richardson printf(" + Cryptodev enqueue count %" PRIx64 "\n", 258a9de470cSBruce Richardson stats.crypto_enq_count); 259a9de470cSBruce Richardson printf(" + Cryptodev enqueue failed count %" PRIx64 "\n", 260a9de470cSBruce Richardson stats.crypto_enq_fail); 261a9de470cSBruce Richardson printf(" + Cryptodev dequeue count %" PRIx64 "\n", 262a9de470cSBruce Richardson stats.crypto_deq_count); 263a9de470cSBruce Richardson printf(" + Event enqueue count %" PRIx64 "\n", 264a9de470cSBruce Richardson stats.event_enq_count); 265a9de470cSBruce Richardson printf(" + Event enqueue retry count %" PRIx64 "\n", 266a9de470cSBruce Richardson stats.event_enq_retry_count); 267a9de470cSBruce Richardson printf(" + Event enqueue fail count %" PRIx64 "\n", 268a9de470cSBruce Richardson stats.event_enq_fail_count); 269a9de470cSBruce Richardson printf(" +------------------------------------------------------+\n"); 270a9de470cSBruce Richardson 271a9de470cSBruce Richardson rte_event_crypto_adapter_stats_reset(TEST_ADAPTER_ID); 272a9de470cSBruce Richardson return TEST_SUCCESS; 273a9de470cSBruce Richardson } 274a9de470cSBruce Richardson 275a9de470cSBruce Richardson static int 27604ed18cdSNaga Harish K S V test_crypto_adapter_params(void) 27704ed18cdSNaga Harish K S V { 278db839225SShijith Thotton int err, rc; 27904ed18cdSNaga Harish K S V struct rte_event_crypto_adapter_runtime_params in_params; 28004ed18cdSNaga Harish K S V struct rte_event_crypto_adapter_runtime_params out_params; 28104ed18cdSNaga Harish K S V uint32_t cap; 28204ed18cdSNaga Harish K S V struct rte_event_crypto_adapter_queue_conf queue_conf = { 28304ed18cdSNaga Harish K S V .ev = response_info, 28404ed18cdSNaga Harish K S V }; 28504ed18cdSNaga Harish K S V 28604ed18cdSNaga Harish K S V err = rte_event_crypto_adapter_caps_get(evdev, TEST_CDEV_ID, &cap); 287a169cd36SAakash Sasidharan if (err == -ENOTSUP) 288a169cd36SAakash Sasidharan return TEST_SKIPPED; 289a169cd36SAakash Sasidharan 29004ed18cdSNaga Harish K S V TEST_ASSERT_SUCCESS(err, "Failed to get adapter capabilities\n"); 29104ed18cdSNaga Harish K S V 29204ed18cdSNaga Harish K S V if (cap & RTE_EVENT_CRYPTO_ADAPTER_CAP_INTERNAL_PORT_QP_EV_BIND) { 29304ed18cdSNaga Harish K S V err = rte_event_crypto_adapter_queue_pair_add(TEST_ADAPTER_ID, 29404ed18cdSNaga Harish K S V TEST_CDEV_ID, TEST_CDEV_QP_ID, &queue_conf); 29504ed18cdSNaga Harish K S V } else 29604ed18cdSNaga Harish K S V err = rte_event_crypto_adapter_queue_pair_add(TEST_ADAPTER_ID, 29704ed18cdSNaga Harish K S V TEST_CDEV_ID, TEST_CDEV_QP_ID, NULL); 29804ed18cdSNaga Harish K S V 29904ed18cdSNaga Harish K S V TEST_ASSERT_SUCCESS(err, "Failed to add queue pair\n"); 30004ed18cdSNaga Harish K S V 30104ed18cdSNaga Harish K S V err = rte_event_crypto_adapter_runtime_params_init(&in_params); 30204ed18cdSNaga Harish K S V TEST_ASSERT(err == 0, "Expected 0 got %d", err); 30304ed18cdSNaga Harish K S V err = rte_event_crypto_adapter_runtime_params_init(&out_params); 30404ed18cdSNaga Harish K S V TEST_ASSERT(err == 0, "Expected 0 got %d", err); 30504ed18cdSNaga Harish K S V 30604ed18cdSNaga Harish K S V /* Case 1: Get the default value of mbufs processed by adapter */ 30704ed18cdSNaga Harish K S V err = rte_event_crypto_adapter_runtime_params_get(TEST_ADAPTER_ID, 30804ed18cdSNaga Harish K S V &out_params); 309db839225SShijith Thotton if (err == -ENOTSUP) { 310db839225SShijith Thotton rc = TEST_SKIPPED; 311db839225SShijith Thotton goto queue_pair_del; 312db839225SShijith Thotton } 31304ed18cdSNaga Harish K S V TEST_ASSERT(err == 0, "Expected 0 got %d", err); 31404ed18cdSNaga Harish K S V 31504ed18cdSNaga Harish K S V /* Case 2: Set max_nb = 32 (=BATCH_SEIZE) */ 31604ed18cdSNaga Harish K S V in_params.max_nb = 32; 31704ed18cdSNaga Harish K S V 31804ed18cdSNaga Harish K S V err = rte_event_crypto_adapter_runtime_params_set(TEST_ADAPTER_ID, 31904ed18cdSNaga Harish K S V &in_params); 32004ed18cdSNaga Harish K S V TEST_ASSERT(err == 0, "Expected 0 got %d", err); 32104ed18cdSNaga Harish K S V 32204ed18cdSNaga Harish K S V err = rte_event_crypto_adapter_runtime_params_get(TEST_ADAPTER_ID, 32304ed18cdSNaga Harish K S V &out_params); 32404ed18cdSNaga Harish K S V TEST_ASSERT(err == 0, "Expected 0 got %d", err); 32504ed18cdSNaga Harish K S V TEST_ASSERT(in_params.max_nb == out_params.max_nb, "Expected %u got %u", 32604ed18cdSNaga Harish K S V in_params.max_nb, out_params.max_nb); 32704ed18cdSNaga Harish K S V 32804ed18cdSNaga Harish K S V /* Case 3: Set max_nb = 192 */ 32904ed18cdSNaga Harish K S V in_params.max_nb = 192; 33004ed18cdSNaga Harish K S V 33104ed18cdSNaga Harish K S V err = rte_event_crypto_adapter_runtime_params_set(TEST_ADAPTER_ID, 33204ed18cdSNaga Harish K S V &in_params); 33304ed18cdSNaga Harish K S V TEST_ASSERT(err == 0, "Expected 0 got %d", err); 33404ed18cdSNaga Harish K S V 33504ed18cdSNaga Harish K S V err = rte_event_crypto_adapter_runtime_params_get(TEST_ADAPTER_ID, 33604ed18cdSNaga Harish K S V &out_params); 33704ed18cdSNaga Harish K S V TEST_ASSERT(err == 0, "Expected 0 got %d", err); 33804ed18cdSNaga Harish K S V TEST_ASSERT(in_params.max_nb == out_params.max_nb, "Expected %u got %u", 33904ed18cdSNaga Harish K S V in_params.max_nb, out_params.max_nb); 34004ed18cdSNaga Harish K S V 34104ed18cdSNaga Harish K S V /* Case 4: Set max_nb = 256 */ 34204ed18cdSNaga Harish K S V in_params.max_nb = 256; 34304ed18cdSNaga Harish K S V 34404ed18cdSNaga Harish K S V err = rte_event_crypto_adapter_runtime_params_set(TEST_ADAPTER_ID, 34504ed18cdSNaga Harish K S V &in_params); 34604ed18cdSNaga Harish K S V TEST_ASSERT(err == 0, "Expected 0 got %d", err); 34704ed18cdSNaga Harish K S V 34804ed18cdSNaga Harish K S V err = rte_event_crypto_adapter_runtime_params_get(TEST_ADAPTER_ID, 34904ed18cdSNaga Harish K S V &out_params); 35004ed18cdSNaga Harish K S V TEST_ASSERT(err == 0, "Expected 0 got %d", err); 35104ed18cdSNaga Harish K S V TEST_ASSERT(in_params.max_nb == out_params.max_nb, "Expected %u got %u", 35204ed18cdSNaga Harish K S V in_params.max_nb, out_params.max_nb); 35304ed18cdSNaga Harish K S V 35404ed18cdSNaga Harish K S V /* Case 5: Set max_nb = 30(<BATCH_SIZE) */ 35504ed18cdSNaga Harish K S V in_params.max_nb = 30; 35604ed18cdSNaga Harish K S V 35704ed18cdSNaga Harish K S V err = rte_event_crypto_adapter_runtime_params_set(TEST_ADAPTER_ID, 35804ed18cdSNaga Harish K S V &in_params); 35904ed18cdSNaga Harish K S V TEST_ASSERT(err == 0, "Expected 0 got %d", err); 36004ed18cdSNaga Harish K S V 36104ed18cdSNaga Harish K S V err = rte_event_crypto_adapter_runtime_params_get(TEST_ADAPTER_ID, 36204ed18cdSNaga Harish K S V &out_params); 36304ed18cdSNaga Harish K S V TEST_ASSERT(err == 0, "Expected 0 got %d", err); 36404ed18cdSNaga Harish K S V TEST_ASSERT(in_params.max_nb == out_params.max_nb, "Expected %u got %u", 36504ed18cdSNaga Harish K S V in_params.max_nb, out_params.max_nb); 36604ed18cdSNaga Harish K S V 36704ed18cdSNaga Harish K S V /* Case 6: Set max_nb = 512 */ 36804ed18cdSNaga Harish K S V in_params.max_nb = 512; 36904ed18cdSNaga Harish K S V 37004ed18cdSNaga Harish K S V err = rte_event_crypto_adapter_runtime_params_set(TEST_ADAPTER_ID, 37104ed18cdSNaga Harish K S V &in_params); 37204ed18cdSNaga Harish K S V TEST_ASSERT(err == 0, "Expected 0 got %d", err); 37304ed18cdSNaga Harish K S V 37404ed18cdSNaga Harish K S V err = rte_event_crypto_adapter_runtime_params_get(TEST_ADAPTER_ID, 37504ed18cdSNaga Harish K S V &out_params); 37604ed18cdSNaga Harish K S V TEST_ASSERT(err == 0, "Expected 0 got %d", err); 37704ed18cdSNaga Harish K S V TEST_ASSERT(in_params.max_nb == out_params.max_nb, "Expected %u got %u", 37804ed18cdSNaga Harish K S V in_params.max_nb, out_params.max_nb); 37904ed18cdSNaga Harish K S V 380db839225SShijith Thotton rc = TEST_SUCCESS; 381db839225SShijith Thotton queue_pair_del: 38204ed18cdSNaga Harish K S V err = rte_event_crypto_adapter_queue_pair_del(TEST_ADAPTER_ID, 38304ed18cdSNaga Harish K S V TEST_CDEV_ID, TEST_CDEV_QP_ID); 38404ed18cdSNaga Harish K S V TEST_ASSERT_SUCCESS(err, "Failed to delete add queue pair\n"); 38504ed18cdSNaga Harish K S V 386db839225SShijith Thotton return rc; 38704ed18cdSNaga Harish K S V } 38804ed18cdSNaga Harish K S V 38904ed18cdSNaga Harish K S V static int 390a9de470cSBruce Richardson test_op_forward_mode(uint8_t session_less) 391a9de470cSBruce Richardson { 392a9de470cSBruce Richardson struct rte_crypto_sym_xform cipher_xform; 393a9de470cSBruce Richardson union rte_event_crypto_metadata m_data; 394a9de470cSBruce Richardson struct rte_crypto_sym_op *sym_op; 395a9de470cSBruce Richardson struct rte_crypto_op *op; 396a9de470cSBruce Richardson struct rte_mbuf *m; 397a9de470cSBruce Richardson struct rte_event ev; 398a9de470cSBruce Richardson uint32_t cap; 3992a440d6aSAkhil Goyal void *sess; 400a9de470cSBruce Richardson int ret; 401a9de470cSBruce Richardson 402a9de470cSBruce Richardson memset(&m_data, 0, sizeof(m_data)); 403a9de470cSBruce Richardson 404a9de470cSBruce Richardson m = alloc_fill_mbuf(params.mbuf_pool, text_64B, PACKET_LENGTH, 0); 405a9de470cSBruce Richardson TEST_ASSERT_NOT_NULL(m, "Failed to allocate mbuf!\n"); 406a9de470cSBruce Richardson #if PKT_TRACE 407a9de470cSBruce Richardson rte_pktmbuf_dump(stdout, m, rte_pktmbuf_pkt_len(m)); 408a9de470cSBruce Richardson #endif 409a9de470cSBruce Richardson /* Setup Cipher Parameters */ 410a9de470cSBruce Richardson cipher_xform.type = RTE_CRYPTO_SYM_XFORM_CIPHER; 411a9de470cSBruce Richardson cipher_xform.next = NULL; 41274449375SAbhinandan Gujjar cipher_xform.cipher.algo = RTE_CRYPTO_CIPHER_NULL; 41361ecfb02SAnkur Dwivedi cipher_xform.cipher.op = RTE_CRYPTO_CIPHER_OP_ENCRYPT; 41418d934cbSHemant Agrawal 415a9de470cSBruce Richardson op = rte_crypto_op_alloc(params.op_mpool, 416a9de470cSBruce Richardson RTE_CRYPTO_OP_TYPE_SYMMETRIC); 417a9de470cSBruce Richardson TEST_ASSERT_NOT_NULL(op, 418a9de470cSBruce Richardson "Failed to allocate symmetric crypto operation struct\n"); 419a9de470cSBruce Richardson 420a9de470cSBruce Richardson sym_op = op->sym; 421a9de470cSBruce Richardson 422a9de470cSBruce Richardson if (!session_less) { 423bdce2564SAkhil Goyal sess = rte_cryptodev_sym_session_create(TEST_CDEV_ID, 424bdce2564SAkhil Goyal &cipher_xform, params.session_mpool); 425a9de470cSBruce Richardson TEST_ASSERT_NOT_NULL(sess, "Session creation failed\n"); 426a9de470cSBruce Richardson 42745eb85e9SAnkur Dwivedi ret = rte_event_crypto_adapter_caps_get(evdev, TEST_CDEV_ID, 42845eb85e9SAnkur Dwivedi &cap); 429a9de470cSBruce Richardson TEST_ASSERT_SUCCESS(ret, "Failed to get adapter capabilities\n"); 430a9de470cSBruce Richardson 431a9de470cSBruce Richardson if (cap & RTE_EVENT_CRYPTO_ADAPTER_CAP_SESSION_PRIVATE_DATA) { 432a9de470cSBruce Richardson /* Fill in private user data information */ 43367c8baecSShijith Thotton m_data.request_info.cdev_id = request_info.cdev_id; 43467c8baecSShijith Thotton m_data.request_info.queue_pair_id = 43567c8baecSShijith Thotton request_info.queue_pair_id; 43667c8baecSShijith Thotton m_data.response_info.event = response_info.event; 4374c43055cSAkhil Goyal rte_cryptodev_session_event_mdata_set(TEST_CDEV_ID, 4384c43055cSAkhil Goyal sess, RTE_CRYPTO_OP_TYPE_SYMMETRIC, 4394c43055cSAkhil Goyal RTE_CRYPTO_OP_WITH_SESSION, 440a9de470cSBruce Richardson &m_data, sizeof(m_data)); 441a9de470cSBruce Richardson } 442a9de470cSBruce Richardson 443a9de470cSBruce Richardson rte_crypto_op_attach_sym_session(op, sess); 444a9de470cSBruce Richardson } else { 445a9de470cSBruce Richardson struct rte_crypto_sym_xform *first_xform; 446a9de470cSBruce Richardson 447a9de470cSBruce Richardson rte_crypto_op_sym_xforms_alloc(op, NUM); 448a9de470cSBruce Richardson op->sess_type = RTE_CRYPTO_OP_SESSIONLESS; 449a9de470cSBruce Richardson first_xform = &cipher_xform; 450a9de470cSBruce Richardson sym_op->xform = first_xform; 451b812567eSAbhinandan Gujjar uint32_t len = IV_OFFSET + MAXIMUM_IV_LENGTH; 452a9de470cSBruce Richardson op->private_data_offset = len; 453a9de470cSBruce Richardson /* Fill in private data information */ 45467c8baecSShijith Thotton m_data.request_info.cdev_id = request_info.cdev_id; 45567c8baecSShijith Thotton m_data.request_info.queue_pair_id = request_info.queue_pair_id; 45667c8baecSShijith Thotton m_data.response_info.event = response_info.event; 457a9de470cSBruce Richardson rte_memcpy((uint8_t *)op + len, &m_data, sizeof(m_data)); 458a9de470cSBruce Richardson } 459a9de470cSBruce Richardson 460a9de470cSBruce Richardson sym_op->m_src = m; 461a9de470cSBruce Richardson sym_op->cipher.data.offset = 0; 462a9de470cSBruce Richardson sym_op->cipher.data.length = PACKET_LENGTH; 463a9de470cSBruce Richardson 464a9de470cSBruce Richardson /* Fill in event info and update event_ptr with rte_crypto_op */ 465a9de470cSBruce Richardson memset(&ev, 0, sizeof(ev)); 466a9de470cSBruce Richardson ev.queue_id = TEST_CRYPTO_EV_QUEUE_ID; 467a9de470cSBruce Richardson ev.sched_type = RTE_SCHED_TYPE_ATOMIC; 468a9de470cSBruce Richardson ev.flow_id = 0xAABB; 469a9de470cSBruce Richardson ev.event_ptr = op; 470a9de470cSBruce Richardson 471a9de470cSBruce Richardson ret = send_recv_ev(&ev); 472a9de470cSBruce Richardson TEST_ASSERT_SUCCESS(ret, "Failed to send/receive event to " 473a9de470cSBruce Richardson "crypto adapter\n"); 474a9de470cSBruce Richardson 475a9de470cSBruce Richardson test_crypto_adapter_stats(); 476a9de470cSBruce Richardson 477a9de470cSBruce Richardson return TEST_SUCCESS; 478a9de470cSBruce Richardson } 479a9de470cSBruce Richardson 480a9de470cSBruce Richardson static int 481a9de470cSBruce Richardson map_adapter_service_core(void) 482a9de470cSBruce Richardson { 483a9de470cSBruce Richardson uint32_t adapter_service_id; 484a9de470cSBruce Richardson int ret; 485a9de470cSBruce Richardson 486a9de470cSBruce Richardson if (rte_event_crypto_adapter_service_id_get(TEST_ADAPTER_ID, 487a9de470cSBruce Richardson &adapter_service_id) == 0) { 488a9de470cSBruce Richardson uint32_t core_list[NUM_CORES]; 489a9de470cSBruce Richardson 490a9de470cSBruce Richardson ret = rte_service_lcore_list(core_list, NUM_CORES); 491a9de470cSBruce Richardson TEST_ASSERT(ret >= 0, "Failed to get service core list!"); 492a9de470cSBruce Richardson 493a9de470cSBruce Richardson if (core_list[0] != slcore_id) { 494a9de470cSBruce Richardson TEST_ASSERT_SUCCESS(rte_service_lcore_add(slcore_id), 495a9de470cSBruce Richardson "Failed to add service core"); 496a9de470cSBruce Richardson TEST_ASSERT_SUCCESS(rte_service_lcore_start(slcore_id), 497a9de470cSBruce Richardson "Failed to start service core"); 498a9de470cSBruce Richardson } 499a9de470cSBruce Richardson 500a9de470cSBruce Richardson TEST_ASSERT_SUCCESS(rte_service_map_lcore_set( 501a9de470cSBruce Richardson adapter_service_id, slcore_id, 1), 502a9de470cSBruce Richardson "Failed to map adapter service"); 503a9de470cSBruce Richardson } 504a9de470cSBruce Richardson 505a9de470cSBruce Richardson return TEST_SUCCESS; 506a9de470cSBruce Richardson } 507a9de470cSBruce Richardson 508a9de470cSBruce Richardson static int 509a9de470cSBruce Richardson test_sessionless_with_op_forward_mode(void) 510a9de470cSBruce Richardson { 511a9de470cSBruce Richardson uint32_t cap; 512a9de470cSBruce Richardson int ret; 513a9de470cSBruce Richardson 51445eb85e9SAnkur Dwivedi ret = rte_event_crypto_adapter_caps_get(evdev, TEST_CDEV_ID, &cap); 515a9de470cSBruce Richardson TEST_ASSERT_SUCCESS(ret, "Failed to get adapter capabilities\n"); 516a9de470cSBruce Richardson 517aa026482SHemant Agrawal if (!(cap & RTE_EVENT_CRYPTO_ADAPTER_CAP_INTERNAL_PORT_OP_FWD) && 518aa026482SHemant Agrawal !(cap & RTE_EVENT_CRYPTO_ADAPTER_CAP_INTERNAL_PORT_OP_NEW)) 519a9de470cSBruce Richardson map_adapter_service_core(); 5206f238932SHemant Agrawal else { 5216f238932SHemant Agrawal if (!(cap & RTE_EVENT_CRYPTO_ADAPTER_CAP_INTERNAL_PORT_OP_FWD)) 5226f238932SHemant Agrawal return TEST_SKIPPED; 5236f238932SHemant Agrawal } 524a9de470cSBruce Richardson 525a9de470cSBruce Richardson TEST_ASSERT_SUCCESS(rte_event_crypto_adapter_start(TEST_ADAPTER_ID), 526a9de470cSBruce Richardson "Failed to start event crypto adapter"); 527a9de470cSBruce Richardson 528a9de470cSBruce Richardson ret = test_op_forward_mode(1); 529a9de470cSBruce Richardson TEST_ASSERT_SUCCESS(ret, "Sessionless - FORWARD mode test failed\n"); 530a9de470cSBruce Richardson return TEST_SUCCESS; 531a9de470cSBruce Richardson } 532a9de470cSBruce Richardson 533a9de470cSBruce Richardson static int 534a9de470cSBruce Richardson test_session_with_op_forward_mode(void) 535a9de470cSBruce Richardson { 536a9de470cSBruce Richardson uint32_t cap; 537a9de470cSBruce Richardson int ret; 538a9de470cSBruce Richardson 53945eb85e9SAnkur Dwivedi ret = rte_event_crypto_adapter_caps_get(evdev, TEST_CDEV_ID, &cap); 540a9de470cSBruce Richardson TEST_ASSERT_SUCCESS(ret, "Failed to get adapter capabilities\n"); 541a9de470cSBruce Richardson 542aa026482SHemant Agrawal if (!(cap & RTE_EVENT_CRYPTO_ADAPTER_CAP_INTERNAL_PORT_OP_FWD) && 543aa026482SHemant Agrawal !(cap & RTE_EVENT_CRYPTO_ADAPTER_CAP_INTERNAL_PORT_OP_NEW)) 544a9de470cSBruce Richardson map_adapter_service_core(); 5456f238932SHemant Agrawal else { 5466f238932SHemant Agrawal if (!(cap & RTE_EVENT_CRYPTO_ADAPTER_CAP_INTERNAL_PORT_OP_FWD)) 5476f238932SHemant Agrawal return TEST_SKIPPED; 5486f238932SHemant Agrawal } 549a9de470cSBruce Richardson 550a9de470cSBruce Richardson TEST_ASSERT_SUCCESS(rte_event_crypto_adapter_start(TEST_ADAPTER_ID 551a9de470cSBruce Richardson ), "Failed to start event crypto adapter"); 552a9de470cSBruce Richardson 553a9de470cSBruce Richardson ret = test_op_forward_mode(0); 554a9de470cSBruce Richardson TEST_ASSERT_SUCCESS(ret, "Session based - FORWARD mode test failed\n"); 555a9de470cSBruce Richardson return TEST_SUCCESS; 556a9de470cSBruce Richardson } 557a9de470cSBruce Richardson 558a9de470cSBruce Richardson static int 559647a788dSAkhil Goyal test_asym_op_forward_mode(uint8_t session_less) 560647a788dSAkhil Goyal { 561647a788dSAkhil Goyal const struct rte_cryptodev_asymmetric_xform_capability *capability; 562647a788dSAkhil Goyal struct rte_cryptodev_asym_capability_idx cap_idx; 563647a788dSAkhil Goyal struct rte_crypto_asym_xform xform_tc; 564647a788dSAkhil Goyal union rte_event_crypto_metadata m_data; 565647a788dSAkhil Goyal struct rte_cryptodev_info dev_info; 566647a788dSAkhil Goyal struct rte_crypto_asym_op *asym_op; 567647a788dSAkhil Goyal struct rte_crypto_op *op; 568647a788dSAkhil Goyal uint8_t input[4096] = {0}; 569647a788dSAkhil Goyal uint8_t *result = NULL; 570647a788dSAkhil Goyal struct rte_event ev; 571647a788dSAkhil Goyal void *sess = NULL; 572647a788dSAkhil Goyal uint32_t cap; 573647a788dSAkhil Goyal int ret; 574647a788dSAkhil Goyal 575647a788dSAkhil Goyal memset(&m_data, 0, sizeof(m_data)); 576647a788dSAkhil Goyal 577647a788dSAkhil Goyal rte_cryptodev_info_get(TEST_CDEV_ID, &dev_info); 578647a788dSAkhil Goyal if (session_less && !(dev_info.feature_flags & 579647a788dSAkhil Goyal RTE_CRYPTODEV_FF_ASYM_SESSIONLESS)) { 580647a788dSAkhil Goyal RTE_LOG(INFO, USER1, 581647a788dSAkhil Goyal "Device doesn't support Asym sessionless ops. Test Skipped\n"); 582647a788dSAkhil Goyal return TEST_SKIPPED; 583647a788dSAkhil Goyal } 584647a788dSAkhil Goyal /* Setup Cipher Parameters */ 585647a788dSAkhil Goyal xform_tc.next = NULL; 586647a788dSAkhil Goyal xform_tc.xform_type = RTE_CRYPTO_ASYM_XFORM_MODEX; 587647a788dSAkhil Goyal cap_idx.type = xform_tc.xform_type; 588647a788dSAkhil Goyal capability = rte_cryptodev_asym_capability_get(TEST_CDEV_ID, &cap_idx); 589647a788dSAkhil Goyal 590647a788dSAkhil Goyal if (capability == NULL) { 591647a788dSAkhil Goyal RTE_LOG(INFO, USER1, 592647a788dSAkhil Goyal "Device doesn't support MODEX. Test Skipped\n"); 593647a788dSAkhil Goyal return TEST_SKIPPED; 594647a788dSAkhil Goyal } 595647a788dSAkhil Goyal 596647a788dSAkhil Goyal op = rte_crypto_op_alloc(params.asym_op_mpool, 597647a788dSAkhil Goyal RTE_CRYPTO_OP_TYPE_ASYMMETRIC); 598647a788dSAkhil Goyal TEST_ASSERT_NOT_NULL(op, 599647a788dSAkhil Goyal "Failed to allocate asymmetric crypto operation struct\n"); 600647a788dSAkhil Goyal 601647a788dSAkhil Goyal asym_op = op->asym; 602647a788dSAkhil Goyal 603647a788dSAkhil Goyal result = rte_zmalloc(NULL, modex_test_case.result_len, 0); 604647a788dSAkhil Goyal xform_tc.modex.modulus.data = modex_test_case.modulus.data; 605647a788dSAkhil Goyal xform_tc.modex.modulus.length = modex_test_case.modulus.len; 606647a788dSAkhil Goyal xform_tc.modex.exponent.data = modex_test_case.exponent.data; 607647a788dSAkhil Goyal xform_tc.modex.exponent.length = modex_test_case.exponent.len; 608647a788dSAkhil Goyal memcpy(input, modex_test_case.base.data, 609647a788dSAkhil Goyal modex_test_case.base.len); 610647a788dSAkhil Goyal asym_op->modex.base.data = input; 611647a788dSAkhil Goyal asym_op->modex.base.length = modex_test_case.base.len; 612647a788dSAkhil Goyal asym_op->modex.result.data = result; 613647a788dSAkhil Goyal asym_op->modex.result.length = modex_test_case.result_len; 614647a788dSAkhil Goyal if (rte_cryptodev_asym_xform_capability_check_modlen(capability, 615647a788dSAkhil Goyal xform_tc.modex.modulus.length)) { 616647a788dSAkhil Goyal RTE_LOG(INFO, USER1, 617647a788dSAkhil Goyal "line %u FAILED: %s", __LINE__, 618647a788dSAkhil Goyal "Invalid MODULUS length specified"); 619647a788dSAkhil Goyal return TEST_FAILED; 620647a788dSAkhil Goyal } 621647a788dSAkhil Goyal 622647a788dSAkhil Goyal if (!session_less) { 623647a788dSAkhil Goyal /* Create Crypto session*/ 624647a788dSAkhil Goyal ret = rte_cryptodev_asym_session_create(TEST_CDEV_ID, 625647a788dSAkhil Goyal &xform_tc, params.asym_sess_mpool, &sess); 626647a788dSAkhil Goyal TEST_ASSERT_SUCCESS(ret, "Failed to init session\n"); 627647a788dSAkhil Goyal 628647a788dSAkhil Goyal ret = rte_event_crypto_adapter_caps_get(evdev, TEST_CDEV_ID, 629647a788dSAkhil Goyal &cap); 630647a788dSAkhil Goyal TEST_ASSERT_SUCCESS(ret, "Failed to get adapter capabilities\n"); 631647a788dSAkhil Goyal 632647a788dSAkhil Goyal if (cap & RTE_EVENT_CRYPTO_ADAPTER_CAP_SESSION_PRIVATE_DATA) { 633647a788dSAkhil Goyal /* Fill in private user data information */ 634647a788dSAkhil Goyal m_data.request_info.cdev_id = request_info.cdev_id; 635647a788dSAkhil Goyal m_data.request_info.queue_pair_id = 636647a788dSAkhil Goyal request_info.queue_pair_id; 637647a788dSAkhil Goyal m_data.response_info.event = response_info.event; 638647a788dSAkhil Goyal rte_cryptodev_session_event_mdata_set(TEST_CDEV_ID, 639647a788dSAkhil Goyal sess, RTE_CRYPTO_OP_TYPE_ASYMMETRIC, 640647a788dSAkhil Goyal RTE_CRYPTO_OP_WITH_SESSION, 641647a788dSAkhil Goyal &m_data, sizeof(m_data)); 642647a788dSAkhil Goyal } 643647a788dSAkhil Goyal 644647a788dSAkhil Goyal rte_crypto_op_attach_asym_session(op, sess); 645647a788dSAkhil Goyal } else { 646647a788dSAkhil Goyal op->sess_type = RTE_CRYPTO_OP_SESSIONLESS; 647647a788dSAkhil Goyal asym_op->xform = &xform_tc; 648647a788dSAkhil Goyal op->private_data_offset = (sizeof(struct rte_crypto_op) + 649647a788dSAkhil Goyal sizeof(struct rte_crypto_asym_op) + 650647a788dSAkhil Goyal DEFAULT_NUM_XFORMS * 651647a788dSAkhil Goyal sizeof(struct rte_crypto_asym_xform)); 652647a788dSAkhil Goyal /* Fill in private data information */ 653647a788dSAkhil Goyal m_data.request_info.cdev_id = request_info.cdev_id; 654647a788dSAkhil Goyal m_data.request_info.queue_pair_id = request_info.queue_pair_id; 655647a788dSAkhil Goyal m_data.response_info.event = response_info.event; 656647a788dSAkhil Goyal rte_memcpy((uint8_t *)op + op->private_data_offset, 657647a788dSAkhil Goyal &m_data, sizeof(m_data)); 658647a788dSAkhil Goyal } 659647a788dSAkhil Goyal /* Fill in event info and update event_ptr with rte_crypto_op */ 660647a788dSAkhil Goyal memset(&ev, 0, sizeof(ev)); 661647a788dSAkhil Goyal ev.queue_id = TEST_CRYPTO_EV_QUEUE_ID; 662647a788dSAkhil Goyal ev.sched_type = RTE_SCHED_TYPE_ATOMIC; 663647a788dSAkhil Goyal ev.flow_id = 0xAABB; 664647a788dSAkhil Goyal ev.event_ptr = op; 665647a788dSAkhil Goyal 666647a788dSAkhil Goyal ret = send_recv_ev(&ev); 667647a788dSAkhil Goyal TEST_ASSERT_SUCCESS(ret, "Failed to send/receive event to " 668647a788dSAkhil Goyal "crypto adapter\n"); 669647a788dSAkhil Goyal 670647a788dSAkhil Goyal test_crypto_adapter_stats(); 671647a788dSAkhil Goyal 672647a788dSAkhil Goyal return TEST_SUCCESS; 673647a788dSAkhil Goyal } 674647a788dSAkhil Goyal 675647a788dSAkhil Goyal 676647a788dSAkhil Goyal static int 677647a788dSAkhil Goyal test_asym_sessionless_with_op_forward_mode(void) 678647a788dSAkhil Goyal { 679647a788dSAkhil Goyal uint32_t cap; 680647a788dSAkhil Goyal int ret; 681647a788dSAkhil Goyal 682647a788dSAkhil Goyal ret = rte_event_crypto_adapter_caps_get(evdev, TEST_CDEV_ID, &cap); 683647a788dSAkhil Goyal TEST_ASSERT_SUCCESS(ret, "Failed to get adapter capabilities\n"); 684647a788dSAkhil Goyal 685647a788dSAkhil Goyal if (!(cap & RTE_EVENT_CRYPTO_ADAPTER_CAP_INTERNAL_PORT_OP_FWD) && 686647a788dSAkhil Goyal !(cap & RTE_EVENT_CRYPTO_ADAPTER_CAP_INTERNAL_PORT_OP_NEW)) 687647a788dSAkhil Goyal map_adapter_service_core(); 688647a788dSAkhil Goyal else { 689647a788dSAkhil Goyal if (!(cap & RTE_EVENT_CRYPTO_ADAPTER_CAP_INTERNAL_PORT_OP_FWD)) 690647a788dSAkhil Goyal return TEST_SKIPPED; 691647a788dSAkhil Goyal } 692647a788dSAkhil Goyal 693647a788dSAkhil Goyal TEST_ASSERT_SUCCESS(rte_event_crypto_adapter_start(TEST_ADAPTER_ID), 694647a788dSAkhil Goyal "Failed to start event crypto adapter"); 695647a788dSAkhil Goyal 696647a788dSAkhil Goyal return test_asym_op_forward_mode(1); 697647a788dSAkhil Goyal } 698647a788dSAkhil Goyal 699647a788dSAkhil Goyal static int 700647a788dSAkhil Goyal test_asym_session_with_op_forward_mode(void) 701647a788dSAkhil Goyal { 702647a788dSAkhil Goyal uint32_t cap; 703647a788dSAkhil Goyal int ret; 704647a788dSAkhil Goyal 705647a788dSAkhil Goyal ret = rte_event_crypto_adapter_caps_get(evdev, TEST_CDEV_ID, &cap); 706647a788dSAkhil Goyal TEST_ASSERT_SUCCESS(ret, "Failed to get adapter capabilities\n"); 707647a788dSAkhil Goyal 708647a788dSAkhil Goyal if (!(cap & RTE_EVENT_CRYPTO_ADAPTER_CAP_INTERNAL_PORT_OP_FWD) && 709647a788dSAkhil Goyal !(cap & RTE_EVENT_CRYPTO_ADAPTER_CAP_INTERNAL_PORT_OP_NEW)) 710647a788dSAkhil Goyal map_adapter_service_core(); 711647a788dSAkhil Goyal else { 712647a788dSAkhil Goyal if (!(cap & RTE_EVENT_CRYPTO_ADAPTER_CAP_INTERNAL_PORT_OP_FWD)) 713647a788dSAkhil Goyal return TEST_SKIPPED; 714647a788dSAkhil Goyal } 715647a788dSAkhil Goyal 716647a788dSAkhil Goyal TEST_ASSERT_SUCCESS(rte_event_crypto_adapter_start(TEST_ADAPTER_ID 717647a788dSAkhil Goyal ), "Failed to start event crypto adapter"); 718647a788dSAkhil Goyal 719647a788dSAkhil Goyal return test_asym_op_forward_mode(0); 720647a788dSAkhil Goyal } 721647a788dSAkhil Goyal 722647a788dSAkhil Goyal static int 723a9de470cSBruce Richardson send_op_recv_ev(struct rte_crypto_op *op) 724a9de470cSBruce Richardson { 725a9de470cSBruce Richardson struct rte_crypto_op *recv_op; 726a9de470cSBruce Richardson struct rte_event ev; 727a9de470cSBruce Richardson int ret; 728a9de470cSBruce Richardson 729a9de470cSBruce Richardson ret = rte_cryptodev_enqueue_burst(TEST_CDEV_ID, TEST_CDEV_QP_ID, 730a9de470cSBruce Richardson &op, NUM); 731a9de470cSBruce Richardson TEST_ASSERT_EQUAL(ret, NUM, "Failed to enqueue to cryptodev\n"); 732a9de470cSBruce Richardson memset(&ev, 0, sizeof(ev)); 733a9de470cSBruce Richardson 734a9de470cSBruce Richardson while (rte_event_dequeue_burst(evdev, 735a9de470cSBruce Richardson TEST_APP_PORT_ID, &ev, NUM, 0) == 0) 736a9de470cSBruce Richardson rte_pause(); 737a9de470cSBruce Richardson 738a9de470cSBruce Richardson recv_op = ev.event_ptr; 739647a788dSAkhil Goyal if (recv_op->type == RTE_CRYPTO_OP_TYPE_SYMMETRIC) { 740a9de470cSBruce Richardson #if PKT_TRACE 741a9de470cSBruce Richardson struct rte_mbuf *m = recv_op->sym->m_src; 742a9de470cSBruce Richardson rte_pktmbuf_dump(stdout, m, rte_pktmbuf_pkt_len(m)); 743a9de470cSBruce Richardson #endif 744a9de470cSBruce Richardson rte_pktmbuf_free(recv_op->sym->m_src); 745647a788dSAkhil Goyal } else { 746647a788dSAkhil Goyal uint8_t *data_expected = NULL, *data_received = NULL; 747647a788dSAkhil Goyal uint32_t data_size; 748647a788dSAkhil Goyal 749647a788dSAkhil Goyal data_expected = modex_test_case.reminder.data; 750647a788dSAkhil Goyal data_received = op->asym->modex.result.data; 751647a788dSAkhil Goyal data_size = op->asym->modex.result.length; 752647a788dSAkhil Goyal ret = memcmp(data_expected, data_received, data_size); 753647a788dSAkhil Goyal TEST_ASSERT_EQUAL(ret, 0, 754647a788dSAkhil Goyal "Data mismatch for asym crypto adapter\n"); 755647a788dSAkhil Goyal rte_free(op->asym->modex.result.data); 756647a788dSAkhil Goyal } 757a9de470cSBruce Richardson rte_crypto_op_free(recv_op); 758a9de470cSBruce Richardson 759a9de470cSBruce Richardson return TEST_SUCCESS; 760a9de470cSBruce Richardson } 761a9de470cSBruce Richardson 762a9de470cSBruce Richardson static int 763a9de470cSBruce Richardson test_op_new_mode(uint8_t session_less) 764a9de470cSBruce Richardson { 765a9de470cSBruce Richardson struct rte_crypto_sym_xform cipher_xform; 766a9de470cSBruce Richardson union rte_event_crypto_metadata m_data; 767a9de470cSBruce Richardson struct rte_crypto_sym_op *sym_op; 768a9de470cSBruce Richardson struct rte_crypto_op *op; 769a9de470cSBruce Richardson struct rte_mbuf *m; 770a9de470cSBruce Richardson uint32_t cap; 7712a440d6aSAkhil Goyal void *sess; 772a9de470cSBruce Richardson int ret; 773a9de470cSBruce Richardson 774a9de470cSBruce Richardson memset(&m_data, 0, sizeof(m_data)); 775a9de470cSBruce Richardson 776a9de470cSBruce Richardson m = alloc_fill_mbuf(params.mbuf_pool, text_64B, PACKET_LENGTH, 0); 777a9de470cSBruce Richardson TEST_ASSERT_NOT_NULL(m, "Failed to allocate mbuf!\n"); 778a9de470cSBruce Richardson #if PKT_TRACE 779a9de470cSBruce Richardson rte_pktmbuf_dump(stdout, m, rte_pktmbuf_pkt_len(m)); 780a9de470cSBruce Richardson #endif 781a9de470cSBruce Richardson /* Setup Cipher Parameters */ 782a9de470cSBruce Richardson cipher_xform.type = RTE_CRYPTO_SYM_XFORM_CIPHER; 783a9de470cSBruce Richardson cipher_xform.next = NULL; 78474449375SAbhinandan Gujjar cipher_xform.cipher.algo = RTE_CRYPTO_CIPHER_NULL; 78561ecfb02SAnkur Dwivedi cipher_xform.cipher.op = RTE_CRYPTO_CIPHER_OP_ENCRYPT; 78618d934cbSHemant Agrawal 787a9de470cSBruce Richardson op = rte_crypto_op_alloc(params.op_mpool, 788a9de470cSBruce Richardson RTE_CRYPTO_OP_TYPE_SYMMETRIC); 789a9de470cSBruce Richardson TEST_ASSERT_NOT_NULL(op, "Failed to allocate crypto_op!\n"); 790a9de470cSBruce Richardson 791a9de470cSBruce Richardson sym_op = op->sym; 792a9de470cSBruce Richardson 793a9de470cSBruce Richardson if (!session_less) { 794bdce2564SAkhil Goyal sess = rte_cryptodev_sym_session_create(TEST_CDEV_ID, 795bdce2564SAkhil Goyal &cipher_xform, params.session_mpool); 796a9de470cSBruce Richardson TEST_ASSERT_NOT_NULL(sess, "Session creation failed\n"); 797a9de470cSBruce Richardson 79845eb85e9SAnkur Dwivedi ret = rte_event_crypto_adapter_caps_get(evdev, TEST_CDEV_ID, 79945eb85e9SAnkur Dwivedi &cap); 800a9de470cSBruce Richardson TEST_ASSERT_SUCCESS(ret, "Failed to get adapter capabilities\n"); 801a9de470cSBruce Richardson 802a9de470cSBruce Richardson if (cap & RTE_EVENT_CRYPTO_ADAPTER_CAP_SESSION_PRIVATE_DATA) { 803a9de470cSBruce Richardson /* Fill in private user data information */ 80467c8baecSShijith Thotton m_data.response_info.event = response_info.event; 8054c43055cSAkhil Goyal rte_cryptodev_session_event_mdata_set(TEST_CDEV_ID, 8064c43055cSAkhil Goyal sess, RTE_CRYPTO_OP_TYPE_SYMMETRIC, 8074c43055cSAkhil Goyal RTE_CRYPTO_OP_WITH_SESSION, 808a9de470cSBruce Richardson &m_data, sizeof(m_data)); 809a9de470cSBruce Richardson } 810083a5969SHemant Agrawal 811a9de470cSBruce Richardson rte_crypto_op_attach_sym_session(op, sess); 812a9de470cSBruce Richardson } else { 813a9de470cSBruce Richardson struct rte_crypto_sym_xform *first_xform; 814a9de470cSBruce Richardson 815a9de470cSBruce Richardson rte_crypto_op_sym_xforms_alloc(op, NUM); 816a9de470cSBruce Richardson op->sess_type = RTE_CRYPTO_OP_SESSIONLESS; 817a9de470cSBruce Richardson first_xform = &cipher_xform; 818a9de470cSBruce Richardson sym_op->xform = first_xform; 819b812567eSAbhinandan Gujjar uint32_t len = IV_OFFSET + MAXIMUM_IV_LENGTH; 820a9de470cSBruce Richardson op->private_data_offset = len; 821a9de470cSBruce Richardson /* Fill in private data information */ 82267c8baecSShijith Thotton m_data.response_info.event = response_info.event; 823a9de470cSBruce Richardson rte_memcpy((uint8_t *)op + len, &m_data, sizeof(m_data)); 824a9de470cSBruce Richardson } 825a9de470cSBruce Richardson 826a9de470cSBruce Richardson sym_op->m_src = m; 827a9de470cSBruce Richardson sym_op->cipher.data.offset = 0; 828a9de470cSBruce Richardson sym_op->cipher.data.length = PACKET_LENGTH; 829a9de470cSBruce Richardson 830a9de470cSBruce Richardson ret = send_op_recv_ev(op); 831a9de470cSBruce Richardson TEST_ASSERT_SUCCESS(ret, "Failed to enqueue op to cryptodev\n"); 832a9de470cSBruce Richardson 833a9de470cSBruce Richardson test_crypto_adapter_stats(); 834a9de470cSBruce Richardson 835a9de470cSBruce Richardson return TEST_SUCCESS; 836a9de470cSBruce Richardson } 837a9de470cSBruce Richardson 838a9de470cSBruce Richardson static int 839a9de470cSBruce Richardson test_sessionless_with_op_new_mode(void) 840a9de470cSBruce Richardson { 841a9de470cSBruce Richardson uint32_t cap; 842a9de470cSBruce Richardson int ret; 843a9de470cSBruce Richardson 84445eb85e9SAnkur Dwivedi ret = rte_event_crypto_adapter_caps_get(evdev, TEST_CDEV_ID, &cap); 845a9de470cSBruce Richardson TEST_ASSERT_SUCCESS(ret, "Failed to get adapter capabilities\n"); 846a9de470cSBruce Richardson 847aa026482SHemant Agrawal if (!(cap & RTE_EVENT_CRYPTO_ADAPTER_CAP_INTERNAL_PORT_OP_FWD) && 848a9de470cSBruce Richardson !(cap & RTE_EVENT_CRYPTO_ADAPTER_CAP_INTERNAL_PORT_OP_NEW)) 849a9de470cSBruce Richardson map_adapter_service_core(); 8506f238932SHemant Agrawal else { 8516f238932SHemant Agrawal if (!(cap & RTE_EVENT_CRYPTO_ADAPTER_CAP_INTERNAL_PORT_OP_NEW)) 8526f238932SHemant Agrawal return TEST_SKIPPED; 8536f238932SHemant Agrawal } 854a9de470cSBruce Richardson 855a9de470cSBruce Richardson /* start the event crypto adapter */ 856a9de470cSBruce Richardson TEST_ASSERT_SUCCESS(rte_event_crypto_adapter_start(TEST_ADAPTER_ID), 857a9de470cSBruce Richardson "Failed to start event crypto adapter"); 858a9de470cSBruce Richardson 859a9de470cSBruce Richardson ret = test_op_new_mode(1); 860a9de470cSBruce Richardson TEST_ASSERT_SUCCESS(ret, "Sessionless - NEW mode test failed\n"); 861a9de470cSBruce Richardson return TEST_SUCCESS; 862a9de470cSBruce Richardson } 863a9de470cSBruce Richardson 864a9de470cSBruce Richardson static int 865a9de470cSBruce Richardson test_session_with_op_new_mode(void) 866a9de470cSBruce Richardson { 867a9de470cSBruce Richardson uint32_t cap; 868a9de470cSBruce Richardson int ret; 869a9de470cSBruce Richardson 87045eb85e9SAnkur Dwivedi ret = rte_event_crypto_adapter_caps_get(evdev, TEST_CDEV_ID, &cap); 871a9de470cSBruce Richardson TEST_ASSERT_SUCCESS(ret, "Failed to get adapter capabilities\n"); 872a9de470cSBruce Richardson 873aa026482SHemant Agrawal if (!(cap & RTE_EVENT_CRYPTO_ADAPTER_CAP_INTERNAL_PORT_OP_FWD) && 874a9de470cSBruce Richardson !(cap & RTE_EVENT_CRYPTO_ADAPTER_CAP_INTERNAL_PORT_OP_NEW)) 875a9de470cSBruce Richardson map_adapter_service_core(); 8766f238932SHemant Agrawal else { 8776f238932SHemant Agrawal if (!(cap & RTE_EVENT_CRYPTO_ADAPTER_CAP_INTERNAL_PORT_OP_NEW)) 8786f238932SHemant Agrawal return TEST_SKIPPED; 8796f238932SHemant Agrawal } 880a9de470cSBruce Richardson 881a9de470cSBruce Richardson TEST_ASSERT_SUCCESS(rte_event_crypto_adapter_start(TEST_ADAPTER_ID), 882a9de470cSBruce Richardson "Failed to start event crypto adapter"); 883a9de470cSBruce Richardson 884a9de470cSBruce Richardson ret = test_op_new_mode(0); 885a9de470cSBruce Richardson TEST_ASSERT_SUCCESS(ret, "Session based - NEW mode test failed\n"); 886a9de470cSBruce Richardson return TEST_SUCCESS; 887a9de470cSBruce Richardson } 888a9de470cSBruce Richardson 889a9de470cSBruce Richardson static int 890647a788dSAkhil Goyal test_asym_op_new_mode(uint8_t session_less) 891647a788dSAkhil Goyal { 892647a788dSAkhil Goyal const struct rte_cryptodev_asymmetric_xform_capability *capability; 893647a788dSAkhil Goyal struct rte_cryptodev_asym_capability_idx cap_idx; 894647a788dSAkhil Goyal struct rte_crypto_asym_xform xform_tc; 895647a788dSAkhil Goyal union rte_event_crypto_metadata m_data; 896647a788dSAkhil Goyal struct rte_cryptodev_info dev_info; 897647a788dSAkhil Goyal struct rte_crypto_asym_op *asym_op; 898647a788dSAkhil Goyal struct rte_crypto_op *op; 899647a788dSAkhil Goyal uint8_t input[4096] = {0}; 900647a788dSAkhil Goyal uint8_t *result = NULL; 901647a788dSAkhil Goyal void *sess = NULL; 902647a788dSAkhil Goyal uint32_t cap; 903647a788dSAkhil Goyal int ret; 904647a788dSAkhil Goyal 905647a788dSAkhil Goyal memset(&m_data, 0, sizeof(m_data)); 906647a788dSAkhil Goyal 907647a788dSAkhil Goyal rte_cryptodev_info_get(TEST_CDEV_ID, &dev_info); 908647a788dSAkhil Goyal if (session_less && !(dev_info.feature_flags & 909647a788dSAkhil Goyal RTE_CRYPTODEV_FF_ASYM_SESSIONLESS)) { 910647a788dSAkhil Goyal RTE_LOG(INFO, USER1, 911647a788dSAkhil Goyal "Device doesn't support Asym sessionless ops. Test Skipped\n"); 912647a788dSAkhil Goyal return TEST_SKIPPED; 913647a788dSAkhil Goyal } 914647a788dSAkhil Goyal /* Setup Cipher Parameters */ 915647a788dSAkhil Goyal xform_tc.next = NULL; 916647a788dSAkhil Goyal xform_tc.xform_type = RTE_CRYPTO_ASYM_XFORM_MODEX; 917647a788dSAkhil Goyal cap_idx.type = xform_tc.xform_type; 918647a788dSAkhil Goyal capability = rte_cryptodev_asym_capability_get(TEST_CDEV_ID, &cap_idx); 919647a788dSAkhil Goyal 920647a788dSAkhil Goyal if (capability == NULL) { 921647a788dSAkhil Goyal RTE_LOG(INFO, USER1, 922647a788dSAkhil Goyal "Device doesn't support MODEX. Test Skipped\n"); 923647a788dSAkhil Goyal return TEST_SKIPPED; 924647a788dSAkhil Goyal } 925647a788dSAkhil Goyal 926647a788dSAkhil Goyal op = rte_crypto_op_alloc(params.asym_op_mpool, 927647a788dSAkhil Goyal RTE_CRYPTO_OP_TYPE_ASYMMETRIC); 928647a788dSAkhil Goyal TEST_ASSERT_NOT_NULL(op, "Failed to allocate asym crypto_op!\n"); 929647a788dSAkhil Goyal 930647a788dSAkhil Goyal asym_op = op->asym; 931647a788dSAkhil Goyal 932647a788dSAkhil Goyal result = rte_zmalloc(NULL, modex_test_case.result_len, 0); 933647a788dSAkhil Goyal xform_tc.modex.modulus.data = modex_test_case.modulus.data; 934647a788dSAkhil Goyal xform_tc.modex.modulus.length = modex_test_case.modulus.len; 935647a788dSAkhil Goyal xform_tc.modex.exponent.data = modex_test_case.exponent.data; 936647a788dSAkhil Goyal xform_tc.modex.exponent.length = modex_test_case.exponent.len; 937647a788dSAkhil Goyal memcpy(input, modex_test_case.base.data, 938647a788dSAkhil Goyal modex_test_case.base.len); 939647a788dSAkhil Goyal asym_op->modex.base.data = input; 940647a788dSAkhil Goyal asym_op->modex.base.length = modex_test_case.base.len; 941647a788dSAkhil Goyal asym_op->modex.result.data = result; 942647a788dSAkhil Goyal asym_op->modex.result.length = modex_test_case.result_len; 943647a788dSAkhil Goyal if (rte_cryptodev_asym_xform_capability_check_modlen(capability, 944647a788dSAkhil Goyal xform_tc.modex.modulus.length)) { 945647a788dSAkhil Goyal RTE_LOG(INFO, USER1, 946647a788dSAkhil Goyal "line %u FAILED: %s", __LINE__, 947647a788dSAkhil Goyal "Invalid MODULUS length specified"); 948647a788dSAkhil Goyal return TEST_FAILED; 949647a788dSAkhil Goyal } 950647a788dSAkhil Goyal 951647a788dSAkhil Goyal if (!session_less) { 952647a788dSAkhil Goyal ret = rte_cryptodev_asym_session_create(TEST_CDEV_ID, 953647a788dSAkhil Goyal &xform_tc, params.asym_sess_mpool, &sess); 954647a788dSAkhil Goyal TEST_ASSERT_NOT_NULL(sess, "Session creation failed\n"); 955647a788dSAkhil Goyal TEST_ASSERT_SUCCESS(ret, "Failed to init session\n"); 956647a788dSAkhil Goyal 957647a788dSAkhil Goyal ret = rte_event_crypto_adapter_caps_get(evdev, TEST_CDEV_ID, 958647a788dSAkhil Goyal &cap); 959647a788dSAkhil Goyal TEST_ASSERT_SUCCESS(ret, "Failed to get adapter capabilities\n"); 960647a788dSAkhil Goyal 961647a788dSAkhil Goyal if (cap & RTE_EVENT_CRYPTO_ADAPTER_CAP_SESSION_PRIVATE_DATA) { 962647a788dSAkhil Goyal /* Fill in private user data information */ 963647a788dSAkhil Goyal m_data.response_info.event = response_info.event; 964647a788dSAkhil Goyal rte_cryptodev_session_event_mdata_set(TEST_CDEV_ID, 965647a788dSAkhil Goyal sess, RTE_CRYPTO_OP_TYPE_ASYMMETRIC, 966647a788dSAkhil Goyal RTE_CRYPTO_OP_WITH_SESSION, 967647a788dSAkhil Goyal &m_data, sizeof(m_data)); 968647a788dSAkhil Goyal } 969647a788dSAkhil Goyal 970647a788dSAkhil Goyal rte_crypto_op_attach_asym_session(op, sess); 971647a788dSAkhil Goyal } else { 972647a788dSAkhil Goyal op->sess_type = RTE_CRYPTO_OP_SESSIONLESS; 973647a788dSAkhil Goyal asym_op->xform = &xform_tc; 974647a788dSAkhil Goyal op->private_data_offset = (sizeof(struct rte_crypto_op) + 975647a788dSAkhil Goyal sizeof(struct rte_crypto_asym_op) + 976647a788dSAkhil Goyal DEFAULT_NUM_XFORMS * 977647a788dSAkhil Goyal sizeof(struct rte_crypto_asym_xform)); 978647a788dSAkhil Goyal /* Fill in private data information */ 979647a788dSAkhil Goyal m_data.response_info.event = response_info.event; 980647a788dSAkhil Goyal rte_memcpy((uint8_t *)op + op->private_data_offset, 981647a788dSAkhil Goyal &m_data, sizeof(m_data)); 982647a788dSAkhil Goyal } 983647a788dSAkhil Goyal 984647a788dSAkhil Goyal ret = send_op_recv_ev(op); 985647a788dSAkhil Goyal TEST_ASSERT_SUCCESS(ret, "Failed to enqueue op to cryptodev\n"); 986647a788dSAkhil Goyal 987647a788dSAkhil Goyal test_crypto_adapter_stats(); 988647a788dSAkhil Goyal 989647a788dSAkhil Goyal return TEST_SUCCESS; 990647a788dSAkhil Goyal } 991647a788dSAkhil Goyal 992647a788dSAkhil Goyal static int 993647a788dSAkhil Goyal test_asym_sessionless_with_op_new_mode(void) 994647a788dSAkhil Goyal { 995647a788dSAkhil Goyal uint32_t cap; 996647a788dSAkhil Goyal int ret; 997647a788dSAkhil Goyal 998647a788dSAkhil Goyal ret = rte_event_crypto_adapter_caps_get(evdev, TEST_CDEV_ID, &cap); 999647a788dSAkhil Goyal TEST_ASSERT_SUCCESS(ret, "Failed to get adapter capabilities\n"); 1000647a788dSAkhil Goyal 1001647a788dSAkhil Goyal if (!(cap & RTE_EVENT_CRYPTO_ADAPTER_CAP_INTERNAL_PORT_OP_FWD) && 1002647a788dSAkhil Goyal !(cap & RTE_EVENT_CRYPTO_ADAPTER_CAP_INTERNAL_PORT_OP_NEW)) 1003647a788dSAkhil Goyal map_adapter_service_core(); 1004647a788dSAkhil Goyal else { 1005647a788dSAkhil Goyal if (!(cap & RTE_EVENT_CRYPTO_ADAPTER_CAP_INTERNAL_PORT_OP_NEW)) 1006647a788dSAkhil Goyal return TEST_SKIPPED; 1007647a788dSAkhil Goyal } 1008647a788dSAkhil Goyal 1009647a788dSAkhil Goyal /* start the event crypto adapter */ 1010647a788dSAkhil Goyal TEST_ASSERT_SUCCESS(rte_event_crypto_adapter_start(TEST_ADAPTER_ID), 1011647a788dSAkhil Goyal "Failed to start event crypto adapter"); 1012647a788dSAkhil Goyal 1013647a788dSAkhil Goyal return test_asym_op_new_mode(1); 1014647a788dSAkhil Goyal } 1015647a788dSAkhil Goyal 1016647a788dSAkhil Goyal static int 1017647a788dSAkhil Goyal test_asym_session_with_op_new_mode(void) 1018647a788dSAkhil Goyal { 1019647a788dSAkhil Goyal uint32_t cap; 1020647a788dSAkhil Goyal int ret; 1021647a788dSAkhil Goyal 1022647a788dSAkhil Goyal ret = rte_event_crypto_adapter_caps_get(evdev, TEST_CDEV_ID, &cap); 1023647a788dSAkhil Goyal TEST_ASSERT_SUCCESS(ret, "Failed to get adapter capabilities\n"); 1024647a788dSAkhil Goyal 1025647a788dSAkhil Goyal if (!(cap & RTE_EVENT_CRYPTO_ADAPTER_CAP_INTERNAL_PORT_OP_FWD) && 1026647a788dSAkhil Goyal !(cap & RTE_EVENT_CRYPTO_ADAPTER_CAP_INTERNAL_PORT_OP_NEW)) 1027647a788dSAkhil Goyal map_adapter_service_core(); 1028647a788dSAkhil Goyal else { 1029647a788dSAkhil Goyal if (!(cap & RTE_EVENT_CRYPTO_ADAPTER_CAP_INTERNAL_PORT_OP_NEW)) 1030647a788dSAkhil Goyal return TEST_SKIPPED; 1031647a788dSAkhil Goyal } 1032647a788dSAkhil Goyal 1033647a788dSAkhil Goyal TEST_ASSERT_SUCCESS(rte_event_crypto_adapter_start(TEST_ADAPTER_ID), 1034647a788dSAkhil Goyal "Failed to start event crypto adapter"); 1035647a788dSAkhil Goyal 1036647a788dSAkhil Goyal return test_asym_op_new_mode(0); 1037647a788dSAkhil Goyal } 1038647a788dSAkhil Goyal 1039647a788dSAkhil Goyal static int 1040a9de470cSBruce Richardson configure_cryptodev(void) 1041a9de470cSBruce Richardson { 1042647a788dSAkhil Goyal const struct rte_cryptodev_capabilities *capability; 1043a9de470cSBruce Richardson struct rte_cryptodev_qp_conf qp_conf; 1044a9de470cSBruce Richardson struct rte_cryptodev_config conf; 1045a9de470cSBruce Richardson struct rte_cryptodev_info info; 1046a9de470cSBruce Richardson unsigned int session_size; 1047647a788dSAkhil Goyal unsigned int i = 0; 1048a9de470cSBruce Richardson uint8_t nb_devs; 1049a9de470cSBruce Richardson int ret; 1050a9de470cSBruce Richardson 1051647a788dSAkhil Goyal 1052a9de470cSBruce Richardson params.mbuf_pool = rte_pktmbuf_pool_create( 1053a9de470cSBruce Richardson "CRYPTO_ADAPTER_MBUFPOOL", 1054a9de470cSBruce Richardson NUM_MBUFS, MBUF_CACHE_SIZE, 0, MBUF_SIZE, 1055a9de470cSBruce Richardson rte_socket_id()); 1056a9de470cSBruce Richardson if (params.mbuf_pool == NULL) { 1057a9de470cSBruce Richardson RTE_LOG(ERR, USER1, "Can't create CRYPTO_MBUFPOOL\n"); 1058a9de470cSBruce Richardson return TEST_FAILED; 1059a9de470cSBruce Richardson } 1060a9de470cSBruce Richardson 1061a9de470cSBruce Richardson params.op_mpool = rte_crypto_op_pool_create( 1062a9de470cSBruce Richardson "EVENT_CRYPTO_SYM_OP_POOL", 1063a9de470cSBruce Richardson RTE_CRYPTO_OP_TYPE_SYMMETRIC, 1064a9de470cSBruce Richardson NUM_MBUFS, MBUF_CACHE_SIZE, 1065a9de470cSBruce Richardson DEFAULT_NUM_XFORMS * 1066a9de470cSBruce Richardson sizeof(struct rte_crypto_sym_xform) + 1067b812567eSAbhinandan Gujjar MAXIMUM_IV_LENGTH + 1068b812567eSAbhinandan Gujjar sizeof(union rte_event_crypto_metadata), 1069a9de470cSBruce Richardson rte_socket_id()); 1070a9de470cSBruce Richardson if (params.op_mpool == NULL) { 1071a9de470cSBruce Richardson RTE_LOG(ERR, USER1, "Can't create CRYPTO_OP_POOL\n"); 1072a9de470cSBruce Richardson return TEST_FAILED; 1073a9de470cSBruce Richardson } 1074a9de470cSBruce Richardson 1075cf57682eSAakash Sasidharan 1076cf57682eSAakash Sasidharan nb_devs = rte_cryptodev_count(); 1077a9de470cSBruce Richardson if (!nb_devs) { 1078cf57682eSAakash Sasidharan /* Create a NULL crypto device */ 1079a9de470cSBruce Richardson ret = rte_vdev_init( 1080a9de470cSBruce Richardson RTE_STR(CRYPTODEV_NAME_NULL_PMD), NULL); 1081a9de470cSBruce Richardson 1082a9de470cSBruce Richardson TEST_ASSERT(ret == 0, "Failed to create pmd:%s instance\n", 1083a9de470cSBruce Richardson RTE_STR(CRYPTODEV_NAME_NULL_PMD)); 1084a9de470cSBruce Richardson } 1085a9de470cSBruce Richardson 1086a9de470cSBruce Richardson nb_devs = rte_cryptodev_count(); 1087a9de470cSBruce Richardson if (!nb_devs) { 1088a9de470cSBruce Richardson RTE_LOG(ERR, USER1, "No crypto devices found!\n"); 1089a9de470cSBruce Richardson return TEST_FAILED; 1090a9de470cSBruce Richardson } 1091a9de470cSBruce Richardson 1092a9de470cSBruce Richardson /* 1093a9de470cSBruce Richardson * Create mempool with maximum number of sessions * 2, 1094a9de470cSBruce Richardson * to include the session headers & private data 1095a9de470cSBruce Richardson */ 1096a9de470cSBruce Richardson session_size = rte_cryptodev_sym_get_private_session_size(TEST_CDEV_ID); 1097a9de470cSBruce Richardson session_size += sizeof(union rte_event_crypto_metadata); 1098a9de470cSBruce Richardson 1099a9de470cSBruce Richardson params.session_mpool = rte_cryptodev_sym_session_pool_create( 1100a9de470cSBruce Richardson "CRYPTO_ADAPTER_SESSION_MP", 1101bdce2564SAkhil Goyal MAX_NB_SESSIONS, session_size, 0, 110274449375SAbhinandan Gujjar sizeof(union rte_event_crypto_metadata), 110374449375SAbhinandan Gujjar SOCKET_ID_ANY); 1104a9de470cSBruce Richardson TEST_ASSERT_NOT_NULL(params.session_mpool, 1105a9de470cSBruce Richardson "session mempool allocation failed\n"); 1106a9de470cSBruce Richardson 1107a9de470cSBruce Richardson rte_cryptodev_info_get(TEST_CDEV_ID, &info); 1108647a788dSAkhil Goyal 1109647a788dSAkhil Goyal while ((capability = &info.capabilities[i++])->op != 1110647a788dSAkhil Goyal RTE_CRYPTO_OP_TYPE_UNDEFINED) { 1111647a788dSAkhil Goyal if (capability->op == RTE_CRYPTO_OP_TYPE_ASYMMETRIC) { 1112647a788dSAkhil Goyal params.asym_op_mpool = rte_crypto_op_pool_create( 1113647a788dSAkhil Goyal "EVENT_CRYPTO_ASYM_OP_POOL", 1114647a788dSAkhil Goyal RTE_CRYPTO_OP_TYPE_ASYMMETRIC, 1115647a788dSAkhil Goyal NUM_MBUFS, MBUF_CACHE_SIZE, 1116647a788dSAkhil Goyal (DEFAULT_NUM_XFORMS * 1117647a788dSAkhil Goyal sizeof(struct rte_crypto_asym_xform)) + 1118647a788dSAkhil Goyal sizeof(union rte_event_crypto_metadata), 1119647a788dSAkhil Goyal rte_socket_id()); 1120647a788dSAkhil Goyal TEST_ASSERT_NOT_NULL(params.asym_op_mpool, 1121647a788dSAkhil Goyal "Can't create CRYPTO_ASYM_OP_POOL\n"); 1122647a788dSAkhil Goyal 1123647a788dSAkhil Goyal params.asym_sess_mpool = 1124647a788dSAkhil Goyal rte_cryptodev_asym_session_pool_create( 1125647a788dSAkhil Goyal "CRYPTO_AD_ASYM_SESS_MP", 1126647a788dSAkhil Goyal MAX_NB_SESSIONS, 0, 1127647a788dSAkhil Goyal sizeof(union rte_event_crypto_metadata), 1128647a788dSAkhil Goyal SOCKET_ID_ANY); 1129647a788dSAkhil Goyal TEST_ASSERT_NOT_NULL(params.asym_sess_mpool, 1130647a788dSAkhil Goyal "asym session mempool allocation failed\n"); 1131647a788dSAkhil Goyal break; 1132647a788dSAkhil Goyal } 1133647a788dSAkhil Goyal } 1134647a788dSAkhil Goyal 1135a9de470cSBruce Richardson conf.nb_queue_pairs = info.max_nb_queue_pairs; 1136a9de470cSBruce Richardson conf.socket_id = SOCKET_ID_ANY; 1137c9030ae3SAnoob Joseph conf.ff_disable = RTE_CRYPTODEV_FF_SECURITY; 1138a9de470cSBruce Richardson 1139a9de470cSBruce Richardson TEST_ASSERT_SUCCESS(rte_cryptodev_configure(TEST_CDEV_ID, &conf), 1140a9de470cSBruce Richardson "Failed to configure cryptodev %u with %u qps\n", 1141a9de470cSBruce Richardson TEST_CDEV_ID, conf.nb_queue_pairs); 1142a9de470cSBruce Richardson 1143a9de470cSBruce Richardson qp_conf.nb_descriptors = DEFAULT_NUM_OPS_INFLIGHT; 1144a9de470cSBruce Richardson qp_conf.mp_session = params.session_mpool; 1145a9de470cSBruce Richardson 1146a9de470cSBruce Richardson TEST_ASSERT_SUCCESS(rte_cryptodev_queue_pair_setup( 1147a9de470cSBruce Richardson TEST_CDEV_ID, TEST_CDEV_QP_ID, &qp_conf, 1148a9de470cSBruce Richardson rte_cryptodev_socket_id(TEST_CDEV_ID)), 1149a9de470cSBruce Richardson "Failed to setup queue pair %u on cryptodev %u\n", 1150a9de470cSBruce Richardson TEST_CDEV_QP_ID, TEST_CDEV_ID); 1151a9de470cSBruce Richardson 1152a9de470cSBruce Richardson return TEST_SUCCESS; 1153a9de470cSBruce Richardson } 1154a9de470cSBruce Richardson 1155a9de470cSBruce Richardson static inline void 1156a9de470cSBruce Richardson evdev_set_conf_values(struct rte_event_dev_config *dev_conf, 1157*8c08b10dSStephen Hemminger const struct rte_event_dev_info *info) 1158a9de470cSBruce Richardson { 1159*8c08b10dSStephen Hemminger *dev_conf = (struct rte_event_dev_config) { 1160*8c08b10dSStephen Hemminger .dequeue_timeout_ns = info->min_dequeue_timeout_ns, 1161*8c08b10dSStephen Hemminger .nb_event_ports = NB_TEST_PORTS, 1162*8c08b10dSStephen Hemminger .nb_event_queues = NB_TEST_QUEUES, 1163*8c08b10dSStephen Hemminger .nb_event_queue_flows = info->max_event_queue_flows, 1164*8c08b10dSStephen Hemminger .nb_event_port_dequeue_depth = info->max_event_port_dequeue_depth, 1165*8c08b10dSStephen Hemminger .nb_event_port_enqueue_depth = info->max_event_port_enqueue_depth, 1166*8c08b10dSStephen Hemminger .nb_events_limit = info->max_num_events, 1167*8c08b10dSStephen Hemminger }; 1168a9de470cSBruce Richardson } 1169a9de470cSBruce Richardson 1170a9de470cSBruce Richardson static int 1171a9de470cSBruce Richardson configure_eventdev(void) 1172a9de470cSBruce Richardson { 1173a9de470cSBruce Richardson struct rte_event_queue_conf queue_conf; 1174a9de470cSBruce Richardson struct rte_event_dev_config devconf; 1175a9de470cSBruce Richardson struct rte_event_dev_info info; 1176a9de470cSBruce Richardson uint32_t queue_count; 1177a9de470cSBruce Richardson uint32_t port_count; 1178a9de470cSBruce Richardson int ret; 1179a9de470cSBruce Richardson uint8_t qid; 1180a9de470cSBruce Richardson 1181a9de470cSBruce Richardson if (!rte_event_dev_count()) { 1182a9de470cSBruce Richardson /* If there is no hardware eventdev, or no software vdev was 1183a9de470cSBruce Richardson * specified on the command line, create an instance of 1184a9de470cSBruce Richardson * event_sw. 1185a9de470cSBruce Richardson */ 1186a9de470cSBruce Richardson LOG_DBG("Failed to find a valid event device... " 1187a9de470cSBruce Richardson "testing with event_sw device\n"); 1188a9de470cSBruce Richardson TEST_ASSERT_SUCCESS(rte_vdev_init("event_sw0", NULL), 1189a9de470cSBruce Richardson "Error creating eventdev"); 1190a9de470cSBruce Richardson evdev = rte_event_dev_get_dev_id("event_sw0"); 1191a9de470cSBruce Richardson } 1192a9de470cSBruce Richardson 1193a9de470cSBruce Richardson ret = rte_event_dev_info_get(evdev, &info); 1194a9de470cSBruce Richardson TEST_ASSERT_SUCCESS(ret, "Failed to get event dev info\n"); 1195a9de470cSBruce Richardson 1196a9de470cSBruce Richardson evdev_set_conf_values(&devconf, &info); 1197a9de470cSBruce Richardson 1198a9de470cSBruce Richardson ret = rte_event_dev_configure(evdev, &devconf); 1199a9de470cSBruce Richardson TEST_ASSERT_SUCCESS(ret, "Failed to configure eventdev\n"); 1200a9de470cSBruce Richardson 1201a9de470cSBruce Richardson /* Set up event queue */ 1202a9de470cSBruce Richardson ret = rte_event_dev_attr_get(evdev, RTE_EVENT_DEV_ATTR_QUEUE_COUNT, 1203a9de470cSBruce Richardson &queue_count); 1204a9de470cSBruce Richardson TEST_ASSERT_SUCCESS(ret, "Queue count get failed\n"); 1205a9de470cSBruce Richardson TEST_ASSERT_EQUAL(queue_count, 2, "Unexpected queue count\n"); 1206a9de470cSBruce Richardson 1207a9de470cSBruce Richardson qid = TEST_APP_EV_QUEUE_ID; 1208a9de470cSBruce Richardson ret = rte_event_queue_setup(evdev, qid, NULL); 1209a9de470cSBruce Richardson TEST_ASSERT_SUCCESS(ret, "Failed to setup queue=%d\n", qid); 1210a9de470cSBruce Richardson 1211a9de470cSBruce Richardson queue_conf.nb_atomic_flows = info.max_event_queue_flows; 1212a9de470cSBruce Richardson queue_conf.nb_atomic_order_sequences = 32; 1213a9de470cSBruce Richardson queue_conf.schedule_type = RTE_SCHED_TYPE_ATOMIC; 1214a9de470cSBruce Richardson queue_conf.priority = RTE_EVENT_DEV_PRIORITY_HIGHEST; 1215a9de470cSBruce Richardson queue_conf.event_queue_cfg = RTE_EVENT_QUEUE_CFG_SINGLE_LINK; 1216a9de470cSBruce Richardson 1217a9de470cSBruce Richardson qid = TEST_CRYPTO_EV_QUEUE_ID; 1218a9de470cSBruce Richardson ret = rte_event_queue_setup(evdev, qid, &queue_conf); 1219a9de470cSBruce Richardson TEST_ASSERT_SUCCESS(ret, "Failed to setup queue=%u\n", qid); 1220a9de470cSBruce Richardson 1221a9de470cSBruce Richardson /* Set up event port */ 1222a9de470cSBruce Richardson ret = rte_event_dev_attr_get(evdev, RTE_EVENT_DEV_ATTR_PORT_COUNT, 1223a9de470cSBruce Richardson &port_count); 1224a9de470cSBruce Richardson TEST_ASSERT_SUCCESS(ret, "Port count get failed\n"); 1225a9de470cSBruce Richardson TEST_ASSERT_EQUAL(port_count, 1, "Unexpected port count\n"); 1226a9de470cSBruce Richardson 1227a9de470cSBruce Richardson ret = rte_event_port_setup(evdev, TEST_APP_PORT_ID, NULL); 1228a9de470cSBruce Richardson TEST_ASSERT_SUCCESS(ret, "Failed to setup port=%d\n", 1229a9de470cSBruce Richardson TEST_APP_PORT_ID); 1230a9de470cSBruce Richardson 1231a9de470cSBruce Richardson qid = TEST_APP_EV_QUEUE_ID; 1232a9de470cSBruce Richardson ret = rte_event_port_link(evdev, TEST_APP_PORT_ID, &qid, NULL, 1); 1233a9de470cSBruce Richardson TEST_ASSERT(ret >= 0, "Failed to link queue port=%d\n", 1234a9de470cSBruce Richardson TEST_APP_PORT_ID); 1235a9de470cSBruce Richardson 1236a9de470cSBruce Richardson return TEST_SUCCESS; 1237a9de470cSBruce Richardson } 1238a9de470cSBruce Richardson 1239a9de470cSBruce Richardson static void 1240a9de470cSBruce Richardson test_crypto_adapter_free(void) 1241a9de470cSBruce Richardson { 1242a9de470cSBruce Richardson rte_event_crypto_adapter_free(TEST_ADAPTER_ID); 1243a9de470cSBruce Richardson } 1244a9de470cSBruce Richardson 1245a9de470cSBruce Richardson static int 1246a9de470cSBruce Richardson test_crypto_adapter_create(void) 1247a9de470cSBruce Richardson { 1248a9de470cSBruce Richardson struct rte_event_port_conf conf = { 1249a9de470cSBruce Richardson .dequeue_depth = 8, 1250a9de470cSBruce Richardson .enqueue_depth = 8, 1251a9de470cSBruce Richardson .new_event_threshold = 1200, 1252a9de470cSBruce Richardson }; 1253a169cd36SAakash Sasidharan uint32_t cap; 1254a9de470cSBruce Richardson int ret; 1255a9de470cSBruce Richardson 1256a169cd36SAakash Sasidharan ret = rte_event_crypto_adapter_caps_get(evdev, TEST_CDEV_ID, &cap); 1257a169cd36SAakash Sasidharan if (ret == -ENOTSUP) 1258a169cd36SAakash Sasidharan return ret; 1259a169cd36SAakash Sasidharan 1260a9de470cSBruce Richardson /* Create adapter with default port creation callback */ 1261a9de470cSBruce Richardson ret = rte_event_crypto_adapter_create(TEST_ADAPTER_ID, 126245eb85e9SAnkur Dwivedi evdev, 1263a9de470cSBruce Richardson &conf, 0); 1264a9de470cSBruce Richardson TEST_ASSERT_SUCCESS(ret, "Failed to create event crypto adapter\n"); 1265a9de470cSBruce Richardson 1266a9de470cSBruce Richardson return TEST_SUCCESS; 1267a9de470cSBruce Richardson } 1268a9de470cSBruce Richardson 1269a9de470cSBruce Richardson static int 1270a9de470cSBruce Richardson test_crypto_adapter_qp_add_del(void) 1271a9de470cSBruce Richardson { 1272c1749bc5SVolodymyr Fialko struct rte_event_crypto_adapter_queue_conf queue_conf = { 1273c1749bc5SVolodymyr Fialko .ev = response_info, 1274c1749bc5SVolodymyr Fialko }; 1275c1749bc5SVolodymyr Fialko 1276a9de470cSBruce Richardson uint32_t cap; 1277a9de470cSBruce Richardson int ret; 1278a9de470cSBruce Richardson 127945eb85e9SAnkur Dwivedi ret = rte_event_crypto_adapter_caps_get(evdev, TEST_CDEV_ID, &cap); 1280a169cd36SAakash Sasidharan if (ret == -ENOTSUP) 1281a169cd36SAakash Sasidharan return TEST_SKIPPED; 1282a169cd36SAakash Sasidharan 1283a9de470cSBruce Richardson TEST_ASSERT_SUCCESS(ret, "Failed to get adapter capabilities\n"); 1284a9de470cSBruce Richardson 1285a9de470cSBruce Richardson if (cap & RTE_EVENT_CRYPTO_ADAPTER_CAP_INTERNAL_PORT_QP_EV_BIND) { 1286a9de470cSBruce Richardson ret = rte_event_crypto_adapter_queue_pair_add(TEST_ADAPTER_ID, 1287c1749bc5SVolodymyr Fialko TEST_CDEV_ID, TEST_CDEV_QP_ID, &queue_conf); 1288a9de470cSBruce Richardson } else 1289a9de470cSBruce Richardson ret = rte_event_crypto_adapter_queue_pair_add(TEST_ADAPTER_ID, 1290a9de470cSBruce Richardson TEST_CDEV_ID, TEST_CDEV_QP_ID, NULL); 1291a9de470cSBruce Richardson 1292a9de470cSBruce Richardson TEST_ASSERT_SUCCESS(ret, "Failed to create add queue pair\n"); 1293a9de470cSBruce Richardson 1294a9de470cSBruce Richardson ret = rte_event_crypto_adapter_queue_pair_del(TEST_ADAPTER_ID, 1295a9de470cSBruce Richardson TEST_CDEV_ID, TEST_CDEV_QP_ID); 1296a9de470cSBruce Richardson TEST_ASSERT_SUCCESS(ret, "Failed to delete add queue pair\n"); 1297a9de470cSBruce Richardson 1298a9de470cSBruce Richardson return TEST_SUCCESS; 1299a9de470cSBruce Richardson } 1300a9de470cSBruce Richardson 1301a9de470cSBruce Richardson static int 1302a9de470cSBruce Richardson configure_event_crypto_adapter(enum rte_event_crypto_adapter_mode mode) 1303a9de470cSBruce Richardson { 1304a9de470cSBruce Richardson struct rte_event_port_conf conf = { 1305a9de470cSBruce Richardson .dequeue_depth = 8, 1306a9de470cSBruce Richardson .enqueue_depth = 8, 1307a9de470cSBruce Richardson .new_event_threshold = 1200, 1308a9de470cSBruce Richardson }; 1309a9de470cSBruce Richardson 1310c1749bc5SVolodymyr Fialko struct rte_event_crypto_adapter_queue_conf queue_conf = { 1311c1749bc5SVolodymyr Fialko .ev = response_info, 1312c1749bc5SVolodymyr Fialko }; 1313c1749bc5SVolodymyr Fialko 1314a9de470cSBruce Richardson uint32_t cap; 1315a9de470cSBruce Richardson int ret; 1316a9de470cSBruce Richardson 13173c563165SAnkur Dwivedi ret = rte_event_crypto_adapter_caps_get(evdev, TEST_CDEV_ID, &cap); 1318a169cd36SAakash Sasidharan if (ret == -ENOTSUP) 1319a169cd36SAakash Sasidharan return ret; 1320a169cd36SAakash Sasidharan 13213c563165SAnkur Dwivedi TEST_ASSERT_SUCCESS(ret, "Failed to get adapter capabilities\n"); 13223c563165SAnkur Dwivedi 13233c563165SAnkur Dwivedi /* Skip mode and capability mismatch check for SW eventdev */ 13243c563165SAnkur Dwivedi if (!(cap & RTE_EVENT_CRYPTO_ADAPTER_CAP_INTERNAL_PORT_OP_NEW) && 13253c563165SAnkur Dwivedi !(cap & RTE_EVENT_CRYPTO_ADAPTER_CAP_INTERNAL_PORT_OP_FWD) && 13263c563165SAnkur Dwivedi !(cap & RTE_EVENT_CRYPTO_ADAPTER_CAP_INTERNAL_PORT_QP_EV_BIND)) 13273c563165SAnkur Dwivedi goto adapter_create; 13283c563165SAnkur Dwivedi 1329b8ebe146SShijith Thotton if (mode == RTE_EVENT_CRYPTO_ADAPTER_OP_FORWARD) { 1330b8ebe146SShijith Thotton if (cap & RTE_EVENT_CRYPTO_ADAPTER_CAP_INTERNAL_PORT_OP_FWD) 1331b8ebe146SShijith Thotton params.internal_port_op_fwd = 1; 1332b8ebe146SShijith Thotton else 13333c563165SAnkur Dwivedi return -ENOTSUP; 1334b8ebe146SShijith Thotton } 13353c563165SAnkur Dwivedi 13363c563165SAnkur Dwivedi if ((mode == RTE_EVENT_CRYPTO_ADAPTER_OP_NEW) && 13373c563165SAnkur Dwivedi !(cap & RTE_EVENT_CRYPTO_ADAPTER_CAP_INTERNAL_PORT_OP_NEW)) 13383c563165SAnkur Dwivedi return -ENOTSUP; 13393c563165SAnkur Dwivedi 13403c563165SAnkur Dwivedi adapter_create: 1341a9de470cSBruce Richardson /* Create adapter with default port creation callback */ 1342a9de470cSBruce Richardson ret = rte_event_crypto_adapter_create(TEST_ADAPTER_ID, 13433c563165SAnkur Dwivedi evdev, 1344a9de470cSBruce Richardson &conf, mode); 1345a9de470cSBruce Richardson TEST_ASSERT_SUCCESS(ret, "Failed to create event crypto adapter\n"); 1346a9de470cSBruce Richardson 1347a9de470cSBruce Richardson if (cap & RTE_EVENT_CRYPTO_ADAPTER_CAP_INTERNAL_PORT_QP_EV_BIND) { 1348a9de470cSBruce Richardson ret = rte_event_crypto_adapter_queue_pair_add(TEST_ADAPTER_ID, 1349c1749bc5SVolodymyr Fialko TEST_CDEV_ID, TEST_CDEV_QP_ID, &queue_conf); 1350a9de470cSBruce Richardson } else 1351a9de470cSBruce Richardson ret = rte_event_crypto_adapter_queue_pair_add(TEST_ADAPTER_ID, 1352a9de470cSBruce Richardson TEST_CDEV_ID, TEST_CDEV_QP_ID, NULL); 1353a9de470cSBruce Richardson 1354a9de470cSBruce Richardson TEST_ASSERT_SUCCESS(ret, "Failed to add queue pair\n"); 1355a9de470cSBruce Richardson 1356b8ebe146SShijith Thotton if (!params.internal_port_op_fwd) { 1357a9de470cSBruce Richardson ret = rte_event_crypto_adapter_event_port_get(TEST_ADAPTER_ID, 1358a9de470cSBruce Richardson ¶ms.crypto_event_port_id); 1359a9de470cSBruce Richardson TEST_ASSERT_SUCCESS(ret, "Failed to get event port\n"); 1360b8ebe146SShijith Thotton } 1361a9de470cSBruce Richardson 1362a9de470cSBruce Richardson return TEST_SUCCESS; 1363a9de470cSBruce Richardson } 1364a9de470cSBruce Richardson 1365a9de470cSBruce Richardson static void 1366a9de470cSBruce Richardson test_crypto_adapter_stop(void) 1367a9de470cSBruce Richardson { 1368a9de470cSBruce Richardson uint32_t evdev_service_id, adapter_service_id; 1369a9de470cSBruce Richardson 1370a9de470cSBruce Richardson /* retrieve service ids & stop services */ 1371a9de470cSBruce Richardson if (rte_event_crypto_adapter_service_id_get(TEST_ADAPTER_ID, 1372a9de470cSBruce Richardson &adapter_service_id) == 0) { 1373a9de470cSBruce Richardson rte_service_runstate_set(adapter_service_id, 0); 1374a9de470cSBruce Richardson rte_service_lcore_stop(slcore_id); 1375a9de470cSBruce Richardson rte_service_lcore_del(slcore_id); 1376a9de470cSBruce Richardson rte_event_crypto_adapter_stop(TEST_ADAPTER_ID); 1377a9de470cSBruce Richardson } 1378a9de470cSBruce Richardson 1379a9de470cSBruce Richardson if (rte_event_dev_service_id_get(evdev, &evdev_service_id) == 0) { 1380a9de470cSBruce Richardson rte_service_runstate_set(evdev_service_id, 0); 1381a9de470cSBruce Richardson rte_service_lcore_stop(slcore_id); 1382a9de470cSBruce Richardson rte_service_lcore_del(slcore_id); 1383e3f128dbSShijith Thotton rte_cryptodev_stop(TEST_CDEV_ID); 1384e3f128dbSShijith Thotton rte_event_dev_stop(evdev); 1385e3f128dbSShijith Thotton } else { 1386e3f128dbSShijith Thotton rte_cryptodev_stop(TEST_CDEV_ID); 1387a9de470cSBruce Richardson rte_event_dev_stop(evdev); 1388a9de470cSBruce Richardson } 1389a9de470cSBruce Richardson } 1390a9de470cSBruce Richardson 1391a9de470cSBruce Richardson static int 1392a9de470cSBruce Richardson test_crypto_adapter_conf(enum rte_event_crypto_adapter_mode mode) 1393a9de470cSBruce Richardson { 1394a9de470cSBruce Richardson uint32_t evdev_service_id; 1395a9de470cSBruce Richardson uint8_t qid; 1396a9de470cSBruce Richardson int ret; 1397a9de470cSBruce Richardson 1398a9de470cSBruce Richardson if (!crypto_adapter_setup_done) { 1399a9de470cSBruce Richardson ret = configure_event_crypto_adapter(mode); 1400b8ebe146SShijith Thotton if (ret) 1401b8ebe146SShijith Thotton return ret; 1402b8ebe146SShijith Thotton if (!params.internal_port_op_fwd) { 1403a9de470cSBruce Richardson qid = TEST_CRYPTO_EV_QUEUE_ID; 1404a9de470cSBruce Richardson ret = rte_event_port_link(evdev, 1405a9de470cSBruce Richardson params.crypto_event_port_id, &qid, NULL, 1); 1406a9de470cSBruce Richardson TEST_ASSERT(ret >= 0, "Failed to link queue %d " 1407a9de470cSBruce Richardson "port=%u\n", qid, 1408a9de470cSBruce Richardson params.crypto_event_port_id); 1409a9de470cSBruce Richardson } 1410a9de470cSBruce Richardson crypto_adapter_setup_done = 1; 1411a9de470cSBruce Richardson } 1412a9de470cSBruce Richardson 1413a9de470cSBruce Richardson /* retrieve service ids */ 1414a9de470cSBruce Richardson if (rte_event_dev_service_id_get(evdev, &evdev_service_id) == 0) { 1415a9de470cSBruce Richardson /* add a service core and start it */ 1416a9de470cSBruce Richardson TEST_ASSERT_SUCCESS(rte_service_lcore_add(slcore_id), 1417a9de470cSBruce Richardson "Failed to add service core"); 1418a9de470cSBruce Richardson TEST_ASSERT_SUCCESS(rte_service_lcore_start(slcore_id), 1419a9de470cSBruce Richardson "Failed to start service core"); 1420a9de470cSBruce Richardson 1421a9de470cSBruce Richardson /* map services to it */ 1422a9de470cSBruce Richardson TEST_ASSERT_SUCCESS(rte_service_map_lcore_set(evdev_service_id, 1423a9de470cSBruce Richardson slcore_id, 1), "Failed to map evdev service"); 1424a9de470cSBruce Richardson 1425a9de470cSBruce Richardson /* set services to running */ 1426a9de470cSBruce Richardson TEST_ASSERT_SUCCESS(rte_service_runstate_set(evdev_service_id, 1427a9de470cSBruce Richardson 1), "Failed to start evdev service"); 1428a9de470cSBruce Richardson } 1429a9de470cSBruce Richardson 1430a9de470cSBruce Richardson /* start the eventdev */ 1431a9de470cSBruce Richardson TEST_ASSERT_SUCCESS(rte_event_dev_start(evdev), 1432a9de470cSBruce Richardson "Failed to start event device"); 1433a9de470cSBruce Richardson 1434e3f128dbSShijith Thotton /* start the cryptodev */ 1435e3f128dbSShijith Thotton TEST_ASSERT_SUCCESS(rte_cryptodev_start(TEST_CDEV_ID), 1436e3f128dbSShijith Thotton "Failed to start crypto device"); 1437e3f128dbSShijith Thotton 1438a9de470cSBruce Richardson return TEST_SUCCESS; 1439a9de470cSBruce Richardson } 1440a9de470cSBruce Richardson 1441a9de470cSBruce Richardson static int 1442a9de470cSBruce Richardson test_crypto_adapter_conf_op_forward_mode(void) 1443a9de470cSBruce Richardson { 1444a9de470cSBruce Richardson enum rte_event_crypto_adapter_mode mode; 1445a9de470cSBruce Richardson 1446a9de470cSBruce Richardson mode = RTE_EVENT_CRYPTO_ADAPTER_OP_FORWARD; 1447a9de470cSBruce Richardson 14483c563165SAnkur Dwivedi return test_crypto_adapter_conf(mode); 1449a9de470cSBruce Richardson } 1450a9de470cSBruce Richardson 1451a9de470cSBruce Richardson static int 1452a9de470cSBruce Richardson test_crypto_adapter_conf_op_new_mode(void) 1453a9de470cSBruce Richardson { 1454a9de470cSBruce Richardson enum rte_event_crypto_adapter_mode mode; 1455a9de470cSBruce Richardson 1456a9de470cSBruce Richardson mode = RTE_EVENT_CRYPTO_ADAPTER_OP_NEW; 145749e74e08SHemant Agrawal 14583c563165SAnkur Dwivedi return test_crypto_adapter_conf(mode); 1459a9de470cSBruce Richardson } 1460a9de470cSBruce Richardson 1461a9de470cSBruce Richardson 1462a9de470cSBruce Richardson static int 1463a9de470cSBruce Richardson testsuite_setup(void) 1464a9de470cSBruce Richardson { 1465a9de470cSBruce Richardson int ret; 1466a9de470cSBruce Richardson 1467a9de470cSBruce Richardson slcore_id = rte_get_next_lcore(-1, 1, 0); 1468a9de470cSBruce Richardson TEST_ASSERT_NOT_EQUAL(slcore_id, RTE_MAX_LCORE, "At least 2 lcores " 1469a9de470cSBruce Richardson "are required to run this autotest\n"); 1470a9de470cSBruce Richardson 1471a9de470cSBruce Richardson /* Setup and start event device. */ 1472a9de470cSBruce Richardson ret = configure_eventdev(); 1473a9de470cSBruce Richardson TEST_ASSERT_SUCCESS(ret, "Failed to setup eventdev\n"); 1474a9de470cSBruce Richardson 1475a9de470cSBruce Richardson /* Setup and start crypto device. */ 1476a9de470cSBruce Richardson ret = configure_cryptodev(); 1477a9de470cSBruce Richardson TEST_ASSERT_SUCCESS(ret, "cryptodev initialization failed\n"); 1478a9de470cSBruce Richardson 1479a9de470cSBruce Richardson return TEST_SUCCESS; 1480a9de470cSBruce Richardson } 1481a9de470cSBruce Richardson 1482a9de470cSBruce Richardson static void 148307405a00SAnkur Dwivedi crypto_adapter_teardown(void) 148407405a00SAnkur Dwivedi { 148507405a00SAnkur Dwivedi int ret; 148607405a00SAnkur Dwivedi 1487a169cd36SAakash Sasidharan if (!crypto_adapter_setup_done) 1488a169cd36SAakash Sasidharan return; 1489a169cd36SAakash Sasidharan 149007405a00SAnkur Dwivedi ret = rte_event_crypto_adapter_stop(TEST_ADAPTER_ID); 149107405a00SAnkur Dwivedi if (ret < 0) 149207405a00SAnkur Dwivedi RTE_LOG(ERR, USER1, "Failed to stop adapter!"); 149307405a00SAnkur Dwivedi 149407405a00SAnkur Dwivedi ret = rte_event_crypto_adapter_queue_pair_del(TEST_ADAPTER_ID, 149507405a00SAnkur Dwivedi TEST_CDEV_ID, TEST_CDEV_QP_ID); 149607405a00SAnkur Dwivedi if (ret < 0) 149707405a00SAnkur Dwivedi RTE_LOG(ERR, USER1, "Failed to delete queue pair!"); 149807405a00SAnkur Dwivedi 149907405a00SAnkur Dwivedi ret = rte_event_crypto_adapter_free(TEST_ADAPTER_ID); 150007405a00SAnkur Dwivedi if (ret < 0) 150107405a00SAnkur Dwivedi RTE_LOG(ERR, USER1, "Failed to free adapter!"); 150207405a00SAnkur Dwivedi 150307405a00SAnkur Dwivedi crypto_adapter_setup_done = 0; 150407405a00SAnkur Dwivedi } 150507405a00SAnkur Dwivedi 150607405a00SAnkur Dwivedi static void 1507a9de470cSBruce Richardson crypto_teardown(void) 1508a9de470cSBruce Richardson { 1509a9de470cSBruce Richardson /* Free mbuf mempool */ 1510a9de470cSBruce Richardson if (params.mbuf_pool != NULL) { 1511a9de470cSBruce Richardson RTE_LOG(DEBUG, USER1, "CRYPTO_ADAPTER_MBUFPOOL count %u\n", 1512a9de470cSBruce Richardson rte_mempool_avail_count(params.mbuf_pool)); 1513a9de470cSBruce Richardson rte_mempool_free(params.mbuf_pool); 1514a9de470cSBruce Richardson params.mbuf_pool = NULL; 1515a9de470cSBruce Richardson } 1516a9de470cSBruce Richardson 1517a9de470cSBruce Richardson /* Free session mempool */ 1518a9de470cSBruce Richardson if (params.session_mpool != NULL) { 1519a9de470cSBruce Richardson RTE_LOG(DEBUG, USER1, "CRYPTO_ADAPTER_SESSION_MP count %u\n", 1520a9de470cSBruce Richardson rte_mempool_avail_count(params.session_mpool)); 1521a9de470cSBruce Richardson rte_mempool_free(params.session_mpool); 1522a9de470cSBruce Richardson params.session_mpool = NULL; 1523a9de470cSBruce Richardson } 1524a9de470cSBruce Richardson 1525647a788dSAkhil Goyal /* Free asym session mempool */ 1526647a788dSAkhil Goyal if (params.asym_sess_mpool != NULL) { 1527647a788dSAkhil Goyal RTE_LOG(DEBUG, USER1, "CRYPTO_AD_ASYM_SESS_MP count %u\n", 1528647a788dSAkhil Goyal rte_mempool_avail_count(params.asym_sess_mpool)); 1529647a788dSAkhil Goyal rte_mempool_free(params.asym_sess_mpool); 1530647a788dSAkhil Goyal params.asym_sess_mpool = NULL; 1531647a788dSAkhil Goyal } 1532647a788dSAkhil Goyal /* Free asym ops mempool */ 1533647a788dSAkhil Goyal if (params.asym_op_mpool != NULL) { 1534647a788dSAkhil Goyal RTE_LOG(DEBUG, USER1, "EVENT_CRYPTO_ASYM_OP_POOL count %u\n", 1535647a788dSAkhil Goyal rte_mempool_avail_count(params.asym_op_mpool)); 1536647a788dSAkhil Goyal rte_mempool_free(params.asym_op_mpool); 1537647a788dSAkhil Goyal params.asym_op_mpool = NULL; 1538647a788dSAkhil Goyal } 1539647a788dSAkhil Goyal 1540a9de470cSBruce Richardson /* Free ops mempool */ 1541a9de470cSBruce Richardson if (params.op_mpool != NULL) { 1542a9de470cSBruce Richardson RTE_LOG(DEBUG, USER1, "EVENT_CRYPTO_SYM_OP_POOL count %u\n", 1543a9de470cSBruce Richardson rte_mempool_avail_count(params.op_mpool)); 1544a9de470cSBruce Richardson rte_mempool_free(params.op_mpool); 1545a9de470cSBruce Richardson params.op_mpool = NULL; 1546a9de470cSBruce Richardson } 1547a9de470cSBruce Richardson } 1548a9de470cSBruce Richardson 1549a9de470cSBruce Richardson static void 1550a9de470cSBruce Richardson eventdev_teardown(void) 1551a9de470cSBruce Richardson { 1552a9de470cSBruce Richardson rte_event_dev_stop(evdev); 1553a9de470cSBruce Richardson } 1554a9de470cSBruce Richardson 1555a9de470cSBruce Richardson static void 1556a9de470cSBruce Richardson testsuite_teardown(void) 1557a9de470cSBruce Richardson { 155807405a00SAnkur Dwivedi crypto_adapter_teardown(); 1559a9de470cSBruce Richardson crypto_teardown(); 1560a9de470cSBruce Richardson eventdev_teardown(); 1561a9de470cSBruce Richardson } 1562a9de470cSBruce Richardson 1563a9de470cSBruce Richardson static struct unit_test_suite functional_testsuite = { 1564a9de470cSBruce Richardson .suite_name = "Event crypto adapter test suite", 1565a9de470cSBruce Richardson .setup = testsuite_setup, 1566a9de470cSBruce Richardson .teardown = testsuite_teardown, 1567a9de470cSBruce Richardson .unit_test_cases = { 1568a9de470cSBruce Richardson 1569a9de470cSBruce Richardson TEST_CASE_ST(NULL, test_crypto_adapter_free, 1570a9de470cSBruce Richardson test_crypto_adapter_create), 1571a9de470cSBruce Richardson 1572a9de470cSBruce Richardson TEST_CASE_ST(test_crypto_adapter_create, 1573a9de470cSBruce Richardson test_crypto_adapter_free, 1574a9de470cSBruce Richardson test_crypto_adapter_qp_add_del), 1575a9de470cSBruce Richardson 1576a9de470cSBruce Richardson TEST_CASE_ST(test_crypto_adapter_create, 1577a9de470cSBruce Richardson test_crypto_adapter_free, 1578a9de470cSBruce Richardson test_crypto_adapter_stats), 1579a9de470cSBruce Richardson 158004ed18cdSNaga Harish K S V TEST_CASE_ST(test_crypto_adapter_create, 158104ed18cdSNaga Harish K S V test_crypto_adapter_free, 158204ed18cdSNaga Harish K S V test_crypto_adapter_params), 158304ed18cdSNaga Harish K S V 1584a9de470cSBruce Richardson TEST_CASE_ST(test_crypto_adapter_conf_op_forward_mode, 1585a9de470cSBruce Richardson test_crypto_adapter_stop, 1586a9de470cSBruce Richardson test_session_with_op_forward_mode), 1587a9de470cSBruce Richardson 1588a9de470cSBruce Richardson TEST_CASE_ST(test_crypto_adapter_conf_op_forward_mode, 1589a9de470cSBruce Richardson test_crypto_adapter_stop, 1590a9de470cSBruce Richardson test_sessionless_with_op_forward_mode), 1591a9de470cSBruce Richardson 1592a9de470cSBruce Richardson TEST_CASE_ST(test_crypto_adapter_conf_op_new_mode, 1593a9de470cSBruce Richardson test_crypto_adapter_stop, 1594a9de470cSBruce Richardson test_session_with_op_new_mode), 1595a9de470cSBruce Richardson 1596a9de470cSBruce Richardson TEST_CASE_ST(test_crypto_adapter_conf_op_new_mode, 1597a9de470cSBruce Richardson test_crypto_adapter_stop, 1598a9de470cSBruce Richardson test_sessionless_with_op_new_mode), 1599a9de470cSBruce Richardson 1600647a788dSAkhil Goyal TEST_CASE_ST(test_crypto_adapter_conf_op_forward_mode, 1601647a788dSAkhil Goyal test_crypto_adapter_stop, 1602647a788dSAkhil Goyal test_asym_session_with_op_forward_mode), 1603647a788dSAkhil Goyal 1604647a788dSAkhil Goyal TEST_CASE_ST(test_crypto_adapter_conf_op_forward_mode, 1605647a788dSAkhil Goyal test_crypto_adapter_stop, 1606647a788dSAkhil Goyal test_asym_sessionless_with_op_forward_mode), 1607647a788dSAkhil Goyal 1608647a788dSAkhil Goyal TEST_CASE_ST(test_crypto_adapter_conf_op_new_mode, 1609647a788dSAkhil Goyal test_crypto_adapter_stop, 1610647a788dSAkhil Goyal test_asym_session_with_op_new_mode), 1611647a788dSAkhil Goyal 1612647a788dSAkhil Goyal TEST_CASE_ST(test_crypto_adapter_conf_op_new_mode, 1613647a788dSAkhil Goyal test_crypto_adapter_stop, 1614647a788dSAkhil Goyal test_asym_sessionless_with_op_new_mode), 1615647a788dSAkhil Goyal 1616a9de470cSBruce Richardson TEST_CASES_END() /**< NULL terminate unit test array */ 1617a9de470cSBruce Richardson } 1618a9de470cSBruce Richardson }; 1619a9de470cSBruce Richardson 1620a9de470cSBruce Richardson static int 1621a9de470cSBruce Richardson test_event_crypto_adapter(void) 1622a9de470cSBruce Richardson { 1623a9de470cSBruce Richardson return unit_test_suite_runner(&functional_testsuite); 1624a9de470cSBruce Richardson } 1625a9de470cSBruce Richardson 16263c60274cSJie Zhou #endif /* !RTE_EXEC_ENV_WINDOWS */ 16273c60274cSJie Zhou 1628a9de470cSBruce Richardson REGISTER_TEST_COMMAND(event_crypto_adapter_autotest, 1629a9de470cSBruce Richardson test_event_crypto_adapter); 1630