git://git.onelab.eu
/
linux-2.6.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Merge to Fedora kernel-2.6.18-1.2224_FC5 patched with stable patch-2.6.18.1-vs2.0...
[linux-2.6.git]
/
drivers
/
net
/
wireless
/
bcm43xx
/
bcm43xx_wx.c
diff --git
a/drivers/net/wireless/bcm43xx/bcm43xx_wx.c
b/drivers/net/wireless/bcm43xx/bcm43xx_wx.c
index
b450639
..
ebe2a84
100644
(file)
--- a/
drivers/net/wireless/bcm43xx/bcm43xx_wx.c
+++ b/
drivers/net/wireless/bcm43xx/bcm43xx_wx.c
@@
-55,13
+55,12
@@
static int bcm43xx_wx_get_name(struct net_device *net_dev,
char *extra)
{
struct bcm43xx_private *bcm = bcm43xx_priv(net_dev);
char *extra)
{
struct bcm43xx_private *bcm = bcm43xx_priv(net_dev);
- unsigned long flags;
int i;
struct bcm43xx_phyinfo *phy;
char suffix[7] = { 0 };
int have_a = 0, have_b = 0, have_g = 0;
int i;
struct bcm43xx_phyinfo *phy;
char suffix[7] = { 0 };
int have_a = 0, have_b = 0, have_g = 0;
-
bcm43xx_lock(bcm, flags
);
+
mutex_lock(&bcm->mutex
);
for (i = 0; i < bcm->nr_80211_available; i++) {
phy = &(bcm->core_80211_ext[i].phy);
switch (phy->type) {
for (i = 0; i < bcm->nr_80211_available; i++) {
phy = &(bcm->core_80211_ext[i].phy);
switch (phy->type) {
@@
-77,7
+76,7
@@
static int bcm43xx_wx_get_name(struct net_device *net_dev,
assert(0);
}
}
assert(0);
}
}
-
bcm43xx_unlock(bcm, flags
);
+
mutex_unlock(&bcm->mutex
);
i = 0;
if (have_a) {
i = 0;
if (have_a) {
@@
-111,7
+110,9
@@
static int bcm43xx_wx_set_channelfreq(struct net_device *net_dev,
int freq;
int err = -EINVAL;
int freq;
int err = -EINVAL;
- bcm43xx_lock_mmio(bcm, flags);
+ mutex_lock(&bcm->mutex);
+ spin_lock_irqsave(&bcm->irq_lock, flags);
+
if ((data->freq.m >= 0) && (data->freq.m <= 1000)) {
channel = data->freq.m;
freq = bcm43xx_channel_to_freq(bcm, channel);
if ((data->freq.m >= 0) && (data->freq.m <= 1000)) {
channel = data->freq.m;
freq = bcm43xx_channel_to_freq(bcm, channel);
@@
-119,9
+120,9
@@
static int bcm43xx_wx_set_channelfreq(struct net_device *net_dev,
channel = bcm43xx_freq_to_channel(bcm, data->freq.m);
freq = data->freq.m;
}
channel = bcm43xx_freq_to_channel(bcm, data->freq.m);
freq = data->freq.m;
}
- if (!
bcm43xx_is_valid_channel(bcm
, channel))
+ if (!
ieee80211_is_valid_channel(bcm->ieee
, channel))
goto out_unlock;
goto out_unlock;
- if (bcm
->initialized
) {
+ if (bcm
43xx_status(bcm) == BCM43xx_STAT_INITIALIZED
) {
//ieee80211softmac_disassoc(softmac, $REASON);
bcm43xx_mac_suspend(bcm);
err = bcm43xx_radio_selectchannel(bcm, channel, 0);
//ieee80211softmac_disassoc(softmac, $REASON);
bcm43xx_mac_suspend(bcm);
err = bcm43xx_radio_selectchannel(bcm, channel, 0);
@@
-131,7
+132,8
@@
static int bcm43xx_wx_set_channelfreq(struct net_device *net_dev,
err = 0;
}
out_unlock:
err = 0;
}
out_unlock:
- bcm43xx_unlock_mmio(bcm, flags);
+ spin_unlock_irqrestore(&bcm->irq_lock, flags);
+ mutex_unlock(&bcm->mutex);
return err;
}
return err;
}
@@
-143,15
+145,13
@@
static int bcm43xx_wx_get_channelfreq(struct net_device *net_dev,
{
struct bcm43xx_private *bcm = bcm43xx_priv(net_dev);
struct bcm43xx_radioinfo *radio;
{
struct bcm43xx_private *bcm = bcm43xx_priv(net_dev);
struct bcm43xx_radioinfo *radio;
- unsigned long flags;
int err = -ENODEV;
u16 channel;
int err = -ENODEV;
u16 channel;
-
bcm43xx_lock(bcm, flags
);
+
mutex_lock(&bcm->mutex
);
radio = bcm43xx_current_radio(bcm);
channel = radio->channel;
if (channel == 0xFF) {
radio = bcm43xx_current_radio(bcm);
channel = radio->channel;
if (channel == 0xFF) {
- assert(!bcm->initialized);
channel = radio->initial_channel;
if (channel == 0xFF)
goto out_unlock;
channel = radio->initial_channel;
if (channel == 0xFF)
goto out_unlock;
@@
-163,7
+163,7
@@
static int bcm43xx_wx_get_channelfreq(struct net_device *net_dev,
err = 0;
out_unlock:
err = 0;
out_unlock:
-
bcm43xx_unlock(bcm, flags
);
+
mutex_unlock(&bcm->mutex
);
return err;
}
return err;
}
@@
-181,13
+181,15
@@
static int bcm43xx_wx_set_mode(struct net_device *net_dev,
if (mode == IW_MODE_AUTO)
mode = BCM43xx_INITIAL_IWMODE;
if (mode == IW_MODE_AUTO)
mode = BCM43xx_INITIAL_IWMODE;
- bcm43xx_lock_mmio(bcm, flags);
- if (bcm->initialized) {
+ mutex_lock(&bcm->mutex);
+ spin_lock_irqsave(&bcm->irq_lock, flags);
+ if (bcm43xx_status(bcm) == BCM43xx_STAT_INITIALIZED) {
if (bcm->ieee->iw_mode != mode)
bcm43xx_set_iwmode(bcm, mode);
} else
bcm->ieee->iw_mode = mode;
if (bcm->ieee->iw_mode != mode)
bcm43xx_set_iwmode(bcm, mode);
} else
bcm->ieee->iw_mode = mode;
- bcm43xx_unlock_mmio(bcm, flags);
+ spin_unlock_irqrestore(&bcm->irq_lock, flags);
+ mutex_unlock(&bcm->mutex);
return 0;
}
return 0;
}
@@
-198,11
+200,10
@@
static int bcm43xx_wx_get_mode(struct net_device *net_dev,
char *extra)
{
struct bcm43xx_private *bcm = bcm43xx_priv(net_dev);
char *extra)
{
struct bcm43xx_private *bcm = bcm43xx_priv(net_dev);
- unsigned long flags;
-
bcm43xx_lock(bcm, flags
);
+
mutex_lock(&bcm->mutex
);
data->mode = bcm->ieee->iw_mode;
data->mode = bcm->ieee->iw_mode;
-
bcm43xx_unlock(bcm, flags
);
+
mutex_unlock(&bcm->mutex
);
return 0;
}
return 0;
}
@@
-215,7
+216,6
@@
static int bcm43xx_wx_get_rangeparams(struct net_device *net_dev,
struct bcm43xx_private *bcm = bcm43xx_priv(net_dev);
struct iw_range *range = (struct iw_range *)extra;
const struct ieee80211_geo *geo;
struct bcm43xx_private *bcm = bcm43xx_priv(net_dev);
struct iw_range *range = (struct iw_range *)extra;
const struct ieee80211_geo *geo;
- unsigned long flags;
int i, j;
struct bcm43xx_phyinfo *phy;
int i, j;
struct bcm43xx_phyinfo *phy;
@@
-255,7
+255,7
@@
static int bcm43xx_wx_get_rangeparams(struct net_device *net_dev,
IW_ENC_CAPA_CIPHER_TKIP |
IW_ENC_CAPA_CIPHER_CCMP;
IW_ENC_CAPA_CIPHER_TKIP |
IW_ENC_CAPA_CIPHER_CCMP;
-
bcm43xx_lock(bcm, flags
);
+
mutex_lock(&bcm->mutex
);
phy = bcm43xx_current_phy(bcm);
range->num_bitrates = 0;
phy = bcm43xx_current_phy(bcm);
range->num_bitrates = 0;
@@
-302,7
+302,7
@@
static int bcm43xx_wx_get_rangeparams(struct net_device *net_dev,
}
range->num_frequency = j;
}
range->num_frequency = j;
-
bcm43xx_unlock(bcm, flags
);
+
mutex_unlock(&bcm->mutex
);
return 0;
}
return 0;
}
@@
-313,14
+313,13
@@
static int bcm43xx_wx_set_nick(struct net_device *net_dev,
char *extra)
{
struct bcm43xx_private *bcm = bcm43xx_priv(net_dev);
char *extra)
{
struct bcm43xx_private *bcm = bcm43xx_priv(net_dev);
- unsigned long flags;
size_t len;
size_t len;
-
bcm43xx_lock(bcm, flags
);
+
mutex_lock(&bcm->mutex
);
len = min((size_t)data->data.length, (size_t)IW_ESSID_MAX_SIZE);
memcpy(bcm->nick, extra, len);
bcm->nick[len] = '\0';
len = min((size_t)data->data.length, (size_t)IW_ESSID_MAX_SIZE);
memcpy(bcm->nick, extra, len);
bcm->nick[len] = '\0';
-
bcm43xx_unlock(bcm, flags
);
+
mutex_unlock(&bcm->mutex
);
return 0;
}
return 0;
}
@@
-331,15
+330,14
@@
static int bcm43xx_wx_get_nick(struct net_device *net_dev,
char *extra)
{
struct bcm43xx_private *bcm = bcm43xx_priv(net_dev);
char *extra)
{
struct bcm43xx_private *bcm = bcm43xx_priv(net_dev);
- unsigned long flags;
size_t len;
size_t len;
-
bcm43xx_lock(bcm, flags
);
+
mutex_lock(&bcm->mutex
);
len = strlen(bcm->nick) + 1;
memcpy(extra, bcm->nick, len);
data->data.length = (__u16)len;
data->data.flags = 1;
len = strlen(bcm->nick) + 1;
memcpy(extra, bcm->nick, len);
data->data.length = (__u16)len;
data->data.flags = 1;
-
bcm43xx_unlock(bcm, flags
);
+
mutex_unlock(&bcm->mutex
);
return 0;
}
return 0;
}
@@
-353,7
+351,8
@@
static int bcm43xx_wx_set_rts(struct net_device *net_dev,
unsigned long flags;
int err = -EINVAL;
unsigned long flags;
int err = -EINVAL;
- bcm43xx_lock(bcm, flags);
+ mutex_lock(&bcm->mutex);
+ spin_lock_irqsave(&bcm->irq_lock, flags);
if (data->rts.disabled) {
bcm->rts_threshold = BCM43xx_MAX_RTS_THRESHOLD;
err = 0;
if (data->rts.disabled) {
bcm->rts_threshold = BCM43xx_MAX_RTS_THRESHOLD;
err = 0;
@@
-364,7
+363,8
@@
static int bcm43xx_wx_set_rts(struct net_device *net_dev,
err = 0;
}
}
err = 0;
}
}
- bcm43xx_unlock(bcm, flags);
+ spin_unlock_irqrestore(&bcm->irq_lock, flags);
+ mutex_unlock(&bcm->mutex);
return err;
}
return err;
}
@@
-375,13
+375,12
@@
static int bcm43xx_wx_get_rts(struct net_device *net_dev,
char *extra)
{
struct bcm43xx_private *bcm = bcm43xx_priv(net_dev);
char *extra)
{
struct bcm43xx_private *bcm = bcm43xx_priv(net_dev);
- unsigned long flags;
-
bcm43xx_lock(bcm, flags
);
+
mutex_lock(&bcm->mutex
);
data->rts.value = bcm->rts_threshold;
data->rts.fixed = 0;
data->rts.disabled = (bcm->rts_threshold == BCM43xx_MAX_RTS_THRESHOLD);
data->rts.value = bcm->rts_threshold;
data->rts.fixed = 0;
data->rts.disabled = (bcm->rts_threshold == BCM43xx_MAX_RTS_THRESHOLD);
-
bcm43xx_unlock(bcm, flags
);
+
mutex_unlock(&bcm->mutex
);
return 0;
}
return 0;
}
@@
-395,7
+394,8
@@
static int bcm43xx_wx_set_frag(struct net_device *net_dev,
unsigned long flags;
int err = -EINVAL;
unsigned long flags;
int err = -EINVAL;
- bcm43xx_lock(bcm, flags);
+ mutex_lock(&bcm->mutex);
+ spin_lock_irqsave(&bcm->irq_lock, flags);
if (data->frag.disabled) {
bcm->ieee->fts = MAX_FRAG_THRESHOLD;
err = 0;
if (data->frag.disabled) {
bcm->ieee->fts = MAX_FRAG_THRESHOLD;
err = 0;
@@
-406,7
+406,8
@@
static int bcm43xx_wx_set_frag(struct net_device *net_dev,
err = 0;
}
}
err = 0;
}
}
- bcm43xx_unlock(bcm, flags);
+ spin_unlock_irqrestore(&bcm->irq_lock, flags);
+ mutex_unlock(&bcm->mutex);
return err;
}
return err;
}
@@
-417,13
+418,12
@@
static int bcm43xx_wx_get_frag(struct net_device *net_dev,
char *extra)
{
struct bcm43xx_private *bcm = bcm43xx_priv(net_dev);
char *extra)
{
struct bcm43xx_private *bcm = bcm43xx_priv(net_dev);
- unsigned long flags;
-
bcm43xx_lock(bcm, flags
);
+
mutex_lock(&bcm->mutex
);
data->frag.value = bcm->ieee->fts;
data->frag.fixed = 0;
data->frag.disabled = (bcm->ieee->fts == MAX_FRAG_THRESHOLD);
data->frag.value = bcm->ieee->fts;
data->frag.fixed = 0;
data->frag.disabled = (bcm->ieee->fts == MAX_FRAG_THRESHOLD);
-
bcm43xx_unlock(bcm, flags
);
+
mutex_unlock(&bcm->mutex
);
return 0;
}
return 0;
}
@@
-445,8
+445,9
@@
static int bcm43xx_wx_set_xmitpower(struct net_device *net_dev,
return -EOPNOTSUPP;
}
return -EOPNOTSUPP;
}
- bcm43xx_lock_mmio(bcm, flags);
- if (!bcm->initialized)
+ mutex_lock(&bcm->mutex);
+ spin_lock_irqsave(&bcm->irq_lock, flags);
+ if (bcm43xx_status(bcm) != BCM43xx_STAT_INITIALIZED)
goto out_unlock;
radio = bcm43xx_current_radio(bcm);
phy = bcm43xx_current_phy(bcm);
goto out_unlock;
radio = bcm43xx_current_radio(bcm);
phy = bcm43xx_current_phy(bcm);
@@
-469,7
+470,8
@@
static int bcm43xx_wx_set_xmitpower(struct net_device *net_dev,
err = 0;
out_unlock:
err = 0;
out_unlock:
- bcm43xx_unlock_mmio(bcm, flags);
+ spin_unlock_irqrestore(&bcm->irq_lock, flags);
+ mutex_unlock(&bcm->mutex);
return err;
}
return err;
}
@@
-481,11
+483,10
@@
static int bcm43xx_wx_get_xmitpower(struct net_device *net_dev,
{
struct bcm43xx_private *bcm = bcm43xx_priv(net_dev);
struct bcm43xx_radioinfo *radio;
{
struct bcm43xx_private *bcm = bcm43xx_priv(net_dev);
struct bcm43xx_radioinfo *radio;
- unsigned long flags;
int err = -ENODEV;
int err = -ENODEV;
-
bcm43xx_lock(bcm, flags
);
- if (
!bcm->initialized
)
+
mutex_lock(&bcm->mutex
);
+ if (
bcm43xx_status(bcm) != BCM43xx_STAT_INITIALIZED
)
goto out_unlock;
radio = bcm43xx_current_radio(bcm);
/* desired dBm value is in Q5.2 */
goto out_unlock;
radio = bcm43xx_current_radio(bcm);
/* desired dBm value is in Q5.2 */
@@
-496,7
+497,7
@@
static int bcm43xx_wx_get_xmitpower(struct net_device *net_dev,
err = 0;
out_unlock:
err = 0;
out_unlock:
-
bcm43xx_unlock(bcm, flags
);
+
mutex_unlock(&bcm->mutex
);
return err;
}
return err;
}
@@
-583,8
+584,9
@@
static int bcm43xx_wx_set_interfmode(struct net_device *net_dev,
return -EINVAL;
}
return -EINVAL;
}
- bcm43xx_lock_mmio(bcm, flags);
- if (bcm->initialized) {
+ mutex_lock(&bcm->mutex);
+ spin_lock_irqsave(&bcm->irq_lock, flags);
+ if (bcm43xx_status(bcm) == BCM43xx_STAT_INITIALIZED) {
err = bcm43xx_radio_set_interference_mitigation(bcm, mode);
if (err) {
printk(KERN_ERR PFX "Interference Mitigation not "
err = bcm43xx_radio_set_interference_mitigation(bcm, mode);
if (err) {
printk(KERN_ERR PFX "Interference Mitigation not "
@@
-598,7
+600,8
@@
static int bcm43xx_wx_set_interfmode(struct net_device *net_dev,
} else
bcm43xx_current_radio(bcm)->interfmode = mode;
}
} else
bcm43xx_current_radio(bcm)->interfmode = mode;
}
- bcm43xx_unlock_mmio(bcm, flags);
+ spin_unlock_irqrestore(&bcm->irq_lock, flags);
+ mutex_unlock(&bcm->mutex);
return err;
}
return err;
}
@@
-609,12
+612,11
@@
static int bcm43xx_wx_get_interfmode(struct net_device *net_dev,
char *extra)
{
struct bcm43xx_private *bcm = bcm43xx_priv(net_dev);
char *extra)
{
struct bcm43xx_private *bcm = bcm43xx_priv(net_dev);
- unsigned long flags;
int mode;
int mode;
-
bcm43xx_lock(bcm, flags
);
+
mutex_lock(&bcm->mutex
);
mode = bcm43xx_current_radio(bcm)->interfmode;
mode = bcm43xx_current_radio(bcm)->interfmode;
-
bcm43xx_unlock(bcm, flags
);
+
mutex_unlock(&bcm->mutex
);
switch (mode) {
case BCM43xx_RADIO_INTERFMODE_NONE:
switch (mode) {
case BCM43xx_RADIO_INTERFMODE_NONE:
@@
-644,9
+646,11
@@
static int bcm43xx_wx_set_shortpreamble(struct net_device *net_dev,
int on;
on = *((int *)extra);
int on;
on = *((int *)extra);
- bcm43xx_lock(bcm, flags);
+ mutex_lock(&bcm->mutex);
+ spin_lock_irqsave(&bcm->irq_lock, flags);
bcm->short_preamble = !!on;
bcm->short_preamble = !!on;
- bcm43xx_unlock(bcm, flags);
+ spin_unlock_irqrestore(&bcm->irq_lock, flags);
+ mutex_unlock(&bcm->mutex);
return 0;
}
return 0;
}
@@
-657,12
+661,11
@@
static int bcm43xx_wx_get_shortpreamble(struct net_device *net_dev,
char *extra)
{
struct bcm43xx_private *bcm = bcm43xx_priv(net_dev);
char *extra)
{
struct bcm43xx_private *bcm = bcm43xx_priv(net_dev);
- unsigned long flags;
int on;
int on;
-
bcm43xx_lock(bcm, flags
);
+
mutex_lock(&bcm->mutex
);
on = bcm->short_preamble;
on = bcm->short_preamble;
-
bcm43xx_unlock(bcm, flags
);
+
mutex_unlock(&bcm->mutex
);
if (on)
strncpy(extra, "1 (Short Preamble enabled)", MAX_WX_STRING);
if (on)
strncpy(extra, "1 (Short Preamble enabled)", MAX_WX_STRING);
@@
-684,11
+687,13
@@
static int bcm43xx_wx_set_swencryption(struct net_device *net_dev,
on = *((int *)extra);
on = *((int *)extra);
- bcm43xx_lock(bcm, flags);
+ mutex_lock(&bcm->mutex);
+ spin_lock_irqsave(&bcm->irq_lock, flags);
bcm->ieee->host_encrypt = !!on;
bcm->ieee->host_decrypt = !!on;
bcm->ieee->host_build_iv = !on;
bcm->ieee->host_encrypt = !!on;
bcm->ieee->host_decrypt = !!on;
bcm->ieee->host_build_iv = !on;
- bcm43xx_unlock(bcm, flags);
+ spin_unlock_irqrestore(&bcm->irq_lock, flags);
+ mutex_unlock(&bcm->mutex);
return 0;
}
return 0;
}
@@
-699,12
+704,11
@@
static int bcm43xx_wx_get_swencryption(struct net_device *net_dev,
char *extra)
{
struct bcm43xx_private *bcm = bcm43xx_priv(net_dev);
char *extra)
{
struct bcm43xx_private *bcm = bcm43xx_priv(net_dev);
- unsigned long flags;
int on;
int on;
-
bcm43xx_lock(bcm, flags
);
+
mutex_lock(&bcm->mutex
);
on = bcm->ieee->host_encrypt;
on = bcm->ieee->host_encrypt;
-
bcm43xx_unlock(bcm, flags
);
+
mutex_unlock(&bcm->mutex
);
if (on)
strncpy(extra, "1 (SW encryption enabled) ", MAX_WX_STRING);
if (on)
strncpy(extra, "1 (SW encryption enabled) ", MAX_WX_STRING);
@@
-767,11
+771,13
@@
static int bcm43xx_wx_sprom_read(struct net_device *net_dev,
if (!sprom)
goto out;
if (!sprom)
goto out;
- bcm43xx_lock_mmio(bcm, flags);
+ mutex_lock(&bcm->mutex);
+ spin_lock_irqsave(&bcm->irq_lock, flags);
err = -ENODEV;
err = -ENODEV;
- if (bcm
->initialized
)
+ if (bcm
43xx_status(bcm) == BCM43xx_STAT_INITIALIZED
)
err = bcm43xx_sprom_read(bcm, sprom);
err = bcm43xx_sprom_read(bcm, sprom);
- bcm43xx_unlock_mmio(bcm, flags);
+ spin_unlock_irqrestore(&bcm->irq_lock, flags);
+ mutex_unlock(&bcm->mutex);
if (!err)
data->data.length = sprom2hex(sprom, extra);
kfree(sprom);
if (!err)
data->data.length = sprom2hex(sprom, extra);
kfree(sprom);
@@
-812,11
+818,15
@@
static int bcm43xx_wx_sprom_write(struct net_device *net_dev,
if (err)
goto out_kfree;
if (err)
goto out_kfree;
- bcm43xx_lock_mmio(bcm, flags);
+ mutex_lock(&bcm->mutex);
+ spin_lock_irqsave(&bcm->irq_lock, flags);
+ spin_lock(&bcm->leds_lock);
err = -ENODEV;
err = -ENODEV;
- if (bcm
->initialized
)
+ if (bcm
43xx_status(bcm) == BCM43xx_STAT_INITIALIZED
)
err = bcm43xx_sprom_write(bcm, sprom);
err = bcm43xx_sprom_write(bcm, sprom);
- bcm43xx_unlock_mmio(bcm, flags);
+ spin_unlock(&bcm->leds_lock);
+ spin_unlock_irqrestore(&bcm->irq_lock, flags);
+ mutex_unlock(&bcm->mutex);
out_kfree:
kfree(sprom);
out:
out_kfree:
kfree(sprom);
out: