diff options
| author | Lennert Buytenhek <buytenh@wantstofly.org> | 2009-07-17 07:19:37 +0200 | 
|---|---|---|
| committer | John W. Linville <linville@tuxdriver.com> | 2009-08-20 11:38:09 -0400 | 
| commit | ee03a93241eb954d669fb795b4e5c0eec92eef22 (patch) | |
| tree | 14ef37a6f10b438a11d84a4452132a554a5be567 /drivers/net/wireless | |
| parent | d3cea0b85a31a98630c6fcf7373d486db9612a10 (diff) | |
mwl8k: get rid of mwl8k_config() workqueue use
Signed-off-by: Lennert Buytenhek <buytenh@marvell.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net/wireless')
| -rw-r--r-- | drivers/net/wireless/mwl8k.c | 72 | 
1 files changed, 20 insertions, 52 deletions
| diff --git a/drivers/net/wireless/mwl8k.c b/drivers/net/wireless/mwl8k.c index b88b1e001f07..77e280a00a5d 100644 --- a/drivers/net/wireless/mwl8k.c +++ b/drivers/net/wireless/mwl8k.c @@ -2622,77 +2622,45 @@ static void mwl8k_remove_interface(struct ieee80211_hw *hw,  	priv->vif = NULL;  } -struct mwl8k_config_worker { -	struct mwl8k_work_struct header; -	u32 changed; -}; - -static int mwl8k_config_wt(struct work_struct *wt) +static int mwl8k_config(struct ieee80211_hw *hw, u32 changed)  { -	struct mwl8k_config_worker *worker = -		(struct mwl8k_config_worker *)wt; -	struct ieee80211_hw *hw = worker->header.hw;  	struct ieee80211_conf *conf = &hw->conf;  	struct mwl8k_priv *priv = hw->priv; -	int rc = 0; +	int rc;  	if (conf->flags & IEEE80211_CONF_IDLE) {  		mwl8k_cmd_802_11_radio_disable(hw);  		priv->current_channel = NULL; -		goto mwl8k_config_exit; +		return 0;  	} -	if (mwl8k_cmd_802_11_radio_enable(hw)) { -		rc = -EINVAL; -		goto mwl8k_config_exit; -	} +	rc = mwl8k_fw_lock(hw); +	if (rc) +		return rc; -	priv->current_channel = conf->channel; +	rc = mwl8k_cmd_802_11_radio_enable(hw); +	if (rc) +		goto out; -	if (mwl8k_cmd_set_rf_channel(hw, conf->channel)) { -		rc = -EINVAL; -		goto mwl8k_config_exit; -	} +	rc = mwl8k_cmd_set_rf_channel(hw, conf->channel); +	if (rc) +		goto out; + +	priv->current_channel = conf->channel;  	if (conf->power_level > 18)  		conf->power_level = 18; -	if (mwl8k_cmd_802_11_rf_tx_power(hw, conf->power_level)) { -		rc = -EINVAL; -		goto mwl8k_config_exit; -	} +	rc = mwl8k_cmd_802_11_rf_tx_power(hw, conf->power_level); +	if (rc) +		goto out;  	if (mwl8k_cmd_mimo_config(hw, 0x7, 0x7))  		rc = -EINVAL; -mwl8k_config_exit: -	return rc; -} - -static int mwl8k_config(struct ieee80211_hw *hw, u32 changed) -{ -	int rc = 0; -	struct mwl8k_config_worker *worker; - -	worker = kzalloc(sizeof(*worker), GFP_KERNEL); -	if (worker == NULL) -		return -ENOMEM; - -	worker->changed = changed; - -	rc = mwl8k_queue_work(hw, &worker->header, mwl8k_config_wt); -	if (rc == -ETIMEDOUT) { -		printk(KERN_ERR "%s() timed out.\n", __func__); -		rc = -EINVAL; -	} - -	kfree(worker); +out: +	mwl8k_fw_unlock(hw); -	/* -	 * mac80211 will crash on anything other than -EINVAL on -	 * error. Looks like wireless extensions which calls mac80211 -	 * may be the actual culprit... -	 */ -	return rc ? -EINVAL : 0; +	return rc;  }  struct mwl8k_bss_info_changed_worker { | 
