1/* SPDX-License-Identifier: BSD-3-Clause 2 * Copyright (C) 2020 Marvell International Ltd. 3 */ 4 5#ifndef _OTX2_REGEXDEV_H_ 6#define _OTX2_REGEXDEV_H_ 7 8#include <rte_common.h> 9#include <rte_regexdev.h> 10 11#include "otx2_dev.h" 12 13#define ree_func_trace otx2_ree_dbg 14 15/* Marvell OCTEON TX2 Regex PMD device name */ 16#define REGEXDEV_NAME_OCTEONTX2_PMD regex_octeontx2 17 18#define OTX2_REE_MAX_LFS 36 19#define OTX2_REE_MAX_QUEUES_PER_VF 36 20#define OTX2_REE_MAX_MATCHES_PER_VF 254 21 22#define OTX2_REE_MAX_PAYLOAD_SIZE (1 << 14) 23 24#define OTX2_REE_NON_INC_PROG 0 25#define OTX2_REE_INC_PROG 1 26 27#define REE_MOD_INC(i, l) ((i) == (l - 1) ? (i) = 0 : (i)++) 28 29 30/** 31 * Device vf data 32 */ 33struct otx2_ree_vf { 34 struct otx2_dev otx2_dev; 35 /**< Base class */ 36 uint16_t max_queues; 37 /**< Max queues supported */ 38 uint8_t nb_queues; 39 /**< Number of regex queues attached */ 40 uint16_t max_matches; 41 /**< Max matches supported*/ 42 uint16_t lf_msixoff[OTX2_REE_MAX_LFS]; 43 /**< MSI-X offsets */ 44 uint8_t block_address; 45 /**< REE Block Address */ 46 uint8_t err_intr_registered:1; 47 /**< Are error interrupts registered? */ 48}; 49 50/** 51 * Device private data 52 */ 53struct otx2_ree_data { 54 uint32_t regexdev_capa; 55 uint64_t rule_flags; 56 /**< Feature flags exposes HW/SW features for the given device */ 57 uint16_t max_rules_per_group; 58 /**< Maximum rules supported per subset by this device */ 59 uint16_t max_groups; 60 /**< Maximum subset supported by this device */ 61 void **queue_pairs; 62 /**< Array of pointers to queue pairs. */ 63 uint16_t nb_queue_pairs; 64 /**< Number of device queue pairs. */ 65 struct otx2_ree_vf vf; 66 /**< vf data */ 67 struct rte_regexdev_rule *rules; 68 /**< rules to be compiled */ 69 uint16_t nb_rules; 70 /**< number of rules */ 71} __rte_cache_aligned; 72 73struct otx2_ree_rid { 74 uintptr_t rid; 75 /** Request id of a ree operation */ 76 uint64_t user_id; 77 /* Client data */ 78 /**< IOVA address of the pattern to be matched. */ 79}; 80 81struct otx2_ree_pending_queue { 82 uint64_t pending_count; 83 /** Pending requests count */ 84 struct otx2_ree_rid *rid_queue; 85 /** Array of pending requests */ 86 uint16_t enq_tail; 87 /** Tail of queue to be used for enqueue */ 88 uint16_t deq_head; 89 /** Head of queue to be used for dequeue */ 90}; 91 92struct otx2_ree_qp { 93 uint32_t id; 94 /**< Queue pair id */ 95 uintptr_t base; 96 /**< Base address where BAR is mapped */ 97 struct otx2_ree_pending_queue pend_q; 98 /**< Pending queue */ 99 rte_iova_t iq_dma_addr; 100 /**< Instruction queue address */ 101 uint32_t otx2_regexdev_jobid; 102 /**< Job ID */ 103 uint32_t write_offset; 104 /**< write offset */ 105 regexdev_stop_flush_t cb; 106 /**< Callback function called during rte_regex_dev_stop()*/ 107}; 108 109#endif /* _OTX2_REGEXDEV_H_ */ 110