aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichał Mirosław <mirq-linux@rere.qmqm.pl>2011-04-15 00:50:49 -0400
committerDavid S. Miller <davem@davemloft.net>2011-04-15 18:50:39 -0400
commit6de240b7f714d63ca2a53d52c7eefb37e7eb3f1b (patch)
tree999bda93edb96c1010fec51e51bb0e44c911f998
parent911cb193f3eb0370f20fbba712211e55ffede4de (diff)
net: spider_net: convert to hw_features
Signed-off-by: Michał Mirosław <mirq-linux@rere.qmqm.pl> Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r--drivers/net/spider_net.c15
-rw-r--r--drivers/net/spider_net.h7
-rw-r--r--drivers/net/spider_net_ethtool.c21
3 files changed, 7 insertions, 36 deletions
diff --git a/drivers/net/spider_net.c b/drivers/net/spider_net.c
index cb6bcca9d541..949f124e1278 100644
--- a/drivers/net/spider_net.c
+++ b/drivers/net/spider_net.c
@@ -994,15 +994,13 @@ spider_net_pass_skb_up(struct spider_net_descr *descr,
994 skb->protocol = eth_type_trans(skb, netdev); 994 skb->protocol = eth_type_trans(skb, netdev);
995 995
996 /* checksum offload */ 996 /* checksum offload */
997 if (card->options.rx_csum) { 997 skb_checksum_none_assert(skb);
998 if (netdev->features & NETIF_F_RXCSUM) {
998 if ( ( (data_status & SPIDER_NET_DATA_STATUS_CKSUM_MASK) == 999 if ( ( (data_status & SPIDER_NET_DATA_STATUS_CKSUM_MASK) ==
999 SPIDER_NET_DATA_STATUS_CKSUM_MASK) && 1000 SPIDER_NET_DATA_STATUS_CKSUM_MASK) &&
1000 !(data_error & SPIDER_NET_DATA_ERR_CKSUM_MASK)) 1001 !(data_error & SPIDER_NET_DATA_ERR_CKSUM_MASK))
1001 skb->ip_summed = CHECKSUM_UNNECESSARY; 1002 skb->ip_summed = CHECKSUM_UNNECESSARY;
1002 else 1003 }
1003 skb_checksum_none_assert(skb);
1004 } else
1005 skb_checksum_none_assert(skb);
1006 1004
1007 if (data_status & SPIDER_NET_VLAN_PACKET) { 1005 if (data_status & SPIDER_NET_VLAN_PACKET) {
1008 /* further enhancements: HW-accel VLAN 1006 /* further enhancements: HW-accel VLAN
@@ -2322,14 +2320,15 @@ spider_net_setup_netdev(struct spider_net_card *card)
2322 card->aneg_timer.function = spider_net_link_phy; 2320 card->aneg_timer.function = spider_net_link_phy;
2323 card->aneg_timer.data = (unsigned long) card; 2321 card->aneg_timer.data = (unsigned long) card;
2324 2322
2325 card->options.rx_csum = SPIDER_NET_RX_CSUM_DEFAULT;
2326
2327 netif_napi_add(netdev, &card->napi, 2323 netif_napi_add(netdev, &card->napi,
2328 spider_net_poll, SPIDER_NET_NAPI_WEIGHT); 2324 spider_net_poll, SPIDER_NET_NAPI_WEIGHT);
2329 2325
2330 spider_net_setup_netdev_ops(netdev); 2326 spider_net_setup_netdev_ops(netdev);
2331 2327
2332 netdev->features = NETIF_F_IP_CSUM | NETIF_F_LLTX; 2328 netdev->hw_features = NETIF_F_RXCSUM | NETIF_F_IP_CSUM;
2329 if (SPIDER_NET_RX_CSUM_DEFAULT)
2330 netdev->features |= NETIF_F_RXCSUM;
2331 netdev->features |= NETIF_F_IP_CSUM | NETIF_F_LLTX;
2333 /* some time: NETIF_F_HW_VLAN_TX | NETIF_F_HW_VLAN_RX | 2332 /* some time: NETIF_F_HW_VLAN_TX | NETIF_F_HW_VLAN_RX |
2334 * NETIF_F_HW_VLAN_FILTER */ 2333 * NETIF_F_HW_VLAN_FILTER */
2335 2334
diff --git a/drivers/net/spider_net.h b/drivers/net/spider_net.h
index 05f74cbdd617..020f64a8fcf7 100644
--- a/drivers/net/spider_net.h
+++ b/drivers/net/spider_net.h
@@ -429,12 +429,6 @@ struct spider_net_descr_chain {
429 * 701b8000 would be correct, but every packets gets that flag */ 429 * 701b8000 would be correct, but every packets gets that flag */
430#define SPIDER_NET_DESTROY_RX_FLAGS 0x700b8000 430#define SPIDER_NET_DESTROY_RX_FLAGS 0x700b8000
431 431
432/* this will be bigger some time */
433struct spider_net_options {
434 int rx_csum; /* for rx: if 0 ip_summed=NONE,
435 if 1 and hw has verified, ip_summed=UNNECESSARY */
436};
437
438#define SPIDER_NET_DEFAULT_MSG ( NETIF_MSG_DRV | \ 432#define SPIDER_NET_DEFAULT_MSG ( NETIF_MSG_DRV | \
439 NETIF_MSG_PROBE | \ 433 NETIF_MSG_PROBE | \
440 NETIF_MSG_LINK | \ 434 NETIF_MSG_LINK | \
@@ -487,7 +481,6 @@ struct spider_net_card {
487 /* for ethtool */ 481 /* for ethtool */
488 int msg_enable; 482 int msg_enable;
489 struct spider_net_extra_stats spider_stats; 483 struct spider_net_extra_stats spider_stats;
490 struct spider_net_options options;
491 484
492 /* Must be last item in struct */ 485 /* Must be last item in struct */
493 struct spider_net_descr darray[0]; 486 struct spider_net_descr darray[0];
diff --git a/drivers/net/spider_net_ethtool.c b/drivers/net/spider_net_ethtool.c
index 5bae728c3820..d723fca872ce 100644
--- a/drivers/net/spider_net_ethtool.c
+++ b/drivers/net/spider_net_ethtool.c
@@ -115,24 +115,6 @@ spider_net_ethtool_nway_reset(struct net_device *netdev)
115 return 0; 115 return 0;
116} 116}
117 117
118static u32
119spider_net_ethtool_get_rx_csum(struct net_device *netdev)
120{
121 struct spider_net_card *card = netdev_priv(netdev);
122
123 return card->options.rx_csum;
124}
125
126static int
127spider_net_ethtool_set_rx_csum(struct net_device *netdev, u32 n)
128{
129 struct spider_net_card *card = netdev_priv(netdev);
130
131 card->options.rx_csum = n;
132 return 0;
133}
134
135
136static void 118static void
137spider_net_ethtool_get_ringparam(struct net_device *netdev, 119spider_net_ethtool_get_ringparam(struct net_device *netdev,
138 struct ethtool_ringparam *ering) 120 struct ethtool_ringparam *ering)
@@ -189,9 +171,6 @@ const struct ethtool_ops spider_net_ethtool_ops = {
189 .set_msglevel = spider_net_ethtool_set_msglevel, 171 .set_msglevel = spider_net_ethtool_set_msglevel,
190 .get_link = ethtool_op_get_link, 172 .get_link = ethtool_op_get_link,
191 .nway_reset = spider_net_ethtool_nway_reset, 173 .nway_reset = spider_net_ethtool_nway_reset,
192 .get_rx_csum = spider_net_ethtool_get_rx_csum,
193 .set_rx_csum = spider_net_ethtool_set_rx_csum,
194 .set_tx_csum = ethtool_op_set_tx_csum,
195 .get_ringparam = spider_net_ethtool_get_ringparam, 174 .get_ringparam = spider_net_ethtool_get_ringparam,
196 .get_strings = spider_net_get_strings, 175 .get_strings = spider_net_get_strings,
197 .get_sset_count = spider_net_get_sset_count, 176 .get_sset_count = spider_net_get_sset_count,