[PATCH] UBUNTU: iwlwifi: update to v1.0.0-1

Wang, Yong Y yong.y.wang at intel.com
Mon Aug 13 10:28:27 UTC 2007


Signed-off-by: Yong Wang <yong.y.wang at intel.com>
---
 debian/changelog                           |    9 +++++++
 ubuntu-firmware/iwlwifi/iwlwifi-3945.ucode |  Bin 149652 -> 149652
bytes
 ubuntu-firmware/iwlwifi/iwlwifi-4965.ucode |  Bin 191332 -> 191336
bytes
 ubuntu/wireless/iwlwifi/base.c             |   26 ++++++++++++++------
 ubuntu/wireless/iwlwifi/iwl-3945-rs.c      |   16 +++++++++++++
 ubuntu/wireless/iwlwifi/iwl-4965-rs.c      |   34
+++++++++++++++++++++++++--
 6 files changed, 74 insertions(+), 11 deletions(-)

diff --git a/debian/changelog b/debian/changelog
index 6702fde..43f6b64 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,12 @@
+linux-ubuntu-modules-2.6.22 (2.6.22-9.23) gutsy; urgency=low
+
+  [Yong Wang]
+
+  * iwlwifi: update iwl3945 microcode, update iwl4965 microcode
+  * iwlwifi: update to v1.0.0-1
+
+ -- Yong Wang <yong.y.wang at intel.com>  Mon, 13 Aug 2007 17:42:54 +0800
+
 linux-ubuntu-modules-2.6.22 (2.6.22-9.22) gutsy; urgency=low
 
   [Ben Collins]
diff --git a/ubuntu-firmware/iwlwifi/iwlwifi-3945.ucode
b/ubuntu-firmware/iwlwifi/iwlwifi-3945.ucode
index
678e7f6ff0b3c92a5f37023ad3516a639a010d09..14dc7aac962f7abdae0ebe6b6c6656
8cc2b42050 100644
GIT binary patch
delta 19
acmbO-k#ovKP9|2yMy6IK#;r_DlRN-6(**+n

delta 19
acmbO-k#ovKP9_$HMy6IK#;r_DlRN-6yafRO

diff --git a/ubuntu-firmware/iwlwifi/iwlwifi-4965.ucode
b/ubuntu-firmware/iwlwifi/iwlwifi-4965.ucode
index
90f25e15049d865aa6331442fdb4ec3f9896201d..1fadfd0453508752d6a6f4851546df
93569a0b20 100644
GIT binary patch
delta 673
zcmYjPZAepL6n at X$?!ND?+Ojm%O|c at 1X@4Zmw7|#;mf6>j5M1^J!FFA0bLy at XYJwj>
zg4YDA1r-KnWpstewxmxeQ%V#wub@#F!;LpX$<`|h_3LoXbIy4lo^z&#_1}i|Yz%Bx
zk_YT39oT!ubYoh0*dv*K2Ki>atgzHE&6c{{^^EDB^h5z624bZy6?DYIL1~`_uCIeH
z(#&><TLW(;_7HfJvp;ZcuHBr2=u-X4t;xA5lf67)M|2iHKU3P6(rRpTZCXJUvw<eL
z&+s2wfCJ at _1cP{TDHLF+fCLznk}7~_ICVJ4b<e9tBO|)5QJmq1EQrM}H=JaLG;OXR
z9(O}AwBwvgNJy<!*ht8qsJ9Vcpxv1%#Fw5aLlXne8|V at 5j9P^n&9BfATw4h_ at EHdx
zLC|(E4&w8N{C1q>0Y_Z2#zFR`B7~YnSs6AreGKI at ODp?uzXvuz5YKq1xbyf#6%=aY
zV0rc>epW?wFW`wPI18CLzZwo}x1nWl4&SMUg1k9{W8Uh#v~j0~v4~!TgwtPXrDSwK
z5Yd%rg)estnE1XIZr1(S*i9PE^)RmHiF_gCKgC;Vu2!LmcAQ-US?NWz!F<_JcUQjn
z>&NZlr{eT;^}C3$($4Ta>5oiD2Am>_ibk!X`~i2?KstYoxBU at i4cVo&{TAgC{JjS9
zw1cW;5<AZDf_3$|MKIN-iId9k%?8D+uYvjnMcCt|=h%U-(s1Ay^*qL4CB5a at Dl2tv
zN#PL3lf>6zOjBB+*+ at NBGYf`p(kZ-gb_)9!p<$|5AO80WYw0Vz*V7GUEG5T+2zKfI
R9_E&@o@)V#YhjKa{|k2q83+IX

delta 671
zcmYjPZAepL6n at X$hr9dmb!wRt^Ik>!Aei>EC4N8#h0U=3^dnG6ON?!a&iS$3KAdZy
zXn)@Q(VRa54U at 3AqbR0PmJmj$NFv>lLZqb|Z-nAUcPP}aa}MV`=XuV<`97yxn$xL_
z=!A0pscKdWSH~8#3oJYt6H|Zx!hW5k;Jr*Y?=8+_QisKt3Wze0ERLw5&jc65^E^Dv
zfG^_8X-H3lccSVNc(Mz741tC+gN<r)!^)G{#W|4>rmA@@AI2-U{5chgfrjJzUB&u%
zm-JfyU)M;+n;;8%NhBVO1e}lwy<(OVFvCvqgRpA2v$04lF0g=!I9+f}^*|G7h>?g3
zs&f0aYt+wmBGyZrIUh2Wa`BA!!8}SY<vJ8r8VzTY+7@}|71GfHMX*TTwt#~TGBz3v
zN5eIws1<DKc^Vr%mx~bU79?ei>zav{GjZ$$nQVn45F=}?vam){+Xj`#GGPxprLofB
z_$fPDoVE|3XV{*Ug5udH{CvRAorN9ptqpE~g_O6$WwsFQp*G3mcDR_bskd#I?e~tB
zXc%7bAmph1L9iRrGF~K(#!rGs0;W=PG+c+xa-E<?U;9ak8!QFY@&I>V?;V!z{#kug
z^-5TtNcgzhxIeDOn7-Lv-kr7!D9MO=1ZjqhxS;?KV(X3|X=oX1-4dkh<fj|Xu(Rqt
zk{V+1fce19ZAiVHFGQ5FL7!qh=<{=vP)$4@*}hWJCx?ndviAq|W*TZLQJZB4;|k{t
zm>zyFBzNUka*0UR%IxSz>5$`teaKP14Zfw2F81#o=H+Mktdlo1vNAbw2vFTwFMwDt
IFk5wh0jL`mdjJ3c

diff --git a/ubuntu/wireless/iwlwifi/base.c
b/ubuntu/wireless/iwlwifi/base.c
index feabadf..9a650ec 100644
--- a/ubuntu/wireless/iwlwifi/base.c
+++ b/ubuntu/wireless/iwlwifi/base.c
@@ -106,7 +106,7 @@ BUILD_BUG()
 #define VS
 #endif
 
-#define IWLWIFI_VERSION "0.0.42" VD VS
+#define IWLWIFI_VERSION "1.0.0-1k" VD VS
 #define DRV_COPYRIGHT	"Copyright(c) 2003-2007 Intel Corporation"
 #define DRV_VERSION     IWLWIFI_VERSION
 
@@ -1611,7 +1611,7 @@ int iwl_eeprom_init(struct iwl_priv *priv)
 		_iwl_release_restricted_access(priv);
 
 		if (!(r & 1)) {
-			IWL_ERROR("Time out reading EEPROM[%d]\n",
addr);
+			IWL_ERROR("Time out reading EEPROM[%d]", addr);
 			return -ETIMEDOUT;
 		}
 
@@ -3793,7 +3793,13 @@ static void iwl_tx_cmd_complete(struct iwl_priv
*priv,
 	/* If a Tx command is being handled and it isn't in the actual
 	 * command queue then there a command routing bug has been
introduced
 	 * in the queue management code. */
-	BUG_ON(txq_id != IWL_CMD_QUEUE_NUM);
+	WARN_ON(txq_id != IWL_CMD_QUEUE_NUM);
+	if (txq_id != IWL_CMD_QUEUE_NUM) {
+		IWL_ERROR("Kernel BUG! Please report below info:\n");
+		IWL_ERROR("Error wrong command queue %d command id
0x%X\n",
+			  txq_id, pkt->hdr.cmd);
+		dump_stack();
+	}
 
 	cmd_index = get_next_cmd_index(&priv->txq[IWL_CMD_QUEUE_NUM].q,
index,
 				       is_huge);
@@ -4245,6 +4251,7 @@ static void iwl_rx_handle(struct iwl_priv *priv)
 #if IWL == 4965
 			(pkt->hdr.cmd != REPLY_RX_PHY_CMD) &&
 #endif
+			(pkt->hdr.cmd != STATISTICS_NOTIFICATION) &&
 			(pkt->hdr.cmd != REPLY_TX);
 
 		/* Based on type of command response or notification,
@@ -6306,10 +6313,6 @@ static void iwl_alive_start(struct iwl_priv
*priv)
 
 	iwl_send_power_mode(priv, IWL_POWER_LEVEL(priv->power_mode));
 
-	/* Initialize our rx_config data */
-	iwl_connection_init_rx_config(priv);
-	memcpy(priv->staging_rxon.node_addr, priv->mac_addr, ETH_ALEN);
-
         if (iwl_is_associated(priv)) {
 		struct iwl_rxon_cmd *active_rxon =
 				(struct iwl_rxon_cmd
*)(&priv->active_rxon);
@@ -6317,6 +6320,10 @@ static void iwl_alive_start(struct iwl_priv
*priv)
 		memcpy(&priv->staging_rxon, &priv->active_rxon,
 			sizeof(priv->staging_rxon));
 		active_rxon->filter_flags &= ~RXON_FILTER_ASSOC_MSK;
+	} else {
+		/* Initialize our rx_config data */
+		iwl_connection_init_rx_config(priv);
+		memcpy(priv->staging_rxon.node_addr, priv->mac_addr,
ETH_ALEN);
 	}
 
 	/* Configure BT coexistence */
@@ -6995,6 +7002,9 @@ static void iwl_bg_post_associate(struct
work_struct *data)
 #endif /* CONFIG_IWLWIFI_SENSITIVITY */
 #endif /* IWL == 4965 */
 
+	if (priv->iw_mode == IEEE80211_IF_TYPE_IBSS)
+		priv->assoc_station_added = 1;
+
 	mutex_unlock(&priv->mutex);
 }
 
@@ -7286,7 +7296,7 @@ static int d_config_interface(struct ieee80211_hw
*hw,
 		memcpy(priv->bssid, conf->bssid, ETH_ALEN);
 
 		iwl_commit_rxon(priv);
-		if (priv->iw_mode != IEEE80211_IF_TYPE_AP)
+		if (priv->iw_mode == IEEE80211_IF_TYPE_STA)
 			iwl_rxon_add_station(
 				priv, priv->active_rxon.bssid_addr, 1);
 
diff --git a/ubuntu/wireless/iwlwifi/iwl-3945-rs.c
b/ubuntu/wireless/iwlwifi/iwl-3945-rs.c
index 161683f..26727cd 100644
--- a/ubuntu/wireless/iwlwifi/iwl-3945-rs.c
+++ b/ubuntu/wireless/iwlwifi/iwl-3945-rs.c
@@ -68,6 +68,7 @@ struct iwl_rate_scale_priv {
 	u8 tgg;
 	u32 tx_packets;
 	u8 start_rate;
+	u8 ibss_sta_added;
 	struct timer_list rate_scale_flush;
 	struct iwl_rate_scale_data win[IWL_RATE_COUNT];
 };
@@ -393,6 +394,7 @@ static void *rs_alloc_sta(void *priv, gfp_t gfp)
 	rs_priv->last_flush = jiffies;
 	rs_priv->flush_time = IWL_RATE_FLUSH;
 	rs_priv->last_tx_packets = 0;
+	rs_priv->ibss_sta_added = 0;
 
 	init_timer(&rs_priv->rate_scale_flush);
 	rs_priv->rate_scale_flush.data = (unsigned long)rs_priv;
@@ -679,6 +681,20 @@ static struct ieee80211_rate *rs_get_rate(void
*priv_rate,
 
 	rs_priv = (void *)sta->rate_ctrl_priv;
 
+	if ((priv->iw_mode == IEEE80211_IF_TYPE_IBSS) &&
+	    !rs_priv->ibss_sta_added) {
+		u8 sta_id = iwl_hw_find_station(priv, hdr->addr1);
+
+		if (sta_id == IWL_INVALID_STATION) {
+			IWL_DEBUG_RATE("LQ: ADD station " MAC_FMT "\n",
+					MAC_ARG(hdr->addr1));
+			sta_id = iwl_add_station(priv,
+				    hdr->addr1, 0, CMD_ASYNC);
+		}
+		if (sta_id != IWL_INVALID_STATION)
+			rs_priv->ibss_sta_added = 1;
+	}
+
 	spin_lock_irqsave(&rs_priv->lock, flags);
 
 	if (rs_priv->start_rate != IWL_RATE_INVALID) {
diff --git a/ubuntu/wireless/iwlwifi/iwl-4965-rs.c
b/ubuntu/wireless/iwlwifi/iwl-4965-rs.c
index 6257cd8..8771375 100644
--- a/ubuntu/wireless/iwlwifi/iwl-4965-rs.c
+++ b/ubuntu/wireless/iwlwifi/iwl-4965-rs.c
@@ -111,6 +111,7 @@ struct iwl_rate_scale_priv {
 	u8 is_dup;
 	u8 phymode;
 	u8 ready;
+	u8 ibss_sta_added;
 	u16 active_rate;
 	u16 active_siso_rate;
 	u16 active_mimo_rate;
@@ -621,6 +622,10 @@ static void rs_tx_status(void *priv_rate,
 	}
 
 	lq = (struct iwl_rate_scale_priv *)sta->rate_ctrl_priv;
+
+	if ((priv->iw_mode == IEEE80211_IF_TYPE_IBSS) &&
!lq->ibss_sta_added)
+		return;
+
 	table = &lq->lq;
 	active_index = lq->active_tbl;
 
@@ -1714,15 +1719,38 @@ static struct ieee80211_rate *rs_get_rate(void
*priv_rate,
 		return rs_get_lowest_rate(local);
 	}
 
+	lq = (struct iwl_rate_scale_priv *)sta->rate_ctrl_priv;
+
 	i = sta->last_txrate;
 
-	lq = (struct iwl_rate_scale_priv *)sta->rate_ctrl_priv;
+	if ((priv->iw_mode == IEEE80211_IF_TYPE_IBSS) &&
!lq->ibss_sta_added) {
+		u8 sta_id = iwl_hw_find_station(priv, hdr->addr1);
+
+		if (sta_id == IWL_INVALID_STATION) {
+			IWL_DEBUG_RATE("LQ: ADD station " MAC_FMT "\n",
+					MAC_ARG(hdr->addr1));
+			sta_id = iwl_add_station(priv,
+				    hdr->addr1, 0, CMD_ASYNC);
+		}
+		if ((sta_id != IWL_INVALID_STATION)) {
+			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);
+		}
+		if (!lq->ibss_sta_added)
+			goto done;
+	}
+
 	if (lq->commit_lq && lq->ready) {
 		lq->commit_lq = 0;
 		if (rs_send_lq_cmd(priv, &lq->lq, CMD_ASYNC))
 			lq->commit_lq = 1;
 	}
 
+ done:
 	sta_info_put(sta);
 	if ((i < 0) || (i > IWL_RATE_COUNT)) {
 		return rs_get_lowest_rate(local);
@@ -1779,8 +1807,8 @@ static void rs_rate_init(void *priv_rate, void
*priv_sta,
 	 * previous packets? Need to have IEEE 802.1X auth succeed
immediately
 	 * after assoc.. */
 
-	if (((priv->iw_mode == IEEE80211_IF_TYPE_IBSS) ||
-		(priv->iw_mode == IEEE80211_IF_TYPE_AP))) {
+	crl->ibss_sta_added = 0;
+	if (priv->iw_mode == IEEE80211_IF_TYPE_AP) {
 		u8 sta_id = iwl_hw_find_station(priv, sta->addr);
 		/* for IBSS the call are from tasklet */
 		IWL_DEBUG_HT("LQ: ADD station " MAC_FMT " \n",
-- 
1.5.3.rc2.gc4fba



-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.ubuntu.com/archives/kernel-team/attachments/20070813/929dfaea/attachment.html>


More information about the kernel-team mailing list