X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=drivers%2Fnet%2Fwireless%2Fbcm43xx%2Fbcm43xx_sysfs.c;h=b438f48e891d185c2933828ee2b9080de3097564;hb=9464c7cf61b9433057924c36e6e02f303a00e768;hp=f41d9e7d099171313be91076f3e8451bc8e9fed5;hpb=41689045f6a3cbe0550e1d34e9cc20d2e8c432ba;p=linux-2.6.git diff --git a/drivers/net/wireless/bcm43xx/bcm43xx_sysfs.c b/drivers/net/wireless/bcm43xx/bcm43xx_sysfs.c index f41d9e7d0..b438f48e8 100644 --- a/drivers/net/wireless/bcm43xx/bcm43xx_sysfs.c +++ b/drivers/net/wireless/bcm43xx/bcm43xx_sysfs.c @@ -120,14 +120,12 @@ static ssize_t bcm43xx_attr_sprom_show(struct device *dev, GFP_KERNEL); if (!sprom) return -ENOMEM; - mutex_lock(&bcm->mutex); - spin_lock_irqsave(&bcm->irq_lock, flags); + bcm43xx_lock_mmio(bcm, flags); + assert(bcm->initialized); err = bcm43xx_sprom_read(bcm, sprom); if (!err) err = sprom2hex(sprom, buf, PAGE_SIZE); - mmiowb(); - spin_unlock_irqrestore(&bcm->irq_lock, flags); - mutex_unlock(&bcm->mutex); + bcm43xx_unlock_mmio(bcm, flags); kfree(sprom); return err; @@ -152,14 +150,10 @@ static ssize_t bcm43xx_attr_sprom_store(struct device *dev, err = hex2sprom(sprom, buf, count); if (err) goto out_kfree; - mutex_lock(&bcm->mutex); - spin_lock_irqsave(&bcm->irq_lock, flags); - spin_lock(&bcm->leds_lock); + bcm43xx_lock_mmio(bcm, flags); + assert(bcm->initialized); err = bcm43xx_sprom_write(bcm, sprom); - mmiowb(); - spin_unlock(&bcm->leds_lock); - spin_unlock_irqrestore(&bcm->irq_lock, flags); - mutex_unlock(&bcm->mutex); + bcm43xx_unlock_mmio(bcm, flags); out_kfree: kfree(sprom); @@ -176,12 +170,15 @@ static ssize_t bcm43xx_attr_interfmode_show(struct device *dev, char *buf) { struct bcm43xx_private *bcm = dev_to_bcm(dev); + unsigned long flags; + int err; ssize_t count = 0; if (!capable(CAP_NET_ADMIN)) return -EPERM; - mutex_lock(&bcm->mutex); + bcm43xx_lock(bcm, flags); + assert(bcm->initialized); switch (bcm43xx_current_radio(bcm)->interfmode) { case BCM43xx_RADIO_INTERFMODE_NONE: @@ -196,10 +193,11 @@ static ssize_t bcm43xx_attr_interfmode_show(struct device *dev, default: assert(0); } + err = 0; - mutex_unlock(&bcm->mutex); + bcm43xx_unlock(bcm, flags); - return count; + return err ? err : count; } @@ -233,17 +231,16 @@ static ssize_t bcm43xx_attr_interfmode_store(struct device *dev, return -EINVAL; } - mutex_lock(&bcm->mutex); - spin_lock_irqsave(&bcm->irq_lock, flags); + bcm43xx_lock_mmio(bcm, flags); + assert(bcm->initialized); err = bcm43xx_radio_set_interference_mitigation(bcm, mode); if (err) { printk(KERN_ERR PFX "Interference Mitigation not " "supported by device\n"); } - mmiowb(); - spin_unlock_irqrestore(&bcm->irq_lock, flags); - mutex_unlock(&bcm->mutex); + + bcm43xx_unlock_mmio(bcm, flags); return err ? err : count; } @@ -257,21 +254,25 @@ static ssize_t bcm43xx_attr_preamble_show(struct device *dev, char *buf) { struct bcm43xx_private *bcm = dev_to_bcm(dev); + unsigned long flags; + int err; ssize_t count; if (!capable(CAP_NET_ADMIN)) return -EPERM; - mutex_lock(&bcm->mutex); + bcm43xx_lock(bcm, flags); + assert(bcm->initialized); if (bcm->short_preamble) count = snprintf(buf, PAGE_SIZE, "1 (Short Preamble enabled)\n"); else count = snprintf(buf, PAGE_SIZE, "0 (Short Preamble disabled)\n"); - mutex_unlock(&bcm->mutex); + err = 0; + bcm43xx_unlock(bcm, flags); - return count; + return err ? err : count; } static ssize_t bcm43xx_attr_preamble_store(struct device *dev, @@ -280,6 +281,7 @@ static ssize_t bcm43xx_attr_preamble_store(struct device *dev, { struct bcm43xx_private *bcm = dev_to_bcm(dev); unsigned long flags; + int err; int value; if (!capable(CAP_NET_ADMIN)) @@ -288,15 +290,15 @@ static ssize_t bcm43xx_attr_preamble_store(struct device *dev, value = get_boolean(buf, count); if (value < 0) return value; - mutex_lock(&bcm->mutex); - spin_lock_irqsave(&bcm->irq_lock, flags); + bcm43xx_lock(bcm, flags); + assert(bcm->initialized); bcm->short_preamble = !!value; - spin_unlock_irqrestore(&bcm->irq_lock, flags); - mutex_unlock(&bcm->mutex); + err = 0; + bcm43xx_unlock(bcm, flags); - return count; + return err ? err : count; } static DEVICE_ATTR(shortpreamble, 0644, @@ -308,7 +310,7 @@ int bcm43xx_sysfs_register(struct bcm43xx_private *bcm) struct device *dev = &bcm->pci_dev->dev; int err; - assert(bcm43xx_status(bcm) == BCM43xx_STAT_INITIALIZED); + assert(bcm->initialized); err = device_create_file(dev, &dev_attr_sprom); if (err)