dpdk/drivers/net/octeontx2/otx2_ethdev_sec.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: BSD-3-Clause
   2 * Copyright (C) 2020 Marvell International Ltd.
   3 */
   4
   5#ifndef __OTX2_ETHDEV_SEC_H__
   6#define __OTX2_ETHDEV_SEC_H__
   7
   8#include <rte_ethdev.h>
   9
  10#include "otx2_ipsec_fp.h"
  11#include "otx2_ipsec_po.h"
  12
  13#define OTX2_CPT_RES_ALIGN              16
  14#define OTX2_NIX_SEND_DESC_ALIGN        16
  15#define OTX2_CPT_INST_SIZE              64
  16
  17#define OTX2_CPT_EGRP_INLINE_IPSEC      1
  18
  19#define OTX2_CPT_OP_INLINE_IPSEC_OUTB           (0x40 | 0x25)
  20#define OTX2_CPT_OP_INLINE_IPSEC_INB            (0x40 | 0x26)
  21#define OTX2_CPT_OP_WRITE_HMAC_IPAD_OPAD        (0x40 | 0x27)
  22
  23#define OTX2_SEC_CPT_COMP_GOOD  0x1
  24#define OTX2_SEC_UC_COMP_GOOD   0x0
  25#define OTX2_SEC_COMP_GOOD      (OTX2_SEC_UC_COMP_GOOD << 8 | \
  26                                 OTX2_SEC_CPT_COMP_GOOD)
  27
  28/* CPT Result */
  29struct otx2_cpt_res {
  30        union {
  31                struct {
  32                        uint64_t compcode:8;
  33                        uint64_t uc_compcode:8;
  34                        uint64_t doneint:1;
  35                        uint64_t reserved_17_63:47;
  36                        uint64_t reserved_64_127;
  37                };
  38                uint16_t u16[8];
  39        };
  40};
  41
  42struct otx2_cpt_inst_s {
  43        union {
  44                struct {
  45                        /* W0 */
  46                        uint64_t nixtxl : 3;
  47                        uint64_t doneint : 1;
  48                        uint64_t nixtx_addr : 60;
  49                        /* W1 */
  50                        uint64_t res_addr : 64;
  51                        /* W2 */
  52                        uint64_t tag : 32;
  53                        uint64_t tt : 2;
  54                        uint64_t grp : 10;
  55                        uint64_t rsvd_175_172 : 4;
  56                        uint64_t rvu_pf_func : 16;
  57                        /* W3 */
  58                        uint64_t qord : 1;
  59                        uint64_t rsvd_194_193 : 2;
  60                        uint64_t wqe_ptr : 61;
  61                        /* W4 */
  62                        uint64_t dlen : 16;
  63                        uint64_t param2 : 16;
  64                        uint64_t param1 : 16;
  65                        uint64_t opcode : 16;
  66                        /* W5 */
  67                        uint64_t dptr : 64;
  68                        /* W6 */
  69                        uint64_t rptr : 64;
  70                        /* W7 */
  71                        uint64_t cptr : 61;
  72                        uint64_t egrp : 3;
  73                };
  74                uint64_t u64[8];
  75        };
  76};
  77
  78/*
  79 * Security session for inline IPsec protocol offload. This is private data of
  80 * inline capable PMD.
  81 */
  82struct otx2_sec_session_ipsec_ip {
  83        RTE_STD_C11
  84        union {
  85                /*
  86                 * Inbound SA would accessed by crypto block. And so the memory
  87                 * is allocated differently and shared with the h/w. Only
  88                 * holding a pointer to this memory in the session private
  89                 * space.
  90                 */
  91                void *in_sa;
  92                /* Outbound SA */
  93                struct otx2_ipsec_fp_out_sa out_sa;
  94        };
  95
  96        /* Address of CPT LMTLINE */
  97        void *cpt_lmtline;
  98        /* CPT LF enqueue register address */
  99        rte_iova_t cpt_nq_reg;
 100
 101        /* Pre calculated lengths and data for a session */
 102        uint8_t partial_len;
 103        uint8_t roundup_len;
 104        uint8_t roundup_byte;
 105        uint16_t ip_id;
 106        union {
 107                uint64_t esn;
 108                struct {
 109                        uint32_t seq;
 110                        uint32_t esn_hi;
 111                };
 112        };
 113
 114        uint64_t inst_w7;
 115
 116        /* CPT QP used by SA */
 117        struct otx2_cpt_qp *qp;
 118};
 119
 120int otx2_eth_sec_ctx_create(struct rte_eth_dev *eth_dev);
 121
 122void otx2_eth_sec_ctx_destroy(struct rte_eth_dev *eth_dev);
 123
 124int otx2_eth_sec_update_tag_type(struct rte_eth_dev *eth_dev);
 125
 126int otx2_eth_sec_init(struct rte_eth_dev *eth_dev);
 127
 128void otx2_eth_sec_fini(struct rte_eth_dev *eth_dev);
 129
 130#endif /* __OTX2_ETHDEV_SEC_H__ */
 131