mkiss: convert to internal network device stats
[safe/jmp/linux-2.6] / drivers / net / tc35815.c
index 44126c4..bcd0e60 100644 (file)
@@ -37,6 +37,7 @@ static const char *version = "tc35815.c:v" DRV_VERSION "\n";
 #include <linux/interrupt.h>
 #include <linux/ioport.h>
 #include <linux/in.h>
+#include <linux/if_vlan.h>
 #include <linux/slab.h>
 #include <linux/string.h>
 #include <linux/spinlock.h>
@@ -341,7 +342,7 @@ struct BDesc {
        Tx_En)  /* maybe  0x7b01 */
 #endif
 #define RX_CTL_CMD     (Rx_EnGood | Rx_EnRxPar | Rx_EnLongErr | Rx_EnOver \
-       | Rx_EnCRCErr | Rx_EnAlign | Rx_RxEn)   /* maybe 0x6f01 */
+       | Rx_EnCRCErr | Rx_EnAlign | Rx_StripCRC | Rx_RxEn) /* maybe 0x6f11 */
 #define INT_EN_CMD  (Int_NRAbtEn | \
        Int_DmParErrEn | Int_DParDEn | Int_DParErrEn | \
        Int_SSysErrEn  | Int_RMasAbtEn | Int_RTargAbtEn | \
@@ -373,9 +374,11 @@ struct BDesc {
 #if RX_CTL_CMD & Rx_LongEn
 #define RX_BUF_SIZE    PAGE_SIZE
 #elif RX_CTL_CMD & Rx_StripCRC
-#define RX_BUF_SIZE    ALIGN(ETH_FRAME_LEN + 4 + 2, 32) /* +2: reserve */
+#define RX_BUF_SIZE    \
+       L1_CACHE_ALIGN(ETH_FRAME_LEN + VLAN_HLEN + NET_IP_ALIGN)
 #else
-#define RX_BUF_SIZE    ALIGN(ETH_FRAME_LEN + 2, 32) /* +2: reserve */
+#define RX_BUF_SIZE    \
+       L1_CACHE_ALIGN(ETH_FRAME_LEN + VLAN_HLEN + ETH_FCS_LEN + NET_IP_ALIGN)
 #endif
 #endif /* TC35815_USE_PACKEDBUFFER */
 #define RX_FD_RESERVE  (2 / 2) /* max 2 BD per RxFD */
@@ -1606,8 +1609,8 @@ static irqreturn_t tc35815_interrupt(int irq, void *dev_id)
        if (!(dmactl & DMA_IntMask)) {
                /* disable interrupts */
                tc_writel(dmactl | DMA_IntMask, &tr->DMA_Ctl);
-               if (netif_rx_schedule_prep(dev, &lp->napi))
-                       __netif_rx_schedule(dev, &lp->napi);
+               if (netif_rx_schedule_prep(&lp->napi))
+                       __netif_rx_schedule(&lp->napi);
                else {
                        printk(KERN_ERR "%s: interrupt taken in poll\n",
                               dev->name);
@@ -1666,7 +1669,7 @@ tc35815_rx(struct net_device *dev)
                struct RxFD *next_rfd;
 #endif
 #if (RX_CTL_CMD & Rx_StripCRC) == 0
-               pkt_len -= 4;
+               pkt_len -= ETH_FCS_LEN;
 #endif
 
                if (netif_msg_rx_status(lp))
@@ -1685,14 +1688,14 @@ tc35815_rx(struct net_device *dev)
 #endif
 #ifdef TC35815_USE_PACKEDBUFFER
                        BUG_ON(bd_count > 2);
-                       skb = dev_alloc_skb(pkt_len + 2); /* +2: for reserve */
+                       skb = dev_alloc_skb(pkt_len + NET_IP_ALIGN);
                        if (skb == NULL) {
                                printk(KERN_NOTICE "%s: Memory squeeze, dropping packet.\n",
                                       dev->name);
                                dev->stats.rx_dropped++;
                                break;
                        }
-                       skb_reserve(skb, 2);   /* 16 bit alignment */
+                       skb_reserve(skb, NET_IP_ALIGN);
 
                        data = skb_put(skb, pkt_len);
 
@@ -1744,8 +1747,9 @@ tc35815_rx(struct net_device *dev)
                        pci_unmap_single(lp->pci_dev,
                                         lp->rx_skbs[cur_bd].skb_dma,
                                         RX_BUF_SIZE, PCI_DMA_FROMDEVICE);
-                       if (!HAVE_DMA_RXALIGN(lp))
-                               memmove(skb->data, skb->data - 2, pkt_len);
+                       if (!HAVE_DMA_RXALIGN(lp) && NET_IP_ALIGN)
+                               memmove(skb->data, skb->data - NET_IP_ALIGN,
+                                       pkt_len);
                        data = skb_put(skb, pkt_len);
 #endif /* TC35815_USE_PACKEDBUFFER */
                        if (netif_msg_pktdata(lp))
@@ -1915,7 +1919,7 @@ static int tc35815_poll(struct napi_struct *napi, int budget)
        spin_unlock(&lp->lock);
 
        if (received < budget) {
-               netif_rx_complete(dev, napi);
+               netif_rx_complete(napi);
                /* enable interrupts */
                tc_writel(tc_readl(&tr->DMA_Ctl) & ~DMA_IntMask, &tr->DMA_Ctl);
        }