DPDK 26.07.0-rc1
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
74struct 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;
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;
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;
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;
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
543struct rte_pmd_cnxk_inl_dev_q;
544
562__rte_experimental
563int 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
583int 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
648int rte_pmd_cnxk_sa_flush(uint16_t portid, union rte_pmd_cnxk_ipsec_hw_sa *sess, bool inb);
649
657__rte_experimental
658struct rte_pmd_cnxk_inl_dev_q *rte_pmd_cnxk_inl_dev_qptr_get(void);
659
673__rte_experimental
674uint16_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
695 struct rte_pmd_cnxk_cpt_q_stats *stats, uint16_t idx);
696
706__rte_experimental
708
716 uint64_t ltype_mask;
718 uint64_t ltype_match;
720 uint64_t lid;
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
909#endif /* _PMD_CNXK_H_ */
__rte_experimental union rte_pmd_cnxk_cpt_res_s * rte_pmd_cnxk_inl_ipsec_res(struct rte_mbuf *mbuf)
__rte_experimental const char * rte_pmd_cnxk_model_str_get(void)
rte_pmd_cnxk_sec_action_alg
Definition: rte_pmd_cnxk.h:22
@ RTE_PMD_CNXK_SEC_ACTION_ALG4
Definition: rte_pmd_cnxk.h:47
@ RTE_PMD_CNXK_SEC_ACTION_ALG2
Definition: rte_pmd_cnxk.h:36
@ RTE_PMD_CNXK_SEC_ACTION_ALG1
Definition: rte_pmd_cnxk.h:31
@ RTE_PMD_CNXK_SEC_ACTION_ALG0
Definition: rte_pmd_cnxk.h:26
@ RTE_PMD_CNXK_SEC_ACTION_ALG3
Definition: rte_pmd_cnxk.h:41
rte_pmd_cnxk_cpt_q_stats_type
Definition: rte_pmd_cnxk.h:51
@ RTE_PMD_CNXK_CPT_Q_STATS_ETHDEV
Definition: rte_pmd_cnxk.h:59
@ RTE_PMD_CNXK_CPT_Q_STATS_INL_DEV
Definition: rte_pmd_cnxk.h:53
@ RTE_PMD_CNXK_CPT_Q_STATS_KERNEL
Definition: rte_pmd_cnxk.h:57
#define RTE_PMD_CNXK_AR_WINBITS_SZ
Definition: rte_pmd_cnxk.h:106
__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)
__rte_experimental int rte_pmd_cnxk_nix_inl_custom_profile_release(uint16_t portid, uint16_t profile_id)
__rte_experimental struct rte_pmd_cnxk_inl_dev_q * rte_pmd_cnxk_inl_dev_qptr_get(void)
__rte_experimental int rte_pmd_cnxk_sa_flush(uint16_t portid, union rte_pmd_cnxk_ipsec_hw_sa *sess, bool inb)
__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)
__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 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_hw_session_base_get(uint16_t portid, bool inb)
#define RTE_PMD_CNXK_MAX_PROT_FIELDS
Definition: rte_pmd_cnxk.h:805
rte_pmd_cnxk_nix_rx_prot_e
Definition: rte_pmd_cnxk.h:792
@ RTE_PMD_CNXK_RX_PROT_PARAM2
Definition: rte_pmd_cnxk.h:795
@ RTE_PMD_CNXK_RX_PROT_INL_OFFSET
Definition: rte_pmd_cnxk.h:799
@ RTE_PMD_CNXK_RX_PROT_ALG
Definition: rte_pmd_cnxk.h:800
@ RTE_PMD_CNXK_RX_PROT_RPTR_H
Definition: rte_pmd_cnxk.h:797
@ RTE_PMD_CNXK_RX_PROT_SUB_INDEX
Definition: rte_pmd_cnxk.h:801
@ RTE_PMD_CNXK_RX_PROT_SA_INDEX
Definition: rte_pmd_cnxk.h:796
@ RTE_PMD_CNXK_RX_PROT_PARAM1
Definition: rte_pmd_cnxk.h:794
@ RTE_PMD_CNXK_RX_PROT_IP_OFFSET
Definition: rte_pmd_cnxk.h:798
@ RTE_PMD_CNXK_RX_PROT_OPCODE
Definition: rte_pmd_cnxk.h:793
__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)
__rte_experimental uint16_t rte_pmd_cnxk_inl_dev_submit(struct rte_pmd_cnxk_inl_dev_q *qptr, void *inst, uint16_t nb_inst)
__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)
uint64_t ar_winbits[RTE_PMD_CNXK_AR_WINBITS_SZ]
Definition: rte_pmd_cnxk.h:139
union rte_pmd_cnxk_ipsec_inb_sa::@14 w8
uint8_t hmac_opad_ipad[RTE_PMD_CNXK_CTX_MAX_OPAD_IPAD_LEN]
Definition: rte_pmd_cnxk.h:334
union rte_pmd_cnxk_ipsec_inb_sa::@15 w10
union rte_pmd_cnxk_ipsec_inb_sa::@12 w1
struct rte_pmd_cnxk_ipsec_inb_ctx_update_reg ctx
Definition: rte_pmd_cnxk.h:337
union rte_pmd_cnxk_ipsec_inb_sa::@13 w2
uint8_t cipher_key[RTE_PMD_CNXK_CTX_MAX_CKEY_LEN]
Definition: rte_pmd_cnxk.h:305
union rte_pmd_cnxk_ipsec_inb_sa::@11 w0
union rte_pmd_cnxk_ipsec_outer_ip_hdr outer_hdr
Definition: rte_pmd_cnxk.h:331
struct rte_pmd_cnxk_ipsec_outb_ctx_update_reg ctx
Definition: rte_pmd_cnxk.h:479
uint8_t hmac_opad_ipad[RTE_PMD_CNXK_CTX_MAX_OPAD_IPAD_LEN]
Definition: rte_pmd_cnxk.h:476
union rte_pmd_cnxk_ipsec_outb_iv iv
Definition: rte_pmd_cnxk.h:450
union rte_pmd_cnxk_ipsec_outb_sa::@23 w2
union rte_pmd_cnxk_ipsec_outb_sa::@21 w0
union rte_pmd_cnxk_ipsec_outb_sa::@24 w10
union rte_pmd_cnxk_ipsec_outb_sa::@22 w1
uint8_t cipher_key[RTE_PMD_CNXK_CTX_MAX_CKEY_LEN]
Definition: rte_pmd_cnxk.h:447
union rte_pmd_cnxk_ipsec_outer_ip_hdr outer_hdr
Definition: rte_pmd_cnxk.h:473
uint64_t ipv4_df_src_or_ipv6_flw_lbl_src
Definition: rte_pmd_cnxk.h:425
struct rte_pmd_cnxk_rx_extract_inl_cfg extract_cfg
Definition: rte_pmd_cnxk.h:835
struct rte_pmd_cnxk_rx_gen_inl_cfg gen_cfg
Definition: rte_pmd_cnxk.h:832
struct rte_pmd_cnxk_rx_def_inl_cfg def_cfg
Definition: rte_pmd_cnxk.h:829
struct rte_pmd_cnxk_rx_prot_field_inl_cfg prot_field_cfg[RTE_PMD_CNXK_MAX_PROT_FIELDS]
Definition: rte_pmd_cnxk.h:840
struct rte_pmd_cnxk_ipsec_outb_sa outb
Definition: rte_pmd_cnxk.h:487
struct rte_pmd_cnxk_ipsec_inb_sa inb
Definition: rte_pmd_cnxk.h:485