]> git.hungrycats.org Git - linux/commitdiff
[ATM]: cleanup nicstat, suni and idt77105.
authorChas Williams <chas@locutus.cmf.nrl.navy.mil>
Sat, 22 Mar 2003 17:08:41 +0000 (09:08 -0800)
committerDavid S. Miller <davem@nuts.ninka.net>
Sat, 22 Mar 2003 17:08:41 +0000 (09:08 -0800)
drivers/atm/idt77105.c
drivers/atm/nicstar.c
drivers/atm/suni.c

index 8239161d003c63ebad4c57be5877d7ed4d843183..bba31ebc3ffcaeee5d96ee9ea1013976d69d6a01 100644 (file)
@@ -15,6 +15,7 @@
 #include <linux/init.h>
 #include <linux/capability.h>
 #include <linux/atm_idt77105.h>
+#include <linux/spinlock.h>
 #include <asm/system.h>
 #include <asm/param.h>
 #include <asm/uaccess.h>
@@ -38,6 +39,7 @@ struct idt77105_priv {
         unsigned char old_mcr;          /* storage of MCR reg while signal lost */
 };
 
+static spinlock_t idt77105_priv_lock = SPIN_LOCK_UNLOCKED;
 
 #define PRIV(dev) ((struct idt77105_priv *) dev->phy_data)
 
@@ -144,12 +146,11 @@ static int fetch_stats(struct atm_dev *dev,struct idt77105_stats *arg,int zero)
        unsigned long flags;
        struct idt77105_stats stats;
 
-       save_flags(flags);
-       cli();
+       spin_lock_irqsave(&idt77105_priv_lock, flags);
        memcpy(&stats, &PRIV(dev)->stats, sizeof(struct idt77105_stats));
        if (zero)
                memset(&PRIV(dev)->stats, 0, sizeof(struct idt77105_stats));
-       restore_flags(flags);
+       spin_unlock_irqrestore(&idt77105_priv_lock, flags);
        if (arg == NULL)
                return 0;
        return copy_to_user(arg, &PRIV(dev)->stats,
@@ -267,11 +268,10 @@ static int idt77105_start(struct atm_dev *dev)
        if (!(PRIV(dev) = kmalloc(sizeof(struct idt77105_priv),GFP_KERNEL)))
                return -ENOMEM;
        PRIV(dev)->dev = dev;
-       save_flags(flags);
-       cli();
+       spin_lock_irqsave(&idt77105_priv_lock, flags);
        PRIV(dev)->next = idt77105_all;
        idt77105_all = PRIV(dev);
-       restore_flags(flags);
+       spin_unlock_irqrestore(&idt77105_priv_lock, flags);
        memset(&PRIV(dev)->stats,0,sizeof(struct idt77105_stats));
         
         /* initialise dev->signal from Good Signal Bit */
@@ -305,11 +305,9 @@ static int idt77105_start(struct atm_dev *dev)
        idt77105_stats_timer_func(0); /* clear 77105 counters */
        (void) fetch_stats(dev,NULL,1); /* clear kernel counters */
         
-       cli();
-       if (!start_timer) restore_flags(flags);
-       else {
+       spin_lock_irqsave(&idt77105_priv_lock, flags);
+       if (start_timer) {
                start_timer = 0;
-               restore_flags(flags);
                 
                init_timer(&stats_timer);
                stats_timer.expires = jiffies+IDT77105_STATS_TIMER_PERIOD;
@@ -321,32 +319,11 @@ static int idt77105_start(struct atm_dev *dev)
                restart_timer.function = idt77105_restart_timer_func;
                add_timer(&restart_timer);
        }
+       spin_unlock_irqrestore(&idt77105_priv_lock, flags);
        return 0;
 }
 
 
-static const struct atmphy_ops idt77105_ops = {
-       idt77105_start,
-       idt77105_ioctl,
-       idt77105_int
-};
-
-
-int __init idt77105_init(struct atm_dev *dev)
-{
-       MOD_INC_USE_COUNT;
-
-       dev->phy = &idt77105_ops;
-       return 0;
-}
-
-
-/*
- * TODO: this function should be called through phy_ops
- * but that will not be possible for some time as there is
- * currently a freeze on modifying that structure
- * -- Greg Banks, 13 Sep 1999
- */
 int idt77105_stop(struct atm_dev *dev)
 {
        struct idt77105_priv *walk, *prev;
@@ -372,30 +349,33 @@ int idt77105_stop(struct atm_dev *dev)
             }
         }
 
-       MOD_DEC_USE_COUNT;
        return 0;
 }
 
 
+static const struct atmphy_ops idt77105_ops = {
+       .start =        idt77105_start,
+       .ioctl =        idt77105_ioctl,
+       .interrupt =    idt77105_int,
+       .stop =         idt77105_stop,
+};
 
-EXPORT_SYMBOL(idt77105_init);
-EXPORT_SYMBOL(idt77105_stop);
-
-MODULE_LICENSE("GPL");
-
-#ifdef MODULE
 
-int init_module(void)
+int idt77105_init(struct atm_dev *dev)
 {
+       dev->phy = &idt77105_ops;
        return 0;
 }
 
+EXPORT_SYMBOL(idt77105_init);
 
-void cleanup_module(void)
+static void __exit idt77105_exit(void)
 {
         /* turn off timers */
         del_timer(&stats_timer);
         del_timer(&restart_timer);
 }
 
-#endif
+module_exit(idt77105_exit);
+
+MODULE_LICENSE("GPL");
index 3637abbf8a567cbc6cc59e4ca09dc891dfb326ec..fe0784d57f5b240703314d06446f851e8cf00627 100644 (file)
@@ -354,11 +354,8 @@ static void __exit nicstar_module_exit(void)
 
       card = cards[i];
 
-#ifdef CONFIG_ATM_NICSTAR_USE_IDT77105
-      if (card->max_pcr == ATM_25_PCR) {
-        idt77105_stop(card->atmdev);
-      }
-#endif /* CONFIG_ATM_NICSTAR_USE_IDT77105 */
+      if (card->atmdev->phy && card->atmdev->phy->stop)
+        card->atmdev->phy->stop(card->atmdev);
 
       /* Stop everything */
       writel(0x00000000, card->membase + CFG);
@@ -905,22 +902,13 @@ static int __init ns_init_card(int i, struct pci_dev *pcidev)
    card->atmdev->phy = NULL;
 
 #ifdef CONFIG_ATM_NICSTAR_USE_SUNI
-   if (card->max_pcr == ATM_OC3_PCR) {
+   if (card->max_pcr == ATM_OC3_PCR)
       suni_init(card->atmdev);
-
-      MOD_INC_USE_COUNT;
-      /* Can't remove the nicstar driver or the suni driver would oops */
-   }
 #endif /* CONFIG_ATM_NICSTAR_USE_SUNI */
 
 #ifdef CONFIG_ATM_NICSTAR_USE_IDT77105
-   if (card->max_pcr == ATM_25_PCR) {
+   if (card->max_pcr == ATM_25_PCR)
       idt77105_init(card->atmdev);
-      /* Note that for the IDT77105 PHY we don't need the awful
-       * module count hack that the SUNI needs because we can
-       * stop the '105 when the nicstar module is cleaned up.
-       */
-   }
 #endif /* CONFIG_ATM_NICSTAR_USE_IDT77105 */
 
    if (card->atmdev->phy && card->atmdev->phy->start)
index a30650ee24821c3e6cfed08af85c5efb87887433..b4ff66fa760f157ed4eb22e749380eb94e596d25 100644 (file)
@@ -307,24 +307,6 @@ int suni_init(struct atm_dev *dev)
        return 0;
 }
 
-
 EXPORT_SYMBOL(suni_init);
 
-
 MODULE_LICENSE("GPL");
-
-#ifdef MODULE
-
-
-int init_module(void)
-{
-       return 0;
-}
-
-
-void cleanup_module(void)
-{
-       /* Nay */
-}
-
-#endif