modified cpt_lf_unregister_irqs cpt_lf_register_irqs()
parameters to register and unregister call back handlers.

Signed-off-by: Rakesh Kudurumalla <[email protected]>
---
 drivers/common/cnxk/roc_cpt.c         | 53 ++++++++++++++-------------
 drivers/common/cnxk/roc_cpt_priv.h    | 10 ++++-
 drivers/common/cnxk/roc_nix_inl.c     |  6 +--
 drivers/common/cnxk/roc_nix_inl_dev.c |  6 +--
 4 files changed, 42 insertions(+), 33 deletions(-)

diff --git a/drivers/common/cnxk/roc_cpt.c b/drivers/common/cnxk/roc_cpt.c
index d1ba2b8858..9f67a3c78c 100644
--- a/drivers/common/cnxk/roc_cpt.c
+++ b/drivers/common/cnxk/roc_cpt.c
@@ -44,7 +44,7 @@ cpt_lf_misc_intr_enb_dis(struct roc_cpt_lf *lf, bool enb)
                            lf->rbase + CPT_LF_MISC_INT_ENA_W1C);
 }
 
-static void
+void
 cpt_lf_misc_irq(void *param)
 {
        struct roc_cpt_lf *lf = (struct roc_cpt_lf *)param;
@@ -70,7 +70,7 @@ cpt_lf_misc_irq(void *param)
 }
 
 static int
-cpt_lf_register_misc_irq(struct roc_cpt_lf *lf)
+cpt_lf_register_misc_irq(struct roc_cpt_lf *lf, misc_irq_cb_t misc_cb)
 {
        struct plt_pci_device *pci_dev = lf->pci_dev;
        struct plt_intr_handle *handle;
@@ -82,7 +82,7 @@ cpt_lf_register_misc_irq(struct roc_cpt_lf *lf)
        /* Clear err interrupt */
        cpt_lf_misc_intr_enb_dis(lf, false);
        /* Set used interrupt vectors */
-       rc = dev_irq_register(handle, cpt_lf_misc_irq, lf, vec);
+       rc = dev_irq_register(handle, misc_cb, lf, vec);
        /* Enable all dev interrupt except for RQ_DISABLED */
        cpt_lf_misc_intr_enb_dis(lf, true);
 
@@ -90,7 +90,7 @@ cpt_lf_register_misc_irq(struct roc_cpt_lf *lf)
 }
 
 static void
-cpt_lf_unregister_misc_irq(struct roc_cpt_lf *lf)
+cpt_lf_unregister_misc_irq(struct roc_cpt_lf *lf, misc_irq_cb_t misc_cb)
 {
        struct plt_pci_device *pci_dev = lf->pci_dev;
        struct plt_intr_handle *handle;
@@ -101,7 +101,7 @@ cpt_lf_unregister_misc_irq(struct roc_cpt_lf *lf)
        vec = lf->msixoff + CPT_LF_INT_VEC_MISC;
        /* Clear err interrupt */
        cpt_lf_misc_intr_enb_dis(lf, false);
-       dev_irq_unregister(handle, cpt_lf_misc_irq, lf, vec);
+       dev_irq_unregister(handle, misc_cb, lf, vec);
 }
 
 static void
@@ -134,7 +134,7 @@ cpt_lf_done_irq(void *param)
 }
 
 static int
-cpt_lf_register_done_irq(struct roc_cpt_lf *lf)
+cpt_lf_register_done_irq(struct roc_cpt_lf *lf, done_irq_cb_t done_cb)
 {
        struct plt_pci_device *pci_dev = lf->pci_dev;
        struct plt_intr_handle *handle;
@@ -148,7 +148,7 @@ cpt_lf_register_done_irq(struct roc_cpt_lf *lf)
        cpt_lf_done_intr_enb_dis(lf, false);
 
        /* Set used interrupt vectors */
-       rc = dev_irq_register(handle, cpt_lf_done_irq, lf, vec);
+       rc = dev_irq_register(handle, done_cb, lf, vec);
 
        /* Enable done interrupt */
        cpt_lf_done_intr_enb_dis(lf, true);
@@ -157,7 +157,7 @@ cpt_lf_register_done_irq(struct roc_cpt_lf *lf)
 }
 
 static void
-cpt_lf_unregister_done_irq(struct roc_cpt_lf *lf)
+cpt_lf_unregister_done_irq(struct roc_cpt_lf *lf, done_irq_cb_t done_cb)
 {
        struct plt_pci_device *pci_dev = lf->pci_dev;
        struct plt_intr_handle *handle;
@@ -169,11 +169,11 @@ cpt_lf_unregister_done_irq(struct roc_cpt_lf *lf)
 
        /* Clear done interrupt */
        cpt_lf_done_intr_enb_dis(lf, false);
-       dev_irq_unregister(handle, cpt_lf_done_irq, lf, vec);
+       dev_irq_unregister(handle, done_cb, lf, vec);
 }
 
-static int
-cpt_lf_register_irqs(struct roc_cpt_lf *lf)
+int
+cpt_lf_register_irqs(struct roc_cpt_lf *lf, misc_irq_cb_t misc_cb, 
done_irq_cb_t done_cb)
 {
        int rc;
 
@@ -184,22 +184,22 @@ cpt_lf_register_irqs(struct roc_cpt_lf *lf)
        }
 
        /* Register lf err interrupt */
-       rc = cpt_lf_register_misc_irq(lf);
+       rc = cpt_lf_register_misc_irq(lf, misc_cb);
        if (rc)
                plt_err("Error registering IRQs");
 
-       rc = cpt_lf_register_done_irq(lf);
+       rc = cpt_lf_register_done_irq(lf, done_cb);
        if (rc)
                plt_err("Error registering IRQs");
 
        return rc;
 }
 
-static void
-cpt_lf_unregister_irqs(struct roc_cpt_lf *lf)
+void
+cpt_lf_unregister_irqs(struct roc_cpt_lf *lf, misc_irq_cb_t misc_cb, 
done_irq_cb_t done_cb)
 {
-       cpt_lf_unregister_misc_irq(lf);
-       cpt_lf_unregister_done_irq(lf);
+       cpt_lf_unregister_misc_irq(lf, misc_cb);
+       cpt_lf_unregister_done_irq(lf, done_cb);
 }
 
 static void
@@ -685,7 +685,7 @@ cpt_get_blkaddr(struct dev *dev)
 }
 
 int
-cpt_lf_init(struct roc_cpt_lf *lf)
+cpt_lf_init(struct roc_cpt_lf *lf, bool skip_register_irq)
 {
        struct dev *dev = lf->dev;
        uint64_t blkaddr;
@@ -710,9 +710,11 @@ cpt_lf_init(struct roc_cpt_lf *lf)
        /* Initialize instruction queue */
        cpt_iq_init(lf);
 
-       rc = cpt_lf_register_irqs(lf);
-       if (rc)
-               goto disable_iq;
+       if (!skip_register_irq) {
+               rc = cpt_lf_register_irqs(lf, cpt_lf_misc_irq, cpt_lf_done_irq);
+               if (rc)
+                       goto disable_iq;
+       }
 
        return 0;
 
@@ -733,7 +735,7 @@ roc_cpt_lf_init(struct roc_cpt *roc_cpt, struct roc_cpt_lf 
*lf)
        lf->msixoff = cpt->lf_msix_off[lf->lf_id];
        lf->pci_dev = cpt->pci_dev;
 
-       rc = cpt_lf_init(lf);
+       rc = cpt_lf_init(lf, false);
        if (rc)
                return rc;
 
@@ -943,10 +945,11 @@ roc_cpt_iq_reset(struct roc_cpt_lf *lf)
 }
 
 void
-cpt_lf_fini(struct roc_cpt_lf *lf)
+cpt_lf_fini(struct roc_cpt_lf *lf, bool skip_register_irq)
 {
        /* Unregister IRQ's */
-       cpt_lf_unregister_irqs(lf);
+       if (!skip_register_irq)
+               cpt_lf_unregister_irqs(lf, cpt_lf_misc_irq, cpt_lf_done_irq);
 
        /* Disable IQ */
        roc_cpt_iq_disable(lf);
@@ -977,7 +980,7 @@ roc_cpt_lf_fini(struct roc_cpt_lf *lf)
        if (lf == NULL)
                return;
        lf->roc_cpt->lf[lf->lf_id] = NULL;
-       cpt_lf_fini(lf);
+       cpt_lf_fini(lf, false);
 }
 
 int
diff --git a/drivers/common/cnxk/roc_cpt_priv.h 
b/drivers/common/cnxk/roc_cpt_priv.h
index 0bd956e373..c46ef143ab 100644
--- a/drivers/common/cnxk/roc_cpt_priv.h
+++ b/drivers/common/cnxk/roc_cpt_priv.h
@@ -18,14 +18,20 @@ roc_cpt_to_cpt_priv(struct roc_cpt *roc_cpt)
        return (struct cpt *)&roc_cpt->reserved[0];
 }
 
+typedef void (*misc_irq_cb_t)(void *params);
+typedef void (*done_irq_cb_t)(void *params);
 int cpt_lfs_attach(struct dev *dev, uint8_t blkaddr, bool modify,
                   uint16_t nb_lf);
 int cpt_lfs_detach(struct dev *dev);
 int cpt_lfs_alloc(struct dev *dev, uint8_t eng_grpmsk, uint8_t blk, bool 
inl_dev_sso,
                  bool ctx_ilen_valid, uint8_t ctx_ilen, bool rxc_ena, uint16_t 
rx_inject_qp);
 int cpt_lfs_free(struct dev *dev);
-int cpt_lf_init(struct roc_cpt_lf *lf);
-void cpt_lf_fini(struct roc_cpt_lf *lf);
+int cpt_lf_init(struct roc_cpt_lf *lf, bool skip_register_irq);
+void cpt_lf_fini(struct roc_cpt_lf *lf, bool skip_register_irq);
+int cpt_lf_register_irqs(struct roc_cpt_lf *lf, misc_irq_cb_t misc_cb, 
done_irq_cb_t done_cb);
+void cpt_lf_unregister_irqs(struct roc_cpt_lf *lf, misc_irq_cb_t misc_cb, 
done_irq_cb_t done_cb);
+void cpt_lf_cq_init(struct roc_cpt_lf *lf);
+void cpt_lf_misc_irq(void *params);
 
 int cpt_lf_outb_cfg(struct dev *dev, uint16_t sso_pf_func, uint16_t 
nix_pf_func,
                    uint8_t lf_id, bool ena);
diff --git a/drivers/common/cnxk/roc_nix_inl.c 
b/drivers/common/cnxk/roc_nix_inl.c
index c7637ddbdc..bc63f4ee62 100644
--- a/drivers/common/cnxk/roc_nix_inl.c
+++ b/drivers/common/cnxk/roc_nix_inl.c
@@ -1588,7 +1588,7 @@ roc_nix_inl_outb_init(struct roc_nix *roc_nix)
                lf->pci_dev = nix->pci_dev;
 
                /* Setup CPT LF instruction queue */
-               rc = cpt_lf_init(lf);
+               rc = cpt_lf_init(lf, false);
                if (rc) {
                        plt_err("Failed to initialize CPT LF, rc=%d", rc);
                        goto lf_fini;
@@ -1678,7 +1678,7 @@ roc_nix_inl_outb_init(struct roc_nix *roc_nix)
 
 lf_fini:
        for (j = i - 1; j >= 0; j--)
-               cpt_lf_fini(&lf_base[j]);
+               cpt_lf_fini(&lf_base[j], false);
        plt_free(lf_base);
 lf_free:
        rc |= cpt_lfs_free(dev);
@@ -1705,7 +1705,7 @@ roc_nix_inl_outb_fini(struct roc_nix *roc_nix)
 
        /* Cleanup CPT LF instruction queue */
        for (i = 0; i < nix->nb_cpt_lf; i++)
-               cpt_lf_fini(&lf_base[i]);
+               cpt_lf_fini(&lf_base[i], false);
 
        /* Free LF resources */
        rc = cpt_lfs_free(dev);
diff --git a/drivers/common/cnxk/roc_nix_inl_dev.c 
b/drivers/common/cnxk/roc_nix_inl_dev.c
index 75d03c1077..dcfb893215 100644
--- a/drivers/common/cnxk/roc_nix_inl_dev.c
+++ b/drivers/common/cnxk/roc_nix_inl_dev.c
@@ -451,7 +451,7 @@ nix_inl_cpt_setup(struct nix_inl_dev *inl_dev, bool 
inl_dev_sso)
                lf->msixoff = inl_dev->cpt_msixoff[i];
                lf->pci_dev = inl_dev->pci_dev;
 
-               rc = cpt_lf_init(lf);
+               rc = cpt_lf_init(lf, false);
                if (rc) {
                        plt_err("Failed to initialize CPT LF, rc=%d", rc);
                        goto lf_free;
@@ -477,7 +477,7 @@ nix_inl_cpt_setup(struct nix_inl_dev *inl_dev, bool 
inl_dev_sso)
        return 0;
 lf_fini:
        for (i = 0; i < inl_dev->nb_cptlf; i++)
-               cpt_lf_fini(&inl_dev->cpt_lf[i]);
+               cpt_lf_fini(&inl_dev->cpt_lf[i], false);
 lf_free:
        rc |= cpt_lfs_free(dev);
        return rc;
@@ -501,7 +501,7 @@ nix_inl_cpt_release(struct nix_inl_dev *inl_dev)
 
        /* Cleanup CPT LF queue */
        for (i = 0; i < inl_dev->nb_cptlf; i++)
-               cpt_lf_fini(&inl_dev->cpt_lf[i]);
+               cpt_lf_fini(&inl_dev->cpt_lf[i], false);
 
        /* Free LF resources */
        rc = cpt_lfs_free(dev);
-- 
2.25.1

Reply via email to