1 /*- 2 * BSD LICENSE 3 * 4 * Copyright(c) 2017 Intel Corporation. All rights reserved. 5 * All rights reserved. 6 * 7 * Redistribution and use in source and binary forms, with or without 8 * modification, are permitted provided that the following conditions 9 * are met: 10 * 11 * * Redistributions of source code must retain the above copyright 12 * notice, this list of conditions and the following disclaimer. 13 * * Redistributions in binary form must reproduce the above copyright 14 * notice, this list of conditions and the following disclaimer in 15 * the documentation and/or other materials provided with the 16 * distribution. 17 * * Neither the name of Intel Corporation nor the names of its 18 * contributors may be used to endorse or promote products derived 19 * from this software without specific prior written permission. 20 * 21 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 22 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 23 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 24 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 25 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 26 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 27 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 28 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 29 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 30 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 31 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 32 */ 33 34 #ifndef _SCHEDULER_PMD_PRIVATE_H 35 #define _SCHEDULER_PMD_PRIVATE_H 36 37 #include <rte_hash.h> 38 #include <rte_reorder.h> 39 #include "rte_cryptodev_scheduler.h" 40 41 /**< Maximum number of bonded devices per devices */ 42 #ifndef MAX_SLAVES_NUM 43 #define MAX_SLAVES_NUM (8) 44 #endif 45 46 #define PER_SLAVE_BUFF_SIZE (256) 47 48 #define CS_LOG_ERR(fmt, args...) \ 49 RTE_LOG(ERR, CRYPTODEV, "[%s] %s() line %u: " fmt "\n", \ 50 RTE_STR(CRYPTODEV_NAME_SCHEDULER_PMD), \ 51 __func__, __LINE__, ## args) 52 53 #ifdef RTE_LIBRTE_CRYPTO_SCHEDULER_DEBUG 54 #define CS_LOG_INFO(fmt, args...) \ 55 RTE_LOG(INFO, CRYPTODEV, "[%s] %s() line %u: " fmt "\n", \ 56 RTE_STR(CRYPTODEV_NAME_SCHEDULER_PMD), \ 57 __func__, __LINE__, ## args) 58 59 #define CS_LOG_DBG(fmt, args...) \ 60 RTE_LOG(DEBUG, CRYPTODEV, "[%s] %s() line %u: " fmt "\n", \ 61 RTE_STR(CRYPTODEV_NAME_SCHEDULER_PMD), \ 62 __func__, __LINE__, ## args) 63 #else 64 #define CS_LOG_INFO(fmt, args...) 65 #define CS_LOG_DBG(fmt, args...) 66 #endif 67 68 struct scheduler_slave { 69 uint8_t dev_id; 70 uint16_t qp_id; 71 uint32_t nb_inflight_cops; 72 73 enum rte_cryptodev_type dev_type; 74 }; 75 76 struct scheduler_ctx { 77 void *private_ctx; 78 /**< private scheduler context pointer */ 79 80 struct rte_cryptodev_capabilities *capabilities; 81 uint32_t nb_capabilities; 82 83 uint32_t max_nb_queue_pairs; 84 85 struct scheduler_slave slaves[MAX_SLAVES_NUM]; 86 uint32_t nb_slaves; 87 88 enum rte_cryptodev_scheduler_mode mode; 89 90 struct rte_cryptodev_scheduler_ops ops; 91 92 uint8_t reordering_enabled; 93 94 char name[RTE_CRYPTODEV_SCHEDULER_NAME_MAX_LEN]; 95 char description[RTE_CRYPTODEV_SCHEDULER_DESC_MAX_LEN]; 96 } __rte_cache_aligned; 97 98 struct scheduler_qp_ctx { 99 void *private_qp_ctx; 100 101 rte_cryptodev_scheduler_burst_enqueue_t schedule_enqueue; 102 rte_cryptodev_scheduler_burst_dequeue_t schedule_dequeue; 103 104 struct rte_reorder_buffer *reorder_buf; 105 uint32_t seqn; 106 } __rte_cache_aligned; 107 108 struct scheduler_session { 109 struct rte_cryptodev_sym_session *sessions[MAX_SLAVES_NUM]; 110 }; 111 112 /** device specific operations function pointer structure */ 113 extern struct rte_cryptodev_ops *rte_crypto_scheduler_pmd_ops; 114 115 #endif /* _SCHEDULER_PMD_PRIVATE_H */ 116