common/cnxk: support merging base steering rule
[dpdk.git] / drivers / common / cnxk / roc_cpt.h
index 022c8ad..9e63073 100644 (file)
@@ -7,12 +7,80 @@
 
 #include "roc_api.h"
 
+#define ROC_AE_CPT_BLOCK_TYPE1 0
+#define ROC_AE_CPT_BLOCK_TYPE2 1
+
 /* Default engine groups */
 #define ROC_CPT_DFLT_ENG_GRP_SE           0UL
 #define ROC_CPT_DFLT_ENG_GRP_SE_IE 1UL
 #define ROC_CPT_DFLT_ENG_GRP_AE           2UL
 
 #define ROC_CPT_MAX_LFS 64
+#define ROC_CN10K_CPT_INST_DW_M1                                               \
+       ((uint64_t)(((sizeof(struct cpt_inst_s) / 16) - 1) & 0x7))
+#define ROC_CN10K_TWO_CPT_INST_DW_M1                                           \
+       ((uint64_t)(((sizeof(struct cpt_inst_s) * 2 / 16) - 1) & 0x7))
+
+/* Vector of sizes in the burst of 16 CPT inst except first in 63:19 of
+ * APT_LMT_ARG_S
+ */
+#define ROC_CN10K_CPT_LMT_ARG                                                  \
+       (ROC_CN10K_CPT_INST_DW_M1 << (19 + 3 * 0) |                            \
+        ROC_CN10K_CPT_INST_DW_M1 << (19 + 3 * 1) |                            \
+        ROC_CN10K_CPT_INST_DW_M1 << (19 + 3 * 2) |                            \
+        ROC_CN10K_CPT_INST_DW_M1 << (19 + 3 * 3) |                            \
+        ROC_CN10K_CPT_INST_DW_M1 << (19 + 3 * 4) |                            \
+        ROC_CN10K_CPT_INST_DW_M1 << (19 + 3 * 5) |                            \
+        ROC_CN10K_CPT_INST_DW_M1 << (19 + 3 * 6) |                            \
+        ROC_CN10K_CPT_INST_DW_M1 << (19 + 3 * 7) |                            \
+        ROC_CN10K_CPT_INST_DW_M1 << (19 + 3 * 8) |                            \
+        ROC_CN10K_CPT_INST_DW_M1 << (19 + 3 * 9) |                            \
+        ROC_CN10K_CPT_INST_DW_M1 << (19 + 3 * 10) |                           \
+        ROC_CN10K_CPT_INST_DW_M1 << (19 + 3 * 11) |                           \
+        ROC_CN10K_CPT_INST_DW_M1 << (19 + 3 * 12) |                           \
+        ROC_CN10K_CPT_INST_DW_M1 << (19 + 3 * 13) |                           \
+        ROC_CN10K_CPT_INST_DW_M1 << (19 + 3 * 14))
+
+/* CPT helper macros */
+#define ROC_CPT_AH_HDR_LEN      12
+#define ROC_CPT_AES_GCM_IV_LEN  8
+#define ROC_CPT_AES_GCM_MAC_LEN         16
+#define ROC_CPT_AES_CBC_IV_LEN  16
+#define ROC_CPT_SHA1_HMAC_LEN   12
+#define ROC_CPT_SHA2_HMAC_LEN   16
+#define ROC_CPT_AUTH_KEY_LEN_MAX 64
+
+#define ROC_CPT_DES3_KEY_LEN     24
+#define ROC_CPT_AES128_KEY_LEN   16
+#define ROC_CPT_AES192_KEY_LEN   24
+#define ROC_CPT_AES256_KEY_LEN   32
+#define ROC_CPT_MD5_KEY_LENGTH   16
+#define ROC_CPT_SHA1_KEY_LENGTH          20
+#define ROC_CPT_SHA256_KEY_LENGTH 32
+#define ROC_CPT_SHA384_KEY_LENGTH 48
+#define ROC_CPT_SHA512_KEY_LENGTH 64
+#define ROC_CPT_AUTH_KEY_LEN_MAX  64
+
+#define ROC_CPT_DES_BLOCK_LENGTH 8
+#define ROC_CPT_AES_BLOCK_LENGTH 16
+
+#define ROC_CPT_AES_GCM_ROUNDUP_BYTE_LEN 4
+#define ROC_CPT_AES_CBC_ROUNDUP_BYTE_LEN 16
+
+/* Salt length for AES-CTR/GCM/CCM and AES-GMAC */
+#define ROC_CPT_SALT_LEN 4
+
+#define ROC_CPT_ESP_HDR_LEN        8
+#define ROC_CPT_ESP_TRL_LEN        2
+#define ROC_CPT_AH_HDR_LEN         12
+#define ROC_CPT_TUNNEL_IPV4_HDR_LEN 20
+#define ROC_CPT_TUNNEL_IPV6_HDR_LEN 40
+
+struct roc_cpt_lmtline {
+       uint64_t io_addr;
+       uint64_t *fc_addr;
+       uintptr_t lmt_base;
+};
 
 struct roc_cpt_lf {
        /* Input parameters */
@@ -27,8 +95,11 @@ struct roc_cpt_lf {
        uint16_t msixoff;
        uint16_t pf_func;
        uint64_t *fc_addr;
+       uint32_t fc_hyst_bits;
+       uint64_t fc_thresh;
        uint64_t io_addr;
        uint8_t *iq_vaddr;
+       struct roc_nix *inl_outb_nix;
 } __plt_cache_aligned;
 
 struct roc_cpt {
@@ -53,6 +124,15 @@ struct roc_cpt_rxc_time_cfg {
        uint16_t zombie_thres;
 };
 
+static inline int
+roc_cpt_is_iq_full(struct roc_cpt_lf *lf)
+{
+       if (*lf->fc_addr < lf->fc_thresh)
+               return 0;
+
+       return 1;
+}
+
 int __roc_api roc_cpt_rxc_time_cfg(struct roc_cpt *roc_cpt,
                                   struct roc_cpt_rxc_time_cfg *cfg);
 int __roc_api roc_cpt_dev_init(struct roc_cpt *roc_cpt);
@@ -64,8 +144,15 @@ void __roc_api roc_cpt_dev_clear(struct roc_cpt *roc_cpt);
 int __roc_api roc_cpt_lf_init(struct roc_cpt *roc_cpt, struct roc_cpt_lf *lf);
 void __roc_api roc_cpt_lf_fini(struct roc_cpt_lf *lf);
 int __roc_api roc_cpt_lf_ctx_flush(struct roc_cpt_lf *lf, uint64_t cptr);
+int __roc_api roc_cpt_inline_ipsec_cfg(struct dev *dev, uint8_t slot,
+                                      struct roc_nix *nix);
+int __roc_api roc_cpt_inline_ipsec_inb_cfg(struct roc_cpt *roc_cpt,
+                                          uint16_t param1, uint16_t param2);
 int __roc_api roc_cpt_afs_print(struct roc_cpt *roc_cpt);
 int __roc_api roc_cpt_lfs_print(struct roc_cpt *roc_cpt);
 void __roc_api roc_cpt_iq_disable(struct roc_cpt_lf *lf);
+void __roc_api roc_cpt_iq_enable(struct roc_cpt_lf *lf);
+int __roc_api roc_cpt_lmtline_init(struct roc_cpt *roc_cpt,
+                                  struct roc_cpt_lmtline *lmtline, int lf_id);
 
 #endif /* _ROC_CPT_H_ */