Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-2.6
Conflicts: drivers/net/wireless/iwlwifi/iwl-1000.c drivers/net/wireless/iwlwifi/iwl-6000.c drivers/net/wireless/iwlwifi/iwl-core.h
This commit is contained in:
commit
1fcfe76a76
@ -311,8 +311,10 @@ static void hci_uart_tty_close(struct tty_struct *tty)
|
|||||||
|
|
||||||
if (test_and_clear_bit(HCI_UART_PROTO_SET, &hu->flags)) {
|
if (test_and_clear_bit(HCI_UART_PROTO_SET, &hu->flags)) {
|
||||||
hu->proto->close(hu);
|
hu->proto->close(hu);
|
||||||
hci_unregister_dev(hdev);
|
if (hdev) {
|
||||||
hci_free_dev(hdev);
|
hci_unregister_dev(hdev);
|
||||||
|
hci_free_dev(hdev);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -311,6 +311,7 @@ struct iwl_cfg iwl100_bgn_cfg = {
|
|||||||
.base_params = &iwl1000_base_params,
|
.base_params = &iwl1000_base_params,
|
||||||
.ht_params = &iwl1000_ht_params,
|
.ht_params = &iwl1000_ht_params,
|
||||||
.led_mode = IWL_LED_RF_STATE,
|
.led_mode = IWL_LED_RF_STATE,
|
||||||
|
.use_new_eeprom_reading = true,
|
||||||
};
|
};
|
||||||
|
|
||||||
struct iwl_cfg iwl100_bg_cfg = {
|
struct iwl_cfg iwl100_bg_cfg = {
|
||||||
@ -324,6 +325,7 @@ struct iwl_cfg iwl100_bg_cfg = {
|
|||||||
.mod_params = &iwlagn_mod_params,
|
.mod_params = &iwlagn_mod_params,
|
||||||
.base_params = &iwl1000_base_params,
|
.base_params = &iwl1000_base_params,
|
||||||
.led_mode = IWL_LED_RF_STATE,
|
.led_mode = IWL_LED_RF_STATE,
|
||||||
|
.use_new_eeprom_reading = true,
|
||||||
};
|
};
|
||||||
|
|
||||||
MODULE_FIRMWARE(IWL1000_MODULE_FIRMWARE(IWL1000_UCODE_API_MAX));
|
MODULE_FIRMWARE(IWL1000_MODULE_FIRMWARE(IWL1000_UCODE_API_MAX));
|
||||||
|
@ -564,6 +564,7 @@ struct iwl_cfg iwl6005_2agn_cfg = {
|
|||||||
.need_dc_calib = true,
|
.need_dc_calib = true,
|
||||||
.need_temp_offset_calib = true,
|
.need_temp_offset_calib = true,
|
||||||
.led_mode = IWL_LED_RF_STATE,
|
.led_mode = IWL_LED_RF_STATE,
|
||||||
|
.use_new_eeprom_reading = true,
|
||||||
};
|
};
|
||||||
|
|
||||||
struct iwl_cfg iwl6005_2abg_cfg = {
|
struct iwl_cfg iwl6005_2abg_cfg = {
|
||||||
@ -579,6 +580,7 @@ struct iwl_cfg iwl6005_2abg_cfg = {
|
|||||||
.need_dc_calib = true,
|
.need_dc_calib = true,
|
||||||
.need_temp_offset_calib = true,
|
.need_temp_offset_calib = true,
|
||||||
.led_mode = IWL_LED_RF_STATE,
|
.led_mode = IWL_LED_RF_STATE,
|
||||||
|
.use_new_eeprom_reading = true,
|
||||||
};
|
};
|
||||||
|
|
||||||
struct iwl_cfg iwl6005_2bg_cfg = {
|
struct iwl_cfg iwl6005_2bg_cfg = {
|
||||||
@ -594,6 +596,7 @@ struct iwl_cfg iwl6005_2bg_cfg = {
|
|||||||
.need_dc_calib = true,
|
.need_dc_calib = true,
|
||||||
.need_temp_offset_calib = true,
|
.need_temp_offset_calib = true,
|
||||||
.led_mode = IWL_LED_RF_STATE,
|
.led_mode = IWL_LED_RF_STATE,
|
||||||
|
.use_new_eeprom_reading = true,
|
||||||
};
|
};
|
||||||
|
|
||||||
struct iwl_cfg iwl6030_2agn_cfg = {
|
struct iwl_cfg iwl6030_2agn_cfg = {
|
||||||
@ -614,6 +617,7 @@ struct iwl_cfg iwl6030_2agn_cfg = {
|
|||||||
.adv_pm = true,
|
.adv_pm = true,
|
||||||
/* Due to bluetooth, we transmit 2.4 GHz probes only on antenna A */
|
/* Due to bluetooth, we transmit 2.4 GHz probes only on antenna A */
|
||||||
.scan_tx_antennas[IEEE80211_BAND_2GHZ] = ANT_A,
|
.scan_tx_antennas[IEEE80211_BAND_2GHZ] = ANT_A,
|
||||||
|
.use_new_eeprom_reading = true,
|
||||||
};
|
};
|
||||||
|
|
||||||
struct iwl_cfg iwl6030_2abg_cfg = {
|
struct iwl_cfg iwl6030_2abg_cfg = {
|
||||||
@ -633,6 +637,7 @@ struct iwl_cfg iwl6030_2abg_cfg = {
|
|||||||
.adv_pm = true,
|
.adv_pm = true,
|
||||||
/* Due to bluetooth, we transmit 2.4 GHz probes only on antenna A */
|
/* Due to bluetooth, we transmit 2.4 GHz probes only on antenna A */
|
||||||
.scan_tx_antennas[IEEE80211_BAND_2GHZ] = ANT_A,
|
.scan_tx_antennas[IEEE80211_BAND_2GHZ] = ANT_A,
|
||||||
|
.use_new_eeprom_reading = true,
|
||||||
};
|
};
|
||||||
|
|
||||||
struct iwl_cfg iwl6030_2bgn_cfg = {
|
struct iwl_cfg iwl6030_2bgn_cfg = {
|
||||||
@ -653,6 +658,7 @@ struct iwl_cfg iwl6030_2bgn_cfg = {
|
|||||||
.adv_pm = true,
|
.adv_pm = true,
|
||||||
/* Due to bluetooth, we transmit 2.4 GHz probes only on antenna A */
|
/* Due to bluetooth, we transmit 2.4 GHz probes only on antenna A */
|
||||||
.scan_tx_antennas[IEEE80211_BAND_2GHZ] = ANT_A,
|
.scan_tx_antennas[IEEE80211_BAND_2GHZ] = ANT_A,
|
||||||
|
.use_new_eeprom_reading = true,
|
||||||
};
|
};
|
||||||
|
|
||||||
struct iwl_cfg iwl6030_2bg_cfg = {
|
struct iwl_cfg iwl6030_2bg_cfg = {
|
||||||
@ -672,6 +678,7 @@ struct iwl_cfg iwl6030_2bg_cfg = {
|
|||||||
.adv_pm = true,
|
.adv_pm = true,
|
||||||
/* Due to bluetooth, we transmit 2.4 GHz probes only on antenna A */
|
/* Due to bluetooth, we transmit 2.4 GHz probes only on antenna A */
|
||||||
.scan_tx_antennas[IEEE80211_BAND_2GHZ] = ANT_A,
|
.scan_tx_antennas[IEEE80211_BAND_2GHZ] = ANT_A,
|
||||||
|
.use_new_eeprom_reading = true,
|
||||||
};
|
};
|
||||||
|
|
||||||
struct iwl_cfg iwl1030_bgn_cfg = {
|
struct iwl_cfg iwl1030_bgn_cfg = {
|
||||||
@ -692,6 +699,7 @@ struct iwl_cfg iwl1030_bgn_cfg = {
|
|||||||
.adv_pm = true,
|
.adv_pm = true,
|
||||||
/* Due to bluetooth, we transmit 2.4 GHz probes only on antenna A */
|
/* Due to bluetooth, we transmit 2.4 GHz probes only on antenna A */
|
||||||
.scan_tx_antennas[IEEE80211_BAND_2GHZ] = ANT_A,
|
.scan_tx_antennas[IEEE80211_BAND_2GHZ] = ANT_A,
|
||||||
|
.use_new_eeprom_reading = true,
|
||||||
};
|
};
|
||||||
|
|
||||||
struct iwl_cfg iwl1030_bg_cfg = {
|
struct iwl_cfg iwl1030_bg_cfg = {
|
||||||
@ -711,6 +719,7 @@ struct iwl_cfg iwl1030_bg_cfg = {
|
|||||||
.adv_pm = true,
|
.adv_pm = true,
|
||||||
/* Due to bluetooth, we transmit 2.4 GHz probes only on antenna A */
|
/* Due to bluetooth, we transmit 2.4 GHz probes only on antenna A */
|
||||||
.scan_tx_antennas[IEEE80211_BAND_2GHZ] = ANT_A,
|
.scan_tx_antennas[IEEE80211_BAND_2GHZ] = ANT_A,
|
||||||
|
.use_new_eeprom_reading = true,
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -793,6 +802,7 @@ struct iwl_cfg iwl6150_bgn_cfg = {
|
|||||||
.ht_params = &iwl6000_ht_params,
|
.ht_params = &iwl6000_ht_params,
|
||||||
.need_dc_calib = true,
|
.need_dc_calib = true,
|
||||||
.led_mode = IWL_LED_RF_STATE,
|
.led_mode = IWL_LED_RF_STATE,
|
||||||
|
.use_new_eeprom_reading = true,
|
||||||
};
|
};
|
||||||
|
|
||||||
struct iwl_cfg iwl6050_2abg_cfg = {
|
struct iwl_cfg iwl6050_2abg_cfg = {
|
||||||
@ -841,6 +851,7 @@ struct iwl_cfg iwl130_bgn_cfg = {
|
|||||||
.adv_pm = true,
|
.adv_pm = true,
|
||||||
/* Due to bluetooth, we transmit 2.4 GHz probes only on antenna A */
|
/* Due to bluetooth, we transmit 2.4 GHz probes only on antenna A */
|
||||||
.scan_tx_antennas[IEEE80211_BAND_2GHZ] = ANT_A,
|
.scan_tx_antennas[IEEE80211_BAND_2GHZ] = ANT_A,
|
||||||
|
.use_new_eeprom_reading = true,
|
||||||
};
|
};
|
||||||
|
|
||||||
struct iwl_cfg iwl130_bg_cfg = {
|
struct iwl_cfg iwl130_bg_cfg = {
|
||||||
@ -859,6 +870,7 @@ struct iwl_cfg iwl130_bg_cfg = {
|
|||||||
.adv_pm = true,
|
.adv_pm = true,
|
||||||
/* Due to bluetooth, we transmit 2.4 GHz probes only on antenna A */
|
/* Due to bluetooth, we transmit 2.4 GHz probes only on antenna A */
|
||||||
.scan_tx_antennas[IEEE80211_BAND_2GHZ] = ANT_A,
|
.scan_tx_antennas[IEEE80211_BAND_2GHZ] = ANT_A,
|
||||||
|
.use_new_eeprom_reading = true,
|
||||||
};
|
};
|
||||||
|
|
||||||
MODULE_FIRMWARE(IWL6000_MODULE_FIRMWARE(IWL6000_UCODE_API_MAX));
|
MODULE_FIRMWARE(IWL6000_MODULE_FIRMWARE(IWL6000_UCODE_API_MAX));
|
||||||
|
@ -433,7 +433,7 @@ static s8 iwl_update_channel_txpower(struct iwl_priv *priv,
|
|||||||
/**
|
/**
|
||||||
* iwlcore_eeprom_enhanced_txpower: process enhanced tx power info
|
* iwlcore_eeprom_enhanced_txpower: process enhanced tx power info
|
||||||
*/
|
*/
|
||||||
void iwlcore_eeprom_enhanced_txpower(struct iwl_priv *priv)
|
static void iwlcore_eeprom_enhanced_txpower_old(struct iwl_priv *priv)
|
||||||
{
|
{
|
||||||
int eeprom_section_count = 0;
|
int eeprom_section_count = 0;
|
||||||
int section, element;
|
int section, element;
|
||||||
@ -460,7 +460,8 @@ void iwlcore_eeprom_enhanced_txpower(struct iwl_priv *priv)
|
|||||||
* always check for valid entry before process
|
* always check for valid entry before process
|
||||||
* the information
|
* the information
|
||||||
*/
|
*/
|
||||||
if (!enhanced_txpower->common || enhanced_txpower->reserved)
|
if (!(enhanced_txpower->flags || enhanced_txpower->channel) ||
|
||||||
|
enhanced_txpower->delta_20_in_40)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
for (element = 0; element < eeprom_section_count; element++) {
|
for (element = 0; element < eeprom_section_count; element++) {
|
||||||
@ -493,3 +494,86 @@ void iwlcore_eeprom_enhanced_txpower(struct iwl_priv *priv)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
iwlcore_eeprom_enh_txp_read_element(struct iwl_priv *priv,
|
||||||
|
struct iwl_eeprom_enhanced_txpwr *txp,
|
||||||
|
s8 max_txpower_avg)
|
||||||
|
{
|
||||||
|
int ch_idx;
|
||||||
|
bool is_ht40 = txp->flags & IWL_EEPROM_ENH_TXP_FL_40MHZ;
|
||||||
|
enum ieee80211_band band;
|
||||||
|
|
||||||
|
band = txp->flags & IWL_EEPROM_ENH_TXP_FL_BAND_52G ?
|
||||||
|
IEEE80211_BAND_5GHZ : IEEE80211_BAND_2GHZ;
|
||||||
|
|
||||||
|
for (ch_idx = 0; ch_idx < priv->channel_count; ch_idx++) {
|
||||||
|
struct iwl_channel_info *ch_info = &priv->channel_info[ch_idx];
|
||||||
|
|
||||||
|
/* update matching channel or from common data only */
|
||||||
|
if (txp->channel != 0 && ch_info->channel != txp->channel)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
/* update matching band only */
|
||||||
|
if (band != ch_info->band)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (ch_info->max_power_avg < max_txpower_avg && !is_ht40) {
|
||||||
|
ch_info->max_power_avg = max_txpower_avg;
|
||||||
|
ch_info->curr_txpow = max_txpower_avg;
|
||||||
|
ch_info->scan_power = max_txpower_avg;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (is_ht40 && ch_info->ht40_max_power_avg < max_txpower_avg)
|
||||||
|
ch_info->ht40_max_power_avg = max_txpower_avg;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#define EEPROM_TXP_OFFS (0x00 | INDIRECT_ADDRESS | INDIRECT_TXP_LIMIT)
|
||||||
|
#define EEPROM_TXP_ENTRY_LEN sizeof(struct iwl_eeprom_enhanced_txpwr)
|
||||||
|
#define EEPROM_TXP_SZ_OFFS (0x00 | INDIRECT_ADDRESS | INDIRECT_TXP_LIMIT_SIZE)
|
||||||
|
|
||||||
|
static void iwlcore_eeprom_enhanced_txpower_new(struct iwl_priv *priv)
|
||||||
|
{
|
||||||
|
struct iwl_eeprom_enhanced_txpwr *txp_array, *txp;
|
||||||
|
int idx, entries;
|
||||||
|
__le16 *txp_len;
|
||||||
|
s8 max_txp_avg, max_txp_avg_halfdbm;
|
||||||
|
|
||||||
|
BUILD_BUG_ON(sizeof(struct iwl_eeprom_enhanced_txpwr) != 8);
|
||||||
|
|
||||||
|
/* the length is in 16-bit words, but we want entries */
|
||||||
|
txp_len = (__le16 *) iwlagn_eeprom_query_addr(priv, EEPROM_TXP_SZ_OFFS);
|
||||||
|
entries = le16_to_cpup(txp_len) * 2 / EEPROM_TXP_ENTRY_LEN;
|
||||||
|
|
||||||
|
txp_array = (void *) iwlagn_eeprom_query_addr(priv, EEPROM_TXP_OFFS);
|
||||||
|
for (idx = 0; idx < entries; idx++) {
|
||||||
|
txp = &txp_array[idx];
|
||||||
|
|
||||||
|
/* skip invalid entries */
|
||||||
|
if (!(txp->flags & IWL_EEPROM_ENH_TXP_FL_VALID))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
max_txp_avg = iwl_get_max_txpower_avg(priv, txp_array, idx,
|
||||||
|
&max_txp_avg_halfdbm);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Update the user limit values values to the highest
|
||||||
|
* power supported by any channel
|
||||||
|
*/
|
||||||
|
if (max_txp_avg > priv->tx_power_user_lmt)
|
||||||
|
priv->tx_power_user_lmt = max_txp_avg;
|
||||||
|
if (max_txp_avg_halfdbm > priv->tx_power_lmt_in_half_dbm)
|
||||||
|
priv->tx_power_lmt_in_half_dbm = max_txp_avg_halfdbm;
|
||||||
|
|
||||||
|
iwlcore_eeprom_enh_txp_read_element(priv, txp, max_txp_avg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void iwlcore_eeprom_enhanced_txpower(struct iwl_priv *priv)
|
||||||
|
{
|
||||||
|
if (priv->cfg->use_new_eeprom_reading)
|
||||||
|
iwlcore_eeprom_enhanced_txpower_new(priv);
|
||||||
|
else
|
||||||
|
iwlcore_eeprom_enhanced_txpower_old(priv);
|
||||||
|
}
|
||||||
|
@ -568,6 +568,12 @@ static u32 eeprom_indirect_address(const struct iwl_priv *priv, u32 address)
|
|||||||
case INDIRECT_REGULATORY:
|
case INDIRECT_REGULATORY:
|
||||||
offset = iwl_eeprom_query16(priv, EEPROM_LINK_REGULATORY);
|
offset = iwl_eeprom_query16(priv, EEPROM_LINK_REGULATORY);
|
||||||
break;
|
break;
|
||||||
|
case INDIRECT_TXP_LIMIT:
|
||||||
|
offset = iwl_eeprom_query16(priv, EEPROM_LINK_TXP_LIMIT);
|
||||||
|
break;
|
||||||
|
case INDIRECT_TXP_LIMIT_SIZE:
|
||||||
|
offset = iwl_eeprom_query16(priv, EEPROM_LINK_TXP_LIMIT_SIZE);
|
||||||
|
break;
|
||||||
case INDIRECT_CALIBRATION:
|
case INDIRECT_CALIBRATION:
|
||||||
offset = iwl_eeprom_query16(priv, EEPROM_LINK_CALIBRATION);
|
offset = iwl_eeprom_query16(priv, EEPROM_LINK_CALIBRATION);
|
||||||
break;
|
break;
|
||||||
|
@ -412,6 +412,7 @@ struct iwl_cfg {
|
|||||||
u8 scan_tx_antennas[IEEE80211_NUM_BANDS];
|
u8 scan_tx_antennas[IEEE80211_NUM_BANDS];
|
||||||
enum iwl_led_mode led_mode;
|
enum iwl_led_mode led_mode;
|
||||||
const bool adv_pm;
|
const bool adv_pm;
|
||||||
|
const bool use_new_eeprom_reading; /* temporary, remove later */
|
||||||
};
|
};
|
||||||
|
|
||||||
/***************************
|
/***************************
|
||||||
|
@ -129,6 +129,17 @@ struct iwl_eeprom_channel {
|
|||||||
s8 max_power_avg; /* max power (dBm) on this chnl, limit 31 */
|
s8 max_power_avg; /* max power (dBm) on this chnl, limit 31 */
|
||||||
} __packed;
|
} __packed;
|
||||||
|
|
||||||
|
enum iwl_eeprom_enhanced_txpwr_flags {
|
||||||
|
IWL_EEPROM_ENH_TXP_FL_VALID = BIT(0),
|
||||||
|
IWL_EEPROM_ENH_TXP_FL_BAND_52G = BIT(1),
|
||||||
|
IWL_EEPROM_ENH_TXP_FL_OFDM = BIT(2),
|
||||||
|
IWL_EEPROM_ENH_TXP_FL_40MHZ = BIT(3),
|
||||||
|
IWL_EEPROM_ENH_TXP_FL_HT_AP = BIT(4),
|
||||||
|
IWL_EEPROM_ENH_TXP_FL_RES1 = BIT(5),
|
||||||
|
IWL_EEPROM_ENH_TXP_FL_RES2 = BIT(6),
|
||||||
|
IWL_EEPROM_ENH_TXP_FL_COMMON_TYPE = BIT(7),
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* iwl_eeprom_enhanced_txpwr structure
|
* iwl_eeprom_enhanced_txpwr structure
|
||||||
* This structure presents the enhanced regulatory tx power limit layout
|
* This structure presents the enhanced regulatory tx power limit layout
|
||||||
@ -136,21 +147,23 @@ struct iwl_eeprom_channel {
|
|||||||
* Enhanced regulatory tx power portion of eeprom image can be broken down
|
* Enhanced regulatory tx power portion of eeprom image can be broken down
|
||||||
* into individual structures; each one is 8 bytes in size and contain the
|
* into individual structures; each one is 8 bytes in size and contain the
|
||||||
* following information
|
* following information
|
||||||
* @common: (desc + channel) not used by driver, should _NOT_ be "zero"
|
* @flags: entry flags
|
||||||
|
* @channel: channel number
|
||||||
* @chain_a_max_pwr: chain a max power in 1/2 dBm
|
* @chain_a_max_pwr: chain a max power in 1/2 dBm
|
||||||
* @chain_b_max_pwr: chain b max power in 1/2 dBm
|
* @chain_b_max_pwr: chain b max power in 1/2 dBm
|
||||||
* @chain_c_max_pwr: chain c max power in 1/2 dBm
|
* @chain_c_max_pwr: chain c max power in 1/2 dBm
|
||||||
* @reserved: not used, should be "zero"
|
* @delta_20_in_40: 20-in-40 deltas (hi/lo)
|
||||||
* @mimo2_max_pwr: mimo2 max power in 1/2 dBm
|
* @mimo2_max_pwr: mimo2 max power in 1/2 dBm
|
||||||
* @mimo3_max_pwr: mimo3 max power in 1/2 dBm
|
* @mimo3_max_pwr: mimo3 max power in 1/2 dBm
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
struct iwl_eeprom_enhanced_txpwr {
|
struct iwl_eeprom_enhanced_txpwr {
|
||||||
__le16 common;
|
u8 flags;
|
||||||
|
u8 channel;
|
||||||
s8 chain_a_max;
|
s8 chain_a_max;
|
||||||
s8 chain_b_max;
|
s8 chain_b_max;
|
||||||
s8 chain_c_max;
|
s8 chain_c_max;
|
||||||
s8 reserved;
|
u8 delta_20_in_40;
|
||||||
s8 mimo2_max;
|
s8 mimo2_max;
|
||||||
s8 mimo3_max;
|
s8 mimo3_max;
|
||||||
} __packed;
|
} __packed;
|
||||||
@ -195,6 +208,8 @@ struct iwl_eeprom_enhanced_txpwr {
|
|||||||
#define EEPROM_LINK_CALIBRATION (2*0x67)
|
#define EEPROM_LINK_CALIBRATION (2*0x67)
|
||||||
#define EEPROM_LINK_PROCESS_ADJST (2*0x68)
|
#define EEPROM_LINK_PROCESS_ADJST (2*0x68)
|
||||||
#define EEPROM_LINK_OTHERS (2*0x69)
|
#define EEPROM_LINK_OTHERS (2*0x69)
|
||||||
|
#define EEPROM_LINK_TXP_LIMIT (2*0x6a)
|
||||||
|
#define EEPROM_LINK_TXP_LIMIT_SIZE (2*0x6b)
|
||||||
|
|
||||||
/* agn regulatory - indirect access */
|
/* agn regulatory - indirect access */
|
||||||
#define EEPROM_REG_BAND_1_CHANNELS ((0x08)\
|
#define EEPROM_REG_BAND_1_CHANNELS ((0x08)\
|
||||||
@ -398,6 +413,8 @@ struct iwl_eeprom_calib_info {
|
|||||||
#define INDIRECT_CALIBRATION 0x00040000
|
#define INDIRECT_CALIBRATION 0x00040000
|
||||||
#define INDIRECT_PROCESS_ADJST 0x00050000
|
#define INDIRECT_PROCESS_ADJST 0x00050000
|
||||||
#define INDIRECT_OTHERS 0x00060000
|
#define INDIRECT_OTHERS 0x00060000
|
||||||
|
#define INDIRECT_TXP_LIMIT 0x00070000
|
||||||
|
#define INDIRECT_TXP_LIMIT_SIZE 0x00080000
|
||||||
#define INDIRECT_ADDRESS 0x00100000
|
#define INDIRECT_ADDRESS 0x00100000
|
||||||
|
|
||||||
/* General */
|
/* General */
|
||||||
|
@ -617,7 +617,7 @@ static int lbs_ret_scan(struct lbs_private *priv, unsigned long dummy,
|
|||||||
print_ssid(ssid_buf, ssid, ssid_len),
|
print_ssid(ssid_buf, ssid, ssid_len),
|
||||||
LBS_SCAN_RSSI_TO_MBM(rssi)/100);
|
LBS_SCAN_RSSI_TO_MBM(rssi)/100);
|
||||||
|
|
||||||
if (channel ||
|
if (channel &&
|
||||||
!(channel->flags & IEEE80211_CHAN_DISABLED))
|
!(channel->flags & IEEE80211_CHAN_DISABLED))
|
||||||
cfg80211_inform_bss(wiphy, channel,
|
cfg80211_inform_bss(wiphy, channel,
|
||||||
bssid, le64_to_cpu(*(__le64 *)tsfdesc),
|
bssid, le64_to_cpu(*(__le64 *)tsfdesc),
|
||||||
|
@ -43,6 +43,7 @@ MODULE_FIRMWARE("isl3887usb");
|
|||||||
|
|
||||||
static struct usb_device_id p54u_table[] __devinitdata = {
|
static struct usb_device_id p54u_table[] __devinitdata = {
|
||||||
/* Version 1 devices (pci chip + net2280) */
|
/* Version 1 devices (pci chip + net2280) */
|
||||||
|
{USB_DEVICE(0x0411, 0x0050)}, /* Buffalo WLI2-USB2-G54 */
|
||||||
{USB_DEVICE(0x045e, 0x00c2)}, /* Microsoft MN-710 */
|
{USB_DEVICE(0x045e, 0x00c2)}, /* Microsoft MN-710 */
|
||||||
{USB_DEVICE(0x0506, 0x0a11)}, /* 3COM 3CRWE254G72 */
|
{USB_DEVICE(0x0506, 0x0a11)}, /* 3COM 3CRWE254G72 */
|
||||||
{USB_DEVICE(0x06b9, 0x0120)}, /* Thomson SpeedTouch 120g */
|
{USB_DEVICE(0x06b9, 0x0120)}, /* Thomson SpeedTouch 120g */
|
||||||
@ -56,9 +57,13 @@ static struct usb_device_id p54u_table[] __devinitdata = {
|
|||||||
{USB_DEVICE(0x0846, 0x4220)}, /* Netgear WG111 */
|
{USB_DEVICE(0x0846, 0x4220)}, /* Netgear WG111 */
|
||||||
{USB_DEVICE(0x09aa, 0x1000)}, /* Spinnaker Proto board */
|
{USB_DEVICE(0x09aa, 0x1000)}, /* Spinnaker Proto board */
|
||||||
{USB_DEVICE(0x0cde, 0x0006)}, /* Medion 40900, Roper Europe */
|
{USB_DEVICE(0x0cde, 0x0006)}, /* Medion 40900, Roper Europe */
|
||||||
|
{USB_DEVICE(0x0db0, 0x6826)}, /* MSI UB54G (MS-6826) */
|
||||||
{USB_DEVICE(0x107b, 0x55f2)}, /* Gateway WGU-210 (Gemtek) */
|
{USB_DEVICE(0x107b, 0x55f2)}, /* Gateway WGU-210 (Gemtek) */
|
||||||
{USB_DEVICE(0x124a, 0x4023)}, /* Shuttle PN15, Airvast WM168g, IOGear GWU513 */
|
{USB_DEVICE(0x124a, 0x4023)}, /* Shuttle PN15, Airvast WM168g, IOGear GWU513 */
|
||||||
|
{USB_DEVICE(0x1435, 0x0210)}, /* Inventel UR054G */
|
||||||
|
{USB_DEVICE(0x15a9, 0x0002)}, /* Gemtek WUBI-100GW 802.11g */
|
||||||
{USB_DEVICE(0x1630, 0x0005)}, /* 2Wire 802.11g USB (v1) / Z-Com */
|
{USB_DEVICE(0x1630, 0x0005)}, /* 2Wire 802.11g USB (v1) / Z-Com */
|
||||||
|
{USB_DEVICE(0x182d, 0x096b)}, /* Sitecom WL-107 */
|
||||||
{USB_DEVICE(0x1915, 0x2234)}, /* Linksys WUSB54G OEM */
|
{USB_DEVICE(0x1915, 0x2234)}, /* Linksys WUSB54G OEM */
|
||||||
{USB_DEVICE(0x1915, 0x2235)}, /* Linksys WUSB54G Portable OEM */
|
{USB_DEVICE(0x1915, 0x2235)}, /* Linksys WUSB54G Portable OEM */
|
||||||
{USB_DEVICE(0x2001, 0x3701)}, /* DLink DWL-G120 Spinnaker */
|
{USB_DEVICE(0x2001, 0x3701)}, /* DLink DWL-G120 Spinnaker */
|
||||||
@ -94,6 +99,7 @@ static struct usb_device_id p54u_table[] __devinitdata = {
|
|||||||
{USB_DEVICE(0x1435, 0x0427)}, /* Inventel UR054G */
|
{USB_DEVICE(0x1435, 0x0427)}, /* Inventel UR054G */
|
||||||
{USB_DEVICE(0x1668, 0x1050)}, /* Actiontec 802UIG-1 */
|
{USB_DEVICE(0x1668, 0x1050)}, /* Actiontec 802UIG-1 */
|
||||||
{USB_DEVICE(0x2001, 0x3704)}, /* DLink DWL-G122 rev A2 */
|
{USB_DEVICE(0x2001, 0x3704)}, /* DLink DWL-G122 rev A2 */
|
||||||
|
{USB_DEVICE(0x2001, 0x3705)}, /* D-Link DWL-G120 rev C1 */
|
||||||
{USB_DEVICE(0x413c, 0x5513)}, /* Dell WLA3310 USB Wireless Adapter */
|
{USB_DEVICE(0x413c, 0x5513)}, /* Dell WLA3310 USB Wireless Adapter */
|
||||||
{USB_DEVICE(0x413c, 0x8102)}, /* Spinnaker DUT */
|
{USB_DEVICE(0x413c, 0x8102)}, /* Spinnaker DUT */
|
||||||
{USB_DEVICE(0x413c, 0x8104)}, /* Cohiba Proto board */
|
{USB_DEVICE(0x413c, 0x8104)}, /* Cohiba Proto board */
|
||||||
|
@ -311,6 +311,7 @@ static void rfcomm_dlc_clear_state(struct rfcomm_dlc *d)
|
|||||||
d->state = BT_OPEN;
|
d->state = BT_OPEN;
|
||||||
d->flags = 0;
|
d->flags = 0;
|
||||||
d->mscex = 0;
|
d->mscex = 0;
|
||||||
|
d->sec_level = BT_SECURITY_LOW;
|
||||||
d->mtu = RFCOMM_DEFAULT_MTU;
|
d->mtu = RFCOMM_DEFAULT_MTU;
|
||||||
d->v24_sig = RFCOMM_V24_RTC | RFCOMM_V24_RTR | RFCOMM_V24_DV;
|
d->v24_sig = RFCOMM_V24_RTC | RFCOMM_V24_RTR | RFCOMM_V24_DV;
|
||||||
|
|
||||||
|
@ -780,6 +780,9 @@ void ieee80211_ibss_rx_queued_mgmt(struct ieee80211_sub_if_data *sdata,
|
|||||||
|
|
||||||
mutex_lock(&sdata->u.ibss.mtx);
|
mutex_lock(&sdata->u.ibss.mtx);
|
||||||
|
|
||||||
|
if (!sdata->u.ibss.ssid_len)
|
||||||
|
goto mgmt_out; /* not ready to merge yet */
|
||||||
|
|
||||||
switch (fc & IEEE80211_FCTL_STYPE) {
|
switch (fc & IEEE80211_FCTL_STYPE) {
|
||||||
case IEEE80211_STYPE_PROBE_REQ:
|
case IEEE80211_STYPE_PROBE_REQ:
|
||||||
ieee80211_rx_mgmt_probe_req(sdata, mgmt, skb->len);
|
ieee80211_rx_mgmt_probe_req(sdata, mgmt, skb->len);
|
||||||
@ -797,6 +800,7 @@ void ieee80211_ibss_rx_queued_mgmt(struct ieee80211_sub_if_data *sdata,
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
mgmt_out:
|
||||||
mutex_unlock(&sdata->u.ibss.mtx);
|
mutex_unlock(&sdata->u.ibss.mtx);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1074,11 +1074,13 @@ void ieee80211_work_purge(struct ieee80211_sub_if_data *sdata)
|
|||||||
{
|
{
|
||||||
struct ieee80211_local *local = sdata->local;
|
struct ieee80211_local *local = sdata->local;
|
||||||
struct ieee80211_work *wk;
|
struct ieee80211_work *wk;
|
||||||
|
bool cleanup = false;
|
||||||
|
|
||||||
mutex_lock(&local->mtx);
|
mutex_lock(&local->mtx);
|
||||||
list_for_each_entry(wk, &local->work_list, list) {
|
list_for_each_entry(wk, &local->work_list, list) {
|
||||||
if (wk->sdata != sdata)
|
if (wk->sdata != sdata)
|
||||||
continue;
|
continue;
|
||||||
|
cleanup = true;
|
||||||
wk->type = IEEE80211_WORK_ABORT;
|
wk->type = IEEE80211_WORK_ABORT;
|
||||||
wk->started = true;
|
wk->started = true;
|
||||||
wk->timeout = jiffies;
|
wk->timeout = jiffies;
|
||||||
@ -1086,7 +1088,8 @@ void ieee80211_work_purge(struct ieee80211_sub_if_data *sdata)
|
|||||||
mutex_unlock(&local->mtx);
|
mutex_unlock(&local->mtx);
|
||||||
|
|
||||||
/* run cleanups etc. */
|
/* run cleanups etc. */
|
||||||
ieee80211_work_work(&local->work_work);
|
if (cleanup)
|
||||||
|
ieee80211_work_work(&local->work_work);
|
||||||
|
|
||||||
mutex_lock(&local->mtx);
|
mutex_lock(&local->mtx);
|
||||||
list_for_each_entry(wk, &local->work_list, list) {
|
list_for_each_entry(wk, &local->work_list, list) {
|
||||||
|
Loading…
Reference in New Issue
Block a user