aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorMichał Mirosław <mirq-linux@rere.qmqm.pl>2011-04-16 20:15:47 -0400
committerDavid S. Miller <davem@davemloft.net>2011-04-17 20:47:36 -0400
commit131ae329702755d897c6072c7839086b0702fb10 (patch)
tree0183b6116a1e8ddf66c19d88ff6590bc2b4c898e /drivers
parent3cd8ef4b6071834fd432bbccbec0611591908643 (diff)
net: greth: convert to hw_features
Note: Driver modifies its struct net_device_ops. This will break if used for multiple devices that are not all the same (if that HW config is possible). Signed-off-by: Michał Mirosław <mirq-linux@rere.qmqm.pl> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/net/greth.c46
-rw-r--r--drivers/net/greth.h4
2 files changed, 4 insertions, 46 deletions
diff --git a/drivers/net/greth.c b/drivers/net/greth.c
index 396ff7d785d1..f181304a7ab6 100644
--- a/drivers/net/greth.c
+++ b/drivers/net/greth.c
@@ -901,7 +901,7 @@ static int greth_rx_gbit(struct net_device *dev, int limit)
901 901
902 skb_put(skb, pkt_len); 902 skb_put(skb, pkt_len);
903 903
904 if (greth->flags & GRETH_FLAG_RX_CSUM && hw_checksummed(status)) 904 if (dev->features & NETIF_F_RXCSUM && hw_checksummed(status))
905 skb->ip_summed = CHECKSUM_UNNECESSARY; 905 skb->ip_summed = CHECKSUM_UNNECESSARY;
906 else 906 else
907 skb_checksum_none_assert(skb); 907 skb_checksum_none_assert(skb);
@@ -1142,41 +1142,6 @@ static void greth_get_regs(struct net_device *dev, struct ethtool_regs *regs, vo
1142 buff[i] = greth_read_bd(&greth_regs[i]); 1142 buff[i] = greth_read_bd(&greth_regs[i]);
1143} 1143}
1144 1144
1145static u32 greth_get_rx_csum(struct net_device *dev)
1146{
1147 struct greth_private *greth = netdev_priv(dev);
1148 return (greth->flags & GRETH_FLAG_RX_CSUM) != 0;
1149}
1150
1151static int greth_set_rx_csum(struct net_device *dev, u32 data)
1152{
1153 struct greth_private *greth = netdev_priv(dev);
1154
1155 spin_lock_bh(&greth->devlock);
1156
1157 if (data)
1158 greth->flags |= GRETH_FLAG_RX_CSUM;
1159 else
1160 greth->flags &= ~GRETH_FLAG_RX_CSUM;
1161
1162 spin_unlock_bh(&greth->devlock);
1163
1164 return 0;
1165}
1166
1167static u32 greth_get_tx_csum(struct net_device *dev)
1168{
1169 return (dev->features & NETIF_F_IP_CSUM) != 0;
1170}
1171
1172static int greth_set_tx_csum(struct net_device *dev, u32 data)
1173{
1174 netif_tx_lock_bh(dev);
1175 ethtool_op_set_tx_csum(dev, data);
1176 netif_tx_unlock_bh(dev);
1177 return 0;
1178}
1179
1180static const struct ethtool_ops greth_ethtool_ops = { 1145static const struct ethtool_ops greth_ethtool_ops = {
1181 .get_msglevel = greth_get_msglevel, 1146 .get_msglevel = greth_get_msglevel,
1182 .set_msglevel = greth_set_msglevel, 1147 .set_msglevel = greth_set_msglevel,
@@ -1185,10 +1150,6 @@ static const struct ethtool_ops greth_ethtool_ops = {
1185 .get_drvinfo = greth_get_drvinfo, 1150 .get_drvinfo = greth_get_drvinfo,
1186 .get_regs_len = greth_get_regs_len, 1151 .get_regs_len = greth_get_regs_len,
1187 .get_regs = greth_get_regs, 1152 .get_regs = greth_get_regs,
1188 .get_rx_csum = greth_get_rx_csum,
1189 .set_rx_csum = greth_set_rx_csum,
1190 .get_tx_csum = greth_get_tx_csum,
1191 .set_tx_csum = greth_set_tx_csum,
1192 .get_link = ethtool_op_get_link, 1153 .get_link = ethtool_op_get_link,
1193}; 1154};
1194 1155
@@ -1570,9 +1531,10 @@ static int __devinit greth_of_probe(struct platform_device *ofdev)
1570 GRETH_REGSAVE(regs->status, 0xFF); 1531 GRETH_REGSAVE(regs->status, 0xFF);
1571 1532
1572 if (greth->gbit_mac) { 1533 if (greth->gbit_mac) {
1573 dev->features = NETIF_F_SG | NETIF_F_IP_CSUM | NETIF_F_HIGHDMA; 1534 dev->hw_features = NETIF_F_SG | NETIF_F_IP_CSUM |
1535 NETIF_F_RXCSUM;
1536 dev->features = dev->hw_features | NETIF_F_HIGHDMA;
1574 greth_netdev_ops.ndo_start_xmit = greth_start_xmit_gbit; 1537 greth_netdev_ops.ndo_start_xmit = greth_start_xmit_gbit;
1575 greth->flags = GRETH_FLAG_RX_CSUM;
1576 } 1538 }
1577 1539
1578 if (greth->multicast) { 1540 if (greth->multicast) {
diff --git a/drivers/net/greth.h b/drivers/net/greth.h
index be0f2062bd14..9a0040dee4da 100644
--- a/drivers/net/greth.h
+++ b/drivers/net/greth.h
@@ -77,9 +77,6 @@
77 */ 77 */
78#define MAX_FRAME_SIZE 1520 78#define MAX_FRAME_SIZE 1520
79 79
80/* Flags */
81#define GRETH_FLAG_RX_CSUM 0x1
82
83/* GRETH APB registers */ 80/* GRETH APB registers */
84struct greth_regs { 81struct greth_regs {
85 u32 control; 82 u32 control;
@@ -133,7 +130,6 @@ struct greth_private {
133 unsigned int duplex; 130 unsigned int duplex;
134 131
135 u32 msg_enable; 132 u32 msg_enable;
136 u32 flags;
137 133
138 u8 phyaddr; 134 u8 phyaddr;
139 u8 multicast; 135 u8 multicast;