[PATCH] dvb: cinergyT2: endianness fix for raw remote-control keys
[safe/jmp/linux-2.6] / drivers / net / pcnet32.c
index 17947e6..113b680 100644 (file)
@@ -22,8 +22,8 @@
  *************************************************************************/
 
 #define DRV_NAME       "pcnet32"
-#define DRV_VERSION    "1.30i"
-#define DRV_RELDATE    "06.28.2004"
+#define DRV_VERSION    "1.30j"
+#define DRV_RELDATE    "29.04.2005"
 #define PFX            DRV_NAME ": "
 
 static const char *version =
@@ -256,6 +256,7 @@ static int homepna[MAX_UNITS];
  *        homepna for selecting HomePNA mode for PCNet/Home 79C978.
  * v1.30h  24 Jun 2004 Don Fry correctly select auto, speed, duplex in bcr32.
  * v1.30i  28 Jun 2004 Don Fry change to use module_param.
+ * v1.30j  29 Apr 2005 Don Fry fix skb/map leak with loopback test.
  */
 
 
@@ -395,6 +396,7 @@ static void pcnet32_led_blink_callback(struct net_device *dev);
 static int pcnet32_get_regs_len(struct net_device *dev);
 static void pcnet32_get_regs(struct net_device *dev, struct ethtool_regs *regs,
        void *ptr);
+static void pcnet32_purge_tx_ring(struct net_device *dev);
 
 enum pci_flags_bit {
     PCI_USES_IO=1, PCI_USES_MEM=2, PCI_USES_MASTER=4,
@@ -785,6 +787,7 @@ static int pcnet32_loopback_test(struct net_device *dev, uint64_t *data1)
     }
 
 clean_up:
+    pcnet32_purge_tx_ring(dev);
     x = a->read_csr(ioaddr, 15) & 0xFFFF;
     a->write_csr(ioaddr, 15, (x & ~0x0044));   /* reset bits 6 and 2 */
 
@@ -847,7 +850,7 @@ static int pcnet32_phys_id(struct net_device *dev, u32 data)
     if ((!data) || (data > (u32)(MAX_SCHEDULE_TIMEOUT / HZ)))
     data = (u32)(MAX_SCHEDULE_TIMEOUT / HZ);
 
-    schedule_timeout(data * HZ);
+    msleep_interruptible(data * 1000);
     del_timer_sync(&lp->blink_timer);
 
     /* Restore the original value of the bcrs */
@@ -1599,7 +1602,7 @@ pcnet32_init_ring(struct net_device *dev)
 
        rmb();
        if (lp->rx_dma_addr[i] == 0)
-           lp->rx_dma_addr[i] = pci_map_single(lp->pci_dev, rx_skbuff->tail,
+           lp->rx_dma_addr[i] = pci_map_single(lp->pci_dev, rx_skbuff->data,
                    PKT_BUF_SZ-2, PCI_DMA_FROMDEVICE);
        lp->rx_ring[i].base = (u32)le32_to_cpu(lp->rx_dma_addr[i]);
        lp->rx_ring[i].buf_length = le16_to_cpu(2-PKT_BUF_SZ);
@@ -1980,7 +1983,7 @@ pcnet32_rx(struct net_device *dev)
                        lp->rx_skbuff[entry] = newskb;
                        newskb->dev = dev;
                        lp->rx_dma_addr[entry] =
-                           pci_map_single(lp->pci_dev, newskb->tail,
+                           pci_map_single(lp->pci_dev, newskb->data,
                                    PKT_BUF_SZ-2, PCI_DMA_FROMDEVICE);
                        lp->rx_ring[entry].base = le32_to_cpu(lp->rx_dma_addr[entry]);
                        rx_in_place = 1;
@@ -2017,7 +2020,7 @@ pcnet32_rx(struct net_device *dev)
                                                PKT_BUF_SZ-2,
                                                PCI_DMA_FROMDEVICE);
                    eth_copy_and_sum(skb,
-                           (unsigned char *)(lp->rx_skbuff[entry]->tail),
+                           (unsigned char *)(lp->rx_skbuff[entry]->data),
                            pkt_len,0);
                    pci_dma_sync_single_for_device(lp->pci_dev,
                                                   lp->rx_dma_addr[entry],