aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/ethernet/qlogic/qlcnic/qlcnic_sriov_pf.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/ethernet/qlogic/qlcnic/qlcnic_sriov_pf.c')
-rw-r--r--drivers/net/ethernet/qlogic/qlcnic/qlcnic_sriov_pf.c30
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
19static int qlcnic_sriov_pf_get_vport_handle(struct qlcnic_adapter *, u8); 21static 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 */
353static 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
350static int qlcnic_sriov_pf_cfg_eswitch(struct qlcnic_adapter *adapter, 374static 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;