Commit 63669ab3 authored by Ajit Khaparde's avatar Ajit Khaparde

bnxt_en: Use direct API instead of indirection

For a single ULP user there is no need for complicating function
indirection calls. Remove all this complexity in favour of direct
function calls exported by the bnxt_en driver. This allows to
simplify the code greatly. Also remove unused ulp_async_notifier.
Suggested-by: default avatarLeon Romanovsky <leonro@nvidia.com>
Signed-off-by: default avatarAjit Khaparde <ajit.khaparde@broadcom.com>
Reviewed-by: default avatarAndy Gospodarek <andrew.gospodarek@broadcom.com>
Reviewed-by: default avatarSelvin Xavier <selvin.xavier@broadcom.com>
Reviewed-by: default avatarLeon Romanovsky <leonro@nvidia.com>
parent dafcdf5e
...@@ -350,23 +350,6 @@ static struct bnxt_ulp_ops bnxt_re_ulp_ops = { ...@@ -350,23 +350,6 @@ static struct bnxt_ulp_ops bnxt_re_ulp_ops = {
/* RoCE -> Net driver */ /* RoCE -> Net driver */
/* Driver registration routines used to let the networking driver (bnxt_en)
* to know that the RoCE driver is now installed
*/
static int bnxt_re_unregister_netdev(struct bnxt_re_dev *rdev)
{
struct bnxt_en_dev *en_dev;
int rc;
if (!rdev)
return -EINVAL;
en_dev = rdev->en_dev;
rc = en_dev->en_ops->bnxt_unregister_device(rdev->en_dev);
return rc;
}
static int bnxt_re_register_netdev(struct bnxt_re_dev *rdev) static int bnxt_re_register_netdev(struct bnxt_re_dev *rdev)
{ {
struct bnxt_en_dev *en_dev; struct bnxt_en_dev *en_dev;
...@@ -374,26 +357,12 @@ static int bnxt_re_register_netdev(struct bnxt_re_dev *rdev) ...@@ -374,26 +357,12 @@ static int bnxt_re_register_netdev(struct bnxt_re_dev *rdev)
en_dev = rdev->en_dev; en_dev = rdev->en_dev;
rc = en_dev->en_ops->bnxt_register_device(en_dev, rc = bnxt_register_dev(en_dev, &bnxt_re_ulp_ops, rdev);
&bnxt_re_ulp_ops, rdev); if (!rc)
rdev->qplib_res.pdev = rdev->en_dev->pdev; rdev->qplib_res.pdev = rdev->en_dev->pdev;
return rc; return rc;
} }
static int bnxt_re_free_msix(struct bnxt_re_dev *rdev)
{
struct bnxt_en_dev *en_dev;
if (!rdev)
return -EINVAL;
en_dev = rdev->en_dev;
en_dev->en_ops->bnxt_free_msix(rdev->en_dev);
return 0;
}
static int bnxt_re_request_msix(struct bnxt_re_dev *rdev) static int bnxt_re_request_msix(struct bnxt_re_dev *rdev)
{ {
int rc = 0, num_msix_want = BNXT_RE_MAX_MSIX, num_msix_got; int rc = 0, num_msix_want = BNXT_RE_MAX_MSIX, num_msix_got;
...@@ -403,7 +372,7 @@ static int bnxt_re_request_msix(struct bnxt_re_dev *rdev) ...@@ -403,7 +372,7 @@ static int bnxt_re_request_msix(struct bnxt_re_dev *rdev)
num_msix_want = min_t(u32, BNXT_RE_MAX_MSIX, num_online_cpus()); num_msix_want = min_t(u32, BNXT_RE_MAX_MSIX, num_online_cpus());
num_msix_got = en_dev->en_ops->bnxt_request_msix(en_dev, num_msix_got = bnxt_req_msix_vecs(en_dev,
rdev->msix_entries, rdev->msix_entries,
num_msix_want); num_msix_want);
if (num_msix_got < BNXT_RE_MIN_MSIX) { if (num_msix_got < BNXT_RE_MIN_MSIX) {
...@@ -466,7 +435,7 @@ static int bnxt_re_net_ring_free(struct bnxt_re_dev *rdev, ...@@ -466,7 +435,7 @@ static int bnxt_re_net_ring_free(struct bnxt_re_dev *rdev,
req.ring_id = cpu_to_le16(fw_ring_id); req.ring_id = cpu_to_le16(fw_ring_id);
bnxt_re_fill_fw_msg(&fw_msg, (void *)&req, sizeof(req), (void *)&resp, bnxt_re_fill_fw_msg(&fw_msg, (void *)&req, sizeof(req), (void *)&resp,
sizeof(resp), DFLT_HWRM_CMD_TIMEOUT); sizeof(resp), DFLT_HWRM_CMD_TIMEOUT);
rc = en_dev->en_ops->bnxt_send_fw_msg(en_dev, &fw_msg); rc = bnxt_send_msg(en_dev, &fw_msg);
if (rc) if (rc)
ibdev_err(&rdev->ibdev, "Failed to free HW ring:%d :%#x", ibdev_err(&rdev->ibdev, "Failed to free HW ring:%d :%#x",
req.ring_id, rc); req.ring_id, rc);
...@@ -503,7 +472,7 @@ static int bnxt_re_net_ring_alloc(struct bnxt_re_dev *rdev, ...@@ -503,7 +472,7 @@ static int bnxt_re_net_ring_alloc(struct bnxt_re_dev *rdev,
req.int_mode = ring_attr->mode; req.int_mode = ring_attr->mode;
bnxt_re_fill_fw_msg(&fw_msg, (void *)&req, sizeof(req), (void *)&resp, bnxt_re_fill_fw_msg(&fw_msg, (void *)&req, sizeof(req), (void *)&resp,
sizeof(resp), DFLT_HWRM_CMD_TIMEOUT); sizeof(resp), DFLT_HWRM_CMD_TIMEOUT);
rc = en_dev->en_ops->bnxt_send_fw_msg(en_dev, &fw_msg); rc = bnxt_send_msg(en_dev, &fw_msg);
if (!rc) if (!rc)
*fw_ring_id = le16_to_cpu(resp.ring_id); *fw_ring_id = le16_to_cpu(resp.ring_id);
...@@ -531,7 +500,7 @@ static int bnxt_re_net_stats_ctx_free(struct bnxt_re_dev *rdev, ...@@ -531,7 +500,7 @@ static int bnxt_re_net_stats_ctx_free(struct bnxt_re_dev *rdev,
req.stat_ctx_id = cpu_to_le32(fw_stats_ctx_id); req.stat_ctx_id = cpu_to_le32(fw_stats_ctx_id);
bnxt_re_fill_fw_msg(&fw_msg, (void *)&req, sizeof(req), (void *)&resp, bnxt_re_fill_fw_msg(&fw_msg, (void *)&req, sizeof(req), (void *)&resp,
sizeof(resp), DFLT_HWRM_CMD_TIMEOUT); sizeof(resp), DFLT_HWRM_CMD_TIMEOUT);
rc = en_dev->en_ops->bnxt_send_fw_msg(en_dev, &fw_msg); rc = bnxt_send_msg(en_dev, &fw_msg);
if (rc) if (rc)
ibdev_err(&rdev->ibdev, "Failed to free HW stats context %#x", ibdev_err(&rdev->ibdev, "Failed to free HW stats context %#x",
rc); rc);
...@@ -564,7 +533,7 @@ static int bnxt_re_net_stats_ctx_alloc(struct bnxt_re_dev *rdev, ...@@ -564,7 +533,7 @@ static int bnxt_re_net_stats_ctx_alloc(struct bnxt_re_dev *rdev,
req.stat_ctx_flags = STAT_CTX_ALLOC_REQ_STAT_CTX_FLAGS_ROCE; req.stat_ctx_flags = STAT_CTX_ALLOC_REQ_STAT_CTX_FLAGS_ROCE;
bnxt_re_fill_fw_msg(&fw_msg, (void *)&req, sizeof(req), (void *)&resp, bnxt_re_fill_fw_msg(&fw_msg, (void *)&req, sizeof(req), (void *)&resp,
sizeof(resp), DFLT_HWRM_CMD_TIMEOUT); sizeof(resp), DFLT_HWRM_CMD_TIMEOUT);
rc = en_dev->en_ops->bnxt_send_fw_msg(en_dev, &fw_msg); rc = bnxt_send_msg(en_dev, &fw_msg);
if (!rc) if (!rc)
*fw_stats_ctx_id = le32_to_cpu(resp.stat_ctx_id); *fw_stats_ctx_id = le32_to_cpu(resp.stat_ctx_id);
...@@ -1050,7 +1019,7 @@ static int bnxt_re_query_hwrm_pri2cos(struct bnxt_re_dev *rdev, u8 dir, ...@@ -1050,7 +1019,7 @@ static int bnxt_re_query_hwrm_pri2cos(struct bnxt_re_dev *rdev, u8 dir,
bnxt_re_fill_fw_msg(&fw_msg, (void *)&req, sizeof(req), (void *)&resp, bnxt_re_fill_fw_msg(&fw_msg, (void *)&req, sizeof(req), (void *)&resp,
sizeof(resp), DFLT_HWRM_CMD_TIMEOUT); sizeof(resp), DFLT_HWRM_CMD_TIMEOUT);
rc = en_dev->en_ops->bnxt_send_fw_msg(en_dev, &fw_msg); rc = bnxt_send_msg(en_dev, &fw_msg);
if (rc) if (rc)
return rc; return rc;
...@@ -1233,7 +1202,7 @@ static void bnxt_re_query_hwrm_intf_version(struct bnxt_re_dev *rdev) ...@@ -1233,7 +1202,7 @@ static void bnxt_re_query_hwrm_intf_version(struct bnxt_re_dev *rdev)
req.hwrm_intf_upd = HWRM_VERSION_UPDATE; req.hwrm_intf_upd = HWRM_VERSION_UPDATE;
bnxt_re_fill_fw_msg(&fw_msg, (void *)&req, sizeof(req), (void *)&resp, bnxt_re_fill_fw_msg(&fw_msg, (void *)&req, sizeof(req), (void *)&resp,
sizeof(resp), DFLT_HWRM_CMD_TIMEOUT); sizeof(resp), DFLT_HWRM_CMD_TIMEOUT);
rc = en_dev->en_ops->bnxt_send_fw_msg(en_dev, &fw_msg); rc = bnxt_send_msg(en_dev, &fw_msg);
if (rc) { if (rc) {
ibdev_err(&rdev->ibdev, "Failed to query HW version, rc = 0x%x", ibdev_err(&rdev->ibdev, "Failed to query HW version, rc = 0x%x",
rc); rc);
...@@ -1296,20 +1265,12 @@ static void bnxt_re_dev_uninit(struct bnxt_re_dev *rdev) ...@@ -1296,20 +1265,12 @@ static void bnxt_re_dev_uninit(struct bnxt_re_dev *rdev)
bnxt_re_net_ring_free(rdev, rdev->rcfw.creq.ring_id, type); bnxt_re_net_ring_free(rdev, rdev->rcfw.creq.ring_id, type);
bnxt_qplib_free_rcfw_channel(&rdev->rcfw); bnxt_qplib_free_rcfw_channel(&rdev->rcfw);
} }
if (test_and_clear_bit(BNXT_RE_FLAG_GOT_MSIX, &rdev->flags)) { if (test_and_clear_bit(BNXT_RE_FLAG_GOT_MSIX, &rdev->flags))
rc = bnxt_re_free_msix(rdev); bnxt_free_msix_vecs(rdev->en_dev);
if (rc)
ibdev_warn(&rdev->ibdev,
"Failed to free MSI-X vectors: %#x", rc);
}
bnxt_re_destroy_chip_ctx(rdev); bnxt_re_destroy_chip_ctx(rdev);
if (test_and_clear_bit(BNXT_RE_FLAG_NETDEV_REGISTERED, &rdev->flags)) { if (test_and_clear_bit(BNXT_RE_FLAG_NETDEV_REGISTERED, &rdev->flags))
rc = bnxt_re_unregister_netdev(rdev); bnxt_unregister_dev(rdev->en_dev);
if (rc)
ibdev_warn(&rdev->ibdev,
"Failed to unregister with netdev: %#x", rc);
}
} }
/* worker thread for polling periodic events. Now used for QoS programming*/ /* worker thread for polling periodic events. Now used for QoS programming*/
......
...@@ -2414,7 +2414,6 @@ static int bnxt_async_event_process(struct bnxt *bp, ...@@ -2414,7 +2414,6 @@ static int bnxt_async_event_process(struct bnxt *bp,
} }
bnxt_queue_sp_work(bp); bnxt_queue_sp_work(bp);
async_event_process_exit: async_event_process_exit:
bnxt_ulp_async_events(bp, cmpl);
return 0; return 0;
} }
......
...@@ -28,7 +28,7 @@ ...@@ -28,7 +28,7 @@
static DEFINE_IDA(bnxt_aux_dev_ids); static DEFINE_IDA(bnxt_aux_dev_ids);
static int bnxt_register_dev(struct bnxt_en_dev *edev, int bnxt_register_dev(struct bnxt_en_dev *edev,
struct bnxt_ulp_ops *ulp_ops, struct bnxt_ulp_ops *ulp_ops,
void *handle) void *handle)
{ {
...@@ -55,8 +55,9 @@ static int bnxt_register_dev(struct bnxt_en_dev *edev, ...@@ -55,8 +55,9 @@ static int bnxt_register_dev(struct bnxt_en_dev *edev,
return 0; return 0;
} }
EXPORT_SYMBOL(bnxt_register_dev);
static int bnxt_unregister_dev(struct bnxt_en_dev *edev) void bnxt_unregister_dev(struct bnxt_en_dev *edev)
{ {
struct net_device *dev = edev->net; struct net_device *dev = edev->net;
struct bnxt *bp = netdev_priv(dev); struct bnxt *bp = netdev_priv(dev);
...@@ -65,7 +66,7 @@ static int bnxt_unregister_dev(struct bnxt_en_dev *edev) ...@@ -65,7 +66,7 @@ static int bnxt_unregister_dev(struct bnxt_en_dev *edev)
ulp = edev->ulp_tbl; ulp = edev->ulp_tbl;
if (ulp->msix_requested) if (ulp->msix_requested)
edev->en_ops->bnxt_free_msix(edev); bnxt_free_msix_vecs(edev);
if (ulp->max_async_event_id) if (ulp->max_async_event_id)
bnxt_hwrm_func_drv_rgtr(bp, NULL, 0, true); bnxt_hwrm_func_drv_rgtr(bp, NULL, 0, true);
...@@ -80,8 +81,9 @@ static int bnxt_unregister_dev(struct bnxt_en_dev *edev) ...@@ -80,8 +81,9 @@ static int bnxt_unregister_dev(struct bnxt_en_dev *edev)
} }
kfree(ulp); kfree(ulp);
edev->ulp_tbl = NULL; edev->ulp_tbl = NULL;
return 0; return;
} }
EXPORT_SYMBOL(bnxt_unregister_dev);
static void bnxt_fill_msix_vecs(struct bnxt *bp, struct bnxt_msix_entry *ent) static void bnxt_fill_msix_vecs(struct bnxt *bp, struct bnxt_msix_entry *ent)
{ {
...@@ -103,7 +105,7 @@ static void bnxt_fill_msix_vecs(struct bnxt *bp, struct bnxt_msix_entry *ent) ...@@ -103,7 +105,7 @@ static void bnxt_fill_msix_vecs(struct bnxt *bp, struct bnxt_msix_entry *ent)
} }
} }
static int bnxt_req_msix_vecs(struct bnxt_en_dev *edev, int bnxt_req_msix_vecs(struct bnxt_en_dev *edev,
struct bnxt_msix_entry *ent, struct bnxt_msix_entry *ent,
int num_msix) int num_msix)
{ {
...@@ -165,8 +167,9 @@ static int bnxt_req_msix_vecs(struct bnxt_en_dev *edev, ...@@ -165,8 +167,9 @@ static int bnxt_req_msix_vecs(struct bnxt_en_dev *edev,
edev->flags |= BNXT_EN_FLAG_MSIX_REQUESTED; edev->flags |= BNXT_EN_FLAG_MSIX_REQUESTED;
return avail_msix; return avail_msix;
} }
EXPORT_SYMBOL(bnxt_req_msix_vecs);
static void bnxt_free_msix_vecs(struct bnxt_en_dev *edev) void bnxt_free_msix_vecs(struct bnxt_en_dev *edev)
{ {
struct net_device *dev = edev->net; struct net_device *dev = edev->net;
struct bnxt *bp = netdev_priv(dev); struct bnxt *bp = netdev_priv(dev);
...@@ -185,6 +188,7 @@ static void bnxt_free_msix_vecs(struct bnxt_en_dev *edev) ...@@ -185,6 +188,7 @@ static void bnxt_free_msix_vecs(struct bnxt_en_dev *edev)
return; return;
} }
EXPORT_SYMBOL(bnxt_free_msix_vecs);
int bnxt_get_ulp_msix_num(struct bnxt *bp) int bnxt_get_ulp_msix_num(struct bnxt *bp)
{ {
...@@ -219,7 +223,7 @@ int bnxt_get_ulp_stat_ctxs(struct bnxt *bp) ...@@ -219,7 +223,7 @@ int bnxt_get_ulp_stat_ctxs(struct bnxt *bp)
return 0; return 0;
} }
static int bnxt_send_msg(struct bnxt_en_dev *edev, int bnxt_send_msg(struct bnxt_en_dev *edev,
struct bnxt_fw_msg *fw_msg) struct bnxt_fw_msg *fw_msg)
{ {
struct net_device *dev = edev->net; struct net_device *dev = edev->net;
...@@ -253,6 +257,7 @@ static int bnxt_send_msg(struct bnxt_en_dev *edev, ...@@ -253,6 +257,7 @@ static int bnxt_send_msg(struct bnxt_en_dev *edev,
hwrm_req_drop(bp, req); hwrm_req_drop(bp, req);
return rc; return rc;
} }
EXPORT_SYMBOL(bnxt_send_msg);
static void bnxt_ulp_get(struct bnxt_ulp *ulp) static void bnxt_ulp_get(struct bnxt_ulp *ulp)
{ {
...@@ -312,14 +317,11 @@ void bnxt_ulp_sriov_cfg(struct bnxt *bp, int num_vfs) ...@@ -312,14 +317,11 @@ void bnxt_ulp_sriov_cfg(struct bnxt *bp, int num_vfs)
return; return;
ulp = edev->ulp_tbl; ulp = edev->ulp_tbl;
rcu_read_lock();
ops = rcu_dereference(ulp->ulp_ops); ops = rcu_dereference(ulp->ulp_ops);
if (!ops || !ops->ulp_sriov_config) { if (!ops || !ops->ulp_sriov_config)
rcu_read_unlock();
return; return;
}
bnxt_ulp_get(ulp); bnxt_ulp_get(ulp);
rcu_read_unlock();
ops->ulp_sriov_config(ulp->handle, num_vfs); ops->ulp_sriov_config(ulp->handle, num_vfs);
bnxt_ulp_put(ulp); bnxt_ulp_put(ulp);
} }
...@@ -376,35 +378,7 @@ void bnxt_ulp_irq_restart(struct bnxt *bp, int err) ...@@ -376,35 +378,7 @@ void bnxt_ulp_irq_restart(struct bnxt *bp, int err)
} }
} }
void bnxt_ulp_async_events(struct bnxt *bp, struct hwrm_async_event_cmpl *cmpl) int bnxt_register_async_events(struct bnxt_en_dev *edev,
{
u16 event_id = le16_to_cpu(cmpl->event_id);
struct bnxt_en_dev *edev = bp->edev;
struct bnxt_ulp_ops *ops;
struct bnxt_ulp *ulp;
if (!bnxt_ulp_registered(edev))
return;
ulp = edev->ulp_tbl;
rcu_read_lock();
ops = rcu_dereference(ulp->ulp_ops);
if (!ops || !ops->ulp_async_notifier)
goto exit;
if (!ulp->async_events_bmap || event_id > ulp->max_async_event_id)
goto exit;
/* Read max_async_event_id first before testing the bitmap. */
smp_rmb();
if (test_bit(event_id, ulp->async_events_bmap))
ops->ulp_async_notifier(ulp->handle, cmpl);
exit:
rcu_read_unlock();
}
static int bnxt_register_async_events(struct bnxt_en_dev *edev,
unsigned long *events_bmap, unsigned long *events_bmap,
u16 max_id) u16 max_id)
{ {
...@@ -420,15 +394,7 @@ static int bnxt_register_async_events(struct bnxt_en_dev *edev, ...@@ -420,15 +394,7 @@ static int bnxt_register_async_events(struct bnxt_en_dev *edev,
bnxt_hwrm_func_drv_rgtr(bp, events_bmap, max_id + 1, true); bnxt_hwrm_func_drv_rgtr(bp, events_bmap, max_id + 1, true);
return 0; return 0;
} }
EXPORT_SYMBOL(bnxt_register_async_events);
static const struct bnxt_en_ops bnxt_en_ops_tbl = {
.bnxt_register_device = bnxt_register_dev,
.bnxt_unregister_device = bnxt_unregister_dev,
.bnxt_request_msix = bnxt_req_msix_vecs,
.bnxt_free_msix = bnxt_free_msix_vecs,
.bnxt_send_fw_msg = bnxt_send_msg,
.bnxt_register_fw_async_events = bnxt_register_async_events,
};
void bnxt_rdma_aux_device_uninit(struct bnxt *bp) void bnxt_rdma_aux_device_uninit(struct bnxt *bp)
{ {
...@@ -457,7 +423,6 @@ static void bnxt_aux_dev_release(struct device *dev) ...@@ -457,7 +423,6 @@ static void bnxt_aux_dev_release(struct device *dev)
static void bnxt_set_edev_info(struct bnxt_en_dev *edev, struct bnxt *bp) static void bnxt_set_edev_info(struct bnxt_en_dev *edev, struct bnxt *bp)
{ {
edev->en_ops = &bnxt_en_ops_tbl;
edev->net = bp->dev; edev->net = bp->dev;
edev->pdev = bp->pdev; edev->pdev = bp->pdev;
edev->l2_db_size = bp->db_size; edev->l2_db_size = bp->db_size;
......
...@@ -26,8 +26,6 @@ struct bnxt_msix_entry { ...@@ -26,8 +26,6 @@ struct bnxt_msix_entry {
}; };
struct bnxt_ulp_ops { struct bnxt_ulp_ops {
/* async_notifier() cannot sleep (in BH context) */
void (*ulp_async_notifier)(void *, struct hwrm_async_event_cmpl *);
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);
...@@ -63,7 +61,6 @@ struct bnxt_en_dev { ...@@ -63,7 +61,6 @@ struct bnxt_en_dev {
BNXT_EN_FLAG_ROCEV2_CAP) BNXT_EN_FLAG_ROCEV2_CAP)
#define BNXT_EN_FLAG_MSIX_REQUESTED 0x4 #define BNXT_EN_FLAG_MSIX_REQUESTED 0x4
#define BNXT_EN_FLAG_ULP_STOPPED 0x8 #define BNXT_EN_FLAG_ULP_STOPPED 0x8
const struct bnxt_en_ops *en_ops;
struct bnxt_ulp *ulp_tbl; struct bnxt_ulp *ulp_tbl;
int l2_db_size; /* Doorbell BAR size in int l2_db_size; /* Doorbell BAR size in
* bytes mapped by L2 * bytes mapped by L2
...@@ -75,19 +72,6 @@ struct bnxt_en_dev { ...@@ -75,19 +72,6 @@ struct bnxt_en_dev {
*/ */
}; };
struct bnxt_en_ops {
int (*bnxt_register_device)(struct bnxt_en_dev *edev,
struct bnxt_ulp_ops *ulp_ops, void *handle);
int (*bnxt_unregister_device)(struct bnxt_en_dev *edev);
int (*bnxt_request_msix)(struct bnxt_en_dev *edev,
struct bnxt_msix_entry *ent, int num_msix);
void (*bnxt_free_msix)(struct bnxt_en_dev *edev);
int (*bnxt_send_fw_msg)(struct bnxt_en_dev *edev,
struct bnxt_fw_msg *fw_msg);
int (*bnxt_register_fw_async_events)(struct bnxt_en_dev *edev,
unsigned long *events_bmap, u16 max_id);
};
static inline bool bnxt_ulp_registered(struct bnxt_en_dev *edev) static inline bool bnxt_ulp_registered(struct bnxt_en_dev *edev)
{ {
if (edev && edev->ulp_tbl) if (edev && edev->ulp_tbl)
...@@ -106,4 +90,13 @@ void bnxt_ulp_irq_restart(struct bnxt *bp, int err); ...@@ -106,4 +90,13 @@ void bnxt_ulp_irq_restart(struct bnxt *bp, int err);
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);
void bnxt_rdma_aux_device_uninit(struct bnxt *bp); void bnxt_rdma_aux_device_uninit(struct bnxt *bp);
void bnxt_rdma_aux_device_init(struct bnxt *bp); void bnxt_rdma_aux_device_init(struct bnxt *bp);
int bnxt_register_dev(struct bnxt_en_dev *edev, struct bnxt_ulp_ops *ulp_ops,
void *handle);
void bnxt_unregister_dev(struct bnxt_en_dev *edev);
int bnxt_req_msix_vecs(struct bnxt_en_dev *edev, struct bnxt_msix_entry *ent,
int num_msix);
void bnxt_free_msix_vecs(struct bnxt_en_dev *edev);
int bnxt_send_msg(struct bnxt_en_dev *edev, struct bnxt_fw_msg *fw_msg);
int bnxt_register_async_events(struct bnxt_en_dev *edev,
unsigned long *events_bmap, u16 max_id);
#endif #endif
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment