aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAriel Elior <ariele@broadcom.com>2013-03-11 01:17:42 -0400
committerDavid S. Miller <davem@davemloft.net>2013-03-12 07:54:21 -0400
commit005a07baa1713861a060fab66a3d7d91f8d759c6 (patch)
tree43fc25465702801b85a1749ffa8ecf37ec62a2e6
parent07ef7bec683beed65ccef330df66d88738c50a4a (diff)
bnx2x: Set ethtool ops for vfs
Virtual functions don't have access to HW registers, therefore most ethtool ops are forbidden to them. Instead of checking in each op whether the device being driven is a virtual function or a physical function, this patch creates a separate ethtool ops struct for virtual functions and uses it to initialize the ethtool ops of the driver in case it is driving a virtual function device. Signed-off-by: Ariel Elior <ariele@broadcom.com> Signed-off-by: Yuval Mintz <yuvalmin@broadcom.com> Signed-off-by: Eilon Greenstein <eilong@broadcom.com> Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r--drivers/net/ethernet/broadcom/bnx2x/bnx2x.h2
-rw-r--r--drivers/net/ethernet/broadcom/bnx2x/bnx2x_ethtool.c29
-rw-r--r--drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c2
3 files changed, 29 insertions, 4 deletions
diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x.h b/drivers/net/ethernet/broadcom/bnx2x/bnx2x.h
index 9577cceafac4..8ddc78bada49 100644
--- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x.h
+++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x.h
@@ -2285,7 +2285,7 @@ static const u32 dmae_reg_go_c[] = {
2285 DMAE_REG_GO_C12, DMAE_REG_GO_C13, DMAE_REG_GO_C14, DMAE_REG_GO_C15 2285 DMAE_REG_GO_C12, DMAE_REG_GO_C13, DMAE_REG_GO_C14, DMAE_REG_GO_C15
2286}; 2286};
2287 2287
2288void bnx2x_set_ethtool_ops(struct net_device *netdev); 2288void bnx2x_set_ethtool_ops(struct bnx2x *bp, struct net_device *netdev);
2289void bnx2x_notify_link_changed(struct bnx2x *bp); 2289void bnx2x_notify_link_changed(struct bnx2x *bp);
2290 2290
2291#define BNX2X_MF_SD_PROTOCOL(bp) \ 2291#define BNX2X_MF_SD_PROTOCOL(bp) \
diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_ethtool.c b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_ethtool.c
index edfa67adf2f9..324d6913af62 100644
--- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_ethtool.c
+++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_ethtool.c
@@ -3232,7 +3232,32 @@ static const struct ethtool_ops bnx2x_ethtool_ops = {
3232 .get_ts_info = ethtool_op_get_ts_info, 3232 .get_ts_info = ethtool_op_get_ts_info,
3233}; 3233};
3234 3234
3235void bnx2x_set_ethtool_ops(struct net_device *netdev) 3235static const struct ethtool_ops bnx2x_vf_ethtool_ops = {
3236 .get_settings = bnx2x_get_settings,
3237 .set_settings = bnx2x_set_settings,
3238 .get_drvinfo = bnx2x_get_drvinfo,
3239 .get_msglevel = bnx2x_get_msglevel,
3240 .set_msglevel = bnx2x_set_msglevel,
3241 .get_link = bnx2x_get_link,
3242 .get_coalesce = bnx2x_get_coalesce,
3243 .get_ringparam = bnx2x_get_ringparam,
3244 .set_ringparam = bnx2x_set_ringparam,
3245 .get_sset_count = bnx2x_get_sset_count,
3246 .get_strings = bnx2x_get_strings,
3247 .get_ethtool_stats = bnx2x_get_ethtool_stats,
3248 .get_rxnfc = bnx2x_get_rxnfc,
3249 .set_rxnfc = bnx2x_set_rxnfc,
3250 .get_rxfh_indir_size = bnx2x_get_rxfh_indir_size,
3251 .get_rxfh_indir = bnx2x_get_rxfh_indir,
3252 .set_rxfh_indir = bnx2x_set_rxfh_indir,
3253 .get_channels = bnx2x_get_channels,
3254 .set_channels = bnx2x_set_channels,
3255};
3256
3257void bnx2x_set_ethtool_ops(struct bnx2x *bp, struct net_device *netdev)
3236{ 3258{
3237 SET_ETHTOOL_OPS(netdev, &bnx2x_ethtool_ops); 3259 if (IS_PF(bp))
3260 SET_ETHTOOL_OPS(netdev, &bnx2x_ethtool_ops);
3261 else /* vf */
3262 SET_ETHTOOL_OPS(netdev, &bnx2x_vf_ethtool_ops);
3238} 3263}
diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c
index e81a747ea8ce..14a778433522 100644
--- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c
+++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c
@@ -11953,7 +11953,7 @@ static int bnx2x_init_dev(struct bnx2x *bp, struct pci_dev *pdev,
11953 dev->watchdog_timeo = TX_TIMEOUT; 11953 dev->watchdog_timeo = TX_TIMEOUT;
11954 11954
11955 dev->netdev_ops = &bnx2x_netdev_ops; 11955 dev->netdev_ops = &bnx2x_netdev_ops;
11956 bnx2x_set_ethtool_ops(dev); 11956 bnx2x_set_ethtool_ops(bp, dev);
11957 11957
11958 dev->priv_flags |= IFF_UNICAST_FLT; 11958 dev->priv_flags |= IFF_UNICAST_FLT;
11959 11959