* [PATCH 1/8] iwlwifi: avoid ucode assert for LQ cmd call
[not found] <11857642261522-git-send-email-yi.zhu@intel.com>
@ 2007-07-30 2:56 ` Zhu Yi
2007-07-30 2:57 ` [PATCH 2/8] iwlwifi: call QoS command on QoS data change Zhu Yi
0 siblings, 1 reply; 8+ messages in thread
From: Zhu Yi @ 2007-07-30 2:56 UTC (permalink / raw)
To: linville; +Cc: linux-wireless, Mohamed Abbas, Zhu Yi
From: Mohamed Abbas <mabbas@linux.intel.com>
This patch make sure we don't call any Link Quality commands until
the station is added, otherwise ucode will assert.
Signed-off-by: Mohamed Abbas <mabbas@linux.intel.com>
Signed-off-by: Zhu Yi <yi.zhu@intel.com>
---
drivers/net/wireless/iwl-4965-rs.c | 61 +++++++++++++++---------------------
drivers/net/wireless/iwl-4965.h | 1 +
drivers/net/wireless/iwl-base.c | 1 +
3 files changed, 27 insertions(+), 36 deletions(-)
diff --git a/drivers/net/wireless/iwl-4965-rs.c b/drivers/net/wireless/iwl-4965-rs.c
index aad244e..6f3d4ab 100644
--- a/drivers/net/wireless/iwl-4965-rs.c
+++ b/drivers/net/wireless/iwl-4965-rs.c
@@ -110,7 +110,6 @@ struct iwl_rate_scale_priv {
u8 is_green;
u8 is_dup;
u8 phymode;
- u8 ready;
u8 ibss_sta_added;
u16 active_rate;
u16 active_siso_rate;
@@ -183,7 +182,7 @@ static int rs_send_lq_cmd(struct iwl_priv *priv,
#ifdef CONFIG_IWLWIFI_DEBUG
int i;
#endif
- int rc = 0;
+ int rc = -1;
struct iwl_host_cmd cmd = {
.id = REPLY_TX_LINK_QUALITY_CMD,
@@ -194,7 +193,7 @@ static int rs_send_lq_cmd(struct iwl_priv *priv,
if ((lq->sta_id == 0xFF) &&
(priv->iw_mode == IEEE80211_IF_TYPE_IBSS))
- return -1;
+ return rc;
if (lq->sta_id == 0xFF)
lq->sta_id = IWL_AP_ID;
@@ -212,7 +211,8 @@ static int rs_send_lq_cmd(struct iwl_priv *priv,
if (flags & CMD_ASYNC)
cmd.meta.u.callback = iwl_lq_sync_callback;
- rc = iwl_send_cmd(priv, &cmd);
+ if (iwl_is_associated(priv) && priv->lq_mngr.lq_ready)
+ rc = iwl_send_cmd(priv, &cmd);
return rc;
}
@@ -635,6 +635,9 @@ static void rs_tx_status(void *priv_rate,
lq = (struct iwl_rate_scale_priv *)sta->rate_ctrl_priv;
+ if (!priv->lq_mngr.lq_ready)
+ return;
+
if ((priv->iw_mode == IEEE80211_IF_TYPE_IBSS) && !lq->ibss_sta_added)
return;
@@ -1374,11 +1377,11 @@ static void rs_rate_scale_perform(struct iwl_priv *priv,
if (!sta || !sta->rate_ctrl_priv)
return;
- lq_data = (struct iwl_rate_scale_priv *)sta->rate_ctrl_priv;
- if (!lq_data->ready) {
+ if (!priv->lq_mngr.lq_ready) {
IWL_DEBUG_RATE("still rate scaling not ready\n");
return;
}
+ lq_data = (struct iwl_rate_scale_priv *)sta->rate_ctrl_priv;
if (!lq_data->search_better_tbl)
active_tbl = lq_data->active_tbl;
@@ -1449,6 +1452,8 @@ static void rs_rate_scale_perform(struct iwl_priv *priv,
&(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;
}
goto out;
@@ -1577,6 +1582,8 @@ static void rs_rate_scale_perform(struct iwl_priv *priv,
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
@@ -1603,6 +1610,8 @@ static void rs_rate_scale_perform(struct iwl_priv *priv,
&(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) &&
@@ -1650,8 +1659,7 @@ static void rs_rate_scale_perform(struct iwl_priv *priv,
static void rs_initialize_lq(struct iwl_priv *priv,
- struct sta_info *sta,
- int flg)
+ struct sta_info *sta)
{
int i;
struct iwl_rate_scale_priv *lq;
@@ -1769,18 +1777,18 @@ static struct ieee80211_rate *rs_get_rate(void *priv_rate,
lq->lq.sta_id = sta_id;
lq->lq.rate_scale_table[0].rate_n_flags = 0;
lq->ibss_sta_added = 1;
- lq->ready = 1;
lq->commit_lq = 1;
- rs_initialize_lq(priv, sta, CMD_ASYNC);
+ rs_initialize_lq(priv, sta);
}
if (!lq->ibss_sta_added)
goto done;
}
- if (lq->commit_lq && lq->ready) {
+ if (lq->commit_lq) {
lq->commit_lq = 0;
- rs_send_lq_cmd(priv, &lq->lq, CMD_ASYNC);
+ if (rs_send_lq_cmd(priv, &lq->lq, CMD_ASYNC))
+ lq->commit_lq = 1;
}
done:
@@ -1855,7 +1863,7 @@ static void rs_rate_init(void *priv_rate, void *priv_sta,
crl->lq.sta_id = sta_id;
crl->lq.rate_scale_table[0].rate_n_flags = 0;
}
- crl->ready = 1;
+ priv->lq_mngr.lq_ready = 1;
}
for (i = 0; i < mode->num_rates; i++) {
@@ -1891,13 +1899,8 @@ static void rs_rate_init(void *priv_rate, void *priv_sta,
crl->active_mimo_rate = crl->active_mimo_rate << IWL_FIRST_OFDM_RATE;
#endif /*CONFIG_IWLWIFI_HT*/
- if (priv && (priv->iw_mode != IEEE80211_IF_TYPE_IBSS)) {
- mutex_lock(&priv->mutex);
- rs_initialize_lq(priv, sta, 0);
- mutex_unlock(&priv->mutex);
- } else
- rs_initialize_lq(priv, sta, CMD_ASYNC);
-
+ if (priv)
+ rs_initialize_lq(priv, sta);
}
static int rs_fill_link_cmd(struct iwl_rate_scale_priv *lq_data,
@@ -2012,6 +2015,7 @@ static void rs_clear(void *priv_rate)
IWL_DEBUG_RATE("NOP\n");
+ priv->lq_mngr.lq_ready = 0;
#ifdef CONFIG_IWLWIFI_HT
#ifdef CONFIG_IWLWIFI_HT_AGG
if (priv->lq_mngr.agg_ctrl.granted_ba)
@@ -2133,24 +2137,9 @@ int iwl_fill_rs_info(struct ieee80211_hw *hw, char *buf, u8 sta_id)
void iwl_rate_scale_init(struct ieee80211_hw *hw, s32 sta_id)
{
- struct ieee80211_local *local = hw_to_local(hw);
struct iwl_priv *priv = hw->priv;
- struct iwl_rate_scale_priv *rs_priv;
- struct sta_info *sta;
- sta = sta_info_get(local, priv->stations[sta_id].sta.sta.addr);
- if (!sta || !sta->rate_ctrl_priv) {
- if (sta) {
- sta_info_put(sta);
- IWL_DEBUG_RATE("leave - no private rate data!\n");
- } else
- IWL_DEBUG_RATE("leave - no station!\n");
- return;
- }
-
- rs_priv = (void *)sta->rate_ctrl_priv;
- rs_priv->ready = 1;
- sta_info_put(sta);
+ priv->lq_mngr.lq_ready = 1;
}
void iwl_rate_control_register(void)
diff --git a/drivers/net/wireless/iwl-4965.h b/drivers/net/wireless/iwl-4965.h
index 9e4a663..8665929 100644
--- a/drivers/net/wireless/iwl-4965.h
+++ b/drivers/net/wireless/iwl-4965.h
@@ -196,6 +196,7 @@ struct iwl_lq_mngr {
unsigned long stamp_last;
u32 flush_time;
u32 tx_packets;
+ u8 lq_ready;
};
diff --git a/drivers/net/wireless/iwl-base.c b/drivers/net/wireless/iwl-base.c
index 87ad5d8..57b8195 100644
--- a/drivers/net/wireless/iwl-base.c
+++ b/drivers/net/wireless/iwl-base.c
@@ -7878,6 +7878,7 @@ static void iwl_mac_reset_tsf(struct ieee80211_hw *hw)
IWL_DEBUG_MAC80211("enter\n");
#if IWL == 4965
+ priv->lq_mngr.lq_ready = 0;
#ifdef CONFIG_IWLWIFI_HT
spin_lock_irqsave(&priv->lock, flags);
memset(&priv->current_assoc_ht, 0, sizeof(struct sta_ht_info));
--
1.5.2
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH 2/8] iwlwifi: call QoS command on QoS data change
2007-07-30 2:56 ` [PATCH 1/8] iwlwifi: avoid ucode assert for LQ cmd call Zhu Yi
@ 2007-07-30 2:57 ` Zhu Yi
2007-07-30 2:57 ` [PATCH 3/8] iwlwifi: Endainity Fix for scan host command Zhu Yi
0 siblings, 1 reply; 8+ messages in thread
From: Zhu Yi @ 2007-07-30 2:57 UTC (permalink / raw)
To: linville; +Cc: linux-wireless, Mohamed Abbas, Zhu Yi
From: Mohamed Abbas <mabbas@linux.intel.com>
The driver issues QoS command from post association, some time
post_assoc will be called before mac80211 sets QoS data. This
patch makes sure the QoS command will be called with new QoS data.
Signed-off-by: Mohamed Abbas <mabbas@linux.intel.com>
Signed-off-by: Zhu Yi <yi.zhu@intel.com>
---
drivers/net/wireless/iwl-base.c | 8 ++++++++
1 files changed, 8 insertions(+), 0 deletions(-)
diff --git a/drivers/net/wireless/iwl-base.c b/drivers/net/wireless/iwl-base.c
index 57b8195..0648bec 100644
--- a/drivers/net/wireless/iwl-base.c
+++ b/drivers/net/wireless/iwl-base.c
@@ -7811,6 +7811,14 @@ static int iwl_mac_conf_tx(struct ieee80211_hw *hw, int queue,
spin_unlock_irqrestore(&priv->lock, flags);
+ mutex_lock(&priv->mutex);
+
+ /* we wait for the last queue then call qos ucode command */
+ if (priv->assoc_id && iwl_is_associated(priv) && (i == (AC_NUM - 1)))
+ iwl_activate_qos(priv, 0);
+
+ mutex_unlock(&priv->mutex);
+
#endif /*CONFIG_IWLWIFI_QOS */
IWL_DEBUG_MAC80211("leave\n");
--
1.5.2
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH 3/8] iwlwifi: Endainity Fix for scan host command
2007-07-30 2:57 ` [PATCH 2/8] iwlwifi: call QoS command on QoS data change Zhu Yi
@ 2007-07-30 2:57 ` Zhu Yi
2007-07-30 2:57 ` [PATCH 4/8] iwliwif: Eidianity fix for calibration host commands Zhu Yi
0 siblings, 1 reply; 8+ messages in thread
From: Zhu Yi @ 2007-07-30 2:57 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 scan host command.
Signed-off-by: Tomas Winkler <tomas.winkler@intel.com>
Signed-off-by: Zhu Yi <yi.zhu@intel.com>
---
drivers/net/wireless/iwl-3945.c | 2 +-
drivers/net/wireless/iwl-3945.h | 4 ++--
drivers/net/wireless/iwl-base.c | 18 ++++++++++--------
drivers/net/wireless/iwl-commands.h | 2 +-
4 files changed, 14 insertions(+), 12 deletions(-)
diff --git a/drivers/net/wireless/iwl-3945.c b/drivers/net/wireless/iwl-3945.c
index 6c42f53..8a534e1 100644
--- a/drivers/net/wireless/iwl-3945.c
+++ b/drivers/net/wireless/iwl-3945.c
@@ -195,7 +195,7 @@ void iwl_disable_events(struct iwl_priv *priv)
* IWL_ANTENNA_MAIN - Force MAIN antenna
* IWL_ANTENNA_AUX - Force AUX antenna
*/
-int iwl3945_get_antenna_flags(const struct iwl_priv *priv)
+__le32 iwl3945_get_antenna_flags(const struct iwl_priv *priv)
{
switch (priv->antenna) {
case IWL_ANTENNA_DIVERSITY:
diff --git a/drivers/net/wireless/iwl-3945.h b/drivers/net/wireless/iwl-3945.h
index d134a4b..0f4db4c 100644
--- a/drivers/net/wireless/iwl-3945.h
+++ b/drivers/net/wireless/iwl-3945.h
@@ -32,7 +32,7 @@
* In non IWL == 3945 builds, these must build to nothing in order to allow
* the common code to not have several #if IWL == XXXX / #endif blocks
*/
-static inline int iwl3945_get_antenna_flags(const struct iwl_priv *priv)
+static inline __le32 iwl3945_get_antenna_flags(const struct iwl_priv *priv)
{ return 0; }
static inline int iwl3945_init_hw_rate_table(struct iwl_priv *priv)
{ return 0; }
@@ -48,7 +48,7 @@ static inline u8 iwl3945_sync_sta(struct iwl_priv *priv, int sta_id,
* Forward declare iwl-3945.c functions for iwl-base.c
*/
extern int iwl_eeprom_aqcuire_semaphore(struct iwl_priv *priv);
-extern int iwl3945_get_antenna_flags(const struct iwl_priv *priv);
+extern __le32 iwl3945_get_antenna_flags(const struct iwl_priv *priv);
extern int iwl3945_init_hw_rate_table(struct iwl_priv *priv);
extern void iwl3945_reg_txpower_periodic(struct iwl_priv *priv);
extern void iwl3945_bg_reg_txpower_periodic(struct work_struct *work);
diff --git a/drivers/net/wireless/iwl-base.c b/drivers/net/wireless/iwl-base.c
index 0648bec..a1dc3d9 100644
--- a/drivers/net/wireless/iwl-base.c
+++ b/drivers/net/wireless/iwl-base.c
@@ -3355,7 +3355,7 @@ static int iwl_get_measurement(struct iwl_priv *priv,
memset(&spectrum, 0, sizeof(spectrum));
- spectrum.channel_count = 1;
+ spectrum.channel_count = cpu_to_le32(1);
spectrum.flags =
RXON_FLG_TSF2HOST_MSK | RXON_FLG_ANT_A_MSK | RXON_FLG_DIS_DIV_MSK;
spectrum.filter_flags = MEASUREMENT_FILTER_FLAG;
@@ -5480,8 +5480,8 @@ static int iwl_init_channel_map(struct iwl_priv *priv)
* time if it's a quiet channel (nothing responded to our probe, and there's
* no other traffic).
* Disable "quiet" feature by setting PLCP_QUIET_THRESH to 0. */
-#define IWL_PLCP_QUIET_THRESH (1) /* packets */
-#define IWL_ACTIVE_QUIET_TIME (5) /* msec */
+#define IWL_PLCP_QUIET_THRESH __constant_cpu_to_le16(1) /* packets */
+#define IWL_ACTIVE_QUIET_TIME __constant_cpu_to_le16(5) /* msec */
/* For passive scan, listen PASSIVE_DWELL_TIME (msec) on each channel.
* Must be set longer than active dwell time.
@@ -7011,6 +7011,7 @@ static void iwl_bg_request_scan(struct work_struct *data)
u16 interval = 0;
u32 extra;
u32 suspend_time = 100;
+ u32 scan_suspend_time = 100;
unsigned long flags;
IWL_DEBUG_INFO("Scanning while associated...\n");
@@ -7020,7 +7021,7 @@ static void iwl_bg_request_scan(struct work_struct *data)
spin_unlock_irqrestore(&priv->lock, flags);
scan->suspend_time = 0;
- scan->max_out_time = 600 * 1024;
+ scan->max_out_time = cpu_to_le32(600 * 1024);
if (!interval)
interval = suspend_time;
#if IWL == 3945
@@ -7032,15 +7033,16 @@ static void iwl_bg_request_scan(struct work_struct *data)
*/
extra = (suspend_time / interval) << 24;
- scan->suspend_time = 0xFF0FFFFF &
+ scan_suspend_time = 0xFF0FFFFF &
(extra | ((suspend_time % interval) * 1024));
#else
extra = (suspend_time / interval) << 22;
- scan->suspend_time = (extra |
+ scan_suspend_time = (extra |
((suspend_time % interval) * 1024));
- IWL_DEBUG_SCAN("suspend_time 0x%X beacon interval %d\n",
- scan->suspend_time, interval);
#endif
+ scan->suspend_time = cpu_to_le32(scan_suspend_time);
+ IWL_DEBUG_SCAN("suspend_time 0x%X beacon interval %d\n",
+ scan_suspend_time, interval);
}
/* We should add the ability for user to lock to PASSIVE ONLY */
diff --git a/drivers/net/wireless/iwl-commands.h b/drivers/net/wireless/iwl-commands.h
index 297d24a..e3f2977 100644
--- a/drivers/net/wireless/iwl-commands.h
+++ b/drivers/net/wireless/iwl-commands.h
@@ -443,7 +443,7 @@ struct iwl_ssid_ie {
#define PROBE_OPTION_MAX 0x4
#define TX_CMD_FLG_SEQ_CTL_MSK 0x2000
#define TX_CMD_LIFE_TIME_INFINITE 0xFFFFFFFF
-#define IWL_GOOD_CRC_TH (1)
+#define IWL_GOOD_CRC_TH __constant_cpu_to_le16(1)
#define IWL_MAX_SCAN_SIZE 1024
struct iwl_scan_cmd {
--
1.5.2
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH 4/8] iwliwif: Eidianity fix for calibration host commands
2007-07-30 2:57 ` [PATCH 3/8] iwlwifi: Endainity Fix for scan host command Zhu Yi
@ 2007-07-30 2:57 ` Zhu Yi
2007-07-30 2:57 ` [PATCH 5/8] iwlwifi: Fix compilation conditional Zhu Yi
0 siblings, 1 reply; 8+ messages in thread
From: Zhu Yi @ 2007-07-30 2:57 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 calibration host commands.
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 | 8 ++--
drivers/net/wireless/iwl-4965.c | 78 ++++++++++++++++++++----------------
drivers/net/wireless/iwl-4965.h | 5 +-
3 files changed, 50 insertions(+), 41 deletions(-)
diff --git a/drivers/net/wireless/iwl-4965-hw.h b/drivers/net/wireless/iwl-4965-hw.h
index 0c81337..5dec78b 100644
--- a/drivers/net/wireless/iwl-4965-hw.h
+++ b/drivers/net/wireless/iwl-4965-hw.h
@@ -738,10 +738,10 @@ struct iwl_link_quality_cmd {
#define STATISTICS_FLG_CLEAR (0x1)
#define STATISTICS_FLG_DISABLE_NOTIFICATION (0x2)
-#define STATISTICS_REPLY_FLG_CLEAR (0x1)
-#define STATISTICS_REPLY_FLG_BAND_24G_MSK (0x2)
-#define STATISTICS_REPLY_FLG_TGJ_NARROW_BAND_MSK (0x4)
-#define STATISTICS_REPLY_FLG_FAT_MODE_MSK (0x8)
+#define STATISTICS_REPLY_FLG_CLEAR __constant_cpu_to_le32(0x1)
+#define STATISTICS_REPLY_FLG_BAND_24G_MSK __constant_cpu_to_le32(0x2)
+#define STATISTICS_REPLY_FLG_TGJ_NARROW_BAND_MSK __constant_cpu_to_le32(0x4)
+#define STATISTICS_REPLY_FLG_FAT_MODE_MSK __constant_cpu_to_le32(0x8)
#define RX_PHY_FLAGS_ANTENNAE_OFFSET (4)
#define RX_PHY_FLAGS_ANTENNAE_MASK (0x70)
diff --git a/drivers/net/wireless/iwl-4965.c b/drivers/net/wireless/iwl-4965.c
index da3e9a7..c791132 100644
--- a/drivers/net/wireless/iwl-4965.c
+++ b/drivers/net/wireless/iwl-4965.c
@@ -1049,25 +1049,30 @@ static int iwl4965_sensitivity_write(struct iwl_priv *priv, u8 flags)
memset(&cmd, 0, sizeof(cmd));
cmd.table[HD_AUTO_CORR32_X4_TH_ADD_MIN_INDEX] =
- (u16)data->auto_corr_ofdm;
+ cpu_to_le16((u16)data->auto_corr_ofdm);
cmd.table[HD_AUTO_CORR32_X4_TH_ADD_MIN_MRC_INDEX] =
- (u16)data->auto_corr_ofdm_mrc;
+ cpu_to_le16((u16)data->auto_corr_ofdm_mrc);
cmd.table[HD_AUTO_CORR32_X1_TH_ADD_MIN_INDEX] =
- (u16)data->auto_corr_ofdm_x1;
+ cpu_to_le16((u16)data->auto_corr_ofdm_x1);
cmd.table[HD_AUTO_CORR32_X1_TH_ADD_MIN_MRC_INDEX] =
- (u16)data->auto_corr_ofdm_mrc_x1;
+ cpu_to_le16((u16)data->auto_corr_ofdm_mrc_x1);
cmd.table[HD_AUTO_CORR40_X4_TH_ADD_MIN_INDEX] =
- (u16)data->auto_corr_cck;
+ cpu_to_le16((u16)data->auto_corr_cck);
cmd.table[HD_AUTO_CORR40_X4_TH_ADD_MIN_MRC_INDEX] =
- (u16)data->auto_corr_cck_mrc;
+ cpu_to_le16((u16)data->auto_corr_cck_mrc);
- cmd.table[HD_MIN_ENERGY_CCK_DET_INDEX] = (u16)data->nrg_th_cck;
- cmd.table[HD_MIN_ENERGY_OFDM_DET_INDEX] = (u16)data->nrg_th_ofdm;
+ cmd.table[HD_MIN_ENERGY_CCK_DET_INDEX] =
+ cpu_to_le16((u16)data->nrg_th_cck);
+ cmd.table[HD_MIN_ENERGY_OFDM_DET_INDEX] =
+ cpu_to_le16((u16)data->nrg_th_ofdm);
- cmd.table[HD_BARKER_CORR_TH_ADD_MIN_INDEX] = 190;
- cmd.table[HD_BARKER_CORR_TH_ADD_MIN_MRC_INDEX] = 390;
- cmd.table[HD_OFDM_ENERGY_TH_IN_INDEX] = 62;
+ cmd.table[HD_BARKER_CORR_TH_ADD_MIN_INDEX] =
+ __constant_cpu_to_le16(190);
+ cmd.table[HD_BARKER_CORR_TH_ADD_MIN_MRC_INDEX] =
+ __constant_cpu_to_le16(390);
+ cmd.table[HD_OFDM_ENERGY_TH_IN_INDEX] =
+ __constant_cpu_to_le16(62);
IWL_DEBUG_CALIB("ofdm: ac %u mrc %u x1 %u mrc_x1 %u thresh %u\n",
data->auto_corr_ofdm, data->auto_corr_ofdm_mrc,
@@ -1226,18 +1231,18 @@ static void iwl4965_noise_calibration(struct iwl_priv *priv,
}
spin_lock_irqsave(&priv->lock, flags);
- if (rx_info->interference_data_flag != 1) {
+ if (rx_info->interference_data_flag != INTERFERENCE_DATA_AVAILABLE) {
IWL_DEBUG_CALIB(" << Interference data unavailable\n");
spin_unlock_irqrestore(&priv->lock, flags);
return;
}
band = (priv->staging_rxon.flags & RXON_FLG_BAND_24G_MSK) ? 0 : 1;
- chan_num = priv->staging_rxon.channel;
+ chan_num = le16_to_cpu(priv->staging_rxon.channel);
/* Make sure we accumulate data for just the associated channel
* (even if scanning). */
- if ((chan_num != (stat_resp->flag >> 16)) ||
+ if ((chan_num != (le32_to_cpu(stat_resp->flag) >> 16)) ||
((STATISTICS_REPLY_FLG_BAND_24G_MSK ==
(stat_resp->flag & STATISTICS_REPLY_FLG_BAND_24G_MSK)) &&
band)) {
@@ -1248,13 +1253,16 @@ static void iwl4965_noise_calibration(struct iwl_priv *priv,
}
/* Accumulate beacon statistics values across 20 beacons */
- chain_noise_a = (rx_info->beacon_silence_rssi_a & IN_BAND_FILTER);
- chain_noise_b = (rx_info->beacon_silence_rssi_b & IN_BAND_FILTER);
- chain_noise_c = (rx_info->beacon_silence_rssi_c & IN_BAND_FILTER);
+ chain_noise_a = le32_to_cpu(rx_info->beacon_silence_rssi_a) &
+ IN_BAND_FILTER;
+ chain_noise_b = le32_to_cpu(rx_info->beacon_silence_rssi_b) &
+ IN_BAND_FILTER;
+ chain_noise_c = le32_to_cpu(rx_info->beacon_silence_rssi_c) &
+ IN_BAND_FILTER;
- chain_sig_a = (rx_info->beacon_rssi_a & IN_BAND_FILTER);
- chain_sig_b = (rx_info->beacon_rssi_b & IN_BAND_FILTER);
- chain_sig_c = (rx_info->beacon_rssi_c & IN_BAND_FILTER);
+ chain_sig_a = le32_to_cpu(rx_info->beacon_rssi_a) & IN_BAND_FILTER;
+ chain_sig_b = le32_to_cpu(rx_info->beacon_rssi_b) & IN_BAND_FILTER;
+ chain_sig_c = le32_to_cpu(rx_info->beacon_rssi_c) & IN_BAND_FILTER;
spin_unlock_irqrestore(&priv->lock, flags);
@@ -1312,18 +1320,18 @@ static void iwl4965_noise_calibration(struct iwl_priv *priv,
/* Compare signal strengths for all 3 receivers. */
for (i = 0; i < NUM_RX_CHAINS; i++) {
if (i != max_average_sig_antenna_i) {
- s32 rssiDelta = (max_average_sig -
+ s32 rssi_delta = (max_average_sig -
average_sig[i]);
/* If signal is very weak, compared with
* strongest, mark it as disconnected. */
- if (rssiDelta > MAXIMUM_ALLOWED_PATHLOSS)
+ if (rssi_delta > MAXIMUM_ALLOWED_PATHLOSS)
data->disconn_array[i] = 1;
else
active_chains |= (1 << i);
IWL_DEBUG_CALIB("i = %d rssiDelta = %d "
"disconn_array[i] = %d\n",
- i, rssiDelta,
+ i, rssi_delta,
data->disconn_array[i]);
}
}
@@ -1451,31 +1459,31 @@ static void iwl4965_sensitivity_calibration(struct iwl_priv *priv,
}
spin_lock_irqsave(&priv->lock, flags);
- if (rx_info->interference_data_flag != 1) {
+ if (rx_info->interference_data_flag != INTERFERENCE_DATA_AVAILABLE) {
IWL_DEBUG_CALIB("<< invalid data.\n");
spin_unlock_irqrestore(&priv->lock, flags);
return;
}
/* Extract Statistics: */
- rx_enable_time = rx_info->channel_load;
- fa_cck = statistics->cck.false_alarm_cnt;
- fa_ofdm = statistics->ofdm.false_alarm_cnt;
- bad_plcp_cck = statistics->cck.plcp_err;
- bad_plcp_ofdm = statistics->ofdm.plcp_err;
+ rx_enable_time = le32_to_cpu(rx_info->channel_load);
+ fa_cck = le32_to_cpu(statistics->cck.false_alarm_cnt);
+ fa_ofdm = le32_to_cpu(statistics->ofdm.false_alarm_cnt);
+ bad_plcp_cck = le32_to_cpu(statistics->cck.plcp_err);
+ bad_plcp_ofdm = le32_to_cpu(statistics->ofdm.plcp_err);
statis.beacon_silence_rssi_a =
- statistics->general.beacon_silence_rssi_a;
+ le32_to_cpu(statistics->general.beacon_silence_rssi_a);
statis.beacon_silence_rssi_b =
- statistics->general.beacon_silence_rssi_b;
+ le32_to_cpu(statistics->general.beacon_silence_rssi_b);
statis.beacon_silence_rssi_c =
- statistics->general.beacon_silence_rssi_c;
+ le32_to_cpu(statistics->general.beacon_silence_rssi_c);
statis.beacon_energy_a =
- statistics->general.beacon_energy_a;
+ le32_to_cpu(statistics->general.beacon_energy_a);
statis.beacon_energy_b =
- statistics->general.beacon_energy_b;
+ le32_to_cpu(statistics->general.beacon_energy_b);
statis.beacon_energy_c =
- statistics->general.beacon_energy_c;
+ le32_to_cpu(statistics->general.beacon_energy_c);
spin_unlock_irqrestore(&priv->lock, flags);
diff --git a/drivers/net/wireless/iwl-4965.h b/drivers/net/wireless/iwl-4965.h
index 8665929..7fa17ee 100644
--- a/drivers/net/wireless/iwl-4965.h
+++ b/drivers/net/wireless/iwl-4965.h
@@ -201,6 +201,7 @@ struct iwl_lq_mngr {
/* Sensitivity and chain noise calibration */
+#define INTERFERENCE_DATA_AVAILABLE __constant_cpu_to_le32(1)
#define INITIALIZATION_VALUE 0xFFFF
#define CAL_NUM_OF_BEACONS 20
#define MAXIMUM_ALLOWED_PATHLOSS 15
@@ -218,8 +219,8 @@ struct iwl_lq_mngr {
#define HD_AUTO_CORR40_X4_TH_ADD_MIN_INDEX (9)
#define HD_OFDM_ENERGY_TH_IN_INDEX (10)
-#define SENSITIVITY_CMD_CONTROL_DEFAULT_TABLE (0)
-#define SENSITIVITY_CMD_CONTROL_WORK_TABLE (1)
+#define SENSITIVITY_CMD_CONTROL_DEFAULT_TABLE __constant_cpu_to_le16(0)
+#define SENSITIVITY_CMD_CONTROL_WORK_TABLE __constant_cpu_to_le16(1)
#define CHAIN_NOISE_MAX_DELTA_GAIN_CODE 3
--
1.5.2
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH 5/8] iwlwifi: Fix compilation conditional
2007-07-30 2:57 ` [PATCH 4/8] iwliwif: Eidianity fix for calibration host commands Zhu Yi
@ 2007-07-30 2:57 ` Zhu Yi
2007-07-30 2:57 ` [PATCH 6/8] iwlwifi: fix compile error when CONFIG_IWLWIFI_HT is not selected Zhu Yi
0 siblings, 1 reply; 8+ messages in thread
From: Zhu Yi @ 2007-07-30 2:57 UTC (permalink / raw)
To: linville; +Cc: linux-wireless, Tomas Winkler, Zhu Yi
From: Tomas Winkler <tomas.winkler@intel.com>
Fixing compilation conditional:
CONFIG_IWLWIFI_HT -> CONFIG_IWLWIFI_HT_AGG
Signed-off-by: Tomas Winkler <tomas.winkler@intel.com>
Signed-off-by: Zhu Yi <yi.zhu@intel.com>
---
drivers/net/wireless/iwl-4965.c | 4 ++--
1 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/drivers/net/wireless/iwl-4965.c b/drivers/net/wireless/iwl-4965.c
index c791132..cc2dd49 100644
--- a/drivers/net/wireless/iwl-4965.c
+++ b/drivers/net/wireless/iwl-4965.c
@@ -3826,9 +3826,9 @@ static void iwl4965_rx_reply_rx(struct iwl_priv *priv,
.antenna = 0,
.rate = iwl4965_get_rate(rx_start->rate_n_flags),
.flag = le16_to_cpu(rx_start->phy_flags),
-#ifdef CONFIG_IWLWIFI_HT
+#ifdef CONFIG_IWLWIFI_HT_AGG
.ordered = 0
-#endif
+#endif /* CONFIG_IWLWIFI_HT_AGG */
};
u8 network_packet;
--
1.5.2
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH 6/8] iwlwifi: fix compile error when CONFIG_IWLWIFI_HT is not selected
2007-07-30 2:57 ` [PATCH 5/8] iwlwifi: Fix compilation conditional Zhu Yi
@ 2007-07-30 2:57 ` Zhu Yi
2007-07-30 2:57 ` [PATCH 7/8] iwlwifi: workaround uCode REPLY_4965_RX cmd bug Zhu Yi
0 siblings, 1 reply; 8+ messages in thread
From: Zhu Yi @ 2007-07-30 2:57 UTC (permalink / raw)
To: linville; +Cc: linux-wireless, Zhu Yi
Signed-off-by: Zhu Yi <yi.zhu@intel.com>
---
drivers/net/wireless/iwl-4965-rs.c | 4 ----
1 files changed, 0 insertions(+), 4 deletions(-)
diff --git a/drivers/net/wireless/iwl-4965-rs.c b/drivers/net/wireless/iwl-4965-rs.c
index 6f3d4ab..7d4a980 100644
--- a/drivers/net/wireless/iwl-4965-rs.c
+++ b/drivers/net/wireless/iwl-4965-rs.c
@@ -2007,11 +2007,7 @@ static void rs_free(void *data)
static void rs_clear(void *priv_rate)
{
-#ifdef CONFIG_IWLWIFI_HT
-#ifdef CONFIG_IWLWIFI_HT_AGG
struct iwl_priv *priv = (struct iwl_priv *) priv_rate;
-#endif /*CONFIG_IWLWIFI_HT_AGG */
-#endif /* CONFIG_IWLWIFI_HT */
IWL_DEBUG_RATE("NOP\n");
--
1.5.2
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH 7/8] iwlwifi: workaround uCode REPLY_4965_RX cmd bug
2007-07-30 2:57 ` [PATCH 6/8] iwlwifi: fix compile error when CONFIG_IWLWIFI_HT is not selected Zhu Yi
@ 2007-07-30 2:57 ` Zhu Yi
2007-07-30 2:57 ` [PATCH 8/8] Update version iwl-base.c stamp to 0.1.6 Zhu Yi
0 siblings, 1 reply; 8+ messages in thread
From: Zhu Yi @ 2007-07-30 2:57 UTC (permalink / raw)
To: linville; +Cc: linux-wireless, Zhu Yi
This patch workarounds iwl4965 uCode bug that it doesn't set the
SEQ_RX_FRAME flag for command REPLY_4965_RX, which will trigger
a driver BUG_ON assertion.
Signed-off-by: Zhu Yi <yi.zhu@intel.com>
---
drivers/net/wireless/iwl-base.c | 1 +
1 files changed, 1 insertions(+), 0 deletions(-)
diff --git a/drivers/net/wireless/iwl-base.c b/drivers/net/wireless/iwl-base.c
index a1dc3d9..a98ad77 100644
--- a/drivers/net/wireless/iwl-base.c
+++ b/drivers/net/wireless/iwl-base.c
@@ -4576,6 +4576,7 @@ static void iwl_rx_handle(struct iwl_priv *priv)
reclaim = !(pkt->hdr.sequence & SEQ_RX_FRAME) &&
#if IWL == 4965
(pkt->hdr.cmd != REPLY_RX_PHY_CMD) &&
+ (pkt->hdr.cmd != REPLY_4965_RX) &&
#endif
(pkt->hdr.cmd != STATISTICS_NOTIFICATION) &&
(pkt->hdr.cmd != REPLY_TX);
--
1.5.2
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH 8/8] Update version iwl-base.c stamp to 0.1.6
2007-07-30 2:57 ` [PATCH 7/8] iwlwifi: workaround uCode REPLY_4965_RX cmd bug Zhu Yi
@ 2007-07-30 2:57 ` Zhu Yi
0 siblings, 0 replies; 8+ messages in thread
From: Zhu Yi @ 2007-07-30 2:57 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, 1 insertions(+), 1 deletions(-)
diff --git a/drivers/net/wireless/iwl-base.c b/drivers/net/wireless/iwl-base.c
index a98ad77..6e77a51 100644
--- a/drivers/net/wireless/iwl-base.c
+++ b/drivers/net/wireless/iwl-base.c
@@ -106,7 +106,7 @@ BUILD_BUG()
#define VS
#endif
-#define IWLWIFI_VERSION "0.1.5k" VD VS
+#define IWLWIFI_VERSION "0.1.6k" VD VS
#define DRV_COPYRIGHT "Copyright(c) 2003-2007 Intel Corporation"
#define DRV_VERSION IWLWIFI_VERSION
--
1.5.2
^ permalink raw reply related [flat|nested] 8+ messages in thread
end of thread, other threads:[~2007-07-30 2:59 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <11857642261522-git-send-email-yi.zhu@intel.com>
2007-07-30 2:56 ` [PATCH 1/8] iwlwifi: avoid ucode assert for LQ cmd call Zhu Yi
2007-07-30 2:57 ` [PATCH 2/8] iwlwifi: call QoS command on QoS data change Zhu Yi
2007-07-30 2:57 ` [PATCH 3/8] iwlwifi: Endainity Fix for scan host command Zhu Yi
2007-07-30 2:57 ` [PATCH 4/8] iwliwif: Eidianity fix for calibration host commands Zhu Yi
2007-07-30 2:57 ` [PATCH 5/8] iwlwifi: Fix compilation conditional Zhu Yi
2007-07-30 2:57 ` [PATCH 6/8] iwlwifi: fix compile error when CONFIG_IWLWIFI_HT is not selected Zhu Yi
2007-07-30 2:57 ` [PATCH 7/8] iwlwifi: workaround uCode REPLY_4965_RX cmd bug Zhu Yi
2007-07-30 2:57 ` [PATCH 8/8] Update version iwl-base.c stamp to 0.1.6 Zhu Yi
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).