DPDK  26.07.0
rte_pmd_cnxk.h
Go to the documentation of this file.
1 /* SPDX-License-Identifier: BSD-3-Clause
2  * Copyright(C) 2022 Marvell.
3  */
4 
11 #ifndef _PMD_CNXK_H_
12 #define _PMD_CNXK_H_
13 
14 #include <rte_compat.h>
15 #include <rte_ethdev.h>
16 #include <rte_ether.h>
17 #include <rte_security.h>
18 
48 };
49 
60 };
61 
65  uint64_t enc_pkts;
67  uint64_t enc_bytes;
69  uint64_t dec_pkts;
71  uint64_t dec_bytes;
72 };
73 
74 struct rte_pmd_cnxk_sec_action {
76  uint32_t sa_index;
78  bool sa_xor;
80  uint16_t sa_hi, sa_lo;
85  bool is_non_inp;
90  uint16_t profile_id;
94  bool use_custom_profile;
95 };
96 
97 #define RTE_PMD_CNXK_CTX_MAX_CKEY_LEN 32
98 #define RTE_PMD_CNXK_CTX_MAX_OPAD_IPAD_LEN 128
99 
101 #define RTE_PMD_CNXK_AR_WIN_SIZE_MIN 64
102 #define RTE_PMD_CNXK_AR_WIN_SIZE_MAX 4096
103 #define RTE_PMD_CNXK_LOG_MIN_AR_WIN_SIZE_M1 5
104 
106 #define RTE_PMD_CNXK_AR_WINBITS_SZ (RTE_ALIGN_CEIL(RTE_PMD_CNXK_AR_WIN_SIZE_MAX, 64) / 64)
107 
110  struct {
112  uint32_t dst_addr;
114  uint32_t src_addr;
115  } ipv4;
116  struct {
118  uint8_t src_addr[16];
120  uint8_t dst_addr[16];
121  } ipv6;
122 };
123 
127  uint64_t ar_base;
129  uint64_t ar_valid_mask;
131  uint64_t hard_life;
133  uint64_t soft_life;
135  uint64_t mib_octs;
137  uint64_t mib_pkts;
140 };
141 
144  uint64_t u64[2];
146  uint8_t iv_dbg[16];
147  struct {
149  uint8_t iv_dbg1[4];
151  uint8_t salt[4];
152 
153  uint32_t rsvd;
155  uint8_t iv_dbg2[4];
156  } s;
157 };
158 
161  union {
162  struct {
163  uint64_t reserved_0_2 : 3;
164  uint64_t address : 57;
165  uint64_t mode : 4;
166  } s;
167  uint64_t u64;
168  } err_ctl;
169 
170  uint64_t esn_val;
171  uint64_t hard_life;
172  uint64_t soft_life;
173  uint64_t mib_octs;
174  uint64_t mib_pkts;
175 };
176 
182  union {
183  struct {
185  uint64_t ar_win : 3;
187  uint64_t hard_life_dec : 1;
189  uint64_t soft_life_dec : 1;
190 
192  uint64_t count_glb_octets : 1;
194  uint64_t count_glb_pkts : 1;
196  uint64_t count_mib_bytes : 1;
197 
199  uint64_t count_mib_pkts : 1;
201  uint64_t hw_ctx_off : 7;
202 
204  uint64_t ctx_id : 16;
205 
207  uint64_t orig_pkt_fabs : 1;
209  uint64_t orig_pkt_free : 1;
211  uint64_t pkind : 6;
212 
213  uint64_t rsvd0 : 1;
215  uint64_t et_ovrwr : 1;
217  uint64_t pkt_output : 2;
219  uint64_t pkt_format : 1;
221  uint64_t defrag_opt : 2;
223  uint64_t x2p_dst : 1;
224 
226  uint64_t ctx_push_size : 7;
227  uint64_t rsvd1 : 1;
228 
230  uint64_t ctx_hdr_size : 2;
232  uint64_t aop_valid : 1;
233  uint64_t rsvd2 : 1;
235  uint64_t ctx_size : 4;
236  } s;
237  uint64_t u64;
238  } w0;
239 
241  union {
242  struct {
244  uint64_t orig_pkt_aura : 20;
245  uint64_t rsvd3 : 4;
247  uint64_t orig_pkt_foff : 8;
249  uint64_t cookie : 32;
250  } s;
251  uint64_t u64;
252  } w1;
253 
255  union {
256  struct {
258  uint64_t valid : 1;
260  uint64_t dir : 1;
261  uint64_t rsvd11 : 1;
262  uint64_t rsvd4 : 1;
264  uint64_t ipsec_mode : 1;
266  uint64_t ipsec_protocol : 1;
268  uint64_t aes_key_len : 2;
269 
271  uint64_t enc_type : 3;
273  uint64_t life_unit : 1;
275  uint64_t auth_type : 4;
276 
278  uint64_t encap_type : 2;
280  uint64_t et_ovrwr_ddr_en : 1;
282  uint64_t esn_en : 1;
284  uint64_t tport_l4_incr_csum : 1;
286  uint64_t ip_hdr_verify : 2;
288  uint64_t udp_ports_verify : 1;
289 
291  uint64_t l3hdr_on_err : 1;
292  uint64_t rsvd6 : 6;
293  uint64_t rsvd12 : 1;
294 
296  uint64_t spi : 32;
297  } s;
298  uint64_t u64;
299  } w2;
300 
302  uint64_t rsvd7;
303 
305  uint8_t cipher_key[RTE_PMD_CNXK_CTX_MAX_CKEY_LEN];
306 
308  union {
309  struct {
310  uint32_t rsvd8;
312  uint8_t salt[4];
313  } s;
314  uint64_t u64;
315  } w8;
316  uint64_t rsvd9;
317 
319  union {
320  struct {
321  uint64_t rsvd10 : 32;
323  uint64_t udp_src_port : 16;
325  uint64_t udp_dst_port : 16;
326  } s;
327  uint64_t u64;
328  } w10;
329 
332 
334  uint8_t hmac_opad_ipad[RTE_PMD_CNXK_CTX_MAX_OPAD_IPAD_LEN];
335 
338 };
339 
345  union {
346  struct {
348  uint64_t esn_en : 1;
350  uint64_t ip_id : 1;
351  uint64_t rsvd0 : 1;
353  uint64_t hard_life_dec : 1;
355  uint64_t soft_life_dec : 1;
356 
358  uint64_t count_glb_octets : 1;
360  uint64_t count_glb_pkts : 1;
362  uint64_t count_mib_bytes : 1;
363 
365  uint64_t count_mib_pkts : 1;
367  uint64_t hw_ctx_off : 7;
368 
370  uint64_t ctx_id : 16;
371  uint64_t rsvd1 : 16;
372 
374  uint64_t ctx_push_size : 7;
375  uint64_t rsvd2 : 1;
376 
378  uint64_t ctx_hdr_size : 2;
380  uint64_t aop_valid : 1;
381  uint64_t rsvd3 : 1;
383  uint64_t ctx_size : 4;
384  } s;
385  uint64_t u64;
386  } w0;
387 
389  union {
390  struct {
391  uint64_t rsvd4 : 32;
393  uint64_t cookie : 32;
394  } s;
395  uint64_t u64;
396  } w1;
397 
399  union {
400  struct {
402  uint64_t valid : 1;
404  uint64_t dir : 1;
405  uint64_t rsvd11 : 1;
406  uint64_t rsvd5 : 1;
408  uint64_t ipsec_mode : 1;
410  uint64_t ipsec_protocol : 1;
411 
413  uint64_t aes_key_len : 2;
414 
416  uint64_t enc_type : 3;
418  uint64_t life_unit : 1;
420  uint64_t auth_type : 4;
421 
423  uint64_t encap_type : 2;
427  uint64_t dscp_src : 1;
429  uint64_t iv_src : 2;
431  uint64_t ipid_gen : 1;
432  uint64_t rsvd6 : 1;
433 
434  uint64_t rsvd7 : 7;
435  uint64_t rsvd12 : 1;
436 
438  uint64_t spi : 32;
439  } s;
440  uint64_t u64;
441  } w2;
442 
444  uint64_t rsvd8;
445 
447  uint8_t cipher_key[RTE_PMD_CNXK_CTX_MAX_CKEY_LEN];
448 
451 
453  union {
454  struct {
455  uint64_t rsvd9 : 4;
457  uint64_t ipv4_df_or_ipv6_flw_lbl : 20;
458 
460  uint64_t dscp : 6;
461  uint64_t rsvd10 : 2;
462 
464  uint64_t udp_dst_port : 16;
465 
467  uint64_t udp_src_port : 16;
468  } s;
469  uint64_t u64;
470  } w10;
471 
474 
476  uint8_t hmac_opad_ipad[RTE_PMD_CNXK_CTX_MAX_OPAD_IPAD_LEN];
477 
480 };
481 
488 };
489 
495  uint64_t compcode : 7;
497  uint64_t doneint : 1;
499  uint64_t uc_compcode : 8;
501  uint64_t rlen : 16;
503  uint64_t spi : 32;
504 
506  uint64_t esn;
507  } cn10k;
508 
512  uint64_t compcode : 8;
514  uint64_t uc_compcode : 8;
516  uint64_t doneint : 1;
517  uint64_t reserved_17_63 : 47;
518 
519  uint64_t reserved_64_127;
520  } cn9k;
521 
523  uint64_t u64[2];
524 };
525 
531  uint16_t param1;
535  uint16_t param2;
536 };
537 
543 struct rte_pmd_cnxk_inl_dev_q;
544 
562 __rte_experimental
563 int rte_pmd_cnxk_hw_sa_read(uint16_t portid, void *sess, union rte_pmd_cnxk_ipsec_hw_sa *data,
564  uint32_t len, bool inb);
582 __rte_experimental
583 int rte_pmd_cnxk_hw_sa_write(uint16_t portid, void *sess, union rte_pmd_cnxk_ipsec_hw_sa *data,
584  uint32_t len, bool inb);
585 
600 __rte_experimental
602 
616 __rte_experimental
618 
630 __rte_experimental
632  uint16_t profile_id);
633 
647 __rte_experimental
648 int rte_pmd_cnxk_sa_flush(uint16_t portid, union rte_pmd_cnxk_ipsec_hw_sa *sess, bool inb);
649 
657 __rte_experimental
658 struct rte_pmd_cnxk_inl_dev_q *rte_pmd_cnxk_inl_dev_qptr_get(void);
659 
673 __rte_experimental
674 uint16_t rte_pmd_cnxk_inl_dev_submit(struct rte_pmd_cnxk_inl_dev_q *qptr, void *inst,
675  uint16_t nb_inst);
676 
693 __rte_experimental
694 int rte_pmd_cnxk_cpt_q_stats_get(uint16_t portid, enum rte_pmd_cnxk_cpt_q_stats_type type,
695  struct rte_pmd_cnxk_cpt_q_stats *stats, uint16_t idx);
696 
706 __rte_experimental
707 void rte_pmd_cnxk_hw_inline_inb_cfg_set(uint16_t portid, struct rte_pmd_cnxk_ipsec_inb_cfg *cfg);
708 
716  uint64_t ltype_mask;
718  uint64_t ltype_match;
720  uint64_t lid;
722  uint64_t gen_offset_ng;
724  uint64_t gen_offset;
726  uint64_t gen_nz;
728  uint64_t cpt_l3_lid;
730  uint64_t flags_mask;
732  uint64_t flags_match;
734  uint64_t match_oipv4;
736  uint64_t match_oipv6;
738  uint64_t oiplen_ena;
740  uint64_t inline_shift;
741 };
742 
749  uint64_t ltype_mask;
751  uint64_t ltype_match;
753  uint64_t lid;
755  uint64_t noffset;
757  uint64_t offset;
759  uint64_t param2;
761  uint64_t param1;
763  uint64_t opcode;
765  uint64_t egrp;
767  uint64_t ctx_val;
768 };
769 
776  uint64_t len_l;
778  uint64_t bitpos_l;
780  uint64_t len_m;
782  uint64_t bitpos_m;
784  uint64_t len_h;
786  uint64_t bitpos_h;
787 };
788 
802 };
803 
805 #define RTE_PMD_CNXK_MAX_PROT_FIELDS 9
806 
813  uint64_t logmult;
815  uint64_t sizem1;
817  uint64_t offset;
819  uint64_t valid;
820 };
821 
830 
833 
836 
841 
847  uint32_t sa_size;
848 
853  uint32_t max_sa;
854 };
855 
879 __rte_experimental
881  const struct rte_pmd_cnxk_profile_cfg_params *cfg, uint16_t *profile_id);
882 
897 __rte_experimental
899  uint16_t profile_id);
900 
907 __rte_experimental
908 const char *rte_pmd_cnxk_model_str_get(void);
909 #endif /* _PMD_CNXK_H_ */
__rte_experimental uint16_t rte_pmd_cnxk_inl_dev_submit(struct rte_pmd_cnxk_inl_dev_q *qptr, void *inst, uint16_t nb_inst)
struct rte_pmd_cnxk_rx_def_inl_cfg def_cfg
Definition: rte_pmd_cnxk.h:829
union rte_pmd_cnxk_ipsec_outb_sa::@21 w0
__rte_experimental void rte_pmd_cnxk_hw_inline_inb_cfg_set(uint16_t portid, struct rte_pmd_cnxk_ipsec_inb_cfg *cfg)
__rte_experimental union rte_pmd_cnxk_ipsec_hw_sa * rte_pmd_cnxk_inl_inb_prof_sa_base_get(uint16_t portid, uint16_t profile_id)
__rte_experimental const char * rte_pmd_cnxk_model_str_get(void)
uint64_t ar_winbits[RTE_PMD_CNXK_AR_WINBITS_SZ]
Definition: rte_pmd_cnxk.h:139
union rte_pmd_cnxk_ipsec_inb_sa::@15 w10
struct rte_pmd_cnxk_rx_prot_field_inl_cfg prot_field_cfg[RTE_PMD_CNXK_MAX_PROT_FIELDS]
Definition: rte_pmd_cnxk.h:840
__rte_experimental int rte_pmd_cnxk_cpt_q_stats_get(uint16_t portid, enum rte_pmd_cnxk_cpt_q_stats_type type, struct rte_pmd_cnxk_cpt_q_stats *stats, uint16_t idx)
struct rte_pmd_cnxk_ipsec_inb_ctx_update_reg ctx
Definition: rte_pmd_cnxk.h:337
struct rte_pmd_cnxk_ipsec_outb_sa outb
Definition: rte_pmd_cnxk.h:487
uint8_t cipher_key[RTE_PMD_CNXK_CTX_MAX_CKEY_LEN]
Definition: rte_pmd_cnxk.h:305
union rte_pmd_cnxk_ipsec_inb_sa::@13 w2
__rte_experimental int rte_pmd_cnxk_hw_sa_write(uint16_t portid, void *sess, union rte_pmd_cnxk_ipsec_hw_sa *data, uint32_t len, bool inb)
union rte_pmd_cnxk_ipsec_outb_iv iv
Definition: rte_pmd_cnxk.h:450
uint8_t hmac_opad_ipad[RTE_PMD_CNXK_CTX_MAX_OPAD_IPAD_LEN]
Definition: rte_pmd_cnxk.h:334
__rte_experimental union rte_pmd_cnxk_cpt_res_s * rte_pmd_cnxk_inl_ipsec_res(struct rte_mbuf *mbuf)
union rte_pmd_cnxk_ipsec_outer_ip_hdr outer_hdr
Definition: rte_pmd_cnxk.h:473
uint8_t hmac_opad_ipad[RTE_PMD_CNXK_CTX_MAX_OPAD_IPAD_LEN]
Definition: rte_pmd_cnxk.h:476
rte_pmd_cnxk_nix_rx_prot_e
Definition: rte_pmd_cnxk.h:792
#define RTE_PMD_CNXK_AR_WINBITS_SZ
Definition: rte_pmd_cnxk.h:106
union rte_pmd_cnxk_ipsec_outb_sa::@23 w2
union rte_pmd_cnxk_ipsec_outb_sa::@22 w1
__rte_experimental struct rte_pmd_cnxk_inl_dev_q * rte_pmd_cnxk_inl_dev_qptr_get(void)
__rte_experimental int rte_pmd_cnxk_nix_inl_custom_profile_setup(uint16_t portid, const struct rte_pmd_cnxk_profile_cfg_params *cfg, uint16_t *profile_id)
union rte_pmd_cnxk_ipsec_inb_sa::@11 w0
rte_pmd_cnxk_cpt_q_stats_type
Definition: rte_pmd_cnxk.h:51
uint64_t ipv4_df_src_or_ipv6_flw_lbl_src
Definition: rte_pmd_cnxk.h:425
__rte_experimental int rte_pmd_cnxk_sa_flush(uint16_t portid, union rte_pmd_cnxk_ipsec_hw_sa *sess, bool inb)
union rte_pmd_cnxk_ipsec_inb_sa::@14 w8
struct rte_pmd_cnxk_rx_gen_inl_cfg gen_cfg
Definition: rte_pmd_cnxk.h:832
__rte_experimental int rte_pmd_cnxk_nix_inl_custom_profile_release(uint16_t portid, uint16_t profile_id)
struct rte_pmd_cnxk_ipsec_inb_sa inb
Definition: rte_pmd_cnxk.h:485
uint8_t cipher_key[RTE_PMD_CNXK_CTX_MAX_CKEY_LEN]
Definition: rte_pmd_cnxk.h:447
union rte_pmd_cnxk_ipsec_inb_sa::@12 w1
#define RTE_PMD_CNXK_MAX_PROT_FIELDS
Definition: rte_pmd_cnxk.h:805
struct rte_pmd_cnxk_ipsec_outb_ctx_update_reg ctx
Definition: rte_pmd_cnxk.h:479
rte_pmd_cnxk_sec_action_alg
Definition: rte_pmd_cnxk.h:22
__rte_experimental int rte_pmd_cnxk_hw_sa_read(uint16_t portid, void *sess, union rte_pmd_cnxk_ipsec_hw_sa *data, uint32_t len, bool inb)
union rte_pmd_cnxk_ipsec_outer_ip_hdr outer_hdr
Definition: rte_pmd_cnxk.h:331
union rte_pmd_cnxk_ipsec_outb_sa::@24 w10
__rte_experimental union rte_pmd_cnxk_ipsec_hw_sa * rte_pmd_cnxk_hw_session_base_get(uint16_t portid, bool inb)
struct rte_pmd_cnxk_rx_extract_inl_cfg extract_cfg
Definition: rte_pmd_cnxk.h:835