From: Anirban Chakraborty Date: Fri, 9 Jul 2010 13:14:58 +0000 (+0000) Subject: qlcnic: Check FW capability for TSO X-Git-Tag: v2.6.36-rc1~571^2~286 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=ac8d0c4feb5577a830bbf1d9a3bb5b1d30298e2c;p=profile%2Fcommon%2Fkernel-common.git qlcnic: Check FW capability for TSO Driver checks TSO capability from FW before enabling it. Signed-off-by: Anirban Chakraborty Signed-off-by: David S. Miller --- diff --git a/drivers/net/qlcnic/qlcnic.h b/drivers/net/qlcnic/qlcnic.h index 60ea7cb..02a50e6 100644 --- a/drivers/net/qlcnic/qlcnic.h +++ b/drivers/net/qlcnic/qlcnic.h @@ -821,9 +821,10 @@ struct qlcnic_nic_intr_coalesce { #define QLCNIC_LRO_REQUEST_CLEANUP 4 /* Capabilites received */ -#define QLCNIC_FW_CAPABILITY_BDG (1 << 8) -#define QLCNIC_FW_CAPABILITY_FVLANTX (1 << 9) -#define QLCNIC_FW_CAPABILITY_HW_LRO (1 << 10) +#define QLCNIC_FW_CAPABILITY_TSO BIT_1 +#define QLCNIC_FW_CAPABILITY_BDG BIT_8 +#define QLCNIC_FW_CAPABILITY_FVLANTX BIT_9 +#define QLCNIC_FW_CAPABILITY_HW_LRO BIT_10 /* module types */ #define LINKEVENT_MODULE_NOT_PRESENT 1 diff --git a/drivers/net/qlcnic/qlcnic_ethtool.c b/drivers/net/qlcnic/qlcnic_ethtool.c index f8e39e4..baf5a52 100644 --- a/drivers/net/qlcnic/qlcnic_ethtool.c +++ b/drivers/net/qlcnic/qlcnic_ethtool.c @@ -820,6 +820,9 @@ static u32 qlcnic_get_tso(struct net_device *dev) static int qlcnic_set_tso(struct net_device *dev, u32 data) { + struct qlcnic_adapter *adapter = netdev_priv(dev); + if (!(adapter->capabilities & QLCNIC_FW_CAPABILITY_TSO)) + return -EOPNOTSUPP; if (data) dev->features |= (NETIF_F_TSO | NETIF_F_TSO6); else diff --git a/drivers/net/qlcnic/qlcnic_main.c b/drivers/net/qlcnic/qlcnic_main.c index 18e2b2e..c334f1a 100644 --- a/drivers/net/qlcnic/qlcnic_main.c +++ b/drivers/net/qlcnic/qlcnic_main.c @@ -1226,10 +1226,14 @@ qlcnic_setup_netdev(struct qlcnic_adapter *adapter, SET_ETHTOOL_OPS(netdev, &qlcnic_ethtool_ops); netdev->features |= (NETIF_F_SG | NETIF_F_IP_CSUM | - NETIF_F_IPV6_CSUM | NETIF_F_GRO | NETIF_F_TSO | NETIF_F_TSO6); - + NETIF_F_IPV6_CSUM | NETIF_F_GRO); netdev->vlan_features |= (NETIF_F_SG | NETIF_F_IP_CSUM | - NETIF_F_IPV6_CSUM | NETIF_F_TSO | NETIF_F_TSO6); + NETIF_F_IPV6_CSUM); + + if (adapter->capabilities & QLCNIC_FW_CAPABILITY_TSO) { + netdev->features |= (NETIF_F_TSO | NETIF_F_TSO6); + netdev->vlan_features |= (NETIF_F_TSO | NETIF_F_TSO6); + } if (pci_using_dac) { netdev->features |= NETIF_F_HIGHDMA;