|
@@ -1166,10 +1166,8 @@ smsc911x_rx_counterrors(struct net_device *dev, unsigned int rxstat)
|
|
|
|
|
|
/* Quickly dumps bad packets */
|
|
|
static void
|
|
|
-smsc911x_rx_fastforward(struct smsc911x_data *pdata, unsigned int pktbytes)
|
|
|
+smsc911x_rx_fastforward(struct smsc911x_data *pdata, unsigned int pktwords)
|
|
|
{
|
|
|
- unsigned int pktwords = (pktbytes + NET_IP_ALIGN + 3) >> 2;
|
|
|
-
|
|
|
if (likely(pktwords >= 4)) {
|
|
|
unsigned int timeout = 500;
|
|
|
unsigned int val;
|
|
@@ -1233,7 +1231,7 @@ static int smsc911x_poll(struct napi_struct *napi, int budget)
|
|
|
continue;
|
|
|
}
|
|
|
|
|
|
- skb = netdev_alloc_skb(dev, pktlength + NET_IP_ALIGN);
|
|
|
+ skb = netdev_alloc_skb(dev, pktwords << 2);
|
|
|
if (unlikely(!skb)) {
|
|
|
SMSC_WARN(pdata, rx_err,
|
|
|
"Unable to allocate skb for rx packet");
|
|
@@ -1243,14 +1241,12 @@ static int smsc911x_poll(struct napi_struct *napi, int budget)
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
- skb->data = skb->head;
|
|
|
- skb_reset_tail_pointer(skb);
|
|
|
+ pdata->ops->rx_readfifo(pdata,
|
|
|
+ (unsigned int *)skb->data, pktwords);
|
|
|
|
|
|
/* Align IP on 16B boundary */
|
|
|
skb_reserve(skb, NET_IP_ALIGN);
|
|
|
skb_put(skb, pktlength - 4);
|
|
|
- pdata->ops->rx_readfifo(pdata,
|
|
|
- (unsigned int *)skb->head, pktwords);
|
|
|
skb->protocol = eth_type_trans(skb, dev);
|
|
|
skb_checksum_none_assert(skb);
|
|
|
netif_receive_skb(skb);
|
|
@@ -1565,7 +1561,7 @@ static int smsc911x_open(struct net_device *dev)
|
|
|
smsc911x_reg_write(pdata, FIFO_INT, temp);
|
|
|
|
|
|
/* set RX Data offset to 2 bytes for alignment */
|
|
|
- smsc911x_reg_write(pdata, RX_CFG, (2 << 8));
|
|
|
+ smsc911x_reg_write(pdata, RX_CFG, (NET_IP_ALIGN << 8));
|
|
|
|
|
|
/* enable NAPI polling before enabling RX interrupts */
|
|
|
napi_enable(&pdata->napi);
|