1c88d3638SLiron Himi /* SPDX-License-Identifier: BSD-3-Clause 2c88d3638SLiron Himi * Copyright(C) 2021 Marvell. 3c88d3638SLiron Himi */ 4c88d3638SLiron Himi 5c88d3638SLiron Himi #ifndef _ROC_REE_H_ 6c88d3638SLiron Himi #define _ROC_REE_H_ 7c88d3638SLiron Himi 8c88d3638SLiron Himi #include "roc_api.h" 9c88d3638SLiron Himi 10c88d3638SLiron Himi #define REE_MAX_LFS 36 11c88d3638SLiron Himi #define REE_MAX_QUEUES_PER_VF 36 12c88d3638SLiron Himi #define REE_MAX_MATCHES_PER_VF 254 13c88d3638SLiron Himi 14c88d3638SLiron Himi #define REE_MAX_PAYLOAD_SIZE (1 << 14) 15c88d3638SLiron Himi 16c88d3638SLiron Himi #define REE_NON_INC_PROG 0 17c88d3638SLiron Himi #define REE_INC_PROG 1 18c88d3638SLiron Himi 19c88d3638SLiron Himi #define REE_MOD_INC(i, l) ((i) == (l - 1) ? (i) = 0 : (i)++) 20c88d3638SLiron Himi 21c88d3638SLiron Himi /** 22c88d3638SLiron Himi * Device vf data 23c88d3638SLiron Himi */ 24c88d3638SLiron Himi struct roc_ree_vf { 25c88d3638SLiron Himi struct plt_pci_device *pci_dev; 26c88d3638SLiron Himi struct dev *dev; 27c88d3638SLiron Himi /**< Base class */ 28c88d3638SLiron Himi uint16_t max_queues; 29c88d3638SLiron Himi /**< Max queues supported */ 30c88d3638SLiron Himi uint8_t nb_queues; 31c88d3638SLiron Himi /**< Number of regex queues attached */ 32c88d3638SLiron Himi uint16_t max_matches; 33c88d3638SLiron Himi /**< Max matches supported*/ 34c88d3638SLiron Himi uint16_t lf_msixoff[REE_MAX_LFS]; 35c88d3638SLiron Himi /**< MSI-X offsets */ 36c88d3638SLiron Himi uint8_t block_address; 37c88d3638SLiron Himi /**< REE Block Address */ 38c88d3638SLiron Himi uint8_t err_intr_registered : 1; 39c88d3638SLiron Himi /**< Are error interrupts registered? */ 40c88d3638SLiron Himi 41c88d3638SLiron Himi #define ROC_REE_MEM_SZ (6 * 1024) 42c88d3638SLiron Himi uint8_t reserved[ROC_REE_MEM_SZ] __plt_cache_aligned; 43c88d3638SLiron Himi } __plt_cache_aligned; 44c88d3638SLiron Himi 45c88d3638SLiron Himi struct roc_ree_rid { 46c88d3638SLiron Himi uintptr_t rid; 47c88d3638SLiron Himi /** Request id of a ree operation */ 48c88d3638SLiron Himi uint64_t user_id; 49c88d3638SLiron Himi /* Client data */ 50c88d3638SLiron Himi /**< IOVA address of the pattern to be matched. */ 51c88d3638SLiron Himi }; 52c88d3638SLiron Himi 53c88d3638SLiron Himi struct roc_ree_pending_queue { 54c88d3638SLiron Himi uint64_t pending_count; 55c88d3638SLiron Himi /** Pending requests count */ 56c88d3638SLiron Himi struct roc_ree_rid *rid_queue; 57c88d3638SLiron Himi /** Array of pending requests */ 58c88d3638SLiron Himi uint16_t enq_tail; 59c88d3638SLiron Himi /** Tail of queue to be used for enqueue */ 60c88d3638SLiron Himi uint16_t deq_head; 61c88d3638SLiron Himi /** Head of queue to be used for dequeue */ 62c88d3638SLiron Himi }; 63c88d3638SLiron Himi 64c88d3638SLiron Himi struct roc_ree_qp { 65c88d3638SLiron Himi uint32_t id; 66c88d3638SLiron Himi /**< Queue pair id */ 67c88d3638SLiron Himi uintptr_t base; 68c88d3638SLiron Himi /**< Base address where BAR is mapped */ 69c88d3638SLiron Himi struct roc_ree_pending_queue pend_q; 70c88d3638SLiron Himi /**< Pending queue */ 71*7557e3f5SJerin Jacob plt_iova_t iq_dma_addr; 72c88d3638SLiron Himi /**< Instruction queue address */ 73c88d3638SLiron Himi uint32_t roc_regexdev_jobid; 74c88d3638SLiron Himi /**< Job ID */ 75c88d3638SLiron Himi uint32_t write_offset; 76c88d3638SLiron Himi /**< write offset */ 77c88d3638SLiron Himi }; 78c88d3638SLiron Himi 79c88d3638SLiron Himi union roc_ree_inst { 80c88d3638SLiron Himi uint64_t u[8]; 81c88d3638SLiron Himi struct { 82c88d3638SLiron Himi uint64_t doneint : 1; 83c88d3638SLiron Himi uint64_t reserved_1_3 : 3; 84c88d3638SLiron Himi uint64_t dg : 1; 85c88d3638SLiron Himi uint64_t reserved_5_7 : 3; 86c88d3638SLiron Himi uint64_t ooj : 1; 87c88d3638SLiron Himi uint64_t reserved_9_15 : 7; 88c88d3638SLiron Himi uint64_t reserved_16_63 : 48; 89c88d3638SLiron Himi uint64_t inp_ptr_addr : 64; 90c88d3638SLiron Himi uint64_t inp_ptr_ctl : 64; 91c88d3638SLiron Himi uint64_t res_ptr_addr : 64; 92c88d3638SLiron Himi uint64_t wq_ptr : 64; 93c88d3638SLiron Himi uint64_t tag : 32; 94c88d3638SLiron Himi uint64_t tt : 2; 95c88d3638SLiron Himi uint64_t ggrp : 10; 96c88d3638SLiron Himi uint64_t reserved_364_383 : 20; 97c88d3638SLiron Himi uint64_t reserved_384_391 : 8; 98c88d3638SLiron Himi uint64_t ree_job_id : 24; 99c88d3638SLiron Himi uint64_t ree_job_ctrl : 16; 100c88d3638SLiron Himi uint64_t ree_job_length : 15; 101c88d3638SLiron Himi uint64_t reserved_447_447 : 1; 102c88d3638SLiron Himi uint64_t ree_job_subset_id_0 : 16; 103c88d3638SLiron Himi uint64_t ree_job_subset_id_1 : 16; 104c88d3638SLiron Himi uint64_t ree_job_subset_id_2 : 16; 105c88d3638SLiron Himi uint64_t ree_job_subset_id_3 : 16; 106c88d3638SLiron Himi } cn98xx; 107c88d3638SLiron Himi }; 108c88d3638SLiron Himi 109c88d3638SLiron Himi int __roc_api roc_ree_dev_init(struct roc_ree_vf *vf); 110c88d3638SLiron Himi int __roc_api roc_ree_dev_fini(struct roc_ree_vf *vf); 111c88d3638SLiron Himi int __roc_api roc_ree_queues_attach(struct roc_ree_vf *vf, uint8_t nb_queues); 112c88d3638SLiron Himi int __roc_api roc_ree_queues_detach(struct roc_ree_vf *vf); 113c88d3638SLiron Himi int __roc_api roc_ree_msix_offsets_get(struct roc_ree_vf *vf); 114c88d3638SLiron Himi int __roc_api roc_ree_config_lf(struct roc_ree_vf *vf, uint8_t lf, uint8_t pri, 115c88d3638SLiron Himi uint32_t size); 116c88d3638SLiron Himi int __roc_api roc_ree_af_reg_read(struct roc_ree_vf *vf, uint64_t reg, 117c88d3638SLiron Himi uint64_t *val); 118c88d3638SLiron Himi int __roc_api roc_ree_af_reg_write(struct roc_ree_vf *vf, uint64_t reg, 119c88d3638SLiron Himi uint64_t val); 120c88d3638SLiron Himi int __roc_api roc_ree_rule_db_get(struct roc_ree_vf *vf, char *rule_db, 121c88d3638SLiron Himi uint32_t rule_db_len, char *rule_dbi, 122c88d3638SLiron Himi uint32_t rule_dbi_len); 123c88d3638SLiron Himi int __roc_api roc_ree_rule_db_len_get(struct roc_ree_vf *vf, 124c88d3638SLiron Himi uint32_t *rule_db_len, 125c88d3638SLiron Himi uint32_t *rule_dbi_len); 126c88d3638SLiron Himi int __roc_api roc_ree_rule_db_prog(struct roc_ree_vf *vf, const char *rule_db, 127c88d3638SLiron Himi uint32_t rule_db_len, const char *rule_dbi, 128c88d3638SLiron Himi uint32_t rule_dbi_len); 129c88d3638SLiron Himi uintptr_t __roc_api roc_ree_qp_get_base(struct roc_ree_vf *vf, uint16_t qp_id); 130c88d3638SLiron Himi void __roc_api roc_ree_err_intr_unregister(struct roc_ree_vf *vf); 131c88d3638SLiron Himi int __roc_api roc_ree_err_intr_register(struct roc_ree_vf *vf); 132c88d3638SLiron Himi int __roc_api roc_ree_iq_enable(struct roc_ree_vf *vf, 133c88d3638SLiron Himi const struct roc_ree_qp *qp, uint8_t pri, 134c88d3638SLiron Himi uint32_t size_div128); 135c88d3638SLiron Himi void __roc_api roc_ree_iq_disable(struct roc_ree_qp *qp); 136c88d3638SLiron Himi 137c88d3638SLiron Himi #endif /* _ROC_REE_H_ */ 138