common/cnxk: avoid using stashing option of stype
[dpdk.git] / drivers / common / cnxk / roc_cpt.h
1 /* SPDX-License-Identifier: BSD-3-Clause
2  * Copyright(C) 2021 Marvell.
3  */
4
5 #ifndef _ROC_CPT_H_
6 #define _ROC_CPT_H_
7
8 #include "roc_api.h"
9
10 #define ROC_AE_CPT_BLOCK_TYPE1 0
11 #define ROC_AE_CPT_BLOCK_TYPE2 1
12
13 /* Default engine groups */
14 #define ROC_CPT_DFLT_ENG_GRP_SE    0UL
15 #define ROC_CPT_DFLT_ENG_GRP_SE_IE 1UL
16 #define ROC_CPT_DFLT_ENG_GRP_AE    2UL
17
18 #define ROC_CPT_MAX_LFS 64
19 #define ROC_CN10K_CPT_INST_DW_M1                                               \
20         ((uint64_t)(((sizeof(struct cpt_inst_s) / 16) - 1) & 0x7))
21 #define ROC_CN10K_TWO_CPT_INST_DW_M1                                           \
22         ((uint64_t)(((sizeof(struct cpt_inst_s) * 2 / 16) - 1) & 0x7))
23
24 /* Vector of sizes in the burst of 16 CPT inst except first in 63:19 of
25  * APT_LMT_ARG_S
26  */
27 #define ROC_CN10K_CPT_LMT_ARG                                                  \
28         (ROC_CN10K_CPT_INST_DW_M1 << (19 + 3 * 0) |                            \
29          ROC_CN10K_CPT_INST_DW_M1 << (19 + 3 * 1) |                            \
30          ROC_CN10K_CPT_INST_DW_M1 << (19 + 3 * 2) |                            \
31          ROC_CN10K_CPT_INST_DW_M1 << (19 + 3 * 3) |                            \
32          ROC_CN10K_CPT_INST_DW_M1 << (19 + 3 * 4) |                            \
33          ROC_CN10K_CPT_INST_DW_M1 << (19 + 3 * 5) |                            \
34          ROC_CN10K_CPT_INST_DW_M1 << (19 + 3 * 6) |                            \
35          ROC_CN10K_CPT_INST_DW_M1 << (19 + 3 * 7) |                            \
36          ROC_CN10K_CPT_INST_DW_M1 << (19 + 3 * 8) |                            \
37          ROC_CN10K_CPT_INST_DW_M1 << (19 + 3 * 9) |                            \
38          ROC_CN10K_CPT_INST_DW_M1 << (19 + 3 * 10) |                           \
39          ROC_CN10K_CPT_INST_DW_M1 << (19 + 3 * 11) |                           \
40          ROC_CN10K_CPT_INST_DW_M1 << (19 + 3 * 12) |                           \
41          ROC_CN10K_CPT_INST_DW_M1 << (19 + 3 * 13) |                           \
42          ROC_CN10K_CPT_INST_DW_M1 << (19 + 3 * 14))
43
44 /* CPT helper macros */
45 #define ROC_CPT_AH_HDR_LEN       12
46 #define ROC_CPT_AES_GCM_IV_LEN   8
47 #define ROC_CPT_AES_GCM_MAC_LEN  16
48 #define ROC_CPT_AES_CBC_IV_LEN   16
49 #define ROC_CPT_SHA1_HMAC_LEN    12
50 #define ROC_CPT_SHA2_HMAC_LEN    16
51 #define ROC_CPT_AUTH_KEY_LEN_MAX 64
52
53 #define ROC_CPT_DES3_KEY_LEN      24
54 #define ROC_CPT_AES128_KEY_LEN    16
55 #define ROC_CPT_AES192_KEY_LEN    24
56 #define ROC_CPT_AES256_KEY_LEN    32
57 #define ROC_CPT_MD5_KEY_LENGTH    16
58 #define ROC_CPT_SHA1_KEY_LENGTH   20
59 #define ROC_CPT_SHA256_KEY_LENGTH 32
60 #define ROC_CPT_SHA384_KEY_LENGTH 48
61 #define ROC_CPT_SHA512_KEY_LENGTH 64
62 #define ROC_CPT_AUTH_KEY_LEN_MAX  64
63
64 #define ROC_CPT_DES_BLOCK_LENGTH 8
65 #define ROC_CPT_AES_BLOCK_LENGTH 16
66
67 #define ROC_CPT_AES_GCM_ROUNDUP_BYTE_LEN 4
68 #define ROC_CPT_AES_CBC_ROUNDUP_BYTE_LEN 16
69
70 /* Salt length for AES-CTR/GCM/CCM and AES-GMAC */
71 #define ROC_CPT_SALT_LEN 4
72
73 #define ROC_CPT_ESP_HDR_LEN         8
74 #define ROC_CPT_ESP_TRL_LEN         2
75 #define ROC_CPT_AH_HDR_LEN          12
76 #define ROC_CPT_TUNNEL_IPV4_HDR_LEN 20
77 #define ROC_CPT_TUNNEL_IPV6_HDR_LEN 40
78
79 struct roc_cpt_lmtline {
80         uint64_t io_addr;
81         uint64_t *fc_addr;
82         uintptr_t lmt_base;
83 };
84
85 struct roc_cpt_lf {
86         /* Input parameters */
87         uint16_t lf_id;
88         uint32_t nb_desc;
89         /* End of Input parameters */
90         struct plt_pci_device *pci_dev;
91         struct dev *dev;
92         struct roc_cpt *roc_cpt;
93         uintptr_t rbase;
94         uintptr_t lmt_base;
95         uint16_t msixoff;
96         uint16_t pf_func;
97         uint64_t *fc_addr;
98         uint32_t fc_hyst_bits;
99         uint64_t fc_thresh;
100         uint64_t io_addr;
101         uint8_t *iq_vaddr;
102         struct roc_nix *inl_outb_nix;
103 } __plt_cache_aligned;
104
105 struct roc_cpt {
106         struct plt_pci_device *pci_dev;
107         struct roc_cpt_lf *lf[ROC_CPT_MAX_LFS];
108         uint16_t nb_lf;
109         uint16_t nb_lf_avail;
110         uintptr_t lmt_base;
111         /**< CPT device capabilities */
112         union cpt_eng_caps hw_caps[CPT_MAX_ENG_TYPES];
113         uint8_t eng_grp[CPT_MAX_ENG_TYPES];
114
115 #define ROC_CPT_MEM_SZ (6 * 1024)
116         uint8_t reserved[ROC_CPT_MEM_SZ] __plt_cache_aligned;
117 } __plt_cache_aligned;
118
119 struct roc_cpt_rxc_time_cfg {
120         uint32_t step;
121         uint16_t active_limit;
122         uint16_t active_thres;
123         uint16_t zombie_limit;
124         uint16_t zombie_thres;
125 };
126
127 static inline int
128 roc_cpt_is_iq_full(struct roc_cpt_lf *lf)
129 {
130         if (*lf->fc_addr < lf->fc_thresh)
131                 return 0;
132
133         return 1;
134 }
135
136 int __roc_api roc_cpt_rxc_time_cfg(struct roc_cpt *roc_cpt,
137                                    struct roc_cpt_rxc_time_cfg *cfg);
138 int __roc_api roc_cpt_dev_init(struct roc_cpt *roc_cpt);
139 int __roc_api roc_cpt_dev_fini(struct roc_cpt *roc_cpt);
140 int __roc_api roc_cpt_eng_grp_add(struct roc_cpt *roc_cpt,
141                                   enum cpt_eng_type eng_type);
142 int __roc_api roc_cpt_dev_configure(struct roc_cpt *roc_cpt, int nb_lf);
143 void __roc_api roc_cpt_dev_clear(struct roc_cpt *roc_cpt);
144 int __roc_api roc_cpt_lf_init(struct roc_cpt *roc_cpt, struct roc_cpt_lf *lf);
145 void __roc_api roc_cpt_lf_fini(struct roc_cpt_lf *lf);
146 int __roc_api roc_cpt_lf_ctx_flush(struct roc_cpt_lf *lf, uint64_t cptr);
147 int __roc_api roc_cpt_inline_ipsec_cfg(struct dev *dev, uint8_t slot,
148                                        struct roc_nix *nix);
149 int __roc_api roc_cpt_inline_ipsec_inb_cfg(struct roc_cpt *roc_cpt,
150                                            uint16_t param1, uint16_t param2);
151 int __roc_api roc_cpt_afs_print(struct roc_cpt *roc_cpt);
152 int __roc_api roc_cpt_lfs_print(struct roc_cpt *roc_cpt);
153 void __roc_api roc_cpt_iq_disable(struct roc_cpt_lf *lf);
154 void __roc_api roc_cpt_iq_enable(struct roc_cpt_lf *lf);
155 int __roc_api roc_cpt_lmtline_init(struct roc_cpt *roc_cpt,
156                                    struct roc_cpt_lmtline *lmtline, int lf_id);
157
158 #endif /* _ROC_CPT_H_ */