xref: /dpdk/drivers/common/cnxk/roc_ree.h (revision 7557e3f5b9facc77247e59ad04ae99f47b0ddb3d)
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