Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-2.6
This commit is contained in:
commit
ae9e47e9e8
|
@ -2836,8 +2836,6 @@ S: Maintained
|
||||||
MAC80211
|
MAC80211
|
||||||
P: Johannes Berg
|
P: Johannes Berg
|
||||||
M: johannes@sipsolutions.net
|
M: johannes@sipsolutions.net
|
||||||
P: Michael Wu
|
|
||||||
M: flamingice@sourmilk.net
|
|
||||||
L: linux-wireless@vger.kernel.org
|
L: linux-wireless@vger.kernel.org
|
||||||
W: http://linuxwireless.org/
|
W: http://linuxwireless.org/
|
||||||
T: git kernel.org:/pub/scm/linux/kernel/git/linville/wireless-2.6.git
|
T: git kernel.org:/pub/scm/linux/kernel/git/linville/wireless-2.6.git
|
||||||
|
|
|
@ -1028,6 +1028,8 @@ ath5k_setup_bands(struct ieee80211_hw *hw)
|
||||||
* it's done by reseting the chip. To accomplish this we must
|
* it's done by reseting the chip. To accomplish this we must
|
||||||
* first cleanup any pending DMA, then restart stuff after a la
|
* first cleanup any pending DMA, then restart stuff after a la
|
||||||
* ath5k_init.
|
* ath5k_init.
|
||||||
|
*
|
||||||
|
* Called with sc->lock.
|
||||||
*/
|
*/
|
||||||
static int
|
static int
|
||||||
ath5k_chan_set(struct ath5k_softc *sc, struct ieee80211_channel *chan)
|
ath5k_chan_set(struct ath5k_softc *sc, struct ieee80211_channel *chan)
|
||||||
|
@ -2814,11 +2816,17 @@ ath5k_config(struct ieee80211_hw *hw, u32 changed)
|
||||||
{
|
{
|
||||||
struct ath5k_softc *sc = hw->priv;
|
struct ath5k_softc *sc = hw->priv;
|
||||||
struct ieee80211_conf *conf = &hw->conf;
|
struct ieee80211_conf *conf = &hw->conf;
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
mutex_lock(&sc->lock);
|
||||||
|
|
||||||
sc->bintval = conf->beacon_int;
|
sc->bintval = conf->beacon_int;
|
||||||
sc->power_level = conf->power_level;
|
sc->power_level = conf->power_level;
|
||||||
|
|
||||||
return ath5k_chan_set(sc, conf->channel);
|
ret = ath5k_chan_set(sc, conf->channel);
|
||||||
|
|
||||||
|
mutex_unlock(&sc->lock);
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
|
|
|
@ -1719,6 +1719,10 @@ static int iwl_read_ucode(struct iwl_priv *priv)
|
||||||
priv->ucode_data_backup.len = data_size;
|
priv->ucode_data_backup.len = data_size;
|
||||||
iwl_alloc_fw_desc(priv->pci_dev, &priv->ucode_data_backup);
|
iwl_alloc_fw_desc(priv->pci_dev, &priv->ucode_data_backup);
|
||||||
|
|
||||||
|
if (!priv->ucode_code.v_addr || !priv->ucode_data.v_addr ||
|
||||||
|
!priv->ucode_data_backup.v_addr)
|
||||||
|
goto err_pci_alloc;
|
||||||
|
|
||||||
/* Initialization instructions and data */
|
/* Initialization instructions and data */
|
||||||
if (init_size && init_data_size) {
|
if (init_size && init_data_size) {
|
||||||
priv->ucode_init.len = init_size;
|
priv->ucode_init.len = init_size;
|
||||||
|
|
|
@ -285,7 +285,10 @@ static void rtl8225_rf_set_tx_power(struct ieee80211_hw *dev, int channel)
|
||||||
ofdm_power = priv->channels[channel - 1].hw_value >> 4;
|
ofdm_power = priv->channels[channel - 1].hw_value >> 4;
|
||||||
|
|
||||||
cck_power = min(cck_power, (u8)11);
|
cck_power = min(cck_power, (u8)11);
|
||||||
ofdm_power = min(ofdm_power, (u8)35);
|
if (ofdm_power > (u8)15)
|
||||||
|
ofdm_power = 25;
|
||||||
|
else
|
||||||
|
ofdm_power += 10;
|
||||||
|
|
||||||
rtl818x_iowrite8(priv, &priv->map->TX_GAIN_CCK,
|
rtl818x_iowrite8(priv, &priv->map->TX_GAIN_CCK,
|
||||||
rtl8225_tx_gain_cck_ofdm[cck_power / 6] >> 1);
|
rtl8225_tx_gain_cck_ofdm[cck_power / 6] >> 1);
|
||||||
|
@ -536,7 +539,10 @@ static void rtl8225z2_rf_set_tx_power(struct ieee80211_hw *dev, int channel)
|
||||||
cck_power += priv->txpwr_base & 0xF;
|
cck_power += priv->txpwr_base & 0xF;
|
||||||
cck_power = min(cck_power, (u8)35);
|
cck_power = min(cck_power, (u8)35);
|
||||||
|
|
||||||
ofdm_power = min(ofdm_power, (u8)15);
|
if (ofdm_power > (u8)15)
|
||||||
|
ofdm_power = 25;
|
||||||
|
else
|
||||||
|
ofdm_power += 10;
|
||||||
ofdm_power += priv->txpwr_base >> 4;
|
ofdm_power += priv->txpwr_base >> 4;
|
||||||
ofdm_power = min(ofdm_power, (u8)35);
|
ofdm_power = min(ofdm_power, (u8)35);
|
||||||
|
|
||||||
|
|
|
@ -498,6 +498,7 @@ static struct ieee80211_regdomain *country_ie_2_rd(
|
||||||
* calculate the number of reg rules we will need. We will need one
|
* calculate the number of reg rules we will need. We will need one
|
||||||
* for each channel subband */
|
* for each channel subband */
|
||||||
while (country_ie_len >= 3) {
|
while (country_ie_len >= 3) {
|
||||||
|
int end_channel = 0;
|
||||||
struct ieee80211_country_ie_triplet *triplet =
|
struct ieee80211_country_ie_triplet *triplet =
|
||||||
(struct ieee80211_country_ie_triplet *) country_ie;
|
(struct ieee80211_country_ie_triplet *) country_ie;
|
||||||
int cur_sub_max_channel = 0, cur_channel = 0;
|
int cur_sub_max_channel = 0, cur_channel = 0;
|
||||||
|
@ -509,9 +510,25 @@ static struct ieee80211_regdomain *country_ie_2_rd(
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* 2 GHz */
|
||||||
|
if (triplet->chans.first_channel <= 14)
|
||||||
|
end_channel = triplet->chans.first_channel +
|
||||||
|
triplet->chans.num_channels;
|
||||||
|
else
|
||||||
|
/*
|
||||||
|
* 5 GHz -- For example in country IEs if the first
|
||||||
|
* channel given is 36 and the number of channels is 4
|
||||||
|
* then the individual channel numbers defined for the
|
||||||
|
* 5 GHz PHY by these parameters are: 36, 40, 44, and 48
|
||||||
|
* and not 36, 37, 38, 39.
|
||||||
|
*
|
||||||
|
* See: http://tinyurl.com/11d-clarification
|
||||||
|
*/
|
||||||
|
end_channel = triplet->chans.first_channel +
|
||||||
|
(4 * (triplet->chans.num_channels - 1));
|
||||||
|
|
||||||
cur_channel = triplet->chans.first_channel;
|
cur_channel = triplet->chans.first_channel;
|
||||||
cur_sub_max_channel = ieee80211_channel_to_frequency(
|
cur_sub_max_channel = end_channel;
|
||||||
cur_channel + triplet->chans.num_channels);
|
|
||||||
|
|
||||||
/* Basic sanity check */
|
/* Basic sanity check */
|
||||||
if (cur_sub_max_channel < cur_channel)
|
if (cur_sub_max_channel < cur_channel)
|
||||||
|
@ -590,15 +607,6 @@ static struct ieee80211_regdomain *country_ie_2_rd(
|
||||||
end_channel = triplet->chans.first_channel +
|
end_channel = triplet->chans.first_channel +
|
||||||
triplet->chans.num_channels;
|
triplet->chans.num_channels;
|
||||||
else
|
else
|
||||||
/*
|
|
||||||
* 5 GHz -- For example in country IEs if the first
|
|
||||||
* channel given is 36 and the number of channels is 4
|
|
||||||
* then the individual channel numbers defined for the
|
|
||||||
* 5 GHz PHY by these parameters are: 36, 40, 44, and 48
|
|
||||||
* and not 36, 37, 38, 39.
|
|
||||||
*
|
|
||||||
* See: http://tinyurl.com/11d-clarification
|
|
||||||
*/
|
|
||||||
end_channel = triplet->chans.first_channel +
|
end_channel = triplet->chans.first_channel +
|
||||||
(4 * (triplet->chans.num_channels - 1));
|
(4 * (triplet->chans.num_channels - 1));
|
||||||
|
|
||||||
|
@ -1276,7 +1284,7 @@ static void reg_country_ie_process_debug(
|
||||||
if (intersected_rd) {
|
if (intersected_rd) {
|
||||||
printk(KERN_DEBUG "cfg80211: We intersect both of these "
|
printk(KERN_DEBUG "cfg80211: We intersect both of these "
|
||||||
"and get:\n");
|
"and get:\n");
|
||||||
print_regdomain_info(rd);
|
print_regdomain_info(intersected_rd);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
printk(KERN_DEBUG "cfg80211: Intersection between both failed\n");
|
printk(KERN_DEBUG "cfg80211: Intersection between both failed\n");
|
||||||
|
|
Loading…
Reference in New Issue