diff options
Diffstat (limited to 'drivers/net/ethernet/qlogic/qlcnic/qlcnic_sriov_pf.c')
-rw-r--r-- | drivers/net/ethernet/qlogic/qlcnic/qlcnic_sriov_pf.c | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_sriov_pf.c b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_sriov_pf.c index c588286bd21e..09acf15c3a56 100644 --- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_sriov_pf.c +++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_sriov_pf.c | |||
@@ -15,6 +15,8 @@ | |||
15 | #define QLC_MAC_OPCODE_MASK 0x7 | 15 | #define QLC_MAC_OPCODE_MASK 0x7 |
16 | #define QLC_MAC_STAR_ADD 6 | 16 | #define QLC_MAC_STAR_ADD 6 |
17 | #define QLC_MAC_STAR_DEL 7 | 17 | #define QLC_MAC_STAR_DEL 7 |
18 | #define QLC_VF_FLOOD_BIT BIT_16 | ||
19 | #define QLC_FLOOD_MODE 0x5 | ||
18 | 20 | ||
19 | static int qlcnic_sriov_pf_get_vport_handle(struct qlcnic_adapter *, u8); | 21 | static int qlcnic_sriov_pf_get_vport_handle(struct qlcnic_adapter *, u8); |
20 | 22 | ||
@@ -347,6 +349,28 @@ static int qlcnic_sriov_pf_cfg_vlan_filtering(struct qlcnic_adapter *adapter, | |||
347 | return err; | 349 | return err; |
348 | } | 350 | } |
349 | 351 | ||
352 | /* On configuring VF flood bit, PFD will receive traffic from all VFs */ | ||
353 | static int qlcnic_sriov_pf_cfg_flood(struct qlcnic_adapter *adapter) | ||
354 | { | ||
355 | struct qlcnic_cmd_args cmd; | ||
356 | int err; | ||
357 | |||
358 | err = qlcnic_alloc_mbx_args(&cmd, adapter, QLCNIC_CMD_SET_NIC_INFO); | ||
359 | if (err) | ||
360 | return err; | ||
361 | |||
362 | cmd.req.arg[1] = QLC_FLOOD_MODE | QLC_VF_FLOOD_BIT; | ||
363 | |||
364 | err = qlcnic_issue_cmd(adapter, &cmd); | ||
365 | if (err) | ||
366 | dev_err(&adapter->pdev->dev, | ||
367 | "Failed to configure VF Flood bit on PF, err=%d\n", | ||
368 | err); | ||
369 | |||
370 | qlcnic_free_mbx_args(&cmd); | ||
371 | return err; | ||
372 | } | ||
373 | |||
350 | static int qlcnic_sriov_pf_cfg_eswitch(struct qlcnic_adapter *adapter, | 374 | static int qlcnic_sriov_pf_cfg_eswitch(struct qlcnic_adapter *adapter, |
351 | u8 func, u8 enable) | 375 | u8 func, u8 enable) |
352 | { | 376 | { |
@@ -474,6 +498,12 @@ static int qlcnic_sriov_pf_init(struct qlcnic_adapter *adapter) | |||
474 | if (err) | 498 | if (err) |
475 | return err; | 499 | return err; |
476 | 500 | ||
501 | if (qlcnic_84xx_check(adapter)) { | ||
502 | err = qlcnic_sriov_pf_cfg_flood(adapter); | ||
503 | if (err) | ||
504 | goto disable_vlan_filtering; | ||
505 | } | ||
506 | |||
477 | err = qlcnic_sriov_pf_cfg_eswitch(adapter, func, 1); | 507 | err = qlcnic_sriov_pf_cfg_eswitch(adapter, func, 1); |
478 | if (err) | 508 | if (err) |
479 | goto disable_vlan_filtering; | 509 | goto disable_vlan_filtering; |