net/mlx5: support matching on VXLAN reserved field
[dpdk.git] / drivers / common / cnxk / roc_nix.c
index 040f78c..23d508b 100644 (file)
@@ -80,6 +80,34 @@ roc_nix_get_pf_func(struct roc_nix *roc_nix)
        return dev->pf_func;
 }
 
+int
+roc_nix_lf_inl_ipsec_cfg(struct roc_nix *roc_nix, struct roc_nix_ipsec_cfg *cfg,
+                        bool enb)
+{
+       struct nix *nix = roc_nix_to_nix_priv(roc_nix);
+       struct nix_inline_ipsec_lf_cfg *lf_cfg;
+       struct mbox *mbox = (&nix->dev)->mbox;
+
+       lf_cfg = mbox_alloc_msg_nix_inline_ipsec_lf_cfg(mbox);
+       if (lf_cfg == NULL)
+               return -ENOSPC;
+
+       if (enb) {
+               lf_cfg->enable = 1;
+               lf_cfg->sa_base_addr = cfg->iova;
+               lf_cfg->ipsec_cfg1.sa_idx_w = plt_log2_u32(cfg->max_sa);
+               lf_cfg->ipsec_cfg0.lenm1_max = roc_nix_max_pkt_len(roc_nix) - 1;
+               lf_cfg->ipsec_cfg1.sa_idx_max = cfg->max_sa - 1;
+               lf_cfg->ipsec_cfg0.sa_pow2_size = plt_log2_u32(cfg->sa_size);
+               lf_cfg->ipsec_cfg0.tag_const = cfg->tag_const;
+               lf_cfg->ipsec_cfg0.tt = cfg->tt;
+       } else {
+               lf_cfg->enable = 0;
+       }
+
+       return mbox_process(mbox);
+}
+
 int
 roc_nix_max_pkt_len(struct roc_nix *roc_nix)
 {
@@ -115,6 +143,7 @@ roc_nix_lf_alloc(struct roc_nix *roc_nix, uint32_t nb_rxq, uint32_t nb_txq,
        req->rss_sz = nix->reta_sz;
        req->rss_grps = ROC_NIX_RSS_GRPS;
        req->npa_func = idev_npa_pffunc_get();
+       req->sso_func = idev_sso_pffunc_get();
        req->rx_cfg = rx_cfg;
 
        if (!roc_nix->rss_tag_as_xor)
@@ -363,11 +392,22 @@ skip_dev_init:
        nix->reta_sz = reta_sz;
        nix->mtu = ROC_NIX_DEFAULT_HW_FRS;
 
+       /* Register error and ras interrupts */
+       rc = nix_register_irqs(nix);
+       if (rc)
+               goto lf_detach;
+
+       rc = nix_tm_conf_init(roc_nix);
+       if (rc)
+               goto unregister_irqs;
+
        /* Get NIX HW info */
        roc_nix_get_hw_info(roc_nix);
        nix->dev.drv_inited = true;
 
        return 0;
+unregister_irqs:
+       nix_unregister_irqs(nix);
 lf_detach:
        nix_lf_detach(nix);
 dev_fini:
@@ -388,6 +428,9 @@ roc_nix_dev_fini(struct roc_nix *roc_nix)
        if (!nix->dev.drv_inited)
                goto fini;
 
+       nix_tm_conf_fini(roc_nix);
+       nix_unregister_irqs(nix);
+
        rc = nix_lf_detach(nix);
        nix->dev.drv_inited = false;
 fini: