mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-12-28 11:18:45 +07:00
bnxt_en: Add a callback to inform RDMA driver during PCI shutdown.
When bnxt_en gets a PCI shutdown call, we need to have a new callback to inform the RDMA driver to do proper shutdown and removal. Signed-off-by: Michael Chan <michael.chan@broadcom.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
c7ef35eb0c
commit
0efd2fc65c
@ -7837,6 +7837,7 @@ static void bnxt_shutdown(struct pci_dev *pdev)
|
|||||||
dev_close(dev);
|
dev_close(dev);
|
||||||
|
|
||||||
if (system_state == SYSTEM_POWER_OFF) {
|
if (system_state == SYSTEM_POWER_OFF) {
|
||||||
|
bnxt_ulp_shutdown(bp);
|
||||||
bnxt_clear_int_mode(bp);
|
bnxt_clear_int_mode(bp);
|
||||||
pci_wake_from_d3(pdev, bp->wol);
|
pci_wake_from_d3(pdev, bp->wol);
|
||||||
pci_set_power_state(pdev, PCI_D3hot);
|
pci_set_power_state(pdev, PCI_D3hot);
|
||||||
|
@ -266,6 +266,25 @@ void bnxt_ulp_sriov_cfg(struct bnxt *bp, int num_vfs)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void bnxt_ulp_shutdown(struct bnxt *bp)
|
||||||
|
{
|
||||||
|
struct bnxt_en_dev *edev = bp->edev;
|
||||||
|
struct bnxt_ulp_ops *ops;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
if (!edev)
|
||||||
|
return;
|
||||||
|
|
||||||
|
for (i = 0; i < BNXT_MAX_ULP; i++) {
|
||||||
|
struct bnxt_ulp *ulp = &edev->ulp_tbl[i];
|
||||||
|
|
||||||
|
ops = rtnl_dereference(ulp->ulp_ops);
|
||||||
|
if (!ops || !ops->ulp_shutdown)
|
||||||
|
continue;
|
||||||
|
ops->ulp_shutdown(ulp->handle);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void bnxt_ulp_async_events(struct bnxt *bp, struct hwrm_async_event_cmpl *cmpl)
|
void bnxt_ulp_async_events(struct bnxt *bp, struct hwrm_async_event_cmpl *cmpl)
|
||||||
{
|
{
|
||||||
u16 event_id = le16_to_cpu(cmpl->event_id);
|
u16 event_id = le16_to_cpu(cmpl->event_id);
|
||||||
|
@ -26,6 +26,7 @@ struct bnxt_ulp_ops {
|
|||||||
void (*ulp_stop)(void *);
|
void (*ulp_stop)(void *);
|
||||||
void (*ulp_start)(void *);
|
void (*ulp_start)(void *);
|
||||||
void (*ulp_sriov_config)(void *, int);
|
void (*ulp_sriov_config)(void *, int);
|
||||||
|
void (*ulp_shutdown)(void *);
|
||||||
};
|
};
|
||||||
|
|
||||||
struct bnxt_msix_entry {
|
struct bnxt_msix_entry {
|
||||||
@ -87,6 +88,7 @@ void bnxt_subtract_ulp_resources(struct bnxt *bp, int ulp_id);
|
|||||||
void bnxt_ulp_stop(struct bnxt *bp);
|
void bnxt_ulp_stop(struct bnxt *bp);
|
||||||
void bnxt_ulp_start(struct bnxt *bp);
|
void bnxt_ulp_start(struct bnxt *bp);
|
||||||
void bnxt_ulp_sriov_cfg(struct bnxt *bp, int num_vfs);
|
void bnxt_ulp_sriov_cfg(struct bnxt *bp, int num_vfs);
|
||||||
|
void bnxt_ulp_shutdown(struct bnxt *bp);
|
||||||
void bnxt_ulp_async_events(struct bnxt *bp, struct hwrm_async_event_cmpl *cmpl);
|
void bnxt_ulp_async_events(struct bnxt *bp, struct hwrm_async_event_cmpl *cmpl);
|
||||||
struct bnxt_en_dev *bnxt_ulp_probe(struct net_device *dev);
|
struct bnxt_en_dev *bnxt_ulp_probe(struct net_device *dev);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user