/* SPDX-License-Identifier: BSD-3-Clause * Copyright (C) 2020 Marvell International Ltd. */ #ifndef _OTX2_REGEXDEV_H_ #define _OTX2_REGEXDEV_H_ #include #include #include "otx2_dev.h" #define ree_func_trace otx2_ree_dbg /* Marvell OCTEON TX2 Regex PMD device name */ #define REGEXDEV_NAME_OCTEONTX2_PMD regex_octeontx2 #define OTX2_REE_MAX_LFS 36 #define OTX2_REE_MAX_QUEUES_PER_VF 36 #define OTX2_REE_MAX_MATCHES_PER_VF 254 #define OTX2_REE_MAX_PAYLOAD_SIZE (1 << 14) #define OTX2_REE_NON_INC_PROG 0 #define OTX2_REE_INC_PROG 1 #define REE_MOD_INC(i, l) ((i) == (l - 1) ? (i) = 0 : (i)++) /** * Device vf data */ struct otx2_ree_vf { struct otx2_dev otx2_dev; /**< Base class */ uint16_t max_queues; /**< Max queues supported */ uint8_t nb_queues; /**< Number of regex queues attached */ uint16_t max_matches; /**< Max matches supported*/ uint16_t lf_msixoff[OTX2_REE_MAX_LFS]; /**< MSI-X offsets */ uint8_t block_address; /**< REE Block Address */ uint8_t err_intr_registered:1; /**< Are error interrupts registered? */ }; /** * Device private data */ struct otx2_ree_data { uint32_t regexdev_capa; uint64_t rule_flags; /**< Feature flags exposes HW/SW features for the given device */ uint16_t max_rules_per_group; /**< Maximum rules supported per subset by this device */ uint16_t max_groups; /**< Maximum subset supported by this device */ void **queue_pairs; /**< Array of pointers to queue pairs. */ uint16_t nb_queue_pairs; /**< Number of device queue pairs. */ struct otx2_ree_vf vf; /**< vf data */ struct rte_regexdev_rule *rules; /**< rules to be compiled */ uint16_t nb_rules; /**< number of rules */ } __rte_cache_aligned; struct otx2_ree_rid { uintptr_t rid; /** Request id of a ree operation */ uint64_t user_id; /* Client data */ /**< IOVA address of the pattern to be matched. */ }; struct otx2_ree_pending_queue { uint64_t pending_count; /** Pending requests count */ struct otx2_ree_rid *rid_queue; /** Array of pending requests */ uint16_t enq_tail; /** Tail of queue to be used for enqueue */ uint16_t deq_head; /** Head of queue to be used for dequeue */ }; struct otx2_ree_qp { uint32_t id; /**< Queue pair id */ uintptr_t base; /**< Base address where BAR is mapped */ struct otx2_ree_pending_queue pend_q; /**< Pending queue */ rte_iova_t iq_dma_addr; /**< Instruction queue address */ uint32_t otx2_regexdev_jobid; /**< Job ID */ uint32_t write_offset; /**< write offset */ regexdev_stop_flush_t cb; /**< Callback function called during rte_regex_dev_stop()*/ }; #endif /* _OTX2_REGEXDEV_H_ */