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 c467b55139..5330157dda 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 @@ -688,7 +688,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; @@ -713,9 +713,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; @@ -736,7 +738,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; @@ -946,10 +948,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); @@ -980,7 +983,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

