1
2
3
4
5#ifndef _ROC_NIX_H_
6#define _ROC_NIX_H_
7
8
9#define ROC_NIX_BPF_PER_PFFUNC 64
10#define ROC_NIX_BPF_ID_INVALID 0xFFFF
11#define ROC_NIX_BPF_LEVEL_IDX_INVALID 0xFF
12#define ROC_NIX_BPF_LEVEL_MAX 3
13#define ROC_NIX_BPF_STATS_MAX 12
14#define ROC_NIX_MTR_ID_INVALID UINT32_MAX
15#define ROC_NIX_PFC_CLASS_INVALID UINT8_MAX
16
17enum roc_nix_rss_reta_sz {
18 ROC_NIX_RSS_RETA_SZ_64 = 64,
19 ROC_NIX_RSS_RETA_SZ_128 = 128,
20 ROC_NIX_RSS_RETA_SZ_256 = 256,
21};
22
23enum roc_nix_sq_max_sqe_sz {
24 roc_nix_maxsqesz_w16 = NIX_MAXSQESZ_W16,
25 roc_nix_maxsqesz_w8 = NIX_MAXSQESZ_W8,
26};
27
28enum roc_nix_fc_mode {
29 ROC_NIX_FC_NONE = 0,
30 ROC_NIX_FC_RX,
31 ROC_NIX_FC_TX,
32 ROC_NIX_FC_FULL
33};
34
35enum roc_nix_vlan_type {
36 ROC_NIX_VLAN_TYPE_INNER = 0x01,
37 ROC_NIX_VLAN_TYPE_OUTER = 0x02,
38};
39
40enum roc_nix_bpf_level_flag {
41 ROC_NIX_BPF_LEVEL_F_LEAF = BIT(0),
42 ROC_NIX_BPF_LEVEL_F_MID = BIT(1),
43 ROC_NIX_BPF_LEVEL_F_TOP = BIT(2),
44};
45
46enum roc_nix_bpf_pc_mode {
47 ROC_NIX_BPF_PC_MODE_VLAN_INNER,
48 ROC_NIX_BPF_PC_MODE_VLAN_OUTER,
49 ROC_NIX_BPF_PC_MODE_DSCP_INNER,
50 ROC_NIX_BPF_PC_MODE_DSCP_OUTER,
51 ROC_NIX_BPF_PC_MODE_GEN_INNER,
52 ROC_NIX_BPF_PC_MODE_GEN_OUTER
53};
54
55enum roc_nix_bpf_color {
56 ROC_NIX_BPF_COLOR_GREEN,
57 ROC_NIX_BPF_COLOR_YELLOW,
58 ROC_NIX_BPF_COLOR_RED,
59 ROC_NIX_BPF_COLOR_MAX
60};
61
62enum roc_nix_bpf_algo {
63 ROC_NIX_BPF_ALGO_NONE,
64 ROC_NIX_BPF_ALGO_2698,
65 ROC_NIX_BPF_ALGO_4115,
66 ROC_NIX_BPF_ALGO_2697
67};
68
69enum roc_nix_bpf_lmode { ROC_NIX_BPF_LMODE_BYTE, ROC_NIX_BPF_LMODE_PACKET };
70
71enum roc_nix_bpf_action {
72 ROC_NIX_BPF_ACTION_PASS,
73 ROC_NIX_BPF_ACTION_DROP,
74 ROC_NIX_BPF_ACTION_RED
75};
76
77enum roc_nix_bpf_stats {
78 ROC_NIX_BPF_GREEN_PKT_F_PASS = BIT_ULL(0),
79 ROC_NIX_BPF_GREEN_OCTS_F_PASS = BIT_ULL(1),
80 ROC_NIX_BPF_GREEN_PKT_F_DROP = BIT_ULL(2),
81 ROC_NIX_BPF_GREEN_OCTS_F_DROP = BIT_ULL(3),
82 ROC_NIX_BPF_YELLOW_PKT_F_PASS = BIT_ULL(4),
83 ROC_NIX_BPF_YELLOW_OCTS_F_PASS = BIT_ULL(5),
84 ROC_NIX_BPF_YELLOW_PKT_F_DROP = BIT_ULL(6),
85 ROC_NIX_BPF_YELLOW_OCTS_F_DROP = BIT_ULL(7),
86 ROC_NIX_BPF_RED_PKT_F_PASS = BIT_ULL(8),
87 ROC_NIX_BPF_RED_OCTS_F_PASS = BIT_ULL(9),
88 ROC_NIX_BPF_RED_PKT_F_DROP = BIT_ULL(10),
89 ROC_NIX_BPF_RED_OCTS_F_DROP = BIT_ULL(11),
90};
91
92struct roc_nix_bpf_cfg {
93 enum roc_nix_bpf_algo alg;
94 enum roc_nix_bpf_lmode lmode;
95 enum roc_nix_bpf_color icolor;
96 enum roc_nix_bpf_pc_mode pc_mode;
97 bool tnl_ena;
98 union {
99
100 struct {
101 uint64_t cir;
102 uint64_t cbs;
103 uint64_t ebs;
104 } algo2697;
105
106
107 struct {
108 uint64_t cir;
109 uint64_t pir;
110 uint64_t cbs;
111 uint64_t pbs;
112 } algo2698;
113
114
115 struct {
116 uint64_t cir;
117 uint64_t eir;
118 uint64_t cbs;
119 uint64_t ebs;
120 } algo4115;
121 };
122
123 enum roc_nix_bpf_action action[ROC_NIX_BPF_COLOR_MAX];
124
125
126 uint32_t rsvd[3];
127};
128
129struct roc_nix_bpf_objs {
130 uint16_t level;
131 uint16_t count;
132 uint16_t ids[ROC_NIX_BPF_PER_PFFUNC];
133};
134
135struct roc_nix_bpf_precolor {
136#define ROC_NIX_BPF_PRE_COLOR_MAX 64
137 uint8_t count;
138 enum roc_nix_bpf_pc_mode mode;
139 enum roc_nix_bpf_color color[ROC_NIX_BPF_PRE_COLOR_MAX];
140};
141
142struct roc_nix_vlan_config {
143 uint32_t type;
144 union {
145 struct {
146 uint32_t vtag_inner;
147 uint32_t vtag_outer;
148 } vlan;
149
150 struct {
151 int idx_inner;
152 int idx_outer;
153 } mcam;
154 };
155};
156
157struct roc_nix_fc_cfg {
158#define ROC_NIX_FC_RXCHAN_CFG 0
159#define ROC_NIX_FC_CQ_CFG 1
160#define ROC_NIX_FC_TM_CFG 2
161#define ROC_NIX_FC_RQ_CFG 3
162 uint8_t type;
163 union {
164 struct {
165 bool enable;
166 } rxchan_cfg;
167
168 struct {
169 uint32_t rq;
170 uint16_t tc;
171 uint16_t cq_drop;
172 bool enable;
173 } cq_cfg;
174
175 struct {
176 uint32_t rq;
177 uint16_t tc;
178 uint16_t cq_drop;
179 bool enable;
180 uint64_t pool;
181 } rq_cfg;
182
183 struct {
184 uint32_t sq;
185 uint16_t tc;
186 bool enable;
187 } tm_cfg;
188 };
189};
190
191struct roc_nix_pfc_cfg {
192 enum roc_nix_fc_mode mode;
193
194
195
196 uint16_t tc;
197};
198
199struct roc_nix_eeprom_info {
200#define ROC_NIX_EEPROM_SIZE 256
201 uint16_t sff_id;
202 uint8_t buf[ROC_NIX_EEPROM_SIZE];
203};
204
205
206
207
208#define ROC_NIX_PTP_FREQ_ADJUST (1 << 9)
209
210
211
212
213#define ROC_NIX_LF_RX_CFG_DROP_RE BIT_ULL(32)
214#define ROC_NIX_LF_RX_CFG_L2_LEN_ERR BIT_ULL(33)
215#define ROC_NIX_LF_RX_CFG_IP6_UDP_OPT BIT_ULL(34)
216#define ROC_NIX_LF_RX_CFG_DIS_APAD BIT_ULL(35)
217#define ROC_NIX_LF_RX_CFG_CSUM_IL4 BIT_ULL(36)
218#define ROC_NIX_LF_RX_CFG_CSUM_OL4 BIT_ULL(37)
219#define ROC_NIX_LF_RX_CFG_LEN_IL4 BIT_ULL(38)
220#define ROC_NIX_LF_RX_CFG_LEN_IL3 BIT_ULL(39)
221#define ROC_NIX_LF_RX_CFG_LEN_OL4 BIT_ULL(40)
222#define ROC_NIX_LF_RX_CFG_LEN_OL3 BIT_ULL(41)
223
224
225#define ROC_NIX_RSS_GROUP_DEFAULT 0
226#define ROC_NIX_RSS_GRPS 8
227#define ROC_NIX_RSS_RETA_MAX ROC_NIX_RSS_RETA_SZ_256
228#define ROC_NIX_RSS_KEY_LEN 48
229#define ROC_NIX_RSS_MCAM_IDX_DEFAULT (-1)
230
231#define ROC_NIX_DEFAULT_HW_FRS 1514
232
233#define ROC_NIX_VWQE_MAX_SIZE_LOG2 11
234#define ROC_NIX_VWQE_MIN_SIZE_LOG2 2
235
236struct roc_nix_stats {
237
238 uint64_t rx_octs;
239 uint64_t rx_ucast;
240 uint64_t rx_bcast;
241 uint64_t rx_mcast;
242 uint64_t rx_drop;
243 uint64_t rx_drop_octs;
244 uint64_t rx_fcs;
245 uint64_t rx_err;
246 uint64_t rx_drop_bcast;
247 uint64_t rx_drop_mcast;
248 uint64_t rx_drop_l3_bcast;
249 uint64_t rx_drop_l3_mcast;
250
251 uint64_t tx_ucast;
252 uint64_t tx_bcast;
253 uint64_t tx_mcast;
254 uint64_t tx_drop;
255 uint64_t tx_octs;
256};
257
258struct roc_nix_stats_queue {
259 PLT_STD_C11
260 union {
261 struct {
262
263 uint64_t rx_pkts;
264 uint64_t rx_octs;
265 uint64_t rx_drop_pkts;
266 uint64_t rx_drop_octs;
267 uint64_t rx_error_pkts;
268 };
269 struct {
270
271 uint64_t tx_pkts;
272 uint64_t tx_octs;
273 uint64_t tx_drop_pkts;
274 uint64_t tx_drop_octs;
275 };
276 };
277};
278
279struct roc_nix_rq {
280
281 uint16_t qid;
282 uint16_t bpf_id;
283 uint64_t aura_handle;
284 bool ipsech_ena;
285 uint16_t first_skip;
286 uint16_t later_skip;
287 uint16_t wqe_skip;
288 uint16_t lpb_size;
289 uint32_t tag_mask;
290 uint32_t flow_tag_width;
291 uint8_t tt;
292 uint16_t hwgrp;
293 bool sso_ena;
294 bool vwqe_ena;
295 uint64_t spb_aura_handle;
296 uint16_t spb_size;
297 bool spb_ena;
298 uint8_t vwqe_first_skip;
299 uint32_t vwqe_max_sz_exp;
300 uint64_t vwqe_wait_tmo;
301 uint64_t vwqe_aura_handle;
302
303 uint8_t red_drop;
304
305 uint8_t red_pass;
306
307 uint8_t spb_red_drop;
308
309 uint8_t spb_red_pass;
310
311 bool lpb_drop_ena;
312
313 bool spb_drop_ena;
314
315 struct roc_nix *roc_nix;
316 uint16_t inl_dev_refs;
317};
318
319struct roc_nix_cq {
320
321 uint16_t qid;
322 uint32_t nb_desc;
323
324 uint16_t drop_thresh;
325 struct roc_nix *roc_nix;
326 uintptr_t door;
327 int64_t *status;
328 uint64_t wdata;
329 void *desc_base;
330 uint32_t qmask;
331 uint32_t head;
332};
333
334struct roc_nix_sq {
335
336 enum roc_nix_sq_max_sqe_sz max_sqe_sz;
337 uint32_t nb_desc;
338 uint16_t qid;
339 uint16_t cqid;
340 bool sso_ena;
341 bool cq_ena;
342
343 uint16_t sqes_per_sqb_log2;
344 struct roc_nix *roc_nix;
345 uint64_t aura_handle;
346 int16_t nb_sqb_bufs_adj;
347 uint16_t nb_sqb_bufs;
348 uint16_t aura_sqb_bufs;
349 plt_iova_t io_addr;
350 void *lmt_addr;
351 void *sqe_mem;
352 void *fc;
353 uint8_t tc;
354};
355
356struct roc_nix_link_info {
357 uint64_t status : 1;
358 uint64_t full_duplex : 1;
359 uint64_t lmac_type_id : 4;
360 uint64_t speed : 20;
361 uint64_t autoneg : 1;
362 uint64_t fec : 2;
363 uint64_t port : 8;
364};
365
366
367#define ROC_NIX_XSTATS_NAME_SIZE 64
368
369struct roc_nix_xstat {
370 uint64_t id;
371 uint64_t value;
372};
373
374struct roc_nix_xstat_name {
375 char name[ROC_NIX_XSTATS_NAME_SIZE];
376};
377
378struct roc_nix_ipsec_cfg {
379 uint32_t sa_size;
380 uint32_t tag_const;
381 plt_iova_t iova;
382 uint16_t max_sa;
383 uint8_t tt;
384};
385
386
387typedef void (*link_status_t)(struct roc_nix *roc_nix,
388 struct roc_nix_link_info *link);
389
390
391typedef int (*ptp_info_update_t)(struct roc_nix *roc_nix, bool enable);
392
393
394typedef void (*link_info_get_t)(struct roc_nix *roc_nix,
395 struct roc_nix_link_info *link);
396
397struct roc_nix {
398
399 struct plt_pci_device *pci_dev;
400 uint16_t port_id;
401 bool rss_tag_as_xor;
402 uint16_t max_sqb_count;
403 enum roc_nix_rss_reta_sz reta_sz;
404 bool enable_loop;
405 bool hw_vlan_ins;
406 uint8_t lock_rx_ctx;
407 uint32_t outb_nb_desc;
408 uint16_t outb_nb_crypto_qs;
409 uint32_t ipsec_in_min_spi;
410 uint32_t ipsec_in_max_spi;
411 uint32_t ipsec_out_max_sa;
412 bool ipsec_out_sso_pffunc;
413
414
415 uintptr_t lmt_base;
416 bool io_enabled;
417 bool rx_ptp_ena;
418 uint16_t cints;
419 bool custom_sa_action;
420
421#define ROC_NIX_MEM_SZ (6 * 1024)
422 uint8_t reserved[ROC_NIX_MEM_SZ] __plt_cache_aligned;
423} __plt_cache_aligned;
424
425enum roc_nix_lso_tun_type {
426 ROC_NIX_LSO_TUN_V4V4,
427 ROC_NIX_LSO_TUN_V4V6,
428 ROC_NIX_LSO_TUN_V6V4,
429 ROC_NIX_LSO_TUN_V6V6,
430 ROC_NIX_LSO_TUN_MAX,
431};
432
433
434#define ROC_NIX_CN9K_TM_RR_WEIGHT_MAX 255u
435
436
437static inline uint64_t
438roc_nix_tm_max_sched_wt_get(void)
439{
440 if (roc_model_is_cn9k())
441 return ROC_NIX_CN9K_TM_RR_WEIGHT_MAX;
442 else
443 return NIX_TM_RR_WEIGHT_MAX;
444}
445
446static inline uint64_t
447roc_nix_tm_max_shaper_burst_get(void)
448{
449 if (roc_model_is_cn9k())
450 return NIX_CN9K_TM_MAX_SHAPER_BURST;
451 else
452 return NIX_TM_MAX_SHAPER_BURST;
453}
454
455
456int __roc_api roc_nix_dev_init(struct roc_nix *roc_nix);
457int __roc_api roc_nix_dev_fini(struct roc_nix *roc_nix);
458
459
460bool __roc_api roc_nix_is_lbk(struct roc_nix *roc_nix);
461bool __roc_api roc_nix_is_sdp(struct roc_nix *roc_nix);
462bool __roc_api roc_nix_is_pf(struct roc_nix *roc_nix);
463bool __roc_api roc_nix_is_vf_or_sdp(struct roc_nix *roc_nix);
464int __roc_api roc_nix_get_base_chan(struct roc_nix *roc_nix);
465int __roc_api roc_nix_get_pf(struct roc_nix *roc_nix);
466int __roc_api roc_nix_get_vf(struct roc_nix *roc_nix);
467uint16_t __roc_api roc_nix_get_pf_func(struct roc_nix *roc_nix);
468uint16_t __roc_api roc_nix_get_vwqe_interval(struct roc_nix *roc_nix);
469int __roc_api roc_nix_max_pkt_len(struct roc_nix *roc_nix);
470
471
472int __roc_api roc_nix_lf_alloc(struct roc_nix *roc_nix, uint32_t nb_rxq,
473 uint32_t nb_txq, uint64_t rx_cfg);
474int __roc_api roc_nix_lf_free(struct roc_nix *roc_nix);
475int __roc_api roc_nix_lf_inl_ipsec_cfg(struct roc_nix *roc_nix,
476 struct roc_nix_ipsec_cfg *cfg, bool enb);
477int __roc_api roc_nix_cpt_ctx_cache_sync(struct roc_nix *roc_nix);
478int __roc_api roc_nix_rx_drop_re_set(struct roc_nix *roc_nix, bool ena);
479
480
481int __roc_api roc_nix_lf_get_reg_count(struct roc_nix *roc_nix);
482int __roc_api roc_nix_lf_reg_dump(struct roc_nix *roc_nix, uint64_t *data);
483int __roc_api roc_nix_queues_ctx_dump(struct roc_nix *roc_nix);
484void __roc_api roc_nix_cqe_dump(const struct nix_cqe_hdr_s *cq);
485void __roc_api roc_nix_rq_dump(struct roc_nix_rq *rq);
486void __roc_api roc_nix_cq_dump(struct roc_nix_cq *cq);
487void __roc_api roc_nix_sq_dump(struct roc_nix_sq *sq);
488void __roc_api roc_nix_tm_dump(struct roc_nix *roc_nix);
489void __roc_api roc_nix_dump(struct roc_nix *roc_nix);
490
491
492void __roc_api roc_nix_rx_queue_intr_enable(struct roc_nix *roc_nix,
493 uint16_t rxq_id);
494void __roc_api roc_nix_rx_queue_intr_disable(struct roc_nix *roc_nix,
495 uint16_t rxq_id);
496void __roc_api roc_nix_err_intr_ena_dis(struct roc_nix *roc_nix, bool enb);
497void __roc_api roc_nix_ras_intr_ena_dis(struct roc_nix *roc_nix, bool enb);
498int __roc_api roc_nix_register_queue_irqs(struct roc_nix *roc_nix);
499void __roc_api roc_nix_unregister_queue_irqs(struct roc_nix *roc_nix);
500int __roc_api roc_nix_register_cq_irqs(struct roc_nix *roc_nix);
501void __roc_api roc_nix_unregister_cq_irqs(struct roc_nix *roc_nix);
502
503
504#define ROC_NIX_TM_SHAPER_PROFILE_NONE UINT32_MAX
505#define ROC_NIX_TM_NODE_ID_INVALID UINT32_MAX
506
507enum roc_nix_tm_tree {
508 ROC_NIX_TM_DEFAULT = 0,
509 ROC_NIX_TM_RLIMIT,
510 ROC_NIX_TM_PFC,
511 ROC_NIX_TM_USER,
512 ROC_NIX_TM_TREE_MAX,
513};
514
515enum roc_tm_node_level {
516 ROC_TM_LVL_ROOT = 0,
517 ROC_TM_LVL_SCH1,
518 ROC_TM_LVL_SCH2,
519 ROC_TM_LVL_SCH3,
520 ROC_TM_LVL_SCH4,
521 ROC_TM_LVL_QUEUE,
522 ROC_TM_LVL_MAX,
523};
524
525
526
527
528int __roc_api roc_nix_tm_init(struct roc_nix *roc_nix);
529void __roc_api roc_nix_tm_fini(struct roc_nix *roc_nix);
530int __roc_api roc_nix_tm_sq_aura_fc(struct roc_nix_sq *sq, bool enable);
531int __roc_api roc_nix_tm_sq_flush_spin(struct roc_nix_sq *sq);
532
533
534
535
536
537struct roc_nix_tm_node {
538#define ROC_NIX_TM_NODE_SZ (128)
539 uint8_t reserved[ROC_NIX_TM_NODE_SZ];
540
541 uint32_t id;
542 uint32_t parent_id;
543 uint32_t priority;
544 uint32_t weight;
545 uint32_t shaper_profile_id;
546 uint16_t lvl;
547 bool pkt_mode;
548 bool pkt_mode_set;
549
550 void (*free_fn)(void *node);
551};
552
553struct roc_nix_tm_shaper_profile {
554#define ROC_NIX_TM_SHAPER_PROFILE_SZ (128)
555 uint8_t reserved[ROC_NIX_TM_SHAPER_PROFILE_SZ];
556
557 uint32_t id;
558 uint64_t commit_rate;
559 uint64_t commit_sz;
560 uint64_t peak_rate;
561 uint64_t peak_sz;
562 int32_t pkt_len_adj;
563 bool pkt_mode;
564 int8_t accuracy;
565
566 void (*free_fn)(void *profile);
567};
568
569enum roc_nix_tm_node_stats_type {
570 ROC_NIX_TM_NODE_PKTS_DROPPED,
571 ROC_NIX_TM_NODE_BYTES_DROPPED,
572 ROC_NIX_TM_NODE_GREEN_PKTS,
573 ROC_NIX_TM_NODE_GREEN_BYTES,
574 ROC_NIX_TM_NODE_YELLOW_PKTS,
575 ROC_NIX_TM_NODE_YELLOW_BYTES,
576 ROC_NIX_TM_NODE_RED_PKTS,
577 ROC_NIX_TM_NODE_RED_BYTES,
578 ROC_NIX_TM_NODE_STATS_MAX,
579};
580
581struct roc_nix_tm_node_stats {
582 uint64_t stats[ROC_NIX_TM_NODE_STATS_MAX];
583};
584
585enum roc_nix_tm_mark {
586 ROC_NIX_TM_MARK_VLAN_DEI,
587 ROC_NIX_TM_MARK_IPV4_DSCP,
588 ROC_NIX_TM_MARK_IPV4_ECN,
589 ROC_NIX_TM_MARK_IPV6_DSCP,
590 ROC_NIX_TM_MARK_IPV6_ECN,
591 ROC_NIX_TM_MARK_MAX
592};
593
594enum roc_nix_tm_mark_color {
595 ROC_NIX_TM_MARK_COLOR_Y,
596 ROC_NIX_TM_MARK_COLOR_R,
597 ROC_NIX_TM_MARK_COLOR_Y_R,
598 ROC_NIX_TM_MARK_COLOR_MAX
599};
600
601int __roc_api roc_nix_tm_node_add(struct roc_nix *roc_nix,
602 struct roc_nix_tm_node *roc_node);
603int __roc_api roc_nix_tm_node_delete(struct roc_nix *roc_nix, uint32_t node_id,
604 bool free);
605int __roc_api roc_nix_tm_free_resources(struct roc_nix *roc_nix, bool hw_only);
606int __roc_api roc_nix_tm_node_suspend_resume(struct roc_nix *roc_nix,
607 uint32_t node_id, bool suspend);
608int __roc_api roc_nix_tm_node_parent_update(struct roc_nix *roc_nix,
609 uint32_t node_id,
610 uint32_t new_parent_id,
611 uint32_t priority, uint32_t weight);
612int __roc_api roc_nix_tm_node_shaper_update(struct roc_nix *roc_nix,
613 uint32_t node_id,
614 uint32_t profile_id,
615 bool force_update);
616int __roc_api roc_nix_tm_node_pkt_mode_update(struct roc_nix *roc_nix,
617 uint32_t node_id, bool pkt_mode);
618int __roc_api roc_nix_tm_shaper_profile_add(
619 struct roc_nix *roc_nix, struct roc_nix_tm_shaper_profile *profile);
620int __roc_api roc_nix_tm_shaper_profile_update(
621 struct roc_nix *roc_nix, struct roc_nix_tm_shaper_profile *profile);
622int __roc_api roc_nix_tm_shaper_profile_delete(struct roc_nix *roc_nix,
623 uint32_t id);
624
625int __roc_api roc_nix_tm_prealloc_res(struct roc_nix *roc_nix, uint8_t lvl,
626 uint16_t discontig, uint16_t contig);
627uint16_t __roc_api roc_nix_tm_leaf_cnt(struct roc_nix *roc_nix);
628
629struct roc_nix_tm_node *__roc_api roc_nix_tm_node_get(struct roc_nix *roc_nix,
630 uint32_t node_id);
631struct roc_nix_tm_node *__roc_api
632roc_nix_tm_node_next(struct roc_nix *roc_nix, struct roc_nix_tm_node *__prev);
633struct roc_nix_tm_shaper_profile *__roc_api
634roc_nix_tm_shaper_profile_get(struct roc_nix *roc_nix, uint32_t profile_id);
635struct roc_nix_tm_shaper_profile *__roc_api roc_nix_tm_shaper_profile_next(
636 struct roc_nix *roc_nix, struct roc_nix_tm_shaper_profile *__prev);
637
638int __roc_api roc_nix_tm_node_stats_get(struct roc_nix *roc_nix,
639 uint32_t node_id, bool clear,
640 struct roc_nix_tm_node_stats *stats);
641
642
643
644int __roc_api roc_nix_tm_rlimit_sq(struct roc_nix *roc_nix, uint16_t qid,
645 uint64_t rate);
646
647
648
649int __roc_api roc_nix_tm_hierarchy_disable(struct roc_nix *roc_nix);
650int __roc_api roc_nix_tm_hierarchy_enable(struct roc_nix *roc_nix,
651 enum roc_nix_tm_tree tree,
652 bool xmit_enable);
653
654
655
656
657int __roc_api roc_nix_tm_node_lvl(struct roc_nix *roc_nix, uint32_t node_id);
658bool __roc_api roc_nix_tm_root_has_sp(struct roc_nix *roc_nix);
659void __roc_api roc_nix_tm_rsrc_max(bool pf, uint16_t schq[ROC_TM_LVL_MAX]);
660int __roc_api roc_nix_tm_rsrc_count(struct roc_nix *roc_nix,
661 uint16_t schq[ROC_TM_LVL_MAX]);
662int __roc_api roc_nix_tm_node_name_get(struct roc_nix *roc_nix,
663 uint32_t node_id, char *buf,
664 size_t buflen);
665int __roc_api roc_nix_smq_flush(struct roc_nix *roc_nix);
666int __roc_api roc_nix_tm_max_prio(struct roc_nix *roc_nix, int lvl);
667int __roc_api roc_nix_tm_lvl_is_leaf(struct roc_nix *roc_nix, int lvl);
668void __roc_api
669roc_nix_tm_shaper_default_red_algo(struct roc_nix_tm_node *node,
670 struct roc_nix_tm_shaper_profile *profile);
671int __roc_api roc_nix_tm_lvl_cnt_get(struct roc_nix *roc_nix);
672int __roc_api roc_nix_tm_lvl_have_link_access(struct roc_nix *roc_nix, int lvl);
673int __roc_api roc_nix_tm_prepare_rate_limited_tree(struct roc_nix *roc_nix);
674int __roc_api roc_nix_tm_pfc_prepare_tree(struct roc_nix *roc_nix);
675bool __roc_api roc_nix_tm_is_user_hierarchy_enabled(struct roc_nix *nix);
676int __roc_api roc_nix_tm_tree_type_get(struct roc_nix *nix);
677int __roc_api roc_nix_tm_mark_config(struct roc_nix *roc_nix,
678 enum roc_nix_tm_mark type, int mark_yellow,
679 int mark_red);
680uint64_t __roc_api roc_nix_tm_mark_format_get(struct roc_nix *roc_nix,
681 uint64_t *flags);
682
683
684int __roc_api roc_nix_bpf_timeunit_get(struct roc_nix *roc_nix,
685 uint32_t *time_unit);
686
687int __roc_api
688roc_nix_bpf_count_get(struct roc_nix *roc_nix, uint8_t lvl_mask,
689 uint16_t count[ROC_NIX_BPF_LEVEL_MAX] );
690
691int __roc_api roc_nix_bpf_alloc(struct roc_nix *roc_nix, uint8_t lvl_mask,
692 uint16_t per_lvl_cnt[ROC_NIX_BPF_LEVEL_MAX],
693 struct roc_nix_bpf_objs *profs );
694
695int __roc_api roc_nix_bpf_free(struct roc_nix *roc_nix,
696 struct roc_nix_bpf_objs *profs,
697 uint8_t num_prof);
698
699int __roc_api roc_nix_bpf_free_all(struct roc_nix *roc_nix);
700
701int __roc_api roc_nix_bpf_config(struct roc_nix *roc_nix, uint16_t id,
702 enum roc_nix_bpf_level_flag lvl_flag,
703 struct roc_nix_bpf_cfg *cfg);
704
705int __roc_api roc_nix_bpf_ena_dis(struct roc_nix *roc_nix, uint16_t id,
706 struct roc_nix_rq *rq, bool enable);
707
708int __roc_api roc_nix_bpf_dump(struct roc_nix *roc_nix, uint16_t id,
709 enum roc_nix_bpf_level_flag lvl_flag);
710
711int __roc_api roc_nix_bpf_pre_color_tbl_setup(
712 struct roc_nix *roc_nix, uint16_t id,
713 enum roc_nix_bpf_level_flag lvl_flag, struct roc_nix_bpf_precolor *tbl);
714
715
716int __roc_api roc_nix_bpf_connect(struct roc_nix *roc_nix,
717 enum roc_nix_bpf_level_flag lvl_flag,
718 uint16_t src_id, uint16_t dst_id);
719
720int __roc_api
721roc_nix_bpf_stats_read(struct roc_nix *roc_nix, uint16_t id, uint64_t mask,
722 enum roc_nix_bpf_level_flag lvl_flag,
723 uint64_t stats[ROC_NIX_BPF_STATS_MAX] );
724
725int __roc_api roc_nix_bpf_stats_reset(struct roc_nix *roc_nix, uint16_t id,
726 uint64_t mask,
727 enum roc_nix_bpf_level_flag lvl_flag);
728
729int __roc_api
730roc_nix_bpf_lf_stats_read(struct roc_nix *roc_nix, uint64_t mask,
731 uint64_t stats[ROC_NIX_BPF_STATS_MAX] );
732
733int __roc_api roc_nix_bpf_lf_stats_reset(struct roc_nix *roc_nix,
734 uint64_t mask);
735
736uint8_t __roc_api
737roc_nix_bpf_level_to_idx(enum roc_nix_bpf_level_flag lvl_flag);
738
739uint8_t __roc_api roc_nix_bpf_stats_to_idx(enum roc_nix_bpf_stats lvl_flag);
740
741
742int __roc_api roc_nix_mac_rxtx_start_stop(struct roc_nix *roc_nix, bool start);
743int __roc_api roc_nix_mac_link_event_start_stop(struct roc_nix *roc_nix,
744 bool start);
745int __roc_api roc_nix_mac_loopback_enable(struct roc_nix *roc_nix, bool enable);
746int __roc_api roc_nix_mac_addr_set(struct roc_nix *roc_nix,
747 const uint8_t addr[]);
748int __roc_api roc_nix_mac_max_entries_get(struct roc_nix *roc_nix);
749int __roc_api roc_nix_mac_addr_add(struct roc_nix *roc_nix, uint8_t addr[]);
750int __roc_api roc_nix_mac_addr_del(struct roc_nix *roc_nix, uint32_t index);
751int __roc_api roc_nix_mac_promisc_mode_enable(struct roc_nix *roc_nix,
752 int enable);
753int __roc_api roc_nix_mac_link_state_set(struct roc_nix *roc_nix, uint8_t up);
754int __roc_api roc_nix_mac_link_info_set(struct roc_nix *roc_nix,
755 struct roc_nix_link_info *link_info);
756int __roc_api roc_nix_mac_link_info_get(struct roc_nix *roc_nix,
757 struct roc_nix_link_info *link_info);
758int __roc_api roc_nix_mac_mtu_set(struct roc_nix *roc_nix, uint16_t mtu);
759int __roc_api roc_nix_mac_max_rx_len_set(struct roc_nix *roc_nix,
760 uint16_t maxlen);
761int __roc_api roc_nix_mac_link_cb_register(struct roc_nix *roc_nix,
762 link_status_t link_update);
763void __roc_api roc_nix_mac_link_cb_unregister(struct roc_nix *roc_nix);
764int __roc_api roc_nix_mac_link_info_get_cb_register(
765 struct roc_nix *roc_nix, link_info_get_t link_info_get);
766void __roc_api roc_nix_mac_link_info_get_cb_unregister(struct roc_nix *roc_nix);
767
768
769int __roc_api roc_nix_switch_hdr_set(struct roc_nix *roc_nix,
770 uint64_t switch_header_type,
771 uint8_t pre_l2_size_offset,
772 uint8_t pre_l2_size_offset_mask,
773 uint8_t pre_l2_size_shift_dir);
774int __roc_api roc_nix_lso_fmt_setup(struct roc_nix *roc_nix);
775int __roc_api roc_nix_lso_fmt_get(struct roc_nix *roc_nix,
776 uint8_t udp_tun[ROC_NIX_LSO_TUN_MAX],
777 uint8_t tun[ROC_NIX_LSO_TUN_MAX]);
778int __roc_api roc_nix_lso_custom_fmt_setup(struct roc_nix *roc_nix,
779 struct nix_lso_format *fields,
780 uint16_t nb_fields);
781
782int __roc_api roc_nix_eeprom_info_get(struct roc_nix *roc_nix,
783 struct roc_nix_eeprom_info *info);
784
785
786int __roc_api roc_nix_fc_config_set(struct roc_nix *roc_nix,
787 struct roc_nix_fc_cfg *fc_cfg);
788
789int __roc_api roc_nix_fc_config_get(struct roc_nix *roc_nix,
790 struct roc_nix_fc_cfg *fc_cfg);
791
792int __roc_api roc_nix_fc_mode_set(struct roc_nix *roc_nix,
793 enum roc_nix_fc_mode mode);
794
795int __roc_api roc_nix_pfc_mode_set(struct roc_nix *roc_nix,
796 struct roc_nix_pfc_cfg *pfc_cfg);
797
798int __roc_api roc_nix_pfc_mode_get(struct roc_nix *roc_nix,
799 struct roc_nix_pfc_cfg *pfc_cfg);
800
801uint16_t __roc_api roc_nix_chan_count_get(struct roc_nix *roc_nix);
802
803enum roc_nix_fc_mode __roc_api roc_nix_fc_mode_get(struct roc_nix *roc_nix);
804
805void __roc_api roc_nix_fc_npa_bp_cfg(struct roc_nix *roc_nix, uint64_t pool_id,
806 uint8_t ena, uint8_t force, uint8_t tc);
807
808
809int __roc_api roc_nix_npc_promisc_ena_dis(struct roc_nix *roc_nix, int enable);
810
811int __roc_api roc_nix_npc_mac_addr_set(struct roc_nix *roc_nix, uint8_t addr[]);
812
813int __roc_api roc_nix_npc_mac_addr_get(struct roc_nix *roc_nix, uint8_t *addr);
814
815int __roc_api roc_nix_npc_rx_ena_dis(struct roc_nix *roc_nix, bool enable);
816
817int __roc_api roc_nix_npc_mcast_config(struct roc_nix *roc_nix,
818 bool mcast_enable, bool prom_enable);
819
820
821void __roc_api roc_nix_rss_key_default_fill(struct roc_nix *roc_nix,
822 uint8_t key[ROC_NIX_RSS_KEY_LEN]);
823void __roc_api roc_nix_rss_key_set(struct roc_nix *roc_nix,
824 const uint8_t key[ROC_NIX_RSS_KEY_LEN]);
825void __roc_api roc_nix_rss_key_get(struct roc_nix *roc_nix,
826 uint8_t key[ROC_NIX_RSS_KEY_LEN]);
827int __roc_api roc_nix_rss_reta_set(struct roc_nix *roc_nix, uint8_t group,
828 uint16_t reta[ROC_NIX_RSS_RETA_MAX]);
829int __roc_api roc_nix_rss_reta_get(struct roc_nix *roc_nix, uint8_t group,
830 uint16_t reta[ROC_NIX_RSS_RETA_MAX]);
831int __roc_api roc_nix_rss_flowkey_set(struct roc_nix *roc_nix, uint8_t *alg_idx,
832 uint32_t flowkey, uint8_t group,
833 int mcam_index);
834int __roc_api roc_nix_rss_default_setup(struct roc_nix *roc_nix,
835 uint32_t flowkey);
836
837
838int __roc_api roc_nix_stats_get(struct roc_nix *roc_nix,
839 struct roc_nix_stats *stats);
840int __roc_api roc_nix_stats_reset(struct roc_nix *roc_nix);
841int __roc_api roc_nix_stats_queue_get(struct roc_nix *roc_nix, uint16_t qid,
842 bool is_rx,
843 struct roc_nix_stats_queue *qstats);
844int __roc_api roc_nix_stats_queue_reset(struct roc_nix *roc_nix, uint16_t qid,
845 bool is_rx);
846int __roc_api roc_nix_num_xstats_get(struct roc_nix *roc_nix);
847int __roc_api roc_nix_xstats_get(struct roc_nix *roc_nix,
848 struct roc_nix_xstat *xstats, unsigned int n);
849int __roc_api roc_nix_xstats_names_get(struct roc_nix *roc_nix,
850 struct roc_nix_xstat_name *xstats_names,
851 unsigned int limit);
852
853
854int __roc_api roc_nix_rq_init(struct roc_nix *roc_nix, struct roc_nix_rq *rq,
855 bool ena);
856int __roc_api roc_nix_rq_modify(struct roc_nix *roc_nix, struct roc_nix_rq *rq,
857 bool ena);
858int __roc_api roc_nix_rq_ena_dis(struct roc_nix_rq *rq, bool enable);
859int __roc_api roc_nix_rq_is_sso_enable(struct roc_nix *roc_nix, uint32_t qid);
860int __roc_api roc_nix_rq_fini(struct roc_nix_rq *rq);
861int __roc_api roc_nix_cq_init(struct roc_nix *roc_nix, struct roc_nix_cq *cq);
862int __roc_api roc_nix_cq_fini(struct roc_nix_cq *cq);
863void __roc_api roc_nix_cq_head_tail_get(struct roc_nix *roc_nix, uint16_t qid,
864 uint32_t *head, uint32_t *tail);
865int __roc_api roc_nix_sq_init(struct roc_nix *roc_nix, struct roc_nix_sq *sq);
866int __roc_api roc_nix_sq_fini(struct roc_nix_sq *sq);
867void __roc_api roc_nix_sq_head_tail_get(struct roc_nix *roc_nix, uint16_t qid,
868 uint32_t *head, uint32_t *tail);
869
870
871int __roc_api roc_nix_ptp_rx_ena_dis(struct roc_nix *roc_nix, int enable);
872int __roc_api roc_nix_ptp_tx_ena_dis(struct roc_nix *roc_nix, int enable);
873int __roc_api roc_nix_ptp_clock_read(struct roc_nix *roc_nix, uint64_t *clock,
874 uint64_t *tsc, uint8_t is_pmu);
875int __roc_api roc_nix_ptp_sync_time_adjust(struct roc_nix *roc_nix,
876 int64_t delta);
877int __roc_api roc_nix_ptp_info_cb_register(struct roc_nix *roc_nix,
878 ptp_info_update_t ptp_update);
879void __roc_api roc_nix_ptp_info_cb_unregister(struct roc_nix *roc_nix);
880bool __roc_api roc_nix_ptp_is_enable(struct roc_nix *roc_nix);
881
882
883int __roc_api
884roc_nix_vlan_mcam_entry_read(struct roc_nix *roc_nix, uint32_t index,
885 struct npc_mcam_read_entry_rsp **rsp);
886int __roc_api roc_nix_vlan_mcam_entry_write(struct roc_nix *roc_nix,
887 uint32_t index,
888 struct mcam_entry *entry,
889 uint8_t intf, uint8_t enable);
890int __roc_api roc_nix_vlan_mcam_entry_alloc_and_write(struct roc_nix *roc_nix,
891 struct mcam_entry *entry,
892 uint8_t intf,
893 uint8_t priority,
894 uint8_t ref_entry);
895int __roc_api roc_nix_vlan_mcam_entry_free(struct roc_nix *roc_nix,
896 uint32_t index);
897int __roc_api roc_nix_vlan_mcam_entry_ena_dis(struct roc_nix *roc_nix,
898 uint32_t index, const int enable);
899int __roc_api roc_nix_vlan_strip_vtag_ena_dis(struct roc_nix *roc_nix,
900 bool enable);
901int __roc_api roc_nix_vlan_insert_ena_dis(struct roc_nix *roc_nix,
902 struct roc_nix_vlan_config *vlan_cfg,
903 uint64_t *mcam_index, bool enable);
904int __roc_api roc_nix_vlan_tpid_set(struct roc_nix *roc_nix, uint32_t type,
905 uint16_t tpid);
906
907
908int __roc_api roc_nix_mcast_mcam_entry_alloc(struct roc_nix *roc_nix,
909 uint16_t nb_entries,
910 uint8_t priority,
911 uint16_t index[]);
912int __roc_api roc_nix_mcast_mcam_entry_free(struct roc_nix *roc_nix,
913 uint32_t index);
914int __roc_api roc_nix_mcast_mcam_entry_write(struct roc_nix *roc_nix,
915 struct mcam_entry *entry,
916 uint32_t index, uint8_t intf,
917 uint64_t action);
918int __roc_api roc_nix_mcast_mcam_entry_ena_dis(struct roc_nix *roc_nix,
919 uint32_t index, bool enable);
920#endif
921