|
@@ -625,7 +625,7 @@ Signed-off-by: John Crispin <[email protected]>
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
-@@ -457,16 +651,16 @@ ltq_etop_tx(struct sk_buff *skb, struct
|
|
|
+@@ -457,15 +651,16 @@ ltq_etop_tx(struct sk_buff *skb, struct
|
|
|
int queue = skb_get_queue_mapping(skb);
|
|
|
struct netdev_queue *txq = netdev_get_tx_queue(dev, queue);
|
|
|
struct ltq_etop_priv *priv = netdev_priv(dev);
|
|
@@ -641,13 +641,12 @@ Signed-off-by: John Crispin <[email protected]>
|
|
|
len = skb->len < ETH_ZLEN ? ETH_ZLEN : skb->len;
|
|
|
|
|
|
- if ((desc->ctl & (LTQ_DMA_OWN | LTQ_DMA_C)) || ch->skb[ch->dma.desc]) {
|
|
|
-- dev_kfree_skb_any(skb);
|
|
|
+ if ((desc->ctl & (LTQ_DMA_OWN | LTQ_DMA_C)) ||
|
|
|
+ priv->txch.skb[priv->txch.dma.desc]) {
|
|
|
netdev_err(dev, "tx ring full\n");
|
|
|
netif_tx_stop_queue(txq);
|
|
|
return NETDEV_TX_BUSY;
|
|
|
-@@ -474,7 +668,7 @@ ltq_etop_tx(struct sk_buff *skb, struct
|
|
|
+@@ -473,7 +668,7 @@ ltq_etop_tx(struct sk_buff *skb, struct
|
|
|
|
|
|
/* dma needs to start on a 16 byte aligned address */
|
|
|
byte_offset = CPHYSADDR(skb->data) % 16;
|
|
@@ -656,7 +655,7 @@ Signed-off-by: John Crispin <[email protected]>
|
|
|
|
|
|
netif_trans_update(dev);
|
|
|
|
|
|
-@@ -484,11 +678,11 @@ ltq_etop_tx(struct sk_buff *skb, struct
|
|
|
+@@ -483,11 +678,11 @@ ltq_etop_tx(struct sk_buff *skb, struct
|
|
|
wmb();
|
|
|
desc->ctl = LTQ_DMA_OWN | LTQ_DMA_SOP | LTQ_DMA_EOP |
|
|
|
LTQ_DMA_TX_OFFSET(byte_offset) | (len & LTQ_DMA_SIZE_MASK);
|
|
@@ -671,7 +670,7 @@ Signed-off-by: John Crispin <[email protected]>
|
|
|
netif_tx_stop_queue(txq);
|
|
|
|
|
|
return NETDEV_TX_OK;
|
|
|
-@@ -499,11 +693,14 @@ ltq_etop_change_mtu(struct net_device *d
|
|
|
+@@ -498,11 +693,14 @@ ltq_etop_change_mtu(struct net_device *d
|
|
|
{
|
|
|
struct ltq_etop_priv *priv = netdev_priv(dev);
|
|
|
unsigned long flags;
|
|
@@ -687,7 +686,7 @@ Signed-off-by: John Crispin <[email protected]>
|
|
|
spin_unlock_irqrestore(&priv->lock, flags);
|
|
|
|
|
|
return 0;
|
|
|
-@@ -556,6 +753,9 @@ ltq_etop_init(struct net_device *dev)
|
|
|
+@@ -555,6 +753,9 @@ ltq_etop_init(struct net_device *dev)
|
|
|
if (err)
|
|
|
goto err_hw;
|
|
|
ltq_etop_change_mtu(dev, 1500);
|
|
@@ -697,7 +696,7 @@ Signed-off-by: John Crispin <[email protected]>
|
|
|
|
|
|
memcpy(&mac, &priv->pldata->mac, sizeof(struct sockaddr));
|
|
|
if (!is_valid_ether_addr(mac.sa_data)) {
|
|
|
-@@ -573,9 +773,10 @@ ltq_etop_init(struct net_device *dev)
|
|
|
+@@ -572,9 +773,10 @@ ltq_etop_init(struct net_device *dev)
|
|
|
dev->addr_assign_type = NET_ADDR_RANDOM;
|
|
|
|
|
|
ltq_etop_set_multicast_list(dev);
|
|
@@ -711,7 +710,7 @@ Signed-off-by: John Crispin <[email protected]>
|
|
|
return 0;
|
|
|
|
|
|
err_netdev:
|
|
|
-@@ -595,6 +796,9 @@ ltq_etop_tx_timeout(struct net_device *d
|
|
|
+@@ -594,6 +796,9 @@ ltq_etop_tx_timeout(struct net_device *d
|
|
|
err = ltq_etop_hw_init(dev);
|
|
|
if (err)
|
|
|
goto err_hw;
|
|
@@ -721,7 +720,7 @@ Signed-off-by: John Crispin <[email protected]>
|
|
|
netif_trans_update(dev);
|
|
|
netif_wake_queue(dev);
|
|
|
return;
|
|
|
-@@ -618,14 +822,18 @@ static const struct net_device_ops ltq_e
|
|
|
+@@ -617,14 +822,18 @@ static const struct net_device_ops ltq_e
|
|
|
.ndo_tx_timeout = ltq_etop_tx_timeout,
|
|
|
};
|
|
|
|
|
@@ -744,7 +743,7 @@ Signed-off-by: John Crispin <[email protected]>
|
|
|
|
|
|
res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
|
|
|
if (!res) {
|
|
|
-@@ -651,31 +859,62 @@ ltq_etop_probe(struct platform_device *p
|
|
|
+@@ -650,31 +859,62 @@ ltq_etop_probe(struct platform_device *p
|
|
|
goto err_out;
|
|
|
}
|
|
|
|
|
@@ -822,7 +821,7 @@ Signed-off-by: John Crispin <[email protected]>
|
|
|
|
|
|
err = register_netdev(dev);
|
|
|
if (err)
|
|
|
-@@ -704,31 +943,22 @@ ltq_etop_remove(struct platform_device *
|
|
|
+@@ -703,31 +943,22 @@ ltq_etop_remove(struct platform_device *
|
|
|
return 0;
|
|
|
}
|
|
|
|