|
@@ -194,6 +194,7 @@ static struct ipw2100_fw ipw2100_firmware;
|
|
|
#endif
|
|
|
|
|
|
#include <linux/moduleparam.h>
|
|
|
+#include <linux/mutex.h>
|
|
|
module_param(debug, int, 0444);
|
|
|
module_param(mode, int, 0444);
|
|
|
module_param(channel, int, 0444);
|
|
@@ -1418,7 +1419,7 @@ static int ipw2100_enable_adapter(struct ipw2100_priv *priv)
|
|
|
if (priv->status & STATUS_ENABLED)
|
|
|
return 0;
|
|
|
|
|
|
- down(&priv->adapter_sem);
|
|
|
+ mutex_lock(&priv->adapter_mutex);
|
|
|
|
|
|
if (rf_kill_active(priv)) {
|
|
|
IPW_DEBUG_HC("Command aborted due to RF kill active.\n");
|
|
@@ -1444,7 +1445,7 @@ static int ipw2100_enable_adapter(struct ipw2100_priv *priv)
|
|
|
}
|
|
|
|
|
|
fail_up:
|
|
|
- up(&priv->adapter_sem);
|
|
|
+ mutex_unlock(&priv->adapter_mutex);
|
|
|
return err;
|
|
|
}
|
|
|
|
|
@@ -1576,7 +1577,7 @@ static int ipw2100_disable_adapter(struct ipw2100_priv *priv)
|
|
|
cancel_delayed_work(&priv->hang_check);
|
|
|
}
|
|
|
|
|
|
- down(&priv->adapter_sem);
|
|
|
+ mutex_lock(&priv->adapter_mutex);
|
|
|
|
|
|
err = ipw2100_hw_send_command(priv, &cmd);
|
|
|
if (err) {
|
|
@@ -1595,7 +1596,7 @@ static int ipw2100_disable_adapter(struct ipw2100_priv *priv)
|
|
|
IPW_DEBUG_INFO("TODO: implement scan state machine\n");
|
|
|
|
|
|
fail_up:
|
|
|
- up(&priv->adapter_sem);
|
|
|
+ mutex_unlock(&priv->adapter_mutex);
|
|
|
return err;
|
|
|
}
|
|
|
|
|
@@ -1888,7 +1889,7 @@ static void ipw2100_reset_adapter(struct ipw2100_priv *priv)
|
|
|
priv->status |= STATUS_RESET_PENDING;
|
|
|
spin_unlock_irqrestore(&priv->low_lock, flags);
|
|
|
|
|
|
- down(&priv->action_sem);
|
|
|
+ mutex_lock(&priv->action_mutex);
|
|
|
/* stop timed checks so that they don't interfere with reset */
|
|
|
priv->stop_hang_check = 1;
|
|
|
cancel_delayed_work(&priv->hang_check);
|
|
@@ -1898,7 +1899,7 @@ static void ipw2100_reset_adapter(struct ipw2100_priv *priv)
|
|
|
wireless_send_event(priv->net_dev, SIOCGIWAP, &wrqu, NULL);
|
|
|
|
|
|
ipw2100_up(priv, 0);
|
|
|
- up(&priv->action_sem);
|
|
|
+ mutex_unlock(&priv->action_mutex);
|
|
|
|
|
|
}
|
|
|
|
|
@@ -4212,7 +4213,7 @@ static int ipw_radio_kill_sw(struct ipw2100_priv *priv, int disable_radio)
|
|
|
IPW_DEBUG_RF_KILL("Manual SW RF Kill set to: RADIO %s\n",
|
|
|
disable_radio ? "OFF" : "ON");
|
|
|
|
|
|
- down(&priv->action_sem);
|
|
|
+ mutex_lock(&priv->action_mutex);
|
|
|
|
|
|
if (disable_radio) {
|
|
|
priv->status |= STATUS_RF_KILL_SW;
|
|
@@ -4230,7 +4231,7 @@ static int ipw_radio_kill_sw(struct ipw2100_priv *priv, int disable_radio)
|
|
|
schedule_reset(priv);
|
|
|
}
|
|
|
|
|
|
- up(&priv->action_sem);
|
|
|
+ mutex_unlock(&priv->action_mutex);
|
|
|
return 1;
|
|
|
}
|
|
|
|
|
@@ -5534,7 +5535,7 @@ static void shim__set_security(struct net_device *dev,
|
|
|
struct ipw2100_priv *priv = ieee80211_priv(dev);
|
|
|
int i, force_update = 0;
|
|
|
|
|
|
- down(&priv->action_sem);
|
|
|
+ mutex_lock(&priv->action_mutex);
|
|
|
if (!(priv->status & STATUS_INITIALIZED))
|
|
|
goto done;
|
|
|
|
|
@@ -5607,7 +5608,7 @@ static void shim__set_security(struct net_device *dev,
|
|
|
if (!(priv->status & (STATUS_ASSOCIATED | STATUS_ASSOCIATING)))
|
|
|
ipw2100_configure_security(priv, 0);
|
|
|
done:
|
|
|
- up(&priv->action_sem);
|
|
|
+ mutex_unlock(&priv->action_mutex);
|
|
|
}
|
|
|
|
|
|
static int ipw2100_adapter_setup(struct ipw2100_priv *priv)
|
|
@@ -5731,7 +5732,7 @@ static int ipw2100_set_address(struct net_device *dev, void *p)
|
|
|
if (!is_valid_ether_addr(addr->sa_data))
|
|
|
return -EADDRNOTAVAIL;
|
|
|
|
|
|
- down(&priv->action_sem);
|
|
|
+ mutex_lock(&priv->action_mutex);
|
|
|
|
|
|
priv->config |= CFG_CUSTOM_MAC;
|
|
|
memcpy(priv->mac_addr, addr->sa_data, ETH_ALEN);
|
|
@@ -5741,12 +5742,12 @@ static int ipw2100_set_address(struct net_device *dev, void *p)
|
|
|
goto done;
|
|
|
|
|
|
priv->reset_backoff = 0;
|
|
|
- up(&priv->action_sem);
|
|
|
+ mutex_unlock(&priv->action_mutex);
|
|
|
ipw2100_reset_adapter(priv);
|
|
|
return 0;
|
|
|
|
|
|
done:
|
|
|
- up(&priv->action_sem);
|
|
|
+ mutex_unlock(&priv->action_mutex);
|
|
|
return err;
|
|
|
}
|
|
|
|
|
@@ -6089,8 +6090,8 @@ static struct net_device *ipw2100_alloc_device(struct pci_dev *pci_dev,
|
|
|
strcpy(priv->nick, "ipw2100");
|
|
|
|
|
|
spin_lock_init(&priv->low_lock);
|
|
|
- sema_init(&priv->action_sem, 1);
|
|
|
- sema_init(&priv->adapter_sem, 1);
|
|
|
+ mutex_init(&priv->action_mutex);
|
|
|
+ mutex_init(&priv->adapter_mutex);
|
|
|
|
|
|
init_waitqueue_head(&priv->wait_command_queue);
|
|
|
|
|
@@ -6255,7 +6256,7 @@ static int ipw2100_pci_init_one(struct pci_dev *pci_dev,
|
|
|
* member to call a function that then just turns and calls ipw2100_up.
|
|
|
* net_dev->init is called after name allocation but before the
|
|
|
* notifier chain is called */
|
|
|
- down(&priv->action_sem);
|
|
|
+ mutex_lock(&priv->action_mutex);
|
|
|
err = register_netdev(dev);
|
|
|
if (err) {
|
|
|
printk(KERN_WARNING DRV_NAME
|
|
@@ -6291,12 +6292,12 @@ static int ipw2100_pci_init_one(struct pci_dev *pci_dev,
|
|
|
|
|
|
priv->status |= STATUS_INITIALIZED;
|
|
|
|
|
|
- up(&priv->action_sem);
|
|
|
+ mutex_unlock(&priv->action_mutex);
|
|
|
|
|
|
return 0;
|
|
|
|
|
|
fail_unlock:
|
|
|
- up(&priv->action_sem);
|
|
|
+ mutex_unlock(&priv->action_mutex);
|
|
|
|
|
|
fail:
|
|
|
if (dev) {
|
|
@@ -6336,7 +6337,7 @@ static void __devexit ipw2100_pci_remove_one(struct pci_dev *pci_dev)
|
|
|
struct net_device *dev;
|
|
|
|
|
|
if (priv) {
|
|
|
- down(&priv->action_sem);
|
|
|
+ mutex_lock(&priv->action_mutex);
|
|
|
|
|
|
priv->status &= ~STATUS_INITIALIZED;
|
|
|
|
|
@@ -6351,9 +6352,9 @@ static void __devexit ipw2100_pci_remove_one(struct pci_dev *pci_dev)
|
|
|
/* Take down the hardware */
|
|
|
ipw2100_down(priv);
|
|
|
|
|
|
- /* Release the semaphore so that the network subsystem can
|
|
|
+ /* Release the mutex so that the network subsystem can
|
|
|
* complete any needed calls into the driver... */
|
|
|
- up(&priv->action_sem);
|
|
|
+ mutex_unlock(&priv->action_mutex);
|
|
|
|
|
|
/* Unregister the device first - this results in close()
|
|
|
* being called if the device is open. If we free storage
|
|
@@ -6392,7 +6393,7 @@ static int ipw2100_suspend(struct pci_dev *pci_dev, pm_message_t state)
|
|
|
|
|
|
IPW_DEBUG_INFO("%s: Going into suspend...\n", dev->name);
|
|
|
|
|
|
- down(&priv->action_sem);
|
|
|
+ mutex_lock(&priv->action_mutex);
|
|
|
if (priv->status & STATUS_INITIALIZED) {
|
|
|
/* Take down the device; powers it off, etc. */
|
|
|
ipw2100_down(priv);
|
|
@@ -6405,7 +6406,7 @@ static int ipw2100_suspend(struct pci_dev *pci_dev, pm_message_t state)
|
|
|
pci_disable_device(pci_dev);
|
|
|
pci_set_power_state(pci_dev, PCI_D3hot);
|
|
|
|
|
|
- up(&priv->action_sem);
|
|
|
+ mutex_unlock(&priv->action_mutex);
|
|
|
|
|
|
return 0;
|
|
|
}
|
|
@@ -6419,7 +6420,7 @@ static int ipw2100_resume(struct pci_dev *pci_dev)
|
|
|
if (IPW2100_PM_DISABLED)
|
|
|
return 0;
|
|
|
|
|
|
- down(&priv->action_sem);
|
|
|
+ mutex_lock(&priv->action_mutex);
|
|
|
|
|
|
IPW_DEBUG_INFO("%s: Coming out of suspend...\n", dev->name);
|
|
|
|
|
@@ -6445,7 +6446,7 @@ static int ipw2100_resume(struct pci_dev *pci_dev)
|
|
|
if (!(priv->status & STATUS_RF_KILL_SW))
|
|
|
ipw2100_up(priv, 0);
|
|
|
|
|
|
- up(&priv->action_sem);
|
|
|
+ mutex_unlock(&priv->action_mutex);
|
|
|
|
|
|
return 0;
|
|
|
}
|
|
@@ -6609,7 +6610,7 @@ static int ipw2100_wx_set_freq(struct net_device *dev,
|
|
|
if (priv->ieee->iw_mode == IW_MODE_INFRA)
|
|
|
return -EOPNOTSUPP;
|
|
|
|
|
|
- down(&priv->action_sem);
|
|
|
+ mutex_lock(&priv->action_mutex);
|
|
|
if (!(priv->status & STATUS_INITIALIZED)) {
|
|
|
err = -EIO;
|
|
|
goto done;
|
|
@@ -6640,7 +6641,7 @@ static int ipw2100_wx_set_freq(struct net_device *dev,
|
|
|
}
|
|
|
|
|
|
done:
|
|
|
- up(&priv->action_sem);
|
|
|
+ mutex_unlock(&priv->action_mutex);
|
|
|
return err;
|
|
|
}
|
|
|
|
|
@@ -6681,7 +6682,7 @@ static int ipw2100_wx_set_mode(struct net_device *dev,
|
|
|
if (wrqu->mode == priv->ieee->iw_mode)
|
|
|
return 0;
|
|
|
|
|
|
- down(&priv->action_sem);
|
|
|
+ mutex_lock(&priv->action_mutex);
|
|
|
if (!(priv->status & STATUS_INITIALIZED)) {
|
|
|
err = -EIO;
|
|
|
goto done;
|
|
@@ -6704,7 +6705,7 @@ static int ipw2100_wx_set_mode(struct net_device *dev,
|
|
|
}
|
|
|
|
|
|
done:
|
|
|
- up(&priv->action_sem);
|
|
|
+ mutex_unlock(&priv->action_mutex);
|
|
|
return err;
|
|
|
}
|
|
|
|
|
@@ -6886,7 +6887,7 @@ static int ipw2100_wx_set_wap(struct net_device *dev,
|
|
|
if (wrqu->ap_addr.sa_family != ARPHRD_ETHER)
|
|
|
return -EINVAL;
|
|
|
|
|
|
- down(&priv->action_sem);
|
|
|
+ mutex_lock(&priv->action_mutex);
|
|
|
if (!(priv->status & STATUS_INITIALIZED)) {
|
|
|
err = -EIO;
|
|
|
goto done;
|
|
@@ -6915,7 +6916,7 @@ static int ipw2100_wx_set_wap(struct net_device *dev,
|
|
|
wrqu->ap_addr.sa_data[5] & 0xff);
|
|
|
|
|
|
done:
|
|
|
- up(&priv->action_sem);
|
|
|
+ mutex_unlock(&priv->action_mutex);
|
|
|
return err;
|
|
|
}
|
|
|
|
|
@@ -6951,7 +6952,7 @@ static int ipw2100_wx_set_essid(struct net_device *dev,
|
|
|
int length = 0;
|
|
|
int err = 0;
|
|
|
|
|
|
- down(&priv->action_sem);
|
|
|
+ mutex_lock(&priv->action_mutex);
|
|
|
if (!(priv->status & STATUS_INITIALIZED)) {
|
|
|
err = -EIO;
|
|
|
goto done;
|
|
@@ -6988,7 +6989,7 @@ static int ipw2100_wx_set_essid(struct net_device *dev,
|
|
|
err = ipw2100_set_essid(priv, essid, length, 0);
|
|
|
|
|
|
done:
|
|
|
- up(&priv->action_sem);
|
|
|
+ mutex_unlock(&priv->action_mutex);
|
|
|
return err;
|
|
|
}
|
|
|
|
|
@@ -7069,7 +7070,7 @@ static int ipw2100_wx_set_rate(struct net_device *dev,
|
|
|
u32 rate;
|
|
|
int err = 0;
|
|
|
|
|
|
- down(&priv->action_sem);
|
|
|
+ mutex_lock(&priv->action_mutex);
|
|
|
if (!(priv->status & STATUS_INITIALIZED)) {
|
|
|
err = -EIO;
|
|
|
goto done;
|
|
@@ -7096,7 +7097,7 @@ static int ipw2100_wx_set_rate(struct net_device *dev,
|
|
|
|
|
|
IPW_DEBUG_WX("SET Rate -> %04X \n", rate);
|
|
|
done:
|
|
|
- up(&priv->action_sem);
|
|
|
+ mutex_unlock(&priv->action_mutex);
|
|
|
return err;
|
|
|
}
|
|
|
|
|
@@ -7116,7 +7117,7 @@ static int ipw2100_wx_get_rate(struct net_device *dev,
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
- down(&priv->action_sem);
|
|
|
+ mutex_lock(&priv->action_mutex);
|
|
|
if (!(priv->status & STATUS_INITIALIZED)) {
|
|
|
err = -EIO;
|
|
|
goto done;
|
|
@@ -7148,7 +7149,7 @@ static int ipw2100_wx_get_rate(struct net_device *dev,
|
|
|
IPW_DEBUG_WX("GET Rate -> %d \n", wrqu->bitrate.value);
|
|
|
|
|
|
done:
|
|
|
- up(&priv->action_sem);
|
|
|
+ mutex_unlock(&priv->action_mutex);
|
|
|
return err;
|
|
|
}
|
|
|
|
|
@@ -7163,7 +7164,7 @@ static int ipw2100_wx_set_rts(struct net_device *dev,
|
|
|
if (wrqu->rts.fixed == 0)
|
|
|
return -EINVAL;
|
|
|
|
|
|
- down(&priv->action_sem);
|
|
|
+ mutex_lock(&priv->action_mutex);
|
|
|
if (!(priv->status & STATUS_INITIALIZED)) {
|
|
|
err = -EIO;
|
|
|
goto done;
|
|
@@ -7183,7 +7184,7 @@ static int ipw2100_wx_set_rts(struct net_device *dev,
|
|
|
|
|
|
IPW_DEBUG_WX("SET RTS Threshold -> 0x%08X \n", value);
|
|
|
done:
|
|
|
- up(&priv->action_sem);
|
|
|
+ mutex_unlock(&priv->action_mutex);
|
|
|
return err;
|
|
|
}
|
|
|
|
|
@@ -7234,7 +7235,7 @@ static int ipw2100_wx_set_txpow(struct net_device *dev,
|
|
|
value = wrqu->txpower.value;
|
|
|
}
|
|
|
|
|
|
- down(&priv->action_sem);
|
|
|
+ mutex_lock(&priv->action_mutex);
|
|
|
if (!(priv->status & STATUS_INITIALIZED)) {
|
|
|
err = -EIO;
|
|
|
goto done;
|
|
@@ -7245,7 +7246,7 @@ static int ipw2100_wx_set_txpow(struct net_device *dev,
|
|
|
IPW_DEBUG_WX("SET TX Power -> %d \n", value);
|
|
|
|
|
|
done:
|
|
|
- up(&priv->action_sem);
|
|
|
+ mutex_unlock(&priv->action_mutex);
|
|
|
return err;
|
|
|
}
|
|
|
|
|
@@ -7337,7 +7338,7 @@ static int ipw2100_wx_set_retry(struct net_device *dev,
|
|
|
if (!(wrqu->retry.flags & IW_RETRY_LIMIT))
|
|
|
return 0;
|
|
|
|
|
|
- down(&priv->action_sem);
|
|
|
+ mutex_lock(&priv->action_mutex);
|
|
|
if (!(priv->status & STATUS_INITIALIZED)) {
|
|
|
err = -EIO;
|
|
|
goto done;
|
|
@@ -7364,7 +7365,7 @@ static int ipw2100_wx_set_retry(struct net_device *dev,
|
|
|
IPW_DEBUG_WX("SET Both Retry Limits -> %d \n", wrqu->retry.value);
|
|
|
|
|
|
done:
|
|
|
- up(&priv->action_sem);
|
|
|
+ mutex_unlock(&priv->action_mutex);
|
|
|
return err;
|
|
|
}
|
|
|
|
|
@@ -7407,7 +7408,7 @@ static int ipw2100_wx_set_scan(struct net_device *dev,
|
|
|
struct ipw2100_priv *priv = ieee80211_priv(dev);
|
|
|
int err = 0;
|
|
|
|
|
|
- down(&priv->action_sem);
|
|
|
+ mutex_lock(&priv->action_mutex);
|
|
|
if (!(priv->status & STATUS_INITIALIZED)) {
|
|
|
err = -EIO;
|
|
|
goto done;
|
|
@@ -7422,7 +7423,7 @@ static int ipw2100_wx_set_scan(struct net_device *dev,
|
|
|
}
|
|
|
|
|
|
done:
|
|
|
- up(&priv->action_sem);
|
|
|
+ mutex_unlock(&priv->action_mutex);
|
|
|
return err;
|
|
|
}
|
|
|
|
|
@@ -7472,7 +7473,7 @@ static int ipw2100_wx_set_power(struct net_device *dev,
|
|
|
struct ipw2100_priv *priv = ieee80211_priv(dev);
|
|
|
int err = 0;
|
|
|
|
|
|
- down(&priv->action_sem);
|
|
|
+ mutex_lock(&priv->action_mutex);
|
|
|
if (!(priv->status & STATUS_INITIALIZED)) {
|
|
|
err = -EIO;
|
|
|
goto done;
|
|
@@ -7505,7 +7506,7 @@ static int ipw2100_wx_set_power(struct net_device *dev,
|
|
|
IPW_DEBUG_WX("SET Power Management Mode -> 0x%02X\n", priv->power_mode);
|
|
|
|
|
|
done:
|
|
|
- up(&priv->action_sem);
|
|
|
+ mutex_unlock(&priv->action_mutex);
|
|
|
return err;
|
|
|
|
|
|
}
|
|
@@ -7809,7 +7810,7 @@ static int ipw2100_wx_set_promisc(struct net_device *dev,
|
|
|
int enable = (parms[0] > 0);
|
|
|
int err = 0;
|
|
|
|
|
|
- down(&priv->action_sem);
|
|
|
+ mutex_lock(&priv->action_mutex);
|
|
|
if (!(priv->status & STATUS_INITIALIZED)) {
|
|
|
err = -EIO;
|
|
|
goto done;
|
|
@@ -7827,7 +7828,7 @@ static int ipw2100_wx_set_promisc(struct net_device *dev,
|
|
|
err = ipw2100_switch_mode(priv, priv->last_mode);
|
|
|
}
|
|
|
done:
|
|
|
- up(&priv->action_sem);
|
|
|
+ mutex_unlock(&priv->action_mutex);
|
|
|
return err;
|
|
|
}
|
|
|
|
|
@@ -7850,7 +7851,7 @@ static int ipw2100_wx_set_powermode(struct net_device *dev,
|
|
|
struct ipw2100_priv *priv = ieee80211_priv(dev);
|
|
|
int err = 0, mode = *(int *)extra;
|
|
|
|
|
|
- down(&priv->action_sem);
|
|
|
+ mutex_lock(&priv->action_mutex);
|
|
|
if (!(priv->status & STATUS_INITIALIZED)) {
|
|
|
err = -EIO;
|
|
|
goto done;
|
|
@@ -7862,7 +7863,7 @@ static int ipw2100_wx_set_powermode(struct net_device *dev,
|
|
|
if (priv->power_mode != mode)
|
|
|
err = ipw2100_set_power_mode(priv, mode);
|
|
|
done:
|
|
|
- up(&priv->action_sem);
|
|
|
+ mutex_unlock(&priv->action_mutex);
|
|
|
return err;
|
|
|
}
|
|
|
|
|
@@ -7914,7 +7915,7 @@ static int ipw2100_wx_set_preamble(struct net_device *dev,
|
|
|
struct ipw2100_priv *priv = ieee80211_priv(dev);
|
|
|
int err, mode = *(int *)extra;
|
|
|
|
|
|
- down(&priv->action_sem);
|
|
|
+ mutex_lock(&priv->action_mutex);
|
|
|
if (!(priv->status & STATUS_INITIALIZED)) {
|
|
|
err = -EIO;
|
|
|
goto done;
|
|
@@ -7932,7 +7933,7 @@ static int ipw2100_wx_set_preamble(struct net_device *dev,
|
|
|
err = ipw2100_system_config(priv, 0);
|
|
|
|
|
|
done:
|
|
|
- up(&priv->action_sem);
|
|
|
+ mutex_unlock(&priv->action_mutex);
|
|
|
return err;
|
|
|
}
|
|
|
|
|
@@ -7962,7 +7963,7 @@ static int ipw2100_wx_set_crc_check(struct net_device *dev,
|
|
|
struct ipw2100_priv *priv = ieee80211_priv(dev);
|
|
|
int err, mode = *(int *)extra;
|
|
|
|
|
|
- down(&priv->action_sem);
|
|
|
+ mutex_lock(&priv->action_mutex);
|
|
|
if (!(priv->status & STATUS_INITIALIZED)) {
|
|
|
err = -EIO;
|
|
|
goto done;
|
|
@@ -7979,7 +7980,7 @@ static int ipw2100_wx_set_crc_check(struct net_device *dev,
|
|
|
err = 0;
|
|
|
|
|
|
done:
|
|
|
- up(&priv->action_sem);
|
|
|
+ mutex_unlock(&priv->action_mutex);
|
|
|
return err;
|
|
|
}
|
|
|
|
|
@@ -8284,11 +8285,11 @@ static void ipw2100_wx_event_work(struct ipw2100_priv *priv)
|
|
|
if (priv->status & STATUS_STOPPING)
|
|
|
return;
|
|
|
|
|
|
- down(&priv->action_sem);
|
|
|
+ mutex_lock(&priv->action_mutex);
|
|
|
|
|
|
IPW_DEBUG_WX("enter\n");
|
|
|
|
|
|
- up(&priv->action_sem);
|
|
|
+ mutex_unlock(&priv->action_mutex);
|
|
|
|
|
|
wrqu.ap_addr.sa_family = ARPHRD_ETHER;
|
|
|
|
|
@@ -8311,7 +8312,7 @@ static void ipw2100_wx_event_work(struct ipw2100_priv *priv)
|
|
|
|
|
|
if (!(priv->status & STATUS_ASSOCIATED)) {
|
|
|
IPW_DEBUG_WX("Configuring ESSID\n");
|
|
|
- down(&priv->action_sem);
|
|
|
+ mutex_lock(&priv->action_mutex);
|
|
|
/* This is a disassociation event, so kick the firmware to
|
|
|
* look for another AP */
|
|
|
if (priv->config & CFG_STATIC_ESSID)
|
|
@@ -8319,7 +8320,7 @@ static void ipw2100_wx_event_work(struct ipw2100_priv *priv)
|
|
|
0);
|
|
|
else
|
|
|
ipw2100_set_essid(priv, NULL, 0, 0);
|
|
|
- up(&priv->action_sem);
|
|
|
+ mutex_unlock(&priv->action_mutex);
|
|
|
}
|
|
|
|
|
|
wireless_send_event(priv->net_dev, SIOCGIWAP, &wrqu, NULL);
|