Commit ae9e47e9 authored by David S. Miller's avatar David S. Miller
parents a4e6db07 be009370
...@@ -2836,8 +2836,6 @@ S: Maintained ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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( ...@@ -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( ...@@ -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( ...@@ -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( ...@@ -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");
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment