|
@@ -3117,27 +3117,46 @@ int hwrm_send_message_silent(struct bnxt *bp, void *msg, u32 msg_len,
|
|
|
return rc;
|
|
|
}
|
|
|
|
|
|
-static int bnxt_hwrm_func_drv_rgtr(struct bnxt *bp)
|
|
|
+int bnxt_hwrm_func_rgtr_async_events(struct bnxt *bp, unsigned long *bmap,
|
|
|
+ int bmap_size)
|
|
|
{
|
|
|
struct hwrm_func_drv_rgtr_input req = {0};
|
|
|
- int i;
|
|
|
DECLARE_BITMAP(async_events_bmap, 256);
|
|
|
u32 *events = (u32 *)async_events_bmap;
|
|
|
+ int i;
|
|
|
|
|
|
bnxt_hwrm_cmd_hdr_init(bp, &req, HWRM_FUNC_DRV_RGTR, -1, -1);
|
|
|
|
|
|
req.enables =
|
|
|
- cpu_to_le32(FUNC_DRV_RGTR_REQ_ENABLES_OS_TYPE |
|
|
|
- FUNC_DRV_RGTR_REQ_ENABLES_VER |
|
|
|
- FUNC_DRV_RGTR_REQ_ENABLES_ASYNC_EVENT_FWD);
|
|
|
+ cpu_to_le32(FUNC_DRV_RGTR_REQ_ENABLES_ASYNC_EVENT_FWD);
|
|
|
|
|
|
memset(async_events_bmap, 0, sizeof(async_events_bmap));
|
|
|
for (i = 0; i < ARRAY_SIZE(bnxt_async_events_arr); i++)
|
|
|
__set_bit(bnxt_async_events_arr[i], async_events_bmap);
|
|
|
|
|
|
+ if (bmap && bmap_size) {
|
|
|
+ for (i = 0; i < bmap_size; i++) {
|
|
|
+ if (test_bit(i, bmap))
|
|
|
+ __set_bit(i, async_events_bmap);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
for (i = 0; i < 8; i++)
|
|
|
req.async_event_fwd[i] |= cpu_to_le32(events[i]);
|
|
|
|
|
|
+ return hwrm_send_message(bp, &req, sizeof(req), HWRM_CMD_TIMEOUT);
|
|
|
+}
|
|
|
+
|
|
|
+static int bnxt_hwrm_func_drv_rgtr(struct bnxt *bp)
|
|
|
+{
|
|
|
+ struct hwrm_func_drv_rgtr_input req = {0};
|
|
|
+
|
|
|
+ bnxt_hwrm_cmd_hdr_init(bp, &req, HWRM_FUNC_DRV_RGTR, -1, -1);
|
|
|
+
|
|
|
+ req.enables =
|
|
|
+ cpu_to_le32(FUNC_DRV_RGTR_REQ_ENABLES_OS_TYPE |
|
|
|
+ FUNC_DRV_RGTR_REQ_ENABLES_VER);
|
|
|
+
|
|
|
req.os_type = cpu_to_le16(FUNC_DRV_RGTR_REQ_OS_TYPE_LINUX);
|
|
|
req.ver_maj = DRV_VER_MAJ;
|
|
|
req.ver_min = DRV_VER_MIN;
|
|
@@ -3146,6 +3165,7 @@ static int bnxt_hwrm_func_drv_rgtr(struct bnxt *bp)
|
|
|
if (BNXT_PF(bp)) {
|
|
|
DECLARE_BITMAP(vf_req_snif_bmap, 256);
|
|
|
u32 *data = (u32 *)vf_req_snif_bmap;
|
|
|
+ int i;
|
|
|
|
|
|
memset(vf_req_snif_bmap, 0, sizeof(vf_req_snif_bmap));
|
|
|
for (i = 0; i < ARRAY_SIZE(bnxt_vf_req_snif); i++)
|
|
@@ -7023,6 +7043,10 @@ static int bnxt_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
|
|
|
if (rc)
|
|
|
goto init_err;
|
|
|
|
|
|
+ rc = bnxt_hwrm_func_rgtr_async_events(bp, NULL, 0);
|
|
|
+ if (rc)
|
|
|
+ goto init_err;
|
|
|
+
|
|
|
/* Get the MAX capabilities for this function */
|
|
|
rc = bnxt_hwrm_func_qcaps(bp);
|
|
|
if (rc) {
|