git.openpandora.org
/
pandora-kernel.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Merge branch 'timers-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel...
[pandora-kernel.git]
/
drivers
/
net
/
mv643xx_eth.c
diff --git
a/drivers/net/mv643xx_eth.c
b/drivers/net/mv643xx_eth.c
index
34425b9
..
77dc6ab
100644
(file)
--- a/
drivers/net/mv643xx_eth.c
+++ b/
drivers/net/mv643xx_eth.c
@@
-840,6
+840,8
@@
no_csum:
__skb_queue_tail(&txq->tx_skb, skb);
__skb_queue_tail(&txq->tx_skb, skb);
+ skb_tx_timestamp(skb);
+
/* ensure all other descriptors are written before first cmd_sts */
wmb();
desc->cmd_sts = cmd_sts;
/* ensure all other descriptors are written before first cmd_sts */
wmb();
desc->cmd_sts = cmd_sts;
@@
-859,7
+861,7
@@
no_csum:
static netdev_tx_t mv643xx_eth_xmit(struct sk_buff *skb, struct net_device *dev)
{
struct mv643xx_eth_private *mp = netdev_priv(dev);
static netdev_tx_t mv643xx_eth_xmit(struct sk_buff *skb, struct net_device *dev)
{
struct mv643xx_eth_private *mp = netdev_priv(dev);
- int queue;
+ int
length,
queue;
struct tx_queue *txq;
struct netdev_queue *nq;
struct tx_queue *txq;
struct netdev_queue *nq;
@@
-881,10
+883,12
@@
static netdev_tx_t mv643xx_eth_xmit(struct sk_buff *skb, struct net_device *dev)
return NETDEV_TX_OK;
}
return NETDEV_TX_OK;
}
+ length = skb->len;
+
if (!txq_submit_skb(txq, skb)) {
int entries_left;
if (!txq_submit_skb(txq, skb)) {
int entries_left;
- txq->tx_bytes +=
skb->len
;
+ txq->tx_bytes +=
length
;
txq->tx_packets++;
entries_left = txq->tx_ring_size - txq->tx_desc_count;
txq->tx_packets++;
entries_left = txq->tx_ring_size - txq->tx_desc_count;
@@
-1444,13
+1448,13
@@
mv643xx_eth_get_settings_phyless(struct mv643xx_eth_private *mp,
cmd->advertising = ADVERTISED_MII;
switch (port_status & PORT_SPEED_MASK) {
case PORT_SPEED_10:
cmd->advertising = ADVERTISED_MII;
switch (port_status & PORT_SPEED_MASK) {
case PORT_SPEED_10:
-
cmd->speed = SPEED_10
;
+
ethtool_cmd_speed_set(cmd, SPEED_10)
;
break;
case PORT_SPEED_100:
break;
case PORT_SPEED_100:
-
cmd->speed = SPEED_100
;
+
ethtool_cmd_speed_set(cmd, SPEED_100)
;
break;
case PORT_SPEED_1000:
break;
case PORT_SPEED_1000:
-
cmd->speed = SPEED_1000
;
+
ethtool_cmd_speed_set(cmd, SPEED_1000)
;
break;
default:
cmd->speed = -1;
break;
default:
cmd->speed = -1;
@@
-1575,18
+1579,12
@@
mv643xx_eth_set_ringparam(struct net_device *dev, struct ethtool_ringparam *er)
return 0;
}
return 0;
}
-static u32
-mv643xx_eth_get_rx_csum(struct net_device *dev)
-{
- struct mv643xx_eth_private *mp = netdev_priv(dev);
-
- return !!(rdlp(mp, PORT_CONFIG) & 0x02000000);
-}
static int
static int
-mv643xx_eth_set_
rx_csum(struct net_device *dev, u32 rx_csum
)
+mv643xx_eth_set_
features(struct net_device *dev, u32 features
)
{
struct mv643xx_eth_private *mp = netdev_priv(dev);
{
struct mv643xx_eth_private *mp = netdev_priv(dev);
+ u32 rx_csum = features & NETIF_F_RXCSUM;
wrlp(mp, PORT_CONFIG, rx_csum ? 0x02000000 : 0x00000000);
wrlp(mp, PORT_CONFIG, rx_csum ? 0x02000000 : 0x00000000);
@@
-1634,11
+1632,6
@@
static void mv643xx_eth_get_ethtool_stats(struct net_device *dev,
}
}
}
}
-static int mv643xx_eth_set_flags(struct net_device *dev, u32 data)
-{
- return ethtool_op_set_flags(dev, data, ETH_FLAG_LRO);
-}
-
static int mv643xx_eth_get_sset_count(struct net_device *dev, int sset)
{
if (sset == ETH_SS_STATS)
static int mv643xx_eth_get_sset_count(struct net_device *dev, int sset)
{
if (sset == ETH_SS_STATS)
@@
-1657,14
+1650,8
@@
static const struct ethtool_ops mv643xx_eth_ethtool_ops = {
.set_coalesce = mv643xx_eth_set_coalesce,
.get_ringparam = mv643xx_eth_get_ringparam,
.set_ringparam = mv643xx_eth_set_ringparam,
.set_coalesce = mv643xx_eth_set_coalesce,
.get_ringparam = mv643xx_eth_get_ringparam,
.set_ringparam = mv643xx_eth_set_ringparam,
- .get_rx_csum = mv643xx_eth_get_rx_csum,
- .set_rx_csum = mv643xx_eth_set_rx_csum,
- .set_tx_csum = ethtool_op_set_tx_csum,
- .set_sg = ethtool_op_set_sg,
.get_strings = mv643xx_eth_get_strings,
.get_ethtool_stats = mv643xx_eth_get_ethtool_stats,
.get_strings = mv643xx_eth_get_strings,
.get_ethtool_stats = mv643xx_eth_get_ethtool_stats,
- .get_flags = ethtool_op_get_flags,
- .set_flags = mv643xx_eth_set_flags,
.get_sset_count = mv643xx_eth_get_sset_count,
};
.get_sset_count = mv643xx_eth_get_sset_count,
};
@@
-2264,7
+2251,7
@@
static void port_start(struct mv643xx_eth_private *mp)
* frames to RX queue #0, and include the pseudo-header when
* calculating receive checksums.
*/
* frames to RX queue #0, and include the pseudo-header when
* calculating receive checksums.
*/
-
wrlp(mp, PORT_CONFIG, 0x02000000
);
+
mv643xx_eth_set_features(mp->dev, mp->dev->features
);
/*
* Treat BPDUs as normal multicasts, and disable partition mode.
/*
* Treat BPDUs as normal multicasts, and disable partition mode.
@@
-2848,6
+2835,7
@@
static const struct net_device_ops mv643xx_eth_netdev_ops = {
.ndo_validate_addr = eth_validate_addr,
.ndo_do_ioctl = mv643xx_eth_ioctl,
.ndo_change_mtu = mv643xx_eth_change_mtu,
.ndo_validate_addr = eth_validate_addr,
.ndo_do_ioctl = mv643xx_eth_ioctl,
.ndo_change_mtu = mv643xx_eth_change_mtu,
+ .ndo_set_features = mv643xx_eth_set_features,
.ndo_tx_timeout = mv643xx_eth_tx_timeout,
.ndo_get_stats = mv643xx_eth_get_stats,
#ifdef CONFIG_NET_POLL_CONTROLLER
.ndo_tx_timeout = mv643xx_eth_tx_timeout,
.ndo_get_stats = mv643xx_eth_get_stats,
#ifdef CONFIG_NET_POLL_CONTROLLER
@@
-2930,7
+2918,9
@@
static int mv643xx_eth_probe(struct platform_device *pdev)
dev->watchdog_timeo = 2 * HZ;
dev->base_addr = 0;
dev->watchdog_timeo = 2 * HZ;
dev->base_addr = 0;
- dev->features = NETIF_F_SG | NETIF_F_IP_CSUM;
+ dev->hw_features = NETIF_F_SG | NETIF_F_IP_CSUM |
+ NETIF_F_RXCSUM | NETIF_F_LRO;
+ dev->features = NETIF_F_SG | NETIF_F_IP_CSUM | NETIF_F_RXCSUM;
dev->vlan_features = NETIF_F_SG | NETIF_F_IP_CSUM;
SET_NETDEV_DEV(dev, &pdev->dev);
dev->vlan_features = NETIF_F_SG | NETIF_F_IP_CSUM;
SET_NETDEV_DEV(dev, &pdev->dev);