]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - drivers/net/tc35815.c
3c59x: Handle pci_enable_device() failure while resuming
[linux-2.6-omap-h63xx.git] / drivers / net / tc35815.c
index 39460fa916fe9df45216b7315297b9fc9372e83c..e3a7e3ceab772e42de6f3481bc262a1527c8de03 100644 (file)
@@ -1,7 +1,7 @@
 /* tc35815.c: A TOSHIBA TC35815CF PCI 10/100Mbps ethernet driver for linux.
  *
  * Copyright 2001 MontaVista Software Inc.
- * Author: MontaVista Software, Inc. 
+ * Author: MontaVista Software, Inc.
  *                ahennessy@mvista.com
  *
  * Based on skelton.c by Donald Becker.
@@ -453,7 +453,7 @@ static int __devinit tc35815_probe1(struct pci_dev *pdev, unsigned int base_addr
 static int     tc35815_open(struct net_device *dev);
 static int     tc35815_send_packet(struct sk_buff *skb, struct net_device *dev);
 static void     tc35815_tx_timeout(struct net_device *dev);
-static irqreturn_t tc35815_interrupt(int irq, void *dev_id, struct pt_regs *regs);
+static irqreturn_t tc35815_interrupt(int irq, void *dev_id);
 static void    tc35815_rx(struct net_device *dev);
 static void    tc35815_txdone(struct net_device *dev);
 static int     tc35815_close(struct net_device *dev);
@@ -657,13 +657,13 @@ tc35815_init_queues(struct net_device *dev)
                dma_cache_wback_inv((unsigned long)lp->fd_buf, PAGE_SIZE * FD_PAGE_NUM);
 #endif
        } else {
-               clear_page(lp->fd_buf);
+               memset(lp->fd_buf, 0, PAGE_SIZE * FD_PAGE_NUM);
 #ifdef __mips__
                dma_cache_wback_inv((unsigned long)lp->fd_buf, PAGE_SIZE * FD_PAGE_NUM);
 #endif
        }
 #ifdef __mips__
-       fd_addr = (unsigned long)vtonocache(lp->fd_buf);  
+       fd_addr = (unsigned long)vtonocache(lp->fd_buf);
 #else
        fd_addr = (unsigned long)lp->fd_buf;
 #endif
@@ -1044,7 +1044,7 @@ static void tc35815_fatal_error_interrupt(struct net_device *dev, int status)
  * The typical workload of the driver:
  *   Handle the network interface interrupts.
  */
-static irqreturn_t tc35815_interrupt(int irq, void *dev_id, struct pt_regs * regs)
+static irqreturn_t tc35815_interrupt(int irq, void *dev_id)
 {
        struct net_device *dev = dev_id;
        struct tc35815_regs *tr;
@@ -1136,7 +1136,7 @@ tc35815_rx(struct net_device *dev)
                        int cur_bd, offset;
 
                        lp->stats.rx_bytes += pkt_len;
-                       
+
                        skb = dev_alloc_skb(pkt_len + 2); /* +2: for reserve */
                        if (skb == NULL) {
                                printk(KERN_NOTICE "%s: Memory squeeze, dropping packet.\n",
@@ -1523,7 +1523,7 @@ static unsigned long tc_phy_read(struct net_device *dev, struct tc35815_regs *tr
        struct tc35815_local *lp = dev->priv;
        unsigned long data;
        unsigned long flags;
-       
+
        spin_lock_irqsave(&lp->lock, flags);
 
        tc_writel(MD_CA_Busy | (phy << 5) | phy_reg, &tr->MD_CA);
@@ -1703,19 +1703,6 @@ static void tc35815_chip_init(struct net_device *dev)
        spin_unlock_irqrestore(&lp->lock, flags);
 }
 
-/* XXX */
-void
-tc35815_killall(void)
-{
-       struct net_device *dev;
-
-       for (dev = root_tc35815_dev; dev; dev = ((struct tc35815_local *)dev->priv)->next_module) {
-               if (dev->flags&IFF_UP){
-                       dev->stop(dev);
-               }
-       }
-}
-
 static struct pci_driver tc35815_driver = {
        .name = TC35815_MODULE_NAME,
        .probe = tc35815_probe,
@@ -1732,6 +1719,11 @@ static void __exit tc35815_cleanup_module(void)
 {
        struct net_device *next_dev;
 
+       /*
+        * TODO: implement a tc35815_driver.remove hook, and
+        * move this code into that function.  Then, delete
+        * all root_tc35815_dev list handling code.
+        */
        while (root_tc35815_dev) {
                struct net_device *dev = root_tc35815_dev;
                next_dev = ((struct tc35815_local *)dev->priv)->next_module;
@@ -1740,6 +1732,9 @@ static void __exit tc35815_cleanup_module(void)
                free_netdev(dev);
                root_tc35815_dev = next_dev;
        }
+
+       pci_unregister_driver(&tc35815_driver);
 }
+
 module_init(tc35815_init_module);
 module_exit(tc35815_cleanup_module);