diff options
Diffstat (limited to 'drivers/net/ethernet/smsc/smsc911x.c')
| -rw-r--r-- | drivers/net/ethernet/smsc/smsc911x.c | 17 |
1 files changed, 6 insertions, 11 deletions
diff --git a/drivers/net/ethernet/smsc/smsc911x.c b/drivers/net/ethernet/smsc/smsc911x.c index 4a6971027076..cd3defb11ffb 100644 --- a/drivers/net/ethernet/smsc/smsc911x.c +++ b/drivers/net/ethernet/smsc/smsc911x.c | |||
| @@ -1166,10 +1166,8 @@ smsc911x_rx_counterrors(struct net_device *dev, unsigned int rxstat) | |||
| 1166 | 1166 | ||
| 1167 | /* Quickly dumps bad packets */ | 1167 | /* Quickly dumps bad packets */ |
| 1168 | static void | 1168 | static void |
| 1169 | smsc911x_rx_fastforward(struct smsc911x_data *pdata, unsigned int pktbytes) | 1169 | smsc911x_rx_fastforward(struct smsc911x_data *pdata, unsigned int pktwords) |
| 1170 | { | 1170 | { |
| 1171 | unsigned int pktwords = (pktbytes + NET_IP_ALIGN + 3) >> 2; | ||
| 1172 | |||
| 1173 | if (likely(pktwords >= 4)) { | 1171 | if (likely(pktwords >= 4)) { |
| 1174 | unsigned int timeout = 500; | 1172 | unsigned int timeout = 500; |
| 1175 | unsigned int val; | 1173 | unsigned int val; |
| @@ -1233,7 +1231,7 @@ static int smsc911x_poll(struct napi_struct *napi, int budget) | |||
| 1233 | continue; | 1231 | continue; |
| 1234 | } | 1232 | } |
| 1235 | 1233 | ||
| 1236 | skb = netdev_alloc_skb(dev, pktlength + NET_IP_ALIGN); | 1234 | skb = netdev_alloc_skb(dev, pktwords << 2); |
| 1237 | if (unlikely(!skb)) { | 1235 | if (unlikely(!skb)) { |
| 1238 | SMSC_WARN(pdata, rx_err, | 1236 | SMSC_WARN(pdata, rx_err, |
| 1239 | "Unable to allocate skb for rx packet"); | 1237 | "Unable to allocate skb for rx packet"); |
| @@ -1243,14 +1241,12 @@ static int smsc911x_poll(struct napi_struct *napi, int budget) | |||
| 1243 | break; | 1241 | break; |
| 1244 | } | 1242 | } |
| 1245 | 1243 | ||
| 1246 | skb->data = skb->head; | 1244 | pdata->ops->rx_readfifo(pdata, |
| 1247 | skb_reset_tail_pointer(skb); | 1245 | (unsigned int *)skb->data, pktwords); |
| 1248 | 1246 | ||
| 1249 | /* Align IP on 16B boundary */ | 1247 | /* Align IP on 16B boundary */ |
| 1250 | skb_reserve(skb, NET_IP_ALIGN); | 1248 | skb_reserve(skb, NET_IP_ALIGN); |
| 1251 | skb_put(skb, pktlength - 4); | 1249 | skb_put(skb, pktlength - 4); |
| 1252 | pdata->ops->rx_readfifo(pdata, | ||
| 1253 | (unsigned int *)skb->head, pktwords); | ||
| 1254 | skb->protocol = eth_type_trans(skb, dev); | 1250 | skb->protocol = eth_type_trans(skb, dev); |
| 1255 | skb_checksum_none_assert(skb); | 1251 | skb_checksum_none_assert(skb); |
| 1256 | netif_receive_skb(skb); | 1252 | netif_receive_skb(skb); |
| @@ -1565,7 +1561,7 @@ static int smsc911x_open(struct net_device *dev) | |||
| 1565 | smsc911x_reg_write(pdata, FIFO_INT, temp); | 1561 | smsc911x_reg_write(pdata, FIFO_INT, temp); |
| 1566 | 1562 | ||
| 1567 | /* set RX Data offset to 2 bytes for alignment */ | 1563 | /* set RX Data offset to 2 bytes for alignment */ |
| 1568 | smsc911x_reg_write(pdata, RX_CFG, (2 << 8)); | 1564 | smsc911x_reg_write(pdata, RX_CFG, (NET_IP_ALIGN << 8)); |
| 1569 | 1565 | ||
| 1570 | /* enable NAPI polling before enabling RX interrupts */ | 1566 | /* enable NAPI polling before enabling RX interrupts */ |
| 1571 | napi_enable(&pdata->napi); | 1567 | napi_enable(&pdata->napi); |
| @@ -2382,7 +2378,6 @@ static int __devinit smsc911x_drv_probe(struct platform_device *pdev) | |||
| 2382 | SET_NETDEV_DEV(dev, &pdev->dev); | 2378 | SET_NETDEV_DEV(dev, &pdev->dev); |
| 2383 | 2379 | ||
| 2384 | pdata = netdev_priv(dev); | 2380 | pdata = netdev_priv(dev); |
| 2385 | |||
| 2386 | dev->irq = irq_res->start; | 2381 | dev->irq = irq_res->start; |
| 2387 | irq_flags = irq_res->flags & IRQF_TRIGGER_MASK; | 2382 | irq_flags = irq_res->flags & IRQF_TRIGGER_MASK; |
| 2388 | pdata->ioaddr = ioremap_nocache(res->start, res_size); | 2383 | pdata->ioaddr = ioremap_nocache(res->start, res_size); |
| @@ -2446,7 +2441,7 @@ static int __devinit smsc911x_drv_probe(struct platform_device *pdev) | |||
| 2446 | if (retval) { | 2441 | if (retval) { |
| 2447 | SMSC_WARN(pdata, probe, | 2442 | SMSC_WARN(pdata, probe, |
| 2448 | "Unable to claim requested irq: %d", dev->irq); | 2443 | "Unable to claim requested irq: %d", dev->irq); |
| 2449 | goto out_free_irq; | 2444 | goto out_disable_resources; |
| 2450 | } | 2445 | } |
| 2451 | 2446 | ||
| 2452 | retval = register_netdev(dev); | 2447 | retval = register_netdev(dev); |
