* [PATCH 01/28] iwlwifi: fix a lot of checkpatch.pl warnings
[not found] <11865584251026-git-send-email-yi.zhu@intel.com>
@ 2007-08-08 7:33 ` Zhu Yi
2007-08-08 7:33 ` [PATCH 02/28] iwlwifi: add more Kconfig options Zhu Yi
0 siblings, 1 reply; 28+ messages in thread
From: Zhu Yi @ 2007-08-08 7:33 UTC (permalink / raw)
To: linville; +Cc: linux-wireless, Zhu Yi
Signed-off-by: Zhu Yi <yi.zhu@intel.com>
---
drivers/net/wireless/iwl-3945-rs.c | 4 +-
drivers/net/wireless/iwl-3945.c | 81 ++++++------
drivers/net/wireless/iwl-4965-rs.c | 96 +++++++-------
drivers/net/wireless/iwl-4965.c | 176 ++++++++++++------------
drivers/net/wireless/iwl-4965.h | 4 +-
drivers/net/wireless/iwl-base.c | 266 +++++++++++++++++-------------------
drivers/net/wireless/iwl-helpers.h | 5 +-
drivers/net/wireless/iwl-io.h | 28 ++--
drivers/net/wireless/iwlwifi.h | 14 +-
9 files changed, 325 insertions(+), 349 deletions(-)
diff --git a/drivers/net/wireless/iwl-3945-rs.c b/drivers/net/wireless/iwl-3945-rs.c
index 0dfafc9..8a98eb8 100644
--- a/drivers/net/wireless/iwl-3945-rs.c
+++ b/drivers/net/wireless/iwl-3945-rs.c
@@ -745,9 +745,9 @@ static struct ieee80211_rate *rs_get_rate(void *priv_rate,
IWL_DEBUG_RATE("decrease rate because of low success_ratio\n");
scale_action = -1;
} else if ((low_tpt == IWL_INVALID_VALUE) &&
- (high_tpt == IWL_INVALID_VALUE)) {
+ (high_tpt == IWL_INVALID_VALUE))
scale_action = 1;
- } else if ((low_tpt != IWL_INVALID_VALUE) &&
+ else if ((low_tpt != IWL_INVALID_VALUE) &&
(high_tpt != IWL_INVALID_VALUE)
&& (low_tpt < current_tpt)
&& (high_tpt < current_tpt)) {
diff --git a/drivers/net/wireless/iwl-3945.c b/drivers/net/wireless/iwl-3945.c
index 6074ae0..8e78ad5 100644
--- a/drivers/net/wireless/iwl-3945.c
+++ b/drivers/net/wireless/iwl-3945.c
@@ -168,12 +168,12 @@ void iwl_disable_events(struct iwl_priv *priv)
IWL_DEBUG_INFO("Disabling selected uCode log events at 0x%x\n",
disable_ptr);
rc = iwl_grab_restricted_access(priv);
- for (i = 0; i < IWL_EVT_DISABLE_SIZE; i++) {
+ for (i = 0; i < IWL_EVT_DISABLE_SIZE; i++)
iwl_write_restricted_mem(priv,
disable_ptr +
(i * sizeof(u32)),
evt_disable[i]);
- }
+
iwl_release_restricted_access(priv);
} else {
IWL_DEBUG_INFO("Selected uCode log events may be disabled\n");
@@ -943,9 +943,8 @@ int iwl_hw_nic_init(struct iwl_priv *priv)
IWL_DEBUG_INFO("SKU OP mode is mrc\n");
iwl_set_bit(priv, CSR_HW_IF_CONFIG_REG,
CSR_HW_IF_CONFIG_REG_BIT_SKU_MRC);
- } else {
+ } else
IWL_DEBUG_INFO("SKU OP mode is basic\n");
- }
if ((priv->eeprom.board_revision & 0xF0) == 0xD0) {
IWL_DEBUG_INFO("3945ABG revision is 0x%X\n",
@@ -1076,10 +1075,10 @@ int iwl_hw_nic_stop_master(struct iwl_priv *priv)
reg_val = iwl_read32(priv, CSR_GP_CNTRL);
if (CSR_GP_CNTRL_REG_FLAG_MAC_POWER_SAVE ==
- (reg_val & CSR_GP_CNTRL_REG_MSK_POWER_SAVE_TYPE)) {
+ (reg_val & CSR_GP_CNTRL_REG_MSK_POWER_SAVE_TYPE))
IWL_DEBUG_INFO
("Card in power save, master is already stopped\n");
- } else {
+ else {
rc = iwl_poll_bit(priv,
CSR_RESET,
CSR_RESET_REG_FLAG_MASTER_DISABLED,
@@ -1190,8 +1189,8 @@ static int iwl_hw_reg_txpower_get_temperature(struct iwl_priv *priv)
/* if really really hot(?),
* substitute the 3rd band/group's temp measured at factory */
if (priv->last_temperature > 100)
- temperature =
- (s16)le16_to_cpu(priv->eeprom.groups[2].temperature);
+ temperature = (s16) le16_to_cpu(
+ priv->eeprom.groups[2].temperature);
else /* else use most recent "sane" value from driver */
temperature = priv->last_temperature;
}
@@ -1325,7 +1324,7 @@ static struct iwl_tx_power power_gain_table[2][IWL_MAX_GAIN_ENTRIES] = {
{3, 113},
{3, 106},
{3, 102},
- {3, 95}}, /* 2.4 GHz, lowest power */
+ {3, 95} }, /* 2.4 GHz, lowest power */
{
{251, 127}, /* 5.x GHz, highest power */
{251, 120},
@@ -1404,7 +1403,7 @@ static struct iwl_tx_power power_gain_table[2][IWL_MAX_GAIN_ENTRIES] = {
{35, 113},
{35, 107},
{35, 99},
- {3, 120}} /* 5.x GHz, lowest power */
+ {3, 120} } /* 5.x GHz, lowest power */
};
static inline u8 iwl_hw_reg_fix_power_index(int index)
@@ -1426,7 +1425,7 @@ static inline u8 iwl_hw_reg_fix_power_index(int index)
* or 6 Mbit (OFDM) rates.
*/
static void iwl_hw_reg_set_scan_power(struct iwl_priv *priv, u32 scan_tbl_index,
- s32 rate_index, const s8 * clip_pwrs,
+ s32 rate_index, const s8 *clip_pwrs,
struct iwl_channel_info *ch_info,
int band_index)
{
@@ -1456,11 +1455,6 @@ static void iwl_hw_reg_set_scan_power(struct iwl_priv *priv, u32 scan_tbl_index,
- (power - ch_info->power_info
[IWL_RATE_6M_INDEX].requested_power) * 2;
-#if 0
- IWL_DEBUG_POWER("chnl %d scan power index %d\n",
- ch_info->channel, power_index);
-#endif
-
/* store reference index that we use when adjusting *all* scan
* powers. So we can accommodate user (all channel) or spectrum
* management (single channel) power changes "between" temperature
@@ -1541,9 +1535,9 @@ int iwl_hw_reg_send_txpower(struct iwl_priv *priv)
*
* This does *not* send anything to NIC, just sets up ch_info for one channel.
*
- * NOTE:reg_compensate_for_temperature_dif() *must* be run after this to
- * properly fill out the scan powers, and actual h/w gain settings,
- * and send changes to NIC
+ * NOTE: reg_compensate_for_temperature_dif() *must* be run after this to
+ * properly fill out the scan powers, and actual h/w gain settings,
+ * and send changes to NIC
*/
static int iwl_hw_reg_set_new_power(struct iwl_priv *priv,
struct iwl_channel_info *ch_info)
@@ -1602,12 +1596,13 @@ static int iwl_hw_reg_set_new_power(struct iwl_priv *priv,
}
/**
- * iwl_hw_reg_get_channel_txpower_limit - returns new power limit for channel
+ * iwl_hw_reg_get_ch_txpower_limit - returns new power limit for channel
*
- * NOTE: Returned power limit may be less (but not more) than requested,
- * based strictly on regulatory (eeprom and spectrum mgt) limitations
- * (no consideration for h/w clipping limitations). */
-static int iwl_hw_reg_get_channel_txpower_limit(struct iwl_channel_info *ch_info)
+ * NOTE: Returned power limit may be less (but not more) than requested,
+ * based strictly on regulatory (eeprom and spectrum mgt) limitations
+ * (no consideration for h/w clipping limitations).
+ */
+static int iwl_hw_reg_get_ch_txpower_limit(struct iwl_channel_info *ch_info)
{
s8 max_power;
@@ -1621,6 +1616,7 @@ static int iwl_hw_reg_get_channel_txpower_limit(struct iwl_channel_info *ch_info
else
#endif
max_power = ch_info->eeprom.max_power_avg;
+
return min(max_power, ch_info->max_power_avg);
}
@@ -1657,7 +1653,8 @@ static int iwl_hw_reg_comp_txpower_temp(struct iwl_priv *priv)
/* get power index adjustment based on curr and factory
* temps */
- delta_index = iwl_hw_reg_adjust_power_by_temp(temperature, ref_temp);
+ delta_index = iwl_hw_reg_adjust_power_by_temp(temperature,
+ ref_temp);
/* set tx power value for all rates, OFDM and CCK */
for (rate_index = 0; rate_index < IWL_RATE_COUNT;
@@ -1720,7 +1717,7 @@ int iwl_hw_reg_set_txpower(struct iwl_priv *priv, s8 power)
/* find minimum power of all user and regulatory constraints
* (does not consider h/w clipping limitations) */
- max_power = iwl_hw_reg_get_channel_txpower_limit(ch_info);
+ max_power = iwl_hw_reg_get_ch_txpower_limit(ch_info);
max_power = min(power, max_power);
if (max_power != ch_info->curr_txpow) {
ch_info->curr_txpow = max_power;
@@ -1784,15 +1781,19 @@ void iwl3945_bg_reg_txpower_periodic(struct work_struct *work)
mutex_unlock(&priv->mutex);
}
-/* iwl_hw_reg_get_chnl_grp_index - find the channel-group index (0-4) for the channel.
+/**
+ * iwl_hw_reg_get_ch_grp_index - find the channel-group index (0-4)
+ * for the channel.
+ *
+ * This function is used when initializing channel-info structs.
*
- * ... used when initializing channel-info structs.
- * NOTE: These channel groups do *NOT* match the bands above!
- * These channel groups are based on factory-tested channels;
- * on A-band, EEPROM's "group frequency" entries represent the top channel
- * in each group 1-4. Group 5 All B/G channels are in group 0. */
-static u16 iwl_hw_reg_get_chnl_grp_index(struct iwl_priv *priv,
- const struct iwl_channel_info *ch_info)
+ * NOTE: These channel groups do *NOT* match the bands above!
+ * These channel groups are based on factory-tested channels;
+ * on A-band, EEPROM's "group frequency" entries represent the top
+ * channel in each group 1-4. Group 5 All B/G channels are in group 0.
+ */
+static u16 iwl_hw_reg_get_ch_grp_index(struct iwl_priv *priv,
+ const struct iwl_channel_info *ch_info)
{
struct iwl_eeprom_txpower_group *ch_grp = &priv->eeprom.groups[0];
u8 group;
@@ -1827,7 +1828,7 @@ static u16 iwl_hw_reg_get_chnl_grp_index(struct iwl_priv *priv,
*/
static int iwl_hw_reg_get_matched_power_index(struct iwl_priv *priv,
s8 requested_power,
- s32 setting_index, s32 * new_index)
+ s32 setting_index, s32 *new_index)
{
const struct iwl_eeprom_txpower_group *chnl_grp = NULL;
s32 index0, index1;
@@ -1982,17 +1983,17 @@ int iwl3945_txpower_set_from_eeprom(struct iwl_priv *priv)
continue;
/* find this channel's channel group (*not* "band") index */
- ch_info->group_index = iwl_hw_reg_get_chnl_grp_index(priv, ch_info);
+ ch_info->group_index =
+ iwl_hw_reg_get_ch_grp_index(priv, ch_info);
/* Get this chnlgrp's rate->max/clip-powers table */
clip_pwrs = priv->clip_groups[ch_info->group_index].clip_powers;
/* calculate power index *adjustment* value according to
* diff between current temperature and factory temperature */
- delta_index = iwl_hw_reg_adjust_power_by_temp(
- temperature,
- (s16)le16_to_cpu(
- priv->eeprom.groups[ch_info->group_index].temperature));
+ delta_index = iwl_hw_reg_adjust_power_by_temp(temperature,
+ (s16) le16_to_cpu(priv->eeprom.groups[
+ ch_info->group_index].temperature));
IWL_DEBUG_POWER("Delta index for channel %d: %d [%d]\n",
ch_info->channel, delta_index, temperature +
diff --git a/drivers/net/wireless/iwl-4965-rs.c b/drivers/net/wireless/iwl-4965-rs.c
index 7d4a980..07fe911 100644
--- a/drivers/net/wireless/iwl-4965-rs.c
+++ b/drivers/net/wireless/iwl-4965-rs.c
@@ -203,10 +203,9 @@ static int rs_send_lq_cmd(struct iwl_priv *priv,
lq->general_params.single_stream_ant_msk,
lq->general_params.dual_stream_ant_msk);
#ifdef CONFIG_IWLWIFI_DEBUG
- for (i = 0; i < LINK_QUAL_MAX_RETRY_NUM; i++) {
+ for (i = 0; i < LINK_QUAL_MAX_RETRY_NUM; i++)
IWL_DEBUG_RATE("lq index %d 0x%X\n",
i, lq->rate_scale_table[i].rate_n_flags);
- }
#endif
if (flags & CMD_ASYNC)
@@ -217,16 +216,15 @@ static int rs_send_lq_cmd(struct iwl_priv *priv,
return rc;
}
-static int rs_rate_scale_clear_window(struct iwl_rate_scale_data
- *window)
+static int rs_rate_scale_clear_window(struct iwl_rate_scale_data *window)
{
-
window->data = 0;
window->success_counter = 0;
window->success_ratio = IWL_INVALID_VALUE;
window->counter = 0;
window->average_tpt = IWL_INVALID_VALUE;
window->stamp = 0;
+
return 0;
}
@@ -266,20 +264,19 @@ static int rs_collect_tx_data(struct iwl_rate_scale_data *windows,
window->data |= 0x1;
}
- if (window->counter > 0) {
+ if (window->counter > 0)
window->success_ratio = 128 * (100 * window->success_counter)
/ window->counter;
- } else
+ else
window->success_ratio = IWL_INVALID_VALUE;
-
fail_count = window->counter - window->success_counter;
+
if ((fail_count >= IWL_RATE_MIN_FAILURE_TH) ||
(window->success_counter >= IWL_RATE_MIN_SUCCESS_TH))
- window->average_tpt = ((window->success_ratio *
- tpt + 64) / 128);
+ window->average_tpt = (window->success_ratio * tpt + 64) / 128;
else
- window->average_tpt = IWL_INVALID_VALUE;
+ window->average_tpt = IWL_INVALID_VALUE;
window->stamp = jiffies;
@@ -456,9 +453,9 @@ static inline s8 rs_use_green(struct iwl_priv *priv)
*
*/
static void rs_get_supported_rates(struct iwl_rate_scale_priv *lq_data,
- struct ieee80211_hdr *hdr,
- enum iwl_table_type rate_type,
- u16 * data_rate)
+ struct ieee80211_hdr *hdr,
+ enum iwl_table_type rate_type,
+ u16 *data_rate)
{
if (is_legacy(rate_type))
*data_rate = lq_data->active_rate;
@@ -469,8 +466,8 @@ static void rs_get_supported_rates(struct iwl_rate_scale_priv *lq_data,
*data_rate = lq_data->active_mimo_rate;
}
- if (hdr && (is_multicast_ether_addr(hdr->addr1))
- && (lq_data->active_rate_basic))
+ if (hdr && is_multicast_ether_addr(hdr->addr1) &&
+ lq_data->active_rate_basic)
*data_rate = lq_data->active_rate_basic;
}
@@ -1501,9 +1498,9 @@ static void rs_rate_scale_perform(struct iwl_priv *priv,
current_tpt = window->average_tpt;
- if (low != IWL_RATE_INVALID) {
+ if (low != IWL_RATE_INVALID)
low_tpt = tbl->win[low].average_tpt;
- }
+
if (high != IWL_RATE_INVALID)
high_tpt = tbl->win[high].average_tpt;
@@ -1515,14 +1512,14 @@ static void rs_rate_scale_perform(struct iwl_priv *priv,
IWL_DEBUG_RATE("decrease rate because of low success_ratio\n");
scale_action = -1;
} else if ((low_tpt == IWL_INVALID_VALUE) &&
- (high_tpt == IWL_INVALID_VALUE)) {
+ (high_tpt == IWL_INVALID_VALUE))
scale_action = 1;
- } else if ((low_tpt != IWL_INVALID_VALUE) &&
- (high_tpt != IWL_INVALID_VALUE)
- && (low_tpt < current_tpt)
- && (high_tpt < current_tpt)) {
+ else if ((low_tpt != IWL_INVALID_VALUE) &&
+ (high_tpt != IWL_INVALID_VALUE) &&
+ (low_tpt < current_tpt) &&
+ (high_tpt < current_tpt))
scale_action = 0;
- } else {
+ else {
if (high_tpt != IWL_INVALID_VALUE) {
if (high_tpt > current_tpt)
scale_action = 1;
@@ -1557,7 +1554,6 @@ static void rs_rate_scale_perform(struct iwl_priv *priv,
index = low;
}
break;
-
case 1:
if (high != IWL_RATE_INVALID) {
update_lq = 1;
@@ -1565,30 +1561,29 @@ static void rs_rate_scale_perform(struct iwl_priv *priv,
}
break;
-
case 0:
-
default:
break;
}
- IWL_DEBUG_HT
- ("choose rate scale index %d action %d low %d high %d\n",
- index, scale_action, low, high);
+ IWL_DEBUG_HT("choose rate scale index %d action %d low %d high %d\n",
+ index, scale_action, low, high);
lq_update:
if (update_lq) {
rs_mcs_from_tbl(&mcs_rate, tbl, index, is_green);
rs_fill_link_cmd(lq_data, &mcs_rate, &(lq_data->lq), sta);
+
if (!rs_send_lq_cmd(priv, &lq_data->lq, CMD_ASYNC))
lq_data->commit_lq = 0;
else
lq_data->commit_lq = 1;
}
rs_stay_in_table(lq_data);
- if (!update_lq
- && !done_search && !lq_data->stay_in_tbl) {
+
+ if (!update_lq && !done_search && !lq_data->stay_in_tbl) {
lq_data->last_tpt = current_tpt;
+
if (is_legacy(tbl->lq_type))
rs_move_legacy_other(priv, lq_data, index);
else if (is_siso(tbl->lq_type))
@@ -1602,18 +1597,19 @@ static void rs_rate_scale_perform(struct iwl_priv *priv,
rs_rate_scale_clear_window(&(tbl->win[i]));
index = iwl_rate_index_from_plcp(
- tbl->current_rate.rate_n_flags);
+ tbl->current_rate.rate_n_flags);
IWL_DEBUG_HT("Switch current mcs: %X index: %d\n",
tbl->current_rate.rate_n_flags, index);
rs_fill_link_cmd(lq_data, &tbl->current_rate,
- &(lq_data->lq), sta);
+ &(lq_data->lq), sta);
if (!rs_send_lq_cmd(priv, &lq_data->lq, CMD_ASYNC))
lq_data->commit_lq = 0;
else
lq_data->commit_lq = 1;
}
tbl1 = &(lq_data->lq_info[lq_data->active_tbl]);
+
if (is_legacy(tbl1->lq_type) &&
#ifdef CONFIG_IWLWIFI_HT
!priv->current_assoc_ht.is_ht &&
@@ -1642,12 +1638,14 @@ static void rs_rate_scale_perform(struct iwl_priv *priv,
lq_data->flush_timer = jiffies;
}
- out:
+out:
rs_mcs_from_tbl(&tbl->current_rate, tbl, index, is_green);
i = index;
sta->last_txrate = i;
+
/* sta->txrate is an index to A mode rates which start
- * at IWL_FIRST_OFDM_RATE */
+ * at IWL_FIRST_OFDM_RATE
+ */
if ((lq_data->phymode == (u8) MODE_IEEE80211A) ||
(lq_data->phymode == (u8) MODE_ATHEROS_TURBO))
sta->txrate = i - IWL_FIRST_OFDM_RATE;
@@ -1793,9 +1791,8 @@ static struct ieee80211_rate *rs_get_rate(void *priv_rate,
done:
sta_info_put(sta);
- if ((i < 0) || (i > IWL_RATE_COUNT)) {
+ if ((i < 0) || (i > IWL_RATE_COUNT))
return rs_get_lowest_rate(local);
- }
return &priv->ieee_rates[i];
}
@@ -1927,7 +1924,8 @@ static int rs_fill_link_cmd(struct iwl_rate_scale_priv *lq_data,
repeat_cur_rate = IWL_HT_NUMBER_TRY;
lq_cmd->rate_scale_table[index].rate_n_flags = tx_mcs->rate_n_flags;
- lq_cmd->general_params.mimo_delimiter = is_mimo(tbl_type.lq_type) ? 1 : 0;
+ lq_cmd->general_params.mimo_delimiter =
+ is_mimo(tbl_type.lq_type) ? 1 : 0;
new_rate.rate_n_flags = tx_mcs->rate_n_flags;
if (is_mimo(tbl_type.lq_type) || (tbl_type.antenna_type == ANT_MAIN))
@@ -1940,8 +1938,9 @@ static int rs_fill_link_cmd(struct iwl_rate_scale_priv *lq_data,
while (index < LINK_QUAL_MAX_RETRY_NUM) {
while (repeat_cur_rate && (index < LINK_QUAL_MAX_RETRY_NUM)) {
- if (is_legacy(tbl_type.lq_type)){
- if (ant_toggle_count < NUM_TRY_BEFORE_ANTENNA_TOGGLE)
+ if (is_legacy(tbl_type.lq_type)) {
+ if (ant_toggle_count <
+ NUM_TRY_BEFORE_ANTENNA_TOGGLE)
ant_toggle_count++;
else {
rs_toggle_antenna(&new_rate, &tbl_type);
@@ -1954,13 +1953,13 @@ static int rs_fill_link_cmd(struct iwl_rate_scale_priv *lq_data,
index++;
}
rs_get_tbl_info_from_mcs(&lq_cmd->rate_scale_table[index - 1],
- lq_data->phymode,
- &tbl_type, &rate_idx);
+ lq_data->phymode, &tbl_type,
+ &rate_idx);
if (is_mimo(tbl_type.lq_type))
lq_cmd->general_params.mimo_delimiter = index;
rs_get_lower_rate(lq_data, &tbl_type, rate_idx,
- use_ht_possible, &new_rate, sta);
+ use_ht_possible, &new_rate, sta);
if (is_legacy(tbl_type.lq_type)) {
if (ant_toggle_count < NUM_TRY_BEFORE_ANTENNA_TOGGLE)
@@ -1970,21 +1969,20 @@ static int rs_fill_link_cmd(struct iwl_rate_scale_priv *lq_data,
ant_toggle_count = 1;
}
repeat_cur_rate = IWL_NUMBER_TRY;
- } else {
+ } else
repeat_cur_rate = IWL_HT_NUMBER_TRY;
- }
use_ht_possible = 0;
lq_cmd->rate_scale_table[index].rate_n_flags =
- new_rate.rate_n_flags;
- /*lq_cmd->rate_scale_table[index].rate_n_flags = 0x800d; */
+ new_rate.rate_n_flags;
+ /* lq_cmd->rate_scale_table[index].rate_n_flags = 0x800d; */
index++;
repeat_cur_rate--;
}
- /*lq_cmd->rate_scale_table[0].rate_n_flags = 0x800d; */
+ /* lq_cmd->rate_scale_table[0].rate_n_flags = 0x800d; */
lq_cmd->general_params.dual_stream_ant_msk = 3;
lq_cmd->agg_params.agg_dis_start_th = 3;
diff --git a/drivers/net/wireless/iwl-4965.c b/drivers/net/wireless/iwl-4965.c
index 2e97e6b..6b8fd73 100644
--- a/drivers/net/wireless/iwl-4965.c
+++ b/drivers/net/wireless/iwl-4965.c
@@ -105,7 +105,7 @@ static u8 is_single_stream(struct iwl_priv *priv)
* This does not determine *which* chains to use, just how many.
*/
static int iwl4965_get_rx_chain_counter(struct iwl_priv *priv,
- u8 * idle_state, u8 * rx_state)
+ u8 *idle_state, u8 *rx_state)
{
u8 is_single = is_single_stream(priv);
u8 is_cam = (priv->status & STATUS_POWER_PMI) ? 0 : 1;
@@ -205,21 +205,17 @@ static int iwl4965_nic_set_pwr_src(struct iwl_priv *priv, int pwr_max)
u32 val;
rc = pci_read_config_dword(priv->pci_dev, 0x0C8, &val);
- if (val & PCI_CFG_PMC_PME_FROM_D3COLD_SUPPORT) {
+ if (val & PCI_CFG_PMC_PME_FROM_D3COLD_SUPPORT)
iwl_set_bits_mask_restricted_reg(
priv, ALM_APMG_PS_CTL,
APMG_PS_CTRL_REG_VAL_POWER_SRC_VAUX,
~APMG_PS_CTRL_REG_MSK_POWER_SRC);
-
- }
- } else {
+ } else
iwl_set_bits_mask_restricted_reg(
priv, ALM_APMG_PS_CTL,
APMG_PS_CTRL_REG_VAL_POWER_SRC_VMAIN,
~APMG_PS_CTRL_REG_MSK_POWER_SRC);
- }
-
iwl_release_restricted_access(priv);
spin_unlock_irqrestore(&priv->lock, flags);
@@ -262,7 +258,6 @@ static int iwl4965_rx_init(struct iwl_priv *priv, struct iwl_rx_queue *rxq)
*/
iwl_release_restricted_access(priv);
-
spin_unlock_irqrestore(&priv->lock, flags);
return 0;
@@ -279,9 +274,9 @@ static int iwl4965_kw_init(struct iwl_priv *priv)
goto out;
iwl_write_restricted(priv, IWL_FH_KW_MEM_ADDR_REG,
- (priv->kw.dma_addr >> 4));
+ priv->kw.dma_addr >> 4);
iwl_release_restricted_access(priv);
- out:
+out:
spin_unlock_irqrestore(&priv->lock, flags);
return rc;
}
@@ -290,6 +285,7 @@ static int iwl4965_kw_alloc(struct iwl_priv *priv)
{
struct pci_dev *dev = priv->pci_dev;
struct iwl_kw *kw = &priv->kw;
+
kw->size = IWL4965_KW_SIZE; /* TBW need set somewhere else */
kw->v_addr = pci_alloc_consistent(dev, kw->size, &kw->dma_addr);
if (!kw->v_addr)
@@ -301,38 +297,37 @@ static int iwl4965_kw_alloc(struct iwl_priv *priv)
#define CHECK_AND_PRINT(x) ((eeprom_ch->flags & EEPROM_CHANNEL_##x) \
? # x " " : "")
-int iwl4965_set_fat_chan_info(struct iwl_priv *priv, int phymode,
- int channel,
+int iwl4965_set_fat_chan_info(struct iwl_priv *priv, int phymode, int channel,
const struct iwl_eeprom_channel *eeprom_ch,
u8 fat_extension_channel)
{
struct iwl_channel_info *ch_info;
- ch_info = (struct iwl_channel_info *)iwl_get_channel_info(priv,
- phymode,
- channel);
+ ch_info = (struct iwl_channel_info *)
+ iwl_get_channel_info(priv, phymode, channel);
+
if (!is_channel_valid(ch_info))
return -1;
- IWL_DEBUG_INFO("FAT Ch. %d [%sGHz] %s%s%s%s%s%s(" BIT_FMT8
- " %ddBm): Ad-Hoc %ssupported\n",
- ch_info->channel,
- is_channel_a_band(ch_info) ?
- "5.2" : "2.4",
- CHECK_AND_PRINT(IBSS),
- CHECK_AND_PRINT(ACTIVE),
- CHECK_AND_PRINT(RADAR),
- CHECK_AND_PRINT(WIDE),
- CHECK_AND_PRINT(NARROW),
- CHECK_AND_PRINT(DFS),
- BIT_ARG8(eeprom_ch->flags),
- eeprom_ch->
- max_power_avg,
- ((eeprom_ch->
- flags & EEPROM_CHANNEL_IBSS)
- && !(eeprom_ch->
- flags & EEPROM_CHANNEL_RADAR))
- ? "" : "not ");
+ IWL_DEBUG_INFO("FAT Ch. %d [%sGHz] %s%s%s%s%s%s(" BIT_FMT8
+ " %ddBm): Ad-Hoc %ssupported\n",
+ ch_info->channel,
+ is_channel_a_band(ch_info) ?
+ "5.2" : "2.4",
+ CHECK_AND_PRINT(IBSS),
+ CHECK_AND_PRINT(ACTIVE),
+ CHECK_AND_PRINT(RADAR),
+ CHECK_AND_PRINT(WIDE),
+ CHECK_AND_PRINT(NARROW),
+ CHECK_AND_PRINT(DFS),
+ BIT_ARG8(eeprom_ch->flags),
+ eeprom_ch->
+ max_power_avg,
+ ((eeprom_ch->
+ flags & EEPROM_CHANNEL_IBSS)
+ && !(eeprom_ch->
+ flags & EEPROM_CHANNEL_RADAR))
+ ? "" : "not ");
ch_info->fat_eeprom = *eeprom_ch;
ch_info->fat_max_power_avg = eeprom_ch->max_power_avg;
@@ -349,11 +344,11 @@ static void iwl4965_kw_free(struct iwl_priv *priv)
{
struct pci_dev *dev = priv->pci_dev;
struct iwl_kw *kw = &priv->kw;
+
if (kw->v_addr) {
pci_free_consistent(dev, kw->size, kw->v_addr, kw->dma_addr);
memset(kw, 0, sizeof(*kw));
}
-
}
/**
@@ -581,10 +576,10 @@ int iwl_hw_nic_stop_master(struct iwl_priv *priv)
reg_val = iwl_read32(priv, CSR_GP_CNTRL);
if (CSR_GP_CNTRL_REG_FLAG_MAC_POWER_SAVE ==
- (reg_val & CSR_GP_CNTRL_REG_MSK_POWER_SAVE_TYPE)) {
+ (reg_val & CSR_GP_CNTRL_REG_MSK_POWER_SAVE_TYPE))
IWL_DEBUG_INFO
("Card in power save, master is already stopped\n");
- } else {
+ else {
rc = iwl_poll_bit(priv,
CSR_RESET,
CSR_RESET_REG_FLAG_MASTER_DISABLED,
@@ -923,10 +918,8 @@ static int iwl4965_sens_energy_cck(struct iwl_priv *priv,
data->auto_corr_cck_mrc =
max((u32)AUTO_CORR_MIN_CCK_MRC, val);
- } else {
+ } else
IWL_DEBUG_CALIB("... but not changing sensitivity\n");
- }
-
/* Else we got a healthy number of false alarms, keep status quo */
} else {
@@ -946,9 +939,10 @@ static int iwl4965_sens_energy_cck(struct iwl_priv *priv,
}
/* Make sure the energy threshold does not go above the measured
- * energy of the desired Rx signals (reduced by backoff margin),
- * or else we might start missing Rx frames.
- * Lower value is higher energy, so we use max()! */
+ * energy of the desired Rx signals (reduced by backoff margin),
+ * or else we might start missing Rx frames.
+ * Lower value is higher energy, so we use max()!
+ */
data->nrg_th_cck = max(max_nrg_cck, data->nrg_th_cck);
IWL_DEBUG_CALIB("new nrg_th_cck %u\n", data->nrg_th_cck);
@@ -1016,10 +1010,9 @@ static int iwl4965_sens_auto_corr_ofdm(struct iwl_priv *priv,
max((u32)AUTO_CORR_MIN_OFDM_MRC_X1, val);
}
- else {
+ else
IWL_DEBUG_CALIB("min FA %u < norm FA %u < max FA %u OK\n",
min_false_alarms, false_alarms, max_false_alarms);
- }
return 0;
}
@@ -1392,9 +1385,8 @@ static void iwl4965_noise_calibration(struct iwl_priv *priv,
data->delta_gain_code[i] =
(data->delta_gain_code[i] | (1 << 2));
- } else {
+ } else
data->delta_gain_code[i] = 0;
- }
}
IWL_DEBUG_CALIB("delta_gain_codes: a %d b %d c %d\n",
data->delta_gain_code[0],
@@ -1561,10 +1553,9 @@ static void iwl4965_bg_sensitivity_work(struct work_struct *work)
IWL_SENS_CALIB_NEED_REINIT) {
iwl4965_init_sensitivity(priv, CMD_ASYNC, 0);
priv->sensitivity_data.state = IWL_SENS_CALIB_ALLOWED;
- } else {
+ } else
iwl4965_sensitivity_calibration(priv,
&priv->statistics);
- }
}
mutex_unlock(&priv->mutex);
@@ -1614,24 +1605,24 @@ static void iwl4965_set_wr_ptrs(struct iwl_priv *priv, int txq_id, u32 index)
/*
* Acquire priv->lock before calling this function !
*/
-static void iwl4965_tx_queue_set_status(struct iwl_priv *priv, struct iwl_tx_queue *txq,
- int tx_fifo_id, int scd_retry)
+static void iwl4965_tx_queue_set_status(struct iwl_priv *priv,
+ struct iwl_tx_queue *txq,
+ int tx_fifo_id, int scd_retry)
{
int txq_id = txq->q.id;
int active = test_bit(txq_id, &priv->txq_ctx_active_msk)?1:0;
- iwl_write_restricted_reg(priv,
- SCD_QUEUE_STATUS_BITS(txq_id),
- (active << SCD_QUEUE_STTS_REG_POS_ACTIVE)|
- (tx_fifo_id << SCD_QUEUE_STTS_REG_POS_TXF)|
- (scd_retry << SCD_QUEUE_STTS_REG_POS_WSL)|
- (scd_retry << SCD_QUEUE_STTS_REG_POS_SCD_ACK)|
+ iwl_write_restricted_reg(priv, SCD_QUEUE_STATUS_BITS(txq_id),
+ (active << SCD_QUEUE_STTS_REG_POS_ACTIVE) |
+ (tx_fifo_id << SCD_QUEUE_STTS_REG_POS_TXF) |
+ (scd_retry << SCD_QUEUE_STTS_REG_POS_WSL) |
+ (scd_retry << SCD_QUEUE_STTS_REG_POS_SCD_ACK) |
SCD_QUEUE_STTS_REG_MSK);
txq->sched_retry = scd_retry;
IWL_DEBUG_INFO("%s %s Queue %d on AC %d\n",
- (active ? "Activete" : "Deactivate"),
+ active ? "Activete" : "Deactivate",
scd_retry ? "BA" : "AC", txq_id, tx_fifo_id);
}
@@ -1718,7 +1709,7 @@ int iwl4965_alive_notify(struct iwl_priv *priv)
SCD_TXFACT_REG_TXFIFO_MASK(0, 7));
iwl4965_set_wr_ptrs(priv, IWL_CMD_QUEUE_NUM, 0);
- iwl4965_txq_ctx_activate(priv,IWL_CMD_QUEUE_NUM);
+ iwl4965_txq_ctx_activate(priv, IWL_CMD_QUEUE_NUM);
iwl4965_tx_queue_set_status(priv, &priv->txq[IWL_CMD_QUEUE_NUM],
IWL_CMD_FIFO_NUM, 0);
/* map qos queues to fifos one-to-one */
@@ -1850,7 +1841,7 @@ int iwl_hw_reg_set_txpower(struct iwl_priv *priv, s8 power)
#define IWL_TX_POWER_CCK_COMPENSATION_B_STEP (9)
#define IWL_TX_POWER_CCK_COMPENSATION_C_STEP (5)
-static s32 iwl4965_math_div_round(s32 num, s32 denom, s32 * res)
+static s32 iwl4965_math_div_round(s32 num, s32 denom, s32 *res)
{
s32 sign = 1;
@@ -3093,21 +3084,21 @@ static void iwl4965_turn_on_agg_for_tid(struct iwl_priv *priv,
spin_lock_irqsave(&priv->lq_mngr.lock, flags);
if (!available_queues) {
- if (auto_agg) {
+ if (auto_agg)
lq->agg_ctrl.tid_retry |= tid_msk;
- } else {
+ else {
lq->agg_ctrl.requested_ba &= ~tid_msk;
lq->agg_ctrl.wait_for_agg_status &= ~tid_msk;
}
} else if ((auto_agg) &&
- ((load <= lq->agg_ctrl.tid_traffic_load_threshold)
- || ((lq->agg_ctrl.wait_for_agg_status & tid_msk)))) {
+ ((load <= lq->agg_ctrl.tid_traffic_load_threshold) ||
+ ((lq->agg_ctrl.wait_for_agg_status & tid_msk))))
lq->agg_ctrl.tid_retry |= tid_msk;
- } else {
+ else {
lq->agg_ctrl.wait_for_agg_status |= tid_msk;
spin_unlock_irqrestore(&priv->lq_mngr.lock, flags);
iwl4965_perform_addba(priv, tid, 0x40,
- lq->agg_ctrl.ba_timeout);
+ lq->agg_ctrl.ba_timeout);
spin_lock_irqsave(&priv->lq_mngr.lock, flags);
}
}
@@ -3122,13 +3113,13 @@ static void iwl4965_turn_on_agg(struct iwl_priv *priv, u8 tid)
lq = (struct iwl_lq_mngr *)&(priv->lq_mngr);
if ((tid < TID_MAX_LOAD_COUNT))
- iwl4965_turn_on_agg_for_tid(priv, lq, lq->agg_ctrl.auto_agg, tid);
+ iwl4965_turn_on_agg_for_tid(priv, lq, lq->agg_ctrl.auto_agg,
+ tid);
else if (tid == TID_ALL_SPECIFIED) {
if (lq->agg_ctrl.requested_ba) {
for (tid = 0; tid < TID_MAX_LOAD_COUNT; tid++)
iwl4965_turn_on_agg_for_tid(priv, lq,
- lq->agg_ctrl.auto_agg,
- tid);
+ lq->agg_ctrl.auto_agg, tid);
} else {
spin_lock_irqsave(&priv->lq_mngr.lock, flags);
lq->agg_ctrl.tid_retry = 0;
@@ -3138,6 +3129,7 @@ static void iwl4965_turn_on_agg(struct iwl_priv *priv, u8 tid)
}
}
+
void iwl4965_turn_off_agg(struct iwl_priv *priv, u8 tid)
{
u32 tid_msk;
@@ -3715,7 +3707,7 @@ struct ieee802_11_elems {
u8 ht_extra_param_len;
};
-static int parse_elems(u8 * start, size_t len, struct ieee802_11_elems *elems)
+static int parse_elems(u8 *start, size_t len, struct ieee802_11_elems *elems)
{
size_t left = len;
u8 *pos = start;
@@ -3792,9 +3784,9 @@ static void iwl4965_update_ps_mode(struct iwl_priv *priv, u16 ps_bit, u8 *addr)
if (sta_id != IWL_INVALID_STATION) {
u8 sta_awake = priv->stations[sta_id].
ps_status == STA_PS_STATUS_WAKE;
- if (sta_awake && ps_bit) {
+ if (sta_awake && ps_bit)
priv->stations[sta_id].ps_status = STA_PS_STATUS_SLEEP;
- } else if (!sta_awake && !ps_bit) {
+ else if (!sta_awake && !ps_bit) {
iwl4965_sta_modify_ps_wake(priv, sta_id);
priv->stations[sta_id].ps_status = STA_PS_STATUS_WAKE;
}
@@ -4074,7 +4066,7 @@ static void iwl4965_rx_reply_rx_phy(struct iwl_priv *priv,
sizeof(struct iwl4965_rx_phy_res));
}
-static void iwl4965_rx_missed_beacon_notif (struct iwl_priv *priv,
+static void iwl4965_rx_missed_beacon_notif(struct iwl_priv *priv,
struct iwl_rx_mem_buffer *rxb)
{
@@ -4099,8 +4091,8 @@ static void iwl4965_rx_missed_beacon_notif (struct iwl_priv *priv,
#ifdef CONFIG_IWLWIFI_HT
#ifdef CONFIG_IWLWIFI_HT_AGG
-static void iwl4965_set_tx_status(struct iwl_priv *priv,int txq_id, int idx,
- u32 status,u32 retry_count, u32 rate)
+static void iwl4965_set_tx_status(struct iwl_priv *priv, int txq_id, int idx,
+ u32 status, u32 retry_count, u32 rate)
{
struct ieee80211_tx_status *tx_status =
&(priv->txq[txq_id].txb[idx].status);
@@ -4110,8 +4102,8 @@ static void iwl4965_set_tx_status(struct iwl_priv *priv,int txq_id, int idx,
}
-static void iwl_sta_modify_enable_tid_tx(struct iwl_priv *priv, int sta_id,
- int tid)
+static void iwl_sta_modify_enable_tid_tx(struct iwl_priv *priv,
+ int sta_id, int tid)
{
unsigned long lock_flags;
@@ -4120,6 +4112,7 @@ static void iwl_sta_modify_enable_tid_tx(struct iwl_priv *priv, int sta_id,
priv->stations[sta_id].sta.tid_disable_tx &= cpu_to_le32(~(1 << tid));
priv->stations[sta_id].sta.mode = STA_CONTROL_MODIFY_MSK;
spin_unlock_irqrestore(&priv->sta_lock, lock_flags);
+
iwl_send_add_station(priv, &priv->stations[sta_id].sta, CMD_ASYNC);
}
@@ -4299,16 +4292,15 @@ int iwl4965_tx_queue_agg_enable(struct iwl_priv *priv, int txq_id, int tx_fifo,
/* supposes that ssn_idx is valid (!= 0xFFF) */
iwl4965_set_wr_ptrs(priv, txq_id, ssn_idx);
- iwl_write_restricted_mem(priv, priv->scd_base_addr +
- SCD_CONTEXT_QUEUE_OFFSET(txq_id),
- (SCD_WIN_SIZE << SCD_QUEUE_CTX_REG1_WIN_SIZE_POS) &
- SCD_QUEUE_CTX_REG1_WIN_SIZE_MSK);
+ iwl_write_restricted_mem(priv,
+ priv->scd_base_addr + SCD_CONTEXT_QUEUE_OFFSET(txq_id),
+ (SCD_WIN_SIZE << SCD_QUEUE_CTX_REG1_WIN_SIZE_POS) &
+ SCD_QUEUE_CTX_REG1_WIN_SIZE_MSK);
iwl_write_restricted_mem(priv, priv->scd_base_addr +
- SCD_CONTEXT_QUEUE_OFFSET(txq_id) +
- sizeof(u32),
- (SCD_FRAME_LIMIT << SCD_QUEUE_CTX_REG2_FRAME_LIMIT_POS) &
- SCD_QUEUE_CTX_REG2_FRAME_LIMIT_MSK);
+ SCD_CONTEXT_QUEUE_OFFSET(txq_id) + sizeof(u32),
+ (SCD_FRAME_LIMIT << SCD_QUEUE_CTX_REG2_FRAME_LIMIT_POS)
+ & SCD_QUEUE_CTX_REG2_FRAME_LIMIT_MSK);
iwl_set_bits_restricted_reg(priv, SCD_INTERRUPT_MASK, (1 << txq_id));
@@ -4352,7 +4344,7 @@ int iwl4965_tx_queue_agg_disable(struct iwl_priv *priv, u16 txq_id,
iwl4965_set_wr_ptrs(priv, txq_id, ssn_idx);
iwl_clear_bits_restricted_reg(priv, SCD_INTERRUPT_MASK, (1 << txq_id));
- iwl4965_txq_ctx_deactivate(priv,txq_id);
+ iwl4965_txq_ctx_deactivate(priv, txq_id);
iwl4965_tx_queue_set_status(priv, &priv->txq[txq_id], tx_fifo, 0);
iwl_release_restricted_access(priv);
@@ -4384,7 +4376,7 @@ int iwl4965_init_hw_rates(struct iwl_priv *priv, struct ieee80211_rate *rates)
* rc80211_simple which is what this driver is currently using.
*
*/
-void iwl4965_add_station(struct iwl_priv *priv, const u8 * addr, int is_ap)
+void iwl4965_add_station(struct iwl_priv *priv, const u8 *addr, int is_ap)
{
int i, r;
struct iwl_link_quality_cmd link_cmd = {
@@ -4404,9 +4396,9 @@ void iwl4965_add_station(struct iwl_priv *priv, const u8 * addr, int is_ap)
r = IWL_RATE_1M_INDEX;
while (i < LINK_QUAL_MAX_RETRY_NUM) {
- if (r >= IWL_FIRST_CCK_RATE && r <= IWL_LAST_CCK_RATE) {
+ if (r >= IWL_FIRST_CCK_RATE && r <= IWL_LAST_CCK_RATE)
table[i].rate_n_flags |= RATE_MCS_CCK_MSK;
- }
+
table[i].s.rate = iwl_rates[r].plcp;
table[i].rate_n_flags |= RATE_MCS_ANT_B_MSK;
table[i].rate_n_flags &= ~RATE_MCS_ANT_A_MSK;
@@ -4524,6 +4516,7 @@ void iwl4965_set_rxon_ht(struct iwl_priv *priv,
ht_info->extension_chan_offset, ht_info->control_chan);
return;
}
+
void iwl4965_set_ht_add_station(struct iwl_priv *priv,
u8 index, u8 need_to_lock)
{
@@ -4627,6 +4620,7 @@ static const u16 default_tid_to_ac[] = {
static int iwl_txq_ctx_activate_free(struct iwl_priv *priv)
{
int txq_id;
+
for (txq_id = 0; txq_id < IWL4965_NUM_QUEUES; txq_id++)
if (!test_and_set_bit(txq_id, &priv->txq_ctx_active_msk))
return txq_id;
@@ -4650,8 +4644,8 @@ int iwl_mac_ht_tx_agg_start(struct ieee80211_hw *hw, u8 *da, u16 tid,
else
return -EINVAL;
- IWL_WARNING("iwl-AGG iwl_mac_ht_tx_agg_start on da=" MAC_FMT " tid=%d\n",
- MAC_ARG(da), tid);
+ IWL_WARNING("iwl-AGG iwl_mac_ht_tx_agg_start on da=" MAC_FMT
+ " tid=%d\n", MAC_ARG(da), tid);
sta_id = iwl_hw_find_station(priv, da);
if (sta_id == IWL_INVALID_STATION)
diff --git a/drivers/net/wireless/iwl-4965.h b/drivers/net/wireless/iwl-4965.h
index 7fa17ee..db4a02e 100644
--- a/drivers/net/wireless/iwl-4965.h
+++ b/drivers/net/wireless/iwl-4965.h
@@ -36,7 +36,7 @@ struct sta_ht_info;
*/
static inline void iwl_eeprom_release_semaphore(struct iwl_priv *priv) {}
-static inline void iwl4965_add_station(struct iwl_priv *priv, const u8 * addr,
+static inline void iwl4965_add_station(struct iwl_priv *priv, const u8 *addr,
int is_ap) {}
static inline void iwl4965_set_rxon_ht(struct iwl_priv *priv,
struct sta_ht_info *ht_info) {}
@@ -77,7 +77,7 @@ extern void iwl_eeprom_release_semaphore(struct iwl_priv *priv);
extern int iwl4965_tx_queue_update_wr_ptr(struct iwl_priv *priv,
struct iwl_tx_queue *txq,
u16 byte_cnt);
-extern void iwl4965_add_station(struct iwl_priv *priv, const u8 * addr,
+extern void iwl4965_add_station(struct iwl_priv *priv, const u8 *addr,
int is_ap);
extern void iwl4965_set_rxon_ht(struct iwl_priv *priv,
struct sta_ht_info *ht_info);
diff --git a/drivers/net/wireless/iwl-base.c b/drivers/net/wireless/iwl-base.c
index 9a5041a..d082a10 100644
--- a/drivers/net/wireless/iwl-base.c
+++ b/drivers/net/wireless/iwl-base.c
@@ -72,11 +72,11 @@ u32 iwl_debug_level;
******************************************************************************/
/* module parameters */
-int iwl_param_disable_hw_scan = 0;
-int iwl_param_debug = 0;
-int iwl_param_disable = 0; /* def: enable radio */
-int iwl_param_antenna = 0; /* def: 0 = both antennas (use diversity) */
-int iwl_param_hwcrypto = 0; /* def: using software encryption */
+int iwl_param_disable_hw_scan;
+int iwl_param_debug;
+int iwl_param_disable; /* def: enable radio */
+int iwl_param_antenna; /* def: 0 = both antennas (use diversity) */
+int iwl_param_hwcrypto; /* def: using software encryption */
int iwl_param_qos_enable = 1;
/*
@@ -293,13 +293,13 @@ void iwl_tx_queue_free(struct iwl_priv *priv, struct iwl_tx_queue *txq)
/* first, empty all BD's */
for (; q->first_empty != q->last_used;
- q->last_used = iwl_queue_inc_wrap(q->last_used, q->n_bd)) {
+ q->last_used = iwl_queue_inc_wrap(q->last_used, q->n_bd))
iwl_hw_tx_queue_free_tfd(priv, txq);
- }
len = sizeof(txq->cmd[0]) * q->n_window;
if (q->id == IWL_CMD_QUEUE_NUM);
- len += IWL_MAX_SCAN_SIZE;
+ len += IWL_MAX_SCAN_SIZE;
+
pci_free_consistent(dev, len, txq->cmd, txq->dma_addr_cmd);
/* free buffers belonging to queue itself */
@@ -329,13 +329,14 @@ const u8 BROADCAST_ADDR[ETH_ALEN] = { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF };
/**************************************************************/
-static u8 iwl_remove_station(struct iwl_priv *priv, const u8 * bssid, int is_ap)
+static u8 iwl_remove_station(struct iwl_priv *priv, const u8 *bssid, int is_ap)
{
int index = IWL_INVALID_STATION;
int i;
unsigned long flags;
spin_lock_irqsave(&priv->sta_lock, flags);
+
if (is_ap) {
index = IWL_AP_ID;
if ((priv->stations[index].used))
@@ -344,17 +345,17 @@ static u8 iwl_remove_station(struct iwl_priv *priv, const u8 * bssid, int is_ap)
index = IWL_BROADCAST_ID;
if ((priv->stations[index].used))
priv->stations[index].used = 0;
- } else
+ } else {
for (i = IWL_STA_ID; i < priv->num_stations + IWL_STA_ID; i++) {
if (priv->stations[i].used &&
- !compare_ether_addr(
- priv->stations[i].sta.sta.addr, bssid)) {
+ !compare_ether_addr(priv->stations[i].sta.sta.addr,
+ bssid)) {
index = i;
priv->stations[index].used = 0;
break;
}
}
-
+ }
if (index != IWL_INVALID_STATION) {
if (priv->num_stations > 0)
priv->num_stations--;
@@ -371,12 +372,12 @@ static void iwl_clear_stations_table(struct iwl_priv *priv)
spin_lock_irqsave(&priv->sta_lock, flags);
priv->num_stations = 0;
- memset(priv->stations, 0,
- IWL_STATION_COUNT * sizeof(struct iwl_station_entry));
+ memset(priv->stations, 0, sizeof(priv->stations));
+
spin_unlock_irqrestore(&priv->sta_lock, flags);
}
-u8 iwl_add_station(struct iwl_priv *priv, const u8 * bssid, int is_ap, u8 flags)
+u8 iwl_add_station(struct iwl_priv *priv, const u8 *bssid, int is_ap, u8 flags)
{
int i = IWL_STATION_COUNT;
int index = IWL_INVALID_STATION;
@@ -398,7 +399,7 @@ u8 iwl_add_station(struct iwl_priv *priv, const u8 * bssid, int is_ap, u8 flags)
!compare_ether_addr(priv->stations[index].sta.sta.addr,
bssid))
goto done;
- } else
+ } else {
for (i = IWL_STA_ID; i < priv->num_stations + IWL_STA_ID; i++) {
if (priv->stations[i].used &&
!compare_ether_addr(priv->stations[i].sta.sta.addr,
@@ -409,6 +410,7 @@ u8 iwl_add_station(struct iwl_priv *priv, const u8 * bssid, int is_ap, u8 flags)
index == IWL_INVALID_STATION)
index = i;
}
+ }
if (index != IWL_INVALID_STATION)
i = index;
@@ -437,8 +439,8 @@ u8 iwl_add_station(struct iwl_priv *priv, const u8 * bssid, int is_ap, u8 flags)
station->sta.station_flags |= STA_FLG_TX_RATE_MSK;
- station->current_rate.rate_n_flags = le16_to_cpu(
- station->sta.rate_n_flags);
+ station->current_rate.rate_n_flags =
+ le16_to_cpu(station->sta.rate_n_flags);
#endif
#if IWL == 4965
@@ -822,18 +824,18 @@ int iwl_send_statistics_request(struct iwl_priv *priv)
* NOTE: mutex must be held before calling the this fnction
*/
static int iwl_rxon_add_station(struct iwl_priv *priv,
- const u8 * addr, int is_ap)
+ const u8 *addr, int is_ap)
{
- u8 i;
+ u8 rc;
/* Remove this station if it happens to already exist */
iwl_remove_station(priv, addr, is_ap);
- i = iwl_add_station(priv, addr, is_ap, 0);
+ rc = iwl_add_station(priv, addr, is_ap, 0);
iwl4965_add_station(priv, addr, is_ap);
- return i;
+ return rc;
}
/**
@@ -1470,8 +1472,8 @@ static void iwl_free_frame(struct iwl_priv *priv, struct iwl_frame *frame)
list_add(&frame->list, &priv->free_frames);
}
-int iwl_fill_beacon_frame(struct iwl_priv *priv,
- struct ieee80211_hdr *hdr, const u8 * dest, int left)
+int iwl_fill_beacon_frame(struct iwl_priv *priv, struct ieee80211_hdr *hdr,
+ const u8 *dest, int left)
{
if (!iwl_is_associated(priv) || !priv->ibss_beacon ||
@@ -1528,7 +1530,7 @@ static int iwl_send_beacon_cmd(struct iwl_priv *priv)
*
******************************************************************************/
-static void get_eeprom_mac(struct iwl_priv *priv, u8 * mac)
+static void get_eeprom_mac(struct iwl_priv *priv, u8 *mac)
{
memcpy(mac, priv->eeprom.mac_address, 6);
}
@@ -1678,9 +1680,9 @@ void iwl_report_frame(struct iwl_priv *priv,
if (to_us && (frame_ctl & ~IEEE80211_FCTL_PROTECTED) ==
(IEEE80211_FCTL_FROMDS | IEEE80211_FTYPE_DATA)) {
dataframe = 1;
- if (!group100) {
+ if (!group100)
print_summary = 1; /* print each frame */
- } else if (priv->framecnt_to_us < 100) {
+ else if (priv->framecnt_to_us < 100) {
priv->framecnt_to_us++;
print_summary = 0;
} else {
@@ -1731,12 +1733,12 @@ void iwl_report_frame(struct iwl_priv *priv,
/* print frame summary.
* MAC addresses show just the last byte (for brevity),
* but you can hack it to show more, if you'd like to. */
- if (dataframe) {
+ if (dataframe)
IWL_DEBUG_RX("%s: mhd=0x%04x, dst=0x%02x, "
"len=%u, rssi=%d, chnl=%d, rate=%u, \n",
title, frame_ctl, header->addr1[5],
length, rssi, channel, rate);
- } else {
+ else {
/* src/dst addresses assume managed mode */
IWL_DEBUG_RX("%s: 0x%04x, dst=0x%02x, "
"src=0x%02x, rssi=%u, tim=%lu usec, "
@@ -1766,7 +1768,7 @@ static void iwl_unset_hw_setting(struct iwl_priv *priv)
*
* return : set the bit for each supported rate insert in ie
*/
-static u16 iwl_supported_rate_to_ie(u8 * ie, u16 supported_rate,
+static u16 iwl_supported_rate_to_ie(u8 *ie, u16 supported_rate,
u16 basic_rate, int max_count)
{
u16 ret_rates = 0, bit;
@@ -2046,7 +2048,7 @@ static void iwl_activate_qos(struct iwl_priv *priv, u8 force)
#define NOSLP 0, 0, 0
#define SLP IWL_POWER_DRIVER_ALLOW_SLEEP_MSK, 0, 0
#endif
-#define SLP_TIMEOUT(T) __constant_cpu_to_le32((T) * MSEC_TO_USEC)
+#define SLP_TIMEOUT(T) __constant_cpu_to_le32((T) * MSEC_TO_USEC)
#define SLP_VEC(X0, X1, X2, X3, X4) {__constant_cpu_to_le32(X0), \
__constant_cpu_to_le32(X1), \
__constant_cpu_to_le32(X2), \
@@ -2068,11 +2070,15 @@ static struct iwl_power_vec_entry range_0[IWL_POWER_AC] = {
/* for tim > 10 */
static struct iwl_power_vec_entry range_1[IWL_POWER_AC] = {
{{NOSLP, SLP_TIMEOUT(0), SLP_TIMEOUT(0), SLP_VEC(0, 0, 0, 0, 0)}, 0},
- {{SLP, SLP_TIMEOUT(200), SLP_TIMEOUT(500), SLP_VEC(1, 2, 3, 4, 0xFF)}, 0},
- {{SLP, SLP_TIMEOUT(200), SLP_TIMEOUT(300), SLP_VEC(2, 4, 6, 7, 0xFF)}, 0},
- {{SLP, SLP_TIMEOUT(50), SLP_TIMEOUT(100), SLP_VEC(2, 6, 9, 9, 0xFF)}, 0},
+ {{SLP, SLP_TIMEOUT(200), SLP_TIMEOUT(500),
+ SLP_VEC(1, 2, 3, 4, 0xFF)}, 0},
+ {{SLP, SLP_TIMEOUT(200), SLP_TIMEOUT(300),
+ SLP_VEC(2, 4, 6, 7, 0xFF)}, 0},
+ {{SLP, SLP_TIMEOUT(50), SLP_TIMEOUT(100),
+ SLP_VEC(2, 6, 9, 9, 0xFF)}, 0},
{{SLP, SLP_TIMEOUT(50), SLP_TIMEOUT(25), SLP_VEC(2, 7, 9, 9, 0xFF)}, 0},
- {{SLP, SLP_TIMEOUT(25), SLP_TIMEOUT(25), SLP_VEC(4, 7, 10, 10, 0xFF)}, 0}
+ {{SLP, SLP_TIMEOUT(25), SLP_TIMEOUT(25),
+ SLP_VEC(4, 7, 10, 10, 0xFF)}, 0}
};
int iwl_power_init_handle(struct iwl_priv *priv)
@@ -2863,7 +2869,6 @@ static int iwl_tx_skb(struct iwl_priv *priv,
#endif /* CONFIG_IWLWIFI_HT_AGG */
#endif /* CONFIG_IWLWIFI_HT */
#endif
-
}
txq = &priv->txq[txq_id];
@@ -2895,13 +2900,13 @@ static int iwl_tx_skb(struct iwl_priv *priv,
len_org = len;
len = (len + 3) & ~3;
- if (len_org != len) {
+ if (len_org != len)
len_org = 1;
- } else
+ else
len_org = 0;
- txcmd_phys =
- txq->dma_addr_cmd + sizeof(struct iwl_cmd) * idx +
- offsetof(struct iwl_cmd, hdr);
+
+ txcmd_phys = txq->dma_addr_cmd + sizeof(struct iwl_cmd) * idx +
+ offsetof(struct iwl_cmd, hdr);
iwl_hw_tx_queue_attach_buffer_to_tfd(priv, tfd, txcmd_phys, len);
@@ -2911,13 +2916,11 @@ static int iwl_tx_skb(struct iwl_priv *priv,
/* 802.11 null functions have no payload... */
len = skb->len - hdr_len;
if (len) {
- phys_addr = pci_map_single(priv->pci_dev,
- skb->data + hdr_len,
- len, PCI_DMA_TODEVICE);
+ phys_addr = pci_map_single(priv->pci_dev, skb->data + hdr_len,
+ len, PCI_DMA_TODEVICE);
iwl_hw_tx_queue_attach_buffer_to_tfd(priv, tfd, phys_addr, len);
}
-
#if IWL == 3945
/* If there is no payload, then only one TFD is used */
if (!len)
@@ -2946,9 +2949,9 @@ static int iwl_tx_skb(struct iwl_priv *priv,
out_cmd->cmd.tx.tx_flags &= ~TX_CMD_FLG_ANT_B_MSK;
#endif
- if (!(ieee80211_get_morefrag(hdr))) {
+ if (!ieee80211_get_morefrag(hdr)) {
txq->need_update = 1;
- if ( qc ) {
+ if (qc) {
u8 tid = (u8)(le16_to_cpu(*qc) & 0xf);
priv->stations[sta_id].tid[tid].seq_number =
seq_number;
@@ -3018,10 +3021,9 @@ static void iwl_set_rate(struct iwl_priv *priv)
priv->active_rate |= (1 << rate->val);
if (rate->flags & IEEE80211_RATE_BASIC)
priv->active_rate_basic |= (1 << rate->val);
- } else {
+ } else
IWL_DEBUG_RATE("Not adding rate %d (plcp %d)\n",
rate->val, iwl_rates[rate->val].plcp);
- }
}
IWL_DEBUG_RATE("Set active_rate = %0x, active_rate_basic = %0x\n",
@@ -3503,8 +3505,8 @@ static int iwl_is_tx_success(u32 status)
*
******************************************************************************/
#if IWL == 4965
-#ifdef CONFIG_IWLWIFI_HT
-#ifdef CONFIG_IWLWIFI_HT_AGG
+#ifdef CONFIG_IWLWIFI_HT
+#ifdef CONFIG_IWLWIFI_HT_AGG
static inline int iwl_get_ra_sta_id(struct iwl_priv *priv,
struct ieee80211_hdr *hdr)
@@ -3546,24 +3548,23 @@ int iwl4965_tx_status_reply_tx(struct iwl_priv *priv,
int txq_id, idx;
u16 seq;
- if (agg->wait_for_ba) {
+ if (agg->wait_for_ba)
IWL_DEBUG_TX_REPLY("got tx repsons w/o back\n");
- }
-
agg->frame_count = tx_resp->frame_count;
agg->start_idx = start_idx;
agg->rate_n_flags = le32_to_cpu(tx_resp->rate_n_flags);
agg->bitmap0 = agg->bitmap1 = 0;
+
if (agg->frame_count == 1) {
status = le32_to_cpu(frame_status[0]);
seq = status >> 16;
idx = SEQ_TO_INDEX(seq);
txq_id = SEQ_TO_QUEUE(seq);
-/* FIXME: code repetition */
+ /* FIXME: code repetition */
IWL_DEBUG_TX_REPLY("FrameCnt = %d, StartIdx=%d idx=%d\n",
- agg->frame_count, agg->start_idx, idx);
+ agg->frame_count, agg->start_idx, idx);
tx_status = &(priv->txq[txq_id].txb[idx].status);
tx_status->retry_count = tx_resp->failure_frame;
@@ -3575,9 +3576,7 @@ int iwl4965_tx_status_reply_tx(struct iwl_priv *priv,
IEEE80211_TX_STATUS_ACK : 0;
tx_status->control.tx_rate =
iwl_hw_get_rate_n_flags(tx_resp->rate_n_flags);
-
-/* FIXME: code repetition end */
-
+ /* FIXME: code repetition end */
IWL_DEBUG_TX_REPLY("1 Frame 0x%x idx %d failure :%d\n",
status & 0xff, idx, tx_resp->failure_frame);
@@ -3588,16 +3587,15 @@ int iwl4965_tx_status_reply_tx(struct iwl_priv *priv,
} else {
u64 bitmap = 0;
int start = agg->start_idx;
- for (i = 0; i < agg->frame_count; i++) {
+ for (i = 0; i < agg->frame_count; i++) {
status = le32_to_cpu(frame_status[i]);
seq = status >> 16;
idx = SEQ_TO_INDEX(seq);
txq_id = SEQ_TO_QUEUE(seq);
- if (status &
- (AGG_TX_STATE_FEW_BYTES_MSK|
- AGG_TX_STATE_ABORT_MSK))
+ if (status & (AGG_TX_STATE_FEW_BYTES_MSK |
+ AGG_TX_STATE_ABORT_MSK))
continue;
IWL_DEBUG_TX_REPLY("FrameCnt = %d, txq_id=%d idx=%d\n",
@@ -3613,7 +3611,6 @@ int iwl4965_tx_status_reply_tx(struct iwl_priv *priv,
return -1;
}
-
IWL_DEBUG_TX_REPLY("AGG Frame i=%d idx %d seq=%d\n",
i, idx, SEQ_TO_SN(hdr->seq_ctrl));
@@ -3623,9 +3620,9 @@ int iwl4965_tx_status_reply_tx(struct iwl_priv *priv,
bitmap = bitmap << sh;
sh = 0;
start = idx;
- } else if ( sh < -64) {
+ } else if ( sh < -64)
sh = 0xff - (start - idx);
- } else if (sh < 0) {
+ else if (sh < 0) {
sh = start - idx;
start = idx;
bitmap = bitmap << sh;
@@ -3641,9 +3638,8 @@ int iwl4965_tx_status_reply_tx(struct iwl_priv *priv,
agg->start_idx = start;
agg->rate_n_flags = cpu_to_le32(tx_resp->rate_n_flags);
IWL_DEBUG_TX_REPLY("Frames %d start_idx=%d bitmap=0x%x\n",
- agg->frame_count,
- agg->start_idx,
- agg->bitmap0);
+ agg->frame_count, agg->start_idx,
+ agg->bitmap0);
if (bitmap)
agg->wait_for_ba = 1;
@@ -3666,8 +3662,8 @@ static void iwl_rx_reply_tx(struct iwl_priv *priv,
struct iwl_tx_resp *tx_resp = (void *)&pkt->u.raw[0];
u32 status = le32_to_cpu(tx_resp->status);
#if IWL == 4965
-#ifdef CONFIG_IWLWIFI_HT
-#ifdef CONFIG_IWLWIFI_HT_AGG
+#ifdef CONFIG_IWLWIFI_HT
+#ifdef CONFIG_IWLWIFI_HT_AGG
int tid, sta_id;
#endif
#endif
@@ -3682,16 +3678,16 @@ static void iwl_rx_reply_tx(struct iwl_priv *priv,
}
#if IWL == 4965
-#ifdef CONFIG_IWLWIFI_HT
-#ifdef CONFIG_IWLWIFI_HT_AGG
+#ifdef CONFIG_IWLWIFI_HT
+#ifdef CONFIG_IWLWIFI_HT_AGG
if (txq->sched_retry) {
const u32 scd_ssn = iwl_get_scd_ssn(tx_resp);
- struct ieee80211_hdr *hdr = iwl_tx_queue_get_hdr(priv, txq_id,
- index);
+ struct ieee80211_hdr *hdr =
+ iwl_tx_queue_get_hdr(priv, txq_id, index);
struct iwl_ht_agg *agg = NULL;
__le16 *qc = ieee80211_get_qos_ctrl(hdr);
- if(qc == NULL) {
+ if (qc == NULL) {
IWL_ERROR("BUG_ON qc is null!!!!\n");
return;
}
@@ -3715,8 +3711,8 @@ static void iwl_rx_reply_tx(struct iwl_priv *priv,
if (txq->q.last_used != (scd_ssn & 0xff)) {
index = iwl_queue_dec_wrap(scd_ssn & 0xff, txq->q.n_bd);
- IWL_DEBUG_TX_REPLY("Retry scheduler reclaim scd_ssn %d index %d\n",
- scd_ssn , index);
+ IWL_DEBUG_TX_REPLY("Retry scheduler reclaim scd_ssn "
+ "%d index %d\n", scd_ssn , index);
iwl_tx_queue_reclaim(priv, txq_id, index);
}
} else {
@@ -3734,31 +3730,27 @@ static void iwl_rx_reply_tx(struct iwl_priv *priv,
iwl_is_tx_success(status) ? IEEE80211_TX_STATUS_ACK : 0;
#if IWL == 3945
-
tx_status->control.tx_rate = iwl_rate_index_from_plcp(tx_resp->rate);
IWL_DEBUG_TX("Tx queue %d Status %s (0x%08x) plcp rate %d retries %d\n",
txq_id, iwl_get_tx_fail_reason(status), status,
tx_resp->rate, tx_resp->failure_frame);
-
#elif IWL == 4965
-
tx_status->control.tx_rate =
iwl_hw_get_rate_n_flags(tx_resp->rate_n_flags);
IWL_DEBUG_TX("Tx queue %d Status %s (0x%08x) rate_n_flags 0x%x "
- "retries %d\n",
- txq_id, iwl_get_tx_fail_reason(status),
- status, le32_to_cpu(tx_resp->rate_n_flags),
- tx_resp->failure_frame);
+ "retries %d\n", txq_id, iwl_get_tx_fail_reason(status),
+ status, le32_to_cpu(tx_resp->rate_n_flags),
+ tx_resp->failure_frame);
#endif
IWL_DEBUG_TX_REPLY("Tx queue reclaim %d\n", index);
if (index != -1)
iwl_tx_queue_reclaim(priv, txq_id, index);
#if IWL == 4965
-#ifdef CONFIG_IWLWIFI_HT
-#ifdef CONFIG_IWLWIFI_HT_AGG
+#ifdef CONFIG_IWLWIFI_HT
+#ifdef CONFIG_IWLWIFI_HT_AGG
}
#endif /* CONFIG_IWLWIFI_HT_AGG */
#endif /* CONFIG_IWLWIFI_HT */
@@ -3770,7 +3762,7 @@ static void iwl_rx_reply_tx(struct iwl_priv *priv,
static void iwl_rx_reply_alive(struct iwl_priv *priv,
- struct iwl_rx_mem_buffer *rxb)
+ struct iwl_rx_mem_buffer *rxb)
{
struct iwl_rx_packet *pkt = (void *)rxb->skb->data;
struct iwl_alive_resp *palive;
@@ -4550,16 +4542,16 @@ int iwl_calc_sig_qual(int rssi_dbm, int noise_dbm)
* This formula is a least squares fit of data points collected and
* compared with a reference system that had a percentage (%) display
* for signal quality. */
- } else {
- sig_qual =
- (100 * (RSSI_RANGE * RSSI_RANGE) -
- degradation * (15 * RSSI_RANGE + 62 * degradation)) /
- (RSSI_RANGE * RSSI_RANGE);
- }
+ } else
+ sig_qual = (100 * (RSSI_RANGE * RSSI_RANGE) -
+ degradation * (15 * RSSI_RANGE + 62 * degradation)) /
+ (RSSI_RANGE * RSSI_RANGE);
+
if (sig_qual > 100)
sig_qual = 100;
else if (sig_qual < 1)
sig_qual = 0;
+
return sig_qual;
}
@@ -4687,10 +4679,9 @@ int iwl_tx_queue_update_write_ptr(struct iwl_priv *priv,
/* else not in power-save mode, uCode will never sleep when we're
* trying to tx (during RFKILL, we're not trying to tx). */
- } else {
+ } else
iwl_write32(priv, HBUS_TARG_WRPTR,
txq->q.first_empty | (txq_id << 8));
- }
txq->need_update = 0;
@@ -4698,7 +4689,6 @@ int iwl_tx_queue_update_write_ptr(struct iwl_priv *priv,
}
#ifdef CONFIG_IWLWIFI_DEBUG
-
static void iwl_print_rx_config_cmd(struct iwl_rxon_cmd *rxon)
{
IWL_DEBUG_RADIO("RX CONFIG:\n");
@@ -4722,7 +4712,6 @@ static void iwl_print_rx_config_cmd(struct iwl_rxon_cmd *rxon)
MAC_ARG(rxon->bssid_addr));
IWL_DEBUG_RADIO("u16 assoc_id: 0x%x\n", le16_to_cpu(rxon->assoc_id));
}
-
#endif
static void iwl_enable_interrupts(struct iwl_priv *priv)
@@ -4887,9 +4876,9 @@ static void iwl_print_event_log(struct iwl_priv *priv, u32 start_idx,
ptr += sizeof(u32);
time = iwl_read_restricted_mem(priv, ptr);
ptr += sizeof(u32);
- if (mode == 0) {
+ if (mode == 0)
IWL_ERROR("0x%08x\t%04u\n", time, ev); /* data, ev */
- } else {
+ else {
data = iwl_read_restricted_mem(priv, ptr);
ptr += sizeof(u32);
IWL_ERROR("%010u\t0x%08x\t%04u\n", time, data, ev);
@@ -4938,11 +4927,10 @@ static void iwl_dump_nic_event_log(struct iwl_priv *priv)
size, num_wraps);
/* if uCode has wrapped back to top of log, start at the oldest entry,
- * i.e the next one that uCode would fill. */
- if (num_wraps) {
+ * i.e the next one that uCode would fill. */
+ if (num_wraps)
iwl_print_event_log(priv, next_entry,
capacity - next_entry, mode);
- }
/* (then/else) start at top of log */
iwl_print_event_log(priv, 0, next_entry, mode);
@@ -5188,8 +5176,8 @@ static irqreturn_t iwl_isr(int irq, void *data)
goto none;
}
- IWL_DEBUG_ISR ("ISR inta 0x%08x, enabled 0x%08x, fh 0x%08x\n",
- inta, inta_mask, inta_fh);
+ IWL_DEBUG_ISR("ISR inta 0x%08x, enabled 0x%08x, fh 0x%08x\n",
+ inta, inta_mask, inta_fh);
/* iwl_irq_tasklet() will service interrupts and re-enable them */
tasklet_schedule(&priv->irq_tasklet);
@@ -5612,9 +5600,9 @@ static int iwl_get_channels_for_scan(struct iwl_priv *priv, int phymode,
/*scan_pwr_info->tpc.tx_gain; */
if ((phymode == MODE_IEEE80211A) ||
- (phymode == MODE_ATHEROS_TURBO)) {
+ (phymode == MODE_ATHEROS_TURBO))
scan_ch->tpc.tx_gain = ((1 << 5) | (3 << 3)) | 3;
- } else {
+ else {
scan_ch->tpc.tx_gain = ((1 << 5) | (5 << 3));
/* NOTE: if we were doing 6Mb OFDM for scans we'd use
* power level
@@ -5665,7 +5653,7 @@ static void iwl_init_hw_rates(struct iwl_priv *priv,
* which is CCK | PREAMBLE2
*/
rates[i].flags |= (iwl_rates[i].plcp == 10) ?
- IEEE80211_RATE_CCK : IEEE80211_RATE_CCK_2;
+ IEEE80211_RATE_CCK : IEEE80211_RATE_CCK_2;
}
/* Set up which ones are basic rates... */
@@ -5966,7 +5954,7 @@ static int iwl_verify_inst_full(struct iwl_priv *priv, __le32 * image, u32 len)
* using sample data 100 bytes apart. If these sample points are good,
* it's a pretty good bet that everything between them is good, too.
*/
-static int iwl_verify_inst_sparse(struct iwl_priv *priv, __le32 * image, u32 len)
+static int iwl_verify_inst_sparse(struct iwl_priv *priv, __le32 *image, u32 len)
{
u32 val;
int rc = 0;
@@ -6009,7 +5997,7 @@ static int iwl_verify_inst_sparse(struct iwl_priv *priv, __le32 * image, u32 len
* iwl_verify_ucode - determine which instruction image is in SRAM,
* and verify its contents
*/
-static int iwl_verify_ucode(struct iwl_priv * priv)
+static int iwl_verify_ucode(struct iwl_priv *priv)
{
__le32 *image;
u32 len;
@@ -6055,7 +6043,7 @@ static int iwl_verify_ucode(struct iwl_priv * priv)
/* check contents of special bootstrap uCode SRAM */
-static int iwl_verify_bsm(struct iwl_priv * priv)
+static int iwl_verify_bsm(struct iwl_priv *priv)
{
__le32 *image = priv->ucode_boot.v_addr;
u32 len = priv->ucode_boot.len;
@@ -6117,7 +6105,7 @@ static int iwl_verify_bsm(struct iwl_priv * priv)
* the runtime uCode instructions and the backup data cache into SRAM,
* and re-launches the runtime uCode from where it left off.
*/
-static int iwl_load_bsm(struct iwl_priv * priv)
+static int iwl_load_bsm(struct iwl_priv *priv)
{
__le32 *image = priv->ucode_boot.v_addr;
u32 len = priv->ucode_boot.len;
@@ -6164,7 +6152,8 @@ static int iwl_load_bsm(struct iwl_priv * priv)
for (reg_offset = BSM_SRAM_LOWER_BOUND;
reg_offset < BSM_SRAM_LOWER_BOUND + len;
reg_offset += sizeof(u32), image++)
- _iwl_write_restricted_reg(priv, reg_offset, le32_to_cpu( *image));
+ _iwl_write_restricted_reg(priv, reg_offset,
+ le32_to_cpu(*image));
rc = iwl_verify_bsm(priv);
if (rc) {
@@ -6648,12 +6637,12 @@ static void iwl_alive_start(struct iwl_priv *priv)
iwl_send_power_mode(priv, IWL_POWER_LEVEL(priv->power_mode));
- if (iwl_is_associated(priv)) {
+ if (iwl_is_associated(priv)) {
struct iwl_rxon_cmd *active_rxon =
(struct iwl_rxon_cmd *)(&priv->active_rxon);
memcpy(&priv->staging_rxon, &priv->active_rxon,
- sizeof(priv->staging_rxon));
+ sizeof(priv->staging_rxon));
active_rxon->filter_flags &= ~RXON_FILTER_ASSOC_MSK;
} else {
/* Initialize our rx_config data */
@@ -7087,9 +7076,8 @@ static void iwl_bg_request_scan(struct work_struct *data)
scan->direct_scan[0].len = priv->essid_len;
memcpy(scan->direct_scan[0].ssid, priv->essid, priv->essid_len);
direct_mask = 1;
- } else {
+ } else
direct_mask = 0;
- }
/* We don't build a direct scan probe request; the uCode will do
* that based on the direct_mask added to each channel entry */
@@ -7621,9 +7609,9 @@ static int iwl_mac_config_interface(struct ieee80211_hw *hw, int if_id,
IWL_DEBUG_MAC80211("bssid was set to: " MAC_FMT "\n",
MAC_ARG(conf->bssid));
}
- if (priv->ibss_beacon) {
+ if (priv->ibss_beacon)
dev_kfree_skb(priv->ibss_beacon);
- }
+
priv->ibss_beacon = conf->beacon;
}
@@ -7700,7 +7688,7 @@ static void iwl_mac_remove_interface(struct ieee80211_hw *hw,
}
#define IWL_DELAY_NEXT_SCAN (HZ*2)
-static int iwl_mac_hw_scan(struct ieee80211_hw *hw, u8 * ssid, size_t len)
+static int iwl_mac_hw_scan(struct ieee80211_hw *hw, u8 *ssid, size_t len)
{
int rc = 0;
unsigned long flags;
@@ -7750,7 +7738,7 @@ static int iwl_mac_hw_scan(struct ieee80211_hw *hw, u8 * ssid, size_t len)
return rc;
}
-static int iwl_mac_set_key(struct ieee80211_hw *hw, set_key_cmd cmd, u8 * addr,
+static int iwl_mac_set_key(struct ieee80211_hw *hw, set_key_cmd cmd, u8 *addr,
struct ieee80211_key_conf *key, int aid)
{
struct iwl_priv *priv = hw->priv;
@@ -8051,7 +8039,7 @@ union ht_cap_info {
u16 sig_txop_protection_support :1;
};
u16 val;
-}__attribute__ ((packed));
+} __attribute__ ((packed));
union ht_param_info{
struct {
@@ -8060,9 +8048,9 @@ union ht_param_info{
u8 reserved :3;
};
u8 val;
-}__attribute__ ((packed));
+} __attribute__ ((packed));
-union ht_exra_param_info{
+union ht_exra_param_info {
struct {
u8 ext_chan_offset :2;
u8 tx_chan_width :1;
@@ -8071,7 +8059,7 @@ union ht_exra_param_info{
u8 service_interval_granularity :3;
};
u8 val;
-}__attribute__ ((packed));
+} __attribute__ ((packed));
union ht_operation_mode{
struct {
@@ -8080,7 +8068,7 @@ union ht_operation_mode{
u16 reserved :13;
};
u16 val;
-}__attribute__ ((packed));
+} __attribute__ ((packed));
static int sta_ht_info_init(struct ieee80211_ht_capability *ht_cap,
@@ -8361,9 +8349,9 @@ static ssize_t store_flags(struct device *d,
mutex_lock(&priv->mutex);
if (priv->staging_rxon.flags != flags) {
/* Cancel any currently running scans... */
- if (iwl_scan_cancel(priv, 100)) {
+ if (iwl_scan_cancel(priv, 100))
IWL_WARNING("Could not cancel scan.\n");
- } else {
+ else {
IWL_DEBUG_INFO("Committing rxon.flags = 0x%04X\n",
flags);
priv->staging_rxon.flags = flags;
@@ -8395,9 +8383,9 @@ static ssize_t store_filter_flags(struct device *d,
mutex_lock(&priv->mutex);
if (priv->staging_rxon.filter_flags != filter_flags) {
/* Cancel any currently running scans... */
- if (iwl_scan_cancel(priv, 100)) {
+ if (iwl_scan_cancel(priv, 100))
IWL_WARNING("Could not cancel scan.\n");
- } else {
+ else {
IWL_DEBUG_INFO("Committing rxon.filter_flags = "
"0x%04X\n", filter_flags);
priv->staging_rxon.filter_flags = filter_flags;
@@ -8449,9 +8437,9 @@ static ssize_t store_tune(struct device *d,
}
/* Cancel any currently running scans... */
- if (iwl_scan_cancel(priv, 100)) {
+ if (iwl_scan_cancel(priv, 100))
IWL_WARNING("Could not cancel scan.\n");
- } else {
+ else {
IWL_DEBUG_INFO("Committing phymode and "
"rxon.channel = %d %d\n",
phymode, channel);
@@ -8708,7 +8696,7 @@ static ssize_t show_channels(struct device *d,
"Displaying %d channels in 2.4GHz band "
"(802.11bg):\n", count);
- for (i = 0; i < count; i++) {
+ for (i = 0; i < count; i++)
len += sprintf(&buf[len], "%d: %ddBm: BSS%s%s, %s.\n",
channels[i].chan,
channels[i].power_level,
@@ -8723,7 +8711,6 @@ static ssize_t show_channels(struct device *d,
channels[i].
flag & IEEE80211_CHAN_W_ACTIVE_SCAN ?
"active/passive" : "passive only");
- }
hw_mode = iwl_get_hw_mode(priv, MODE_IEEE80211A);
if (hw_mode) {
@@ -8734,12 +8721,10 @@ static ssize_t show_channels(struct device *d,
count = 0;
}
- len +=
- sprintf(&buf[len],
- "Displaying %d channels in 5.2GHz band "
- "(802.11a):\n", count);
+ len += sprintf(&buf[len], "Displaying %d channels in 5.2GHz band "
+ "(802.11a):\n", count);
- for (i = 0; i < count; i++) {
+ for (i = 0; i < count; i++)
len += sprintf(&buf[len], "%d: %ddBm: BSS%s%s, %s.\n",
channels[i].chan,
channels[i].power_level,
@@ -8754,7 +8739,6 @@ static ssize_t show_channels(struct device *d,
channels[i].
flag & IEEE80211_CHAN_W_ACTIVE_SCAN ?
"active/passive" : "passive only");
- }
return len;
}
diff --git a/drivers/net/wireless/iwl-helpers.h b/drivers/net/wireless/iwl-helpers.h
index 94dbb38..c0ea48e 100644
--- a/drivers/net/wireless/iwl-helpers.h
+++ b/drivers/net/wireless/iwl-helpers.h
@@ -314,9 +314,8 @@ static inline const char *iwl_escape_essid(const char *essid, u8 essid_len)
*d++ = '\\';
*d++ = '0';
s++;
- } else {
+ } else
*d++ = *s++;
- }
}
*d = '\0';
return escaped;
@@ -334,7 +333,7 @@ static inline unsigned long elapsed_jiffies(unsigned long start,
static inline int snprint_line(char *buf, size_t count,
- const u8 * data, u32 len, u32 ofs)
+ const u8 *data, u32 len, u32 ofs)
{
int out, i, j, l;
char c;
diff --git a/drivers/net/wireless/iwl-io.h b/drivers/net/wireless/iwl-io.h
index e870cd8..0ae031a 100644
--- a/drivers/net/wireless/iwl-io.h
+++ b/drivers/net/wireless/iwl-io.h
@@ -178,10 +178,9 @@ static inline int _iwl_grab_restricted_access(struct iwl_priv *priv)
IWL_DEBUG_RF_KILL("Wait for complete power-down, "
"gpctl = 0x%08x\n", gp_ctl);
mdelay(10);
- } else {
+ } else
IWL_DEBUG_RF_KILL("power-down complete, "
- "gpctl = 0x%08x\n", gp_ctl);
- }
+ "gpctl = 0x%08x\n", gp_ctl);
}
/* this bit wakes up the NIC */
@@ -268,7 +267,7 @@ static inline u32 __iwl_read_restricted(const char *f, u32 l,
#define iwl_read_restricted(p, r) _iwl_read_restricted(p, r)
#endif
-static void inline _iwl_write_restricted(struct iwl_priv *priv,
+static inline void _iwl_write_restricted(struct iwl_priv *priv,
u32 reg, u32 value)
{
_iwl_write32(priv, reg, value);
@@ -285,9 +284,10 @@ static void __iwl_write_restricted(u32 line,
__iwl_write_restricted(__LINE__, priv, reg, value)
static inline void iwl_write_buffer_restricted(struct iwl_priv *priv,
- u32 reg, u32 len, u32 * values)
+ u32 reg, u32 len, u32 *values)
{
u32 count = sizeof(u32);
+
if ((priv != NULL) && (values != NULL)) {
for (; 0 < len; len -= count, reg += count, values++)
_iwl_write_restricted(priv, reg, *values);
@@ -308,19 +308,19 @@ static inline int _iwl_poll_restricted_bit(struct iwl_priv *priv,
return -ETIMEDOUT;
}
+
static inline int __iwl_poll_restricted_bit(const char *f, u32 l,
struct iwl_priv *priv,
u32 addr, u32 mask, int timeout)
{
int rc = _iwl_poll_restricted_bit(priv, addr, mask, timeout);
+
if (unlikely(rc == -ETIMEDOUT))
- IWL_DEBUG_IO
- ("poll_restricted_bit(0x%08X, 0x%08X) - timedout - %s %d\n",
- addr, mask, f, l);
+ IWL_DEBUG_IO("poll_restricted_bit(0x%08X, 0x%08X) - "
+ "timedout - %s %d\n", addr, mask, f, l);
else
- IWL_DEBUG_IO
- ("poll_restricted_bit(0x%08X, 0x%08X) = 0x%08X - %s %d\n",
- addr, mask, rc, f, l);
+ IWL_DEBUG_IO("poll_restricted_bit(0x%08X, 0x%08X) = 0x%08X "
+ "- %s %d\n", addr, mask, rc, f, l);
return rc;
}
@@ -383,7 +383,7 @@ static inline void __iwl_set_bits_restricted_reg(u32 line, struct iwl_priv
#define _iwl_set_bits_mask_restricted_reg(priv, reg, bits, mask) \
_iwl_write_restricted_reg( \
priv, reg, ((_iwl_read_restricted_reg(priv, reg) & mask) | bits))
-static void inline __iwl_set_bits_mask_restricted_reg(u32 line, struct iwl_priv
+static inline void __iwl_set_bits_mask_restricted_reg(u32 line, struct iwl_priv
*priv, u32 reg,
u32 bits, u32 mask)
{
@@ -417,7 +417,7 @@ static inline void iwl_write_restricted_mem(struct iwl_priv *priv, u32 addr,
static inline void iwl_write_restricted_mem_buffer(struct iwl_priv *priv,
u32 addr, u32 len,
- u32 * values)
+ u32 *values)
{
iwl_write_restricted(priv, HBUS_TARG_MEM_WADDR, addr);
for (; 0 < len; len -= sizeof(u32), values++)
@@ -426,7 +426,7 @@ static inline void iwl_write_restricted_mem_buffer(struct iwl_priv *priv,
static inline void iwl_write_restricted_reg_buffer(struct iwl_priv *priv,
u32 reg, u32 len,
- u8 * values)
+ u8 *values)
{
u32 reg_offset = reg;
u32 aligment = reg & 0x3;
diff --git a/drivers/net/wireless/iwlwifi.h b/drivers/net/wireless/iwlwifi.h
index 3de6425..002f8e8 100644
--- a/drivers/net/wireless/iwlwifi.h
+++ b/drivers/net/wireless/iwlwifi.h
@@ -520,11 +520,11 @@ struct fw_image_desc {
/* uCode file layout */
struct iwl_ucode {
__le32 ver; /* major/minor/subminor */
- __le32 inst_size; /* bytes of runtime instructions */
- __le32 data_size; /* bytes of runtime data */
- __le32 init_size; /* bytes of initialization instructions */
+ __le32 inst_size; /* bytes of runtime instructions */
+ __le32 data_size; /* bytes of runtime data */
+ __le32 init_size; /* bytes of initialization instructions */
__le32 init_data_size; /* bytes of initialization data */
- __le32 boot_size; /* bytes of bootstrap instructions */
+ __le32 boot_size; /* bytes of bootstrap instructions */
u8 data[0]; /* data in same order as "size" elements */
};
@@ -590,7 +590,7 @@ struct iwl_addsta_cmd;
extern int iwl_send_add_station(struct iwl_priv *priv,
struct iwl_addsta_cmd *sta, u8 flags);
extern const char *iwl_get_tx_fail_reason(u32 status);
-extern u8 iwl_add_station(struct iwl_priv *priv, const u8 * bssid,
+extern u8 iwl_add_station(struct iwl_priv *priv, const u8 *bssid,
int is_ap, u8 flags);
extern int iwl_is_network_packet(struct iwl_priv *priv,
struct ieee80211_hdr *header);
@@ -631,7 +631,7 @@ extern int iwl_send_cmd_pdu(struct iwl_priv *priv, u8 id, u16 len,
extern int __must_check iwl_send_cmd(struct iwl_priv *priv,
struct iwl_host_cmd *cmd);
extern int iwl_fill_beacon_frame(struct iwl_priv *priv,
- struct ieee80211_hdr *hdr, const u8 * dest,
+ struct ieee80211_hdr *hdr, const u8 *dest,
int left);
extern int iwl_rx_queue_update_write_ptr(struct iwl_priv *priv,
struct iwl_rx_queue *q);
@@ -715,7 +715,7 @@ extern int iwl4965_get_temperature(const struct iwl_priv *priv);
* not yet been merged into a single common layer for managing the
* station tables.
*/
-extern u8 iwl_hw_find_station(struct iwl_priv *priv, const u8 * bssid);
+extern u8 iwl_hw_find_station(struct iwl_priv *priv, const u8 *bssid);
extern int iwl_hw_channel_switch(struct iwl_priv *priv, u8 channel);
extern int iwl_tx_queue_reclaim(struct iwl_priv *priv, int txq_id, int index);
--
1.5.2
^ permalink raw reply related [flat|nested] 28+ messages in thread
* [PATCH 02/28] iwlwifi: add more Kconfig options
2007-08-08 7:33 ` [PATCH 01/28] iwlwifi: fix a lot of checkpatch.pl warnings Zhu Yi
@ 2007-08-08 7:33 ` Zhu Yi
2007-08-08 7:33 ` [PATCH 03/28] iwlwifi: Endianity fix for 4965 rate scaling Zhu Yi
0 siblings, 1 reply; 28+ messages in thread
From: Zhu Yi @ 2007-08-08 7:33 UTC (permalink / raw)
To: linville; +Cc: linux-wireless, Zhu Yi
Add IWLWIFI_SENSITIVITY, IWLWIFI_SPECTRUM_MEASUREMENT, and IWLWIFI_QOS.
Signed-off-by: Zhu Yi <yi.zhu@intel.com>
---
drivers/net/wireless/Kconfig | 23 +++++++++++++++++++++++
1 files changed, 23 insertions(+), 0 deletions(-)
diff --git a/drivers/net/wireless/Kconfig b/drivers/net/wireless/Kconfig
index daa7c9e..a9f97ab 100644
--- a/drivers/net/wireless/Kconfig
+++ b/drivers/net/wireless/Kconfig
@@ -768,6 +768,29 @@ config IWLWIFI_DEBUG
as the debug information can assist others in helping you resolve
any problems you may encounter.
+config IWLWIFI_SENSITIVITY
+ bool "Enable Sensitivity Calibration in iwlwifi drivers"
+ depends on IWLWIFI
+ default y
+ ---help---
+ This option will enable sensitivity calibration for the iwlwifi
+ drivers.
+
+config IWLWIFI_SPECTRUM_MEASUREMENT
+ bool "Enable Spectrum Measurement in iwlwifi drivers"
+ depends on IWLWIFI
+ default y
+ ---help---
+ This option will enable spectrum measurement for the iwlwifi drivers.
+
+config IWLWIFI_QOS
+ bool "Enable Wireless QoS in iwlwifi drivers"
+ depends on IWLWIFI
+ default y
+ ---help---
+ This option will enable wireless quality of service (QoS) for the
+ iwlwifi drivers.
+
config IWLWIFI_HT
bool "Enable 802.11n HT features in iwlwifi drivers"
depends on EXPERIMENTAL
--
1.5.2
^ permalink raw reply related [flat|nested] 28+ messages in thread
* [PATCH 03/28] iwlwifi: Endianity fix for 4965 rate scaling
2007-08-08 7:33 ` [PATCH 02/28] iwlwifi: add more Kconfig options Zhu Yi
@ 2007-08-08 7:33 ` Zhu Yi
2007-08-08 7:33 ` [PATCH 04/28] iwlwifi: Endianity fix for 4965 rx chain selection Zhu Yi
0 siblings, 1 reply; 28+ messages in thread
From: Zhu Yi @ 2007-08-08 7:33 UTC (permalink / raw)
To: linville; +Cc: linux-wireless, Tomas Winkler, Zhu Yi
From: Tomas Winkler <tomas.winkler@intel.com>
This patch fixes endianity issues in 4965 rate scaling algorithm.
Signed-off-by: Tomas Winkler <tomas.winkler@intel.com>
Signed-off-by: Zhu Yi <yi.zhu@intel.com>
---
drivers/net/wireless/iwl-4965-hw.h | 4 ++-
drivers/net/wireless/iwl-4965-rs.c | 54 ++++++++++++++++++++++-------------
drivers/net/wireless/iwl-4965.c | 18 ++++++------
drivers/net/wireless/iwl-commands.h | 11 -------
4 files changed, 46 insertions(+), 41 deletions(-)
diff --git a/drivers/net/wireless/iwl-4965-hw.h b/drivers/net/wireless/iwl-4965-hw.h
index d7b69f5..fc9f506 100644
--- a/drivers/net/wireless/iwl-4965-hw.h
+++ b/drivers/net/wireless/iwl-4965-hw.h
@@ -314,7 +314,9 @@ struct iwl_link_quality_cmd {
__le16 control;
struct iwl_link_qual_general_params general_params;
struct iwl_link_qual_agg_params agg_params;
- struct iwl_rate rate_scale_table[LINK_QUAL_MAX_RETRY_NUM];
+ struct {
+ __le32 rate_n_flags;
+ } rs_table[LINK_QUAL_MAX_RETRY_NUM];
__le32 reserved2;
} __attribute__ ((packed));
diff --git a/drivers/net/wireless/iwl-4965-rs.c b/drivers/net/wireless/iwl-4965-rs.c
index 07fe911..3fab3c9 100644
--- a/drivers/net/wireless/iwl-4965-rs.c
+++ b/drivers/net/wireless/iwl-4965-rs.c
@@ -69,6 +69,17 @@ static u8 rs_ht_to_legacy[] = {
IWL_RATE_48M_INDEX, IWL_RATE_54M_INDEX
};
+struct iwl_rate {
+ union {
+ struct {
+ u8 rate;
+ u8 flags;
+ u16 ext_flags;
+ } s;
+ u32 rate_n_flags;
+ };
+} __attribute__ ((packed));
+
struct iwl_rate_scale_data {
u64 data;
s32 success_counter;
@@ -205,7 +216,7 @@ static int rs_send_lq_cmd(struct iwl_priv *priv,
#ifdef CONFIG_IWLWIFI_DEBUG
for (i = 0; i < LINK_QUAL_MAX_RETRY_NUM; i++)
IWL_DEBUG_RATE("lq index %d 0x%X\n",
- i, lq->rate_scale_table[i].rate_n_flags);
+ i, lq->rs_table[i].rate_n_flags);
#endif
if (flags & CMD_ASYNC)
@@ -340,8 +351,8 @@ int static rs_mcs_from_tbl(struct iwl_rate *mcs_rate,
return rc;
}
-static int rs_get_tbl_info_from_mcs(struct iwl_rate *mcs_rate, int phymode,
- struct iwl_scale_tbl_info *tbl,
+static int rs_get_tbl_info_from_mcs(const struct iwl_rate *mcs_rate,
+ int phymode, struct iwl_scale_tbl_info *tbl,
int *rate_idx)
{
int index;
@@ -665,17 +676,17 @@ static void rs_tx_status(void *priv_rate,
}
if (retries &&
- (tx_mcs.rate_n_flags != table->rate_scale_table[0].rate_n_flags)) {
+ (tx_mcs.rate_n_flags != table->rs_table[0].rate_n_flags)) {
IWL_DEBUG_RATE("initial rate does not match 0x%x 0x%x\n",
tx_mcs.rate_n_flags,
- table->rate_scale_table[0].rate_n_flags);
+ table->rs_table[0].rate_n_flags);
sta_info_put(sta);
return;
}
while (retries) {
tx_mcs.rate_n_flags =
- table->rate_scale_table[index].rate_n_flags;
+ le32_to_cpu(table->rs_table[index].rate_n_flags);
rs_get_tbl_info_from_mcs(&tx_mcs, priv->phymode,
&tbl_type, &rs_index);
@@ -708,7 +719,7 @@ static void rs_tx_status(void *priv_rate,
tx_mcs.rate_n_flags = tx_resp->control.tx_rate;
else
tx_mcs.rate_n_flags =
- table->rate_scale_table[index].rate_n_flags;
+ le32_to_cpu(table->rs_table[index].rate_n_flags);
rs_get_tbl_info_from_mcs(&tx_mcs, priv->phymode,
&tbl_type, &rs_index);
@@ -1572,7 +1583,7 @@ static void rs_rate_scale_perform(struct iwl_priv *priv,
lq_update:
if (update_lq) {
rs_mcs_from_tbl(&mcs_rate, tbl, index, is_green);
- rs_fill_link_cmd(lq_data, &mcs_rate, &(lq_data->lq), sta);
+ rs_fill_link_cmd(lq_data, &mcs_rate, &lq_data->lq, sta);
if (!rs_send_lq_cmd(priv, &lq_data->lq, CMD_ASYNC))
lq_data->commit_lq = 0;
@@ -1773,7 +1784,7 @@ static struct ieee80211_rate *rs_get_rate(void *priv_rate,
}
if ((sta_id != IWL_INVALID_STATION)) {
lq->lq.sta_id = sta_id;
- lq->lq.rate_scale_table[0].rate_n_flags = 0;
+ lq->lq.rs_table[0].rate_n_flags = 0;
lq->ibss_sta_added = 1;
lq->commit_lq = 1;
rs_initialize_lq(priv, sta);
@@ -1858,7 +1869,7 @@ static void rs_rate_init(void *priv_rate, void *priv_sta,
}
if ((sta_id != IWL_INVALID_STATION)) {
crl->lq.sta_id = sta_id;
- crl->lq.rate_scale_table[0].rate_n_flags = 0;
+ crl->lq.rs_table[0].rate_n_flags = 0;
}
priv->lq_mngr.lq_ready = 1;
}
@@ -1912,6 +1923,7 @@ static int rs_fill_link_cmd(struct iwl_rate_scale_priv *lq_data,
u8 use_ht_possible = 1;
u8 repeat_cur_rate = 0;
struct iwl_rate new_rate;
+ struct iwl_rate tbl_rate;
struct iwl_scale_tbl_info tbl_type = { 0 };
rs_get_tbl_info_from_mcs(tx_mcs, lq_data->phymode,
@@ -1923,7 +1935,8 @@ static int rs_fill_link_cmd(struct iwl_rate_scale_priv *lq_data,
} else
repeat_cur_rate = IWL_HT_NUMBER_TRY;
- lq_cmd->rate_scale_table[index].rate_n_flags = tx_mcs->rate_n_flags;
+ lq_cmd->rs_table[index].rate_n_flags =
+ cpu_to_le32(tx_mcs->rate_n_flags);
lq_cmd->general_params.mimo_delimiter =
is_mimo(tbl_type.lq_type) ? 1 : 0;
new_rate.rate_n_flags = tx_mcs->rate_n_flags;
@@ -1947,13 +1960,14 @@ static int rs_fill_link_cmd(struct iwl_rate_scale_priv *lq_data,
ant_toggle_count = 1;
}
}
- lq_cmd->rate_scale_table[index].rate_n_flags =
- new_rate.rate_n_flags;
+ lq_cmd->rs_table[index].rate_n_flags =
+ cpu_to_le32(new_rate.rate_n_flags);
repeat_cur_rate--;
index++;
}
- rs_get_tbl_info_from_mcs(&lq_cmd->rate_scale_table[index - 1],
- lq_data->phymode, &tbl_type,
+ tbl_rate.rate_n_flags =
+ le32_to_cpu(lq_cmd->rs_table[index - 1].rate_n_flags);
+ rs_get_tbl_info_from_mcs(&tbl_rate, lq_data->phymode, &tbl_type,
&rate_idx);
if (is_mimo(tbl_type.lq_type))
lq_cmd->general_params.mimo_delimiter = index;
@@ -1974,19 +1988,19 @@ static int rs_fill_link_cmd(struct iwl_rate_scale_priv *lq_data,
use_ht_possible = 0;
- lq_cmd->rate_scale_table[index].rate_n_flags =
- new_rate.rate_n_flags;
- /* lq_cmd->rate_scale_table[index].rate_n_flags = 0x800d; */
+ lq_cmd->rs_table[index].rate_n_flags =
+ cpu_to_le32(new_rate.rate_n_flags);
+ /* lq_cmd->rs_table[index].rate_n_flags = 0x800d; */
index++;
repeat_cur_rate--;
}
- /* lq_cmd->rate_scale_table[0].rate_n_flags = 0x800d; */
+ /* lq_cmd->rs_table[0].rate_n_flags = 0x800d; */
lq_cmd->general_params.dual_stream_ant_msk = 3;
lq_cmd->agg_params.agg_dis_start_th = 3;
- lq_cmd->agg_params.agg_time_limit = 4000;
+ lq_cmd->agg_params.agg_time_limit = cpu_to_le16(4000);
return rc;
}
diff --git a/drivers/net/wireless/iwl-4965.c b/drivers/net/wireless/iwl-4965.c
index 6b8fd73..58ea2a1 100644
--- a/drivers/net/wireless/iwl-4965.c
+++ b/drivers/net/wireless/iwl-4965.c
@@ -4382,11 +4382,10 @@ void iwl4965_add_station(struct iwl_priv *priv, const u8 *addr, int is_ap)
struct iwl_link_quality_cmd link_cmd = {
.reserved1 = 0,
};
- struct iwl_rate *table = link_cmd.rate_scale_table;
+ u16 rate_flags;
/* Set up the rate scaling to start at 54M and fallback
* all the way to 1M in IEEE order and then spin on IEEE */
- i = 0;
if (is_ap)
r = IWL_RATE_54M_INDEX;
else if ((priv->phymode == MODE_IEEE80211A) ||
@@ -4395,21 +4394,22 @@ void iwl4965_add_station(struct iwl_priv *priv, const u8 *addr, int is_ap)
else
r = IWL_RATE_1M_INDEX;
- while (i < LINK_QUAL_MAX_RETRY_NUM) {
+ for (i = 0; i < LINK_QUAL_MAX_RETRY_NUM; i++) {
+ rate_flags = 0;
if (r >= IWL_FIRST_CCK_RATE && r <= IWL_LAST_CCK_RATE)
- table[i].rate_n_flags |= RATE_MCS_CCK_MSK;
+ rate_flags |= RATE_MCS_CCK_MSK;
- table[i].s.rate = iwl_rates[r].plcp;
- table[i].rate_n_flags |= RATE_MCS_ANT_B_MSK;
- table[i].rate_n_flags &= ~RATE_MCS_ANT_A_MSK;
+ rate_flags |= RATE_MCS_ANT_B_MSK;
+ rate_flags &= ~RATE_MCS_ANT_A_MSK;
+ link_cmd.rs_table[i].rate_n_flags =
+ iwl_hw_set_rate_n_flags(iwl_rates[r].plcp, rate_flags);
r = iwl_get_prev_ieee_rate(r);
- i++;
}
link_cmd.general_params.single_stream_ant_msk = 2;
link_cmd.general_params.dual_stream_ant_msk = 3;
link_cmd.agg_params.agg_dis_start_th = 3;
- link_cmd.agg_params.agg_time_limit = 4000;
+ link_cmd.agg_params.agg_time_limit = cpu_to_le16(4000);
/* Update the rate scaling for control frame Tx to AP */
link_cmd.sta_id = is_ap ? IWL_AP_ID : IWL_BROADCAST_ID;
diff --git a/drivers/net/wireless/iwl-commands.h b/drivers/net/wireless/iwl-commands.h
index 1942c8c..2327ec3 100644
--- a/drivers/net/wireless/iwl-commands.h
+++ b/drivers/net/wireless/iwl-commands.h
@@ -214,17 +214,6 @@ struct iwl_rate {
__le16 rate_n_flags;
};
} __attribute__ ((packed));
-#elif IWL == 4965
-struct iwl_rate {
- union {
- struct {
- u8 rate;
- u8 flags;
- __le16 ext_flags;
- } s;
- __le32 rate_n_flags;
- };
-} __attribute__ ((packed));
#endif
struct iwl_dram_scratch {
--
1.5.2
^ permalink raw reply related [flat|nested] 28+ messages in thread
* [PATCH 04/28] iwlwifi: Endianity fix for 4965 rx chain selection
2007-08-08 7:33 ` [PATCH 03/28] iwlwifi: Endianity fix for 4965 rate scaling Zhu Yi
@ 2007-08-08 7:33 ` Zhu Yi
2007-08-08 7:33 ` [PATCH 05/28] iwlwifi: optimize iwl_queue_{inc|dec}_wrap implementation Zhu Yi
0 siblings, 1 reply; 28+ messages in thread
From: Zhu Yi @ 2007-08-08 7:33 UTC (permalink / raw)
To: linville; +Cc: linux-wireless, Tomas Winkler, Gregory Greenman, Zhu Yi
From: Tomas Winkler <tomas.winkler@intel.com>
This patch fixes endianity for rx chain setting.
Signed-off-by: Gregory Greenman <gregory.greenman@intel.com>
Signed-off-by: Tomas Winkler <tomas.winkler@intel.com>
Signed-off-by: Zhu Yi <yi.zhu@intel.com>
---
drivers/net/wireless/iwl-4965-hw.h | 14 +++++++-------
drivers/net/wireless/iwl-base.c | 4 ++--
2 files changed, 9 insertions(+), 9 deletions(-)
diff --git a/drivers/net/wireless/iwl-4965-hw.h b/drivers/net/wireless/iwl-4965-hw.h
index fc9f506..106f7c0 100644
--- a/drivers/net/wireless/iwl-4965-hw.h
+++ b/drivers/net/wireless/iwl-4965-hw.h
@@ -244,18 +244,18 @@ struct iwl_channel_switch_notif {
#define RXON_FLG_CHANNEL_MODE_PURE_40_MSK 0x02000000
#define RXON_FLG_CHANNEL_MODE_MIXED_MSK 0x04000000
-#define RXON_RX_CHAIN_DRIVER_FORCE_MSK (0x1<<0)
-#define RXON_RX_CHAIN_VALID_MSK (0x7<<1)
+#define RXON_RX_CHAIN_DRIVER_FORCE_MSK __constant_cpu_to_le16(0x1<<0)
+#define RXON_RX_CHAIN_VALID_MSK __constant_cpu_to_le16(0x7<<1)
#define RXON_RX_CHAIN_VALID_POS (1)
-#define RXON_RX_CHAIN_FORCE_SEL_MSK (0x7<<4)
+#define RXON_RX_CHAIN_FORCE_SEL_MSK __constant_cpu_to_le16(0x7<<4)
#define RXON_RX_CHAIN_FORCE_SEL_POS (4)
-#define RXON_RX_CHAIN_FORCE_MIMO_SEL_MSK (0x7<<7)
+#define RXON_RX_CHAIN_FORCE_MIMO_SEL_MSK __constant_cpu_to_le16(0x7<<7)
#define RXON_RX_CHAIN_FORCE_MIMO_SEL_POS (7)
-#define RXON_RX_CHAIN_CNT_MSK (0x3<<10)
+#define RXON_RX_CHAIN_CNT_MSK __constant_cpu_to_le16(0x3<<10)
#define RXON_RX_CHAIN_CNT_POS (10)
-#define RXON_RX_CHAIN_MIMO_CNT_MSK (0x3<<12)
+#define RXON_RX_CHAIN_MIMO_CNT_MSK __constant_cpu_to_le16(0x3<<12)
#define RXON_RX_CHAIN_MIMO_CNT_POS (12)
-#define RXON_RX_CHAIN_MIMO_FORCE_MSK (0x1<<14)
+#define RXON_RX_CHAIN_MIMO_FORCE_MSK __constant_cpu_to_le16(0x1<<14)
#define RXON_RX_CHAIN_MIMO_FORCE_POS (14)
diff --git a/drivers/net/wireless/iwl-base.c b/drivers/net/wireless/iwl-base.c
index d082a10..4d73b86 100644
--- a/drivers/net/wireless/iwl-base.c
+++ b/drivers/net/wireless/iwl-base.c
@@ -7135,9 +7135,9 @@ static void iwl_bg_request_scan(struct work_struct *data)
* Avoid A (0x1) because of its off-channel reception on A-band.
* MIMO is not used here, but value is required to make uCode happy. */
scan->rx_chain = RXON_RX_CHAIN_DRIVER_FORCE_MSK |
- (0x7 << RXON_RX_CHAIN_VALID_POS) |
+ cpu_to_le16((0x7 << RXON_RX_CHAIN_VALID_POS) |
(0x6 << RXON_RX_CHAIN_FORCE_SEL_POS) |
- (0x7 << RXON_RX_CHAIN_FORCE_MIMO_SEL_POS);
+ (0x7 << RXON_RX_CHAIN_FORCE_MIMO_SEL_POS));
#endif
if (priv->iw_mode == IEEE80211_IF_TYPE_MNTR)
--
1.5.2
^ permalink raw reply related [flat|nested] 28+ messages in thread
* [PATCH 05/28] iwlwifi: optimize iwl_queue_{inc|dec}_wrap implementation
2007-08-08 7:33 ` [PATCH 04/28] iwlwifi: Endianity fix for 4965 rx chain selection Zhu Yi
@ 2007-08-08 7:33 ` Zhu Yi
2007-08-08 7:33 ` [PATCH 06/28] iwlwifi: use mask operation to replace '%' for index calculation Zhu Yi
0 siblings, 1 reply; 28+ messages in thread
From: Zhu Yi @ 2007-08-08 7:33 UTC (permalink / raw)
To: linville; +Cc: linux-wireless, Zhu Yi
This patch optimizes implementation of iwl_queue_inc_wrap and
iwl_queue_inc_wrap based on the fact the hardware queue is power-of-two
size. We also add BUG_ON and BUILD_BUG_ON check for queue size against
is_power_of_2 in case future hardwares break this rule.
Signed-off-by: Zhu Yi <yi.zhu@intel.com>
---
drivers/net/wireless/iwl-base.c | 16 +++++++++++++---
1 files changed, 13 insertions(+), 3 deletions(-)
diff --git a/drivers/net/wireless/iwl-base.c b/drivers/net/wireless/iwl-base.c
index 4d73b86..becaeea 100644
--- a/drivers/net/wireless/iwl-base.c
+++ b/drivers/net/wireless/iwl-base.c
@@ -160,14 +160,16 @@ static int iwl_queue_space(const struct iwl_queue *q)
return s;
}
+/* XXX: n_bd must be power-of-two size */
static inline int iwl_queue_inc_wrap(int index, int n_bd)
{
- return (++index == n_bd) ? 0 : index;
+ return ++index & (n_bd - 1);
}
+/* XXX: n_bd must be power-of-two size */
static inline int iwl_queue_dec_wrap(int index, int n_bd)
{
- return (index == 0) ? n_bd - 1 : index - 1;
+ return --index & (n_bd - 1);
}
static inline int x2_queue_used(const struct iwl_queue *q, int i)
@@ -192,6 +194,10 @@ static int iwl_queue_init(struct iwl_priv *priv, struct iwl_queue *q,
q->n_window = slots_num;
q->id = id;
+ /* count must be power-of-two size, otherwise iwl_queue_inc_wrap
+ * and iwl_queue_dec_wrap are broken. */
+ BUG_ON(!is_power_of_2(count));
+
q->low_mark = q->n_window / 4;
if (q->low_mark < 4)
q->low_mark = 4;
@@ -266,9 +272,13 @@ int iwl_tx_queue_init(struct iwl_priv *priv,
return -ENOMEM;
}
-
txq->need_update = 0;
+
+ /* TFD_QUEUE_SIZE_MAX must be power-of-two size, otherwise
+ * iwl_queue_inc_wrap and iwl_queue_dec_wrap are broken. */
+ BUILD_BUG_ON(TFD_QUEUE_SIZE_MAX & (TFD_QUEUE_SIZE_MAX - 1));
iwl_queue_init(priv, &txq->q, TFD_QUEUE_SIZE_MAX, slots_num, txq_id);
+
iwl_hw_tx_queue_init(priv, txq);
return 0;
--
1.5.2
^ permalink raw reply related [flat|nested] 28+ messages in thread
* [PATCH 06/28] iwlwifi: use mask operation to replace '%' for index calculation
2007-08-08 7:33 ` [PATCH 05/28] iwlwifi: optimize iwl_queue_{inc|dec}_wrap implementation Zhu Yi
@ 2007-08-08 7:33 ` Zhu Yi
2007-08-08 7:33 ` [PATCH 07/28] iwlwifi: make local functions static Zhu Yi
0 siblings, 1 reply; 28+ messages in thread
From: Zhu Yi @ 2007-08-08 7:33 UTC (permalink / raw)
To: linville; +Cc: linux-wireless, Zhu Yi
This patch replaces index calculation with '%' to mask operation. Note,
this is only applicable for power-of-two size.
Signed-off-by: Zhu Yi <yi.zhu@intel.com>
---
drivers/net/wireless/iwl-4965.c | 2 +-
drivers/net/wireless/iwl-base.c | 18 +++++++++++-------
drivers/net/wireless/iwl-hw.h | 1 +
drivers/net/wireless/iwlwifi.h | 2 +-
4 files changed, 14 insertions(+), 9 deletions(-)
diff --git a/drivers/net/wireless/iwl-4965.c b/drivers/net/wireless/iwl-4965.c
index 58ea2a1..c93c607 100644
--- a/drivers/net/wireless/iwl-4965.c
+++ b/drivers/net/wireless/iwl-4965.c
@@ -2048,7 +2048,7 @@ static struct iwl_txpower_comp_entry {
static s32 get_min_power_index(s32 rate_power_index, u32 band)
{
if (!band) {
- if ((rate_power_index % 8) <= 4)
+ if ((rate_power_index & 7) <= 4)
return MIN_TX_GAIN_INDEX_52GHZ_EXT;
}
return MIN_TX_GAIN_INDEX;
diff --git a/drivers/net/wireless/iwl-base.c b/drivers/net/wireless/iwl-base.c
index becaeea..18c4a23 100644
--- a/drivers/net/wireless/iwl-base.c
+++ b/drivers/net/wireless/iwl-base.c
@@ -184,7 +184,7 @@ static inline u8 get_next_cmd_index(struct iwl_queue *q, u32 index, int is_huge)
if (is_huge)
return q->n_window;
- return (u8) (index % q->n_window);
+ return index & (q->n_window - 1);
}
static int iwl_queue_init(struct iwl_priv *priv, struct iwl_queue *q,
@@ -198,6 +198,10 @@ static int iwl_queue_init(struct iwl_priv *priv, struct iwl_queue *q,
* and iwl_queue_dec_wrap are broken. */
BUG_ON(!is_power_of_2(count));
+ /* slots_num must be power-of-two size, otherwise
+ * get_next_cmd_index is broken. */
+ BUG_ON(!is_power_of_2(slots_num));
+
q->low_mark = q->n_window / 4;
if (q->low_mark < 4)
q->low_mark = 4;
@@ -3247,7 +3251,7 @@ int is_duplicate_packet(struct iwl_priv *priv, struct ieee80211_hdr *header)
struct list_head *p;
struct iwl_ibss_seq *entry = NULL;
u8 *mac = header->addr2;
- int index = mac[5] % IWL_IBSS_MAC_HASH_SIZE;
+ int index = mac[5] & (IWL_IBSS_MAC_HASH_SIZE - 1);
__list_for_each(p, &priv->ibss_mac_hash[index]) {
entry =
@@ -3325,8 +3329,8 @@ static u32 iwl_usecs_to_beacons(u32 usec, u32 beacon_interval)
if (!interval || !usec)
return 0;
- quot = (usec / interval) % 0x100;
- rem = (usec % interval) % BEACON_TIME_MASK_LOW;
+ quot = (usec / interval) & (BEACON_TIME_MASK_HIGH >> 24);
+ rem = (usec % interval) & BEACON_TIME_MASK_LOW;
return (quot << 24) + rem;
}
@@ -4344,7 +4348,7 @@ int iwl_rx_queue_restock(struct iwl_priv *priv)
rxq->bd[rxq->write] =
iwl_dma_addr2rbd_ptr(priv, rxb->dma_addr);
rxq->queue[rxq->write] = rxb;
- rxq->write = (rxq->write + 1) % RX_QUEUE_SIZE;
+ rxq->write = (rxq->write + 1) & RX_QUEUE_MASK;
rxq->free_count--;
}
spin_unlock_irqrestore(&rxq->lock, flags);
@@ -4647,7 +4651,7 @@ static void iwl_rx_handle(struct iwl_priv *priv)
spin_lock_irqsave(&rxq->lock, flags);
list_add_tail(&rxb->list, &priv->rxq.rx_used);
spin_unlock_irqrestore(&rxq->lock, flags);
- i = (i + 1) % RX_QUEUE_SIZE;
+ i = (i + 1) & RX_QUEUE_MASK;
}
/* Backtrack one entry */
@@ -8562,7 +8566,7 @@ static ssize_t show_rate(struct device *d,
return sprintf(buf, "%d%s\n",
(iwl_rates[i].ieee >> 1),
- (iwl_rates[i].ieee % 2) ? ".5" : "");
+ (iwl_rates[i].ieee & 0x1) ? ".5" : "");
}
static DEVICE_ATTR(rate, S_IRUSR, show_rate, NULL);
diff --git a/drivers/net/wireless/iwl-hw.h b/drivers/net/wireless/iwl-hw.h
index 933a367..e01f29c 100644
--- a/drivers/net/wireless/iwl-hw.h
+++ b/drivers/net/wireless/iwl-hw.h
@@ -1076,6 +1076,7 @@ struct statistics {
#define NUM_TFD_CHUNKS 4
#define RX_QUEUE_SIZE 256
+#define RX_QUEUE_MASK 255
#define RX_QUEUE_SIZE_LOG 8
/*
diff --git a/drivers/net/wireless/iwlwifi.h b/drivers/net/wireless/iwlwifi.h
index 002f8e8..be94217 100644
--- a/drivers/net/wireless/iwlwifi.h
+++ b/drivers/net/wireless/iwlwifi.h
@@ -528,7 +528,7 @@ struct iwl_ucode {
u8 data[0]; /* data in same order as "size" elements */
};
-#define IWL_IBSS_MAC_HASH_SIZE 31
+#define IWL_IBSS_MAC_HASH_SIZE 32
struct iwl_ibss_seq {
u8 mac[ETH_ALEN];
--
1.5.2
^ permalink raw reply related [flat|nested] 28+ messages in thread
* [PATCH 07/28] iwlwifi: make local functions static
2007-08-08 7:33 ` [PATCH 06/28] iwlwifi: use mask operation to replace '%' for index calculation Zhu Yi
@ 2007-08-08 7:33 ` Zhu Yi
2007-08-08 7:33 ` [PATCH 08/28] iwlwifi: some coding styles cleanup Zhu Yi
0 siblings, 1 reply; 28+ messages in thread
From: Zhu Yi @ 2007-08-08 7:33 UTC (permalink / raw)
To: linville; +Cc: linux-wireless, Zhu Yi
Signed-off-by: Zhu Yi <yi.zhu@intel.com>
---
drivers/net/wireless/iwl-4965.c | 9 +++++----
drivers/net/wireless/iwl-base.c | 4 ++--
2 files changed, 7 insertions(+), 6 deletions(-)
diff --git a/drivers/net/wireless/iwl-4965.c b/drivers/net/wireless/iwl-4965.c
index c93c607..8175b48 100644
--- a/drivers/net/wireless/iwl-4965.c
+++ b/drivers/net/wireless/iwl-4965.c
@@ -4257,8 +4257,9 @@ static int iwl4965_tx_queue_set_q2ratid(struct iwl_priv *priv, u16 ra_tid,
/**
* txq_id must be greater than IWL_BACK_QUEUE_FIRST_ID
*/
-int iwl4965_tx_queue_agg_enable(struct iwl_priv *priv, int txq_id, int tx_fifo,
- int sta_id, int tid, u16 ssn_idx)
+static int iwl4965_tx_queue_agg_enable(struct iwl_priv *priv, int txq_id,
+ int tx_fifo, int sta_id, int tid,
+ u16 ssn_idx)
{
unsigned long flags;
int rc;
@@ -4315,8 +4316,8 @@ int iwl4965_tx_queue_agg_enable(struct iwl_priv *priv, int txq_id, int tx_fifo,
/**
* txq_id must be greater than IWL_BACK_QUEUE_FIRST_ID
*/
-int iwl4965_tx_queue_agg_disable(struct iwl_priv *priv, u16 txq_id,
- u16 ssn_idx, u8 tx_fifo)
+static int iwl4965_tx_queue_agg_disable(struct iwl_priv *priv, u16 txq_id,
+ u16 ssn_idx, u8 tx_fifo)
{
unsigned long flags;
int rc;
diff --git a/drivers/net/wireless/iwl-base.c b/drivers/net/wireless/iwl-base.c
index 18c4a23..e58dcfa 100644
--- a/drivers/net/wireless/iwl-base.c
+++ b/drivers/net/wireless/iwl-base.c
@@ -310,7 +310,7 @@ void iwl_tx_queue_free(struct iwl_priv *priv, struct iwl_tx_queue *txq)
q->last_used = iwl_queue_inc_wrap(q->last_used, q->n_bd))
iwl_hw_tx_queue_free_tfd(priv, txq);
- len = sizeof(txq->cmd[0]) * q->n_window;
+ len = sizeof(struct iwl_cmd) * q->n_window;
if (q->id == IWL_CMD_QUEUE_NUM);
len += IWL_MAX_SCAN_SIZE;
@@ -3549,7 +3549,7 @@ static inline u32 iwl_get_scd_ssn(struct iwl_tx_resp *tx_resp)
return le32_to_cpu(*scd_ssn & MAX_SN);
}
-int iwl4965_tx_status_reply_tx(struct iwl_priv *priv,
+static int iwl4965_tx_status_reply_tx(struct iwl_priv *priv,
struct iwl_ht_agg *agg,
struct iwl_tx_resp *tx_resp,
u16 start_idx)
--
1.5.2
^ permalink raw reply related [flat|nested] 28+ messages in thread
* [PATCH 08/28] iwlwifi: some coding styles cleanup
2007-08-08 7:33 ` [PATCH 07/28] iwlwifi: make local functions static Zhu Yi
@ 2007-08-08 7:33 ` Zhu Yi
2007-08-08 7:33 ` [PATCH 09/28] iwlwifi: replace unnecessary GFP_ATOMIC with GFP_KERNEL Zhu Yi
0 siblings, 1 reply; 28+ messages in thread
From: Zhu Yi @ 2007-08-08 7:33 UTC (permalink / raw)
To: linville; +Cc: linux-wireless, Zhu Yi
Signed-off-by: Zhu Yi <yi.zhu@intel.com>
---
drivers/net/wireless/iwl-base.c | 54 ++++++++++++++++-----------------------
1 files changed, 22 insertions(+), 32 deletions(-)
diff --git a/drivers/net/wireless/iwl-base.c b/drivers/net/wireless/iwl-base.c
index e58dcfa..8f55f0d 100644
--- a/drivers/net/wireless/iwl-base.c
+++ b/drivers/net/wireless/iwl-base.c
@@ -901,15 +901,15 @@ static int iwl_check_rxon_cmd(struct iwl_rxon_cmd *rxon)
int counter = 1;
if (rxon->flags & RXON_FLG_BAND_24G_MSK) {
- error |=
- le32_to_cpu(rxon->flags & RXON_FLG_TGJ_NARROW_BAND_MSK);
- error |= le32_to_cpu(rxon->flags & RXON_FLG_RADAR_DETECT_MSK);
+ error |= le32_to_cpu(rxon->flags &
+ (RXON_FLG_TGJ_NARROW_BAND_MSK |
+ RXON_FLG_RADAR_DETECT_MSK));
if (error)
IWL_WARNING("check 24G fields %d | %d\n",
counter++, error);
} else {
- error |= ((rxon->flags & RXON_FLG_SHORT_SLOT_MSK) !=
- RXON_FLG_SHORT_SLOT_MSK);
+ error |= (rxon->flags & RXON_FLG_SHORT_SLOT_MSK) ?
+ 0 : le32_to_cpu(RXON_FLG_SHORT_SLOT_MSK);
if (error)
IWL_WARNING("check 52 fields %d | %d\n",
counter++, error);
@@ -917,7 +917,6 @@ static int iwl_check_rxon_cmd(struct iwl_rxon_cmd *rxon)
if (error)
IWL_WARNING("check 52 CCK %d | %d\n",
counter++, error);
-
}
error |= (rxon->node_addr[0] | rxon->bssid_addr[0]) & 0x1;
if (error)
@@ -925,7 +924,7 @@ static int iwl_check_rxon_cmd(struct iwl_rxon_cmd *rxon)
/* make sure basic rates 6Mbps and 1Mbps are supported */
error |= (((rxon->ofdm_basic_rates & IWL_RATE_6M_MASK) == 0) &&
- ((rxon->cck_basic_rates & IWL_RATE_1M_MASK) == 0));
+ ((rxon->cck_basic_rates & IWL_RATE_1M_MASK) == 0));
if (error)
IWL_WARNING("check basic rate %d | %d\n", counter++, error);
@@ -933,43 +932,39 @@ static int iwl_check_rxon_cmd(struct iwl_rxon_cmd *rxon)
if (error)
IWL_WARNING("check assoc id %d | %d\n", counter++, error);
- error |= ((rxon->flags &
- (RXON_FLG_CCK_MSK | RXON_FLG_SHORT_SLOT_MSK)) ==
- (RXON_FLG_CCK_MSK | RXON_FLG_SHORT_SLOT_MSK));
+ error |= ((rxon->flags & (RXON_FLG_CCK_MSK | RXON_FLG_SHORT_SLOT_MSK))
+ == (RXON_FLG_CCK_MSK | RXON_FLG_SHORT_SLOT_MSK));
if (error)
IWL_WARNING("check CCK and short slot %d | %d\n",
counter++, error);
error |= ((rxon->flags & (RXON_FLG_CCK_MSK | RXON_FLG_AUTO_DETECT_MSK))
- == (RXON_FLG_CCK_MSK | RXON_FLG_AUTO_DETECT_MSK));
+ == (RXON_FLG_CCK_MSK | RXON_FLG_AUTO_DETECT_MSK));
if (error)
IWL_WARNING("check CCK & auto detect %d | %d\n",
counter++, error);
- error |= ((rxon->flags &
- (RXON_FLG_AUTO_DETECT_MSK | RXON_FLG_TGG_PROTECT_MSK)) ==
- RXON_FLG_TGG_PROTECT_MSK);
+ error |= ((rxon->flags & (RXON_FLG_AUTO_DETECT_MSK |
+ RXON_FLG_TGG_PROTECT_MSK)) == RXON_FLG_TGG_PROTECT_MSK);
if (error)
- IWL_WARNING("check TGG %d | %d\n", counter++, error);
+ IWL_WARNING("check TGG and auto detect %d | %d\n",
+ counter++, error);
#if IWL == 3945
if ((rxon->flags & RXON_FLG_DIS_DIV_MSK))
- error |= ((rxon->flags &
- (RXON_FLG_ANT_B_MSK | RXON_FLG_ANT_A_MSK)) == 0);
+ error |= ((rxon->flags & (RXON_FLG_ANT_B_MSK |
+ RXON_FLG_ANT_A_MSK)) == 0);
if (error)
IWL_WARNING("check antenna %d %d\n", counter++, error);
#endif
-
if (error)
IWL_WARNING("Tuning to channel %d\n",
le16_to_cpu(rxon->channel));
if (error) {
- IWL_ERROR
- ("Error not a valid iwl_rxon_assoc_cmd field values\n");
+ IWL_ERROR("Not a valid iwl_rxon_assoc_cmd field values\n");
return -1;
}
-
return 0;
}
@@ -1512,7 +1507,7 @@ static int iwl_send_beacon_cmd(struct iwl_priv *priv)
frame = iwl_get_free_frame(priv);
if (!frame) {
- IWL_ERROR("Coult not obtain free frame buffer for beacon "
+ IWL_ERROR("Could not obtain free frame buffer for beacon "
"command.\n");
return -ENOMEM;
}
@@ -1642,9 +1637,6 @@ void iwl_report_frame(struct iwl_priv *priv,
u32 print_dump = 0; /* set to 1 to dump all frames' contents */
u32 hundred = 0;
u32 dataframe = 0;
-
- /* these are declared without "=" to avoid compiler warnings if we
- * don't use them in the debug messages below */
u16 frame_ctl;
u16 seq_ctl;
u16 channel;
@@ -1659,7 +1651,6 @@ void iwl_report_frame(struct iwl_priv *priv,
u8 agc;
u16 sig_avg;
u16 noise_diff;
-
struct iwl_rx_frame_stats *rx_stats = IWL_RX_STATS(pkt);
struct iwl_rx_frame_hdr *rx_hdr = IWL_RX_HDR(pkt);
struct iwl_rx_frame_end *rx_end = IWL_RX_END(pkt);
@@ -2325,12 +2316,10 @@ static int iwl_scan_cancel(struct iwl_priv *priv, unsigned long ms)
} else
IWL_DEBUG_SCAN("Scan abort already in progress.\n");
-
mutex_unlock(&priv->mutex);
if (ms)
- while (!time_after(jiffies,
- now + msecs_to_jiffies(ms)) &&
- priv->status & STATUS_SCANNING)
+ while (!time_after(jiffies, now + msecs_to_jiffies(ms))
+ && priv->status & STATUS_SCANNING)
msleep(1);
mutex_lock(&priv->mutex);
@@ -3914,8 +3903,9 @@ static void iwl_rx_reply_scan(struct iwl_priv *priv,
struct iwl_rx_mem_buffer *rxb)
{
struct iwl_rx_packet *pkt = (void *)rxb->skb->data;
- struct iwl_scanreq_notification *notif =
- (struct iwl_scanreq_notification *)pkt->u.raw;
+ struct iwl_scanstart_notification *notif =
+ (struct iwl_scanstart_notification *)pkt->u.raw;
+
IWL_DEBUG_RX("Scan request status = 0x%x\n", notif->status);
}
--
1.5.2
^ permalink raw reply related [flat|nested] 28+ messages in thread
* [PATCH 09/28] iwlwifi: replace unnecessary GFP_ATOMIC with GFP_KERNEL
2007-08-08 7:33 ` [PATCH 08/28] iwlwifi: some coding styles cleanup Zhu Yi
@ 2007-08-08 7:33 ` Zhu Yi
2007-08-08 7:33 ` [PATCH 10/28] iwlwifi: remove priv stuff zeroing in iwl_pci_probe Zhu Yi
0 siblings, 1 reply; 28+ messages in thread
From: Zhu Yi @ 2007-08-08 7:33 UTC (permalink / raw)
To: linville; +Cc: linux-wireless, Zhu Yi
Signed-off-by: Zhu Yi <yi.zhu@intel.com>
---
drivers/net/wireless/iwl-base.c | 12 ++++++------
1 files changed, 6 insertions(+), 6 deletions(-)
diff --git a/drivers/net/wireless/iwl-base.c b/drivers/net/wireless/iwl-base.c
index 8f55f0d..ca4edd2 100644
--- a/drivers/net/wireless/iwl-base.c
+++ b/drivers/net/wireless/iwl-base.c
@@ -222,7 +222,7 @@ static int iwl_tx_queue_alloc(struct iwl_priv *priv,
if (id != IWL_CMD_QUEUE_NUM) {
txq->txb = kmalloc(sizeof(txq->txb[0]) *
- TFD_QUEUE_SIZE_MAX, GFP_ATOMIC);
+ TFD_QUEUE_SIZE_MAX, GFP_KERNEL);
if (!txq->txb) {
IWL_ERROR("kmalloc for auxilary BD "
"structures failed\n");
@@ -1460,7 +1460,7 @@ static struct iwl_frame *iwl_get_free_frame(struct iwl_priv *priv)
struct iwl_frame *frame;
struct list_head *element;
if (list_empty(&priv->free_frames)) {
- frame = kzalloc(sizeof(*frame), GFP_ATOMIC);
+ frame = kzalloc(sizeof(*frame), GFP_KERNEL);
if (!frame) {
IWL_ERROR("Could not allocate frame!\n");
return NULL;
@@ -5706,19 +5706,19 @@ static int iwl_init_geos(struct iwl_priv *priv)
}
modes = kzalloc(sizeof(struct ieee80211_hw_mode) * mode_count,
- GFP_ATOMIC);
+ GFP_KERNEL);
if (!modes)
return -ENOMEM;
channels = kzalloc(sizeof(struct ieee80211_channel) *
- priv->channel_count, GFP_ATOMIC);
+ priv->channel_count, GFP_KERNEL);
if (!channels) {
kfree(modes);
return -ENOMEM;
}
rates = kzalloc((sizeof(struct ieee80211_rate) * (IWL_MAX_RATES + 1)),
- GFP_ATOMIC);
+ GFP_KERNEL);
if (!rates) {
kfree(modes);
kfree(channels);
@@ -7014,7 +7014,7 @@ static void iwl_bg_request_scan(struct work_struct *data)
if (!priv->scan) {
priv->scan = kmalloc(sizeof(struct iwl_scan_cmd) +
- IWL_MAX_SCAN_SIZE, GFP_ATOMIC);
+ IWL_MAX_SCAN_SIZE, GFP_KERNEL);
if (!priv->scan) {
rc = -ENOMEM;
goto done;
--
1.5.2
^ permalink raw reply related [flat|nested] 28+ messages in thread
* [PATCH 10/28] iwlwifi: remove priv stuff zeroing in iwl_pci_probe
2007-08-08 7:33 ` [PATCH 09/28] iwlwifi: replace unnecessary GFP_ATOMIC with GFP_KERNEL Zhu Yi
@ 2007-08-08 7:33 ` Zhu Yi
2007-08-08 7:33 ` [PATCH 11/28] iwlwifi: add name for some PCI configuration space registers Zhu Yi
0 siblings, 1 reply; 28+ messages in thread
From: Zhu Yi @ 2007-08-08 7:33 UTC (permalink / raw)
To: linville; +Cc: linux-wireless, Zhu Yi
Remove priv stuff zeroing in iwl_pci_probe() since priv is already zeroed
by ieee80211_alloc_hw().
Signed-off-by: Zhu Yi <yi.zhu@intel.com>
---
drivers/net/wireless/iwl-base.c | 4 ----
1 files changed, 0 insertions(+), 4 deletions(-)
diff --git a/drivers/net/wireless/iwl-base.c b/drivers/net/wireless/iwl-base.c
index ca4edd2..e419391 100644
--- a/drivers/net/wireless/iwl-base.c
+++ b/drivers/net/wireless/iwl-base.c
@@ -9045,9 +9045,6 @@ static int iwl_pci_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
iwl_clear_stations_table(priv);
- memset(&(priv->txq[0]), 0,
- sizeof(struct iwl_tx_queue) * IWL_MAX_NUM_QUEUES);
- memset(&priv->card_alive, 0, sizeof(struct iwl_alive_resp));
priv->data_retry_limit = -1;
priv->ieee_channels = NULL;
priv->ieee_rates = NULL;
@@ -9138,7 +9135,6 @@ static int iwl_pci_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
}
#ifdef CONFIG_IWLWIFI_QOS
- memset(&priv->qos_data, 0, sizeof(struct iwl_qos_info));
if (iwl_param_qos_enable)
priv->qos_data.qos_enable = 1;
priv->qos_data.qos_active = 0;
--
1.5.2
^ permalink raw reply related [flat|nested] 28+ messages in thread
* [PATCH 11/28] iwlwifi: add name for some PCI configuration space registers
2007-08-08 7:33 ` [PATCH 10/28] iwlwifi: remove priv stuff zeroing in iwl_pci_probe Zhu Yi
@ 2007-08-08 7:33 ` Zhu Yi
2007-08-08 7:33 ` [PATCH 12/28] iwlwifi: shorten some structure and function names Zhu Yi
0 siblings, 1 reply; 28+ messages in thread
From: Zhu Yi @ 2007-08-08 7:33 UTC (permalink / raw)
To: linville; +Cc: linux-wireless, Zhu Yi
Signed-off-by: Zhu Yi <yi.zhu@intel.com>
---
drivers/net/wireless/iwl-3945.c | 3 ++-
drivers/net/wireless/iwl-4965.c | 8 +++++---
drivers/net/wireless/iwl-hw.h | 2 ++
3 files changed, 9 insertions(+), 4 deletions(-)
diff --git a/drivers/net/wireless/iwl-3945.c b/drivers/net/wireless/iwl-3945.c
index 8e78ad5..50c21aa 100644
--- a/drivers/net/wireless/iwl-3945.c
+++ b/drivers/net/wireless/iwl-3945.c
@@ -721,7 +721,8 @@ static int iwl3945_nic_set_pwr_src(struct iwl_priv *priv, int pwr_max)
if (!pwr_max) {
u32 val;
- rc = pci_read_config_dword(priv->pci_dev, 0x0C8, &val);
+ rc = pci_read_config_dword(priv->pci_dev, PCI_POWER_SOURCE,
+ &val);
if (val & PCI_CFG_PMC_PME_FROM_D3COLD_SUPPORT) {
iwl_set_bits_mask_restricted_reg(
priv, ALM_APMG_PS_CTL,
diff --git a/drivers/net/wireless/iwl-4965.c b/drivers/net/wireless/iwl-4965.c
index 8175b48..d334951 100644
--- a/drivers/net/wireless/iwl-4965.c
+++ b/drivers/net/wireless/iwl-4965.c
@@ -203,7 +203,8 @@ static int iwl4965_nic_set_pwr_src(struct iwl_priv *priv, int pwr_max)
if (!pwr_max) {
u32 val;
- rc = pci_read_config_dword(priv->pci_dev, 0x0C8, &val);
+ rc = pci_read_config_dword(priv->pci_dev, PCI_POWER_SOURCE,
+ &val);
if (val & PCI_CFG_PMC_PME_FROM_D3COLD_SUPPORT)
iwl_set_bits_mask_restricted_reg(
@@ -476,9 +477,10 @@ int iwl_hw_nic_init(struct iwl_priv *priv)
spin_lock_irqsave(&priv->lock, flags);
if ((rev_id & 0x80) == 0x80 && (rev_id & 0x7f) < 8) {
- pci_read_config_dword(priv->pci_dev, 0xe8, &val);
+ pci_read_config_dword(priv->pci_dev, PCI_REG_WUM8, &val);
/* Enable No Snoop field */
- pci_write_config_dword(priv->pci_dev, 0xe8, val & ~(1 << 11));
+ pci_write_config_dword(priv->pci_dev, PCI_REG_WUM8,
+ val & ~(1 << 11));
}
spin_unlock_irqrestore(&priv->lock, flags);
diff --git a/drivers/net/wireless/iwl-hw.h b/drivers/net/wireless/iwl-hw.h
index e01f29c..f371794 100644
--- a/drivers/net/wireless/iwl-hw.h
+++ b/drivers/net/wireless/iwl-hw.h
@@ -179,6 +179,8 @@ struct iwl_error_resp {
} __attribute__ ((packed));
#define PCI_LINK_CTRL 0x0F0
+#define PCI_POWER_SOURCE 0x0C8
+#define PCI_REG_WUM8 0x0E8
/*
* Rx config defines & structure
--
1.5.2
^ permalink raw reply related [flat|nested] 28+ messages in thread
* [PATCH 12/28] iwlwifi: shorten some structure and function names
2007-08-08 7:33 ` [PATCH 11/28] iwlwifi: add name for some PCI configuration space registers Zhu Yi
@ 2007-08-08 7:33 ` Zhu Yi
2007-08-08 7:33 ` [PATCH 13/28] iwlwifi: define iwl_rx_reply_scan only when CONFIG_IWLWIFI_DEBUG enabled Zhu Yi
0 siblings, 1 reply; 28+ messages in thread
From: Zhu Yi @ 2007-08-08 7:33 UTC (permalink / raw)
To: linville; +Cc: linux-wireless, Zhu Yi
Signed-off-by: Zhu Yi <yi.zhu@intel.com>
---
drivers/net/wireless/iwl-3945.c | 1 -
drivers/net/wireless/iwl-4965.c | 79 +++++++++++++------------------------
drivers/net/wireless/iwl-base.c | 10 +----
drivers/net/wireless/iwl-eeprom.h | 15 +++----
drivers/net/wireless/iwl-io.h | 10 ++---
5 files changed, 41 insertions(+), 74 deletions(-)
diff --git a/drivers/net/wireless/iwl-3945.c b/drivers/net/wireless/iwl-3945.c
index 50c21aa..c4441db 100644
--- a/drivers/net/wireless/iwl-3945.c
+++ b/drivers/net/wireless/iwl-3945.c
@@ -307,7 +307,6 @@ static void iwl3945_rx_reply_rx(struct iwl_priv *priv,
.rate = rx_hdr->rate,
.flag = 0,
};
-
u8 network_packet;
int snr;
diff --git a/drivers/net/wireless/iwl-4965.c b/drivers/net/wireless/iwl-4965.c
index d334951..0cbe798 100644
--- a/drivers/net/wireless/iwl-4965.c
+++ b/drivers/net/wireless/iwl-4965.c
@@ -660,10 +660,6 @@ int iwl_hw_nic_reset(struct iwl_priv *priv)
iwl_release_restricted_access(priv);
}
- spin_unlock_irqrestore(&priv->lock, flags);
-
- spin_lock_irqsave(&priv->lock, flags);
-
priv->status &= ~STATUS_HCMD_ACTIVE;
wake_up_interruptible(&priv->wait_command_queue);
@@ -1894,7 +1890,7 @@ iwl4965_get_channel_txpower_info(struct iwl_priv *priv, u8 phymode, u8 channel)
return ch_info;
}
-static s32 iwl4965_get_txatten_group_from_channel(u32 channel)
+static s32 iwl4965_get_tx_atten_grp(u32 channel)
{
if (channel >= CALIB_IWL_TX_ATTEN_GR5_FCH &&
channel <= CALIB_IWL_TX_ATTEN_GR5_LCH)
@@ -1922,22 +1918,18 @@ static s32 iwl4965_get_txatten_group_from_channel(u32 channel)
static u32 iwl4965_get_sub_band(const struct iwl_priv *priv, u32 channel)
{
- s32 sub_band = -1;
+ s32 b = -1;
- for (sub_band = 0; sub_band < EEPROM_TX_POWER_BANDS; sub_band++) {
-
- if (priv->eeprom.calib_info.band_info_tbl[sub_band].ch_from ==
- 0)
+ for (b = 0; b < EEPROM_TX_POWER_BANDS; b++) {
+ if (priv->eeprom.calib_info.band_info[b].ch_from == 0)
continue;
- if ((channel >=
- priv->eeprom.calib_info.band_info_tbl[sub_band].ch_from)
- && (channel <=
- priv->eeprom.calib_info.band_info_tbl[sub_band].ch_to))
+ if ((channel >= priv->eeprom.calib_info.band_info[b].ch_from)
+ && (channel <= priv->eeprom.calib_info.band_info[b].ch_to))
break;
}
- return sub_band;
+ return b;
}
static s32 iwl4965_interpolate_value(s32 x, s32 x1, s32 y1, s32 x2, s32 y2)
@@ -1952,16 +1944,15 @@ static s32 iwl4965_interpolate_value(s32 x, s32 x1, s32 y1, s32 x2, s32 y2)
}
}
-static int iwl4965_interpolate_chan(
- struct iwl_priv *priv, u32 channel,
- struct iwl_eeprom_calib_channel_info *chan_info)
+static int iwl4965_interpolate_chan(struct iwl_priv *priv, u32 channel,
+ struct iwl_eeprom_calib_ch_info *chan_info)
{
s32 s = -1;
u32 c;
u32 m;
- const struct iwl_eeprom_calib_measurement *m1;
- const struct iwl_eeprom_calib_measurement *m2;
- struct iwl_eeprom_calib_measurement *omeas;
+ const struct iwl_eeprom_calib_measure *m1;
+ const struct iwl_eeprom_calib_measure *m2;
+ struct iwl_eeprom_calib_measure *omeas;
u32 ch_i1;
u32 ch_i2;
@@ -1971,8 +1962,8 @@ static int iwl4965_interpolate_chan(
return -1;
}
- ch_i1 = priv->eeprom.calib_info.band_info_tbl[s].ch1.ch_num;
- ch_i2 = priv->eeprom.calib_info.band_info_tbl[s].ch2.ch_num;
+ ch_i1 = priv->eeprom.calib_info.band_info[s].ch1.ch_num;
+ ch_i2 = priv->eeprom.calib_info.band_info[s].ch2.ch_num;
chan_info->ch_num = (u8) channel;
IWL_DEBUG_TXPOWER("channel %d subband %d factory cal ch %d & %d\n",
@@ -1980,9 +1971,9 @@ static int iwl4965_interpolate_chan(
for (c = 0; c < EEPROM_TX_POWER_TX_CHAINS; c++) {
for (m = 0; m < EEPROM_TX_POWER_MEASUREMENTS; m++) {
- m1 = &(priv->eeprom.calib_info.band_info_tbl[s].ch1.
+ m1 = &(priv->eeprom.calib_info.band_info[s].ch1.
measurements[c][m]);
- m2 = &(priv->eeprom.calib_info.band_info_tbl[s].ch2.
+ m2 = &(priv->eeprom.calib_info.band_info[s].ch2.
measurements[c][m]);
omeas = &(chan_info->measurements[c][m]);
@@ -2299,12 +2290,12 @@ static int iwl4965_fill_txpower_tbl(struct iwl_priv *priv, u8 band, u8 channel,
s32 current_temp;
s32 reg_limit;
s32 current_regulatory;
- s32 txatten_group = CALIB_CH_GROUP_MAX;
+ s32 txatten_grp = CALIB_CH_GROUP_MAX;
int i = 0;
int c;
const struct iwl_channel_info *ch_info = NULL;
- struct iwl_eeprom_calib_channel_info ch_eeprom_info;
- const struct iwl_eeprom_calib_measurement *measurement;
+ struct iwl_eeprom_calib_ch_info ch_eeprom_info;
+ const struct iwl_eeprom_calib_measure *measurement;
s16 voltage;
s32 init_voltage;
s32 voltage_compensation;
@@ -2344,12 +2335,12 @@ static int iwl4965_fill_txpower_tbl(struct iwl_priv *priv, u8 band, u8 channel,
/* get txatten group, used to select 1) thermal txpower adjustment
* and 2) mimo txpower balance between Tx chains. */
- txatten_group = iwl4965_get_txatten_group_from_channel(channel);
- if (txatten_group < 0)
+ txatten_grp = iwl4965_get_tx_atten_grp(channel);
+ if (txatten_grp < 0)
return -EINVAL;
IWL_DEBUG_TXPOWER("channel %d belongs to txatten group %d\n",
- channel, txatten_group);
+ channel, txatten_grp);
if (is_fat) {
if (ctrl_chan_high)
@@ -2407,18 +2398,12 @@ static int iwl4965_fill_txpower_tbl(struct iwl_priv *priv, u8 band, u8 channel,
current_temp = min(priv->temperature, IWL_TX_POWER_TEMPERATURE_MAX);
current_temp = KELVIN_TO_CELSIUS(current_temp);
- if (-40 > current_temp) {
- IWL_WARNING("Invalid temperature %d, can't calculate "
- "txpower\n", current_temp);
- return -EINVAL;
- }
-
/* select thermal txpower adjustment params, based on channel group
* (same frequency group used for mimo txatten adjustment) */
degrees_per_05db_num =
- tx_power_cmp_tble[txatten_group].degrees_per_05db_a;
+ tx_power_cmp_tble[txatten_grp].degrees_per_05db_a;
degrees_per_05db_denom =
- tx_power_cmp_tble[txatten_group].degrees_per_05db_a_denom;
+ tx_power_cmp_tble[txatten_grp].degrees_per_05db_a_denom;
/* get per-chain txpower values from factory measurements */
for (c = 0; c < 2; c++) {
@@ -2486,7 +2471,7 @@ static int iwl4965_fill_txpower_tbl(struct iwl_priv *priv, u8 band, u8 channel,
if (is_mimo_rate)
atten_value =
priv->card_alive_init.
- tx_atten[txatten_group][c];
+ tx_atten[txatten_grp][c];
else
atten_value = 0;
@@ -2765,11 +2750,6 @@ int iwl_hw_tx_queue_init(struct iwl_priv *priv, struct iwl_tx_queue *txq)
return 0;
}
-static inline u32 iwl4965_get_dma_lo_address(dma_addr_t addr)
-{
- return (u32) (addr & 0xffffffff);
-}
-
static inline u8 iwl4965_get_dma_hi_address(dma_addr_t addr)
{
return sizeof(addr) > sizeof(u32) ? (addr >> 16) >> 16 : 0;
@@ -2792,8 +2772,7 @@ int iwl_hw_tx_queue_attach_buffer_to_tfd(struct iwl_priv *priv,
is_odd = num_tbs & 0x1;
if (!is_odd) {
- tfd->pa[index].tb1_addr = cpu_to_le32(
- iwl4965_get_dma_lo_address(addr));
+ tfd->pa[index].tb1_addr = cpu_to_le32(addr);
IWL_SET_BITS(tfd->pa[index], tb1_addr_hi,
iwl4965_get_dma_hi_address(addr));
IWL_SET_BITS(tfd->pa[index], tb1_len, len);
@@ -3281,8 +3260,7 @@ int iwl4965_tx_cmd(struct iwl_priv *priv, struct iwl_cmd *out_cmd,
scratch_phys = txcmd_phys + sizeof(struct iwl_cmd_header) +
offsetof(struct iwl_tx_cmd, scratch);
- tx->dram_lsb_ptr = cpu_to_le32(
- iwl4965_get_dma_lo_address(scratch_phys));
+ tx->dram_lsb_ptr = cpu_to_le32(scratch_phys);
tx->dram_msb_ptr = iwl4965_get_dma_hi_address(scratch_phys);
/* Hard coded to start at the highest retry fallback position
@@ -3802,7 +3780,6 @@ static void iwl4965_rx_reply_rx(struct iwl_priv *priv,
struct iwl_rx_mem_buffer *rxb)
{
struct iwl_rx_packet *pkt = (void *)rxb->skb->data;
-
/* Use phy data (Rx signal strength, etc.) contained within
* this rx packet for legacy frames,
* or phy data cached from REPLY_RX_PHY_CMD for HT frames. */
@@ -3810,7 +3787,6 @@ static void iwl4965_rx_reply_rx(struct iwl_priv *priv,
struct iwl4965_rx_phy_res *rx_start = (include_phy) ?
(struct iwl4965_rx_phy_res *)&(pkt->u.raw[0]) :
(struct iwl4965_rx_phy_res *)&priv->last_phy_res[1];
-
__le32 *rx_end;
unsigned int len = 0;
struct ieee80211_hdr *header;
@@ -4098,6 +4074,7 @@ static void iwl4965_set_tx_status(struct iwl_priv *priv, int txq_id, int idx,
{
struct ieee80211_tx_status *tx_status =
&(priv->txq[txq_id].txb[idx].status);
+
tx_status->flags = status?IEEE80211_TX_STATUS_ACK:0;
tx_status->retry_count += retry_count;
tx_status->control.tx_rate = rate;
diff --git a/drivers/net/wireless/iwl-base.c b/drivers/net/wireless/iwl-base.c
index e419391..dad9649 100644
--- a/drivers/net/wireless/iwl-base.c
+++ b/drivers/net/wireless/iwl-base.c
@@ -4296,8 +4296,8 @@ int iwl_rx_queue_update_write_ptr(struct iwl_priv *priv, struct iwl_rx_queue *q)
if (rc)
goto exit_unlock;
- iwl_write_restricted(priv,
- FH_RSCSR_CHNL0_WPTR, q->write & ~0x7);
+ iwl_write_restricted(priv, FH_RSCSR_CHNL0_WPTR,
+ q->write & ~0x7);
iwl_release_restricted_access(priv);
} else
iwl_write32(priv, FH_RSCSR_CHNL0_WPTR, q->write & ~0x7);
@@ -6745,11 +6745,7 @@ void iwl_down(struct iwl_priv *priv)
udelay(5);
iwl_hw_nic_stop_master(priv);
-
- spin_lock_irqsave(&priv->lock, flags);
iwl_set_bit(priv, CSR_RESET, CSR_RESET_REG_FLAG_SW_RESET);
- spin_unlock_irqrestore(&priv->lock, flags);
-
iwl_hw_nic_reset(priv);
exit:
@@ -9328,9 +9324,7 @@ static void iwl_resume(struct iwl_priv *priv)
spin_lock_irqsave(&priv->lock, flags);
iwl_clear_bit(priv, CSR_GP_CNTRL, CSR_GP_CNTRL_REG_FLAG_MAC_ACCESS_REQ);
- spin_unlock_irqrestore(&priv->lock, flags);
- spin_lock_irqsave(&priv->lock, flags);
if (!iwl_grab_restricted_access(priv)) {
iwl_write_restricted_reg(priv, ALM_APMG_CLK_DIS,
APMG_CLK_REG_VAL_DMA_CLK_RQT);
diff --git a/drivers/net/wireless/iwl-eeprom.h b/drivers/net/wireless/iwl-eeprom.h
index 19d7028..c6b0faa 100644
--- a/drivers/net/wireless/iwl-eeprom.h
+++ b/drivers/net/wireless/iwl-eeprom.h
@@ -187,32 +187,31 @@ struct iwl_eeprom_temperature_corr {
#define EEPROM_TX_POWER_VERSION (2)
#define EEPROM_TX_POWER_VERSION_NEW (5)
-struct iwl_eeprom_calib_measurement {
+struct iwl_eeprom_calib_measure {
u8 temperature;
u8 gain_idx;
u8 actual_pow;
s8 pa_det;
} __attribute__ ((packed));
-struct iwl_eeprom_calib_channel_info {
+struct iwl_eeprom_calib_ch_info {
u8 ch_num;
- struct iwl_eeprom_calib_measurement
- measurements[EEPROM_TX_POWER_TX_CHAINS][EEPROM_TX_POWER_MEASUREMENTS];
+ struct iwl_eeprom_calib_measure measurements[EEPROM_TX_POWER_TX_CHAINS]
+ [EEPROM_TX_POWER_MEASUREMENTS];
} __attribute__ ((packed));
struct iwl_eeprom_calib_subband_info {
u8 ch_from;
u8 ch_to;
- struct iwl_eeprom_calib_channel_info ch1;
- struct iwl_eeprom_calib_channel_info ch2;
+ struct iwl_eeprom_calib_ch_info ch1;
+ struct iwl_eeprom_calib_ch_info ch2;
} __attribute__ ((packed));
struct iwl_eeprom_calib_info {
u8 saturation_power24;
u8 saturation_power52;
__le16 voltage; /* signed */
- struct iwl_eeprom_calib_subband_info
- band_info_tbl[EEPROM_TX_POWER_BANDS];
+ struct iwl_eeprom_calib_subband_info band_info[EEPROM_TX_POWER_BANDS];
} __attribute__ ((packed));
#endif
diff --git a/drivers/net/wireless/iwl-io.h b/drivers/net/wireless/iwl-io.h
index 0ae031a..3f8cb06 100644
--- a/drivers/net/wireless/iwl-io.h
+++ b/drivers/net/wireless/iwl-io.h
@@ -415,18 +415,16 @@ static inline void iwl_write_restricted_mem(struct iwl_priv *priv, u32 addr,
iwl_write_restricted(priv, HBUS_TARG_MEM_WDAT, val);
}
-static inline void iwl_write_restricted_mem_buffer(struct iwl_priv *priv,
- u32 addr, u32 len,
- u32 *values)
+static inline void iwl_write_restricted_mems(struct iwl_priv *priv, u32 addr,
+ u32 len, u32 *values)
{
iwl_write_restricted(priv, HBUS_TARG_MEM_WADDR, addr);
for (; 0 < len; len -= sizeof(u32), values++)
iwl_write_restricted(priv, HBUS_TARG_MEM_WDAT, *values);
}
-static inline void iwl_write_restricted_reg_buffer(struct iwl_priv *priv,
- u32 reg, u32 len,
- u8 *values)
+static inline void iwl_write_restricted_regs(struct iwl_priv *priv, u32 reg,
+ u32 len, u8 *values)
{
u32 reg_offset = reg;
u32 aligment = reg & 0x3;
--
1.5.2
^ permalink raw reply related [flat|nested] 28+ messages in thread
* [PATCH 13/28] iwlwifi: define iwl_rx_reply_scan only when CONFIG_IWLWIFI_DEBUG enabled
2007-08-08 7:33 ` [PATCH 12/28] iwlwifi: shorten some structure and function names Zhu Yi
@ 2007-08-08 7:33 ` Zhu Yi
2007-08-08 7:33 ` [PATCH 14/28] iwlwifi: remove redundant quotes Zhu Yi
0 siblings, 1 reply; 28+ messages in thread
From: Zhu Yi @ 2007-08-08 7:33 UTC (permalink / raw)
To: linville; +Cc: linux-wireless, Zhu Yi
Signed-off-by: Zhu Yi <yi.zhu@intel.com>
---
drivers/net/wireless/iwl-base.c | 2 ++
1 files changed, 2 insertions(+), 0 deletions(-)
diff --git a/drivers/net/wireless/iwl-base.c b/drivers/net/wireless/iwl-base.c
index dad9649..8863953 100644
--- a/drivers/net/wireless/iwl-base.c
+++ b/drivers/net/wireless/iwl-base.c
@@ -3902,11 +3902,13 @@ static void iwl_rx_beacon_notif(struct iwl_priv *priv,
static void iwl_rx_reply_scan(struct iwl_priv *priv,
struct iwl_rx_mem_buffer *rxb)
{
+#ifdef CONFIG_IWLWIFI_DEBUG
struct iwl_rx_packet *pkt = (void *)rxb->skb->data;
struct iwl_scanstart_notification *notif =
(struct iwl_scanstart_notification *)pkt->u.raw;
IWL_DEBUG_RX("Scan request status = 0x%x\n", notif->status);
+#endif
}
static void iwl_rx_scan_start_notif(struct iwl_priv *priv,
--
1.5.2
^ permalink raw reply related [flat|nested] 28+ messages in thread
* [PATCH 14/28] iwlwifi: remove redundant quotes
2007-08-08 7:33 ` [PATCH 13/28] iwlwifi: define iwl_rx_reply_scan only when CONFIG_IWLWIFI_DEBUG enabled Zhu Yi
@ 2007-08-08 7:33 ` Zhu Yi
2007-08-08 7:33 ` [PATCH 15/28] iwlwifi: Endianity fix for rxon host commands Zhu Yi
0 siblings, 1 reply; 28+ messages in thread
From: Zhu Yi @ 2007-08-08 7:33 UTC (permalink / raw)
To: linville; +Cc: linux-wireless, Ian Schram, Zhu Yi
From: Ian Schram <ischram@telenet.be>
Remove some redundant quotes that probably originated
from moving code around.
Signed-of-by: Ian Schram <ischram@telenet.be>
Signed-off-by: Zhu Yi <yi.zhu@intel.com>
---
drivers/net/wireless/iwl-base.c | 8 ++++----
1 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/drivers/net/wireless/iwl-base.c b/drivers/net/wireless/iwl-base.c
index 8863953..25931f5 100644
--- a/drivers/net/wireless/iwl-base.c
+++ b/drivers/net/wireless/iwl-base.c
@@ -1326,7 +1326,7 @@ static int iwl_add_sta_sync_callback(struct iwl_priv *priv,
struct iwl_rx_packet *res = NULL;
if (!skb) {
- IWL_ERROR("Error: Response NULL in " "REPLY_ADD_STA.\n");
+ IWL_ERROR("Error: Response NULL in REPLY_ADD_STA.\n");
return 1;
}
@@ -2589,8 +2589,8 @@ static int iwl_set_mode(struct iwl_priv *priv, int mode)
cancel_delayed_work(&priv->scan_check);
priv->status &= ~STATUS_SCAN_PENDING;
if (iwl_scan_cancel(priv, 100)) {
- IWL_WARNING("Aborted scan still in progress " "after 100ms\n");
- IWL_DEBUG_MAC80211("leaving - scan abort " "failed.\n");
+ IWL_WARNING("Aborted scan still in progress after 100ms\n");
+ IWL_DEBUG_MAC80211("leaving - scan abort failed.\n");
return -EAGAIN;
}
@@ -7624,7 +7624,7 @@ static int iwl_mac_config_interface(struct ieee80211_hw *hw, int if_id,
if (iwl_scan_cancel(priv, 100)) {
IWL_WARNING("Aborted scan still in progress "
"after 100ms\n");
- IWL_DEBUG_MAC80211("leaving - scan abort " "failed.\n");
+ IWL_DEBUG_MAC80211("leaving - scan abort failed.\n");
mutex_unlock(&priv->mutex);
return -EAGAIN;
}
--
1.5.2
^ permalink raw reply related [flat|nested] 28+ messages in thread
* [PATCH 15/28] iwlwifi: Endianity fix for rxon host commands
2007-08-08 7:33 ` [PATCH 14/28] iwlwifi: remove redundant quotes Zhu Yi
@ 2007-08-08 7:33 ` Zhu Yi
2007-08-08 7:33 ` [PATCH 16/28] iwlwifi: Endianity fix for beacon host command Zhu Yi
0 siblings, 1 reply; 28+ messages in thread
From: Zhu Yi @ 2007-08-08 7:33 UTC (permalink / raw)
To: linville; +Cc: linux-wireless, Tomas Winkler, Gregory Greenman, Zhu Yi
From: Tomas Winkler <tomas.winkler@intel.com>
This patch fixes left over endianity issues in rxon host command.
Signed-off-by: Gregory Greenman <gregory.greenman@intel.com>
Signed-off-by: Tomas Winkler <tomas.winkler@intel.com>
Signed-off-by: Zhu Yi <yi.zhu@intel.com>
---
drivers/net/wireless/iwl-4965-hw.h | 21 +++++++++++----------
drivers/net/wireless/iwl-4965.c | 10 ++++++----
2 files changed, 17 insertions(+), 14 deletions(-)
diff --git a/drivers/net/wireless/iwl-4965-hw.h b/drivers/net/wireless/iwl-4965-hw.h
index 106f7c0..bb814cf 100644
--- a/drivers/net/wireless/iwl-4965-hw.h
+++ b/drivers/net/wireless/iwl-4965-hw.h
@@ -229,20 +229,21 @@ struct iwl_channel_switch_notif {
/********************* END TXPOWER *****************************************/
/* HT flags */
-#define RXON_FLG_CONTROL_CHANNEL_LOCATION_MSK 0x400000
-#define RXON_FLG_CONTROL_CHANNEL_LOC_LOW_MSK 0x000000
-#define RXON_FLG_CONTROL_CHANNEL_LOC_HIGH_MSK 0x400000
+#define RXON_FLG_CONTROL_CHANNEL_LOCATION_POS (22)
+#define RXON_FLG_CONTROL_CHANNEL_LOCATION_MSK __constant_cpu_to_le32(0x1<<22)
+#define RXON_FLG_CONTROL_CHANNEL_LOC_LOW_MSK __constant_cpu_to_le32(0x0<<22)
+#define RXON_FLG_CONTROL_CHANNEL_LOC_HIGH_MSK __constant_cpu_to_le32(0x1<<22)
#define RXON_FLG_HT_OPERATING_MODE_POS (23)
-/*yshevet - bug fix */
-#define RXON_FLG_HT_PROT_MSK 0x800000
-#define RXON_FLG_FAT_PROT_MSK 0x1000000
+
+#define RXON_FLG_HT_PROT_MSK __constant_cpu_to_le32(0x1<<23)
+#define RXON_FLG_FAT_PROT_MSK __constant_cpu_to_le32(0x2<<23)
#define RXON_FLG_CHANNEL_MODE_POS (25)
-#define RXON_FLG_CHANNEL_MODE_MSK 0x06000000
-#define RXON_FLG_CHANNEL_MODE_LEGACY_MSK 0x00000000
-#define RXON_FLG_CHANNEL_MODE_PURE_40_MSK 0x02000000
-#define RXON_FLG_CHANNEL_MODE_MIXED_MSK 0x04000000
+#define RXON_FLG_CHANNEL_MODE_MSK __constant_cpu_to_le32(0x3<<25)
+#define RXON_FLG_CHANNEL_MODE_LEGACY_MSK __constant_cpu_to_le32(0x0<<25)
+#define RXON_FLG_CHANNEL_MODE_PURE_40_MSK __constant_cpu_to_le32(0x1<<25)
+#define RXON_FLG_CHANNEL_MODE_MIXED_MSK __constant_cpu_to_le32(0x2<<25)
#define RXON_RX_CHAIN_DRIVER_FORCE_MSK __constant_cpu_to_le16(0x1<<0)
#define RXON_RX_CHAIN_VALID_MSK __constant_cpu_to_le16(0x7<<1)
diff --git a/drivers/net/wireless/iwl-4965.c b/drivers/net/wireless/iwl-4965.c
index 0cbe798..5999be5 100644
--- a/drivers/net/wireless/iwl-4965.c
+++ b/drivers/net/wireless/iwl-4965.c
@@ -79,7 +79,7 @@ const struct iwl_rate_info iwl_rates[IWL_RATE_COUNT] = {
IWL_DECLARE_RATE_INFO(60, 60, 48, INV, 48, INV, 48, INV),/* 60mbps */
};
-static int is_fat_channel(u32 rxon_flags)
+static int is_fat_channel(__le32 rxon_flags)
{
return (rxon_flags & RXON_FLG_CHANNEL_MODE_PURE_40_MSK) ||
(rxon_flags & RXON_FLG_CHANNEL_MODE_MIXED_MSK);
@@ -2859,12 +2859,14 @@ void iwl4965_set_rxon_chain(struct iwl_priv *priv)
* Just after first association, iwl4965_noise_calibration()
* checks which antennas actually *are* connected. */
priv->staging_rxon.rx_chain |=
- (priv->valid_antenna << RXON_RX_CHAIN_VALID_POS);
+ cpu_to_le16(priv->valid_antenna << RXON_RX_CHAIN_VALID_POS);
/* How many receivers should we use? */
iwl4965_get_rx_chain_counter(priv, &idle_state, &rx_state);
- priv->staging_rxon.rx_chain |= (rx_state << RXON_RX_CHAIN_MIMO_CNT_POS);
- priv->staging_rxon.rx_chain |= (idle_state << RXON_RX_CHAIN_CNT_POS);
+ priv->staging_rxon.rx_chain |=
+ cpu_to_le16(rx_state << RXON_RX_CHAIN_MIMO_CNT_POS);
+ priv->staging_rxon.rx_chain |=
+ cpu_to_le16(idle_state << RXON_RX_CHAIN_CNT_POS);
if (!is_single && !(priv->status & STATUS_POWER_PMI) && (rx_state >= 2))
priv->staging_rxon.rx_chain |= RXON_RX_CHAIN_MIMO_FORCE_MSK;
--
1.5.2
^ permalink raw reply related [flat|nested] 28+ messages in thread
* [PATCH 16/28] iwlwifi: Endianity fix for beacon host command
2007-08-08 7:33 ` [PATCH 15/28] iwlwifi: Endianity fix for rxon host commands Zhu Yi
@ 2007-08-08 7:33 ` Zhu Yi
2007-08-08 7:33 ` [PATCH 17/28] iwlwifi: Endianity fix for channel number Zhu Yi
0 siblings, 1 reply; 28+ messages in thread
From: Zhu Yi @ 2007-08-08 7:33 UTC (permalink / raw)
To: linville; +Cc: linux-wireless, Tomas Winkler, Gregory Greenman, Zhu Yi
From: Tomas Winkler <tomas.winkler@intel.com>
This patch fixes endianity issues in beacon host command
Signed-off-by: Gregory Greenman <gregory.greenman@intel.com>
Signed-off-by: Tomas Winkler <tomas.winkler@intel.com>
Signed-off-by: Zhu Yi <yi.zhu@intel.com>
---
drivers/net/wireless/iwl-3945.c | 9 +++++----
drivers/net/wireless/iwl-4965.c | 9 +++++----
drivers/net/wireless/iwl-base.c | 8 +++++---
drivers/net/wireless/iwlwifi.h | 8 ++++----
4 files changed, 19 insertions(+), 15 deletions(-)
diff --git a/drivers/net/wireless/iwl-3945.c b/drivers/net/wireless/iwl-3945.c
index c4441db..d209873 100644
--- a/drivers/net/wireless/iwl-3945.c
+++ b/drivers/net/wireless/iwl-3945.c
@@ -2232,24 +2232,25 @@ int iwl_hw_set_hw_setting(struct iwl_priv *priv)
return 0;
}
-int iwl_hw_get_beacon_cmd(struct iwl_priv *priv,
+unsigned int iwl_hw_get_beacon_cmd(struct iwl_priv *priv,
struct iwl_frame *frame, u8 rate)
{
struct iwl_tx_beacon_cmd *tx_beacon_cmd;
- int frame_size;
+ unsigned int frame_size;
tx_beacon_cmd = (struct iwl_tx_beacon_cmd *)&frame->u;
memset(tx_beacon_cmd, 0, sizeof(*tx_beacon_cmd));
tx_beacon_cmd->tx.sta_id = IWL_BROADCAST_ID;
- tx_beacon_cmd->tx.stop_time.life_time = 0xFFFFFFFF;
+ tx_beacon_cmd->tx.stop_time.life_time = TX_CMD_LIFE_TIME_INFINITE;
frame_size = iwl_fill_beacon_frame(priv,
tx_beacon_cmd->frame,
BROADCAST_ADDR,
sizeof(frame->u) - sizeof(*tx_beacon_cmd));
- tx_beacon_cmd->tx.len = frame_size;
+ BUG_ON(frame_size > MAX_MPDU_SIZE);
+ tx_beacon_cmd->tx.len = cpu_to_le16((u16)frame_size);
tx_beacon_cmd->tx.rate = rate;
tx_beacon_cmd->tx.tx_flags = (TX_CMD_FLG_SEQ_CTL_MSK |
diff --git a/drivers/net/wireless/iwl-4965.c b/drivers/net/wireless/iwl-4965.c
index 5999be5..e907f06 100644
--- a/drivers/net/wireless/iwl-4965.c
+++ b/drivers/net/wireless/iwl-4965.c
@@ -2695,24 +2695,25 @@ int iwl_hw_get_temperature(struct iwl_priv *priv)
return priv->temperature;
}
-int iwl_hw_get_beacon_cmd(struct iwl_priv *priv,
+unsigned int iwl_hw_get_beacon_cmd(struct iwl_priv *priv,
struct iwl_frame *frame, u8 rate)
{
struct iwl_tx_beacon_cmd *tx_beacon_cmd;
- int frame_size;
+ unsigned int frame_size;
tx_beacon_cmd = &frame->u.beacon;
memset(tx_beacon_cmd, 0, sizeof(*tx_beacon_cmd));
tx_beacon_cmd->tx.sta_id = IWL_BROADCAST_ID;
- tx_beacon_cmd->tx.stop_time.life_time = 0xFFFFFFFF;
+ tx_beacon_cmd->tx.stop_time.life_time = TX_CMD_LIFE_TIME_INFINITE;
frame_size = iwl_fill_beacon_frame(priv,
tx_beacon_cmd->frame,
BROADCAST_ADDR,
sizeof(frame->u) - sizeof(*tx_beacon_cmd));
- tx_beacon_cmd->tx.len = frame_size;
+ BUG_ON(frame_size > MAX_MPDU_SIZE);
+ tx_beacon_cmd->tx.len = cpu_to_le16((u16)frame_size);
if ((rate == IWL_RATE_1M_PLCP) || (rate >= IWL_RATE_2M_PLCP))
tx_beacon_cmd->tx.rate_n_flags =
diff --git a/drivers/net/wireless/iwl-base.c b/drivers/net/wireless/iwl-base.c
index 25931f5..8f19494 100644
--- a/drivers/net/wireless/iwl-base.c
+++ b/drivers/net/wireless/iwl-base.c
@@ -1481,8 +1481,9 @@ static void iwl_free_frame(struct iwl_priv *priv, struct iwl_frame *frame)
list_add(&frame->list, &priv->free_frames);
}
-int iwl_fill_beacon_frame(struct iwl_priv *priv, struct ieee80211_hdr *hdr,
- const u8 *dest, int left)
+unsigned int iwl_fill_beacon_frame(struct iwl_priv *priv,
+ struct ieee80211_hdr *hdr,
+ const u8 *dest, int left)
{
if (!iwl_is_associated(priv) || !priv->ibss_beacon ||
@@ -1501,7 +1502,8 @@ int iwl_fill_beacon_frame(struct iwl_priv *priv, struct ieee80211_hdr *hdr,
static int iwl_send_beacon_cmd(struct iwl_priv *priv)
{
struct iwl_frame *frame;
- int frame_size, rc;
+ unsigned int frame_size;
+ int rc;
u8 rate;
frame = iwl_get_free_frame(priv);
diff --git a/drivers/net/wireless/iwlwifi.h b/drivers/net/wireless/iwlwifi.h
index be94217..6fea9a4 100644
--- a/drivers/net/wireless/iwlwifi.h
+++ b/drivers/net/wireless/iwlwifi.h
@@ -630,9 +630,9 @@ extern int iwl_send_cmd_pdu(struct iwl_priv *priv, u8 id, u16 len,
const void *data);
extern int __must_check iwl_send_cmd(struct iwl_priv *priv,
struct iwl_host_cmd *cmd);
-extern int iwl_fill_beacon_frame(struct iwl_priv *priv,
- struct ieee80211_hdr *hdr, const u8 *dest,
- int left);
+extern unsigned int iwl_fill_beacon_frame(struct iwl_priv *priv,
+ struct ieee80211_hdr *hdr,
+ const u8 *dest, int left);
extern int iwl_rx_queue_update_write_ptr(struct iwl_priv *priv,
struct iwl_rx_queue *q);
extern int iwl_send_statistics_request(struct iwl_priv *priv);
@@ -692,7 +692,7 @@ extern int iwl_tx_queue_free_tfd(struct iwl_priv *priv,
struct iwl_tx_queue *txq);
extern int iwl_hw_tx_queue_init(struct iwl_priv *priv,
struct iwl_tx_queue *txq);
-extern int iwl_hw_get_beacon_cmd(struct iwl_priv *priv,
+extern unsigned int iwl_hw_get_beacon_cmd(struct iwl_priv *priv,
struct iwl_frame *frame, u8 rate);
extern int iwl_hw_get_rx_read(struct iwl_priv *priv);
extern void iwl_hw_build_tx_cmd_rate(struct iwl_priv *priv,
--
1.5.2
^ permalink raw reply related [flat|nested] 28+ messages in thread
* [PATCH 17/28] iwlwifi: Endianity fix for channel number
2007-08-08 7:33 ` [PATCH 16/28] iwlwifi: Endianity fix for beacon host command Zhu Yi
@ 2007-08-08 7:33 ` Zhu Yi
2007-08-08 7:33 ` [PATCH 18/28] iwlwifi: shorten more function names Zhu Yi
0 siblings, 1 reply; 28+ messages in thread
From: Zhu Yi @ 2007-08-08 7:33 UTC (permalink / raw)
To: linville; +Cc: linux-wireless, Tomas Winkler, Zhu Yi
From: Tomas Winkler <tomas.winkler@intel.com>
This patch fixes endinaity issue for channel number. It tries to
introduce some more consistency in channel number type (u16).
Signed-off-by: Tomas Winkler <tomas.winkler@intel.com>
Signed-off-by: Zhu Yi <yi.zhu@intel.com>
---
drivers/net/wireless/iwl-3945.c | 4 +---
drivers/net/wireless/iwl-4965.c | 22 ++++++++++------------
drivers/net/wireless/iwl-4965.h | 4 ++--
drivers/net/wireless/iwl-base.c | 4 ++--
drivers/net/wireless/iwl-channel.h | 2 +-
drivers/net/wireless/iwlwifi.h | 2 +-
6 files changed, 17 insertions(+), 21 deletions(-)
diff --git a/drivers/net/wireless/iwl-3945.c b/drivers/net/wireless/iwl-3945.c
index d209873..a9a1921 100644
--- a/drivers/net/wireless/iwl-3945.c
+++ b/drivers/net/wireless/iwl-3945.c
@@ -1695,7 +1695,6 @@ int iwl_hw_reg_set_txpower(struct iwl_priv *priv, s8 power)
{
struct iwl_channel_info *ch_info;
s8 max_power;
- u8 channel;
u8 a_band;
u8 i;
@@ -1713,7 +1712,6 @@ int iwl_hw_reg_set_txpower(struct iwl_priv *priv, s8 power)
for (i = 0; i < priv->channel_count; i++) {
ch_info = &priv->channel_info[i];
a_band = is_channel_a_band(ch_info);
- channel = ch_info->channel;
/* find minimum power of all user and regulatory constraints
* (does not consider h/w clipping limitations) */
@@ -1736,7 +1734,7 @@ int iwl_hw_reg_set_txpower(struct iwl_priv *priv, s8 power)
}
/* will add 3945 channel switch cmd handling later */
-int iwl_hw_channel_switch(struct iwl_priv *priv, u8 channel)
+int iwl_hw_channel_switch(struct iwl_priv *priv, u16 channel)
{
return 0;
}
diff --git a/drivers/net/wireless/iwl-4965.c b/drivers/net/wireless/iwl-4965.c
index e907f06..a3e6603 100644
--- a/drivers/net/wireless/iwl-4965.c
+++ b/drivers/net/wireless/iwl-4965.c
@@ -298,7 +298,7 @@ static int iwl4965_kw_alloc(struct iwl_priv *priv)
#define CHECK_AND_PRINT(x) ((eeprom_ch->flags & EEPROM_CHANNEL_##x) \
? # x " " : "")
-int iwl4965_set_fat_chan_info(struct iwl_priv *priv, int phymode, int channel,
+int iwl4965_set_fat_chan_info(struct iwl_priv *priv, int phymode, u16 channel,
const struct iwl_eeprom_channel *eeprom_ch,
u8 fat_extension_channel)
{
@@ -1878,7 +1878,7 @@ static s32 iwl4965_get_voltage_compensation(s32 eeprom_voltage,
}
static const struct iwl_channel_info *
-iwl4965_get_channel_txpower_info(struct iwl_priv *priv, u8 phymode, u8 channel)
+iwl4965_get_channel_txpower_info(struct iwl_priv *priv, u8 phymode, u16 channel)
{
const struct iwl_channel_info *ch_info;
@@ -1890,7 +1890,7 @@ iwl4965_get_channel_txpower_info(struct iwl_priv *priv, u8 phymode, u8 channel)
return ch_info;
}
-static s32 iwl4965_get_tx_atten_grp(u32 channel)
+static s32 iwl4965_get_tx_atten_grp(u16 channel)
{
if (channel >= CALIB_IWL_TX_ATTEN_GR5_FCH &&
channel <= CALIB_IWL_TX_ATTEN_GR5_LCH)
@@ -2277,7 +2277,7 @@ static const struct gain_entry gain_table[2][108] = {
}
};
-static int iwl4965_fill_txpower_tbl(struct iwl_priv *priv, u8 band, u8 channel,
+static int iwl4965_fill_txpower_tbl(struct iwl_priv *priv, u8 band, u16 channel,
u8 is_fat, u8 ctrl_chan_high,
struct iwl_tx_power_db *tx_power_tbl)
{
@@ -2549,7 +2549,6 @@ int iwl_hw_reg_send_txpower(struct iwl_priv *priv)
struct iwl_tx_power_table_cmd cmd = { 0 };
int rc = 0;
u8 band = 0;
- u8 channel = 0;
u8 is_fat = 0;
u8 ctrl_chan_high = 0;
@@ -2565,8 +2564,6 @@ int iwl_hw_reg_send_txpower(struct iwl_priv *priv)
(priv->phymode == MODE_IEEE80211G) ||
(priv->phymode == MODE_ATHEROS_TURBOG)) ? 1 : 0;
- channel = priv->active_rxon.channel;
-
is_fat = is_fat_channel(priv->active_rxon.flags);
if (is_fat &&
@@ -2574,11 +2571,12 @@ int iwl_hw_reg_send_txpower(struct iwl_priv *priv)
ctrl_chan_high = 1;
cmd.band = band;
- cmd.channel = channel;
+ cmd.channel = priv->active_rxon.channel;
cmd.channel_normal_width = 0;
- rc = iwl4965_fill_txpower_tbl(priv, band, channel, is_fat,
- ctrl_chan_high, &cmd.tx_power);
+ rc = iwl4965_fill_txpower_tbl(priv, band,
+ le32_to_cpu(priv->active_rxon.channel),
+ is_fat, ctrl_chan_high, &cmd.tx_power);
if (rc)
return rc;
@@ -2586,7 +2584,7 @@ int iwl_hw_reg_send_txpower(struct iwl_priv *priv)
return rc;
}
-int iwl_hw_channel_switch(struct iwl_priv *priv, u8 channel)
+int iwl_hw_channel_switch(struct iwl_priv *priv, u16 channel)
{
int rc;
u8 band = 0;
@@ -4404,7 +4402,7 @@ void iwl4965_add_station(struct iwl_priv *priv, const u8 *addr, int is_ap)
#ifdef CONFIG_IWLWIFI_HT
static u8 iwl_is_channel_extension(struct iwl_priv *priv, int phymode,
- int channel, u8 extension_chan_offset)
+ u16 channel, u8 extension_chan_offset)
{
const struct iwl_channel_info *ch_info;
diff --git a/drivers/net/wireless/iwl-4965.h b/drivers/net/wireless/iwl-4965.h
index db4a02e..5a3266f 100644
--- a/drivers/net/wireless/iwl-4965.h
+++ b/drivers/net/wireless/iwl-4965.h
@@ -63,7 +63,7 @@ static inline void iwl4965_chain_noise_reset(struct iwl_priv *priv) {}
static inline void iwl4965_init_sensitivity(struct iwl_priv *priv, u8 flags,
u8 force) {}
static inline int iwl4965_set_fat_chan_info(struct iwl_priv *priv, int phymode,
- int channel,
+ u16 channel,
const struct iwl_eeprom_channel *eeprom_ch,
u8 fat_extension_channel) { return 0; }
static inline void iwl4965_rf_kill_ct_config(struct iwl_priv *priv) {}
@@ -98,7 +98,7 @@ extern void iwl4965_chain_noise_reset(struct iwl_priv *priv);
extern void iwl4965_init_sensitivity(struct iwl_priv *priv, u8 flags,
u8 force);
extern int iwl4965_set_fat_chan_info(struct iwl_priv *priv, int phymode,
- int channel,
+ u16 channel,
const struct iwl_eeprom_channel *eeprom_ch,
u8 fat_extension_channel);
extern void iwl4965_rf_kill_ct_config(struct iwl_priv *priv);
diff --git a/drivers/net/wireless/iwl-base.c b/drivers/net/wireless/iwl-base.c
index 8f19494..3b08c7c 100644
--- a/drivers/net/wireless/iwl-base.c
+++ b/drivers/net/wireless/iwl-base.c
@@ -5314,7 +5314,7 @@ static void iwl_init_band_reference(const struct iwl_priv *priv, int band,
}
const struct iwl_channel_info *iwl_get_channel_info(const struct iwl_priv *priv,
- int phymode, int channel)
+ int phymode, u16 channel)
{
int i;
@@ -8503,7 +8503,7 @@ static ssize_t store_measurement(struct device *d,
{
struct iwl_priv *priv = dev_get_drvdata(d);
struct ieee80211_measurement_params params = {
- .channel = priv->active_rxon.channel,
+ .channel = le16_to_cpu(priv->active_rxon.channel),
.start_time = priv->last_tsf,
.duration = 1,
};
diff --git a/drivers/net/wireless/iwl-channel.h b/drivers/net/wireless/iwl-channel.h
index d320c2b..97da370 100644
--- a/drivers/net/wireless/iwl-channel.h
+++ b/drivers/net/wireless/iwl-channel.h
@@ -158,6 +158,6 @@ static inline int is_channel_ibss(const struct iwl_channel_info *ch)
}
extern const struct iwl_channel_info *iwl_get_channel_info(
- const struct iwl_priv *priv, int phymode, int channel);
+ const struct iwl_priv *priv, int phymode, u16 channel);
#endif
diff --git a/drivers/net/wireless/iwlwifi.h b/drivers/net/wireless/iwlwifi.h
index 6fea9a4..029b590 100644
--- a/drivers/net/wireless/iwlwifi.h
+++ b/drivers/net/wireless/iwlwifi.h
@@ -717,6 +717,6 @@ extern int iwl4965_get_temperature(const struct iwl_priv *priv);
*/
extern u8 iwl_hw_find_station(struct iwl_priv *priv, const u8 *bssid);
-extern int iwl_hw_channel_switch(struct iwl_priv *priv, u8 channel);
+extern int iwl_hw_channel_switch(struct iwl_priv *priv, u16 channel);
extern int iwl_tx_queue_reclaim(struct iwl_priv *priv, int txq_id, int index);
#endif
--
1.5.2
^ permalink raw reply related [flat|nested] 28+ messages in thread
* [PATCH 18/28] iwlwifi: shorten more function names
2007-08-08 7:33 ` [PATCH 17/28] iwlwifi: Endianity fix for channel number Zhu Yi
@ 2007-08-08 7:33 ` Zhu Yi
2007-08-08 7:33 ` [PATCH 19/28] iwlwifi: make iwl_get_bits inline function from macro Zhu Yi
0 siblings, 1 reply; 28+ messages in thread
From: Zhu Yi @ 2007-08-08 7:33 UTC (permalink / raw)
To: linville; +Cc: linux-wireless, Zhu Yi
Signed-off-by: Zhu Yi <yi.zhu@intel.com>
---
drivers/net/wireless/iwl-3945.c | 8 ++++----
drivers/net/wireless/iwl-4965.c | 8 ++++----
drivers/net/wireless/iwl-base.c | 10 +++++-----
drivers/net/wireless/iwlwifi.h | 9 +++------
4 files changed, 16 insertions(+), 19 deletions(-)
diff --git a/drivers/net/wireless/iwl-3945.c b/drivers/net/wireless/iwl-3945.c
index a9a1921..ce9688c 100644
--- a/drivers/net/wireless/iwl-3945.c
+++ b/drivers/net/wireless/iwl-3945.c
@@ -490,8 +490,8 @@ static void iwl3945_rx_reply_rx(struct iwl_priv *priv,
}
}
-int iwl_hw_tx_queue_attach_buffer_to_tfd(struct iwl_priv *priv,
- void *ptr, dma_addr_t addr, u16 len)
+int iwl_hw_txq_attach_buf_to_tfd(struct iwl_priv *priv, void *ptr,
+ dma_addr_t addr, u16 len)
{
int count;
u32 pad;
@@ -518,11 +518,11 @@ int iwl_hw_tx_queue_attach_buffer_to_tfd(struct iwl_priv *priv,
}
/**
- * iwl_hw_tx_queue_free_tfd - Free one TFD, those at index [txq->q.last_used]
+ * iwl_hw_txq_free_tfd - Free one TFD, those at index [txq->q.last_used]
*
* Does NOT advance any indexes
*/
-int iwl_hw_tx_queue_free_tfd(struct iwl_priv *priv, struct iwl_tx_queue *txq)
+int iwl_hw_txq_free_tfd(struct iwl_priv *priv, struct iwl_tx_queue *txq)
{
struct iwl_tfd_frame *bd_tmp = (struct iwl_tfd_frame *)&txq->bd[0];
struct iwl_tfd_frame *bd = &bd_tmp[txq->q.last_used];
diff --git a/drivers/net/wireless/iwl-4965.c b/drivers/net/wireless/iwl-4965.c
index a3e6603..de5b541 100644
--- a/drivers/net/wireless/iwl-4965.c
+++ b/drivers/net/wireless/iwl-4965.c
@@ -1762,11 +1762,11 @@ void iwl_hw_txq_ctx_free(struct iwl_priv *priv)
}
/**
- * iwl_hw_tx_queue_free_tfd - Free one TFD, those at index [txq->q.last_used]
+ * iwl_hw_txq_free_tfd - Free one TFD, those at index [txq->q.last_used]
*
* Does NOT advance any indexes
*/
-int iwl_hw_tx_queue_free_tfd(struct iwl_priv *priv, struct iwl_tx_queue *txq)
+int iwl_hw_txq_free_tfd(struct iwl_priv *priv, struct iwl_tx_queue *txq)
{
struct iwl_tfd_frame *bd_tmp = (struct iwl_tfd_frame *)&txq->bd[0];
struct iwl_tfd_frame *bd = &bd_tmp[txq->q.last_used];
@@ -2754,8 +2754,8 @@ static inline u8 iwl4965_get_dma_hi_address(dma_addr_t addr)
return sizeof(addr) > sizeof(u32) ? (addr >> 16) >> 16 : 0;
}
-int iwl_hw_tx_queue_attach_buffer_to_tfd(struct iwl_priv *priv,
- void *ptr, dma_addr_t addr, u16 len)
+int iwl_hw_txq_attach_buf_to_tfd(struct iwl_priv *priv, void *ptr,
+ dma_addr_t addr, u16 len)
{
int index, is_odd;
struct iwl_tfd_frame *tfd = ptr;
diff --git a/drivers/net/wireless/iwl-base.c b/drivers/net/wireless/iwl-base.c
index 3b08c7c..94d5ac8 100644
--- a/drivers/net/wireless/iwl-base.c
+++ b/drivers/net/wireless/iwl-base.c
@@ -308,7 +308,7 @@ void iwl_tx_queue_free(struct iwl_priv *priv, struct iwl_tx_queue *txq)
/* first, empty all BD's */
for (; q->first_empty != q->last_used;
q->last_used = iwl_queue_inc_wrap(q->last_used, q->n_bd))
- iwl_hw_tx_queue_free_tfd(priv, txq);
+ iwl_hw_txq_free_tfd(priv, txq);
len = sizeof(struct iwl_cmd) * q->n_window;
if (q->id == IWL_CMD_QUEUE_NUM);
@@ -622,7 +622,7 @@ static int iwl_enqueue_hcmd(struct iwl_priv *priv, struct iwl_host_cmd *cmd)
phys_addr = txq->dma_addr_cmd + sizeof(txq->cmd[0]) * idx +
offsetof(struct iwl_cmd, hdr);
- iwl_hw_tx_queue_attach_buffer_to_tfd(priv, tfd, phys_addr, fix_size);
+ iwl_hw_txq_attach_buf_to_tfd(priv, tfd, phys_addr, fix_size);
#if IWL == 3945
pad = U32_PAD(out_cmd->meta.len);
@@ -2913,7 +2913,7 @@ static int iwl_tx_skb(struct iwl_priv *priv,
txcmd_phys = txq->dma_addr_cmd + sizeof(struct iwl_cmd) * idx +
offsetof(struct iwl_cmd, hdr);
- iwl_hw_tx_queue_attach_buffer_to_tfd(priv, tfd, txcmd_phys, len);
+ iwl_hw_txq_attach_buf_to_tfd(priv, tfd, txcmd_phys, len);
if (ctl->key_idx != -1)
iwl_build_tx_cmd_hwcrypto(priv, ctl, out_cmd, skb, 0);
@@ -2923,7 +2923,7 @@ static int iwl_tx_skb(struct iwl_priv *priv,
if (len) {
phys_addr = pci_map_single(priv->pci_dev, skb->data + hdr_len,
len, PCI_DMA_TODEVICE);
- iwl_hw_tx_queue_attach_buffer_to_tfd(priv, tfd, phys_addr, len);
+ iwl_hw_txq_attach_buf_to_tfd(priv, tfd, phys_addr, len);
}
#if IWL == 3945
@@ -3477,7 +3477,7 @@ int iwl_tx_queue_reclaim(struct iwl_priv *priv, int txq_id, int index)
if (txq_id != IWL_CMD_QUEUE_NUM) {
iwl_txstatus_to_ieee(priv,
&(txq->txb[txq->q.last_used]));
- iwl_hw_tx_queue_free_tfd(priv, txq);
+ iwl_hw_txq_free_tfd(priv, txq);
} else
is_next = 1;
}
diff --git a/drivers/net/wireless/iwlwifi.h b/drivers/net/wireless/iwlwifi.h
index 029b590..5b826bf 100644
--- a/drivers/net/wireless/iwlwifi.h
+++ b/drivers/net/wireless/iwlwifi.h
@@ -683,13 +683,10 @@ extern int iwl_hw_nic_stop_master(struct iwl_priv *priv);
extern void iwl_hw_txq_ctx_free(struct iwl_priv *priv);
extern void iwl_hw_txq_ctx_stop(struct iwl_priv *priv);
extern int iwl_hw_nic_reset(struct iwl_priv *priv);
-extern int iwl_hw_tx_queue_attach_buffer_to_tfd(
- struct iwl_priv *priv, void *tfd, dma_addr_t addr, u16 len);
-extern int iwl_hw_tx_queue_free_tfd(struct iwl_priv *priv,
- struct iwl_tx_queue *txq);
+extern int iwl_hw_txq_attach_buf_to_tfd(struct iwl_priv *priv, void *tfd,
+ dma_addr_t addr, u16 len);
+extern int iwl_hw_txq_free_tfd(struct iwl_priv *priv, struct iwl_tx_queue *txq);
extern int iwl_hw_get_temperature(struct iwl_priv *priv);
-extern int iwl_tx_queue_free_tfd(struct iwl_priv *priv,
- struct iwl_tx_queue *txq);
extern int iwl_hw_tx_queue_init(struct iwl_priv *priv,
struct iwl_tx_queue *txq);
extern unsigned int iwl_hw_get_beacon_cmd(struct iwl_priv *priv,
--
1.5.2
^ permalink raw reply related [flat|nested] 28+ messages in thread
* [PATCH 19/28] iwlwifi: make iwl_get_bits inline function from macro
2007-08-08 7:33 ` [PATCH 18/28] iwlwifi: shorten more function names Zhu Yi
@ 2007-08-08 7:33 ` Zhu Yi
2007-08-08 7:33 ` [PATCH 20/28] iwlwifi: remove BIT_FMT and BIT_ARG Zhu Yi
0 siblings, 1 reply; 28+ messages in thread
From: Zhu Yi @ 2007-08-08 7:33 UTC (permalink / raw)
To: linville; +Cc: linux-wireless, Zhu Yi
Make iwl_get_bits and iwl_set_bits inline functions from the original
macro implementation. Add IWL_SET_BITS16 for 16-bits value setting.
Signed-off-by: Zhu Yi <yi.zhu@intel.com>
---
drivers/net/wireless/iwl-4965.c | 6 ++--
drivers/net/wireless/iwl-helpers.h | 53 +++++++++++++++++++++---------------
2 files changed, 34 insertions(+), 25 deletions(-)
diff --git a/drivers/net/wireless/iwl-4965.c b/drivers/net/wireless/iwl-4965.c
index de5b541..258879c 100644
--- a/drivers/net/wireless/iwl-4965.c
+++ b/drivers/net/wireless/iwl-4965.c
@@ -2815,11 +2815,11 @@ int iwl4965_tx_queue_update_wr_ptr(struct iwl_priv *priv,
len = byte_cnt + IWL_TX_CRC_SIZE + IWL_TX_DELIMITER_SIZE;
- IWL_SET_BITS(shared_data->queues_byte_cnt_tbls[txq_id].
- tfd_offset[txq->q.first_empty], byte_cnt, len);
+ IWL_SET_BITS16(shared_data->queues_byte_cnt_tbls[txq_id].
+ tfd_offset[txq->q.first_empty], byte_cnt, len);
if (txq->q.first_empty < IWL4965_MAX_WIN_SIZE)
- IWL_SET_BITS(shared_data->queues_byte_cnt_tbls[txq_id].
+ IWL_SET_BITS16(shared_data->queues_byte_cnt_tbls[txq_id].
tfd_offset[IWL4965_QUEUE_SIZE + txq->q.first_empty],
byte_cnt, len);
diff --git a/drivers/net/wireless/iwl-helpers.h b/drivers/net/wireless/iwl-helpers.h
index c0ea48e..6281e3d 100644
--- a/drivers/net/wireless/iwl-helpers.h
+++ b/drivers/net/wireless/iwl-helpers.h
@@ -59,13 +59,14 @@
* NOTE: If used from IWL_GET_BITS then pos and len are compile-constants and
* will collapse to minimal code by the compiler.
*/
-#define iwl_get_bits(src, pos, len) \
-({ \
- u32 __tmp = le32_to_cpu(src); \
- __tmp >>= pos; \
- __tmp &= (1UL << len) - 1; \
- __tmp; \
-})
+static inline u32 iwl_get_bits(__le32 src, u8 pos, u8 len)
+{
+ u32 tmp = le32_to_cpu(src);
+
+ tmp >>= pos;
+ tmp &= (1UL << len) - 1;
+ return tmp;
+}
/**
* iwl_set_bits - Set a hardware bit-field value
@@ -80,13 +81,23 @@
* NOTE: If used IWL_SET_BITS pos and len will be compile-constants and
* will collapse to minimal code by the compiler.
*/
-#define iwl_set_bits(dst, pos, len, val) \
-({ \
- u32 __tmp = le32_to_cpu(*dst); \
- __tmp &= ~((1ULL << (pos+len)) - (1 << pos)); \
- __tmp |= (val & ((1UL << len) - 1)) << pos; \
- *dst = cpu_to_le32(__tmp); \
-})
+static inline void iwl_set_bits(__le32 *dst, u8 pos, u8 len, int val)
+{
+ u32 tmp = le32_to_cpu(*dst);
+
+ tmp &= ~((1UL << (pos + len)) - (1UL << pos));
+ tmp |= (val & ((1UL << len) - 1)) << pos;
+ *dst = cpu_to_le32(tmp);
+}
+
+static inline void iwl_set_bits16(__le16 *dst, u8 pos, u8 len, int val)
+{
+ u32 tmp = le16_to_cpu(*dst);
+
+ tmp &= ~((1UL << (pos + len)) - (1UL << pos));
+ tmp |= (val & ((1UL << len) - 1)) << pos;
+ *dst = cpu_to_le16(tmp);
+}
/*
* The bit-field definitions in iwl-xxxx-hw.h are in the form of:
@@ -110,18 +121,16 @@
* and iwl_{get,set}_bits.
*
*/
-#define _IWL_SET_BITS(s, d, o, l, v) \
- iwl_set_bits(&s.d, o, l, v)
-
#define IWL_SET_BITS(s, sym, v) \
- _IWL_SET_BITS((s), IWL_ ## sym ## _SYM, IWL_ ## sym ## _POS, \
- IWL_ ## sym ## _LEN, (v))
+ iwl_set_bits(&(s).IWL_ ## sym ## _SYM, IWL_ ## sym ## _POS, \
+ IWL_ ## sym ## _LEN, (v))
-#define _IWL_GET_BITS(s, v, o, l) \
- iwl_get_bits(s.v, o, l)
+#define IWL_SET_BITS16(s, sym, v) \
+ iwl_set_bits16(&(s).IWL_ ## sym ## _SYM, IWL_ ## sym ## _POS, \
+ IWL_ ## sym ## _LEN, (v))
#define IWL_GET_BITS(s, sym) \
- _IWL_GET_BITS((s), IWL_ ## sym ## _SYM, IWL_ ## sym ## _POS, \
+ iwl_get_bits((s).IWL_ ## sym ## _SYM, IWL_ ## sym ## _POS, \
IWL_ ## sym ## _LEN)
/* Debug and printf string expansion helpers for printing bitfields */
--
1.5.2
^ permalink raw reply related [flat|nested] 28+ messages in thread
* [PATCH 20/28] iwlwifi: remove BIT_FMT and BIT_ARG
2007-08-08 7:33 ` [PATCH 19/28] iwlwifi: make iwl_get_bits inline function from macro Zhu Yi
@ 2007-08-08 7:33 ` Zhu Yi
2007-08-08 7:33 ` [PATCH 21/28] iwlwifi: remove WLAN_FC_GET_TYPE macros Zhu Yi
0 siblings, 1 reply; 28+ messages in thread
From: Zhu Yi @ 2007-08-08 7:33 UTC (permalink / raw)
To: linville; +Cc: linux-wireless, Zhu Yi
Signed-off-by: Zhu Yi <yi.zhu@intel.com>
---
drivers/net/wireless/iwl-3945.c | 8 +++-----
drivers/net/wireless/iwl-4965.c | 15 ++++++---------
drivers/net/wireless/iwl-base.c | 24 +++++++++---------------
drivers/net/wireless/iwl-helpers.h | 25 ++-----------------------
4 files changed, 20 insertions(+), 52 deletions(-)
diff --git a/drivers/net/wireless/iwl-3945.c b/drivers/net/wireless/iwl-3945.c
index ce9688c..6cec308 100644
--- a/drivers/net/wireless/iwl-3945.c
+++ b/drivers/net/wireless/iwl-3945.c
@@ -659,11 +659,9 @@ void iwl_hw_build_tx_cmd_rate(struct iwl_priv *priv,
/* CCK */
cmd->cmd.tx.supp_rates[1] = (rate_mask >> 8) & 0xF;
- IWL_DEBUG_RATE("Tx sta id: %d, rate: %d (plcp), flags: " BIT_FMT16 " "
- "cck/ofdm mask: 0x%x/0x%x\n",
- sta_id,
- cmd->cmd.tx.rate,
- BIT_ARG16(le32_to_cpu(cmd->cmd.tx.tx_flags)),
+ IWL_DEBUG_RATE("Tx sta id: %d, rate: %d (plcp), flags: 0x%4X "
+ "cck/ofdm mask: 0x%x/0x%x\n", sta_id,
+ cmd->cmd.tx.rate, le32_to_cpu(cmd->cmd.tx.tx_flags),
cmd->cmd.tx.supp_rates[1], cmd->cmd.tx.supp_rates[0]);
}
diff --git a/drivers/net/wireless/iwl-4965.c b/drivers/net/wireless/iwl-4965.c
index 258879c..76c0c98 100644
--- a/drivers/net/wireless/iwl-4965.c
+++ b/drivers/net/wireless/iwl-4965.c
@@ -310,7 +310,7 @@ int iwl4965_set_fat_chan_info(struct iwl_priv *priv, int phymode, u16 channel,
if (!is_channel_valid(ch_info))
return -1;
- IWL_DEBUG_INFO("FAT Ch. %d [%sGHz] %s%s%s%s%s%s(" BIT_FMT8
+ IWL_DEBUG_INFO("FAT Ch. %d [%sGHz] %s%s%s%s%s%s(0x%02x"
" %ddBm): Ad-Hoc %ssupported\n",
ch_info->channel,
is_channel_a_band(ch_info) ?
@@ -321,14 +321,11 @@ int iwl4965_set_fat_chan_info(struct iwl_priv *priv, int phymode, u16 channel,
CHECK_AND_PRINT(WIDE),
CHECK_AND_PRINT(NARROW),
CHECK_AND_PRINT(DFS),
- BIT_ARG8(eeprom_ch->flags),
- eeprom_ch->
- max_power_avg,
- ((eeprom_ch->
- flags & EEPROM_CHANNEL_IBSS)
- && !(eeprom_ch->
- flags & EEPROM_CHANNEL_RADAR))
- ? "" : "not ");
+ eeprom_ch->flags,
+ eeprom_ch->max_power_avg,
+ ((eeprom_ch->flags & EEPROM_CHANNEL_IBSS)
+ && !(eeprom_ch->flags & EEPROM_CHANNEL_RADAR)) ?
+ "" : "not ");
ch_info->fat_eeprom = *eeprom_ch;
ch_info->fat_max_power_avg = eeprom_ch->max_power_avg;
diff --git a/drivers/net/wireless/iwl-base.c b/drivers/net/wireless/iwl-base.c
index 94d5ac8..7514928 100644
--- a/drivers/net/wireless/iwl-base.c
+++ b/drivers/net/wireless/iwl-base.c
@@ -4702,18 +4702,13 @@ static void iwl_print_rx_config_cmd(struct iwl_rxon_cmd *rxon)
IWL_DEBUG_RADIO("RX CONFIG:\n");
printk_buf(IWL_DL_RADIO, (u8 *) rxon, sizeof(*rxon));
IWL_DEBUG_RADIO("u16 channel: 0x%x\n", le16_to_cpu(rxon->channel));
- IWL_DEBUG_RADIO("u32 flags: 0x%08X " BIT_FMT32 "\n",
- le32_to_cpu(rxon->flags),
- BIT_ARG32(le32_to_cpu(rxon->flags)));
- IWL_DEBUG_RADIO("u32 filter_flags: 0x%08x " BIT_FMT32 "\n",
- le32_to_cpu(rxon->filter_flags),
- BIT_ARG32(le32_to_cpu(rxon->filter_flags)));
+ IWL_DEBUG_RADIO("u32 flags: 0x%08X\n", le32_to_cpu(rxon->flags));
+ IWL_DEBUG_RADIO("u32 filter_flags: 0x%08x\n",
+ le32_to_cpu(rxon->filter_flags));
IWL_DEBUG_RADIO("u8 dev_type: 0x%x\n", rxon->dev_type);
- IWL_DEBUG_RADIO("u8 ofdm_basic_rates: 0x%02x " BIT_FMT8 "\n",
- rxon->ofdm_basic_rates,
- BIT_ARG8(rxon->ofdm_basic_rates));
- IWL_DEBUG_RADIO("u8 cck_basic_rates: 0x%02x " BIT_FMT8 "\n",
- rxon->cck_basic_rates, BIT_ARG8(rxon->cck_basic_rates));
+ IWL_DEBUG_RADIO("u8 ofdm_basic_rates: 0x%02x\n",
+ rxon->ofdm_basic_rates);
+ IWL_DEBUG_RADIO("u8 cck_basic_rates: 0x%02x\n", rxon->cck_basic_rates);
IWL_DEBUG_RADIO("u8[6] node_addr: " MAC_FMT "\n",
MAC_ARG(rxon->node_addr));
IWL_DEBUG_RADIO("u8[6] bssid_addr: " MAC_FMT "\n",
@@ -5421,7 +5416,7 @@ static int iwl_init_channel_map(struct iwl_priv *priv)
ch_info->scan_power = eeprom_ch_info[ch].max_power_avg;
ch_info->min_power = 0;
- IWL_DEBUG_INFO("Ch. %d [%sGHz] %s%s%s%s%s%s(" BIT_FMT8
+ IWL_DEBUG_INFO("Ch. %d [%sGHz] %s%s%s%s%s%s(0x%02x"
" %ddBm): Ad-Hoc %ssupported\n",
ch_info->channel,
is_channel_a_band(ch_info) ?
@@ -5432,9 +5427,8 @@ static int iwl_init_channel_map(struct iwl_priv *priv)
CHECK_AND_PRINT(WIDE),
CHECK_AND_PRINT(NARROW),
CHECK_AND_PRINT(DFS),
- BIT_ARG8(eeprom_ch_info[ch].flags),
- eeprom_ch_info[ch].
- max_power_avg,
+ eeprom_ch_info[ch].flags,
+ eeprom_ch_info[ch].max_power_avg,
((eeprom_ch_info[ch].
flags & EEPROM_CHANNEL_IBSS)
&& !(eeprom_ch_info[ch].
diff --git a/drivers/net/wireless/iwl-helpers.h b/drivers/net/wireless/iwl-helpers.h
index 6281e3d..46084f2 100644
--- a/drivers/net/wireless/iwl-helpers.h
+++ b/drivers/net/wireless/iwl-helpers.h
@@ -85,14 +85,14 @@ static inline void iwl_set_bits(__le32 *dst, u8 pos, u8 len, int val)
{
u32 tmp = le32_to_cpu(*dst);
- tmp &= ~((1UL << (pos + len)) - (1UL << pos));
+ tmp &= ~(((1UL << len) - 1) << pos);
tmp |= (val & ((1UL << len) - 1)) << pos;
*dst = cpu_to_le32(tmp);
}
static inline void iwl_set_bits16(__le16 *dst, u8 pos, u8 len, int val)
{
- u32 tmp = le16_to_cpu(*dst);
+ u16 tmp = le16_to_cpu(*dst);
tmp &= ~((1UL << (pos + len)) - (1UL << pos));
tmp |= (val & ((1UL << len) - 1)) << pos;
@@ -133,27 +133,6 @@ static inline void iwl_set_bits16(__le16 *dst, u8 pos, u8 len, int val)
iwl_get_bits((s).IWL_ ## sym ## _SYM, IWL_ ## sym ## _POS, \
IWL_ ## sym ## _LEN)
-/* Debug and printf string expansion helpers for printing bitfields */
-#define BIT_FMT8 "%c%c%c%c-%c%c%c%c"
-#define BIT_FMT16 BIT_FMT8 ":" BIT_FMT8
-#define BIT_FMT32 BIT_FMT16 " " BIT_FMT16
-
-#define BITC(x, y) (((x>>y) & 1) ? '1' : '0')
-#define BIT_ARG8(x) \
-BITC(x, 7), BITC(x, 6), BITC(x, 5), BITC(x, 4), \
-BITC(x, 3), BITC(x, 2), BITC(x, 1), BITC(x, 0)
-
-#define BIT_ARG16(x) \
-BITC(x, 15), BITC(x, 14), BITC(x, 13), BITC(x, 12), \
-BITC(x, 11), BITC(x, 10), BITC(x, 9), BITC(x, 8), \
-BIT_ARG8(x)
-
-#define BIT_ARG32(x) \
-BITC(x, 31), BITC(x, 30), BITC(x, 29), BITC(x, 28), \
-BITC(x, 27), BITC(x, 26), BITC(x, 25), BITC(x, 24), \
-BITC(x, 23), BITC(x, 22), BITC(x, 21), BITC(x, 20), \
-BITC(x, 19), BITC(x, 18), BITC(x, 17), BITC(x, 16), \
-BIT_ARG16(x)
#define KELVIN_TO_CELSIUS(x) ((x)-273)
#define CELSIUS_TO_KELVIN(x) ((x)+273)
--
1.5.2
^ permalink raw reply related [flat|nested] 28+ messages in thread
* [PATCH 21/28] iwlwifi: remove WLAN_FC_GET_TYPE macros
2007-08-08 7:33 ` [PATCH 20/28] iwlwifi: remove BIT_FMT and BIT_ARG Zhu Yi
@ 2007-08-08 7:33 ` Zhu Yi
2007-08-08 7:33 ` [PATCH 22/28] iwlwifi: replace private snprint_line with common hex_dump_xxx Zhu Yi
0 siblings, 1 reply; 28+ messages in thread
From: Zhu Yi @ 2007-08-08 7:33 UTC (permalink / raw)
To: linville; +Cc: linux-wireless, Zhu Yi
Use IEEE80211_FCTL_FTYPE directly. Also make some inline function unlined.
Signed-off-by: Zhu Yi <yi.zhu@intel.com>
---
drivers/net/wireless/iwl-3945.c | 9 ++-
drivers/net/wireless/iwl-4965.c | 14 +++--
drivers/net/wireless/iwl-base.c | 78 ++++++++++++++++++++---
drivers/net/wireless/iwl-helpers.h | 122 ++++++++----------------------------
drivers/net/wireless/iwlwifi.h | 1 +
5 files changed, 111 insertions(+), 113 deletions(-)
diff --git a/drivers/net/wireless/iwl-3945.c b/drivers/net/wireless/iwl-3945.c
index 6cec308..53fba5d 100644
--- a/drivers/net/wireless/iwl-3945.c
+++ b/drivers/net/wireless/iwl-3945.c
@@ -395,9 +395,10 @@ static void iwl3945_rx_reply_rx(struct iwl_priv *priv,
priv->last_rx_noise = stats.noise;
}
- switch (WLAN_FC_GET_TYPE(le16_to_cpu(header->frame_control))) {
+ switch (le16_to_cpu(header->frame_control) & IEEE80211_FCTL_FTYPE) {
case IEEE80211_FTYPE_MGMT:
- switch (WLAN_FC_GET_STYPE(le16_to_cpu(header->frame_control))) {
+ switch (le16_to_cpu(header->frame_control) &
+ IEEE80211_FCTL_STYPE) {
case IEEE80211_STYPE_PROBE_RESP:
case IEEE80211_STYPE_BEACON:{
/* If this is a beacon or probe response for
@@ -632,8 +633,8 @@ void iwl_hw_build_tx_cmd_rate(struct iwl_priv *priv,
if (priv->data_retry_limit != -1)
data_retry_limit = priv->data_retry_limit;
- if (WLAN_FC_GET_TYPE(fc) == IEEE80211_FTYPE_MGMT) {
- switch (WLAN_FC_GET_STYPE(fc)) {
+ if ((fc & IEEE80211_FCTL_FTYPE) == IEEE80211_FTYPE_MGMT) {
+ switch (fc & IEEE80211_FCTL_STYPE) {
case IEEE80211_STYPE_AUTH:
case IEEE80211_STYPE_DEAUTH:
case IEEE80211_STYPE_ASSOC_REQ:
diff --git a/drivers/net/wireless/iwl-4965.c b/drivers/net/wireless/iwl-4965.c
index 76c0c98..631bd19 100644
--- a/drivers/net/wireless/iwl-4965.c
+++ b/drivers/net/wireless/iwl-4965.c
@@ -2655,8 +2655,10 @@ void iwl_hw_build_tx_cmd_rate(struct iwl_priv *priv,
if (priv->data_retry_limit != -1)
data_retry_limit = priv->data_retry_limit;
- if (WLAN_FC_GET_TYPE(hdr->frame_control) == IEEE80211_FTYPE_MGMT) {
- switch (WLAN_FC_GET_STYPE(hdr->frame_control)) {
+ if ((le16_to_cpu(hdr->frame_control) & IEEE80211_FCTL_FTYPE)
+ == IEEE80211_FTYPE_MGMT) {
+ switch (le16_to_cpu(hdr->frame_control) &
+ IEEE80211_FCTL_STYPE) {
case IEEE80211_STYPE_AUTH:
case IEEE80211_STYPE_DEAUTH:
case IEEE80211_STYPE_ASSOC_REQ:
@@ -3233,7 +3235,7 @@ int iwl4965_tx_cmd(struct iwl_priv *priv, struct iwl_cmd *out_cmd,
unicast = !is_multicast_ether_addr(hdr->addr1);
fc = le16_to_cpu(hdr->frame_control);
- if (WLAN_FC_GET_TYPE(fc) != IEEE80211_FTYPE_DATA)
+ if ((fc & IEEE80211_FCTL_FTYPE) != IEEE80211_FTYPE_DATA)
is_data = 0;
memcpy(&cmd, &(out_cmd->cmd.tx), sizeof(struct iwl_tx_cmd));
@@ -3896,13 +3898,13 @@ static void iwl4965_rx_reply_rx(struct iwl_priv *priv,
}
fc = le16_to_cpu(header->frame_control);
- switch (WLAN_FC_GET_TYPE(fc)) {
+ switch (fc & IEEE80211_FCTL_FTYPE) {
case IEEE80211_FTYPE_MGMT:
if (priv->iw_mode == IEEE80211_IF_TYPE_AP)
iwl4965_update_ps_mode(priv, fc & IEEE80211_FCTL_PM,
header->addr2);
- switch (WLAN_FC_GET_STYPE(fc)) {
+ switch (fc & IEEE80211_FCTL_STYPE) {
case IEEE80211_STYPE_PROBE_RESP:
case IEEE80211_STYPE_BEACON:
if ((priv->iw_mode == IEEE80211_IF_TYPE_STA &&
@@ -3990,7 +3992,7 @@ static void iwl4965_rx_reply_rx(struct iwl_priv *priv,
case IEEE80211_FTYPE_CTL:
#ifdef CONFIG_IWLWIFI_HT_AGG
- switch (WLAN_FC_GET_STYPE(fc)) {
+ switch (fc & IEEE80211_FCTL_STYPE) {
case IEEE80211_STYPE_BACK_REQ:
IWL_DEBUG_HT("IEEE80211_STYPE_BACK_REQ arrived\n");
iwl4965_handle_data_packet(priv, 0, include_phy,
diff --git a/drivers/net/wireless/iwl-base.c b/drivers/net/wireless/iwl-base.c
index 7514928..efd4762 100644
--- a/drivers/net/wireless/iwl-base.c
+++ b/drivers/net/wireless/iwl-base.c
@@ -122,6 +122,68 @@ MODULE_VERSION(DRV_VERSION);
MODULE_AUTHOR(DRV_COPYRIGHT);
MODULE_LICENSE("GPL");
+__le16 *ieee80211_get_qos_ctrl(struct ieee80211_hdr *hdr)
+{
+ u16 fc = le16_to_cpu(hdr->frame_control);
+ int hdr_len = ieee80211_get_hdrlen(fc);
+
+ if ((fc & 0x00cc) == (IEEE80211_STYPE_QOS_DATA | IEEE80211_FTYPE_DATA))
+ return (__le16 *) ((u8 *) hdr + hdr_len - QOS_CONTROL_LEN);
+ return NULL;
+}
+
+static const struct ieee80211_hw_mode *iwl_get_hw_mode(
+ struct iwl_priv *priv, int mode)
+{
+ int i;
+
+ for (i = 0; i < 3; i++)
+ if (priv->modes[i].mode == mode)
+ return &priv->modes[i];
+
+ return NULL;
+}
+
+static int iwl_is_empty_essid(const char *essid, int essid_len)
+{
+ /* Single white space is for Linksys APs */
+ if (essid_len == 1 && essid[0] == ' ')
+ return 1;
+
+ /* Otherwise, if the entire essid is 0, we assume it is hidden */
+ while (essid_len) {
+ essid_len--;
+ if (essid[essid_len] != '\0')
+ return 0;
+ }
+
+ return 1;
+}
+
+static const char *iwl_escape_essid(const char *essid, u8 essid_len)
+{
+ static char escaped[IW_ESSID_MAX_SIZE * 2 + 1];
+ const char *s = essid;
+ char *d = escaped;
+
+ if (iwl_is_empty_essid(essid, essid_len)) {
+ memcpy(escaped, "<hidden>", sizeof("<hidden>"));
+ return escaped;
+ }
+
+ essid_len = min(essid_len, (u8) IW_ESSID_MAX_SIZE);
+ while (essid_len--) {
+ if (*s == '\0') {
+ *d++ = '\\';
+ *d++ = '0';
+ s++;
+ } else
+ *d++ = *s++;
+ }
+ *d = '\0';
+ return escaped;
+}
+
/*************** DMA-QUEUE-GENERAL-FUNCTIONS *****
* DMA services
*
@@ -2693,7 +2755,7 @@ static void iwl_build_tx_cmd_basic(struct iwl_priv *priv,
cmd->cmd.tx.stop_time.life_time = TX_CMD_LIFE_TIME_INFINITE;
if (!(ctrl->flags & IEEE80211_TXCTL_NO_ACK)) {
tx_flags |= TX_CMD_FLG_ACK_MSK;
- if (WLAN_FC_GET_TYPE(fc) == IEEE80211_FTYPE_MGMT)
+ if ((fc & IEEE80211_FCTL_FTYPE) == IEEE80211_FTYPE_MGMT)
tx_flags |= TX_CMD_FLG_SEQ_CTL_MSK;
if (ieee80211_is_probe_response(fc) &&
!(le16_to_cpu(hdr->seq_ctrl) & 0xf))
@@ -2726,9 +2788,9 @@ static void iwl_build_tx_cmd_basic(struct iwl_priv *priv,
tx_flags |= TX_CMD_FLG_FULL_TXOP_PROT_MSK;
tx_flags &= ~(TX_CMD_FLG_ANT_SEL_MSK);
- if (WLAN_FC_GET_TYPE(fc) == IEEE80211_FTYPE_MGMT) {
- if (((WLAN_FC_GET_STYPE(fc)) == IEEE80211_STYPE_ASSOC_REQ) ||
- ((WLAN_FC_GET_STYPE(fc)) == IEEE80211_STYPE_REASSOC_REQ))
+ if ((fc & IEEE80211_FCTL_FTYPE) == IEEE80211_FTYPE_MGMT) {
+ if ((fc & IEEE80211_FCTL_STYPE) == IEEE80211_STYPE_ASSOC_REQ ||
+ (fc & IEEE80211_FCTL_STYPE) == IEEE80211_STYPE_REASSOC_REQ)
cmd->cmd.tx.timeout.pm_frame_timeout =
cpu_to_le16(3);
else
@@ -2749,7 +2811,7 @@ static int iwl_get_sta_id(struct iwl_priv *priv, struct ieee80211_hdr *hdr)
/* If this frame is broadcast or not data then use the broadcast
* station id */
- if ((WLAN_FC_GET_TYPE(fc) != IEEE80211_FTYPE_DATA) ||
+ if (((fc & IEEE80211_FCTL_FTYPE) != IEEE80211_FTYPE_DATA) ||
is_multicast_ether_addr(hdr->addr1))
return IWL_BROADCAST_ID;
@@ -2838,7 +2900,7 @@ static int iwl_tx_skb(struct iwl_priv *priv,
#endif
if (!iwl_is_associated(priv) &&
- (WLAN_FC_GET_TYPE(fc) == IEEE80211_FTYPE_DATA)) {
+ ((fc & IEEE80211_FCTL_FTYPE) == IEEE80211_FTYPE_DATA)) {
IWL_DEBUG_DROP("Dropping - !iwl_is_associated\n");
goto drop;
}
@@ -3232,8 +3294,8 @@ void iwl_handle_data_packet_monitor(struct iwl_priv *priv,
int is_duplicate_packet(struct iwl_priv *priv, struct ieee80211_hdr *header)
{
u16 sc = le16_to_cpu(header->seq_ctrl);
- u16 seq = WLAN_GET_SEQ_SEQ(sc);
- u16 frag = WLAN_GET_SEQ_FRAG(sc);
+ u16 seq = (sc & IEEE80211_SCTL_SEQ) >> 4;
+ u16 frag = sc & IEEE80211_SCTL_FRAG;
u16 *last_seq, *last_frag;
unsigned long *last_time;
diff --git a/drivers/net/wireless/iwl-helpers.h b/drivers/net/wireless/iwl-helpers.h
index 46084f2..6ac119f 100644
--- a/drivers/net/wireless/iwl-helpers.h
+++ b/drivers/net/wireless/iwl-helpers.h
@@ -145,139 +145,97 @@ static inline struct ieee80211_conf *ieee80211_get_hw_conf(
return &hw->conf;
}
-static inline const struct ieee80211_hw_mode *iwl_get_hw_mode(
- struct iwl_priv *priv, int mode)
-{
- int i;
-
- for (i = 0; i < 3; i++)
- if (priv->modes[i].mode == mode)
- return &priv->modes[i];
-
- return NULL;
-}
-
-#define WLAN_FC_GET_TYPE(fc) (((fc) & IEEE80211_FCTL_FTYPE))
-#define WLAN_FC_GET_STYPE(fc) (((fc) & IEEE80211_FCTL_STYPE))
-#define WLAN_GET_SEQ_FRAG(seq) ((seq) & 0x000f)
-#define WLAN_GET_SEQ_SEQ(seq) ((seq) >> 4)
-
#define QOS_CONTROL_LEN 2
-static inline __le16 *ieee80211_get_qos_ctrl(struct ieee80211_hdr *hdr)
-{
- u16 fc = le16_to_cpu(hdr->frame_control);
- int hdr_len = ieee80211_get_hdrlen(fc);
- if ( (fc & 0x00cc) == (IEEE80211_STYPE_QOS_DATA|IEEE80211_FTYPE_DATA))
- return (__le16 *) ((u8 *) hdr + hdr_len - QOS_CONTROL_LEN);
- return NULL;
-}
-
#define IEEE80211_STYPE_BACK_REQ 0x0080
#define IEEE80211_STYPE_BACK 0x0090
static inline int ieee80211_is_management(u16 fc)
{
- return WLAN_FC_GET_TYPE(fc) == IEEE80211_FTYPE_MGMT;
+ return (fc & IEEE80211_FCTL_FTYPE) == IEEE80211_FTYPE_MGMT;
}
static inline int ieee80211_is_control(u16 fc)
{
- return WLAN_FC_GET_TYPE(fc) == IEEE80211_FTYPE_CTL;
+ return (fc & IEEE80211_FCTL_FTYPE) == IEEE80211_FTYPE_CTL;
}
static inline int ieee80211_is_data(u16 fc)
{
- return WLAN_FC_GET_TYPE(fc) == IEEE80211_FTYPE_DATA;
+ return (fc & IEEE80211_FCTL_FTYPE) == IEEE80211_FTYPE_DATA;
}
static inline int ieee80211_is_back_request(u16 fc)
{
- return (WLAN_FC_GET_TYPE(fc) == IEEE80211_FTYPE_CTL) &&
- (WLAN_FC_GET_STYPE(fc) == IEEE80211_STYPE_BACK_REQ);
+ return ((fc & IEEE80211_FCTL_FTYPE) == IEEE80211_FTYPE_CTL) &&
+ ((fc & IEEE80211_FCTL_STYPE) == IEEE80211_STYPE_BACK_REQ);
}
static inline int ieee80211_is_probe_response(u16 fc)
{
- return (WLAN_FC_GET_TYPE(fc) == IEEE80211_FTYPE_MGMT) &&
- (WLAN_FC_GET_STYPE(fc) == IEEE80211_STYPE_PROBE_RESP);
+ return ((fc & IEEE80211_FCTL_FTYPE) == IEEE80211_FTYPE_MGMT) &&
+ ((fc & IEEE80211_FCTL_STYPE) == IEEE80211_STYPE_PROBE_RESP);
}
static inline int ieee80211_is_probe_request(u16 fc)
{
- return (WLAN_FC_GET_TYPE(fc) == IEEE80211_FTYPE_MGMT) &&
- (WLAN_FC_GET_STYPE(fc) == IEEE80211_STYPE_PROBE_REQ);
+ return ((fc & IEEE80211_FCTL_FTYPE) == IEEE80211_FTYPE_MGMT) &&
+ ((fc & IEEE80211_FCTL_STYPE) == IEEE80211_STYPE_PROBE_REQ);
}
static inline int ieee80211_is_beacon(u16 fc)
{
- return (WLAN_FC_GET_TYPE(fc) == IEEE80211_FTYPE_MGMT) &&
- (WLAN_FC_GET_STYPE(fc) == IEEE80211_STYPE_BEACON);
+ return ((fc & IEEE80211_FCTL_FTYPE) == IEEE80211_FTYPE_MGMT) &&
+ ((fc & IEEE80211_FCTL_STYPE) == IEEE80211_STYPE_BEACON);
}
static inline int ieee80211_is_atim(u16 fc)
{
- return (WLAN_FC_GET_TYPE(fc) == IEEE80211_FTYPE_MGMT) &&
- (WLAN_FC_GET_STYPE(fc) == IEEE80211_STYPE_ATIM);
+ return ((fc & IEEE80211_FCTL_FTYPE) == IEEE80211_FTYPE_MGMT) &&
+ ((fc & IEEE80211_FCTL_STYPE) == IEEE80211_STYPE_ATIM);
}
static inline int ieee80211_is_assoc_request(u16 fc)
{
- return (WLAN_FC_GET_TYPE(fc) == IEEE80211_FTYPE_MGMT) &&
- (WLAN_FC_GET_STYPE(fc) == IEEE80211_STYPE_ASSOC_REQ);
+ return ((fc & IEEE80211_FCTL_FTYPE) == IEEE80211_FTYPE_MGMT) &&
+ ((fc & IEEE80211_FCTL_STYPE) == IEEE80211_STYPE_ASSOC_REQ);
}
static inline int ieee80211_is_assoc_response(u16 fc)
{
- return (WLAN_FC_GET_TYPE(fc) == IEEE80211_FTYPE_MGMT) &&
- (WLAN_FC_GET_STYPE(fc) == IEEE80211_STYPE_ASSOC_RESP);
+ return ((fc & IEEE80211_FCTL_FTYPE) == IEEE80211_FTYPE_MGMT) &&
+ ((fc & IEEE80211_FCTL_STYPE) == IEEE80211_STYPE_ASSOC_RESP);
}
static inline int ieee80211_is_auth(u16 fc)
{
- return (WLAN_FC_GET_TYPE(fc) == IEEE80211_FTYPE_MGMT) &&
- (WLAN_FC_GET_STYPE(fc) == IEEE80211_STYPE_ASSOC_REQ);
+ return ((fc & IEEE80211_FCTL_FTYPE) == IEEE80211_FTYPE_MGMT) &&
+ ((fc & IEEE80211_FCTL_STYPE) == IEEE80211_STYPE_ASSOC_REQ);
}
static inline int ieee80211_is_deauth(u16 fc)
{
- return (WLAN_FC_GET_TYPE(fc) == IEEE80211_FTYPE_MGMT) &&
- (WLAN_FC_GET_STYPE(fc) == IEEE80211_STYPE_ASSOC_REQ);
+ return ((fc & IEEE80211_FCTL_FTYPE) == IEEE80211_FTYPE_MGMT) &&
+ ((fc & IEEE80211_FCTL_STYPE) == IEEE80211_STYPE_ASSOC_REQ);
}
static inline int ieee80211_is_disassoc(u16 fc)
{
- return (WLAN_FC_GET_TYPE(fc) == IEEE80211_FTYPE_MGMT) &&
- (WLAN_FC_GET_STYPE(fc) == IEEE80211_STYPE_ASSOC_REQ);
+ return ((fc & IEEE80211_FCTL_FTYPE) == IEEE80211_FTYPE_MGMT) &&
+ ((fc & IEEE80211_FCTL_STYPE) == IEEE80211_STYPE_ASSOC_REQ);
}
static inline int ieee80211_is_reassoc_request(u16 fc)
{
- return (WLAN_FC_GET_TYPE(fc) == IEEE80211_FTYPE_MGMT) &&
- (WLAN_FC_GET_STYPE(fc) == IEEE80211_STYPE_REASSOC_REQ);
+ return ((fc & IEEE80211_FCTL_FTYPE) == IEEE80211_FTYPE_MGMT) &&
+ ((fc & IEEE80211_FCTL_STYPE) == IEEE80211_STYPE_REASSOC_REQ);
}
static inline int ieee80211_is_reassoc_response(u16 fc)
{
- return (WLAN_FC_GET_TYPE(fc) == IEEE80211_FTYPE_MGMT) &&
- (WLAN_FC_GET_STYPE(fc) == IEEE80211_STYPE_REASSOC_RESP);
-}
-
-static inline int iwl_is_empty_essid(const char *essid, int essid_len)
-{
- /* Single white space is for Linksys APs */
- if (essid_len == 1 && essid[0] == ' ')
- return 1;
-
- /* Otherwise, if the entire essid is 0, we assume it is hidden */
- while (essid_len) {
- essid_len--;
- if (essid[essid_len] != '\0')
- return 0;
- }
-
- return 1;
+ return ((fc & IEEE80211_FCTL_FTYPE) == IEEE80211_FTYPE_MGMT) &&
+ ((fc & IEEE80211_FCTL_STYPE) == IEEE80211_STYPE_REASSOC_RESP);
}
static inline int iwl_check_bits(unsigned long field, unsigned long mask)
@@ -285,30 +243,6 @@ static inline int iwl_check_bits(unsigned long field, unsigned long mask)
return ((field & mask) == mask) ? 1 : 0;
}
-static inline const char *iwl_escape_essid(const char *essid, u8 essid_len)
-{
- static char escaped[IW_ESSID_MAX_SIZE * 2 + 1];
- const char *s = essid;
- char *d = escaped;
-
- if (iwl_is_empty_essid(essid, essid_len)) {
- memcpy(escaped, "<hidden>", sizeof("<hidden>"));
- return escaped;
- }
-
- essid_len = min(essid_len, (u8) IW_ESSID_MAX_SIZE);
- while (essid_len--) {
- if (*s == '\0') {
- *d++ = '\\';
- *d++ = '0';
- s++;
- } else
- *d++ = *s++;
- }
- *d = '\0';
- return escaped;
-}
-
static inline unsigned long elapsed_jiffies(unsigned long start,
unsigned long end)
{
@@ -318,8 +252,6 @@ static inline unsigned long elapsed_jiffies(unsigned long start,
return end + (MAX_JIFFY_OFFSET - start);
}
-
-
static inline int snprint_line(char *buf, size_t count,
const u8 *data, u32 len, u32 ofs)
{
diff --git a/drivers/net/wireless/iwlwifi.h b/drivers/net/wireless/iwlwifi.h
index 5b826bf..1279a2b 100644
--- a/drivers/net/wireless/iwlwifi.h
+++ b/drivers/net/wireless/iwlwifi.h
@@ -639,6 +639,7 @@ extern int iwl_send_statistics_request(struct iwl_priv *priv);
extern void iwl_set_decrypted_flag(struct iwl_priv *priv, struct sk_buff *skb,
u32 decrypt_res,
struct ieee80211_rx_status *stats);
+extern __le16 *ieee80211_get_qos_ctrl(struct ieee80211_hdr *hdr);
extern const u8 BROADCAST_ADDR[ETH_ALEN];
--
1.5.2
^ permalink raw reply related [flat|nested] 28+ messages in thread
* [PATCH 22/28] iwlwifi: replace private snprint_line with common hex_dump_xxx
2007-08-08 7:33 ` [PATCH 21/28] iwlwifi: remove WLAN_FC_GET_TYPE macros Zhu Yi
@ 2007-08-08 7:33 ` Zhu Yi
2007-08-08 7:33 ` [PATCH 23/28] iwlwifi: Endianity fix for frame control Zhu Yi
0 siblings, 1 reply; 28+ messages in thread
From: Zhu Yi @ 2007-08-08 7:33 UTC (permalink / raw)
To: linville; +Cc: linux-wireless, Zhu Yi
Signed-off-by: Zhu Yi <yi.zhu@intel.com>
---
drivers/net/wireless/iwl-base.c | 45 ++++++++++++++++++++++++-----------
drivers/net/wireless/iwl-helpers.h | 21 ----------------
2 files changed, 31 insertions(+), 35 deletions(-)
diff --git a/drivers/net/wireless/iwl-base.c b/drivers/net/wireless/iwl-base.c
index efd4762..2c107e7 100644
--- a/drivers/net/wireless/iwl-base.c
+++ b/drivers/net/wireless/iwl-base.c
@@ -184,6 +184,23 @@ static const char *iwl_escape_essid(const char *essid, u8 essid_len)
return escaped;
}
+static void iwl_print_hex_dump(int level, void *p, u32 len)
+{
+#ifdef CONFIG_IWLWIFI_DEBUG
+ u32 ofs = 0;
+
+ if (!(iwl_debug_level & level))
+ return;
+
+ while (len) {
+ print_hex_dump(KERN_DEBUG, "iwl data: ", DUMP_PREFIX_OFFSET,
+ 16, 1, p + ofs, len, 1);
+ ofs += 16;
+ len -= min(len, 16U);
+ }
+#endif
+}
+
/*************** DMA-QUEUE-GENERAL-FUNCTIONS *****
* DMA services
*
@@ -1819,7 +1836,7 @@ void iwl_report_frame(struct iwl_priv *priv,
}
}
if (print_dump)
- printk_buf(IWL_DL_RX, data, length);
+ iwl_print_hex_dump(IWL_DL_RX, data, length);
}
#endif
@@ -2836,7 +2853,7 @@ static int iwl_get_sta_id(struct iwl_priv *priv, struct ieee80211_hdr *hdr)
IWL_DEBUG_DROP("Station " MAC_FMT " not in station map. "
"Defaulting to broadcast...\n",
MAC_ARG(hdr->addr1));
- printk_buf(IWL_DL_DROP, (u8 *) hdr, sizeof(*hdr));
+ iwl_print_hex_dump(IWL_DL_DROP, (u8 *) hdr, sizeof(*hdr));
return IWL_BROADCAST_ID;
}
@@ -3028,10 +3045,11 @@ static int iwl_tx_skb(struct iwl_priv *priv,
txq->need_update = 0;
}
- printk_buf(IWL_DL_TX, out_cmd->cmd.payload, sizeof(out_cmd->cmd.tx));
+ iwl_print_hex_dump(IWL_DL_TX, out_cmd->cmd.payload,
+ sizeof(out_cmd->cmd.tx));
- printk_buf(IWL_DL_TX, (u8 *) out_cmd->cmd.tx.hdr,
- ieee80211_get_hdrlen(fc));
+ iwl_print_hex_dump(IWL_DL_TX, (u8 *)out_cmd->cmd.tx.hdr,
+ ieee80211_get_hdrlen(fc));
iwl4965_tx_queue_update_wr_ptr(priv, txq, len);
@@ -3939,7 +3957,7 @@ static void iwl_rx_pm_debug_statistics_notif(struct iwl_priv *priv,
IWL_DEBUG_RADIO("Dumping %d bytes of unhandled "
"notification for %s:\n",
le32_to_cpu(pkt->len), get_cmd_string(pkt->hdr.cmd));
- printk_buf(IWL_DL_RADIO, pkt->u.raw, le32_to_cpu(pkt->len));
+ iwl_print_hex_dump(IWL_DL_RADIO, pkt->u.raw, le32_to_cpu(pkt->len));
}
static void iwl_rx_beacon_notif(struct iwl_priv *priv,
@@ -4762,7 +4780,7 @@ int iwl_tx_queue_update_write_ptr(struct iwl_priv *priv,
static void iwl_print_rx_config_cmd(struct iwl_rxon_cmd *rxon)
{
IWL_DEBUG_RADIO("RX CONFIG:\n");
- printk_buf(IWL_DL_RADIO, (u8 *) rxon, sizeof(*rxon));
+ iwl_print_hex_dump(IWL_DL_RADIO, (u8 *) rxon, sizeof(*rxon));
IWL_DEBUG_RADIO("u16 channel: 0x%x\n", le16_to_cpu(rxon->channel));
IWL_DEBUG_RADIO("u32 flags: 0x%08X\n", le32_to_cpu(rxon->flags));
IWL_DEBUG_RADIO("u32 filter_flags: 0x%08x\n",
@@ -8525,7 +8543,6 @@ static ssize_t show_measurement(struct device *d,
{
struct iwl_priv *priv = dev_get_drvdata(d);
struct iwl_spectrum_notification measure_report;
-
u32 size = sizeof(measure_report), len = 0, ofs = 0;
u8 *data = (u8 *) & measure_report;
unsigned long flags;
@@ -8540,9 +8557,9 @@ static ssize_t show_measurement(struct device *d,
spin_unlock_irqrestore(&priv->lock, flags);
while (size && (PAGE_SIZE - len)) {
- len +=
- snprint_line(&buf[len], PAGE_SIZE - len,
- &data[ofs], min(size, 16U), ofs);
+ hex_dump_to_buffer(data + ofs, size, 16, 1, buf + len,
+ PAGE_SIZE - len, 1);
+ len = strlen(buf);
if (PAGE_SIZE - len)
buf[len++] = '\n';
@@ -8828,9 +8845,9 @@ static ssize_t show_statistics(struct device *d,
}
while (size && (PAGE_SIZE - len)) {
- len +=
- snprint_line(&buf[len], PAGE_SIZE - len,
- &data[ofs], min(size, 16U), ofs);
+ hex_dump_to_buffer(data + ofs, size, 16, 1, buf + len,
+ PAGE_SIZE - len, 1);
+ len = strlen(buf);
if (PAGE_SIZE - len)
buf[len++] = '\n';
diff --git a/drivers/net/wireless/iwl-helpers.h b/drivers/net/wireless/iwl-helpers.h
index 6ac119f..78b536e 100644
--- a/drivers/net/wireless/iwl-helpers.h
+++ b/drivers/net/wireless/iwl-helpers.h
@@ -287,25 +287,4 @@ static inline int snprint_line(char *buf, size_t count,
return out;
}
-#ifdef CONFIG_IWLWIFI_DEBUG
-static inline void printk_buf(int level, const void *p, u32 len)
-{
- const u8 *data = p;
- char line[81];
- u32 ofs = 0;
- if (!(iwl_debug_level & level))
- return;
-
- while (len) {
- snprint_line(line, sizeof(line), &data[ofs],
- min(len, 16U), ofs);
- printk(KERN_DEBUG "%s\n", line);
- ofs += 16;
- len -= min(len, 16U);
- }
-}
-#else
-#define printk_buf(level, p, len) do {} while (0)
-#endif
-
#endif /* __iwl_helpers_h__ */
--
1.5.2
^ permalink raw reply related [flat|nested] 28+ messages in thread
* [PATCH 23/28] iwlwifi: Endianity fix for frame control
2007-08-08 7:33 ` [PATCH 22/28] iwlwifi: replace private snprint_line with common hex_dump_xxx Zhu Yi
@ 2007-08-08 7:33 ` Zhu Yi
2007-08-08 7:33 ` [PATCH 24/28] iwlwifi: Endianity fix for ct kill configuration Zhu Yi
0 siblings, 1 reply; 28+ messages in thread
From: Zhu Yi @ 2007-08-08 7:33 UTC (permalink / raw)
To: linville; +Cc: linux-wireless, Tomas Winkler, Zhu Yi
From: Tomas Winkler <tomas.winkler@intel.com>
This patch fixes endianity issue for frame control field
in iwl_hw_build_tx_cmd_rate function. In addition it converts
frame_ctl to fc to align name convention in driver.
Signed-off-by: Tomas Winkler <tomas.winkler@intel.com>
Signed-off-by: Zhu Yi <yi.zhu@intel.com>
---
drivers/net/wireless/iwl-4965.c | 9 ++++-----
drivers/net/wireless/iwl-base.c | 28 ++++++++++++++--------------
2 files changed, 18 insertions(+), 19 deletions(-)
diff --git a/drivers/net/wireless/iwl-4965.c b/drivers/net/wireless/iwl-4965.c
index 631bd19..eca9eed 100644
--- a/drivers/net/wireless/iwl-4965.c
+++ b/drivers/net/wireless/iwl-4965.c
@@ -2637,6 +2637,7 @@ void iwl_hw_build_tx_cmd_rate(struct iwl_priv *priv,
u8 rts_retry_limit = 0;
u8 data_retry_limit = 0;
__le32 tx_flags;
+ u16 fc = le16_to_cpu(hdr->frame_control);
tx_flags = cmd->cmd.tx.tx_flags;
@@ -2645,7 +2646,7 @@ void iwl_hw_build_tx_cmd_rate(struct iwl_priv *priv,
rts_retry_limit = (is_hcca) ?
RTS_HCCA_RETRY_LIMIT : RTS_DFAULT_RETRY_LIMIT;
- if (ieee80211_is_probe_response(hdr->frame_control)) {
+ if (ieee80211_is_probe_response(fc)) {
data_retry_limit = 3;
if (data_retry_limit < rts_retry_limit)
rts_retry_limit = data_retry_limit;
@@ -2655,10 +2656,8 @@ void iwl_hw_build_tx_cmd_rate(struct iwl_priv *priv,
if (priv->data_retry_limit != -1)
data_retry_limit = priv->data_retry_limit;
- if ((le16_to_cpu(hdr->frame_control) & IEEE80211_FCTL_FTYPE)
- == IEEE80211_FTYPE_MGMT) {
- switch (le16_to_cpu(hdr->frame_control) &
- IEEE80211_FCTL_STYPE) {
+ if ((fc & IEEE80211_FCTL_FTYPE) == IEEE80211_FTYPE_MGMT) {
+ switch (fc & IEEE80211_FCTL_STYPE) {
case IEEE80211_STYPE_AUTH:
case IEEE80211_STYPE_DEAUTH:
case IEEE80211_STYPE_ASSOC_REQ:
diff --git a/drivers/net/wireless/iwl-base.c b/drivers/net/wireless/iwl-base.c
index 2c107e7..a6cac9c 100644
--- a/drivers/net/wireless/iwl-base.c
+++ b/drivers/net/wireless/iwl-base.c
@@ -1718,7 +1718,7 @@ void iwl_report_frame(struct iwl_priv *priv,
u32 print_dump = 0; /* set to 1 to dump all frames' contents */
u32 hundred = 0;
u32 dataframe = 0;
- u16 frame_ctl;
+ u16 fc;
u16 seq_ctl;
u16 channel;
u16 phy_flags;
@@ -1738,7 +1738,7 @@ void iwl_report_frame(struct iwl_priv *priv,
u8 *data = IWL_RX_DATA(pkt);
/* MAC header */
- frame_ctl = le16_to_cpu(header->frame_control);
+ fc = le16_to_cpu(header->frame_control);
seq_ctl = le16_to_cpu(header->seq_ctrl);
/* metadata */
@@ -1763,7 +1763,7 @@ void iwl_report_frame(struct iwl_priv *priv,
/* if data frame is to us and all is good,
* (optionally) print summary for only 1 out of every 100 */
- if (to_us && (frame_ctl & ~IEEE80211_FCTL_PROTECTED) ==
+ if (to_us && (fc & ~IEEE80211_FCTL_PROTECTED) ==
(IEEE80211_FCTL_FROMDS | IEEE80211_FTYPE_DATA)) {
dataframe = 1;
if (!group100)
@@ -1787,25 +1787,25 @@ void iwl_report_frame(struct iwl_priv *priv,
if (hundred)
title = "100Frames";
- else if (frame_ctl & IEEE80211_FCTL_RETRY)
+ else if (fc & IEEE80211_FCTL_RETRY)
title = "Retry";
- else if (ieee80211_is_assoc_response(frame_ctl))
+ else if (ieee80211_is_assoc_response(fc))
title = "AscRsp";
- else if (ieee80211_is_reassoc_response(frame_ctl))
+ else if (ieee80211_is_reassoc_response(fc))
title = "RasRsp";
- else if (ieee80211_is_probe_response(frame_ctl)) {
+ else if (ieee80211_is_probe_response(fc)) {
title = "PrbRsp";
print_dump = 1; /* dump frame contents */
- } else if (ieee80211_is_beacon(frame_ctl)) {
+ } else if (ieee80211_is_beacon(fc)) {
title = "Beacon";
print_dump = 1; /* dump frame contents */
- } else if (ieee80211_is_atim(frame_ctl))
+ } else if (ieee80211_is_atim(fc))
title = "ATIM";
- else if (ieee80211_is_auth(frame_ctl))
+ else if (ieee80211_is_auth(fc))
title = "Auth";
- else if (ieee80211_is_deauth(frame_ctl))
+ else if (ieee80211_is_deauth(fc))
title = "DeAuth";
- else if (ieee80211_is_disassoc(frame_ctl))
+ else if (ieee80211_is_disassoc(fc))
title = "DisAssoc";
else
title = "Frame";
@@ -1822,14 +1822,14 @@ void iwl_report_frame(struct iwl_priv *priv,
if (dataframe)
IWL_DEBUG_RX("%s: mhd=0x%04x, dst=0x%02x, "
"len=%u, rssi=%d, chnl=%d, rate=%u, \n",
- title, frame_ctl, header->addr1[5],
+ title, fc, header->addr1[5],
length, rssi, channel, rate);
else {
/* src/dst addresses assume managed mode */
IWL_DEBUG_RX("%s: 0x%04x, dst=0x%02x, "
"src=0x%02x, rssi=%u, tim=%lu usec, "
"phy=0x%02x, chnl=%d\n",
- title, frame_ctl, header->addr1[5],
+ title, fc, header->addr1[5],
header->addr3[5], rssi,
tsf_low - priv->scan_start_tsf,
phy_flags, channel);
--
1.5.2
^ permalink raw reply related [flat|nested] 28+ messages in thread
* [PATCH 24/28] iwlwifi: Endianity fix for ct kill configuration
2007-08-08 7:33 ` [PATCH 23/28] iwlwifi: Endianity fix for frame control Zhu Yi
@ 2007-08-08 7:33 ` Zhu Yi
2007-08-08 7:33 ` [PATCH 25/28] iwlwifi: remove unused snprint_line Zhu Yi
0 siblings, 1 reply; 28+ messages in thread
From: Zhu Yi @ 2007-08-08 7:33 UTC (permalink / raw)
To: linville; +Cc: linux-wireless, Tomas Winkler, Zhu Yi
From: Tomas Winkler <tomas.winkler@intel.com>
This patch fixes endinianity and style issuse in ct kill host command.
Signed-off-by: Tomas Winkler <tomas.winkler@intel.com>
Signed-off-by: Zhu Yi <yi.zhu@intel.com>
---
drivers/net/wireless/iwl-4965.c | 12 ++++++------
drivers/net/wireless/iwl-commands.h | 6 +++---
2 files changed, 9 insertions(+), 9 deletions(-)
diff --git a/drivers/net/wireless/iwl-4965.c b/drivers/net/wireless/iwl-4965.c
index eca9eed..6b6ab52 100644
--- a/drivers/net/wireless/iwl-4965.c
+++ b/drivers/net/wireless/iwl-4965.c
@@ -713,8 +713,9 @@ static void iwl4965_bg_statistics_work(struct work_struct *work)
void iwl4965_rf_kill_ct_config(struct iwl_priv *priv)
{
struct iwl_ct_kill_config cmd;
- u32 R1 = 0, R2 = 0, R3 = 0;
- u32 temp_th = 0;
+ u32 R1, R2, R3;
+ u32 temp_th;
+ u32 crit_temperature;
unsigned long flags;
int rc = 0;
@@ -735,15 +736,14 @@ void iwl4965_rf_kill_ct_config(struct iwl_priv *priv)
temp_th = CELSIUS_TO_KELVIN(TM_CT_KILL_THRESHOLD);
- cmd.critical_temperature_R = ((temp_th * (R3-R1))/CT_LIMIT_CONST) + R2;
+ crit_temperature = ((temp_th * (R3-R1))/CT_LIMIT_CONST) + R2;
+ cmd.critical_temperature_R = cpu_to_le32(crit_temperature);
rc = iwl_send_cmd_pdu(priv,
REPLY_CT_KILL_CONFIG_CMD, sizeof(cmd), &cmd);
if (rc)
IWL_ERROR("REPLY_CT_KILL_CONFIG_CMD failed\n");
else
- IWL_WARNING("REPLY_CT_KILL_CONFIG_CMD succeeded\n");
-
- return;
+ IWL_DEBUG_INFO("REPLY_CT_KILL_CONFIG_CMD succeeded\n");
}
#ifdef CONFIG_IWLWIFI_SENSITIVITY
diff --git a/drivers/net/wireless/iwl-commands.h b/drivers/net/wireless/iwl-commands.h
index 2327ec3..1d2c091 100644
--- a/drivers/net/wireless/iwl-commands.h
+++ b/drivers/net/wireless/iwl-commands.h
@@ -560,9 +560,9 @@ struct iwl_missed_beacon_notif {
} __attribute__ ((packed));
struct iwl_ct_kill_config {
- u32 reserved;
- u32 critical_temperature_M;
- u32 critical_temperature_R;
+ __le32 reserved;
+ __le32 critical_temperature_M;
+ __le32 critical_temperature_R;
} __attribute__ ((packed));
/*
* Add/Modify Station Command & Response
--
1.5.2
^ permalink raw reply related [flat|nested] 28+ messages in thread
* [PATCH 25/28] iwlwifi: remove unused snprint_line
2007-08-08 7:33 ` [PATCH 24/28] iwlwifi: Endianity fix for ct kill configuration Zhu Yi
@ 2007-08-08 7:33 ` Zhu Yi
2007-08-08 7:33 ` [PATCH 26/28] iwlwifi: Enhance ISR/RX/CMD debug messages Zhu Yi
0 siblings, 1 reply; 28+ messages in thread
From: Zhu Yi @ 2007-08-08 7:33 UTC (permalink / raw)
To: linville; +Cc: linux-wireless, Zhu Yi
Signed-off-by: Zhu Yi <yi.zhu@intel.com>
---
drivers/net/wireless/iwl-helpers.h | 35 -----------------------------------
1 files changed, 0 insertions(+), 35 deletions(-)
diff --git a/drivers/net/wireless/iwl-helpers.h b/drivers/net/wireless/iwl-helpers.h
index 78b536e..e2a8d95 100644
--- a/drivers/net/wireless/iwl-helpers.h
+++ b/drivers/net/wireless/iwl-helpers.h
@@ -252,39 +252,4 @@ static inline unsigned long elapsed_jiffies(unsigned long start,
return end + (MAX_JIFFY_OFFSET - start);
}
-static inline int snprint_line(char *buf, size_t count,
- const u8 *data, u32 len, u32 ofs)
-{
- int out, i, j, l;
- char c;
-
- out = snprintf(buf, count, "%08X", ofs);
-
- for (l = 0, i = 0; i < 2; i++) {
- out += snprintf(buf + out, count - out, " ");
- for (j = 0; j < 8 && l < len; j++, l++)
- out +=
- snprintf(buf + out, count - out, "%02X ",
- data[(i * 8 + j)]);
- for (; j < 8; j++)
- out += snprintf(buf + out, count - out, " ");
- }
- out += snprintf(buf + out, count - out, " ");
- for (l = 0, i = 0; i < 2; i++) {
- out += snprintf(buf + out, count - out, " ");
- for (j = 0; j < 8 && l < len; j++, l++) {
- c = data[(i * 8 + j)];
- if (!isascii(c) || !isprint(c))
- c = '.';
-
- out += snprintf(buf + out, count - out, "%c", c);
- }
-
- for (; j < 8; j++)
- out += snprintf(buf + out, count - out, " ");
- }
-
- return out;
-}
-
#endif /* __iwl_helpers_h__ */
--
1.5.2
^ permalink raw reply related [flat|nested] 28+ messages in thread
* [PATCH 26/28] iwlwifi: Enhance ISR/RX/CMD debug messages
2007-08-08 7:33 ` [PATCH 25/28] iwlwifi: remove unused snprint_line Zhu Yi
@ 2007-08-08 7:33 ` Zhu Yi
2007-08-08 7:33 ` [PATCH 27/28] iwlwifi: Correct missing hardware detection in iwl_isr() Zhu Yi
0 siblings, 1 reply; 28+ messages in thread
From: Zhu Yi @ 2007-08-08 7:33 UTC (permalink / raw)
To: linville; +Cc: linux-wireless, Ben Cahill, Zhu Yi
From: Ben Cahill <ben.m.cahill@intel.com>
This patch enhances ISR/RX/CMD debug messages and make sure
all commands are in get_cmd_string(). It also removes 2 unused
commands and enhance comments.
Signed-off-by: Ben Cahill <ben.m.cahill@intel.com>
Signed-off-by: Zhu Yi <yi.zhu@intel.com>
---
drivers/net/wireless/iwl-base.c | 84 +++++++++++++++++++++++-----------
drivers/net/wireless/iwl-commands.h | 5 +--
2 files changed, 58 insertions(+), 31 deletions(-)
diff --git a/drivers/net/wireless/iwl-base.c b/drivers/net/wireless/iwl-base.c
index a6cac9c..ad7e67c 100644
--- a/drivers/net/wireless/iwl-base.c
+++ b/drivers/net/wireless/iwl-base.c
@@ -593,41 +593,61 @@ static inline int iwl_is_ready_rf(struct iwl_priv *priv)
static const char *get_cmd_string(u8 cmd)
{
switch (cmd) {
- IWL_CMD(SCAN_START_NOTIFICATION);
- IWL_CMD(SCAN_RESULTS_NOTIFICATION);
- IWL_CMD(SCAN_COMPLETE_NOTIFICATION);
- IWL_CMD(STATISTICS_NOTIFICATION);
IWL_CMD(REPLY_ALIVE);
IWL_CMD(REPLY_ERROR);
- IWL_CMD(REPLY_RXON_ASSOC);
IWL_CMD(REPLY_RXON);
+ IWL_CMD(REPLY_RXON_ASSOC);
IWL_CMD(REPLY_QOS_PARAM);
IWL_CMD(REPLY_RXON_TIMING);
IWL_CMD(REPLY_ADD_STA);
+#if IWL == 3945
+ IWL_CMD(REPLY_REMOVE_STA);
+ IWL_CMD(REPLY_REMOVE_ALL_STA);
+ IWL_CMD(REPLY_3945_RX);
+#endif
IWL_CMD(REPLY_TX);
IWL_CMD(REPLY_BCON);
+#if IWL == 4965
+ IWL_CMD(REPLY_SHUTDOWN);
+#endif
IWL_CMD(REPLY_RATE_SCALE);
IWL_CMD(REPLY_LEDS_CMD);
+ IWL_CMD(REPLY_TX_LINK_QUALITY_CMD);
+ IWL_CMD(RADAR_NOTIFICATION);
+ IWL_CMD(REPLY_QUIET_CMD);
+ IWL_CMD(REPLY_CHANNEL_SWITCH);
+ IWL_CMD(CHANNEL_SWITCH_NOTIFICATION);
+ IWL_CMD(REPLY_SPECTRUM_MEASUREMENT_CMD);
+ IWL_CMD(SPECTRUM_MEASURE_NOTIFICATION);
+ IWL_CMD(POWER_TABLE_CMD);
+ IWL_CMD(PM_SLEEP_NOTIFICATION);
+ IWL_CMD(PM_DEBUG_STATISTIC_NOTIFIC);
+ IWL_CMD(REPLY_SCAN_CMD);
IWL_CMD(REPLY_SCAN_ABORT_CMD);
+ IWL_CMD(SCAN_START_NOTIFICATION);
+ IWL_CMD(SCAN_RESULTS_NOTIFICATION);
+ IWL_CMD(SCAN_COMPLETE_NOTIFICATION);
+ IWL_CMD(BEACON_NOTIFICATION);
IWL_CMD(REPLY_TX_BEACON);
- IWL_CMD(REPLY_BT_CONFIG);
- IWL_CMD(REPLY_SCAN_CMD);
+ IWL_CMD(WHO_IS_AWAKE_NOTIFICATION);
+ IWL_CMD(QUIET_NOTIFICATION);
IWL_CMD(REPLY_TX_PWR_TABLE_CMD);
+ IWL_CMD(MEASURE_ABORT_NOTIFICATION);
+ IWL_CMD(REPLY_BT_CONFIG);
IWL_CMD(REPLY_STATISTICS_CMD);
+ IWL_CMD(STATISTICS_NOTIFICATION);
IWL_CMD(REPLY_CARD_STATE_CMD);
- IWL_CMD(REPLY_TX_LINK_QUALITY_CMD);
-#if IWL == 3945
- IWL_CMD(REPLY_3945_RX);
-#elif IWL == 4965
- IWL_CMD(MISSED_BEACONS_NOTIFICATION_TH_CMD);
+ IWL_CMD(CARD_STATE_NOTIFICATION);
+ IWL_CMD(MISSED_BEACONS_NOTIFICATION);
+#if IWL == 4965
IWL_CMD(REPLY_CT_KILL_CONFIG_CMD);
IWL_CMD(SENSITIVITY_CMD);
- IWL_CMD(REPLY_RX_MPDU_CMD);
+ IWL_CMD(REPLY_PHY_CALIBRATION_CMD);
IWL_CMD(REPLY_RX_PHY_CMD);
+ IWL_CMD(REPLY_RX_MPDU_CMD);
IWL_CMD(REPLY_4965_RX);
+ IWL_CMD(REPLY_COMPRESSED_BA);
#endif
- case POWER_TABLE_CMD:
- return "POWER_TABLE_CMD";
default:
return "UNKNOWN";
@@ -4647,8 +4667,8 @@ int iwl_calc_sig_qual(int rssi_dbm, int noise_dbm)
* iwl_rx_handle - Main entry function for receiving responses from the uCode
*
* Uses the priv->rx_handlers callback function array to invoke
- * the appropriate handlers including command response and 802.11
- * frame availability.
+ * the appropriate handlers, including command responses,
+ * frame-received notifications, and other notifications.
*/
static void iwl_rx_handle(struct iwl_priv *priv)
{
@@ -4662,6 +4682,10 @@ static void iwl_rx_handle(struct iwl_priv *priv)
r = iwl_hw_get_rx_read(priv);
i = rxq->read;
+ /* Rx interrupt, but nothing sent from uCode */
+ if (i == r)
+ IWL_DEBUG(IWL_DL_RX | IWL_DL_ISR, "r = %d, i = %d\n", r, i);
+
while (i != r) {
rxb = rxq->queue[i];
@@ -4677,7 +4701,12 @@ static void iwl_rx_handle(struct iwl_priv *priv)
PCI_DMA_FROMDEVICE);
pkt = (struct iwl_rx_packet *)rxb->skb->data;
- /* need to reclaim cmd buffer(s) */
+ /* Reclaim a command buffer only if this packet is a response
+ * to a (driver-originated) command.
+ * If the packet (e.g. Rx frame) originated from uCode,
+ * there is no command buffer to reclaim.
+ * Ucode should set SEQ_RX_FRAME bit if ucode-originated,
+ * but apparently a few don't get set; catch them here. */
reclaim = !(pkt->hdr.sequence & SEQ_RX_FRAME) &&
#if IWL == 4965
(pkt->hdr.cmd != REPLY_RX_PHY_CMD) &&
@@ -4690,21 +4719,22 @@ static void iwl_rx_handle(struct iwl_priv *priv)
* handle those that need handling via function in
* rx_handlers table. See iwl_setup_rx_handlers() */
if (priv->rx_handlers[pkt->hdr.cmd]) {
+ IWL_DEBUG(IWL_DL_HOST_COMMAND | IWL_DL_RX | IWL_DL_ISR,
+ "r = %d, i = %d, %s, 0x%02x\n", r, i,
+ get_cmd_string(pkt->hdr.cmd), pkt->hdr.cmd);
priv->rx_handlers[pkt->hdr.cmd] (priv, rxb);
- IWL_DEBUG(IWL_DL_RX | IWL_DL_ISR,
- "r = %d, i = %d, rx_handler %s\n", r, i,
- get_cmd_string(pkt->hdr.cmd));
} else {
/* No handling needed */
- IWL_DEBUG_HC("UNHANDLED - #0x%02x %s\n",
- pkt->hdr.cmd,
- get_cmd_string(pkt->hdr.cmd));
+ IWL_DEBUG(IWL_DL_HOST_COMMAND | IWL_DL_RX | IWL_DL_ISR,
+ "r %d i %d No handler needed for %s, 0x%02x\n",
+ r, i, get_cmd_string(pkt->hdr.cmd),
+ pkt->hdr.cmd);
}
if (reclaim) {
- /* Invoke any callbacks, transfer the skb to
- * caller, and fire off the (possibly) blocking
- * iwl_send_cmd() via as we reclaim the queue... */
+ /* Invoke any callbacks, transfer the skb to caller,
+ * and fire off the (possibly) blocking iwl_send_cmd()
+ * as we reclaim the driver command queue */
if (rxb && rxb->skb)
iwl_tx_cmd_complete(priv, rxb);
else
diff --git a/drivers/net/wireless/iwl-commands.h b/drivers/net/wireless/iwl-commands.h
index 1d2c091..eecb6f6 100644
--- a/drivers/net/wireless/iwl-commands.h
+++ b/drivers/net/wireless/iwl-commands.h
@@ -130,8 +130,6 @@ enum {
REPLY_TX_PWR_TABLE_CMD = 0x97,
MEASURE_ABORT_NOTIFICATION = 0x99,
- REPLY_CALIBRATION_TUNE = 0x9a,
-
/* BT config command */
REPLY_BT_CONFIG = 0x9b,
REPLY_STATISTICS_CMD = 0x9c,
@@ -143,15 +141,14 @@ enum {
/* Missed beacons notification */
MISSED_BEACONS_NOTIFICATION = 0xa2,
- MISSED_BEACONS_NOTIFICATION_TH_CMD = 0xa3,
#if IWL == 4965
REPLY_CT_KILL_CONFIG_CMD = 0xa4,
SENSITIVITY_CMD = 0xa8,
REPLY_PHY_CALIBRATION_CMD = 0xb0,
- REPLY_4965_RX = 0xc3,
REPLY_RX_PHY_CMD = 0xc0,
REPLY_RX_MPDU_CMD = 0xc1,
+ REPLY_4965_RX = 0xc3,
REPLY_COMPRESSED_BA = 0xc5,
#endif
REPLY_MAX = 0xff
--
1.5.2
^ permalink raw reply related [flat|nested] 28+ messages in thread
* [PATCH 27/28] iwlwifi: Correct missing hardware detection in iwl_isr()
2007-08-08 7:33 ` [PATCH 26/28] iwlwifi: Enhance ISR/RX/CMD debug messages Zhu Yi
@ 2007-08-08 7:33 ` Zhu Yi
2007-08-08 7:33 ` [PATCH 28/28] iwlwifi: Streamline irq_tasklet() when ISR debug not used Zhu Yi
0 siblings, 1 reply; 28+ messages in thread
From: Zhu Yi @ 2007-08-08 7:33 UTC (permalink / raw)
To: linville; +Cc: linux-wireless, Ben Cahill, Zhu Yi
From: Ben Cahill <ben.m.cahill@intel.com>
This patch corrects missing hardware detection in iwl_isr().
Signed-off-by: Ben Cahill <ben.m.cahill@intel.com>
Signed-off-by: Zhu Yi <yi.zhu@intel.com>
---
drivers/net/wireless/iwl-base.c | 3 +--
1 files changed, 1 insertions(+), 2 deletions(-)
diff --git a/drivers/net/wireless/iwl-base.c b/drivers/net/wireless/iwl-base.c
index ad7e67c..881945d 100644
--- a/drivers/net/wireless/iwl-base.c
+++ b/drivers/net/wireless/iwl-base.c
@@ -5282,8 +5282,7 @@ static irqreturn_t iwl_isr(int irq, void *data)
goto none;
}
- if ((inta == 0xFFFFFFFF) || (inta == 0xa5a5a5a5)
- || (inta == 0x5a5a5a5a)) {
+ if ((inta == 0xFFFFFFFF) || ((inta & 0xFFFFFFF0) == 0xa5a5a5a0)) {
/* Hardware disappeared */
IWL_WARNING("HARDWARE GONE?? INTA == 0x%080x\n", inta);
goto none;
--
1.5.2
^ permalink raw reply related [flat|nested] 28+ messages in thread
* [PATCH 28/28] iwlwifi: Streamline irq_tasklet() when ISR debug not used
2007-08-08 7:33 ` [PATCH 27/28] iwlwifi: Correct missing hardware detection in iwl_isr() Zhu Yi
@ 2007-08-08 7:33 ` Zhu Yi
0 siblings, 0 replies; 28+ messages in thread
From: Zhu Yi @ 2007-08-08 7:33 UTC (permalink / raw)
To: linville; +Cc: linux-wireless, Cahill, Ben M, Zhu Yi
From: Cahill, Ben M <ben.m.cahill@intel.com>
This patch streamlines irq_tasklet() when ISR debug is not used.
It also reports MAC_CLK_ACTV interrupt bit and enhance comments.
Signed-off-by: Cahill, Ben M <ben.m.cahill@intel.com>
Signed-off-by: Zhu Yi <yi.zhu@intel.com>
---
drivers/net/wireless/iwl-base.c | 35 +++++++++++++++++++++++++----------
1 files changed, 25 insertions(+), 10 deletions(-)
diff --git a/drivers/net/wireless/iwl-base.c b/drivers/net/wireless/iwl-base.c
index 881945d..15965fc 100644
--- a/drivers/net/wireless/iwl-base.c
+++ b/drivers/net/wireless/iwl-base.c
@@ -5125,10 +5125,13 @@ static void iwl_irq_tasklet(struct iwl_priv *priv)
inta_fh = iwl_read32(priv, CSR_FH_INT_STATUS);
iwl_write32(priv, CSR_FH_INT_STATUS, inta_fh);
- inta_mask = iwl_read32(priv, CSR_INT_MASK); /* just for debug */
- IWL_DEBUG_ISR
- ("inta 0x%08x, enabled 0x%08x, fh 0x%08x\n",
- inta, inta_mask, inta_fh);
+#ifdef CONFIG_IWLWIFI_DEBUG
+ if (iwl_debug_level & IWL_DL_ISR) {
+ inta_mask = iwl_read32(priv, CSR_INT_MASK); /* just for debug */
+ IWL_DEBUG_ISR("inta 0x%08x, enabled 0x%08x, fh 0x%08x\n",
+ inta, inta_mask, inta_fh);
+ }
+#endif
/* Since CSR_INT and CSR_FH_INT_STATUS reads and clears are not
* atomic, make sure that inta covers all the interrupts that
@@ -5155,6 +5158,21 @@ static void iwl_irq_tasklet(struct iwl_priv *priv)
return;
}
+#ifdef CONFIG_IWLWIFI_DEBUG
+ if (iwl_debug_level & (IWL_DL_ISR)) {
+ /* NIC fires this, but we don't use it, redundant with WAKEUP */
+ if (inta & BIT_INT_MAC_CLK_ACTV)
+ IWL_DEBUG_ISR("Microcode started or stopped.\n");
+
+ /* Alive notification via Rx interrupt will do the real work */
+ if (inta & BIT_INT_ALIVE)
+ IWL_DEBUG_ISR("Alive interrupt\n");
+ }
+#endif
+ /* Safely ignore these bits for debug checks below */
+ inta &= ~(BIT_INT_MAC_CLK_ACTV | BIT_INT_ALIVE);
+
+ /* HW RF KILL switch toggled (4965 only) */
if (inta & BIT_INT_RF_KILL) {
int hw_rf_kill = 0;
if (!(iwl_read32(priv, CSR_GP_CNTRL) &
@@ -5175,11 +5193,13 @@ static void iwl_irq_tasklet(struct iwl_priv *priv)
handled |= BIT_INT_RF_KILL;
}
+ /* Chip got too hot and stopped itself (4965 only) */
if (inta & BIT_INT_CT_KILL) {
IWL_ERROR("Microcode CT kill error detected.\n");
handled |= BIT_INT_CT_KILL;
}
+ /* Error detected by uCode */
if (inta & BIT_INT_SWERROR) {
IWL_ERROR("Microcode SW error detected. Restarting 0x%X.\n",
inta);
@@ -5187,6 +5207,7 @@ static void iwl_irq_tasklet(struct iwl_priv *priv)
handled |= BIT_INT_SWERROR;
}
+ /* uCode wakes up after power-down sleep */
if (inta & BIT_INT_WAKEUP) {
IWL_DEBUG_ISR("Wakeup interrupt\n");
iwl_rx_queue_update_write_ptr(priv, &priv->rxq);
@@ -5200,12 +5221,6 @@ static void iwl_irq_tasklet(struct iwl_priv *priv)
handled |= BIT_INT_WAKEUP;
}
- /* Alive notification via Rx interrupt will do the real work */
- if (inta & BIT_INT_ALIVE) {
- IWL_DEBUG_ISR("Alive interrupt\n");
- handled |= BIT_INT_ALIVE;
- }
-
/* All uCode command responses, including Tx command responses,
* Rx "responses" (frame-received notification), and other
* notifications from uCode come through here*/
--
1.5.2
^ permalink raw reply related [flat|nested] 28+ messages in thread
end of thread, other threads:[~2007-08-08 7:38 UTC | newest]
Thread overview: 28+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <11865584251026-git-send-email-yi.zhu@intel.com>
2007-08-08 7:33 ` [PATCH 01/28] iwlwifi: fix a lot of checkpatch.pl warnings Zhu Yi
2007-08-08 7:33 ` [PATCH 02/28] iwlwifi: add more Kconfig options Zhu Yi
2007-08-08 7:33 ` [PATCH 03/28] iwlwifi: Endianity fix for 4965 rate scaling Zhu Yi
2007-08-08 7:33 ` [PATCH 04/28] iwlwifi: Endianity fix for 4965 rx chain selection Zhu Yi
2007-08-08 7:33 ` [PATCH 05/28] iwlwifi: optimize iwl_queue_{inc|dec}_wrap implementation Zhu Yi
2007-08-08 7:33 ` [PATCH 06/28] iwlwifi: use mask operation to replace '%' for index calculation Zhu Yi
2007-08-08 7:33 ` [PATCH 07/28] iwlwifi: make local functions static Zhu Yi
2007-08-08 7:33 ` [PATCH 08/28] iwlwifi: some coding styles cleanup Zhu Yi
2007-08-08 7:33 ` [PATCH 09/28] iwlwifi: replace unnecessary GFP_ATOMIC with GFP_KERNEL Zhu Yi
2007-08-08 7:33 ` [PATCH 10/28] iwlwifi: remove priv stuff zeroing in iwl_pci_probe Zhu Yi
2007-08-08 7:33 ` [PATCH 11/28] iwlwifi: add name for some PCI configuration space registers Zhu Yi
2007-08-08 7:33 ` [PATCH 12/28] iwlwifi: shorten some structure and function names Zhu Yi
2007-08-08 7:33 ` [PATCH 13/28] iwlwifi: define iwl_rx_reply_scan only when CONFIG_IWLWIFI_DEBUG enabled Zhu Yi
2007-08-08 7:33 ` [PATCH 14/28] iwlwifi: remove redundant quotes Zhu Yi
2007-08-08 7:33 ` [PATCH 15/28] iwlwifi: Endianity fix for rxon host commands Zhu Yi
2007-08-08 7:33 ` [PATCH 16/28] iwlwifi: Endianity fix for beacon host command Zhu Yi
2007-08-08 7:33 ` [PATCH 17/28] iwlwifi: Endianity fix for channel number Zhu Yi
2007-08-08 7:33 ` [PATCH 18/28] iwlwifi: shorten more function names Zhu Yi
2007-08-08 7:33 ` [PATCH 19/28] iwlwifi: make iwl_get_bits inline function from macro Zhu Yi
2007-08-08 7:33 ` [PATCH 20/28] iwlwifi: remove BIT_FMT and BIT_ARG Zhu Yi
2007-08-08 7:33 ` [PATCH 21/28] iwlwifi: remove WLAN_FC_GET_TYPE macros Zhu Yi
2007-08-08 7:33 ` [PATCH 22/28] iwlwifi: replace private snprint_line with common hex_dump_xxx Zhu Yi
2007-08-08 7:33 ` [PATCH 23/28] iwlwifi: Endianity fix for frame control Zhu Yi
2007-08-08 7:33 ` [PATCH 24/28] iwlwifi: Endianity fix for ct kill configuration Zhu Yi
2007-08-08 7:33 ` [PATCH 25/28] iwlwifi: remove unused snprint_line Zhu Yi
2007-08-08 7:33 ` [PATCH 26/28] iwlwifi: Enhance ISR/RX/CMD debug messages Zhu Yi
2007-08-08 7:33 ` [PATCH 27/28] iwlwifi: Correct missing hardware detection in iwl_isr() Zhu Yi
2007-08-08 7:33 ` [PATCH 28/28] iwlwifi: Streamline irq_tasklet() when ISR debug not used Zhu Yi
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.