linux-wireless.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [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).