diff options
author | Sucheta Chakraborty <sucheta.chakraborty@qlogic.com> | 2014-01-10 11:48:53 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2014-01-13 18:31:18 -0500 |
commit | 820b52fd80dfca80a1fa111f9896868662e58791 (patch) | |
tree | 1e0b1c84aa001b1150a169157f5fe7c831a3a253 | |
parent | 1414abea048e0835c43600d62808ed8163897227 (diff) |
qlcnic: Enable VF flood bit on PF.
o On enabling VF flood bit, PF driver will be able to receive traffic
from all its VFs.
Signed-off-by: Sucheta Chakraborty <sucheta.chakraborty@qlogic.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
-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; |