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;
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);
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:
default:
assert(0);
}
+ err = 0;
- mutex_unlock(&bcm->mutex);
+ bcm43xx_unlock(bcm, flags);
- return count;
+ return err ? err : count;
}
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;
}
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,
{
struct bcm43xx_private *bcm = dev_to_bcm(dev);
unsigned long flags;
+ int err;
int value;
if (!capable(CAP_NET_ADMIN))
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,
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)