Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-2.6
This commit is contained in:
@@ -259,7 +259,7 @@ static struct iwl_lib_ops iwl6000_lib = {
|
|||||||
EEPROM_5000_REG_BAND_3_CHANNELS,
|
EEPROM_5000_REG_BAND_3_CHANNELS,
|
||||||
EEPROM_5000_REG_BAND_4_CHANNELS,
|
EEPROM_5000_REG_BAND_4_CHANNELS,
|
||||||
EEPROM_5000_REG_BAND_5_CHANNELS,
|
EEPROM_5000_REG_BAND_5_CHANNELS,
|
||||||
EEPROM_5000_REG_BAND_24_HT40_CHANNELS,
|
EEPROM_6000_REG_BAND_24_HT40_CHANNELS,
|
||||||
EEPROM_5000_REG_BAND_52_HT40_CHANNELS
|
EEPROM_5000_REG_BAND_52_HT40_CHANNELS
|
||||||
},
|
},
|
||||||
.verify_signature = iwlcore_eeprom_verify_signature,
|
.verify_signature = iwlcore_eeprom_verify_signature,
|
||||||
@@ -323,7 +323,7 @@ static struct iwl_lib_ops iwl6050_lib = {
|
|||||||
EEPROM_5000_REG_BAND_3_CHANNELS,
|
EEPROM_5000_REG_BAND_3_CHANNELS,
|
||||||
EEPROM_5000_REG_BAND_4_CHANNELS,
|
EEPROM_5000_REG_BAND_4_CHANNELS,
|
||||||
EEPROM_5000_REG_BAND_5_CHANNELS,
|
EEPROM_5000_REG_BAND_5_CHANNELS,
|
||||||
EEPROM_5000_REG_BAND_24_HT40_CHANNELS,
|
EEPROM_6000_REG_BAND_24_HT40_CHANNELS,
|
||||||
EEPROM_5000_REG_BAND_52_HT40_CHANNELS
|
EEPROM_5000_REG_BAND_52_HT40_CHANNELS
|
||||||
},
|
},
|
||||||
.verify_signature = iwlcore_eeprom_verify_signature,
|
.verify_signature = iwlcore_eeprom_verify_signature,
|
||||||
|
@@ -3331,6 +3331,7 @@ static void iwl_cancel_deferred_work(struct iwl_priv *priv)
|
|||||||
|
|
||||||
cancel_delayed_work_sync(&priv->init_alive_start);
|
cancel_delayed_work_sync(&priv->init_alive_start);
|
||||||
cancel_delayed_work(&priv->scan_check);
|
cancel_delayed_work(&priv->scan_check);
|
||||||
|
cancel_work_sync(&priv->start_internal_scan);
|
||||||
cancel_delayed_work(&priv->alive_start);
|
cancel_delayed_work(&priv->alive_start);
|
||||||
cancel_work_sync(&priv->beacon_update);
|
cancel_work_sync(&priv->beacon_update);
|
||||||
del_timer_sync(&priv->statistics_periodic);
|
del_timer_sync(&priv->statistics_periodic);
|
||||||
|
@@ -3358,7 +3358,6 @@ static void iwl_force_rf_reset(struct iwl_priv *priv)
|
|||||||
*/
|
*/
|
||||||
IWL_DEBUG_INFO(priv, "perform radio reset.\n");
|
IWL_DEBUG_INFO(priv, "perform radio reset.\n");
|
||||||
iwl_internal_short_hw_scan(priv);
|
iwl_internal_short_hw_scan(priv);
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@@ -506,7 +506,7 @@ void iwl_init_scan_params(struct iwl_priv *priv);
|
|||||||
int iwl_scan_cancel(struct iwl_priv *priv);
|
int iwl_scan_cancel(struct iwl_priv *priv);
|
||||||
int iwl_scan_cancel_timeout(struct iwl_priv *priv, unsigned long ms);
|
int iwl_scan_cancel_timeout(struct iwl_priv *priv, unsigned long ms);
|
||||||
int iwl_mac_hw_scan(struct ieee80211_hw *hw, struct cfg80211_scan_request *req);
|
int iwl_mac_hw_scan(struct ieee80211_hw *hw, struct cfg80211_scan_request *req);
|
||||||
int iwl_internal_short_hw_scan(struct iwl_priv *priv);
|
void iwl_internal_short_hw_scan(struct iwl_priv *priv);
|
||||||
int iwl_force_reset(struct iwl_priv *priv, int mode);
|
int iwl_force_reset(struct iwl_priv *priv, int mode);
|
||||||
u16 iwl_fill_probe_req(struct iwl_priv *priv, struct ieee80211_mgmt *frame,
|
u16 iwl_fill_probe_req(struct iwl_priv *priv, struct ieee80211_mgmt *frame,
|
||||||
const u8 *ie, int ie_len, int left);
|
const u8 *ie, int ie_len, int left);
|
||||||
|
@@ -1296,6 +1296,7 @@ struct iwl_priv {
|
|||||||
struct work_struct tt_work;
|
struct work_struct tt_work;
|
||||||
struct work_struct ct_enter;
|
struct work_struct ct_enter;
|
||||||
struct work_struct ct_exit;
|
struct work_struct ct_exit;
|
||||||
|
struct work_struct start_internal_scan;
|
||||||
|
|
||||||
struct tasklet_struct irq_tasklet;
|
struct tasklet_struct irq_tasklet;
|
||||||
|
|
||||||
|
@@ -203,6 +203,10 @@ struct iwl_eeprom_enhanced_txpwr {
|
|||||||
#define EEPROM_5000_REG_BAND_52_HT40_CHANNELS ((0x92)\
|
#define EEPROM_5000_REG_BAND_52_HT40_CHANNELS ((0x92)\
|
||||||
| INDIRECT_ADDRESS | INDIRECT_REGULATORY) /* 22 bytes */
|
| INDIRECT_ADDRESS | INDIRECT_REGULATORY) /* 22 bytes */
|
||||||
|
|
||||||
|
/* 6000 regulatory - indirect access */
|
||||||
|
#define EEPROM_6000_REG_BAND_24_HT40_CHANNELS ((0x80)\
|
||||||
|
| INDIRECT_ADDRESS | INDIRECT_REGULATORY) /* 14 bytes */
|
||||||
|
|
||||||
/* 6000 and up regulatory tx power - indirect access */
|
/* 6000 and up regulatory tx power - indirect access */
|
||||||
/* max. elements per section */
|
/* max. elements per section */
|
||||||
#define EEPROM_MAX_TXPOWER_SECTION_ELEMENTS (8)
|
#define EEPROM_MAX_TXPOWER_SECTION_ELEMENTS (8)
|
||||||
|
@@ -470,6 +470,8 @@ EXPORT_SYMBOL(iwl_init_scan_params);
|
|||||||
|
|
||||||
static int iwl_scan_initiate(struct iwl_priv *priv)
|
static int iwl_scan_initiate(struct iwl_priv *priv)
|
||||||
{
|
{
|
||||||
|
WARN_ON(!mutex_is_locked(&priv->mutex));
|
||||||
|
|
||||||
IWL_DEBUG_INFO(priv, "Starting scan...\n");
|
IWL_DEBUG_INFO(priv, "Starting scan...\n");
|
||||||
set_bit(STATUS_SCANNING, &priv->status);
|
set_bit(STATUS_SCANNING, &priv->status);
|
||||||
priv->is_internal_short_scan = false;
|
priv->is_internal_short_scan = false;
|
||||||
@@ -547,24 +549,31 @@ EXPORT_SYMBOL(iwl_mac_hw_scan);
|
|||||||
* internal short scan, this function should only been called while associated.
|
* internal short scan, this function should only been called while associated.
|
||||||
* It will reset and tune the radio to prevent possible RF related problem
|
* It will reset and tune the radio to prevent possible RF related problem
|
||||||
*/
|
*/
|
||||||
int iwl_internal_short_hw_scan(struct iwl_priv *priv)
|
void iwl_internal_short_hw_scan(struct iwl_priv *priv)
|
||||||
{
|
{
|
||||||
int ret = 0;
|
queue_work(priv->workqueue, &priv->start_internal_scan);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void iwl_bg_start_internal_scan(struct work_struct *work)
|
||||||
|
{
|
||||||
|
struct iwl_priv *priv =
|
||||||
|
container_of(work, struct iwl_priv, start_internal_scan);
|
||||||
|
|
||||||
|
mutex_lock(&priv->mutex);
|
||||||
|
|
||||||
if (!iwl_is_ready_rf(priv)) {
|
if (!iwl_is_ready_rf(priv)) {
|
||||||
ret = -EIO;
|
|
||||||
IWL_DEBUG_SCAN(priv, "not ready or exit pending\n");
|
IWL_DEBUG_SCAN(priv, "not ready or exit pending\n");
|
||||||
goto out;
|
goto unlock;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (test_bit(STATUS_SCANNING, &priv->status)) {
|
if (test_bit(STATUS_SCANNING, &priv->status)) {
|
||||||
IWL_DEBUG_SCAN(priv, "Scan already in progress.\n");
|
IWL_DEBUG_SCAN(priv, "Scan already in progress.\n");
|
||||||
ret = -EAGAIN;
|
goto unlock;
|
||||||
goto out;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (test_bit(STATUS_SCAN_ABORTING, &priv->status)) {
|
if (test_bit(STATUS_SCAN_ABORTING, &priv->status)) {
|
||||||
IWL_DEBUG_SCAN(priv, "Scan request while abort pending\n");
|
IWL_DEBUG_SCAN(priv, "Scan request while abort pending\n");
|
||||||
ret = -EAGAIN;
|
goto unlock;
|
||||||
goto out;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
priv->scan_bands = 0;
|
priv->scan_bands = 0;
|
||||||
@@ -577,9 +586,8 @@ int iwl_internal_short_hw_scan(struct iwl_priv *priv)
|
|||||||
set_bit(STATUS_SCANNING, &priv->status);
|
set_bit(STATUS_SCANNING, &priv->status);
|
||||||
priv->is_internal_short_scan = true;
|
priv->is_internal_short_scan = true;
|
||||||
queue_work(priv->workqueue, &priv->request_scan);
|
queue_work(priv->workqueue, &priv->request_scan);
|
||||||
|
unlock:
|
||||||
out:
|
mutex_unlock(&priv->mutex);
|
||||||
return ret;
|
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(iwl_internal_short_hw_scan);
|
EXPORT_SYMBOL(iwl_internal_short_hw_scan);
|
||||||
|
|
||||||
@@ -965,6 +973,7 @@ void iwl_setup_scan_deferred_work(struct iwl_priv *priv)
|
|||||||
INIT_WORK(&priv->scan_completed, iwl_bg_scan_completed);
|
INIT_WORK(&priv->scan_completed, iwl_bg_scan_completed);
|
||||||
INIT_WORK(&priv->request_scan, iwl_bg_request_scan);
|
INIT_WORK(&priv->request_scan, iwl_bg_request_scan);
|
||||||
INIT_WORK(&priv->abort_scan, iwl_bg_abort_scan);
|
INIT_WORK(&priv->abort_scan, iwl_bg_abort_scan);
|
||||||
|
INIT_WORK(&priv->start_internal_scan, iwl_bg_start_internal_scan);
|
||||||
INIT_DELAYED_WORK(&priv->scan_check, iwl_bg_scan_check);
|
INIT_DELAYED_WORK(&priv->scan_check, iwl_bg_scan_check);
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(iwl_setup_scan_deferred_work);
|
EXPORT_SYMBOL(iwl_setup_scan_deferred_work);
|
||||||
|
@@ -184,7 +184,6 @@ static void sta_addba_resp_timer_expired(unsigned long data)
|
|||||||
HT_AGG_STATE_REQ_STOP_BA_MSK)) !=
|
HT_AGG_STATE_REQ_STOP_BA_MSK)) !=
|
||||||
HT_ADDBA_REQUESTED_MSK) {
|
HT_ADDBA_REQUESTED_MSK) {
|
||||||
spin_unlock_bh(&sta->lock);
|
spin_unlock_bh(&sta->lock);
|
||||||
*state = HT_AGG_STATE_IDLE;
|
|
||||||
#ifdef CONFIG_MAC80211_HT_DEBUG
|
#ifdef CONFIG_MAC80211_HT_DEBUG
|
||||||
printk(KERN_DEBUG "timer expired on tid %d but we are not "
|
printk(KERN_DEBUG "timer expired on tid %d but we are not "
|
||||||
"(or no longer) expecting addBA response there",
|
"(or no longer) expecting addBA response there",
|
||||||
|
@@ -168,6 +168,8 @@ static u32 ieee80211_enable_ht(struct ieee80211_sub_if_data *sdata,
|
|||||||
ht_changed = conf_is_ht(&local->hw.conf) != enable_ht ||
|
ht_changed = conf_is_ht(&local->hw.conf) != enable_ht ||
|
||||||
channel_type != local->hw.conf.channel_type;
|
channel_type != local->hw.conf.channel_type;
|
||||||
|
|
||||||
|
if (local->tmp_channel)
|
||||||
|
local->tmp_channel_type = channel_type;
|
||||||
local->oper_channel_type = channel_type;
|
local->oper_channel_type = channel_type;
|
||||||
|
|
||||||
if (ht_changed) {
|
if (ht_changed) {
|
||||||
|
Reference in New Issue
Block a user