rpms/kernel/F-7 kernel-2.6.spec, 1.3360, 1.3361 linux-2.6-wireless-fixes.patch, 1.2, 1.3

John W. Linville (linville) fedora-extras-commits at redhat.com
Fri Oct 19 17:56:42 UTC 2007


Author: linville

Update of /cvs/pkgs/rpms/kernel/F-7
In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv21419

Modified Files:
	kernel-2.6.spec linux-2.6-wireless-fixes.patch 
Log Message:
misc wireless driver updates


Index: kernel-2.6.spec
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-7/kernel-2.6.spec,v
retrieving revision 1.3360
retrieving revision 1.3361
diff -u -r1.3360 -r1.3361
--- kernel-2.6.spec	18 Oct 2007 16:58:46 -0000	1.3360
+++ kernel-2.6.spec	19 Oct 2007 17:56:09 -0000	1.3361
@@ -2216,6 +2216,16 @@
 %endif
 
 %changelog
+* Fri Oct 19 2007 John W. Linville <linville at redhat.com>
+- iwl4965-base.c: fix off-by-one errors
+- ipw2100: send WEXT scan events
+- rt2x00: Add new rt73usb USB ID
+- zd1211rw, fix oops when ejecting install media
+- rt2x00: Fix residual check in PLCP calculations.
+- rtl8187: Fix more frag bit checking, rts duration calc
+- iwlwifi: set correct base rate for A band in rs_dbgfs_set_mcs
+- iwlwifi: Fix rate setting in probe request for HW scan
+
 * Thu Oct 18 2007 Chuck Ebbert <cebbert at redhat.com>
 - Add missing ACPI patch.
 - Switch to upstream libata DMA disable code

linux-2.6-wireless-fixes.patch:

Index: linux-2.6-wireless-fixes.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-7/linux-2.6-wireless-fixes.patch,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- linux-2.6-wireless-fixes.patch	18 Oct 2007 14:31:15 -0000	1.2
+++ linux-2.6-wireless-fixes.patch	19 Oct 2007 17:56:09 -0000	1.3
@@ -1,6 +1,6 @@
 diff -up linux-2.6.23.noarch/net/ieee80211/ieee80211_crypt_tkip.c.orig linux-2.6.23.noarch/net/ieee80211/ieee80211_crypt_tkip.c
---- linux-2.6.23.noarch/net/ieee80211/ieee80211_crypt_tkip.c.orig	2007-10-18 10:29:09.000000000 -0400
-+++ linux-2.6.23.noarch/net/ieee80211/ieee80211_crypt_tkip.c	2007-10-18 10:29:15.000000000 -0400
+--- linux-2.6.23.noarch/net/ieee80211/ieee80211_crypt_tkip.c.orig	2007-10-19 13:47:49.000000000 -0400
++++ linux-2.6.23.noarch/net/ieee80211/ieee80211_crypt_tkip.c	2007-10-19 13:48:03.000000000 -0400
 @@ -584,7 +584,7 @@ static void michael_mic_hdr(struct sk_bu
  	if (stype & IEEE80211_STYPE_QOS_DATA) {
  		const struct ieee80211_hdr_3addrqos *qoshdr =
@@ -11,8 +11,8 @@
  		hdr[12] = 0;		/* priority */
  
 diff -up linux-2.6.23.noarch/net/mac80211/ieee80211_ioctl.c.orig linux-2.6.23.noarch/net/mac80211/ieee80211_ioctl.c
---- linux-2.6.23.noarch/net/mac80211/ieee80211_ioctl.c.orig	2007-10-18 10:29:09.000000000 -0400
-+++ linux-2.6.23.noarch/net/mac80211/ieee80211_ioctl.c	2007-10-18 10:29:15.000000000 -0400
+--- linux-2.6.23.noarch/net/mac80211/ieee80211_ioctl.c.orig	2007-10-19 13:47:49.000000000 -0400
++++ linux-2.6.23.noarch/net/mac80211/ieee80211_ioctl.c	2007-10-19 13:48:03.000000000 -0400
 @@ -1320,10 +1320,11 @@ static int ieee80211_ioctl_giwap(struct 
  
  static int ieee80211_ioctl_siwscan(struct net_device *dev,
@@ -42,8 +42,8 @@
  }
  
 diff -up linux-2.6.23.noarch/net/mac80211/ieee80211_sta.c.orig linux-2.6.23.noarch/net/mac80211/ieee80211_sta.c
---- linux-2.6.23.noarch/net/mac80211/ieee80211_sta.c.orig	2007-10-18 10:29:09.000000000 -0400
-+++ linux-2.6.23.noarch/net/mac80211/ieee80211_sta.c	2007-10-18 10:29:15.000000000 -0400
+--- linux-2.6.23.noarch/net/mac80211/ieee80211_sta.c.orig	2007-10-19 13:47:49.000000000 -0400
++++ linux-2.6.23.noarch/net/mac80211/ieee80211_sta.c	2007-10-19 13:48:03.000000000 -0400
 @@ -12,7 +12,6 @@
   */
  
@@ -438,9 +438,185 @@
  		printk(KERN_DEBUG "%s: Selected IBSS BSSID " MAC_FMT
  		       " based on configured SSID\n",
  		       dev->name, MAC_ARG(bssid));
+diff -up linux-2.6.23.noarch/drivers/net/wireless/ipw2100.h.orig linux-2.6.23.noarch/drivers/net/wireless/ipw2100.h
+--- linux-2.6.23.noarch/drivers/net/wireless/ipw2100.h.orig	2007-10-09 16:31:38.000000000 -0400
++++ linux-2.6.23.noarch/drivers/net/wireless/ipw2100.h	2007-10-19 13:48:03.000000000 -0400
+@@ -588,6 +588,10 @@ struct ipw2100_priv {
+ 	struct delayed_work wx_event_work;
+ 	struct delayed_work hang_check;
+ 	struct delayed_work rf_kill;
++	struct work_struct scan_event_now;
++	struct delayed_work scan_event_later;
++
++	int user_requested_scan;
+ 
+ 	u32 interrupts;
+ 	int tx_interrupts;
+diff -up linux-2.6.23.noarch/drivers/net/wireless/b43/main.c.orig linux-2.6.23.noarch/drivers/net/wireless/b43/main.c
+--- linux-2.6.23.noarch/drivers/net/wireless/b43/main.c.orig	2007-10-19 13:43:51.000000000 -0400
++++ linux-2.6.23.noarch/drivers/net/wireless/b43/main.c	2007-10-19 13:48:03.000000000 -0400
+@@ -48,7 +48,6 @@
+ #include "pio.h"
+ #include "sysfs.h"
+ #include "xmit.h"
+-#include "sysfs.h"
+ #include "lo.h"
+ #include "pcmcia.h"
+ 
+diff -up linux-2.6.23.noarch/drivers/net/wireless/zd1211rw/zd_usb.c.orig linux-2.6.23.noarch/drivers/net/wireless/zd1211rw/zd_usb.c
+--- linux-2.6.23.noarch/drivers/net/wireless/zd1211rw/zd_usb.c.orig	2007-10-19 13:43:50.000000000 -0400
++++ linux-2.6.23.noarch/drivers/net/wireless/zd1211rw/zd_usb.c	2007-10-19 13:48:03.000000000 -0400
+@@ -1044,14 +1044,17 @@ error:
+ static void disconnect(struct usb_interface *intf)
+ {
+ 	struct net_device *netdev = zd_intf_to_netdev(intf);
+-	struct zd_mac *mac = zd_netdev_mac(netdev);
+-	struct zd_usb *usb = &mac->chip.usb;
++	struct zd_mac *mac;
++	struct zd_usb *usb;
+ 
+ 	/* Either something really bad happened, or we're just dealing with
+ 	 * a DEVICE_INSTALLER. */
+ 	if (netdev == NULL)
+ 		return;
+ 
++	mac = zd_netdev_mac(netdev);
++	usb = &mac->chip.usb;
++
+ 	dev_dbg_f(zd_usb_dev(usb), "\n");
+ 
+ 	zd_netdev_disconnect(netdev);
+diff -up linux-2.6.23.noarch/drivers/net/wireless/rtl8187_dev.c.orig linux-2.6.23.noarch/drivers/net/wireless/rtl8187_dev.c
+--- linux-2.6.23.noarch/drivers/net/wireless/rtl8187_dev.c.orig	2007-10-19 13:43:50.000000000 -0400
++++ linux-2.6.23.noarch/drivers/net/wireless/rtl8187_dev.c	2007-10-19 13:48:03.000000000 -0400
+@@ -78,7 +78,8 @@ static int rtl8187_tx(struct ieee80211_h
+ 	struct rtl8187_tx_hdr *hdr;
+ 	struct rtl8187_tx_info *info;
+ 	struct urb *urb;
+-	u32 tmp;
++	__le16 rts_dur = 0;
++	u32 flags;
+ 
+ 	urb = usb_alloc_urb(0, GFP_ATOMIC);
+ 	if (!urb) {
+@@ -86,24 +87,24 @@ static int rtl8187_tx(struct ieee80211_h
+ 		return 0;
+ 	}
+ 
+-	hdr = (struct rtl8187_tx_hdr *)skb_push(skb, sizeof(*hdr));
+-	tmp = skb->len - sizeof(*hdr);
+-	tmp |= RTL8187_TX_FLAG_NO_ENCRYPT;
+-	tmp |= control->rts_cts_rate << 19;
+-	tmp |= control->tx_rate << 24;
+-	if (ieee80211_get_morefrag((struct ieee80211_hdr *)skb))
+-		tmp |= RTL8187_TX_FLAG_MORE_FRAG;
++	flags = skb->len;
++	flags |= RTL8187_TX_FLAG_NO_ENCRYPT;
++	flags |= control->rts_cts_rate << 19;
++	flags |= control->tx_rate << 24;
++	if (ieee80211_get_morefrag((struct ieee80211_hdr *)skb->data))
++		flags |= RTL8187_TX_FLAG_MORE_FRAG;
+ 	if (control->flags & IEEE80211_TXCTL_USE_RTS_CTS) {
+-		tmp |= RTL8187_TX_FLAG_RTS;
+-		hdr->rts_duration =
+-			ieee80211_rts_duration(dev, priv->if_id, skb->len, control);
++		flags |= RTL8187_TX_FLAG_RTS;
++		rts_dur = ieee80211_rts_duration(dev, priv->if_id, skb->len, control);
+ 	}
+ 	if (control->flags & IEEE80211_TXCTL_USE_CTS_PROTECT)
+-		tmp |= RTL8187_TX_FLAG_CTS;
+-	hdr->flags = cpu_to_le32(tmp);
++		flags |= RTL8187_TX_FLAG_CTS;
++
++	hdr = (struct rtl8187_tx_hdr *)skb_push(skb, sizeof(*hdr));
++	hdr->flags = cpu_to_le32(flags);
+ 	hdr->len = 0;
+-	tmp = control->retry_limit << 8;
+-	hdr->retry = cpu_to_le32(tmp);
++	hdr->rts_duration = rts_dur;
++	hdr->retry = cpu_to_le32(control->retry_limit << 8);
+ 
+ 	info = (struct rtl8187_tx_info *)skb->cb;
+ 	info->control = kmemdup(control, sizeof(*control), GFP_ATOMIC);
+diff -up linux-2.6.23.noarch/drivers/net/wireless/ipw2100.c.orig linux-2.6.23.noarch/drivers/net/wireless/ipw2100.c
+--- linux-2.6.23.noarch/drivers/net/wireless/ipw2100.c.orig	2007-10-09 16:31:38.000000000 -0400
++++ linux-2.6.23.noarch/drivers/net/wireless/ipw2100.c	2007-10-19 13:48:03.000000000 -0400
+@@ -2102,12 +2102,46 @@ static void isr_indicate_rf_kill(struct 
+ 	queue_delayed_work(priv->workqueue, &priv->rf_kill, round_jiffies(HZ));
+ }
+ 
++static void send_scan_event(void *data)
++{
++	struct ipw2100_priv *priv = data;
++	union iwreq_data wrqu;
++
++	wrqu.data.length = 0;
++	wrqu.data.flags = 0;
++	wireless_send_event(priv->net_dev, SIOCGIWSCAN, &wrqu, NULL);
++}
++
++static void ipw2100_scan_event_later(struct work_struct *work)
++{
++	send_scan_event(container_of(work, struct ipw2100_priv,
++					scan_event_later.work));
++}
++
++static void ipw2100_scan_event_now(struct work_struct *work)
++{
++	send_scan_event(container_of(work, struct ipw2100_priv,
++					scan_event_now));
++}
++
+ static void isr_scan_complete(struct ipw2100_priv *priv, u32 status)
+ {
+ 	IPW_DEBUG_SCAN("scan complete\n");
+ 	/* Age the scan results... */
+ 	priv->ieee->scans++;
+ 	priv->status &= ~STATUS_SCANNING;
++
++	/* Only userspace-requested scan completion events go out immediately */
++	if (!priv->user_requested_scan) {
++		if (!delayed_work_pending(&priv->scan_event_later))
++			queue_delayed_work(priv->workqueue,
++					&priv->scan_event_later,
++					round_jiffies(msecs_to_jiffies(4000)));
++	} else {
++		priv->user_requested_scan = 0;
++		cancel_delayed_work(&priv->scan_event_later);
++		queue_work(priv->workqueue, &priv->scan_event_now);
++	}
+ }
+ 
+ #ifdef CONFIG_IPW2100_DEBUG
+@@ -4376,6 +4410,7 @@ static void ipw2100_kill_workqueue(struc
+ 		cancel_delayed_work(&priv->wx_event_work);
+ 		cancel_delayed_work(&priv->hang_check);
+ 		cancel_delayed_work(&priv->rf_kill);
++		cancel_delayed_work(&priv->scan_event_later);
+ 		destroy_workqueue(priv->workqueue);
+ 		priv->workqueue = NULL;
+ 	}
+@@ -6118,6 +6153,8 @@ static struct net_device *ipw2100_alloc_
+ 	INIT_DELAYED_WORK(&priv->wx_event_work, ipw2100_wx_event_work);
+ 	INIT_DELAYED_WORK(&priv->hang_check, ipw2100_hang_check);
+ 	INIT_DELAYED_WORK(&priv->rf_kill, ipw2100_rf_kill);
++	INIT_WORK(&priv->scan_event_now, ipw2100_scan_event_now);
++	INIT_DELAYED_WORK(&priv->scan_event_later, ipw2100_scan_event_later);
+ 
+ 	tasklet_init(&priv->irq_tasklet, (void (*)(unsigned long))
+ 		     ipw2100_irq_tasklet, (unsigned long)priv);
+@@ -7427,6 +7464,8 @@ static int ipw2100_wx_set_scan(struct ne
+ 	}
+ 
+ 	IPW_DEBUG_WX("Initiating scan...\n");
++
++	priv->user_requested_scan = 1;
+ 	if (ipw2100_set_scan_options(priv) || ipw2100_start_scan(priv)) {
+ 		IPW_DEBUG_WX("Start scan failed.\n");
+ 
 diff -up linux-2.6.23.noarch/drivers/net/wireless/zd1201.c.orig linux-2.6.23.noarch/drivers/net/wireless/zd1201.c
---- linux-2.6.23.noarch/drivers/net/wireless/zd1201.c.orig	2007-10-09 16:31:38.000000000 -0400
-+++ linux-2.6.23.noarch/drivers/net/wireless/zd1201.c	2007-10-18 10:29:28.000000000 -0400
+--- linux-2.6.23.noarch/drivers/net/wireless/zd1201.c.orig	2007-10-19 13:47:49.000000000 -0400
++++ linux-2.6.23.noarch/drivers/net/wireless/zd1201.c	2007-10-19 13:48:03.000000000 -0400
 @@ -327,8 +327,8 @@ static void zd1201_usbrx(struct urb *urb
  			memcpy(skb_put(skb, 6), &data[datalen-8], 6);
  			memcpy(skb_put(skb, 2), &data[datalen-24], 2);
@@ -461,3 +637,330 @@
  		zd->stats.rx_packets++;
  		zd->stats.rx_bytes += skb->len;
  		netif_rx(skb);
+diff -up linux-2.6.23.noarch/drivers/net/wireless/iwlwifi/iwl-4965-rs.c.orig linux-2.6.23.noarch/drivers/net/wireless/iwlwifi/iwl-4965-rs.c
+--- linux-2.6.23.noarch/drivers/net/wireless/iwlwifi/iwl-4965-rs.c.orig	2007-10-19 13:43:50.000000000 -0400
++++ linux-2.6.23.noarch/drivers/net/wireless/iwlwifi/iwl-4965-rs.c	2007-10-19 13:48:03.000000000 -0400
+@@ -36,9 +36,6 @@
+ 
+ #include <linux/workqueue.h>
+ 
+-#include <net/mac80211.h>
+-#include <linux/wireless.h>
+-
+ #define IWL 4965
+ 
+ #include "../net/mac80211/ieee80211_rate.h"
+@@ -2021,12 +2018,18 @@ static int open_file_generic(struct inod
+ static void rs_dbgfs_set_mcs(struct iwl_rate_scale_priv *rs_priv,
+ 				struct iwl_rate *mcs, int index)
+ {
+-	const u32 cck_rate = 0x820A;
++	u32 base_rate;
++
++	if (rs_priv->phymode == (u8) MODE_IEEE80211A)
++		base_rate = 0x800D;
++	else
++		base_rate = 0x820A;
++
+ 	if (rs_priv->dbg_fixed.rate_n_flags) {
+ 		if (index < 12)
+ 			mcs->rate_n_flags = rs_priv->dbg_fixed.rate_n_flags;
+ 		else
+-			mcs->rate_n_flags = cck_rate;
++			mcs->rate_n_flags = base_rate;
+ 		IWL_DEBUG_RATE("Fixed rate ON\n");
+ 		return;
+ 	}
+diff -up linux-2.6.23.noarch/drivers/net/wireless/iwlwifi/iwl-3945.c.orig linux-2.6.23.noarch/drivers/net/wireless/iwlwifi/iwl-3945.c
+--- linux-2.6.23.noarch/drivers/net/wireless/iwlwifi/iwl-3945.c.orig	2007-10-19 13:43:50.000000000 -0400
++++ linux-2.6.23.noarch/drivers/net/wireless/iwlwifi/iwl-3945.c	2007-10-19 13:48:03.000000000 -0400
+@@ -38,7 +38,6 @@
+ #include <net/mac80211.h>
+ 
+ #include <linux/etherdevice.h>
+-#include <linux/delay.h>
+ 
+ #define IWL 3945
+ 
+diff -up linux-2.6.23.noarch/drivers/net/wireless/iwlwifi/iwl4965-base.c.orig linux-2.6.23.noarch/drivers/net/wireless/iwlwifi/iwl4965-base.c
+--- linux-2.6.23.noarch/drivers/net/wireless/iwlwifi/iwl4965-base.c.orig	2007-10-19 13:43:50.000000000 -0400
++++ linux-2.6.23.noarch/drivers/net/wireless/iwlwifi/iwl4965-base.c	2007-10-19 13:48:03.000000000 -0400
+@@ -48,8 +48,6 @@
+ #include <linux/netdevice.h>
+ #include <linux/wireless.h>
+ #include <linux/firmware.h>
+-#include <linux/skbuff.h>
+-#include <linux/netdevice.h>
+ #include <linux/etherdevice.h>
+ #include <linux/if_arp.h>
+ 
+@@ -1800,21 +1798,22 @@ static void iwl_unset_hw_setting(struct 
+  * return : set the bit for each supported rate insert in ie
+  */
+ static u16 iwl_supported_rate_to_ie(u8 *ie, u16 supported_rate,
+-				    u16 basic_rate, int max_count)
++				    u16 basic_rate, int *left)
+ {
+ 	u16 ret_rates = 0, bit;
+ 	int i;
+-	u8 *rates;
+-
+-	rates = &(ie[1]);
++	u8 *cnt = ie;
++	u8 *rates = ie + 1;
+ 
+ 	for (bit = 1, i = 0; i < IWL_RATE_COUNT; i++, bit <<= 1) {
+ 		if (bit & supported_rate) {
+ 			ret_rates |= bit;
+-			rates[*ie] = iwl_rates[i].ieee |
+-			    ((bit & basic_rate) ? 0x80 : 0x00);
+-			*ie = *ie + 1;
+-			if (*ie >= max_count)
++			rates[*cnt] = iwl_rates[i].ieee |
++				((bit & basic_rate) ? 0x80 : 0x00);
++			(*cnt)++;
++			(*left)--;
++			if ((*left <= 0) ||
++			    (*cnt >= IWL_SUPPORTED_RATES_IE_LEN))
+ 				break;
+ 		}
+ 	}
+@@ -1837,7 +1836,7 @@ static u16 iwl_fill_probe_req(struct iwl
+ {
+ 	int len = 0;
+ 	u8 *pos = NULL;
+-	u16 ret_rates;
++	u16 active_rates, ret_rates, cck_rates;
+ 
+ 	/* Make sure there is enough space for the probe request,
+ 	 * two mandatory IEs and the data */
+@@ -1882,19 +1881,27 @@ static u16 iwl_fill_probe_req(struct iwl
+ 	left -= 2;
+ 	if (left < 0)
+ 		return 0;
++
+ 	/* ... fill it in... */
+ 	*pos++ = WLAN_EID_SUPP_RATES;
+ 	*pos = 0;
+-	ret_rates = priv->active_rate = priv->rates_mask;
++
++	priv->active_rate = priv->rates_mask;
++	active_rates = priv->active_rate;
+ 	priv->active_rate_basic = priv->rates_mask & IWL_BASIC_RATES_MASK;
+ 
+-	iwl_supported_rate_to_ie(pos, priv->active_rate,
+-				 priv->active_rate_basic, left);
++	cck_rates = IWL_CCK_RATES_MASK & active_rates;
++	ret_rates = iwl_supported_rate_to_ie(pos, cck_rates,
++			priv->active_rate_basic, &left);
++	active_rates &= ~ret_rates;
++
++	ret_rates = iwl_supported_rate_to_ie(pos, active_rates,
++				 priv->active_rate_basic, &left);
++	active_rates &= ~ret_rates;
++
+ 	len += 2 + *pos;
+ 	pos += (*pos) + 1;
+-	ret_rates = ~ret_rates & priv->active_rate;
+-
+-	if (ret_rates == 0)
++	if (active_rates == 0)
+ 		goto fill_end;
+ 
+ 	/* fill in supported extended rate */
+@@ -1905,7 +1912,8 @@ static u16 iwl_fill_probe_req(struct iwl
+ 	/* ... fill it in... */
+ 	*pos++ = WLAN_EID_EXT_SUPP_RATES;
+ 	*pos = 0;
+-	iwl_supported_rate_to_ie(pos, ret_rates, priv->active_rate_basic, left);
++	iwl_supported_rate_to_ie(pos, active_rates,
++				 priv->active_rate_basic, &left);
+ 	if (*pos > 0)
+ 		len += 2 + *pos;
+ 
+@@ -4493,13 +4501,13 @@ static u8 ratio2dB[100] = {
+  * Conversion assumes that levels are voltages (20*log), not powers (10*log). */
+ int iwl_calc_db_from_ratio(int sig_ratio)
+ {
+-	/* Anything above 1000:1 just report as 60 dB */
+-	if (sig_ratio > 1000)
++	/* 1000:1 or higher just report as 60 dB */
++	if (sig_ratio >= 1000)
+ 		return 60;
+ 
+-	/* Above 100:1, divide by 10 and use table,
++	/* 100:1 or higher, divide by 10 and use table,
+ 	 *   add 20 dB to make up for divide by 10 */
+-	if (sig_ratio > 100)
++	if (sig_ratio >= 100)
+ 		return (20 + (int)ratio2dB[sig_ratio/10]);
+ 
+ 	/* We shouldn't see this */
+diff -up linux-2.6.23.noarch/drivers/net/wireless/iwlwifi/iwl-4965.c.orig linux-2.6.23.noarch/drivers/net/wireless/iwlwifi/iwl-4965.c
+--- linux-2.6.23.noarch/drivers/net/wireless/iwlwifi/iwl-4965.c.orig	2007-10-19 13:43:50.000000000 -0400
++++ linux-2.6.23.noarch/drivers/net/wireless/iwlwifi/iwl-4965.c	2007-10-19 13:48:03.000000000 -0400
+@@ -35,9 +35,7 @@
+ #include <linux/netdevice.h>
+ #include <linux/wireless.h>
+ #include <net/mac80211.h>
+-#include <linux/netdevice.h>
+ #include <linux/etherdevice.h>
+-#include <linux/delay.h>
+ 
+ #define IWL 4965
+ 
+diff -up linux-2.6.23.noarch/drivers/net/wireless/iwlwifi/iwlwifi.h.orig linux-2.6.23.noarch/drivers/net/wireless/iwlwifi/iwlwifi.h
+--- linux-2.6.23.noarch/drivers/net/wireless/iwlwifi/iwlwifi.h.orig	2007-10-19 13:43:50.000000000 -0400
++++ linux-2.6.23.noarch/drivers/net/wireless/iwlwifi/iwlwifi.h	2007-10-19 13:48:03.000000000 -0400
+@@ -39,18 +39,13 @@ struct iwl_priv;
+ /* Hardware specific file defines the PCI IDs table for that hardware module */
+ extern struct pci_device_id iwl_hw_card_ids[];
+ 
++#include "iwl-hw.h"
+ #if IWL == 3945
+-
+ #define DRV_NAME	"iwl3945"
+-#include "iwl-hw.h"
+ #include "iwl-3945-hw.h"
+-
+ #elif IWL == 4965
+-
+ #define DRV_NAME        "iwl4965"
+-#include "iwl-hw.h"
+ #include "iwl-4965-hw.h"
+-
+ #endif
+ 
+ #include "iwl-prph.h"
+diff -up linux-2.6.23.noarch/drivers/net/wireless/iwlwifi/iwl3945-base.c.orig linux-2.6.23.noarch/drivers/net/wireless/iwlwifi/iwl3945-base.c
+--- linux-2.6.23.noarch/drivers/net/wireless/iwlwifi/iwl3945-base.c.orig	2007-10-19 13:43:50.000000000 -0400
++++ linux-2.6.23.noarch/drivers/net/wireless/iwlwifi/iwl3945-base.c	2007-10-19 13:48:03.000000000 -0400
+@@ -48,8 +48,6 @@
+ #include <linux/netdevice.h>
+ #include <linux/wireless.h>
+ #include <linux/firmware.h>
+-#include <linux/skbuff.h>
+-#include <linux/netdevice.h>
+ #include <linux/etherdevice.h>
+ #include <linux/if_arp.h>
+ 
+@@ -1747,21 +1745,22 @@ static void iwl_unset_hw_setting(struct 
+  * return : set the bit for each supported rate insert in ie
+  */
+ static u16 iwl_supported_rate_to_ie(u8 *ie, u16 supported_rate,
+-				    u16 basic_rate, int max_count)
++				    u16 basic_rate, int *left)
+ {
+ 	u16 ret_rates = 0, bit;
+ 	int i;
+-	u8 *rates;
+-
+-	rates = &(ie[1]);
++	u8 *cnt = ie;
++	u8 *rates = ie + 1;
+ 
+ 	for (bit = 1, i = 0; i < IWL_RATE_COUNT; i++, bit <<= 1) {
+ 		if (bit & supported_rate) {
+ 			ret_rates |= bit;
+-			rates[*ie] = iwl_rates[i].ieee |
+-			    ((bit & basic_rate) ? 0x80 : 0x00);
+-			*ie = *ie + 1;
+-			if (*ie >= max_count)
++			rates[*cnt] = iwl_rates[i].ieee |
++				((bit & basic_rate) ? 0x80 : 0x00);
++			(*cnt)++;
++			(*left)--;
++			if ((*left <= 0) ||
++			    (*cnt >= IWL_SUPPORTED_RATES_IE_LEN))
+ 				break;
+ 		}
+ 	}
+@@ -1778,7 +1777,7 @@ static u16 iwl_fill_probe_req(struct iwl
+ {
+ 	int len = 0;
+ 	u8 *pos = NULL;
+-	u16 ret_rates;
++	u16 active_rates, ret_rates, cck_rates;
+ 
+ 	/* Make sure there is enough space for the probe request,
+ 	 * two mandatory IEs and the data */
+@@ -1823,19 +1822,27 @@ static u16 iwl_fill_probe_req(struct iwl
+ 	left -= 2;
+ 	if (left < 0)
+ 		return 0;
++
+ 	/* ... fill it in... */
+ 	*pos++ = WLAN_EID_SUPP_RATES;
+ 	*pos = 0;
+-	ret_rates = priv->active_rate = priv->rates_mask;
++
++	priv->active_rate = priv->rates_mask;
++	active_rates = priv->active_rate;
+ 	priv->active_rate_basic = priv->rates_mask & IWL_BASIC_RATES_MASK;
+ 
+-	iwl_supported_rate_to_ie(pos, priv->active_rate,
+-				 priv->active_rate_basic, left);
++	cck_rates = IWL_CCK_RATES_MASK & active_rates;
++	ret_rates = iwl_supported_rate_to_ie(pos, cck_rates,
++			priv->active_rate_basic, &left);
++	active_rates &= ~ret_rates;
++
++	ret_rates = iwl_supported_rate_to_ie(pos, active_rates,
++				 priv->active_rate_basic, &left);
++	active_rates &= ~ret_rates;
++
+ 	len += 2 + *pos;
+ 	pos += (*pos) + 1;
+-	ret_rates = ~ret_rates & priv->active_rate;
+-
+-	if (ret_rates == 0)
++	if (active_rates == 0)
+ 		goto fill_end;
+ 
+ 	/* fill in supported extended rate */
+@@ -1846,7 +1853,8 @@ static u16 iwl_fill_probe_req(struct iwl
+ 	/* ... fill it in... */
+ 	*pos++ = WLAN_EID_EXT_SUPP_RATES;
+ 	*pos = 0;
+-	iwl_supported_rate_to_ie(pos, ret_rates, priv->active_rate_basic, left);
++	iwl_supported_rate_to_ie(pos, active_rates,
++				 priv->active_rate_basic, &left);
+ 	if (*pos > 0)
+ 		len += 2 + *pos;
+ 
+diff -up linux-2.6.23.noarch/drivers/net/wireless/iwlwifi/iwl-3945-rs.c.orig linux-2.6.23.noarch/drivers/net/wireless/iwlwifi/iwl-3945-rs.c
+--- linux-2.6.23.noarch/drivers/net/wireless/iwlwifi/iwl-3945-rs.c.orig	2007-10-19 13:43:50.000000000 -0400
++++ linux-2.6.23.noarch/drivers/net/wireless/iwlwifi/iwl-3945-rs.c	2007-10-19 13:48:03.000000000 -0400
+@@ -37,9 +37,6 @@
+ 
+ #include <linux/workqueue.h>
+ 
+-#include <net/mac80211.h>
+-#include <linux/wireless.h>
+-
+ #define IWL 3945
+ 
+ #include "../net/mac80211/ieee80211_rate.h"
+diff -up linux-2.6.23.noarch/drivers/net/wireless/rt2x00/rt2x00dev.c.orig linux-2.6.23.noarch/drivers/net/wireless/rt2x00/rt2x00dev.c
+--- linux-2.6.23.noarch/drivers/net/wireless/rt2x00/rt2x00dev.c.orig	2007-10-19 13:43:50.000000000 -0400
++++ linux-2.6.23.noarch/drivers/net/wireless/rt2x00/rt2x00dev.c	2007-10-19 13:48:03.000000000 -0400
+@@ -505,7 +505,7 @@ void rt2x00lib_write_tx_desc(struct rt2x
+ 			/*
+ 			 * Check if we need to set the Length Extension
+ 			 */
+-			if (bitrate == 110 && residual <= 3)
++			if (bitrate == 110 && residual <= 30)
+ 				desc.service |= 0x80;
+ 		}
+ 
+diff -up linux-2.6.23.noarch/drivers/net/wireless/rt2x00/rt73usb.c.orig linux-2.6.23.noarch/drivers/net/wireless/rt2x00/rt73usb.c
+--- linux-2.6.23.noarch/drivers/net/wireless/rt2x00/rt73usb.c.orig	2007-10-19 13:43:50.000000000 -0400
++++ linux-2.6.23.noarch/drivers/net/wireless/rt2x00/rt73usb.c	2007-10-19 13:48:03.000000000 -0400
+@@ -2043,6 +2043,7 @@ static struct usb_device_id rt73usb_devi
+ 	{ USB_DEVICE(0x050d, 0x7050), USB_DEVICE_DATA(&rt73usb_ops) },
+ 	{ USB_DEVICE(0x050d, 0x705a), USB_DEVICE_DATA(&rt73usb_ops) },
+ 	{ USB_DEVICE(0x050d, 0x905b), USB_DEVICE_DATA(&rt73usb_ops) },
++	{ USB_DEVICE(0x050d, 0x905c), USB_DEVICE_DATA(&rt73usb_ops) },
+ 	/* Billionton */
+ 	{ USB_DEVICE(0x1631, 0xc019), USB_DEVICE_DATA(&rt73usb_ops) },
+ 	/* Buffalo */




More information about the fedora-extras-commits mailing list