xref: /dpdk/drivers/common/cnxk/roc_nix.h (revision 03b152389fb15f96e25d9acd87b84c9c22cf8b2b)
18dcdf319SJerin Jacob /* SPDX-License-Identifier: BSD-3-Clause
28dcdf319SJerin Jacob  * Copyright(C) 2021 Marvell.
38dcdf319SJerin Jacob  */
48dcdf319SJerin Jacob 
58dcdf319SJerin Jacob #ifndef _ROC_NIX_H_
68dcdf319SJerin Jacob #define _ROC_NIX_H_
78dcdf319SJerin Jacob 
88dcdf319SJerin Jacob /* Constants */
97a63d75eSSunil Kumar Kori #define ROC_NIX_BPF_PER_PFFUNC	      64
10b609507bSSunil Kumar Kori #define ROC_NIX_BPF_ID_INVALID	      0xFFFF
11b7cb2203SSunil Kumar Kori #define ROC_NIX_BPF_LEVEL_IDX_INVALID 0xFF
1205a944feSSunil Kumar Kori #define ROC_NIX_BPF_LEVEL_MAX	      3
13c8881e6eSSunil Kumar Kori #define ROC_NIX_BPF_STATS_MAX	      12
1467e1cbf3SRakesh Kudurumalla #define ROC_NIX_MTR_ID_INVALID	      UINT32_MAX
15cc90e35bSHarman Kalra #define ROC_NIX_PFC_CLASS_INVALID     UINT8_MAX
16641e1024SSatha Rao #define ROC_NIX_SQB_THRESH	      30U
171134d758SPavan Nikhilesh #define ROC_NIX_SQB_SLACK	      12U
183742b8d5SSunil Kumar Kori #define ROC_NIX_AURA_THRESH	      95U
19b7cb2203SSunil Kumar Kori 
204d00b8c6SSatha Rao /* Reserved interface types for BPID allocation */
214d00b8c6SSatha Rao #define ROC_NIX_INTF_TYPE_CGX  0
224d00b8c6SSatha Rao #define ROC_NIX_INTF_TYPE_LBK  1
234d00b8c6SSatha Rao #define ROC_NIX_INTF_TYPE_SDP  2
244d00b8c6SSatha Rao #define ROC_NIX_INTF_TYPE_CPT  3
254d00b8c6SSatha Rao #define ROC_NIX_INTF_TYPE_RSVD 4
264d00b8c6SSatha Rao 
274d00b8c6SSatha Rao /* Application based types for BPID allocation, start from end (255 unused rsvd) */
284d00b8c6SSatha Rao #define ROC_NIX_INTF_TYPE_CPT_NIX 254
294d00b8c6SSatha Rao #define ROC_NIX_INTF_TYPE_SSO     253
304d00b8c6SSatha Rao 
318dcdf319SJerin Jacob enum roc_nix_rss_reta_sz {
328dcdf319SJerin Jacob 	ROC_NIX_RSS_RETA_SZ_64 = 64,
338dcdf319SJerin Jacob 	ROC_NIX_RSS_RETA_SZ_128 = 128,
348dcdf319SJerin Jacob 	ROC_NIX_RSS_RETA_SZ_256 = 256,
358dcdf319SJerin Jacob };
368dcdf319SJerin Jacob 
378dcdf319SJerin Jacob enum roc_nix_sq_max_sqe_sz {
388dcdf319SJerin Jacob 	roc_nix_maxsqesz_w16 = NIX_MAXSQESZ_W16,
398dcdf319SJerin Jacob 	roc_nix_maxsqesz_w8 = NIX_MAXSQESZ_W8,
408dcdf319SJerin Jacob };
418dcdf319SJerin Jacob 
42da57d458SSunil Kumar Kori enum roc_nix_fc_mode {
43da57d458SSunil Kumar Kori 	ROC_NIX_FC_NONE = 0,
44da57d458SSunil Kumar Kori 	ROC_NIX_FC_RX,
45da57d458SSunil Kumar Kori 	ROC_NIX_FC_TX,
46da57d458SSunil Kumar Kori 	ROC_NIX_FC_FULL
47da57d458SSunil Kumar Kori };
48da57d458SSunil Kumar Kori 
4962240569SSunil Kumar Kori enum roc_nix_vlan_type {
5062240569SSunil Kumar Kori 	ROC_NIX_VLAN_TYPE_INNER = 0x01,
5162240569SSunil Kumar Kori 	ROC_NIX_VLAN_TYPE_OUTER = 0x02,
5262240569SSunil Kumar Kori };
5362240569SSunil Kumar Kori 
54b7cb2203SSunil Kumar Kori enum roc_nix_bpf_level_flag {
55b7cb2203SSunil Kumar Kori 	ROC_NIX_BPF_LEVEL_F_LEAF = BIT(0),
56b7cb2203SSunil Kumar Kori 	ROC_NIX_BPF_LEVEL_F_MID = BIT(1),
57b7cb2203SSunil Kumar Kori 	ROC_NIX_BPF_LEVEL_F_TOP = BIT(2),
58b7cb2203SSunil Kumar Kori };
59b7cb2203SSunil Kumar Kori 
60ac35d4bfSSunil Kumar Kori enum roc_nix_bpf_precolor_tbl_size {
61ac35d4bfSSunil Kumar Kori 	ROC_NIX_BPF_PRECOLOR_TBL_SIZE_GEN = 16,
62ac35d4bfSSunil Kumar Kori 	ROC_NIX_BPF_PRECOLOR_TBL_SIZE_VLAN = 16,
63ac35d4bfSSunil Kumar Kori 	ROC_NIX_BPF_PRECOLOR_TBL_SIZE_DSCP = 64,
64ac35d4bfSSunil Kumar Kori };
65ac35d4bfSSunil Kumar Kori 
664ad8bc2fSSunil Kumar Kori enum roc_nix_bpf_pc_mode {
674ad8bc2fSSunil Kumar Kori 	ROC_NIX_BPF_PC_MODE_VLAN_INNER,
684ad8bc2fSSunil Kumar Kori 	ROC_NIX_BPF_PC_MODE_VLAN_OUTER,
694ad8bc2fSSunil Kumar Kori 	ROC_NIX_BPF_PC_MODE_DSCP_INNER,
704ad8bc2fSSunil Kumar Kori 	ROC_NIX_BPF_PC_MODE_DSCP_OUTER,
714ad8bc2fSSunil Kumar Kori 	ROC_NIX_BPF_PC_MODE_GEN_INNER,
724ad8bc2fSSunil Kumar Kori 	ROC_NIX_BPF_PC_MODE_GEN_OUTER
734ad8bc2fSSunil Kumar Kori };
744ad8bc2fSSunil Kumar Kori 
754ad8bc2fSSunil Kumar Kori enum roc_nix_bpf_color {
764ad8bc2fSSunil Kumar Kori 	ROC_NIX_BPF_COLOR_GREEN,
774ad8bc2fSSunil Kumar Kori 	ROC_NIX_BPF_COLOR_YELLOW,
784ad8bc2fSSunil Kumar Kori 	ROC_NIX_BPF_COLOR_RED,
794ad8bc2fSSunil Kumar Kori 	ROC_NIX_BPF_COLOR_MAX
804ad8bc2fSSunil Kumar Kori };
814ad8bc2fSSunil Kumar Kori 
824ad8bc2fSSunil Kumar Kori enum roc_nix_bpf_algo {
834ad8bc2fSSunil Kumar Kori 	ROC_NIX_BPF_ALGO_NONE,
844ad8bc2fSSunil Kumar Kori 	ROC_NIX_BPF_ALGO_2698,
854ad8bc2fSSunil Kumar Kori 	ROC_NIX_BPF_ALGO_4115,
864ad8bc2fSSunil Kumar Kori 	ROC_NIX_BPF_ALGO_2697
874ad8bc2fSSunil Kumar Kori };
884ad8bc2fSSunil Kumar Kori 
894ad8bc2fSSunil Kumar Kori enum roc_nix_bpf_lmode { ROC_NIX_BPF_LMODE_BYTE, ROC_NIX_BPF_LMODE_PACKET };
904ad8bc2fSSunil Kumar Kori 
914ad8bc2fSSunil Kumar Kori enum roc_nix_bpf_action {
924ad8bc2fSSunil Kumar Kori 	ROC_NIX_BPF_ACTION_PASS,
934ad8bc2fSSunil Kumar Kori 	ROC_NIX_BPF_ACTION_DROP,
944ad8bc2fSSunil Kumar Kori 	ROC_NIX_BPF_ACTION_RED
954ad8bc2fSSunil Kumar Kori };
964ad8bc2fSSunil Kumar Kori 
97c8881e6eSSunil Kumar Kori enum roc_nix_bpf_stats {
98c8881e6eSSunil Kumar Kori 	ROC_NIX_BPF_GREEN_PKT_F_PASS = BIT_ULL(0),
99c8881e6eSSunil Kumar Kori 	ROC_NIX_BPF_GREEN_OCTS_F_PASS = BIT_ULL(1),
100c8881e6eSSunil Kumar Kori 	ROC_NIX_BPF_GREEN_PKT_F_DROP = BIT_ULL(2),
101c8881e6eSSunil Kumar Kori 	ROC_NIX_BPF_GREEN_OCTS_F_DROP = BIT_ULL(3),
102c8881e6eSSunil Kumar Kori 	ROC_NIX_BPF_YELLOW_PKT_F_PASS = BIT_ULL(4),
103c8881e6eSSunil Kumar Kori 	ROC_NIX_BPF_YELLOW_OCTS_F_PASS = BIT_ULL(5),
104c8881e6eSSunil Kumar Kori 	ROC_NIX_BPF_YELLOW_PKT_F_DROP = BIT_ULL(6),
105c8881e6eSSunil Kumar Kori 	ROC_NIX_BPF_YELLOW_OCTS_F_DROP = BIT_ULL(7),
106c8881e6eSSunil Kumar Kori 	ROC_NIX_BPF_RED_PKT_F_PASS = BIT_ULL(8),
107c8881e6eSSunil Kumar Kori 	ROC_NIX_BPF_RED_OCTS_F_PASS = BIT_ULL(9),
108c8881e6eSSunil Kumar Kori 	ROC_NIX_BPF_RED_PKT_F_DROP = BIT_ULL(10),
109c8881e6eSSunil Kumar Kori 	ROC_NIX_BPF_RED_OCTS_F_DROP = BIT_ULL(11),
110c8881e6eSSunil Kumar Kori };
111c8881e6eSSunil Kumar Kori 
1124ad8bc2fSSunil Kumar Kori struct roc_nix_bpf_cfg {
1134ad8bc2fSSunil Kumar Kori 	enum roc_nix_bpf_algo alg;
1144ad8bc2fSSunil Kumar Kori 	enum roc_nix_bpf_lmode lmode;
1154ad8bc2fSSunil Kumar Kori 	enum roc_nix_bpf_color icolor;
1164ad8bc2fSSunil Kumar Kori 	enum roc_nix_bpf_pc_mode pc_mode;
1174ad8bc2fSSunil Kumar Kori 	bool tnl_ena;
1184ad8bc2fSSunil Kumar Kori 	union {
1194ad8bc2fSSunil Kumar Kori 		/* Valid when *alg* is set to ROC_NIX_BPF_ALGO_2697. */
1204ad8bc2fSSunil Kumar Kori 		struct {
1214ad8bc2fSSunil Kumar Kori 			uint64_t cir;
1224ad8bc2fSSunil Kumar Kori 			uint64_t cbs;
1234ad8bc2fSSunil Kumar Kori 			uint64_t ebs;
1244ad8bc2fSSunil Kumar Kori 		} algo2697;
1254ad8bc2fSSunil Kumar Kori 
1264ad8bc2fSSunil Kumar Kori 		/* Valid when *alg* is set to ROC_NIX_BPF_ALGO_2698. */
1274ad8bc2fSSunil Kumar Kori 		struct {
1284ad8bc2fSSunil Kumar Kori 			uint64_t cir;
1294ad8bc2fSSunil Kumar Kori 			uint64_t pir;
1304ad8bc2fSSunil Kumar Kori 			uint64_t cbs;
1314ad8bc2fSSunil Kumar Kori 			uint64_t pbs;
1324ad8bc2fSSunil Kumar Kori 		} algo2698;
1334ad8bc2fSSunil Kumar Kori 
1344ad8bc2fSSunil Kumar Kori 		/* Valid when *alg* is set to ROC_NIX_BPF_ALGO_4115. */
1354ad8bc2fSSunil Kumar Kori 		struct {
1364ad8bc2fSSunil Kumar Kori 			uint64_t cir;
1374ad8bc2fSSunil Kumar Kori 			uint64_t eir;
1384ad8bc2fSSunil Kumar Kori 			uint64_t cbs;
1394ad8bc2fSSunil Kumar Kori 			uint64_t ebs;
1404ad8bc2fSSunil Kumar Kori 		} algo4115;
1414ad8bc2fSSunil Kumar Kori 	};
1424ad8bc2fSSunil Kumar Kori 
1434ad8bc2fSSunil Kumar Kori 	enum roc_nix_bpf_action action[ROC_NIX_BPF_COLOR_MAX];
1444ad8bc2fSSunil Kumar Kori 
1454ad8bc2fSSunil Kumar Kori 	/* Reserved for future config*/
1464ad8bc2fSSunil Kumar Kori 	uint32_t rsvd[3];
1474ad8bc2fSSunil Kumar Kori };
1484ad8bc2fSSunil Kumar Kori 
1497a63d75eSSunil Kumar Kori struct roc_nix_bpf_objs {
1507a63d75eSSunil Kumar Kori 	uint16_t level;
1517a63d75eSSunil Kumar Kori 	uint16_t count;
1527a63d75eSSunil Kumar Kori 	uint16_t ids[ROC_NIX_BPF_PER_PFFUNC];
1537a63d75eSSunil Kumar Kori };
1547a63d75eSSunil Kumar Kori 
15533961101SSunil Kumar Kori struct roc_nix_bpf_precolor {
15633961101SSunil Kumar Kori #define ROC_NIX_BPF_PRE_COLOR_MAX 64
15733961101SSunil Kumar Kori 	uint8_t count;
15833961101SSunil Kumar Kori 	enum roc_nix_bpf_pc_mode mode;
15933961101SSunil Kumar Kori 	enum roc_nix_bpf_color color[ROC_NIX_BPF_PRE_COLOR_MAX];
16033961101SSunil Kumar Kori };
16133961101SSunil Kumar Kori 
16262240569SSunil Kumar Kori struct roc_nix_vlan_config {
16362240569SSunil Kumar Kori 	uint32_t type;
16462240569SSunil Kumar Kori 	union {
16562240569SSunil Kumar Kori 		struct {
16662240569SSunil Kumar Kori 			uint32_t vtag_inner;
16762240569SSunil Kumar Kori 			uint32_t vtag_outer;
16862240569SSunil Kumar Kori 		} vlan;
16962240569SSunil Kumar Kori 
17062240569SSunil Kumar Kori 		struct {
17162240569SSunil Kumar Kori 			int idx_inner;
17262240569SSunil Kumar Kori 			int idx_outer;
17362240569SSunil Kumar Kori 		} mcam;
17462240569SSunil Kumar Kori 	};
17562240569SSunil Kumar Kori };
17662240569SSunil Kumar Kori 
177da57d458SSunil Kumar Kori struct roc_nix_fc_cfg {
17858debb81SNithin Dabilpuram #define ROC_NIX_FC_RXCHAN_CFG 0
17958debb81SNithin Dabilpuram #define ROC_NIX_FC_CQ_CFG     1
18058debb81SNithin Dabilpuram #define ROC_NIX_FC_TM_CFG     2
181174f2f35SSunil Kumar Kori #define ROC_NIX_FC_RQ_CFG     3
18258debb81SNithin Dabilpuram 	uint8_t type;
183da57d458SSunil Kumar Kori 	union {
184da57d458SSunil Kumar Kori 		struct {
185da57d458SSunil Kumar Kori 			bool enable;
186da57d458SSunil Kumar Kori 		} rxchan_cfg;
187da57d458SSunil Kumar Kori 
188da57d458SSunil Kumar Kori 		struct {
189da57d458SSunil Kumar Kori 			uint32_t rq;
19020d02329SSunil Kumar Kori 			uint16_t tc;
191da57d458SSunil Kumar Kori 			uint16_t cq_drop;
192da57d458SSunil Kumar Kori 			bool enable;
193da57d458SSunil Kumar Kori 		} cq_cfg;
19458debb81SNithin Dabilpuram 
19558debb81SNithin Dabilpuram 		struct {
196174f2f35SSunil Kumar Kori 			uint32_t rq;
197174f2f35SSunil Kumar Kori 			uint16_t tc;
198174f2f35SSunil Kumar Kori 			uint16_t cq_drop;
199174f2f35SSunil Kumar Kori 			uint64_t pool;
200a6fd3855SSunil Kumar Kori 			uint64_t spb_pool;
2013742b8d5SSunil Kumar Kori 			uint64_t pool_drop_pct;
20254f14e04SSunil Kumar Kori 			uint64_t spb_pool_drop_pct;
20354f14e04SSunil Kumar Kori 			bool enable;
204174f2f35SSunil Kumar Kori 		} rq_cfg;
205174f2f35SSunil Kumar Kori 
206174f2f35SSunil Kumar Kori 		struct {
20720d02329SSunil Kumar Kori 			uint32_t sq;
20820d02329SSunil Kumar Kori 			uint16_t tc;
20958debb81SNithin Dabilpuram 			bool enable;
21058debb81SNithin Dabilpuram 		} tm_cfg;
211da57d458SSunil Kumar Kori 	};
212da57d458SSunil Kumar Kori };
213da57d458SSunil Kumar Kori 
21420d02329SSunil Kumar Kori struct roc_nix_pfc_cfg {
21520d02329SSunil Kumar Kori 	enum roc_nix_fc_mode mode;
21620d02329SSunil Kumar Kori 	/* For SET, tc must be [0, 15].
21720d02329SSunil Kumar Kori 	 * For GET, TC will represent bitmap
21820d02329SSunil Kumar Kori 	 */
21920d02329SSunil Kumar Kori 	uint16_t tc;
22020d02329SSunil Kumar Kori };
22120d02329SSunil Kumar Kori 
222dfa267ecSSunil Kumar Kori struct roc_nix_eeprom_info {
223dfa267ecSSunil Kumar Kori #define ROC_NIX_EEPROM_SIZE 256
224dfa267ecSSunil Kumar Kori 	uint16_t sff_id;
225dfa267ecSSunil Kumar Kori 	uint8_t buf[ROC_NIX_EEPROM_SIZE];
226dfa267ecSSunil Kumar Kori };
227dfa267ecSSunil Kumar Kori 
228c443e0d3SSunil Kumar Kori /* Range to adjust PTP frequency. Valid range is
229c443e0d3SSunil Kumar Kori  * (-ROC_NIX_PTP_FREQ_ADJUST, ROC_NIX_PTP_FREQ_ADJUST)
230c443e0d3SSunil Kumar Kori  */
231c443e0d3SSunil Kumar Kori #define ROC_NIX_PTP_FREQ_ADJUST (1 << 9)
232c443e0d3SSunil Kumar Kori 
2338dcdf319SJerin Jacob /* NIX LF RX offload configuration flags.
2348dcdf319SJerin Jacob  * These are input flags to roc_nix_lf_alloc:rx_cfg
2358dcdf319SJerin Jacob  */
2368dcdf319SJerin Jacob #define ROC_NIX_LF_RX_CFG_DROP_RE     BIT_ULL(32)
2378dcdf319SJerin Jacob #define ROC_NIX_LF_RX_CFG_L2_LEN_ERR  BIT_ULL(33)
2388dcdf319SJerin Jacob #define ROC_NIX_LF_RX_CFG_IP6_UDP_OPT BIT_ULL(34)
2398dcdf319SJerin Jacob #define ROC_NIX_LF_RX_CFG_DIS_APAD    BIT_ULL(35)
2408dcdf319SJerin Jacob #define ROC_NIX_LF_RX_CFG_CSUM_IL4    BIT_ULL(36)
2418dcdf319SJerin Jacob #define ROC_NIX_LF_RX_CFG_CSUM_OL4    BIT_ULL(37)
2428dcdf319SJerin Jacob #define ROC_NIX_LF_RX_CFG_LEN_IL4     BIT_ULL(38)
2438dcdf319SJerin Jacob #define ROC_NIX_LF_RX_CFG_LEN_IL3     BIT_ULL(39)
2448dcdf319SJerin Jacob #define ROC_NIX_LF_RX_CFG_LEN_OL4     BIT_ULL(40)
2458dcdf319SJerin Jacob #define ROC_NIX_LF_RX_CFG_LEN_OL3     BIT_ULL(41)
2468dcdf319SJerin Jacob 
24790870a66SRakesh Kudurumalla #define ROC_NIX_LF_RX_CFG_RX_ERROR_MASK 0xFFFFFFFFFFF80000
24890870a66SRakesh Kudurumalla #define ROC_NIX_RE_PARTIAL		BIT_ULL(1)
24990870a66SRakesh Kudurumalla #define ROC_NIX_RE_JABBER		BIT_ULL(2)
25090870a66SRakesh Kudurumalla #define ROC_NIX_RE_CRC8_PCH		BIT_ULL(5)
25190870a66SRakesh Kudurumalla #define ROC_NIX_RE_CNC_INV		BIT_ULL(6)
25290870a66SRakesh Kudurumalla #define ROC_NIX_RE_FCS			BIT_ULL(7)
25390870a66SRakesh Kudurumalla #define ROC_NIX_RE_FCS_RCV		BIT_ULL(8)
25490870a66SRakesh Kudurumalla #define ROC_NIX_RE_TERMINATE		BIT_ULL(9)
25590870a66SRakesh Kudurumalla #define ROC_NIX_RE_MACSEC		BIT_ULL(10)
25690870a66SRakesh Kudurumalla #define ROC_NIX_RE_RX_CTL		BIT_ULL(11)
25790870a66SRakesh Kudurumalla #define ROC_NIX_RE_SKIP			BIT_ULL(12)
25890870a66SRakesh Kudurumalla #define ROC_NIX_RE_DMAPKT		BIT_ULL(15)
25990870a66SRakesh Kudurumalla #define ROC_NIX_RE_UNDERSIZE		BIT_ULL(16)
26090870a66SRakesh Kudurumalla #define ROC_NIX_RE_OVERSIZE		BIT_ULL(17)
26190870a66SRakesh Kudurumalla #define ROC_NIX_RE_OL2_LENMISM		BIT_ULL(18)
26290870a66SRakesh Kudurumalla 
2638dcdf319SJerin Jacob /* Group 0 will be used for RSS, 1 -7 will be used for npc_flow RSS action*/
2648dcdf319SJerin Jacob #define ROC_NIX_RSS_GROUP_DEFAULT    0
2658dcdf319SJerin Jacob #define ROC_NIX_RSS_GRPS	     8
2668dcdf319SJerin Jacob #define ROC_NIX_RSS_RETA_MAX	     ROC_NIX_RSS_RETA_SZ_256
2678dcdf319SJerin Jacob #define ROC_NIX_RSS_KEY_LEN	     48 /* 352 Bits */
2686b7fcb7aSSatha Rao #define ROC_NIX_RSS_MCAM_IDX_DEFAULT (-1)
2698dcdf319SJerin Jacob 
2708dcdf319SJerin Jacob #define ROC_NIX_VWQE_MAX_SIZE_LOG2 11
2718dcdf319SJerin Jacob #define ROC_NIX_VWQE_MIN_SIZE_LOG2 2
27219a2b549SJerin Jacob 
273218d022eSJerin Jacob struct roc_nix_stats {
274218d022eSJerin Jacob 	/* Rx */
275218d022eSJerin Jacob 	uint64_t rx_octs;
276218d022eSJerin Jacob 	uint64_t rx_ucast;
277218d022eSJerin Jacob 	uint64_t rx_bcast;
278218d022eSJerin Jacob 	uint64_t rx_mcast;
279218d022eSJerin Jacob 	uint64_t rx_drop;
280218d022eSJerin Jacob 	uint64_t rx_drop_octs;
281218d022eSJerin Jacob 	uint64_t rx_fcs;
282218d022eSJerin Jacob 	uint64_t rx_err;
283218d022eSJerin Jacob 	uint64_t rx_drop_bcast;
284218d022eSJerin Jacob 	uint64_t rx_drop_mcast;
285218d022eSJerin Jacob 	uint64_t rx_drop_l3_bcast;
286218d022eSJerin Jacob 	uint64_t rx_drop_l3_mcast;
287218d022eSJerin Jacob 	/* Tx */
288218d022eSJerin Jacob 	uint64_t tx_ucast;
289218d022eSJerin Jacob 	uint64_t tx_bcast;
290218d022eSJerin Jacob 	uint64_t tx_mcast;
291218d022eSJerin Jacob 	uint64_t tx_drop;
292218d022eSJerin Jacob 	uint64_t tx_octs;
293218d022eSJerin Jacob };
294218d022eSJerin Jacob 
295218d022eSJerin Jacob struct roc_nix_stats_queue {
296218d022eSJerin Jacob 	union {
297218d022eSJerin Jacob 		struct {
298218d022eSJerin Jacob 			/* Rx */
299218d022eSJerin Jacob 			uint64_t rx_pkts;
300218d022eSJerin Jacob 			uint64_t rx_octs;
301218d022eSJerin Jacob 			uint64_t rx_drop_pkts;
302218d022eSJerin Jacob 			uint64_t rx_drop_octs;
303218d022eSJerin Jacob 			uint64_t rx_error_pkts;
304218d022eSJerin Jacob 		};
305218d022eSJerin Jacob 		struct {
306218d022eSJerin Jacob 			/* Tx */
307218d022eSJerin Jacob 			uint64_t tx_pkts;
308218d022eSJerin Jacob 			uint64_t tx_octs;
309218d022eSJerin Jacob 			uint64_t tx_drop_pkts;
310218d022eSJerin Jacob 			uint64_t tx_drop_octs;
3113ae7a30eSSatha Rao 			uint64_t tx_age_drop_pkts;
3123ae7a30eSSatha Rao 			uint64_t tx_age_drop_octs;
313218d022eSJerin Jacob 		};
314218d022eSJerin Jacob 	};
315218d022eSJerin Jacob };
316218d022eSJerin Jacob 
31719a2b549SJerin Jacob struct roc_nix_rq {
31819a2b549SJerin Jacob 	/* Input parameters */
31919a2b549SJerin Jacob 	uint16_t qid;
320b059bbb8SKommula Shiva Shankar 	uint16_t cqid; /* Not valid when SSO is enabled */
32152511cd2SSunil Kumar Kori 	uint16_t bpf_id;
32219a2b549SJerin Jacob 	uint64_t aura_handle;
32319a2b549SJerin Jacob 	bool ipsech_ena;
32419a2b549SJerin Jacob 	uint16_t first_skip;
32519a2b549SJerin Jacob 	uint16_t later_skip;
32619a2b549SJerin Jacob 	uint16_t wqe_skip;
32719a2b549SJerin Jacob 	uint16_t lpb_size;
32819a2b549SJerin Jacob 	uint32_t tag_mask;
32919a2b549SJerin Jacob 	uint32_t flow_tag_width;
33019a2b549SJerin Jacob 	uint8_t tt;	/* Valid when SSO is enabled */
33119a2b549SJerin Jacob 	uint16_t hwgrp; /* Valid when SSO is enabled */
33219a2b549SJerin Jacob 	bool sso_ena;
33319a2b549SJerin Jacob 	bool vwqe_ena;
33419a2b549SJerin Jacob 	uint64_t spb_aura_handle; /* Valid when SPB is enabled */
33519a2b549SJerin Jacob 	uint16_t spb_size;	  /* Valid when SPB is enabled */
33619a2b549SJerin Jacob 	bool spb_ena;
33719a2b549SJerin Jacob 	uint8_t vwqe_first_skip;
33819a2b549SJerin Jacob 	uint32_t vwqe_max_sz_exp;
33919a2b549SJerin Jacob 	uint64_t vwqe_wait_tmo;
34019a2b549SJerin Jacob 	uint64_t vwqe_aura_handle;
34195bec117SSatha Rao 	/* Average LPB aura level drop threshold for RED */
34295bec117SSatha Rao 	uint8_t red_drop;
34395bec117SSatha Rao 	/* Average LPB aura level pass threshold for RED */
34495bec117SSatha Rao 	uint8_t red_pass;
34595bec117SSatha Rao 	/* Average SPB aura level drop threshold for RED */
34695bec117SSatha Rao 	uint8_t spb_red_drop;
34795bec117SSatha Rao 	/* Average SPB aura level pass threshold for RED */
3485df46167SSunil Kumar Kori 	uint8_t xqe_red_pass;
3495df46167SSunil Kumar Kori 	/* Average xqe level drop threshold for RED */
3505df46167SSunil Kumar Kori 	uint8_t xqe_red_drop;
3515df46167SSunil Kumar Kori 	/* Average xqe level pass threshold for RED */
35295bec117SSatha Rao 	uint8_t spb_red_pass;
353c8c967e1SNithin Dabilpuram 	/* LPB aura drop enable */
354c8c967e1SNithin Dabilpuram 	bool lpb_drop_ena;
355c8c967e1SNithin Dabilpuram 	/* SPB aura drop enable */
356c8c967e1SNithin Dabilpuram 	bool spb_drop_ena;
35719a2b549SJerin Jacob 	/* End of Input parameters */
35819a2b549SJerin Jacob 	struct roc_nix *roc_nix;
3590f3f3ad8SNithin Dabilpuram 	uint64_t meta_aura_handle;
3603c100e0eSNithin Dabilpuram 	uint16_t inl_dev_refs;
36178fb5efeSNithin Dabilpuram 	uint8_t tc;
36219a2b549SJerin Jacob };
36319a2b549SJerin Jacob 
36419a2b549SJerin Jacob struct roc_nix_cq {
36519a2b549SJerin Jacob 	/* Input parameters */
36619a2b549SJerin Jacob 	uint16_t qid;
3679f8f1803SNithin Dabilpuram 	uint32_t nb_desc;
368e07ca13fSKommula Shiva Shankar 	uint8_t stash_thresh;
36919a2b549SJerin Jacob 	/* End of Input parameters */
37019a2b549SJerin Jacob 	uint16_t drop_thresh;
37119a2b549SJerin Jacob 	struct roc_nix *roc_nix;
37219a2b549SJerin Jacob 	uintptr_t door;
37319a2b549SJerin Jacob 	int64_t *status;
37419a2b549SJerin Jacob 	uint64_t wdata;
37519a2b549SJerin Jacob 	void *desc_base;
37619a2b549SJerin Jacob 	uint32_t qmask;
37719a2b549SJerin Jacob 	uint32_t head;
37819a2b549SJerin Jacob };
37919a2b549SJerin Jacob 
380ae060709SJerin Jacob struct roc_nix_sq {
381ae060709SJerin Jacob 	/* Input parameters */
382ae060709SJerin Jacob 	enum roc_nix_sq_max_sqe_sz max_sqe_sz;
383ae060709SJerin Jacob 	uint32_t nb_desc;
384ae060709SJerin Jacob 	uint16_t qid;
38587254db8SKommula Shiva Shankar 	uint16_t cqid;
386ba6855a0SKommula Shiva Shankar 	uint16_t cq_drop_thresh;
3876b7fcb7aSSatha Rao 	bool sso_ena;
38887254db8SKommula Shiva Shankar 	bool cq_ena;
389b714421eSSatha Rao 	uint8_t fc_hyst_bits;
390ae060709SJerin Jacob 	/* End of Input parameters */
391ae060709SJerin Jacob 	uint16_t sqes_per_sqb_log2;
392ae060709SJerin Jacob 	struct roc_nix *roc_nix;
393ae060709SJerin Jacob 	uint64_t aura_handle;
394ae060709SJerin Jacob 	int16_t nb_sqb_bufs_adj;
395ae060709SJerin Jacob 	uint16_t nb_sqb_bufs;
396097835ecSPavan Nikhilesh 	uint16_t aura_sqb_bufs;
397ae060709SJerin Jacob 	plt_iova_t io_addr;
398ae060709SJerin Jacob 	void *lmt_addr;
399ae060709SJerin Jacob 	void *sqe_mem;
400ae060709SJerin Jacob 	void *fc;
401cc90e35bSHarman Kalra 	uint8_t tc;
402f6e0d835SRakesh Kudurumalla 	bool enable;
403ae060709SJerin Jacob };
404ae060709SJerin Jacob 
405313cc418SSunil Kumar Kori struct roc_nix_link_info {
406313cc418SSunil Kumar Kori 	uint64_t status : 1;
407313cc418SSunil Kumar Kori 	uint64_t full_duplex : 1;
408313cc418SSunil Kumar Kori 	uint64_t lmac_type_id : 4;
409313cc418SSunil Kumar Kori 	uint64_t speed : 20;
410313cc418SSunil Kumar Kori 	uint64_t autoneg : 1;
411313cc418SSunil Kumar Kori 	uint64_t fec : 2;
412313cc418SSunil Kumar Kori 	uint64_t port : 8;
413313cc418SSunil Kumar Kori };
414313cc418SSunil Kumar Kori 
4154efa6e82SSatha Rao /** Maximum name length for extended statistics counters */
4164efa6e82SSatha Rao #define ROC_NIX_XSTATS_NAME_SIZE 64
4174efa6e82SSatha Rao 
4184efa6e82SSatha Rao struct roc_nix_xstat {
4194efa6e82SSatha Rao 	uint64_t id;	/**< The index in xstats name array. */
4204efa6e82SSatha Rao 	uint64_t value; /**< The statistic counter value. */
4214efa6e82SSatha Rao };
4224efa6e82SSatha Rao 
4234efa6e82SSatha Rao struct roc_nix_xstat_name {
4244efa6e82SSatha Rao 	char name[ROC_NIX_XSTATS_NAME_SIZE];
4254efa6e82SSatha Rao };
4264efa6e82SSatha Rao 
427bd02fe78SVidya Sagar Velumuri struct roc_nix_ipsec_cfg {
428bd02fe78SVidya Sagar Velumuri 	uint32_t sa_size;
429bd02fe78SVidya Sagar Velumuri 	uint32_t tag_const;
430bd02fe78SVidya Sagar Velumuri 	plt_iova_t iova;
431bd02fe78SVidya Sagar Velumuri 	uint16_t max_sa;
432bd02fe78SVidya Sagar Velumuri 	uint8_t tt;
433bd02fe78SVidya Sagar Velumuri };
434bd02fe78SVidya Sagar Velumuri 
435313cc418SSunil Kumar Kori /* Link status update callback */
436313cc418SSunil Kumar Kori typedef void (*link_status_t)(struct roc_nix *roc_nix,
437313cc418SSunil Kumar Kori 			      struct roc_nix_link_info *link);
438313cc418SSunil Kumar Kori 
439313cc418SSunil Kumar Kori /* PTP info update callback */
440313cc418SSunil Kumar Kori typedef int (*ptp_info_update_t)(struct roc_nix *roc_nix, bool enable);
441313cc418SSunil Kumar Kori 
442b7c31b6dSSatha Rao /* Queue Error get callback */
443b7c31b6dSSatha Rao typedef void (*q_err_get_t)(struct roc_nix *roc_nix, void *data);
444b7c31b6dSSatha Rao 
44502719901SHarman Kalra /* Link status get callback */
44602719901SHarman Kalra typedef void (*link_info_get_t)(struct roc_nix *roc_nix,
44702719901SHarman Kalra 				struct roc_nix_link_info *link);
44802719901SHarman Kalra 
449ec7c2f5aSShijith Thotton TAILQ_HEAD(roc_nix_list, roc_nix);
450ec7c2f5aSShijith Thotton 
4518dcdf319SJerin Jacob struct roc_nix {
4528dcdf319SJerin Jacob 	/* Input parameters */
4538dcdf319SJerin Jacob 	struct plt_pci_device *pci_dev;
4548dcdf319SJerin Jacob 	uint16_t port_id;
4558dcdf319SJerin Jacob 	bool rss_tag_as_xor;
4568dcdf319SJerin Jacob 	uint16_t max_sqb_count;
4578dcdf319SJerin Jacob 	enum roc_nix_rss_reta_sz reta_sz;
4588dcdf319SJerin Jacob 	bool enable_loop;
459b059bbb8SKommula Shiva Shankar 	bool tx_compl_ena;
4606b7fcb7aSSatha Rao 	bool hw_vlan_ins;
4616b7fcb7aSSatha Rao 	uint8_t lock_rx_ctx;
4621134d758SPavan Nikhilesh 	uint16_t sqb_slack;
463ee48f711SNithin Dabilpuram 	uint16_t outb_nb_crypto_qs;
4641134d758SPavan Nikhilesh 	uint32_t outb_nb_desc;
465fe5846bcSNithin Dabilpuram 	uint32_t ipsec_in_min_spi;
466fe5846bcSNithin Dabilpuram 	uint32_t ipsec_in_max_spi;
467fe5846bcSNithin Dabilpuram 	uint32_t ipsec_out_max_sa;
468902a4c02SSatha Rao 	uint32_t dwrr_mtu;
469a9207715SNithin Dabilpuram 	bool ipsec_out_sso_pffunc;
4701134d758SPavan Nikhilesh 	bool custom_sa_action;
4714fb24a62SRahul Bhansali 	bool local_meta_aura_ena;
4724fb24a62SRahul Bhansali 	uint32_t meta_buf_sz;
473747cd5e9SNithin Dabilpuram 	bool force_rx_aura_bp;
4747ea18718SRahul Bhansali 	bool custom_meta_aura_ena;
4754b8eb5bdSRahul Bhansali 	bool rx_inj_ena;
476*03b15238SSrujana Challa 	bool custom_inb_sa;
477eac95048SSatha Rao 	uint32_t root_sched_weight;
478*03b15238SSrujana Challa 	uint16_t inb_cfg_param1;
479*03b15238SSrujana Challa 	uint16_t inb_cfg_param2;
4808dcdf319SJerin Jacob 	/* End of input parameters */
4818dcdf319SJerin Jacob 	/* LMT line base for "Per Core Tx LMT line" mode*/
4828dcdf319SJerin Jacob 	uintptr_t lmt_base;
4838dcdf319SJerin Jacob 	bool io_enabled;
4848dcdf319SJerin Jacob 	bool rx_ptp_ena;
4858dcdf319SJerin Jacob 	uint16_t cints;
4864fb24a62SRahul Bhansali 	uint32_t buf_sz;
4874fb24a62SRahul Bhansali 	uint64_t meta_aura_handle;
4884fb24a62SRahul Bhansali 	uintptr_t meta_mempool;
489162c77c1SHarman Kalra 	uint16_t rep_cnt;
490162c77c1SHarman Kalra 	uint16_t rep_pfvf_map[MAX_PFVF_REP];
491ec7c2f5aSShijith Thotton 	TAILQ_ENTRY(roc_nix) next;
4928dcdf319SJerin Jacob 
4931c7a4d37SHarman Kalra #define ROC_NIX_MEM_SZ (6 * 1070)
4948dcdf319SJerin Jacob 	uint8_t reserved[ROC_NIX_MEM_SZ] __plt_cache_aligned;
4958dcdf319SJerin Jacob } __plt_cache_aligned;
4968dcdf319SJerin Jacob 
497dfa267ecSSunil Kumar Kori enum roc_nix_lso_tun_type {
498dfa267ecSSunil Kumar Kori 	ROC_NIX_LSO_TUN_V4V4,
499dfa267ecSSunil Kumar Kori 	ROC_NIX_LSO_TUN_V4V6,
500dfa267ecSSunil Kumar Kori 	ROC_NIX_LSO_TUN_V6V4,
501dfa267ecSSunil Kumar Kori 	ROC_NIX_LSO_TUN_V6V6,
502dfa267ecSSunil Kumar Kori 	ROC_NIX_LSO_TUN_MAX,
503dfa267ecSSunil Kumar Kori };
504dfa267ecSSunil Kumar Kori 
5056fe49f10SNithin Dabilpuram /* Restrict CN9K sched weight to have a minimum quantum */
5066fe49f10SNithin Dabilpuram #define ROC_NIX_CN9K_TM_RR_WEIGHT_MAX 255u
5076fe49f10SNithin Dabilpuram 
5086fe49f10SNithin Dabilpuram /* NIX TM Inlines */
5096fe49f10SNithin Dabilpuram static inline uint64_t
5106fe49f10SNithin Dabilpuram roc_nix_tm_max_sched_wt_get(void)
5116fe49f10SNithin Dabilpuram {
5126fe49f10SNithin Dabilpuram 	if (roc_model_is_cn9k())
5136fe49f10SNithin Dabilpuram 		return ROC_NIX_CN9K_TM_RR_WEIGHT_MAX;
5146fe49f10SNithin Dabilpuram 	else
5156fe49f10SNithin Dabilpuram 		return NIX_TM_RR_WEIGHT_MAX;
5166fe49f10SNithin Dabilpuram }
5176fe49f10SNithin Dabilpuram 
5186fe49f10SNithin Dabilpuram static inline uint64_t
5196fe49f10SNithin Dabilpuram roc_nix_tm_max_shaper_burst_get(void)
5206fe49f10SNithin Dabilpuram {
5216fe49f10SNithin Dabilpuram 	if (roc_model_is_cn9k())
5226fe49f10SNithin Dabilpuram 		return NIX_CN9K_TM_MAX_SHAPER_BURST;
5236fe49f10SNithin Dabilpuram 	else
5246fe49f10SNithin Dabilpuram 		return NIX_TM_MAX_SHAPER_BURST;
5256fe49f10SNithin Dabilpuram }
5266fe49f10SNithin Dabilpuram 
5278dcdf319SJerin Jacob /* Dev */
5288dcdf319SJerin Jacob int __roc_api roc_nix_dev_init(struct roc_nix *roc_nix);
5298dcdf319SJerin Jacob int __roc_api roc_nix_dev_fini(struct roc_nix *roc_nix);
5308dcdf319SJerin Jacob 
5318dcdf319SJerin Jacob /* Type */
5328dcdf319SJerin Jacob bool __roc_api roc_nix_is_lbk(struct roc_nix *roc_nix);
53354ec7c87SHarman Kalra bool __roc_api roc_nix_is_esw(struct roc_nix *roc_nix);
5348dcdf319SJerin Jacob bool __roc_api roc_nix_is_sdp(struct roc_nix *roc_nix);
5358dcdf319SJerin Jacob bool __roc_api roc_nix_is_pf(struct roc_nix *roc_nix);
5368dcdf319SJerin Jacob bool __roc_api roc_nix_is_vf_or_sdp(struct roc_nix *roc_nix);
5378dcdf319SJerin Jacob int __roc_api roc_nix_get_base_chan(struct roc_nix *roc_nix);
538607a1546SRahul Bhansali uint8_t __roc_api roc_nix_get_rx_chan_cnt(struct roc_nix *roc_nix);
5398dcdf319SJerin Jacob int __roc_api roc_nix_get_pf(struct roc_nix *roc_nix);
5408dcdf319SJerin Jacob int __roc_api roc_nix_get_vf(struct roc_nix *roc_nix);
5418dcdf319SJerin Jacob uint16_t __roc_api roc_nix_get_pf_func(struct roc_nix *roc_nix);
5428dcdf319SJerin Jacob uint16_t __roc_api roc_nix_get_vwqe_interval(struct roc_nix *roc_nix);
5438dcdf319SJerin Jacob int __roc_api roc_nix_max_pkt_len(struct roc_nix *roc_nix);
5448dcdf319SJerin Jacob 
5458dcdf319SJerin Jacob /* LF ops */
5468dcdf319SJerin Jacob int __roc_api roc_nix_lf_alloc(struct roc_nix *roc_nix, uint32_t nb_rxq,
5478dcdf319SJerin Jacob 			       uint32_t nb_txq, uint64_t rx_cfg);
5488dcdf319SJerin Jacob int __roc_api roc_nix_lf_free(struct roc_nix *roc_nix);
549bd02fe78SVidya Sagar Velumuri int __roc_api roc_nix_lf_inl_ipsec_cfg(struct roc_nix *roc_nix,
550bd02fe78SVidya Sagar Velumuri 				       struct roc_nix_ipsec_cfg *cfg, bool enb);
5512635c25dSSrujana Challa int __roc_api roc_nix_cpt_ctx_cache_sync(struct roc_nix *roc_nix);
552c89e976cSNithin Dabilpuram int __roc_api roc_nix_rx_drop_re_set(struct roc_nix *roc_nix, bool ena);
5538dcdf319SJerin Jacob 
5545aef7fbdSJerin Jacob /* Debug */
5555aef7fbdSJerin Jacob int __roc_api roc_nix_lf_get_reg_count(struct roc_nix *roc_nix);
5565aef7fbdSJerin Jacob int __roc_api roc_nix_lf_reg_dump(struct roc_nix *roc_nix, uint64_t *data);
5574006ac1fSRakesh Kudurumalla int __roc_api roc_nix_queues_ctx_dump(struct roc_nix *roc_nix, FILE *file);
558c758279fSRakesh Kudurumalla void __roc_api roc_nix_cqe_dump(FILE *file, const struct nix_cqe_hdr_s *cq);
5594006ac1fSRakesh Kudurumalla void __roc_api roc_nix_rq_dump(struct roc_nix_rq *rq, FILE *file);
5604006ac1fSRakesh Kudurumalla void __roc_api roc_nix_cq_dump(struct roc_nix_cq *cq, FILE *file);
5614006ac1fSRakesh Kudurumalla void __roc_api roc_nix_sq_dump(struct roc_nix_sq *sq, FILE *file);
562656bb5a3SSatha Rao int __roc_api roc_nix_sq_desc_dump(struct roc_nix *roc_nix, uint16_t q, uint16_t offset,
563656bb5a3SSatha Rao 				   uint16_t num, FILE *file);
5644006ac1fSRakesh Kudurumalla void __roc_api roc_nix_tm_dump(struct roc_nix *roc_nix, FILE *file);
5654006ac1fSRakesh Kudurumalla void __roc_api roc_nix_dump(struct roc_nix *roc_nix, FILE *file);
5665aef7fbdSJerin Jacob 
567f6d567b0SJerin Jacob /* IRQ */
568f6d567b0SJerin Jacob void __roc_api roc_nix_rx_queue_intr_enable(struct roc_nix *roc_nix,
569f6d567b0SJerin Jacob 					    uint16_t rxq_id);
570f6d567b0SJerin Jacob void __roc_api roc_nix_rx_queue_intr_disable(struct roc_nix *roc_nix,
571f6d567b0SJerin Jacob 					     uint16_t rxq_id);
572f6d567b0SJerin Jacob void __roc_api roc_nix_err_intr_ena_dis(struct roc_nix *roc_nix, bool enb);
573f6d567b0SJerin Jacob void __roc_api roc_nix_ras_intr_ena_dis(struct roc_nix *roc_nix, bool enb);
574f6d567b0SJerin Jacob int __roc_api roc_nix_register_queue_irqs(struct roc_nix *roc_nix);
575f6d567b0SJerin Jacob void __roc_api roc_nix_unregister_queue_irqs(struct roc_nix *roc_nix);
576f6d567b0SJerin Jacob int __roc_api roc_nix_register_cq_irqs(struct roc_nix *roc_nix);
577f6d567b0SJerin Jacob void __roc_api roc_nix_unregister_cq_irqs(struct roc_nix *roc_nix);
578f6d567b0SJerin Jacob 
57905d727e8SNithin Dabilpuram /* Traffic Management */
580be3009e7SNithin Dabilpuram #define ROC_NIX_TM_SHAPER_PROFILE_NONE UINT32_MAX
581be3009e7SNithin Dabilpuram #define ROC_NIX_TM_NODE_ID_INVALID     UINT32_MAX
58205d727e8SNithin Dabilpuram 
58305d727e8SNithin Dabilpuram enum roc_nix_tm_tree {
58405d727e8SNithin Dabilpuram 	ROC_NIX_TM_DEFAULT = 0,
58505d727e8SNithin Dabilpuram 	ROC_NIX_TM_RLIMIT,
58620d02329SSunil Kumar Kori 	ROC_NIX_TM_PFC,
58705d727e8SNithin Dabilpuram 	ROC_NIX_TM_USER,
58805d727e8SNithin Dabilpuram 	ROC_NIX_TM_TREE_MAX,
58905d727e8SNithin Dabilpuram };
59005d727e8SNithin Dabilpuram 
59105d727e8SNithin Dabilpuram enum roc_tm_node_level {
59205d727e8SNithin Dabilpuram 	ROC_TM_LVL_ROOT = 0,
59305d727e8SNithin Dabilpuram 	ROC_TM_LVL_SCH1,
59405d727e8SNithin Dabilpuram 	ROC_TM_LVL_SCH2,
59505d727e8SNithin Dabilpuram 	ROC_TM_LVL_SCH3,
59605d727e8SNithin Dabilpuram 	ROC_TM_LVL_SCH4,
59705d727e8SNithin Dabilpuram 	ROC_TM_LVL_QUEUE,
59805d727e8SNithin Dabilpuram 	ROC_TM_LVL_MAX,
59905d727e8SNithin Dabilpuram };
60005d727e8SNithin Dabilpuram 
60105d727e8SNithin Dabilpuram /*
60205d727e8SNithin Dabilpuram  * TM runtime hierarchy init API.
60305d727e8SNithin Dabilpuram  */
6045a960e26SNithin Dabilpuram int __roc_api roc_nix_tm_init(struct roc_nix *roc_nix);
6055a960e26SNithin Dabilpuram void __roc_api roc_nix_tm_fini(struct roc_nix *roc_nix);
60605d727e8SNithin Dabilpuram int __roc_api roc_nix_tm_sq_aura_fc(struct roc_nix_sq *sq, bool enable);
60705d727e8SNithin Dabilpuram int __roc_api roc_nix_tm_sq_flush_spin(struct roc_nix_sq *sq);
60805d727e8SNithin Dabilpuram 
609be3009e7SNithin Dabilpuram /*
610be3009e7SNithin Dabilpuram  * TM User hierarchy API.
611be3009e7SNithin Dabilpuram  */
612be3009e7SNithin Dabilpuram 
613be3009e7SNithin Dabilpuram struct roc_nix_tm_node {
614be3009e7SNithin Dabilpuram #define ROC_NIX_TM_NODE_SZ (128)
615be3009e7SNithin Dabilpuram 	uint8_t reserved[ROC_NIX_TM_NODE_SZ];
616be3009e7SNithin Dabilpuram 
617be3009e7SNithin Dabilpuram 	uint32_t id;
618be3009e7SNithin Dabilpuram 	uint32_t parent_id;
619be3009e7SNithin Dabilpuram 	uint32_t priority;
620be3009e7SNithin Dabilpuram 	uint32_t weight;
621be3009e7SNithin Dabilpuram 	uint32_t shaper_profile_id;
622be3009e7SNithin Dabilpuram 	uint16_t lvl;
623be3009e7SNithin Dabilpuram 	bool pkt_mode;
624be3009e7SNithin Dabilpuram 	bool pkt_mode_set;
625be3009e7SNithin Dabilpuram 	/* Function to free this memory */
626be3009e7SNithin Dabilpuram 	void (*free_fn)(void *node);
627be3009e7SNithin Dabilpuram };
628be3009e7SNithin Dabilpuram 
629c2460d14SSatha Rao struct roc_nix_tm_shaper_profile {
630c2460d14SSatha Rao #define ROC_NIX_TM_SHAPER_PROFILE_SZ (128)
631c2460d14SSatha Rao 	uint8_t reserved[ROC_NIX_TM_SHAPER_PROFILE_SZ];
632c2460d14SSatha Rao 
633c2460d14SSatha Rao 	uint32_t id;
634c2460d14SSatha Rao 	uint64_t commit_rate;
635c2460d14SSatha Rao 	uint64_t commit_sz;
636c2460d14SSatha Rao 	uint64_t peak_rate;
637c2460d14SSatha Rao 	uint64_t peak_sz;
638c2460d14SSatha Rao 	int32_t pkt_len_adj;
639c2460d14SSatha Rao 	bool pkt_mode;
64002bf1662SSatha Rao 	int8_t accuracy;
64180053371SSatha Rao 	uint8_t red_algo;
642c2460d14SSatha Rao 	/* Function to free this memory */
643c2460d14SSatha Rao 	void (*free_fn)(void *profile);
644c2460d14SSatha Rao };
645c2460d14SSatha Rao 
6466b7fcb7aSSatha Rao enum roc_nix_tm_node_stats_type {
6476b7fcb7aSSatha Rao 	ROC_NIX_TM_NODE_PKTS_DROPPED,
6486b7fcb7aSSatha Rao 	ROC_NIX_TM_NODE_BYTES_DROPPED,
6496b7fcb7aSSatha Rao 	ROC_NIX_TM_NODE_GREEN_PKTS,
6506b7fcb7aSSatha Rao 	ROC_NIX_TM_NODE_GREEN_BYTES,
6516b7fcb7aSSatha Rao 	ROC_NIX_TM_NODE_YELLOW_PKTS,
6526b7fcb7aSSatha Rao 	ROC_NIX_TM_NODE_YELLOW_BYTES,
6536b7fcb7aSSatha Rao 	ROC_NIX_TM_NODE_RED_PKTS,
6546b7fcb7aSSatha Rao 	ROC_NIX_TM_NODE_RED_BYTES,
6556b7fcb7aSSatha Rao 	ROC_NIX_TM_NODE_STATS_MAX,
6566b7fcb7aSSatha Rao };
6576b7fcb7aSSatha Rao 
6586b7fcb7aSSatha Rao struct roc_nix_tm_node_stats {
6596b7fcb7aSSatha Rao 	uint64_t stats[ROC_NIX_TM_NODE_STATS_MAX];
6606b7fcb7aSSatha Rao };
6616b7fcb7aSSatha Rao 
6620b7e667eSSatha Rao enum roc_nix_tm_mark {
6630b7e667eSSatha Rao 	ROC_NIX_TM_MARK_VLAN_DEI,
6640b7e667eSSatha Rao 	ROC_NIX_TM_MARK_IPV4_DSCP,
6650b7e667eSSatha Rao 	ROC_NIX_TM_MARK_IPV4_ECN,
6660b7e667eSSatha Rao 	ROC_NIX_TM_MARK_IPV6_DSCP,
6670b7e667eSSatha Rao 	ROC_NIX_TM_MARK_IPV6_ECN,
6680b7e667eSSatha Rao 	ROC_NIX_TM_MARK_MAX
6690b7e667eSSatha Rao };
6700b7e667eSSatha Rao 
6710b7e667eSSatha Rao enum roc_nix_tm_mark_color {
6720b7e667eSSatha Rao 	ROC_NIX_TM_MARK_COLOR_Y,
6730b7e667eSSatha Rao 	ROC_NIX_TM_MARK_COLOR_R,
6740b7e667eSSatha Rao 	ROC_NIX_TM_MARK_COLOR_Y_R,
6750b7e667eSSatha Rao 	ROC_NIX_TM_MARK_COLOR_MAX
6760b7e667eSSatha Rao };
6770b7e667eSSatha Rao 
678be3009e7SNithin Dabilpuram int __roc_api roc_nix_tm_node_add(struct roc_nix *roc_nix,
679be3009e7SNithin Dabilpuram 				  struct roc_nix_tm_node *roc_node);
680be3009e7SNithin Dabilpuram int __roc_api roc_nix_tm_node_delete(struct roc_nix *roc_nix, uint32_t node_id,
681be3009e7SNithin Dabilpuram 				     bool free);
682df405df9SNithin Dabilpuram int __roc_api roc_nix_tm_free_resources(struct roc_nix *roc_nix, bool hw_only);
683464c9f91SNithin Dabilpuram int __roc_api roc_nix_tm_node_suspend_resume(struct roc_nix *roc_nix,
684464c9f91SNithin Dabilpuram 					     uint32_t node_id, bool suspend);
685464c9f91SNithin Dabilpuram int __roc_api roc_nix_tm_node_parent_update(struct roc_nix *roc_nix,
686464c9f91SNithin Dabilpuram 					    uint32_t node_id,
687464c9f91SNithin Dabilpuram 					    uint32_t new_parent_id,
688464c9f91SNithin Dabilpuram 					    uint32_t priority, uint32_t weight);
689464c9f91SNithin Dabilpuram int __roc_api roc_nix_tm_node_shaper_update(struct roc_nix *roc_nix,
690464c9f91SNithin Dabilpuram 					    uint32_t node_id,
691464c9f91SNithin Dabilpuram 					    uint32_t profile_id,
692464c9f91SNithin Dabilpuram 					    bool force_update);
693be3009e7SNithin Dabilpuram int __roc_api roc_nix_tm_node_pkt_mode_update(struct roc_nix *roc_nix,
694be3009e7SNithin Dabilpuram 					      uint32_t node_id, bool pkt_mode);
695c2460d14SSatha Rao int __roc_api roc_nix_tm_shaper_profile_add(
696c2460d14SSatha Rao 	struct roc_nix *roc_nix, struct roc_nix_tm_shaper_profile *profile);
697c2460d14SSatha Rao int __roc_api roc_nix_tm_shaper_profile_update(
698c2460d14SSatha Rao 	struct roc_nix *roc_nix, struct roc_nix_tm_shaper_profile *profile);
699c2460d14SSatha Rao int __roc_api roc_nix_tm_shaper_profile_delete(struct roc_nix *roc_nix,
700c2460d14SSatha Rao 					       uint32_t id);
701be3009e7SNithin Dabilpuram 
702fcdef46bSNithin Dabilpuram int __roc_api roc_nix_tm_prealloc_res(struct roc_nix *roc_nix, uint8_t lvl,
703fcdef46bSNithin Dabilpuram 				      uint16_t discontig, uint16_t contig);
704fcdef46bSNithin Dabilpuram uint16_t __roc_api roc_nix_tm_leaf_cnt(struct roc_nix *roc_nix);
705fcdef46bSNithin Dabilpuram 
706be3009e7SNithin Dabilpuram struct roc_nix_tm_node *__roc_api roc_nix_tm_node_get(struct roc_nix *roc_nix,
707be3009e7SNithin Dabilpuram 						      uint32_t node_id);
708be3009e7SNithin Dabilpuram struct roc_nix_tm_node *__roc_api
709be3009e7SNithin Dabilpuram roc_nix_tm_node_next(struct roc_nix *roc_nix, struct roc_nix_tm_node *__prev);
710c2460d14SSatha Rao struct roc_nix_tm_shaper_profile *__roc_api
711c2460d14SSatha Rao roc_nix_tm_shaper_profile_get(struct roc_nix *roc_nix, uint32_t profile_id);
712c2460d14SSatha Rao struct roc_nix_tm_shaper_profile *__roc_api roc_nix_tm_shaper_profile_next(
713c2460d14SSatha Rao 	struct roc_nix *roc_nix, struct roc_nix_tm_shaper_profile *__prev);
714be3009e7SNithin Dabilpuram 
7156b7fcb7aSSatha Rao int __roc_api roc_nix_tm_node_stats_get(struct roc_nix *roc_nix,
7166b7fcb7aSSatha Rao 					uint32_t node_id, bool clear,
7176b7fcb7aSSatha Rao 					struct roc_nix_tm_node_stats *stats);
718be3009e7SNithin Dabilpuram /*
7195a960e26SNithin Dabilpuram  * TM ratelimit tree API.
7205a960e26SNithin Dabilpuram  */
7213b416343SSatha Rao int __roc_api roc_nix_tm_rlimit_sq(struct roc_nix *roc_nix, uint16_t qid, uint64_t rate);
7223b416343SSatha Rao 
7233b416343SSatha Rao /*
7243b416343SSatha Rao  * TM PFC tree ratelimit API.
7253b416343SSatha Rao  */
7263b416343SSatha Rao int __roc_api roc_nix_tm_pfc_rlimit_sq(struct roc_nix *roc_nix, uint16_t qid, uint64_t rate);
7273b416343SSatha Rao 
7285a960e26SNithin Dabilpuram /*
7290885429cSNithin Dabilpuram  * TM hierarchy enable/disable API.
7300885429cSNithin Dabilpuram  */
7310885429cSNithin Dabilpuram int __roc_api roc_nix_tm_hierarchy_disable(struct roc_nix *roc_nix);
7320885429cSNithin Dabilpuram int __roc_api roc_nix_tm_hierarchy_enable(struct roc_nix *roc_nix,
7330885429cSNithin Dabilpuram 					  enum roc_nix_tm_tree tree,
7340885429cSNithin Dabilpuram 					  bool xmit_enable);
73590a903ffSSatha Rao int __roc_api roc_nix_tm_hierarchy_xmit_enable(struct roc_nix *roc_nix, enum roc_nix_tm_tree tree);
73690a903ffSSatha Rao 
7370885429cSNithin Dabilpuram 
7380885429cSNithin Dabilpuram /*
739be3009e7SNithin Dabilpuram  * TM utilities API.
740be3009e7SNithin Dabilpuram  */
741be3009e7SNithin Dabilpuram int __roc_api roc_nix_tm_node_lvl(struct roc_nix *roc_nix, uint32_t node_id);
742fcdef46bSNithin Dabilpuram bool __roc_api roc_nix_tm_root_has_sp(struct roc_nix *roc_nix);
743fcdef46bSNithin Dabilpuram void __roc_api roc_nix_tm_rsrc_max(bool pf, uint16_t schq[ROC_TM_LVL_MAX]);
744fcdef46bSNithin Dabilpuram int __roc_api roc_nix_tm_rsrc_count(struct roc_nix *roc_nix,
745fcdef46bSNithin Dabilpuram 				    uint16_t schq[ROC_TM_LVL_MAX]);
746be3009e7SNithin Dabilpuram int __roc_api roc_nix_tm_node_name_get(struct roc_nix *roc_nix,
747be3009e7SNithin Dabilpuram 				       uint32_t node_id, char *buf,
748be3009e7SNithin Dabilpuram 				       size_t buflen);
7498cfde95dSSatha Rao int __roc_api roc_nix_smq_flush(struct roc_nix *roc_nix);
750f9dbd4a5SSatha Rao int __roc_api roc_nix_tm_max_prio(struct roc_nix *roc_nix, int lvl);
751f9dbd4a5SSatha Rao int __roc_api roc_nix_tm_lvl_is_leaf(struct roc_nix *roc_nix, int lvl);
752f9dbd4a5SSatha Rao void __roc_api
753f9dbd4a5SSatha Rao roc_nix_tm_shaper_default_red_algo(struct roc_nix_tm_node *node,
754f9dbd4a5SSatha Rao 				   struct roc_nix_tm_shaper_profile *profile);
755f9dbd4a5SSatha Rao int __roc_api roc_nix_tm_lvl_cnt_get(struct roc_nix *roc_nix);
756f9dbd4a5SSatha Rao int __roc_api roc_nix_tm_lvl_have_link_access(struct roc_nix *roc_nix, int lvl);
757f9dbd4a5SSatha Rao int __roc_api roc_nix_tm_prepare_rate_limited_tree(struct roc_nix *roc_nix);
75820d02329SSunil Kumar Kori int __roc_api roc_nix_tm_pfc_prepare_tree(struct roc_nix *roc_nix);
759f9dbd4a5SSatha Rao bool __roc_api roc_nix_tm_is_user_hierarchy_enabled(struct roc_nix *nix);
760f9dbd4a5SSatha Rao int __roc_api roc_nix_tm_tree_type_get(struct roc_nix *nix);
7610b7e667eSSatha Rao int __roc_api roc_nix_tm_mark_config(struct roc_nix *roc_nix,
7620b7e667eSSatha Rao 				     enum roc_nix_tm_mark type, int mark_yellow,
7630b7e667eSSatha Rao 				     int mark_red);
7640b7e667eSSatha Rao uint64_t __roc_api roc_nix_tm_mark_format_get(struct roc_nix *roc_nix,
7650b7e667eSSatha Rao 					      uint64_t *flags);
76631525923SSatha Rao int __roc_api roc_nix_tm_egress_link_cfg_set(struct roc_nix *roc_nix, uint64_t dst_pf_func,
76731525923SSatha Rao 					     bool enable);
768be3009e7SNithin Dabilpuram 
769b7cb2203SSunil Kumar Kori /* Ingress Policer API */
77067e1cbf3SRakesh Kudurumalla int __roc_api roc_nix_bpf_timeunit_get(struct roc_nix *roc_nix,
77167e1cbf3SRakesh Kudurumalla 				       uint32_t *time_unit);
77267e1cbf3SRakesh Kudurumalla 
77305a944feSSunil Kumar Kori int __roc_api
77405a944feSSunil Kumar Kori roc_nix_bpf_count_get(struct roc_nix *roc_nix, uint8_t lvl_mask,
77505a944feSSunil Kumar Kori 		      uint16_t count[ROC_NIX_BPF_LEVEL_MAX] /* Out */);
77605a944feSSunil Kumar Kori 
7777a63d75eSSunil Kumar Kori int __roc_api roc_nix_bpf_alloc(struct roc_nix *roc_nix, uint8_t lvl_mask,
7787a63d75eSSunil Kumar Kori 				uint16_t per_lvl_cnt[ROC_NIX_BPF_LEVEL_MAX],
7797a63d75eSSunil Kumar Kori 				struct roc_nix_bpf_objs *profs /* Out */);
7807a63d75eSSunil Kumar Kori 
781bf7290c6SSunil Kumar Kori int __roc_api roc_nix_bpf_free(struct roc_nix *roc_nix,
782bf7290c6SSunil Kumar Kori 			       struct roc_nix_bpf_objs *profs,
783bf7290c6SSunil Kumar Kori 			       uint8_t num_prof);
784bf7290c6SSunil Kumar Kori 
785bf7290c6SSunil Kumar Kori int __roc_api roc_nix_bpf_free_all(struct roc_nix *roc_nix);
786bf7290c6SSunil Kumar Kori 
7874ad8bc2fSSunil Kumar Kori int __roc_api roc_nix_bpf_config(struct roc_nix *roc_nix, uint16_t id,
7884ad8bc2fSSunil Kumar Kori 				 enum roc_nix_bpf_level_flag lvl_flag,
7894ad8bc2fSSunil Kumar Kori 				 struct roc_nix_bpf_cfg *cfg);
7904ad8bc2fSSunil Kumar Kori 
79152511cd2SSunil Kumar Kori int __roc_api roc_nix_bpf_ena_dis(struct roc_nix *roc_nix, uint16_t id,
79252511cd2SSunil Kumar Kori 				  struct roc_nix_rq *rq, bool enable);
79352511cd2SSunil Kumar Kori 
794ab706fa8SSunil Kumar Kori int __roc_api roc_nix_bpf_dump(struct roc_nix *roc_nix, uint16_t id,
795ab706fa8SSunil Kumar Kori 			       enum roc_nix_bpf_level_flag lvl_flag);
796ab706fa8SSunil Kumar Kori 
79733961101SSunil Kumar Kori int __roc_api roc_nix_bpf_pre_color_tbl_setup(
79833961101SSunil Kumar Kori 	struct roc_nix *roc_nix, uint16_t id,
79933961101SSunil Kumar Kori 	enum roc_nix_bpf_level_flag lvl_flag, struct roc_nix_bpf_precolor *tbl);
80033961101SSunil Kumar Kori 
801b609507bSSunil Kumar Kori /* Use ROC_NIX_BPF_ID_INVALID as dst_id to disconnect */
802b609507bSSunil Kumar Kori int __roc_api roc_nix_bpf_connect(struct roc_nix *roc_nix,
803b609507bSSunil Kumar Kori 				  enum roc_nix_bpf_level_flag lvl_flag,
804b609507bSSunil Kumar Kori 				  uint16_t src_id, uint16_t dst_id);
805b609507bSSunil Kumar Kori 
8060fa36bc2SSunil Kumar Kori int __roc_api
8070fa36bc2SSunil Kumar Kori roc_nix_bpf_stats_read(struct roc_nix *roc_nix, uint16_t id, uint64_t mask,
8080fa36bc2SSunil Kumar Kori 		       enum roc_nix_bpf_level_flag lvl_flag,
8090fa36bc2SSunil Kumar Kori 		       uint64_t stats[ROC_NIX_BPF_STATS_MAX] /* Out */);
8100fa36bc2SSunil Kumar Kori 
811bea4a81bSSunil Kumar Kori int __roc_api roc_nix_bpf_stats_reset(struct roc_nix *roc_nix, uint16_t id,
812bea4a81bSSunil Kumar Kori 				      uint64_t mask,
813bea4a81bSSunil Kumar Kori 				      enum roc_nix_bpf_level_flag lvl_flag);
814bea4a81bSSunil Kumar Kori 
8150fa36bc2SSunil Kumar Kori int __roc_api
8160fa36bc2SSunil Kumar Kori roc_nix_bpf_lf_stats_read(struct roc_nix *roc_nix, uint64_t mask,
8170fa36bc2SSunil Kumar Kori 			  uint64_t stats[ROC_NIX_BPF_STATS_MAX] /* Out */);
8180fa36bc2SSunil Kumar Kori 
819bea4a81bSSunil Kumar Kori int __roc_api roc_nix_bpf_lf_stats_reset(struct roc_nix *roc_nix,
820bea4a81bSSunil Kumar Kori 					 uint64_t mask);
821bea4a81bSSunil Kumar Kori 
822b7cb2203SSunil Kumar Kori uint8_t __roc_api
823b7cb2203SSunil Kumar Kori roc_nix_bpf_level_to_idx(enum roc_nix_bpf_level_flag lvl_flag);
824b7cb2203SSunil Kumar Kori 
825c8881e6eSSunil Kumar Kori uint8_t __roc_api roc_nix_bpf_stats_to_idx(enum roc_nix_bpf_stats lvl_flag);
826c8881e6eSSunil Kumar Kori 
827313cc418SSunil Kumar Kori /* MAC */
828313cc418SSunil Kumar Kori int __roc_api roc_nix_mac_rxtx_start_stop(struct roc_nix *roc_nix, bool start);
829313cc418SSunil Kumar Kori int __roc_api roc_nix_mac_link_event_start_stop(struct roc_nix *roc_nix,
830313cc418SSunil Kumar Kori 						bool start);
831313cc418SSunil Kumar Kori int __roc_api roc_nix_mac_loopback_enable(struct roc_nix *roc_nix, bool enable);
832313cc418SSunil Kumar Kori int __roc_api roc_nix_mac_addr_set(struct roc_nix *roc_nix,
833313cc418SSunil Kumar Kori 				   const uint8_t addr[]);
834313cc418SSunil Kumar Kori int __roc_api roc_nix_mac_max_entries_get(struct roc_nix *roc_nix);
835313cc418SSunil Kumar Kori int __roc_api roc_nix_mac_addr_add(struct roc_nix *roc_nix, uint8_t addr[]);
836313cc418SSunil Kumar Kori int __roc_api roc_nix_mac_addr_del(struct roc_nix *roc_nix, uint32_t index);
837313cc418SSunil Kumar Kori int __roc_api roc_nix_mac_promisc_mode_enable(struct roc_nix *roc_nix,
838313cc418SSunil Kumar Kori 					      int enable);
839313cc418SSunil Kumar Kori int __roc_api roc_nix_mac_link_state_set(struct roc_nix *roc_nix, uint8_t up);
840313cc418SSunil Kumar Kori int __roc_api roc_nix_mac_link_info_set(struct roc_nix *roc_nix,
841313cc418SSunil Kumar Kori 					struct roc_nix_link_info *link_info);
842313cc418SSunil Kumar Kori int __roc_api roc_nix_mac_link_info_get(struct roc_nix *roc_nix,
843313cc418SSunil Kumar Kori 					struct roc_nix_link_info *link_info);
844313cc418SSunil Kumar Kori int __roc_api roc_nix_mac_mtu_set(struct roc_nix *roc_nix, uint16_t mtu);
845313cc418SSunil Kumar Kori int __roc_api roc_nix_mac_max_rx_len_set(struct roc_nix *roc_nix,
846313cc418SSunil Kumar Kori 					 uint16_t maxlen);
847313cc418SSunil Kumar Kori int __roc_api roc_nix_mac_link_cb_register(struct roc_nix *roc_nix,
848313cc418SSunil Kumar Kori 					   link_status_t link_update);
849313cc418SSunil Kumar Kori void __roc_api roc_nix_mac_link_cb_unregister(struct roc_nix *roc_nix);
85002719901SHarman Kalra int __roc_api roc_nix_mac_link_info_get_cb_register(
85102719901SHarman Kalra 	struct roc_nix *roc_nix, link_info_get_t link_info_get);
85202719901SHarman Kalra void __roc_api roc_nix_mac_link_info_get_cb_unregister(struct roc_nix *roc_nix);
853b7c31b6dSSatha Rao int __roc_api roc_nix_q_err_cb_register(struct roc_nix *roc_nix, q_err_get_t sq_err_handle);
854b7c31b6dSSatha Rao void __roc_api roc_nix_q_err_cb_unregister(struct roc_nix *roc_nix);
855e8306c6cSSunil Kumar Kori int __roc_api roc_nix_mac_stats_reset(struct roc_nix *roc_nix);
856313cc418SSunil Kumar Kori 
857dfa267ecSSunil Kumar Kori /* Ops */
858dfa267ecSSunil Kumar Kori int __roc_api roc_nix_switch_hdr_set(struct roc_nix *roc_nix,
8595bffab53SKiran Kumar K 				     uint64_t switch_header_type,
8605bffab53SKiran Kumar K 				     uint8_t pre_l2_size_offset,
8615bffab53SKiran Kumar K 				     uint8_t pre_l2_size_offset_mask,
8625bffab53SKiran Kumar K 				     uint8_t pre_l2_size_shift_dir);
863dfa267ecSSunil Kumar Kori int __roc_api roc_nix_lso_fmt_setup(struct roc_nix *roc_nix);
864dfa267ecSSunil Kumar Kori int __roc_api roc_nix_lso_fmt_get(struct roc_nix *roc_nix,
865dfa267ecSSunil Kumar Kori 				  uint8_t udp_tun[ROC_NIX_LSO_TUN_MAX],
866dfa267ecSSunil Kumar Kori 				  uint8_t tun[ROC_NIX_LSO_TUN_MAX]);
867dfa267ecSSunil Kumar Kori int __roc_api roc_nix_lso_custom_fmt_setup(struct roc_nix *roc_nix,
868dfa267ecSSunil Kumar Kori 					   struct nix_lso_format *fields,
869dfa267ecSSunil Kumar Kori 					   uint16_t nb_fields);
870dfa267ecSSunil Kumar Kori 
871dfa267ecSSunil Kumar Kori int __roc_api roc_nix_eeprom_info_get(struct roc_nix *roc_nix,
872dfa267ecSSunil Kumar Kori 				      struct roc_nix_eeprom_info *info);
873dfa267ecSSunil Kumar Kori 
874da57d458SSunil Kumar Kori /* Flow control */
875da57d458SSunil Kumar Kori int __roc_api roc_nix_fc_config_set(struct roc_nix *roc_nix,
876da57d458SSunil Kumar Kori 				    struct roc_nix_fc_cfg *fc_cfg);
877da57d458SSunil Kumar Kori 
878da57d458SSunil Kumar Kori int __roc_api roc_nix_fc_config_get(struct roc_nix *roc_nix,
879da57d458SSunil Kumar Kori 				    struct roc_nix_fc_cfg *fc_cfg);
880da57d458SSunil Kumar Kori 
881da57d458SSunil Kumar Kori int __roc_api roc_nix_fc_mode_set(struct roc_nix *roc_nix,
882da57d458SSunil Kumar Kori 				  enum roc_nix_fc_mode mode);
883da57d458SSunil Kumar Kori 
88420d02329SSunil Kumar Kori int __roc_api roc_nix_pfc_mode_set(struct roc_nix *roc_nix,
88520d02329SSunil Kumar Kori 				   struct roc_nix_pfc_cfg *pfc_cfg);
88620d02329SSunil Kumar Kori 
88720d02329SSunil Kumar Kori int __roc_api roc_nix_pfc_mode_get(struct roc_nix *roc_nix,
88820d02329SSunil Kumar Kori 				   struct roc_nix_pfc_cfg *pfc_cfg);
88920d02329SSunil Kumar Kori 
89020d02329SSunil Kumar Kori uint16_t __roc_api roc_nix_chan_count_get(struct roc_nix *roc_nix);
89120d02329SSunil Kumar Kori 
892da57d458SSunil Kumar Kori enum roc_nix_fc_mode __roc_api roc_nix_fc_mode_get(struct roc_nix *roc_nix);
893da57d458SSunil Kumar Kori 
8943742b8d5SSunil Kumar Kori void __roc_api roc_nix_fc_npa_bp_cfg(struct roc_nix *roc_nix, uint64_t pool_id, uint8_t ena,
8953742b8d5SSunil Kumar Kori 				     uint8_t force, uint8_t tc, uint64_t drop_percent);
8964d00b8c6SSatha Rao int __roc_api roc_nix_bpids_alloc(struct roc_nix *roc_nix, uint8_t type,
8974d00b8c6SSatha Rao 				  uint8_t bp_cnt, uint16_t *bpids);
8984d00b8c6SSatha Rao int __roc_api roc_nix_bpids_free(struct roc_nix *roc_nix, uint8_t bp_cnt,
8994d00b8c6SSatha Rao 				 uint16_t *bpids);
9004d00b8c6SSatha Rao int __roc_api roc_nix_rx_chan_cfg_get(struct roc_nix *roc_nix, uint16_t chan,
9014d00b8c6SSatha Rao 				      bool is_cpt, uint64_t *cfg);
9024d00b8c6SSatha Rao int __roc_api roc_nix_rx_chan_cfg_set(struct roc_nix *roc_nix, uint16_t chan,
9034d00b8c6SSatha Rao 				      bool is_cpt, uint64_t val);
9044d00b8c6SSatha Rao int __roc_api roc_nix_chan_bpid_set(struct roc_nix *roc_nix, uint16_t chan,
9054d00b8c6SSatha Rao 				    uint64_t bpid, int ena, bool cpt_chan);
906cb4bfd6eSPavan Nikhilesh 
9071c518ee1SSunil Kumar Kori /* NPC */
9081c518ee1SSunil Kumar Kori int __roc_api roc_nix_npc_promisc_ena_dis(struct roc_nix *roc_nix, int enable);
9091c518ee1SSunil Kumar Kori 
9101c518ee1SSunil Kumar Kori int __roc_api roc_nix_npc_mac_addr_set(struct roc_nix *roc_nix, uint8_t addr[]);
9111c518ee1SSunil Kumar Kori 
9121c518ee1SSunil Kumar Kori int __roc_api roc_nix_npc_mac_addr_get(struct roc_nix *roc_nix, uint8_t *addr);
9131c518ee1SSunil Kumar Kori 
9141c518ee1SSunil Kumar Kori int __roc_api roc_nix_npc_rx_ena_dis(struct roc_nix *roc_nix, bool enable);
9151c518ee1SSunil Kumar Kori 
9161c518ee1SSunil Kumar Kori int __roc_api roc_nix_npc_mcast_config(struct roc_nix *roc_nix,
9171c518ee1SSunil Kumar Kori 				       bool mcast_enable, bool prom_enable);
9181c518ee1SSunil Kumar Kori 
9191bf6746eSJerin Jacob /* RSS */
9201bf6746eSJerin Jacob void __roc_api roc_nix_rss_key_default_fill(struct roc_nix *roc_nix,
9211bf6746eSJerin Jacob 					    uint8_t key[ROC_NIX_RSS_KEY_LEN]);
9221bf6746eSJerin Jacob void __roc_api roc_nix_rss_key_set(struct roc_nix *roc_nix,
9231bf6746eSJerin Jacob 				   const uint8_t key[ROC_NIX_RSS_KEY_LEN]);
9241bf6746eSJerin Jacob void __roc_api roc_nix_rss_key_get(struct roc_nix *roc_nix,
9251bf6746eSJerin Jacob 				   uint8_t key[ROC_NIX_RSS_KEY_LEN]);
9261bf6746eSJerin Jacob int __roc_api roc_nix_rss_reta_set(struct roc_nix *roc_nix, uint8_t group,
9271bf6746eSJerin Jacob 				   uint16_t reta[ROC_NIX_RSS_RETA_MAX]);
9281bf6746eSJerin Jacob int __roc_api roc_nix_rss_reta_get(struct roc_nix *roc_nix, uint8_t group,
9291bf6746eSJerin Jacob 				   uint16_t reta[ROC_NIX_RSS_RETA_MAX]);
9301bf6746eSJerin Jacob int __roc_api roc_nix_rss_flowkey_set(struct roc_nix *roc_nix, uint8_t *alg_idx,
9311bf6746eSJerin Jacob 				      uint32_t flowkey, uint8_t group,
9321bf6746eSJerin Jacob 				      int mcam_index);
9331bf6746eSJerin Jacob int __roc_api roc_nix_rss_default_setup(struct roc_nix *roc_nix,
9341bf6746eSJerin Jacob 					uint32_t flowkey);
9351bf6746eSJerin Jacob 
936218d022eSJerin Jacob /* Stats */
937218d022eSJerin Jacob int __roc_api roc_nix_stats_get(struct roc_nix *roc_nix,
938218d022eSJerin Jacob 				struct roc_nix_stats *stats);
939218d022eSJerin Jacob int __roc_api roc_nix_stats_reset(struct roc_nix *roc_nix);
940218d022eSJerin Jacob int __roc_api roc_nix_stats_queue_get(struct roc_nix *roc_nix, uint16_t qid,
941218d022eSJerin Jacob 				      bool is_rx,
942218d022eSJerin Jacob 				      struct roc_nix_stats_queue *qstats);
943218d022eSJerin Jacob int __roc_api roc_nix_stats_queue_reset(struct roc_nix *roc_nix, uint16_t qid,
944218d022eSJerin Jacob 					bool is_rx);
9454efa6e82SSatha Rao int __roc_api roc_nix_num_xstats_get(struct roc_nix *roc_nix);
9464efa6e82SSatha Rao int __roc_api roc_nix_xstats_get(struct roc_nix *roc_nix,
9474efa6e82SSatha Rao 				 struct roc_nix_xstat *xstats, unsigned int n);
9484efa6e82SSatha Rao int __roc_api roc_nix_xstats_names_get(struct roc_nix *roc_nix,
9494efa6e82SSatha Rao 				       struct roc_nix_xstat_name *xstats_names,
9504efa6e82SSatha Rao 				       unsigned int limit);
951218d022eSJerin Jacob 
95219a2b549SJerin Jacob /* Queue */
95319a2b549SJerin Jacob int __roc_api roc_nix_rq_init(struct roc_nix *roc_nix, struct roc_nix_rq *rq,
95419a2b549SJerin Jacob 			      bool ena);
95519a2b549SJerin Jacob int __roc_api roc_nix_rq_modify(struct roc_nix *roc_nix, struct roc_nix_rq *rq,
95619a2b549SJerin Jacob 				bool ena);
9575df46167SSunil Kumar Kori int __roc_api roc_nix_rq_cman_config(struct roc_nix *roc_nix, struct roc_nix_rq *rq);
95819a2b549SJerin Jacob int __roc_api roc_nix_rq_ena_dis(struct roc_nix_rq *rq, bool enable);
959174f2f35SSunil Kumar Kori int __roc_api roc_nix_rq_is_sso_enable(struct roc_nix *roc_nix, uint32_t qid);
96019a2b549SJerin Jacob int __roc_api roc_nix_rq_fini(struct roc_nix_rq *rq);
96119a2b549SJerin Jacob int __roc_api roc_nix_cq_init(struct roc_nix *roc_nix, struct roc_nix_cq *cq);
96219a2b549SJerin Jacob int __roc_api roc_nix_cq_fini(struct roc_nix_cq *cq);
96309e1df73SRahul Bhansali void __roc_api roc_nix_cq_head_tail_get(struct roc_nix *roc_nix, uint16_t qid,
96409e1df73SRahul Bhansali 					uint32_t *head, uint32_t *tail);
965ae060709SJerin Jacob int __roc_api roc_nix_sq_init(struct roc_nix *roc_nix, struct roc_nix_sq *sq);
966ae060709SJerin Jacob int __roc_api roc_nix_sq_fini(struct roc_nix_sq *sq);
967f6e0d835SRakesh Kudurumalla int __roc_api roc_nix_sq_ena_dis(struct roc_nix_sq *sq, bool enable);
96809e1df73SRahul Bhansali void __roc_api roc_nix_sq_head_tail_get(struct roc_nix *roc_nix, uint16_t qid,
96909e1df73SRahul Bhansali 					uint32_t *head, uint32_t *tail);
97019a2b549SJerin Jacob 
971c443e0d3SSunil Kumar Kori /* PTP */
972c443e0d3SSunil Kumar Kori int __roc_api roc_nix_ptp_rx_ena_dis(struct roc_nix *roc_nix, int enable);
973c443e0d3SSunil Kumar Kori int __roc_api roc_nix_ptp_tx_ena_dis(struct roc_nix *roc_nix, int enable);
974c443e0d3SSunil Kumar Kori int __roc_api roc_nix_ptp_clock_read(struct roc_nix *roc_nix, uint64_t *clock,
975c443e0d3SSunil Kumar Kori 				     uint64_t *tsc, uint8_t is_pmu);
976c443e0d3SSunil Kumar Kori int __roc_api roc_nix_ptp_sync_time_adjust(struct roc_nix *roc_nix,
977c443e0d3SSunil Kumar Kori 					   int64_t delta);
978c443e0d3SSunil Kumar Kori int __roc_api roc_nix_ptp_info_cb_register(struct roc_nix *roc_nix,
979c443e0d3SSunil Kumar Kori 					   ptp_info_update_t ptp_update);
980c443e0d3SSunil Kumar Kori void __roc_api roc_nix_ptp_info_cb_unregister(struct roc_nix *roc_nix);
9818f98e3ecSHarman Kalra bool __roc_api roc_nix_ptp_is_enable(struct roc_nix *roc_nix);
982c443e0d3SSunil Kumar Kori 
98362240569SSunil Kumar Kori /* VLAN */
98462240569SSunil Kumar Kori int __roc_api
98562240569SSunil Kumar Kori roc_nix_vlan_mcam_entry_read(struct roc_nix *roc_nix, uint32_t index,
98662240569SSunil Kumar Kori 			     struct npc_mcam_read_entry_rsp **rsp);
98762240569SSunil Kumar Kori int __roc_api roc_nix_vlan_mcam_entry_write(struct roc_nix *roc_nix,
98862240569SSunil Kumar Kori 					    uint32_t index,
98962240569SSunil Kumar Kori 					    struct mcam_entry *entry,
99062240569SSunil Kumar Kori 					    uint8_t intf, uint8_t enable);
99162240569SSunil Kumar Kori int __roc_api roc_nix_vlan_mcam_entry_alloc_and_write(struct roc_nix *roc_nix,
99262240569SSunil Kumar Kori 						      struct mcam_entry *entry,
99362240569SSunil Kumar Kori 						      uint8_t intf,
99462240569SSunil Kumar Kori 						      uint8_t priority,
99562240569SSunil Kumar Kori 						      uint8_t ref_entry);
99662240569SSunil Kumar Kori int __roc_api roc_nix_vlan_mcam_entry_free(struct roc_nix *roc_nix,
99762240569SSunil Kumar Kori 					   uint32_t index);
99862240569SSunil Kumar Kori int __roc_api roc_nix_vlan_mcam_entry_ena_dis(struct roc_nix *roc_nix,
99962240569SSunil Kumar Kori 					      uint32_t index, const int enable);
100062240569SSunil Kumar Kori int __roc_api roc_nix_vlan_strip_vtag_ena_dis(struct roc_nix *roc_nix,
100162240569SSunil Kumar Kori 					      bool enable);
100262240569SSunil Kumar Kori int __roc_api roc_nix_vlan_insert_ena_dis(struct roc_nix *roc_nix,
100362240569SSunil Kumar Kori 					  struct roc_nix_vlan_config *vlan_cfg,
100462240569SSunil Kumar Kori 					  uint64_t *mcam_index, bool enable);
100562240569SSunil Kumar Kori int __roc_api roc_nix_vlan_tpid_set(struct roc_nix *roc_nix, uint32_t type,
100662240569SSunil Kumar Kori 				    uint16_t tpid);
100762240569SSunil Kumar Kori 
10081c518ee1SSunil Kumar Kori /* MCAST*/
10091c518ee1SSunil Kumar Kori int __roc_api roc_nix_mcast_mcam_entry_alloc(struct roc_nix *roc_nix,
10101c518ee1SSunil Kumar Kori 					     uint16_t nb_entries,
10111c518ee1SSunil Kumar Kori 					     uint8_t priority,
10121c518ee1SSunil Kumar Kori 					     uint16_t index[]);
10131c518ee1SSunil Kumar Kori int __roc_api roc_nix_mcast_mcam_entry_free(struct roc_nix *roc_nix,
10141c518ee1SSunil Kumar Kori 					    uint32_t index);
10151c518ee1SSunil Kumar Kori int __roc_api roc_nix_mcast_mcam_entry_write(struct roc_nix *roc_nix,
10161c518ee1SSunil Kumar Kori 					     struct mcam_entry *entry,
10171c518ee1SSunil Kumar Kori 					     uint32_t index, uint8_t intf,
10181c518ee1SSunil Kumar Kori 					     uint64_t action);
1019209188d1SSatheesh Paul int __roc_api roc_nix_mcast_mcam_entry_ena_dis(struct roc_nix *roc_nix, uint32_t index,
1020209188d1SSatheesh Paul 					       bool enable);
1021209188d1SSatheesh Paul int __roc_api roc_nix_mcast_list_setup(struct mbox *mbox, uint8_t intf, int nb_entries,
1022209188d1SSatheesh Paul 				       uint16_t *pf_funcs, uint16_t *channels, uint32_t *rqs,
1023209188d1SSatheesh Paul 				       uint32_t *grp_index, uint32_t *start_index);
1024209188d1SSatheesh Paul int __roc_api roc_nix_mcast_list_free(struct mbox *mbox, uint32_t mcast_grp_index);
1025162c77c1SHarman Kalra int __roc_api roc_nix_max_rep_count(struct roc_nix *roc_nix);
10268dcdf319SJerin Jacob #endif /* _ROC_NIX_H_ */
1027