void bnxt_ulp_irq_restart(struct bnxt *bp, int err) { struct bnxt_en_dev *edev = bp->edev; struct bnxt_ulp_ops *ops; if (!edev || !(edev->flags & BNXT_EN_FLAG_MSIX_REQUESTED)) return; if (bnxt_ulp_registered(bp->edev, BNXT_ROCE_ULP)) { struct bnxt_ulp *ulp = &edev->ulp_tbl[BNXT_ROCE_ULP]; struct bnxt_msix_entry *ent = NULL; if (!ulp->msix_requested) return; ops = rtnl_dereference(ulp->ulp_ops); if (!ops || !ops->ulp_irq_restart) return; if (!err) { ent = kcalloc(ulp->msix_requested, sizeof(*ent), GFP_KERNEL); if (!ent) return; bnxt_fill_msix_vecs(bp, ent); } ops->ulp_irq_restart(ulp->handle, ent); kfree(ent); } }
int bnxt_get_ulp_stat_ctxs(struct bnxt *bp) { if (bnxt_ulp_registered(bp->edev, BNXT_ROCE_ULP)) return BNXT_MIN_ROCE_STAT_CTXS; return 0; }
int bnxt_get_ulp_msix_num(struct bnxt *bp) { if (bnxt_ulp_registered(bp->edev, BNXT_ROCE_ULP)) { struct bnxt_en_dev *edev = bp->edev; return edev->ulp_tbl[BNXT_ROCE_ULP].msix_requested; } return 0; }
void bnxt_ulp_irq_stop(struct bnxt *bp) { struct bnxt_en_dev *edev = bp->edev; struct bnxt_ulp_ops *ops; if (!edev || !(edev->flags & BNXT_EN_FLAG_MSIX_REQUESTED)) return; if (bnxt_ulp_registered(bp->edev, BNXT_ROCE_ULP)) { struct bnxt_ulp *ulp = &edev->ulp_tbl[BNXT_ROCE_ULP]; if (!ulp->msix_requested) return; ops = rtnl_dereference(ulp->ulp_ops); if (!ops || !ops->ulp_irq_stop) return; ops->ulp_irq_stop(ulp->handle); } }