rpms/kernel/F-8 linux-2.6-sata-eeepc-faster.patch, NONE, 1.1 linux-2.6-wireless-fixups.patch, NONE, 1.1 kernel.spec, 1.441, 1.442 linux-2.6-acpi-eeepc-hotkey.patch, 1.2, 1.3 linux-2.6-at76.patch, 1.8, 1.9 linux-2.6-lirc.patch, 1.4, 1.5 linux-2.6-uvcvideo.patch, 1.1, 1.2 linux-2.6-wireless-pending.patch, 1.43, 1.44 linux-2.6-wireless.patch, 1.36, 1.37 linux-2.6-acpi-disable-stray-interrupt-1.patch, 1.1, NONE linux-2.6-acpi-disable-stray-interrupt-2.patch, 1.1, NONE linux-2.6-acpi-video-backlight-rationalize.patch, 1.2, NONE linux-2.6-acpi_ec_early_init_fix.patch, 1.3, NONE linux-2.6-ath5k-use-soft-wep.patch, 1.1, NONE linux-2.6-bcm43xx-pci-neuter.patch, 1.2, NONE linux-2.6-cfg80211-extras.patch, 1.4, NONE linux-2.6-ps3_gelic_wireless.patch, 1.6, NONE linux-2.6-rndis_host-fixes.patch, 1.1, NONE linux-2.6-rndis_wlan.patch, 1.5, NONE linux-2.6-wireless-pending-fixups.patch, 1.4, NONE linux-2.6-wireless-pending-too.patch, 1.10, NONE linux-2.6-zd1211rw-module-alias.patch, 1.1, NONE

Chuck Ebbert (cebbert) fedora-extras-commits at redhat.com
Wed May 21 21:23:40 UTC 2008


Author: cebbert

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

Modified Files:
	kernel.spec linux-2.6-acpi-eeepc-hotkey.patch 
	linux-2.6-at76.patch linux-2.6-lirc.patch 
	linux-2.6-uvcvideo.patch linux-2.6-wireless-pending.patch 
	linux-2.6-wireless.patch 
Added Files:
	linux-2.6-sata-eeepc-faster.patch 
	linux-2.6-wireless-fixups.patch 
Removed Files:
	linux-2.6-acpi-disable-stray-interrupt-1.patch 
	linux-2.6-acpi-disable-stray-interrupt-2.patch 
	linux-2.6-acpi-video-backlight-rationalize.patch 
	linux-2.6-acpi_ec_early_init_fix.patch 
	linux-2.6-ath5k-use-soft-wep.patch 
	linux-2.6-bcm43xx-pci-neuter.patch 
	linux-2.6-cfg80211-extras.patch 
	linux-2.6-ps3_gelic_wireless.patch 
	linux-2.6-rndis_host-fixes.patch linux-2.6-rndis_wlan.patch 
	linux-2.6-wireless-pending-fixups.patch 
	linux-2.6-wireless-pending-too.patch 
	linux-2.6-zd1211rw-module-alias.patch 
Log Message:
* Wed May 21 2008 Chuck Ebbert <cebbert at redhat.com> 2.6.25.4-2
- eeepc, wireless, acpi, lirc, and uvcvideo updates for 2.6.25.


linux-2.6-sata-eeepc-faster.patch:

--- NEW FILE linux-2.6-sata-eeepc-faster.patch ---
The Asus Eee PC prints this during bootup..

ata2.00: limited to UDMA/33 due to 40-wire cable
Which is unfortunate, as it has..
ata2.00: ATA-4: SILICONMOTION SM223AC, , max UDMA/66

I believe there actually is no cable, and the flash is directly
connected to the controller.

[root at eee ~]# hdparm -t /dev/sda

/dev/sda:
 Timing buffered disk reads:   64 MB in  3.08 seconds =  20.76 MB/sec

With the patch below it returns..

TBD

Signed-off-by: Dave Jones <davej at redhat.com>

--- linux-2.6.24.noarch/drivers/ata/ata_piix.c~	2008-03-31 23:43:05.000000000 -0400
+++ linux-2.6.24.noarch/drivers/ata/ata_piix.c	2008-03-31 23:44:34.000000000 -0400
@@ -716,6 +716,7 @@ struct ich_laptop {
 
 static const struct ich_laptop ich_laptop[] = {
 	/* devid, subvendor, subdev */
+	{ 0x2653, 0x1043, 0x82d8 },	/* ICH6M on Asus Eee PC */
 	{ 0x27DF, 0x0005, 0x0280 },	/* ICH7 on Acer 5602WLMi */
 	{ 0x27DF, 0x1025, 0x0102 },	/* ICH7 on Acer 5602aWLMi */
 	{ 0x27DF, 0x1025, 0x0110 },	/* ICH7 on Acer 3682WLMi */

linux-2.6-wireless-fixups.patch:

--- NEW FILE linux-2.6-wireless-fixups.patch ---
diff -up linux-2.6.25.noarch/net/mac80211/iface.c.orig linux-2.6.25.noarch/net/mac80211/iface.c
--- linux-2.6.25.noarch/net/mac80211/iface.c.orig	2008-05-19 17:31:02.000000000 -0400
+++ linux-2.6.25.noarch/net/mac80211/iface.c	2008-05-19 17:31:10.000000000 -0400
@@ -53,15 +53,6 @@ int ieee80211_if_add(struct net_device *
 	if (!ndev)
 		return -ENOMEM;
 
-	ndev->needed_headroom = local->tx_headroom +
-				4*6 /* four MAC addresses */
-				+ 2 + 2 + 2 + 2 /* ctl, dur, seq, qos */
-				+ 6 /* mesh */
-				+ 8 /* rfc1042/bridge tunnel */
-				- ETH_HLEN /* ethernet hard_header_len */
-				+ IEEE80211_ENCRYPT_HEADROOM;
-	ndev->needed_tailroom = IEEE80211_ENCRYPT_TAILROOM;
-
 	ret = dev_alloc_name(ndev, ndev->name);
 	if (ret < 0)
 		goto fail;
diff -up linux-2.6.25.noarch/net/mac80211/tkip.c.orig linux-2.6.25.noarch/net/mac80211/tkip.c
--- linux-2.6.25.noarch/net/mac80211/tkip.c.orig	2008-05-19 17:29:38.000000000 -0400
+++ linux-2.6.25.noarch/net/mac80211/tkip.c	2008-05-19 17:40:15.000000000 -0400
@@ -8,22 +8,23 @@
  */
 
 #include <linux/kernel.h>
-#include <linux/bitops.h>
 #include <linux/types.h>
 #include <linux/netdevice.h>
-#include <asm/unaligned.h>
 
 #include <net/mac80211.h>
 #include "key.h"
 #include "tkip.h"
 #include "wep.h"
 
+
+/* TKIP key mixing functions */
+
+
 #define PHASE1_LOOP_COUNT 8
 
-/*
- * 2-byte by 2-byte subset of the full AES S-box table; second part of this
- * table is identical to first part but byte-swapped
- */
+
+/* 2-byte by 2-byte subset of the full AES S-box table; second part of this
+ * table is identical to first part but byte-swapped */
 static const u16 tkip_sbox[256] =
 {
 	0xC6A5, 0xF884, 0xEE99, 0xF68D, 0xFF0D, 0xD6BD, 0xDEB1, 0x9154,
@@ -60,13 +61,53 @@ static const u16 tkip_sbox[256] =
 	0x82C3, 0x29B0, 0x5A77, 0x1E11, 0x7BCB, 0xA8FC, 0x6DD6, 0x2C3A,
 };
 
-static u16 tkipS(u16 val)
+
+static inline u16 Mk16(u8 x, u8 y)
+{
+	return ((u16) x << 8) | (u16) y;
+}
+
+
+static inline u8 Hi8(u16 v)
+{
+	return v >> 8;
+}
+
+
+static inline u8 Lo8(u16 v)
+{
+	return v & 0xff;
+}
+
+
+static inline u16 Hi16(u32 v)
+{
+	return v >> 16;
+}
+
+
+static inline u16 Lo16(u32 v)
+{
+	return v & 0xffff;
+}
+
+
+static inline u16 RotR1(u16 v)
+{
+	return (v >> 1) | ((v & 0x0001) << 15);
+}
+
+
+static inline u16 tkip_S(u16 val)
 {
-	return tkip_sbox[val & 0xff] ^ swab16(tkip_sbox[val >> 8]);
+	u16 a = tkip_sbox[Hi8(val)];
+
+	return tkip_sbox[Lo8(val)] ^ Hi8(a) ^ (Lo8(a) << 8);
 }
 
-/*
- * P1K := Phase1(TA, TK, TSC)
+
+
+/* P1K := Phase1(TA, TK, TSC)
  * TA = transmitter address (48 bits)
  * TK = dot11DefaultKeyValue or dot11KeyMappingValue (128 bits)
  * TSC = TKIP sequence counter (48 bits, only 32 msb bits used)
@@ -77,22 +118,23 @@ static void tkip_mixing_phase1(const u8 
 {
 	int i, j;
 
-	p1k[0] = tsc_IV32 & 0xFFFF;
-	p1k[1] = tsc_IV32 >> 16;
-	p1k[2] = get_unaligned_le16(ta + 0);
-	p1k[3] = get_unaligned_le16(ta + 2);
-	p1k[4] = get_unaligned_le16(ta + 4);
+	p1k[0] = Lo16(tsc_IV32);
+	p1k[1] = Hi16(tsc_IV32);
+	p1k[2] = Mk16(ta[1], ta[0]);
+	p1k[3] = Mk16(ta[3], ta[2]);
+	p1k[4] = Mk16(ta[5], ta[4]);
 
 	for (i = 0; i < PHASE1_LOOP_COUNT; i++) {
 		j = 2 * (i & 1);
-		p1k[0] += tkipS(p1k[4] ^ get_unaligned_le16(tk + 0 + j));
-		p1k[1] += tkipS(p1k[0] ^ get_unaligned_le16(tk + 4 + j));
-		p1k[2] += tkipS(p1k[1] ^ get_unaligned_le16(tk + 8 + j));
-		p1k[3] += tkipS(p1k[2] ^ get_unaligned_le16(tk + 12 + j));
-		p1k[4] += tkipS(p1k[3] ^ get_unaligned_le16(tk + 0 + j)) + i;
+		p1k[0] += tkip_S(p1k[4] ^ Mk16(tk[ 1 + j], tk[ 0 + j]));
+		p1k[1] += tkip_S(p1k[0] ^ Mk16(tk[ 5 + j], tk[ 4 + j]));
+		p1k[2] += tkip_S(p1k[1] ^ Mk16(tk[ 9 + j], tk[ 8 + j]));
+		p1k[3] += tkip_S(p1k[2] ^ Mk16(tk[13 + j], tk[12 + j]));
+		p1k[4] += tkip_S(p1k[3] ^ Mk16(tk[ 1 + j], tk[ 0 + j])) + i;
 	}
 }
 
+
 static void tkip_mixing_phase2(const u16 *p1k, const u8 *tk, u16 tsc_IV16,
 			       u8 *rc4key)
 {
@@ -106,29 +148,31 @@ static void tkip_mixing_phase2(const u16
 	ppk[4] = p1k[4];
 	ppk[5] = p1k[4] + tsc_IV16;
 
-	ppk[0] += tkipS(ppk[5] ^ get_unaligned_le16(tk + 0));
-	ppk[1] += tkipS(ppk[0] ^ get_unaligned_le16(tk + 2));
-	ppk[2] += tkipS(ppk[1] ^ get_unaligned_le16(tk + 4));
-	ppk[3] += tkipS(ppk[2] ^ get_unaligned_le16(tk + 6));
-	ppk[4] += tkipS(ppk[3] ^ get_unaligned_le16(tk + 8));
-	ppk[5] += tkipS(ppk[4] ^ get_unaligned_le16(tk + 10));
-	ppk[0] += ror16(ppk[5] ^ get_unaligned_le16(tk + 12), 1);
-	ppk[1] += ror16(ppk[0] ^ get_unaligned_le16(tk + 14), 1);
-	ppk[2] += ror16(ppk[1], 1);
-	ppk[3] += ror16(ppk[2], 1);
-	ppk[4] += ror16(ppk[3], 1);
-	ppk[5] += ror16(ppk[4], 1);
-
-	rc4key[0] = tsc_IV16 >> 8;
-	rc4key[1] = ((tsc_IV16 >> 8) | 0x20) & 0x7f;
-	rc4key[2] = tsc_IV16 & 0xFF;
-	rc4key[3] = ((ppk[5] ^ get_unaligned_le16(tk)) >> 1) & 0xFF;
-
-	rc4key += 4;
-	for (i = 0; i < 6; i++)
-		put_unaligned_le16(ppk[i], rc4key + 2 * i);
+	ppk[0] += tkip_S(ppk[5] ^ Mk16(tk[ 1], tk[ 0]));
+	ppk[1] += tkip_S(ppk[0] ^ Mk16(tk[ 3], tk[ 2]));
+	ppk[2] += tkip_S(ppk[1] ^ Mk16(tk[ 5], tk[ 4]));
+	ppk[3] += tkip_S(ppk[2] ^ Mk16(tk[ 7], tk[ 6]));
+	ppk[4] += tkip_S(ppk[3] ^ Mk16(tk[ 9], tk[ 8]));
+	ppk[5] += tkip_S(ppk[4] ^ Mk16(tk[11], tk[10]));
+	ppk[0] +=  RotR1(ppk[5] ^ Mk16(tk[13], tk[12]));
+	ppk[1] +=  RotR1(ppk[0] ^ Mk16(tk[15], tk[14]));
+	ppk[2] +=  RotR1(ppk[1]);
+	ppk[3] +=  RotR1(ppk[2]);
+	ppk[4] +=  RotR1(ppk[3]);
+	ppk[5] +=  RotR1(ppk[4]);
+
+	rc4key[0] = Hi8(tsc_IV16);
+	rc4key[1] = (Hi8(tsc_IV16) | 0x20) & 0x7f;
+	rc4key[2] = Lo8(tsc_IV16);
+	rc4key[3] = Lo8((ppk[5] ^ Mk16(tk[1], tk[0])) >> 1);
+
+	for (i = 0; i < 6; i++) {
+		rc4key[4 + 2 * i] = Lo8(ppk[i]);
+		rc4key[5 + 2 * i] = Hi8(ppk[i]);
+	}
 }
 
+
 /* Add TKIP IV and Ext. IV at @pos. @iv0, @iv1, and @iv2 are the first octets
  * of the IV. Returns pointer to the octet following IVs (i.e., beginning of
  * the packet payload). */
@@ -139,10 +183,14 @@ u8 * ieee80211_tkip_add_iv(u8 *pos, stru
 	*pos++ = iv1;
 	*pos++ = iv2;
 	*pos++ = (key->conf.keyidx << 6) | (1 << 5) /* Ext IV */;
-	put_unaligned_le32(key->u.tkip.iv32, pos);
-	return pos + 4;
+	*pos++ = key->u.tkip.iv32 & 0xff;
+	*pos++ = (key->u.tkip.iv32 >> 8) & 0xff;
+	*pos++ = (key->u.tkip.iv32 >> 16) & 0xff;
+	*pos++ = (key->u.tkip.iv32 >> 24) & 0xff;
+	return pos;
 }
 
+
 void ieee80211_tkip_gen_phase1key(struct ieee80211_key *key, u8 *ta,
 				  u16 *phase1key)
 {
@@ -180,8 +228,10 @@ void ieee80211_get_tkip_key(struct ieee8
 	u16 iv16;
 	u32 iv32;
 
-	iv16 = data[hdr_len + 2] | (data[hdr_len] << 8);
-	iv32 = get_unaligned_le32(data + hdr_len + 4);
+	iv16 = data[hdr_len] << 8;
+	iv16 += data[hdr_len + 2];
+	iv32 = data[hdr_len + 4] | (data[hdr_len + 5] << 8) |
+	       (data[hdr_len + 6] << 16) | (data[hdr_len + 7] << 24);
 
 #ifdef CONFIG_TKIP_DEBUG
 	printk(KERN_DEBUG "TKIP encrypt: iv16 = 0x%04x, iv32 = 0x%08x\n",
@@ -231,6 +281,7 @@ void ieee80211_tkip_encrypt_data(struct 
 	ieee80211_wep_encrypt_data(tfm, rc4key, 16, pos, payload_len);
 }
 
+
 /* Decrypt packet payload with TKIP using @key. @pos is a pointer to the
  * beginning of the buffer containing IEEE 802.11 header payload, i.e.,
  * including IV, Ext. IV, real data, Michael MIC, ICV. @payload_len is the
@@ -251,7 +302,7 @@ int ieee80211_tkip_decrypt_data(struct c
 
 	iv16 = (pos[0] << 8) | pos[2];
 	keyid = pos[3];
-	iv32 = get_unaligned_le32(pos + 4);
+	iv32 = pos[4] | (pos[5] << 8) | (pos[6] << 16) | (pos[7] << 24);
 	pos += 8;
 #ifdef CONFIG_TKIP_DEBUG
 	{
@@ -358,3 +409,5 @@ int ieee80211_tkip_decrypt_data(struct c
 
 	return res;
 }
+
+
diff -up linux-2.6.25.noarch/net/mac80211/mesh_hwmp.c.orig linux-2.6.25.noarch/net/mac80211/mesh_hwmp.c
--- linux-2.6.25.noarch/net/mac80211/mesh_hwmp.c.orig	2008-05-19 17:29:38.000000000 -0400
+++ linux-2.6.25.noarch/net/mac80211/mesh_hwmp.c	2008-05-19 17:38:26.000000000 -0400
@@ -26,7 +26,7 @@ static inline u32 u32_field_get(u8 *preq
 {
 	if (ae)
 		offset += 6;
-	return get_unaligned_le32(preq_elem + offset);
+	return le32_to_cpu(get_unaligned((__le32 *) (preq_elem + offset)));
 }
 
 /* HWMP IE processing macros */
diff -up linux-2.6.25.noarch/net/wireless/wext.c.orig linux-2.6.25.noarch/net/wireless/wext.c
--- linux-2.6.25.noarch/net/wireless/wext.c.orig	2008-05-19 17:31:02.000000000 -0400
+++ linux-2.6.25.noarch/net/wireless/wext.c	2008-05-19 17:31:10.000000000 -0400
@@ -1157,7 +1157,7 @@ static void rtmsg_iwinfo(struct net_devi
 	struct sk_buff *skb;
 	int err;
 
-	if (dev_net(dev) != &init_net)
+	if (dev->nd_net != &init_net)
 		return;
 
 	skb = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_ATOMIC);
diff -up linux-2.6.25.noarch/net/wireless/radiotap.c.orig linux-2.6.25.noarch/net/wireless/radiotap.c
--- linux-2.6.25.noarch/net/wireless/radiotap.c.orig	2008-05-19 17:29:38.000000000 -0400
+++ linux-2.6.25.noarch/net/wireless/radiotap.c	2008-05-19 17:38:26.000000000 -0400
@@ -59,21 +59,23 @@ int ieee80211_radiotap_iterator_init(
 		return -EINVAL;
 
 	/* sanity check for allowed length and radiotap length field */
-	if (max_length < get_unaligned_le16(&radiotap_header->it_len))
+	if (max_length < le16_to_cpu(get_unaligned(&radiotap_header->it_len)))
 		return -EINVAL;
 
 	iterator->rtheader = radiotap_header;
-	iterator->max_length = get_unaligned_le16(&radiotap_header->it_len);
+	iterator->max_length = le16_to_cpu(get_unaligned(
+						&radiotap_header->it_len));
 	iterator->arg_index = 0;
-	iterator->bitmap_shifter = get_unaligned_le32(&radiotap_header->it_present);
+	iterator->bitmap_shifter = le32_to_cpu(get_unaligned(
+						&radiotap_header->it_present));
 	iterator->arg = (u8 *)radiotap_header + sizeof(*radiotap_header);
 	iterator->this_arg = NULL;
 
 	/* find payload start allowing for extended bitmap(s) */
 
 	if (unlikely(iterator->bitmap_shifter & (1<<IEEE80211_RADIOTAP_EXT))) {
-		while (get_unaligned_le32(iterator->arg) &
-		       (1 << IEEE80211_RADIOTAP_EXT)) {
+		while (le32_to_cpu(get_unaligned((__le32 *)iterator->arg)) &
+				   (1<<IEEE80211_RADIOTAP_EXT)) {
 			iterator->arg += sizeof(u32);
 
 			/*
@@ -239,8 +241,8 @@ int ieee80211_radiotap_iterator_next(
 			if (iterator->bitmap_shifter & 1) {
 				/* b31 was set, there is more */
 				/* move to next u32 bitmap */
-				iterator->bitmap_shifter =
-				    get_unaligned_le32(iterator->next_bitmap);
+				iterator->bitmap_shifter = le32_to_cpu(
+					get_unaligned(iterator->next_bitmap));
 				iterator->next_bitmap++;
 			} else
 				/* no more bitmaps: end */
diff -up linux-2.6.25.noarch/net/wireless/core.c.orig linux-2.6.25.noarch/net/wireless/core.c
--- linux-2.6.25.noarch/net/wireless/core.c.orig	2008-05-19 17:32:53.000000000 -0400
+++ linux-2.6.25.noarch/net/wireless/core.c	2008-05-19 17:37:18.000000000 -0400
@@ -167,13 +167,13 @@ int cfg80211_dev_rename(struct cfg80211_
 
 	/* Ignore nop renames */
 	result = 0;
-	if (strcmp(newname, dev_name(&rdev->wiphy.dev)) == 0)
+	if (strcmp(newname, rdev->wiphy.dev.bus_id) == 0)
 		goto out_unlock;
 
 	/* Ensure another device does not already have this name. */
 	list_for_each_entry(drv, &cfg80211_drv_list, list) {
 		result = -EINVAL;
-		if (strcmp(newname, dev_name(&drv->wiphy.dev)) == 0)
+		if (strcmp(newname, drv->wiphy.dev.bus_id) == 0)
 			goto out_unlock;
 	}
 
diff -up linux-2.6.25.noarch/drivers/net/wireless/b43/phy.c.orig linux-2.6.25.noarch/drivers/net/wireless/b43/phy.c
--- linux-2.6.25.noarch/drivers/net/wireless/b43/phy.c.orig	2008-05-19 17:29:38.000000000 -0400
+++ linux-2.6.25.noarch/drivers/net/wireless/b43/phy.c	2008-05-19 17:42:19.000000000 -0400
@@ -1400,7 +1400,7 @@ static void b43_phy_initg(struct b43_wld
 		 * the value 0x7FFFFFFF here. I think that is some weird
 		 * compiler optimization in the original driver.
 		 * Essentially, what we do here is resetting all NRSSI LT
-		 * entries to -32 (see the clamp_val() in nrssi_hw_update())
+		 * entries to -32 (see the limit_value() in nrssi_hw_update())
 		 */
 		b43_nrssi_hw_update(dev, 0xFFFF);	//FIXME?
 		b43_calc_nrssi_threshold(dev);
@@ -1462,13 +1462,13 @@ static s8 b43_phy_estimate_power_out(str
 	switch (phy->type) {
 	case B43_PHYTYPE_A:
 		tmp += 0x80;
-		tmp = clamp_val(tmp, 0x00, 0xFF);
+		tmp = limit_value(tmp, 0x00, 0xFF);
 		dbm = phy->tssi2dbm[tmp];
 		//TODO: There's a FIXME on the specs
 		break;
 	case B43_PHYTYPE_B:
 	case B43_PHYTYPE_G:
-		tmp = clamp_val(tmp, 0x00, 0x3F);
+		tmp = limit_value(tmp, 0x00, 0x3F);
 		dbm = phy->tssi2dbm[tmp];
 		break;
 	default:
@@ -1527,8 +1527,8 @@ void b43_put_attenuation_into_ranges(str
 		break;
 	}
 
-	*_rfatt = clamp_val(rfatt, rf_min, rf_max);
-	*_bbatt = clamp_val(bbatt, bb_min, bb_max);
+	*_rfatt = limit_value(rfatt, rf_min, rf_max);
+	*_bbatt = limit_value(bbatt, bb_min, bb_max);
 }
 
 /* http://bcm-specs.sipsolutions.net/RecalculateTransmissionPower */
@@ -1623,7 +1623,7 @@ void b43_phy_xmitpower(struct b43_wldev 
 			/* Get desired power (in Q5.2) */
 			desired_pwr = INT_TO_Q52(phy->power_level);
 			/* And limit it. max_pwr already is Q5.2 */
-			desired_pwr = clamp_val(desired_pwr, 0, max_pwr);
+			desired_pwr = limit_value(desired_pwr, 0, max_pwr);
 			if (b43_debug(dev, B43_DBG_XMITPOWER)) {
 				b43dbg(dev->wl,
 				       "Current TX power output: " Q52_FMT
@@ -1733,7 +1733,7 @@ static inline
 		f = q;
 		i++;
 	} while (delta >= 2);
-	entry[index] = clamp_val(b43_tssi2dbm_ad(m1 * f, 8192), -127, 128);
+	entry[index] = limit_value(b43_tssi2dbm_ad(m1 * f, 8192), -127, 128);
 	return 0;
 }
 
@@ -2259,7 +2259,7 @@ void b43_nrssi_hw_update(struct b43_wlde
 	for (i = 0; i < 64; i++) {
 		tmp = b43_nrssi_hw_read(dev, i);
 		tmp -= val;
-		tmp = clamp_val(tmp, -32, 31);
+		tmp = limit_value(tmp, -32, 31);
 		b43_nrssi_hw_write(dev, i, tmp);
 	}
 }
@@ -2276,7 +2276,7 @@ void b43_nrssi_mem_update(struct b43_wld
 		tmp = (i - delta) * phy->nrssislope;
 		tmp /= 0x10000;
 		tmp += 0x3A;
-		tmp = clamp_val(tmp, 0, 0x3F);
+		tmp = limit_value(tmp, 0, 0x3F);
 		phy->nrssi_lt[i] = tmp;
 	}
 }
@@ -2713,7 +2713,7 @@ void b43_calc_nrssi_threshold(struct b43
 			} else
 				threshold = phy->nrssi[1] - 5;
 
-			threshold = clamp_val(threshold, 0, 0x3E);
+			threshold = limit_value(threshold, 0, 0x3E);
 			b43_phy_read(dev, 0x0020);	/* dummy read */
 			b43_phy_write(dev, 0x0020,
 				      (((u16) threshold) << 8) | 0x001C);
@@ -2764,7 +2764,7 @@ void b43_calc_nrssi_threshold(struct b43
 			else
 				a += 32;
 			a = a >> 6;
-			a = clamp_val(a, -31, 31);
+			a = limit_value(a, -31, 31);
 
 			b = b * (phy->nrssi[1] - phy->nrssi[0]);
 			b += (phy->nrssi[0] << 6);
@@ -2773,7 +2773,7 @@ void b43_calc_nrssi_threshold(struct b43
 			else
 				b += 32;
 			b = b >> 6;
-			b = clamp_val(b, -31, 31);
+			b = limit_value(b, -31, 31);
 
 			tmp_u16 = b43_phy_read(dev, 0x048A) & 0xF000;
 			tmp_u16 |= ((u32) b & 0x0000003F);
diff -up linux-2.6.25.noarch/drivers/net/wireless/b43/lo.c.orig linux-2.6.25.noarch/drivers/net/wireless/b43/lo.c
--- linux-2.6.25.noarch/drivers/net/wireless/b43/lo.c.orig	2008-05-19 17:29:38.000000000 -0400
+++ linux-2.6.25.noarch/drivers/net/wireless/b43/lo.c	2008-05-19 17:42:19.000000000 -0400
@@ -199,7 +199,7 @@ static void lo_measure_txctl_values(stru
 		if (lb_gain > 10) {
 			radio_pctl_reg = 0;
 			pga = abs(10 - lb_gain) / 6;
-			pga = clamp_val(pga, 0, 15);
+			pga = limit_value(pga, 0, 15);
 		} else {
 			int cmp_val;
 			int tmp;
@@ -321,7 +321,7 @@ static void lo_measure_gain_values(struc
 			phy->lna_lod_gain = 1;
 			trsw_rx_gain -= 8;
 		}
-		trsw_rx_gain = clamp_val(trsw_rx_gain, 0, 0x2D);
+		trsw_rx_gain = limit_value(trsw_rx_gain, 0, 0x2D);
 		phy->pga_gain = trsw_rx_gain / 3;
 		if (phy->pga_gain >= 5) {
 			phy->pga_gain -= 5;
diff -up linux-2.6.25.noarch/drivers/net/wireless/b43/main.c.orig linux-2.6.25.noarch/drivers/net/wireless/b43/main.c
--- linux-2.6.25.noarch/drivers/net/wireless/b43/main.c.orig	2008-05-19 17:31:02.000000000 -0400
+++ linux-2.6.25.noarch/drivers/net/wireless/b43/main.c	2008-05-19 17:42:19.000000000 -0400
@@ -1182,10 +1182,10 @@ static void handle_irq_noise(struct b43_
 	/* Get the noise samples. */
 	B43_WARN_ON(dev->noisecalc.nr_samples >= 8);
 	i = dev->noisecalc.nr_samples;
-	noise[0] = clamp_val(noise[0], 0, ARRAY_SIZE(phy->nrssi_lt) - 1);
-	noise[1] = clamp_val(noise[1], 0, ARRAY_SIZE(phy->nrssi_lt) - 1);
-	noise[2] = clamp_val(noise[2], 0, ARRAY_SIZE(phy->nrssi_lt) - 1);
-	noise[3] = clamp_val(noise[3], 0, ARRAY_SIZE(phy->nrssi_lt) - 1);
+	noise[0] = limit_value(noise[0], 0, ARRAY_SIZE(phy->nrssi_lt) - 1);
+	noise[1] = limit_value(noise[1], 0, ARRAY_SIZE(phy->nrssi_lt) - 1);
+	noise[2] = limit_value(noise[2], 0, ARRAY_SIZE(phy->nrssi_lt) - 1);
+	noise[3] = limit_value(noise[3], 0, ARRAY_SIZE(phy->nrssi_lt) - 1);
 	dev->noisecalc.samples[i][0] = phy->nrssi_lt[noise[0]];
 	dev->noisecalc.samples[i][1] = phy->nrssi_lt[noise[1]];
 	dev->noisecalc.samples[i][2] = phy->nrssi_lt[noise[2]];
@@ -2178,7 +2178,7 @@ static int b43_write_initvals(struct b43
 				goto err_format;
 			array_size -= sizeof(iv->data.d32);
 
-			value = get_unaligned_be32(&iv->data.d32);
+			value = be32_to_cpu(get_unaligned(&iv->data.d32));
 			b43_write32(dev, offset, value);
 
 			iv = (const struct b43_iv *)((const uint8_t *)iv +
diff -up linux-2.6.25.noarch/drivers/net/wireless/b43/b43.h.orig linux-2.6.25.noarch/drivers/net/wireless/b43/b43.h
--- linux-2.6.25.noarch/drivers/net/wireless/b43/b43.h.orig	2008-05-19 17:29:38.000000000 -0400
+++ linux-2.6.25.noarch/drivers/net/wireless/b43/b43.h	2008-05-19 17:42:19.000000000 -0400
@@ -939,6 +939,22 @@ static inline bool __b43_warn_on_dummy(b
 # define B43_WARN_ON(x)	__b43_warn_on_dummy(unlikely(!!(x)))
 #endif
 
+/** Limit a value between two limits */
+#ifdef limit_value
+# undef limit_value
+#endif
+#define limit_value(value, min, max)  \
+	({						\
+		typeof(value) __value = (value);	\
+		typeof(value) __min = (min);		\
+		typeof(value) __max = (max);		\
+		if (__value < __min)			\
+			__value = __min;		\
+		else if (__value > __max)		\
+			__value = __max;		\
+		__value;				\
+	})
+
 /* Convert an integer to a Q5.2 value */
 #define INT_TO_Q52(i)	((i) << 2)
 /* Convert a Q5.2 value to an integer (precision loss!) */
diff -up linux-2.6.25.noarch/drivers/net/wireless/airo.c.orig linux-2.6.25.noarch/drivers/net/wireless/airo.c
--- linux-2.6.25.noarch/drivers/net/wireless/airo.c.orig	2008-05-19 17:31:02.000000000 -0400
+++ linux-2.6.25.noarch/drivers/net/wireless/airo.c	2008-05-19 17:31:10.000000000 -0400
@@ -3659,7 +3659,7 @@ void mpi_receive_802_11 (struct airo_inf
 	ptr += hdrlen;
 	if (hdrlen == 24)
 		ptr += 6;
-	gap = get_unaligned_le16(ptr);
+	gap = le16_to_cpu(get_unaligned((__le16 *)ptr));
 	ptr += sizeof(__le16);
 	if (gap) {
 		if (gap <= 8)
@@ -4349,28 +4349,24 @@ static int proc_config_open( struct inod
 static int proc_wepkey_open( struct inode *inode, struct file *file );
 
 static const struct file_operations proc_statsdelta_ops = {
-	.owner		= THIS_MODULE,
 	.read		= proc_read,
 	.open		= proc_statsdelta_open,
 	.release	= proc_close
 };
 
 static const struct file_operations proc_stats_ops = {
-	.owner		= THIS_MODULE,
 	.read		= proc_read,
 	.open		= proc_stats_open,
 	.release	= proc_close
 };
 
 static const struct file_operations proc_status_ops = {
-	.owner		= THIS_MODULE,
 	.read		= proc_read,
 	.open		= proc_status_open,
 	.release	= proc_close
 };
 
 static const struct file_operations proc_SSID_ops = {
-	.owner		= THIS_MODULE,
 	.read		= proc_read,
 	.write		= proc_write,
 	.open		= proc_SSID_open,
@@ -4378,7 +4374,6 @@ static const struct file_operations proc
 };
 
 static const struct file_operations proc_BSSList_ops = {
-	.owner		= THIS_MODULE,
 	.read		= proc_read,
 	.write		= proc_write,
 	.open		= proc_BSSList_open,
@@ -4386,7 +4381,6 @@ static const struct file_operations proc
 };
 
 static const struct file_operations proc_APList_ops = {
-	.owner		= THIS_MODULE,
 	.read		= proc_read,
 	.write		= proc_write,
 	.open		= proc_APList_open,
@@ -4394,7 +4388,6 @@ static const struct file_operations proc
 };
 
 static const struct file_operations proc_config_ops = {
-	.owner		= THIS_MODULE,
 	.read		= proc_read,
 	.write		= proc_write,
 	.open		= proc_config_open,
@@ -4402,7 +4395,6 @@ static const struct file_operations proc
 };
 
 static const struct file_operations proc_wepkey_ops = {
-	.owner		= THIS_MODULE,
 	.read		= proc_read,
 	.write		= proc_write,
 	.open		= proc_wepkey_open,
@@ -4421,6 +4413,10 @@ struct proc_data {
 	void (*on_close) (struct inode *, struct file *);
 };
 
+#ifndef SETPROC_OPS
+#define SETPROC_OPS(entry, ops) (entry)->proc_fops = &(ops)
+#endif
+
 static int setup_proc_entry( struct net_device *dev,
 			     struct airo_info *apriv ) {
 	struct proc_dir_entry *entry;
@@ -4436,76 +4432,100 @@ static int setup_proc_entry( struct net_
 	apriv->proc_entry->owner = THIS_MODULE;
 
 	/* Setup the StatsDelta */
-	entry = proc_create_data("StatsDelta",
-				 S_IFREG | (S_IRUGO&proc_perm),
-				 apriv->proc_entry, &proc_statsdelta_ops, dev);
+	entry = create_proc_entry("StatsDelta",
+				  S_IFREG | (S_IRUGO&proc_perm),
+				  apriv->proc_entry);
 	if (!entry)
 		goto fail_stats_delta;
 	entry->uid = proc_uid;
 	entry->gid = proc_gid;
+	entry->data = dev;
+	entry->owner = THIS_MODULE;
+	SETPROC_OPS(entry, proc_statsdelta_ops);
 
 	/* Setup the Stats */
-	entry = proc_create_data("Stats",
-				 S_IFREG | (S_IRUGO&proc_perm),
-				 apriv->proc_entry, &proc_stats_ops, dev);
+	entry = create_proc_entry("Stats",
+				  S_IFREG | (S_IRUGO&proc_perm),
+				  apriv->proc_entry);
 	if (!entry)
 		goto fail_stats;
 	entry->uid = proc_uid;
 	entry->gid = proc_gid;
+	entry->data = dev;
+	entry->owner = THIS_MODULE;
+	SETPROC_OPS(entry, proc_stats_ops);
 
 	/* Setup the Status */
-	entry = proc_create_data("Status",
-				 S_IFREG | (S_IRUGO&proc_perm),
-				 apriv->proc_entry, &proc_status_ops, dev);
+	entry = create_proc_entry("Status",
+				  S_IFREG | (S_IRUGO&proc_perm),
+				  apriv->proc_entry);
 	if (!entry)
 		goto fail_status;
 	entry->uid = proc_uid;
 	entry->gid = proc_gid;
+	entry->data = dev;
+	entry->owner = THIS_MODULE;
+	SETPROC_OPS(entry, proc_status_ops);
 
 	/* Setup the Config */
-	entry = proc_create_data("Config",
-				 S_IFREG | proc_perm,
-				 apriv->proc_entry, &proc_config_ops, dev);
+	entry = create_proc_entry("Config",
+				  S_IFREG | proc_perm,
+				  apriv->proc_entry);
 	if (!entry)
 		goto fail_config;
 	entry->uid = proc_uid;
 	entry->gid = proc_gid;
+	entry->data = dev;
+	entry->owner = THIS_MODULE;
+	SETPROC_OPS(entry, proc_config_ops);
 
 	/* Setup the SSID */
-	entry = proc_create_data("SSID",
-				 S_IFREG | proc_perm,
-				 apriv->proc_entry, &proc_SSID_ops, dev);
+	entry = create_proc_entry("SSID",
+				  S_IFREG | proc_perm,
+				  apriv->proc_entry);
 	if (!entry)
 		goto fail_ssid;
 	entry->uid = proc_uid;
 	entry->gid = proc_gid;
+	entry->data = dev;
+	entry->owner = THIS_MODULE;
+	SETPROC_OPS(entry, proc_SSID_ops);
 
 	/* Setup the APList */
-	entry = proc_create_data("APList",
-				 S_IFREG | proc_perm,
-				 apriv->proc_entry, &proc_APList_ops, dev);
+	entry = create_proc_entry("APList",
+				  S_IFREG | proc_perm,
+				  apriv->proc_entry);
 	if (!entry)
 		goto fail_aplist;
 	entry->uid = proc_uid;
 	entry->gid = proc_gid;
+	entry->data = dev;
+	entry->owner = THIS_MODULE;
+	SETPROC_OPS(entry, proc_APList_ops);
 
 	/* Setup the BSSList */
-	entry = proc_create_data("BSSList",
-				 S_IFREG | proc_perm,
-				 apriv->proc_entry, &proc_BSSList_ops, dev);
+	entry = create_proc_entry("BSSList",
+				  S_IFREG | proc_perm,
+				  apriv->proc_entry);
 	if (!entry)
 		goto fail_bsslist;
 	entry->uid = proc_uid;
 	entry->gid = proc_gid;
+	entry->data = dev;
+	entry->owner = THIS_MODULE;
+	SETPROC_OPS(entry, proc_BSSList_ops);
 
 	/* Setup the WepKey */
-	entry = proc_create_data("WepKey",
-				 S_IFREG | proc_perm,
-				 apriv->proc_entry, &proc_wepkey_ops, dev);
+	entry = create_proc_entry("WepKey",
+				  S_IFREG | proc_perm,
+				  apriv->proc_entry);
 	if (!entry)
 		goto fail_wepkey;
 	entry->uid = proc_uid;
 	entry->gid = proc_gid;
+	entry->data = dev;
+	entry->owner = THIS_MODULE;
+	SETPROC_OPS(entry, proc_wepkey_ops);
 
 	return 0;
 
diff -up linux-2.6.25.noarch/drivers/net/wireless/zd1211rw/zd_usb.c.orig linux-2.6.25.noarch/drivers/net/wireless/zd1211rw/zd_usb.c
--- linux-2.6.25.noarch/drivers/net/wireless/zd1211rw/zd_usb.c.orig	2008-05-19 17:31:02.000000000 -0400
+++ linux-2.6.25.noarch/drivers/net/wireless/zd1211rw/zd_usb.c	2008-05-19 17:31:10.000000000 -0400
@@ -545,11 +545,11 @@ static void handle_rx_packet(struct zd_u
 	 * be padded. Unaligned access might also happen if the length_info
 	 * structure is not present.
 	 */
-	if (get_unaligned_le16(&length_info->tag) == RX_LENGTH_INFO_TAG)
+	if (get_unaligned(&length_info->tag) == cpu_to_le16(RX_LENGTH_INFO_TAG))
 	{
 		unsigned int l, k, n;
 		for (i = 0, l = 0;; i++) {
-			k = get_unaligned_le16(&length_info->length[i]);
+			k = le16_to_cpu(get_unaligned(&length_info->length[i]));
 			if (k == 0)
 				return;
 			n = l+k;
diff -up linux-2.6.25.noarch/drivers/net/wireless/b43legacy/phy.c.orig linux-2.6.25.noarch/drivers/net/wireless/b43legacy/phy.c
--- linux-2.6.25.noarch/drivers/net/wireless/b43legacy/phy.c.orig	2008-05-19 17:29:38.000000000 -0400
+++ linux-2.6.25.noarch/drivers/net/wireless/b43legacy/phy.c	2008-05-19 17:43:33.000000000 -0400
@@ -1088,7 +1088,7 @@ static void b43legacy_phy_initg(struct b
 		 * the value 0x7FFFFFFF here. I think that is some weird
 		 * compiler optimization in the original driver.
 		 * Essentially, what we do here is resetting all NRSSI LT
-		 * entries to -32 (see the clamp_val() in nrssi_hw_update())
+		 * entries to -32 (see the limit_value() in nrssi_hw_update())
 		 */
 		b43legacy_nrssi_hw_update(dev, 0xFFFF);
 		b43legacy_calc_nrssi_threshold(dev);
@@ -1756,7 +1756,7 @@ static s8 b43legacy_phy_estimate_power_o
 	switch (phy->type) {
 	case B43legacy_PHYTYPE_B:
 	case B43legacy_PHYTYPE_G:
-		tmp = clamp_val(tmp, 0x00, 0x3F);
+		tmp = limit_value(tmp, 0x00, 0x3F);
 		dbm = phy->tssi2dbm[tmp];
 		break;
 	default:
@@ -1859,7 +1859,7 @@ void b43legacy_phy_xmitpower(struct b43l
 
 	/* find the desired power in Q5.2 - power_level is in dBm
 	 * and limit it - max_pwr is already in Q5.2 */
-	desired_pwr = clamp_val(phy->power_level << 2, 0, max_pwr);
+	desired_pwr = limit_value(phy->power_level << 2, 0, max_pwr);
 	if (b43legacy_debug(dev, B43legacy_DBG_XMITPOWER))
 		b43legacydbg(dev->wl, "Current TX power output: " Q52_FMT
 		       " dBm, Desired TX power output: " Q52_FMT
@@ -1905,7 +1905,7 @@ void b43legacy_phy_xmitpower(struct b43l
 			radio_attenuation++;
 		}
 	}
-	baseband_attenuation = clamp_val(baseband_attenuation, 0, 11);
+	baseband_attenuation = limit_value(baseband_attenuation, 0, 11);
 
 	txpower = phy->txctl1;
 	if ((phy->radio_ver == 0x2050) && (phy->radio_rev == 2)) {
@@ -1933,8 +1933,8 @@ void b43legacy_phy_xmitpower(struct b43l
 	}
 	/* Save the control values */
 	phy->txctl1 = txpower;
-	baseband_attenuation = clamp_val(baseband_attenuation, 0, 11);
-	radio_attenuation = clamp_val(radio_attenuation, 0, 9);
+	baseband_attenuation = limit_value(baseband_attenuation, 0, 11);
+	radio_attenuation = limit_value(radio_attenuation, 0, 9);
 	phy->rfatt = radio_attenuation;
 	phy->bbatt = baseband_attenuation;
 
@@ -1979,7 +1979,7 @@ s8 b43legacy_tssi2dbm_entry(s8 entry [],
 		f = q;
 		i++;
 	} while (delta >= 2);
-	entry[index] = clamp_val(b43legacy_tssi2dbm_ad(m1 * f, 8192),
+	entry[index] = limit_value(b43legacy_tssi2dbm_ad(m1 * f, 8192),
 				   -127, 128);
 	return 0;
 }
diff -up linux-2.6.25.noarch/drivers/net/wireless/b43legacy/radio.c.orig linux-2.6.25.noarch/drivers/net/wireless/b43legacy/radio.c
--- linux-2.6.25.noarch/drivers/net/wireless/b43legacy/radio.c.orig	2008-05-19 17:29:38.000000000 -0400
+++ linux-2.6.25.noarch/drivers/net/wireless/b43legacy/radio.c	2008-05-19 17:43:33.000000000 -0400
@@ -357,7 +357,7 @@ void b43legacy_nrssi_hw_update(struct b4
 	for (i = 0; i < 64; i++) {
 		tmp = b43legacy_nrssi_hw_read(dev, i);
 		tmp -= val;
-		tmp = clamp_val(tmp, -32, 31);
+		tmp = limit_value(tmp, -32, 31);
 		b43legacy_nrssi_hw_write(dev, i, tmp);
 	}
 }
@@ -375,7 +375,7 @@ void b43legacy_nrssi_mem_update(struct b
 		tmp = (i - delta) * phy->nrssislope;
 		tmp /= 0x10000;
 		tmp += 0x3A;
-		tmp = clamp_val(tmp, 0, 0x3F);
+		tmp = limit_value(tmp, 0, 0x3F);
 		phy->nrssi_lt[i] = tmp;
 	}
 }
@@ -839,7 +839,7 @@ void b43legacy_calc_nrssi_threshold(stru
 		} else
 			threshold = phy->nrssi[1] - 5;
 
-		threshold = clamp_val(threshold, 0, 0x3E);
+		threshold = limit_value(threshold, 0, 0x3E);
 		b43legacy_phy_read(dev, 0x0020); /* dummy read */
 		b43legacy_phy_write(dev, 0x0020, (((u16)threshold) << 8)
 				    | 0x001C);
@@ -892,7 +892,7 @@ void b43legacy_calc_nrssi_threshold(stru
 			else
 				a += 32;
 			a = a >> 6;
-			a = clamp_val(a, -31, 31);
+			a = limit_value(a, -31, 31);
 
 			b = b * (phy->nrssi[1] - phy->nrssi[0]);
 			b += (phy->nrssi[0] << 6);
@@ -901,7 +901,7 @@ void b43legacy_calc_nrssi_threshold(stru
 			else
 				b += 32;
 			b = b >> 6;
-			b = clamp_val(b, -31, 31);
+			b = limit_value(b, -31, 31);
 
 			tmp_u16 = b43legacy_phy_read(dev, 0x048A) & 0xF000;
 			tmp_u16 |= ((u32)b & 0x0000003F);
@@ -1905,7 +1905,7 @@ void b43legacy_radio_set_txpower_a(struc
 	u16 dac;
 	u16 ilt;
 
-	txpower = clamp_val(txpower, 0, 63);
+	txpower = limit_value(txpower, 0, 63);
 
 	pamp = b43legacy_get_txgain_freq_power_amp(txpower);
 	pamp <<= 5;
diff -up linux-2.6.25.noarch/drivers/net/wireless/b43legacy/main.c.orig linux-2.6.25.noarch/drivers/net/wireless/b43legacy/main.c
--- linux-2.6.25.noarch/drivers/net/wireless/b43legacy/main.c.orig	2008-05-19 17:31:02.000000000 -0400
+++ linux-2.6.25.noarch/drivers/net/wireless/b43legacy/main.c	2008-05-19 17:43:33.000000000 -0400
@@ -846,10 +846,10 @@ static void handle_irq_noise(struct b43l
 	/* Get the noise samples. */
 	B43legacy_WARN_ON(dev->noisecalc.nr_samples >= 8);
 	i = dev->noisecalc.nr_samples;
-	noise[0] = clamp_val(noise[0], 0, ARRAY_SIZE(phy->nrssi_lt) - 1);
-	noise[1] = clamp_val(noise[1], 0, ARRAY_SIZE(phy->nrssi_lt) - 1);
-	noise[2] = clamp_val(noise[2], 0, ARRAY_SIZE(phy->nrssi_lt) - 1);
-	noise[3] = clamp_val(noise[3], 0, ARRAY_SIZE(phy->nrssi_lt) - 1);
+	noise[0] = limit_value(noise[0], 0, ARRAY_SIZE(phy->nrssi_lt) - 1);
+	noise[1] = limit_value(noise[1], 0, ARRAY_SIZE(phy->nrssi_lt) - 1);
+	noise[2] = limit_value(noise[2], 0, ARRAY_SIZE(phy->nrssi_lt) - 1);
+	noise[3] = limit_value(noise[3], 0, ARRAY_SIZE(phy->nrssi_lt) - 1);
 	dev->noisecalc.samples[i][0] = phy->nrssi_lt[noise[0]];
 	dev->noisecalc.samples[i][1] = phy->nrssi_lt[noise[1]];
 	dev->noisecalc.samples[i][2] = phy->nrssi_lt[noise[2]];
@@ -1720,7 +1720,7 @@ static int b43legacy_write_initvals(stru
 				goto err_format;
 			array_size -= sizeof(iv->data.d32);
 
-			value = get_unaligned_be32(&iv->data.d32);
+			value = be32_to_cpu(get_unaligned(&iv->data.d32));
 			b43legacy_write32(dev, offset, value);
 
 			iv = (const struct b43legacy_iv *)((const uint8_t *)iv +
diff -up linux-2.6.25.noarch/drivers/net/wireless/b43legacy/b43legacy.h.orig linux-2.6.25.noarch/drivers/net/wireless/b43legacy/b43legacy.h
--- linux-2.6.25.noarch/drivers/net/wireless/b43legacy/b43legacy.h.orig	2008-05-19 17:29:38.000000000 -0400
+++ linux-2.6.25.noarch/drivers/net/wireless/b43legacy/b43legacy.h	2008-05-19 17:43:33.000000000 -0400
@@ -823,6 +823,23 @@ void b43legacydbg(struct b43legacy_wl *w
 # define b43legacydbg(wl, fmt...) do { /* nothing */ } while (0)
 #endif /* DEBUG */
 
+
+/** Limit a value between two limits */
+#ifdef limit_value
+# undef limit_value
+#endif
+#define limit_value(value, min, max)  \
+	({						\
+		typeof(value) __value = (value);	\
+		typeof(value) __min = (min);		\
+		typeof(value) __max = (max);		\
+		if (__value < __min)			\
+			__value = __min;		\
+		else if (__value > __max)		\
+			__value = __max;		\
+		__value;				\
+	})
+
 /* Macros for printing a value in Q5.2 format */
 #define Q52_FMT		"%u.%u"
 #define Q52_ARG(q52)	((q52) / 4), (((q52) & 3) * 100 / 4)
diff -up linux-2.6.25.noarch/drivers/net/wireless/libertas/scan.c.orig linux-2.6.25.noarch/drivers/net/wireless/libertas/scan.c
--- linux-2.6.25.noarch/drivers/net/wireless/libertas/scan.c.orig	2008-05-19 17:31:02.000000000 -0400
+++ linux-2.6.25.noarch/drivers/net/wireless/libertas/scan.c	2008-05-19 17:31:10.000000000 -0400
@@ -523,7 +523,7 @@ static int lbs_process_bss(struct bss_de
 
 	if (*bytesleft >= sizeof(beaconsize)) {
 		/* Extract & convert beacon size from the command buffer */
-		beaconsize = get_unaligned_le16(*pbeaconinfo);
+		beaconsize = le16_to_cpu(get_unaligned((__le16 *)*pbeaconinfo));
 		*bytesleft -= sizeof(beaconsize);
 		*pbeaconinfo += sizeof(beaconsize);
 	}
diff -up linux-2.6.25.noarch/drivers/net/wireless/iwlwifi/iwl-3945.c.orig linux-2.6.25.noarch/drivers/net/wireless/iwlwifi/iwl-3945.c
--- linux-2.6.25.noarch/drivers/net/wireless/iwlwifi/iwl-3945.c.orig	2008-05-19 17:31:02.000000000 -0400
+++ linux-2.6.25.noarch/drivers/net/wireless/iwlwifi/iwl-3945.c	2008-05-19 17:31:10.000000000 -0400
@@ -554,36 +554,40 @@ static void iwl3945_add_radiotap(struct 
 	iwl3945_rt->rt_hdr.it_pad = 0;
 
 	/* total header + data */
-	put_unaligned_le16(sizeof(*iwl3945_rt), &iwl3945_rt->rt_hdr.it_len);
+	put_unaligned(cpu_to_le16(sizeof(*iwl3945_rt)),
+		      &iwl3945_rt->rt_hdr.it_len);
 
 	/* Indicate all the fields we add to the radiotap header */
-	put_unaligned_le32((1 << IEEE80211_RADIOTAP_TSFT) |
-			   (1 << IEEE80211_RADIOTAP_FLAGS) |
-			   (1 << IEEE80211_RADIOTAP_RATE) |
-			   (1 << IEEE80211_RADIOTAP_CHANNEL) |
-			   (1 << IEEE80211_RADIOTAP_DBM_ANTSIGNAL) |
-			   (1 << IEEE80211_RADIOTAP_DBM_ANTNOISE) |
-			   (1 << IEEE80211_RADIOTAP_ANTENNA),
-			&iwl3945_rt->rt_hdr.it_present);
+	put_unaligned(cpu_to_le32((1 << IEEE80211_RADIOTAP_TSFT) |
+				  (1 << IEEE80211_RADIOTAP_FLAGS) |
+				  (1 << IEEE80211_RADIOTAP_RATE) |
+				  (1 << IEEE80211_RADIOTAP_CHANNEL) |
+				  (1 << IEEE80211_RADIOTAP_DBM_ANTSIGNAL) |
+				  (1 << IEEE80211_RADIOTAP_DBM_ANTNOISE) |
+				  (1 << IEEE80211_RADIOTAP_ANTENNA)),
+		      &iwl3945_rt->rt_hdr.it_present);
 
 	/* Zero the flags, we'll add to them as we go */
 	iwl3945_rt->rt_flags = 0;
 
-	put_unaligned_le64(tsf, &iwl3945_rt->rt_tsf);
+	put_unaligned(cpu_to_le64(tsf), &iwl3945_rt->rt_tsf);
 
 	iwl3945_rt->rt_dbmsignal = signal;
 	iwl3945_rt->rt_dbmnoise = noise;
 
 	/* Convert the channel frequency and set the flags */
-	put_unaligned_le16(stats->freq, &iwl3945_rt->rt_channelMHz);
+	put_unaligned(cpu_to_le16(stats->freq), &iwl3945_rt->rt_channelMHz);
 	if (!(phy_flags_hw & RX_RES_PHY_FLAGS_BAND_24_MSK))
-		put_unaligned_le16(IEEE80211_CHAN_OFDM | IEEE80211_CHAN_5GHZ,
+		put_unaligned(cpu_to_le16(IEEE80211_CHAN_OFDM |
+					  IEEE80211_CHAN_5GHZ),
 			      &iwl3945_rt->rt_chbitmask);
 	else if (phy_flags_hw & RX_RES_PHY_FLAGS_MOD_CCK_MSK)
-		put_unaligned_le16(IEEE80211_CHAN_CCK | IEEE80211_CHAN_2GHZ,
+		put_unaligned(cpu_to_le16(IEEE80211_CHAN_CCK |
+					  IEEE80211_CHAN_2GHZ),
 			      &iwl3945_rt->rt_chbitmask);
 	else	/* 802.11g */
-		put_unaligned_le16(IEEE80211_CHAN_OFDM | IEEE80211_CHAN_2GHZ,
+		put_unaligned(cpu_to_le16(IEEE80211_CHAN_OFDM |
+					  IEEE80211_CHAN_2GHZ),
 			      &iwl3945_rt->rt_chbitmask);
 
 	if (rate == -1)
diff -up linux-2.6.25.noarch/drivers/net/wireless/ath5k/base.c.orig linux-2.6.25.noarch/drivers/net/wireless/ath5k/base.c
--- linux-2.6.25.noarch/drivers/net/wireless/ath5k/base.c.orig	2008-05-19 17:31:02.000000000 -0400
+++ linux-2.6.25.noarch/drivers/net/wireless/ath5k/base.c	2008-05-19 17:31:10.000000000 -0400
@@ -58,6 +58,10 @@
 #include "reg.h"
 #include "debug.h"
 
+/* unaligned little endian access */
+#define LE_READ_2(_p) (le16_to_cpu(get_unaligned((__le16 *)(_p))))
+#define LE_READ_4(_p) (le32_to_cpu(get_unaligned((__le32 *)(_p))))
+
 enum {
 	ATH_LED_TX,
 	ATH_LED_RX,
@@ -2894,9 +2898,9 @@ static void ath5k_configure_filter(struc
 			if (!mclist)
 				break;
 			/* calculate XOR of eight 6-bit values */
-			val = get_unaligned_le32(mclist->dmi_addr + 0);
+			val = LE_READ_4(mclist->dmi_addr + 0);
 			pos = (val >> 18) ^ (val >> 12) ^ (val >> 6) ^ val;
-			val = get_unaligned_le32(mclist->dmi_addr + 3);
+			val = LE_READ_4(mclist->dmi_addr + 3);
 			pos ^= (val >> 18) ^ (val >> 12) ^ (val >> 6) ^ val;
 			pos &= 0x3f;
 			mfilt[pos / 32] |= (1 << (pos % 32));


Index: kernel.spec
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-8/kernel.spec,v
retrieving revision 1.441
retrieving revision 1.442
diff -u -r1.441 -r1.442
--- kernel.spec	21 May 2008 20:42:11 -0000	1.441
+++ kernel.spec	21 May 2008 21:22:40 -0000	1.442
@@ -651,30 +651,19 @@
 # Patch671: linux-2.6-libata-fix-hpt-svw-dma-masking.patch
 Patch672: linux-2.6-libata-it821x-improve-emulation-handling.patch
 Patch673: linux-2.6-libata-pata_ataiixp-clear-simplex-b4-probe.patch
+Patch674: linux-2.6-sata-eeepc-faster.patch
 
 Patch680: linux-2.6-wireless.patch
 Patch681: linux-2.6-wireless-pending.patch
-Patch682: linux-2.6-wireless-pending-fixups.patch
-Patch683: linux-2.6-wireless-pending-too.patch
-Patch684: linux-2.6-rndis_host-fixes.patch
 Patch690: linux-2.6-at76.patch
-Patch691: linux-2.6-rndis_wlan.patch
-Patch692: linux-2.6-ps3_gelic_wireless.patch
-Patch700: linux-2.6-cfg80211-extras.patch
-Patch701: linux-2.6-zd1211rw-module-alias.patch
+
 Patch720: linux-2.6-e1000-bad-csum-allow.patch
 Patch721: linux-2.6-netdev-e1000-disable-alpm.patch
 Patch725: linux-2.6-netdev-atl2.patch
 # Patch731: linux-2.6-netdev-smc91c92_cs-fix-station-addr.patch
 # Patch732: linux-2.6-netdev-bonding-fix-null-deref.patch
 
-#Patch780: linux-2.6-clockevents-fix-resume-logic.patch
-Patch761: linux-2.6-acpi-video-backlight-rationalize.patch
-#Patch763: linux-2.6-acpi-video-fix-multiple-busses.patch
-Patch767: linux-2.6-acpi_ec_early_init_fix.patch
 #Patch768: linux-2.6-acpi-fix-sizeof.patch
-Patch770: linux-2.6-acpi-disable-stray-interrupt-1.patch
-Patch771: linux-2.6-acpi-disable-stray-interrupt-2.patch
 Patch784: linux-2.6-acpi-eeepc-hotkey.patch
 
 Patch820: linux-2.6-compile-fixes.patch
@@ -1206,6 +1195,8 @@
 # Disable PCI MMCONFIG by default.
 ApplyPatch linux-2.6-defaults-nommconf.patch
 
+# libata
+#
 # Disable ATAPI DMA on ALI chipsets.
 ApplyPatch linux-2.6-libata-ali-atapi-dma.patch
 # ia64 ata quirk
@@ -1214,22 +1205,19 @@
 ApplyPatch linux-2.6-libata-it821x-improve-emulation-handling.patch
 # clear simplex DMA before probing
 ApplyPatch linux-2.6-libata-pata_ataiixp-clear-simplex-b4-probe.patch
+# make eeepc ata go faster
+ApplyPatch linux-2.6-sata-eeepc-faster.patch
 
-# wireless patches headed for 2.6.25
-ApplyPatch linux-2.6-wireless.patch
+# wireless
+#
 # wireless patches headed for 2.6.26
+ApplyPatch linux-2.6-wireless.patch
+# wireless patches headed for 2.6.27
 ApplyPatch linux-2.6-wireless-pending.patch
-ApplyPatch linux-2.6-wireless-pending-fixups.patch
-# wireless patches staged for 2.6.27
-ApplyPatch linux-2.6-wireless-pending-too.patch
-
 # Add misc wireless bits from upstream wireless tree
 ApplyPatch linux-2.6-at76.patch
-ApplyPatch linux-2.6-rndis_wlan.patch
-ApplyPatch linux-2.6-ps3_gelic_wireless.patch
-
-# Some rndis_host fixes pertinent to wireless
-ApplyPatch linux-2.6-rndis_host-fixes.patch
+# fixups to make current wireless patches build on this kernel
+ApplyPatch linux-2.6-wireless-fixups.patch
 
 # Restore ability to add/remove virtual i/fs to mac80211 devices
 ApplyPatch linux-2.6-cfg80211-extras.patch
@@ -1245,17 +1233,11 @@
 ApplyPatch linux-2.6-netdev-atl2.patch
 
 # ACPI/PM patches
-# fix multiple ACPI brightness problems (#427518)
-ApplyPatch linux-2.6-acpi-video-backlight-rationalize.patch
-#ApplyPatch linux-2.6-acpi-video-fix-multiple-busses.patch
-# revert EC change in 2.6.24 that broke some notebooks (#432477)
-ApplyPatch linux-2.6-acpi_ec_early_init_fix.patch -R
-# acpi has a bug in the sizeof function causing thermal panics
+# acpi has a bug in the sizeof function causing thermal panics (??? in 2.6.25)
 #ApplyPatch linux-2.6-acpi-fix-sizeof.patch
-# properly disable stray interrupts in acpi
-ApplyPatch linux-2.6-acpi-disable-stray-interrupt-1.patch
-ApplyPatch linux-2.6-acpi-disable-stray-interrupt-2.patch
-
+# properly disable stray interrupts in acpi (??? in 2.6.25)
+#ApplyPatch linux-2.6-acpi-disable-stray-interrupt-1.patch
+#ApplyPatch linux-2.6-acpi-disable-stray-interrupt-2.patch
 # Eeepc hotkey driver
 ApplyPatch linux-2.6-acpi-eeepc-hotkey.patch
 
@@ -1924,6 +1906,9 @@
 
 
 %changelog
+* Wed May 21 2008 Chuck Ebbert <cebbert at redhat.com> 2.6.25.4-2
+- eeepc, wireless, acpi, lirc, and uvcvideo updates for 2.6.25.
+
 * Wed May 21 2008 Chuck Ebbert <cebbert at redhat.com> 2.6.25.4-1
 - Initial commit of kernel 2.6.25.4; does not build yet.
 

linux-2.6-acpi-eeepc-hotkey.patch:

Index: linux-2.6-acpi-eeepc-hotkey.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-8/linux-2.6-acpi-eeepc-hotkey.patch,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- linux-2.6-acpi-eeepc-hotkey.patch	15 Feb 2008 23:58:52 -0000	1.2
+++ linux-2.6-acpi-eeepc-hotkey.patch	21 May 2008 21:22:40 -0000	1.3
@@ -12,8 +12,8 @@
 --- a/drivers/misc/Kconfig
 +++ b/drivers/misc/Kconfig
 @@ -251,4 +251,14 @@ config ATMEL_SSC
- 
- 	  If unsure, say N.
+ 	  driver (SCSI/ATA) which supports enclosures
+ 	  or a SCSI enclosure device (SES) to use these services.
  
 +config EEEPC
 +        tristate "Eee PC Hotkey Driver (EXPERIMENTAL)"
@@ -31,9 +31,9 @@
 --- a/drivers/misc/Makefile
 +++ b/drivers/misc/Makefile
 @@ -17,3 +17,4 @@ obj-$(CONFIG_SONY_LAPTOP)	+= sony-laptop.o
- obj-$(CONFIG_THINKPAD_ACPI)	+= thinkpad_acpi.o
- obj-$(CONFIG_FUJITSU_LAPTOP)	+= fujitsu-laptop.o
  obj-$(CONFIG_EEPROM_93CX6)	+= eeprom_93cx6.o
+ obj-$(CONFIG_INTEL_MENLOW)	+= intel_menlow.o
+ obj-$(CONFIG_ENCLOSURE_SERVICES) += enclosure.o
 +obj-$(CONFIG_EEEPC)		+= eeepc.o
 diff --git a/drivers/misc/eeepc.c b/drivers/misc/eeepc.c
 new file mode 100644

linux-2.6-at76.patch:

Index: linux-2.6-at76.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-8/linux-2.6-at76.patch,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -r1.8 -r1.9
--- linux-2.6-at76.patch	28 Feb 2008 03:18:34 -0000	1.8
+++ linux-2.6-at76.patch	21 May 2008 21:22:40 -0000	1.9
@@ -1,4 +1,65 @@
-commit e141a848e24724c2d5534ff8152b0be4fe1b6f62
+commit 755a49a4b9d296651276ca8ca3ece49ded9ae621
+Author: Bruno Randolf <br1 at einfach.org>
+Date:   Thu May 8 19:15:40 2008 +0200
+
+    at76: use hardware flags for signal/noise units
+    
+    This is the at76_usb bits...
+    
+    trying to clean up the signal/noise code. the previous code in mac80211 had
+    confusing names for the related variables, did not have much definition of
+    what units of signal and noise were provided and used implicit mechanisms from
+    the wireless extensions.
+    
+    this patch introduces hardware capability flags to let the hardware specify
+    clearly if it can provide signal and noise level values and which units it can
+    provide. this also anticipates possible new units like RCPI in the future.
+    
+    for signal:
+    
+      IEEE80211_HW_SIGNAL_UNSPEC - unspecified, unknown, hw specific
+      IEEE80211_HW_SIGNAL_DB     - dB difference to unspecified reference point
+      IEEE80211_HW_SIGNAL_DBM    - dBm, difference to 1mW
+    
+    for noise we currently only have dBm:
+    
+      IEEE80211_HW_NOISE_DBM     - dBm, difference to 1mW
+    
+    if IEEE80211_HW_SIGNAL_UNSPEC or IEEE80211_HW_SIGNAL_DB is used the driver has
+    to provide the maximum value (max_signal) it reports in order for applications
+    to make sense of the signal values.
+    
+    i tried my best to find out for each driver what it can provide and update it
+    but i'm not sure (?) for some of them and used the more conservative guess in
+    doubt. this can be fixed easily after this patch has been merged by changing
+    the hardware flags of the driver.
+    
+    DRIVER          SIGNAL    MAX	NOISE   QUAL
+    -----------------------------------------------------------------
+    adm8211         unspec(?) 100   n/a     missing
+    at76_usb        unspec(?) (?)   unused  missing
+    ath5k           dBm             dBm     percent rssi
+    b43legacy       dBm             dBm     percent jssi(?)
+    b43             dBm             dBm     percent jssi(?)
+    iwl-3945        dBm             dBm     percent snr+more
+    iwl-4965        dBm             dBm     percent snr+more
+    p54             unspec    127   n/a     missing
+    rt2x00          dBm	        n/a     percent rssi+tx/rx frame success
+      rt2400        dBm             n/a
+      rt2500pci     dBm             n/a
+      rt2500usb     dBm             n/a
+      rt61pci       dBm             n/a
+      rt73usb       dBm             n/a
+    rtl8180         unspec(?) 65    n/a     (?)
+    rtl8187         unspec(?) 65    (?)     noise(?)
+    zd1211          dB(?)     100   n/a     percent
+    
+    drivers/net/wireless/ath5k/base.c:      Changes-licensed-under: 3-Clause-BSD
+    
+    Signed-off-by: Bruno Randolf <br1 at einfach.org>
+    Signed-off-by: John W. Linville <linville at tuxdriver.com>
+
+commit 644ef9df7c598e369ba1794f65610b1a1e643fca
 Author: Pavel Roskin <proski at gnu.org>
 Date:   Fri Feb 22 00:01:07 2008 -0500
 
@@ -7,7 +68,7 @@
     Signed-off-by: Pavel Roskin <proski at gnu.org>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 4891e7cb744d9e00dfe714c2827abcd32a02e405
+commit b226eae4c43640ed83cd8126c11602e230150a56
 Author: Pavel Roskin <proski at gnu.org>
 Date:   Fri Feb 22 00:01:01 2008 -0500
 
@@ -16,7 +77,7 @@
     Signed-off-by: Pavel Roskin <proski at gnu.org>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit a5d909eecd7c57843395780d7bc3e9655093bd5e
+commit 9eccbe8447a68d649d3ca683193f34b3cb9c7c6c
 Author: Pavel Roskin <proski at gnu.org>
 Date:   Fri Feb 22 00:00:55 2008 -0500
 
@@ -25,7 +86,7 @@
     Signed-off-by: Pavel Roskin <proski at gnu.org>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit e5d8694e15d0f20a5a3999ca6697278df9a66ca7
+commit 5a92d66e9642b3a0a8cee6eec7172b65d9c43548
 Author: Pavel Roskin <proski at gnu.org>
 Date:   Fri Feb 22 00:00:50 2008 -0500
 
@@ -34,7 +95,7 @@
     Signed-off-by: Pavel Roskin <proski at gnu.org>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 781e1500cd246b9aeaa0fc7593f028d43c87dbc0
+commit 67c3d5b697774c6fe9a644fa302c82333e1d75e3
 Author: Pavel Roskin <proski at gnu.org>
 Date:   Fri Feb 22 00:00:44 2008 -0500
 
@@ -45,7 +106,7 @@
     Signed-off-by: Pavel Roskin <proski at gnu.org>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 4083ec919a7353cf7a9de6cf42aa13669b7e018e
+commit b0b7eb18c8233622d1ffdea33814548e286379dd
 Author: Kalle Valo <kalle.valo at iki.fi>
 Date:   Sun Feb 10 17:01:19 2008 +0200
 
@@ -56,7 +117,7 @@
     Signed-off-by: Kalle Valo <kalle.valo at iki.fi>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit bae74e67b58fc0ecf930fc1b5f485d536b1eea5a
+commit 1416847d10d0f9ddee78264dfdf14eab5fff72aa
 Author: Kalle Valo <kalle.valo at iki.fi>
 Date:   Sun Feb 10 17:01:11 2008 +0200
 
@@ -67,7 +128,7 @@
     Signed-off-by: Kalle Valo <kalle.valo at iki.fi>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit e31a31b44489b3535fcf7b02871458186ed43aa7
+commit 3483c0c0779a404e7aa9a5261978a083fbf3aac7
 Author: Kalle Valo <kalle.valo at iki.fi>
 Date:   Sun Feb 10 17:01:04 2008 +0200
 
@@ -81,7 +142,7 @@
     Signed-off-by: Kalle Valo <kalle.valo at iki.fi>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 162d3ad6b55220940216d35dc1418e0c0ef9b98e
+commit 10a9088fa5d75ca48fbc74108a106430336ab615
 Author: Kalle Valo <kalle.valo at iki.fi>
 Date:   Sun Feb 10 17:00:56 2008 +0200
 
@@ -95,7 +156,7 @@
     Signed-off-by: Kalle Valo <kalle.valo at iki.fi>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 779e36d16d4b79f30207da5d41d8cda9151f8e1f
+commit bc12541b59aa1a0b4c58a093195d7ade3ebbbe60
 Author: Kalle Valo <kalle.valo at iki.fi>
 Date:   Sun Feb 10 17:00:49 2008 +0200
 
@@ -108,7 +169,7 @@
     Signed-off-by: Kalle Valo <kalle.valo at iki.fi>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 0e5a456201237a135d5970b755ade55c18565033
+commit b5415e12ce5552b0b640c83a40fdc806eb130149
 Author: Kalle Valo <kalle.valo at iki.fi>
 Date:   Sun Feb 10 17:00:41 2008 +0200
 
@@ -117,7 +178,7 @@
     Signed-off-by: Kalle Valo <kalle.valo at iki.fi>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 88ba88d527a925f0b0a5162e64e026e33312648e
+commit 82d266cbe56da67064793e1747d12abfe705ffc5
 Author: Kalle Valo <kalle.valo at iki.fi>
 Date:   Sun Feb 10 17:00:34 2008 +0200
 
@@ -126,7 +187,7 @@
     Signed-off-by: Kalle Valo <kalle.valo at iki.fi>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 798f4f8d71f221f0e74dbd1588ab6225c64efc45
+commit 4e9c1daf0d0b98af6e4c0b87c299855dd63dec06
 Author: Kalle Valo <kalle.valo at iki.fi>
 Date:   Sun Feb 10 17:00:26 2008 +0200
 
@@ -141,7 +202,7 @@
     Signed-off-by: Kalle Valo <kalle.valo at iki.fi>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit ee5141d10332561306a48b216a1ae1ddfe318805
+commit 475d2454db1a8a21af2cd06da2e31896b987efe4
 Author: Kalle Valo <kalle.valo at iki.fi>
 Date:   Sun Feb 10 17:00:19 2008 +0200
 
@@ -150,7 +211,7 @@
     Signed-off-by: Kalle Valo <kalle.valo at iki.fi>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 2009705e36ad0b50f0cdb0f9ef186f33057d17e8
+commit adad9eb5df49e8b3848a28d3b865d2e6424f3092
 Author: Kalle Valo <kalle.valo at iki.fi>
 Date:   Sun Feb 10 17:00:11 2008 +0200
 
@@ -159,7 +220,7 @@
     Signed-off-by: Kalle Valo <kalle.valo at iki.fi>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit bd80e67cdc3286868f59cf809b63c5c021392fbd
+commit 62690875db04e240d99f88ff9b4f9dd3a58ce70c
 Author: Kalle Valo <kalle.valo at iki.fi>
 Date:   Sun Feb 10 17:00:04 2008 +0200
 
@@ -168,7 +229,7 @@
     Signed-off-by: Kalle Valo <kalle.valo at iki.fi>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit c53a0aa28992ba7f212effec5e29be990848b54f
+commit 2e7fcbf808efa2b6145bccad8fd34c4c6eda7472
 Author: Pavel Roskin <proski at gnu.org>
 Date:   Sun Feb 10 16:59:56 2008 +0200
 
@@ -185,7 +246,7 @@
     Signed-off-by: Kalle Valo <kalle.valo at iki.fi>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 38ec6fbd236318179e28c71bc1b3dc94166e4be2
+commit 21c8fae765d1382da763f3d32156c4d3401a4136
 Author: Pavel Roskin <proski at gnu.org>
 Date:   Mon Feb 4 00:05:19 2008 -0500
 
@@ -196,7 +257,7 @@
     Signed-off-by: Pavel Roskin <proski at gnu.org>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 4ed58b00a2df9772cfa631f53af52c38207d78ac
+commit c0d59b16b5f8ac0c0350318e280a5422a01ae14a
 Author: Pavel Roskin <proski at gnu.org>
 Date:   Sun Sep 30 14:41:25 2007 -0400
 
@@ -205,7 +266,7 @@
     Signed-off-by: Pavel Roskin <proski at gnu.org>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 3a39b0c26c19b4f26ab90f8cd170e68da3c8fb91
+commit f55a566e9a47c5260eda9287a44b890fe57ac601
 Author: Pavel Roskin <proski at gnu.org>
 Date:   Sun Sep 30 14:41:18 2007 -0400
 
@@ -214,7 +275,7 @@
     Signed-off-by: Pavel Roskin <proski at gnu.org>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 69a965e9dde88c1dec49a0e840020bbdfc2263ad
+commit 3f1b51b7bdbc53ff409c3949a56fe9ff3c59d2eb
 Author: Pavel Roskin <proski at gnu.org>
 Date:   Sun Sep 30 14:41:12 2007 -0400
 
@@ -226,7 +287,7 @@
     Signed-off-by: Pavel Roskin <proski at gnu.org>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit e007ed4c5328f857201d66c8564978bd4150a9a5
+commit 9608639caa2889d441c45c44f2a54857717eca90
 Author: Pavel Roskin <proski at gnu.org>
 Date:   Sun Sep 30 14:41:06 2007 -0400
 
@@ -243,7 +304,7 @@
     Signed-off-by: Pavel Roskin <proski at gnu.org>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 84d9a4914d2f678728b0b9a4c4b360e93b2e2efa
+commit d531897dbecca5614ef099134ee9a674311b47ed
 Author: Pavel Roskin <proski at gnu.org>
 Date:   Sun Sep 30 14:40:59 2007 -0400
 
@@ -259,7 +320,7 @@
     Signed-off-by: Pavel Roskin <proski at gnu.org>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 46e958f2e0334bfeb1436d8066e1797804212178
+commit b3c4d43a6f9c91b60e4e2a890ccbc67baf3e1c23
 Author: Pavel Roskin <proski at gnu.org>
 Date:   Sun Sep 30 14:40:53 2007 -0400
 
@@ -278,7 +339,7 @@
     Signed-off-by: Pavel Roskin <proski at gnu.org>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit cbf56decc3dd24be59bdcd7af14ae6b6fc1d7265
+commit ac77f8ab8a2b9c53ac034edb5e68ffd474afcca7
 Author: Pavel Roskin <proski at gnu.org>
 Date:   Sun Sep 30 14:40:47 2007 -0400
 
@@ -290,7 +351,7 @@
     Signed-off-by: Pavel Roskin <proski at gnu.org>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 73363e219953a6bcafa0087b415c0ce154a13940
+commit 2677d1fb37e29c2e37d50c795c2d29d6ee649116
 Author: Pavel Roskin <proski at gnu.org>
 Date:   Sun Sep 30 14:40:40 2007 -0400
 
@@ -301,7 +362,7 @@
     Signed-off-by: Pavel Roskin <proski at gnu.org>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 65e5ad191757d5febb31e97a8a08dbd672d0662d
+commit c4212037d703306c7536f270435366d57ee1a006
 Author: Pavel Roskin <proski at gnu.org>
 Date:   Sun Sep 30 14:40:34 2007 -0400
 
@@ -310,7 +371,7 @@
     Signed-off-by: Pavel Roskin <proski at gnu.org>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 8f3811adf092d19f14111166af05f10cb2efa651
+commit 7a5225ceeb8c14a0741c3deac0a6efb710f11ffc
 Author: Pavel Roskin <proski at gnu.org>
 Date:   Sun Sep 30 14:40:27 2007 -0400
 
@@ -322,7 +383,7 @@
     Signed-off-by: Pavel Roskin <proski at gnu.org>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 0048a3f2c0de2f6ba969731f51eaaa73b3e168e2
+commit 191ba1c8ba5df72128d23ec6008cd34893d8ccf7
 Author: Pavel Roskin <proski at gnu.org>
 Date:   Sun Sep 30 14:40:21 2007 -0400
 
@@ -334,7 +395,7 @@
     Signed-off-by: Pavel Roskin <proski at gnu.org>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 20eab45fc567b85f8aaa131eceb8d53ac14d3fd6
+commit d5d6f820fe6fa48351dcba9debe4c65da8844757
 Author: Pavel Roskin <proski at gnu.org>
 Date:   Sun Sep 30 14:40:15 2007 -0400
 
@@ -343,7 +404,7 @@
     Signed-off-by: Pavel Roskin <proski at gnu.org>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit b96c9fd4b3770d5b731ed3d207644b2ffec80313
+commit 7a7dbbae303b5c8624ceb82b77745fae509e062e
 Author: Pavel Roskin <proski at gnu.org>
 Date:   Sun Sep 30 14:40:08 2007 -0400
 
@@ -352,7 +413,7 @@
     Signed-off-by: Pavel Roskin <proski at gnu.org>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 6abdf0d9679fb3cc0b2ed539e24cbba058f33043
+commit bd26b5446f3456c144d96edf8b7d13c3dde16a03
 Author: Pavel Roskin <proski at gnu.org>
 Date:   Sun Sep 30 14:40:02 2007 -0400
 
@@ -364,7 +425,7 @@
     Signed-off-by: Pavel Roskin <proski at gnu.org>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 53c4d65cd1f4455b6d0c6ce605a6853e9108c6ae
+commit 6ec4858caee0b303a555fb44eafd5ee439f8b4ce
 Author: Pavel Roskin <proski at gnu.org>
 Date:   Sun Sep 30 14:39:55 2007 -0400
 
@@ -375,7 +436,7 @@
     Signed-off-by: Pavel Roskin <proski at gnu.org>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 2a000a0fb3a21674791023759e24e1bdc3c197ef
+commit c86491d05421636e1fa706266b0f7ad2aee1a2bd
 Author: Pavel Roskin <proski at gnu.org>
 Date:   Sun Sep 30 14:39:49 2007 -0400
 
@@ -387,7 +448,7 @@
     Signed-off-by: Pavel Roskin <proski at gnu.org>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 59268149e41b94bc2bd3554fcd12d238e01bdc07
+commit 3e63eb48e4c32f46296181356dc6a18987f5114e
 Author: Pavel Roskin <proski at gnu.org>
 Date:   Sun Sep 30 14:39:42 2007 -0400
 
@@ -398,7 +459,7 @@
     Signed-off-by: Pavel Roskin <proski at gnu.org>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 206f30d4d21565358128aa8ca210d518797ba285
+commit 3326a622746fb6569613b88322dfb345154c88b7
 Author: Pavel Roskin <proski at gnu.org>
 Date:   Sun Sep 30 14:39:36 2007 -0400
 
@@ -409,7 +470,7 @@
     Signed-off-by: Pavel Roskin <proski at gnu.org>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit afd74d244ce1d869e82758c650f49a867501762f
+commit 9514c2fcf98ff2f9fb6dd559a26e6d8f85ecaa76
 Author: Pavel Roskin <proski at gnu.org>
 Date:   Sun Sep 30 14:39:30 2007 -0400
 
@@ -418,7 +479,7 @@
     Signed-off-by: Pavel Roskin <proski at gnu.org>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 2235301c13ec2c6367ef129477be8967631a436f
+commit db516e461cf2d51b7175c456418bea3555b467a4
 Author: Pavel Roskin <proski at gnu.org>
 Date:   Sun Sep 30 14:39:23 2007 -0400
 
@@ -429,7 +490,7 @@
     Signed-off-by: Pavel Roskin <proski at gnu.org>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit a38e0e268f2219660c91a3813d11c1440cb75faf
+commit eb1488ce769156c9478116c90c004d433103c4ee
 Author: Pavel Roskin <proski at gnu.org>
 Date:   Sun Sep 30 14:39:17 2007 -0400
 
@@ -441,7 +502,7 @@
     Signed-off-by: Pavel Roskin <proski at gnu.org>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 451c1cd7fcdad82175c80fb0e3e4a0568b41c17a
+commit c1bbdd6462b3c5f8477372766282c1d25f9a37d6
 Author: Pavel Roskin <proski at gnu.org>
 Date:   Sun Sep 30 14:39:11 2007 -0400
 
@@ -453,7 +514,7 @@
     Signed-off-by: Pavel Roskin <proski at gnu.org>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 447c17aaf1833217f82b97be42b333c72b966db2
+commit ecfd0aeb3ffd5429a0761d63204ee0e1aa22bf80
 Author: Pavel Roskin <proski at gnu.org>
 Date:   Sun Sep 30 14:39:04 2007 -0400
 
@@ -465,7 +526,7 @@
     Signed-off-by: Pavel Roskin <proski at gnu.org>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 951329488d45d11d25914b4da0ab93f94d72582d
+commit 515128d684f9fdd512d6e8779ea424cba713730a
 Author: Pavel Roskin <proski at gnu.org>
 Date:   Sun Sep 30 14:38:58 2007 -0400
 
@@ -474,7 +535,7 @@
     Signed-off-by: Pavel Roskin <proski at gnu.org>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit ae5f9aab3f18f4dcb9a83e490996990711c53cb4
+commit 789875f9bb6e33a70a67ff9c1e52c23d5cddf55c
 Author: Pavel Roskin <proski at gnu.org>
 Date:   Sun Sep 30 14:38:51 2007 -0400
 
@@ -485,7 +546,7 @@
     Signed-off-by: Pavel Roskin <proski at gnu.org>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 3086da15d597fb24b7254c4e638b380597e7f7c0
+commit 3901e25c5af3c3671a3a909de1b8ac7daff1bd74
 Author: Pavel Roskin <proski at gnu.org>
 Date:   Sun Sep 30 14:38:45 2007 -0400
 
@@ -494,7 +555,7 @@
     Signed-off-by: Pavel Roskin <proski at gnu.org>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit f6ea5e4633ef565282f4fdfd6efb4fce47ba63e6
+commit 9616128c0fca961737eae21eb70d65ec5ae88f94
 Author: Pavel Roskin <proski at gnu.org>
 Date:   Sat Sep 1 00:37:34 2007 -0400
 
@@ -505,7 +566,7 @@
     Signed-off-by: Pavel Roskin <proski at gnu.org>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 27147842aa12fb6f3628c8b7bfe0d1e9e41ee6b8
+commit ad1f189acfcf0fd7fcf9c3e4d3dd516634c834e4
 Author: Pavel Roskin <proski at gnu.org>
 Date:   Sat Sep 1 00:37:29 2007 -0400
 
@@ -517,7 +578,7 @@
     Signed-off-by: Pavel Roskin <proski at gnu.org>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 14a38765e92afa44f94b78911cb5f1d4bc717a29
+commit 6f6c011d64487eedba946378e8fd996dabcc0b10
 Author: Pavel Roskin <proski at gnu.org>
 Date:   Sat Sep 1 00:37:23 2007 -0400
 
@@ -528,7 +589,7 @@
     Signed-off-by: Pavel Roskin <proski at gnu.org>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit b72a145cc8352a033cffd36e7edd3afc5ab8c692
+commit 977a28d972491da99f2a13c2e2c37d8d5604f8e4
 Author: Pavel Roskin <proski at gnu.org>
 Date:   Sat Sep 1 00:37:17 2007 -0400
 
@@ -537,7 +598,7 @@
     Signed-off-by: Pavel Roskin <proski at gnu.org>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 21b01509a7a669f557fd0ef822058624bcaac6a4
+commit 3f62d973c16e75f2d4120519779950a24d2a9c9a
 Author: Pavel Roskin <proski at gnu.org>
 Date:   Sat Sep 1 00:37:11 2007 -0400
 
@@ -546,7 +607,7 @@
     Signed-off-by: Pavel Roskin <proski at gnu.org>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 798293c1bbfc815ed7acd6b5390226292bbad05c
+commit cc34a2af9be308c433c2ca6612f2752ce8467db9
 Author: Pavel Roskin <proski at gnu.org>
 Date:   Sat Sep 1 00:37:06 2007 -0400
 
@@ -555,7 +616,7 @@
     Signed-off-by: Pavel Roskin <proski at gnu.org>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 99de835fbdf7d9987511a3ffef63685edeb256f8
+commit d2e491a0392069876c419f46ee1da2a3380e046b
 Author: Pavel Roskin <proski at gnu.org>
 Date:   Sat Sep 1 00:37:00 2007 -0400
 
@@ -564,7 +625,7 @@
     Signed-off-by: Pavel Roskin <proski at gnu.org>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit dc15d751590deb46a8f1aee782bc4f66a811ba58
+commit 7a01e11163335053670163cbf0db4cc5e3511c89
 Author: Pavel Roskin <proski at gnu.org>
 Date:   Sat Sep 1 00:36:54 2007 -0400
 
@@ -576,7 +637,7 @@
     Signed-off-by: Pavel Roskin <proski at gnu.org>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit ec943e753321c78047b5e70d846deed79e3d7e0d
+commit cb1a31d4c741f65ec00be46240abb67e6c926036
 Author: Pavel Roskin <proski at gnu.org>
 Date:   Sat Sep 1 00:36:49 2007 -0400
 
@@ -585,7 +646,7 @@
     Signed-off-by: Pavel Roskin <proski at gnu.org>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 474a3bd835a1d6ce0567b6f0ce71ce17520edf85
+commit f57a2fd0100b9a8c3edefeaa243b6f840074a3a2
 Author: Pavel Roskin <proski at gnu.org>
 Date:   Sat Sep 1 00:36:43 2007 -0400
 
@@ -597,7 +658,7 @@
     Signed-off-by: Pavel Roskin <proski at gnu.org>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit e5d3864054c7bae4bde6681148db5fe293d3972f
+commit 114507c08d819e2228d35919183a4c28d624da1d
 Author: Pavel Roskin <proski at gnu.org>
 Date:   Sat Sep 1 00:36:37 2007 -0400
 
@@ -606,7 +667,7 @@
     Signed-off-by: Pavel Roskin <proski at gnu.org>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 020e78ae379a4153b7c87aaeffca9d6694f0badb
+commit 5dc64efb69645a7bc8546a10f2b84318f2324042
 Author: Pavel Roskin <proski at gnu.org>
 Date:   Sat Sep 1 00:36:31 2007 -0400
 
@@ -623,7 +684,7 @@
     Signed-off-by: Pavel Roskin <proski at gnu.org>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 83d03b994903ffe7f6ab0b540780852412387030
+commit 50f02f8f2a7a142fdd06050c62f917579879ee74
 Author: Pavel Roskin <proski at gnu.org>
 Date:   Sat Sep 1 00:36:26 2007 -0400
 
@@ -634,7 +695,7 @@
     Signed-off-by: Pavel Roskin <proski at gnu.org>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 2510182b5f69324e37869cfee1d9b78c5a1c8cfe
+commit 8064cd0e0d5c3924cf126d345a4e29102b13499a
 Author: Pavel Roskin <proski at gnu.org>
 Date:   Sat Sep 1 00:36:20 2007 -0400
 
@@ -647,7 +708,7 @@
     Signed-off-by: Pavel Roskin <proski at gnu.org>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit eb542472fb6621bed0d9a176e62ec261e162b3ac
+commit 53259a85aaf0282d7d3a659c36389fdf28d1fa21
 Author: Pavel Roskin <proski at gnu.org>
 Date:   Sat Sep 1 00:36:14 2007 -0400
 
@@ -658,7 +719,7 @@
     Signed-off-by: Pavel Roskin <proski at gnu.org>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 0c1af75ef1a71060ddd0e32311b058feaa63ed23
+commit 79370642087659eed3ea51e78901f5e92b1df6be
 Author: Pavel Roskin <proski at gnu.org>
 Date:   Sat Sep 1 00:36:09 2007 -0400
 
@@ -670,7 +731,7 @@
     Signed-off-by: Pavel Roskin <proski at gnu.org>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 71734a46b9d85b85b4e8672461f321f39e48b4aa
+commit 62b2450ba7563d2c316f19af7f30568c52dcfac3
 Author: Pavel Roskin <proski at gnu.org>
 Date:   Sat Sep 1 00:36:03 2007 -0400
 
@@ -679,7 +740,7 @@
     Signed-off-by: Pavel Roskin <proski at gnu.org>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 3b19b79d75b5fa2746a277f52abf2690fe1a43f1
+commit fa5645d111a15b4cbc2d1b036c3f4b41611f9bc1
 Author: Pavel Roskin <proski at gnu.org>
 Date:   Sat Sep 1 00:35:57 2007 -0400
 
@@ -692,7 +753,7 @@
     Signed-off-by: Pavel Roskin <proski at gnu.org>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 76403fd6c014238c564b38d9052298fc9e2a5078
+commit 780776a7a28950ef8e566651c10ab5a95aea4884
 Author: Pavel Roskin <proski at gnu.org>
 Date:   Sat Sep 1 00:35:52 2007 -0400
 
@@ -704,7 +765,7 @@
     Signed-off-by: Pavel Roskin <proski at gnu.org>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit c56dfaaaada275f4a5c3cdef3dba3e6c714ce03f
+commit 5b3be54e08d28f2ed6da8b876bba3737bad5942b
 Author: Pavel Roskin <proski at gnu.org>
 Date:   Sat Sep 1 00:35:46 2007 -0400
 
@@ -716,7 +777,7 @@
     Signed-off-by: Pavel Roskin <proski at gnu.org>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit c8a13ceeddd58a0c304da7eb8578e44197edad38
+commit 587b2c8ee7b15d588f773301bad51080832a7e16
 Author: Pavel Roskin <proski at gnu.org>
 Date:   Sat Sep 1 00:35:40 2007 -0400
 
@@ -725,7 +786,7 @@
     Signed-off-by: Pavel Roskin <proski at gnu.org>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit ca2c72f021bef2fbb8c2c56e6d0650ba7891f7ca
+commit 08bc3de996e05450fa0176a17679fcebc24139bf
 Author: Pavel Roskin <proski at gnu.org>
 Date:   Sat Sep 1 00:35:34 2007 -0400
 
@@ -737,7 +798,7 @@
     Signed-off-by: Pavel Roskin <proski at gnu.org>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 1c4f1ca9448b9300e484e39d57882a7ae38a5729
+commit 1089c6bbad5d991c7e12ed02c19b32751b3ddeea
 Author: Pavel Roskin <proski at gnu.org>
 Date:   Sat Sep 1 00:35:29 2007 -0400
 
@@ -749,7 +810,7 @@
     Signed-off-by: Pavel Roskin <proski at gnu.org>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit fef6c2352ca33980d9aba9232b70aeecace2a134
+commit 1e8d1ad6860f22fc65e662b5e65dde2e86731e3a
 Author: Pavel Roskin <proski at gnu.org>
 Date:   Sat Sep 1 00:35:23 2007 -0400
 
@@ -760,7 +821,7 @@
     Signed-off-by: Pavel Roskin <proski at gnu.org>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit aa7b9455703286c9823bcbd0a55f3418a0a1b47a
+commit 36fa01418f1e67b47e4bcbe06fde764f7d135b7e
 Author: Pavel Roskin <proski at gnu.org>
 Date:   Sat Sep 1 00:35:17 2007 -0400
 
@@ -769,7 +830,7 @@
     Signed-off-by: Pavel Roskin <proski at gnu.org>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 9c13ed40aeed909e386950c302f6d9c130a92b2a
+commit 13c7446d6f3bce0beea750c949f80f24d87dac4d
 Author: Pavel Roskin <proski at gnu.org>
 Date:   Sat Sep 1 00:35:11 2007 -0400
 
@@ -781,7 +842,7 @@
     Signed-off-by: Pavel Roskin <proski at gnu.org>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 8a2cb93b3bfc2c23a394f5e4fc8dd6837503640a
+commit 842e0f3649c89ef024fdd700a797b8403f2f06a1
 Author: Pavel Roskin <proski at gnu.org>
 Date:   Sat Sep 1 00:35:06 2007 -0400
 
@@ -792,7 +853,7 @@
     Signed-off-by: Pavel Roskin <proski at gnu.org>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 5c777c0514de7cbc6652f10ad55feab36b13d21b
+commit ee19eafed18f2f49a05cfe8e66dc493becf1c964
 Author: Pavel Roskin <proski at gnu.org>
 Date:   Sat Sep 1 00:35:00 2007 -0400
 
@@ -804,7 +865,7 @@
     Signed-off-by: Pavel Roskin <proski at gnu.org>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 10bbb7977ec0cbea6087d30af14147516a5eeac5
+commit 42e93794dbed231c784dcc300180c7608987dce2
 Author: Pavel Roskin <proski at gnu.org>
 Date:   Sat Sep 1 00:34:54 2007 -0400
 
@@ -816,7 +877,7 @@
     Signed-off-by: Pavel Roskin <proski at gnu.org>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 2646301bdd06efe9677bb2ef96acc9c450cf1af8
+commit c478ce6e9b5d2ddf7207c1bcc056e6f0b06da59a
 Author: Pavel Roskin <proski at gnu.org>
 Date:   Sat Sep 1 00:34:49 2007 -0400
 
@@ -825,7 +886,7 @@
     Signed-off-by: Pavel Roskin <proski at gnu.org>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 0a9cfd63f1773ce2196d15d5ff1214c3c693d8a7
+commit 3375cdeed9e742a9db01d6bb1dcec3069617563b
 Author: Pavel Roskin <proski at gnu.org>
 Date:   Sat Sep 1 00:34:43 2007 -0400
 
@@ -834,7 +895,7 @@
     Signed-off-by: Pavel Roskin <proski at gnu.org>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 684ad32c3e727b65066a896124ed73834f14b087
+commit 39645cb583a21b16bb8040e8a37c91978cffc6a0
 Author: Pavel Roskin <proski at gnu.org>
 Date:   Sat Sep 1 00:34:37 2007 -0400
 
@@ -843,7 +904,7 @@
     Signed-off-by: Pavel Roskin <proski at gnu.org>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit cb9222a5c85ff3634475f04a7949dc7b966c1902
+commit 9abffbeb930a2d7e102c22ea0cfc32974582cb35
 Author: Pavel Roskin <proski at gnu.org>
 Date:   Sat Sep 1 00:34:31 2007 -0400
 
@@ -852,7 +913,7 @@
     Signed-off-by: Pavel Roskin <proski at gnu.org>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 92315ab89a2ffffcb5ef24554489b06e322ea17c
+commit 28c14e6f772da88fe1727b4537c056605abb111d
 Author: Pavel Roskin <proski at gnu.org>
 Date:   Sat Sep 1 00:34:26 2007 -0400
 
@@ -861,7 +922,7 @@
     Signed-off-by: Pavel Roskin <proski at gnu.org>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 46211c37a56499d49829d8db2c230712d6053790
+commit b57294f30f7cd0b0ccb9c412a2c2ba35072de25f
 Author: Pavel Roskin <proski at gnu.org>
 Date:   Sat Sep 1 00:34:20 2007 -0400
 
@@ -875,7 +936,7 @@
     Signed-off-by: Pavel Roskin <proski at gnu.org>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit cfc3a1a100a86079980e814674004793ad161390
+commit ce0262965d297f0c3df6b36cb60b5ec8061e823c
 Author: Pavel Roskin <proski at gnu.org>
 Date:   Thu Aug 23 14:40:17 2007 -0400
 
@@ -892,10 +953,10 @@
     Signed-off-by: Pavel Roskin <proski at gnu.org>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-diff -up linux-2.6.24.noarch/MAINTAINERS.orig linux-2.6.24.noarch/MAINTAINERS
---- linux-2.6.24.noarch/MAINTAINERS.orig	2008-02-27 20:56:07.000000000 -0500
-+++ linux-2.6.24.noarch/MAINTAINERS	2008-02-27 20:56:14.000000000 -0500
-@@ -725,6 +725,15 @@ W:	http://www.thekelleys.org.uk/atmel
+diff -up linux-2.6.25.noarch/MAINTAINERS.orig linux-2.6.25.noarch/MAINTAINERS
+--- linux-2.6.25.noarch/MAINTAINERS.orig	2008-04-16 22:49:44.000000000 -0400
++++ linux-2.6.25.noarch/MAINTAINERS	2008-05-19 17:53:23.000000000 -0400
+@@ -740,6 +740,15 @@ W:	http://www.thekelleys.org.uk/atmel
  W:	http://atmelwlandriver.sourceforge.net/
  S:	Maintained
  
@@ -911,9 +972,9 @@
  AUDIT SUBSYSTEM
  P:	David Woodhouse
  M:	dwmw2 at infradead.org
-diff -up /dev/null linux-2.6.24.noarch/drivers/net/wireless/at76_usb.h
---- /dev/null	2008-02-27 08:31:30.805858387 -0500
-+++ linux-2.6.24.noarch/drivers/net/wireless/at76_usb.h	2008-02-27 20:56:23.000000000 -0500
+diff -up /dev/null linux-2.6.25.noarch/drivers/net/wireless/at76_usb.h
+--- /dev/null	2008-05-19 07:57:11.730003501 -0400
++++ linux-2.6.25.noarch/drivers/net/wireless/at76_usb.h	2008-05-19 17:53:23.000000000 -0400
 @@ -0,0 +1,464 @@
 +/*
 + * Copyright (c) 2002,2003 Oliver Kurth
@@ -1379,9 +1440,9 @@
 +#define MAX_PADDING_SIZE	53
 +
 +#endif				/* _AT76_USB_H */
-diff -up linux-2.6.24.noarch/drivers/net/wireless/Makefile.orig linux-2.6.24.noarch/drivers/net/wireless/Makefile
---- linux-2.6.24.noarch/drivers/net/wireless/Makefile.orig	2008-02-27 20:56:07.000000000 -0500
-+++ linux-2.6.24.noarch/drivers/net/wireless/Makefile	2008-02-27 20:56:14.000000000 -0500
+diff -up linux-2.6.25.noarch/drivers/net/wireless/Makefile.orig linux-2.6.25.noarch/drivers/net/wireless/Makefile
+--- linux-2.6.25.noarch/drivers/net/wireless/Makefile.orig	2008-05-19 17:52:43.000000000 -0400
++++ linux-2.6.25.noarch/drivers/net/wireless/Makefile	2008-05-19 17:53:23.000000000 -0400
 @@ -32,6 +32,8 @@ obj-$(CONFIG_ATMEL)             += atmel
  obj-$(CONFIG_PCI_ATMEL)         += atmel_pci.o 
  obj-$(CONFIG_PCMCIA_ATMEL)      += atmel_cs.o
@@ -1391,10 +1452,10 @@
  obj-$(CONFIG_PRISM54)		+= prism54/
  
  obj-$(CONFIG_HOSTAP)		+= hostap/
-diff -up /dev/null linux-2.6.24.noarch/drivers/net/wireless/at76_usb.c
---- /dev/null	2008-02-27 08:31:30.805858387 -0500
-+++ linux-2.6.24.noarch/drivers/net/wireless/at76_usb.c	2008-02-27 20:56:23.000000000 -0500
-@@ -0,0 +1,2518 @@
+diff -up /dev/null linux-2.6.25.noarch/drivers/net/wireless/at76_usb.c
+--- /dev/null	2008-05-19 07:57:11.730003501 -0400
++++ linux-2.6.25.noarch/drivers/net/wireless/at76_usb.c	2008-05-19 17:53:24.000000000 -0400
+@@ -0,0 +1,2519 @@
 +/*
 + * at76c503/at76c505 USB driver
 + *
@@ -2996,7 +3057,7 @@
 +	at76_dbg_dump(DBG_RX_DATA, priv->rx_skb->data,
 +		      priv->rx_skb->len, "RX: len=%d", priv->rx_skb->len);
 +
-+	rx_status.ssi = buf->rssi;
++	rx_status.signal = buf->rssi;
 +	rx_status.flag |= RX_FLAG_DECRYPTED;
 +	rx_status.flag |= RX_FLAG_IV_STRIPPED;
 +
@@ -3670,7 +3731,8 @@
 +
 +	/* mac80211 initialisation */
 +	priv->hw->wiphy->bands[IEEE80211_BAND_2GHZ] = &at76_supported_band;
-+	priv->hw->flags = IEEE80211_HW_RX_INCLUDES_FCS;
++	priv->hw->flags = IEEE80211_HW_RX_INCLUDES_FCS |
++			  IEEE80211_HW_SIGNAL_UNSPEC;
 +
 +	SET_IEEE80211_DEV(priv->hw, &interface->dev);
 +	SET_IEEE80211_PERM_ADDR(priv->hw, priv->mac_addr);
@@ -3913,10 +3975,10 @@
 +MODULE_AUTHOR("Kalle Valo <kalle.valo at iki.fi>");
 +MODULE_DESCRIPTION(DRIVER_DESC);
 +MODULE_LICENSE("GPL");
-diff -up linux-2.6.24.noarch/drivers/net/wireless/Kconfig.orig linux-2.6.24.noarch/drivers/net/wireless/Kconfig
---- linux-2.6.24.noarch/drivers/net/wireless/Kconfig.orig	2008-02-27 20:56:07.000000000 -0500
-+++ linux-2.6.24.noarch/drivers/net/wireless/Kconfig	2008-02-27 20:56:23.000000000 -0500
-@@ -457,6 +457,14 @@ config PCMCIA_ATMEL
+diff -up linux-2.6.25.noarch/drivers/net/wireless/Kconfig.orig linux-2.6.25.noarch/drivers/net/wireless/Kconfig
+--- linux-2.6.25.noarch/drivers/net/wireless/Kconfig.orig	2008-05-19 17:52:43.000000000 -0400
++++ linux-2.6.25.noarch/drivers/net/wireless/Kconfig	2008-05-19 17:53:24.000000000 -0400
+@@ -456,6 +456,14 @@ config PCMCIA_ATMEL
  	  Enable support for PCMCIA cards containing the
  	  Atmel at76c502 and at76c504 chips.
  

linux-2.6-lirc.patch:

Index: linux-2.6-lirc.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-8/linux-2.6-lirc.patch,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- linux-2.6-lirc.patch	11 Jan 2008 22:20:56 -0000	1.4
+++ linux-2.6-lirc.patch	21 May 2008 21:22:40 -0000	1.5
@@ -1,43 +1,8 @@
-Linux Infrared Remote Control drivers (http://lirc.org/)
-
-Signed-off-by: Jarod Wilson <jwilson at redhat.com>
-
- drivers/input/Kconfig                 |    2 +
- drivers/input/Makefile                |    1 +
- drivers/input/lirc/Kconfig            |  127 +++
- drivers/input/lirc/Makefile           |   24 +
- drivers/input/lirc/commandir.c        | 1009 +++++++++++++++++++++++
- drivers/input/lirc/commandir.h        |   41 +
- drivers/input/lirc/kcompat.h          |  150 ++++
- drivers/input/lirc/lirc.h             |  101 +++
- drivers/input/lirc/lirc_atiusb.c      | 1326 ++++++++++++++++++++++++++++++
- drivers/input/lirc/lirc_bt829.c       |  393 +++++++++
- drivers/input/lirc/lirc_cmdir.c       |  605 ++++++++++++++
- drivers/input/lirc/lirc_cmdir.h       |   27 +
- drivers/input/lirc/lirc_dev.c         |  827 +++++++++++++++++++
- drivers/input/lirc/lirc_dev.h         |  264 ++++++
- drivers/input/lirc/lirc_i2c.c         |  671 +++++++++++++++
- drivers/input/lirc/lirc_igorplugusb.c |  624 ++++++++++++++
- drivers/input/lirc/lirc_imon.c        | 1165 +++++++++++++++++++++++++++
- drivers/input/lirc/lirc_it87.c        | 1012 +++++++++++++++++++++++
- drivers/input/lirc/lirc_it87.h        |  116 +++
- drivers/input/lirc/lirc_mceusb.c      |  890 ++++++++++++++++++++
- drivers/input/lirc/lirc_mceusb2.c     | 1042 ++++++++++++++++++++++++
- drivers/input/lirc/lirc_parallel.c    |  745 +++++++++++++++++
- drivers/input/lirc/lirc_parallel.h    |   26 +
- drivers/input/lirc/lirc_pvr150.c      | 1431 +++++++++++++++++++++++++++++++++
- drivers/input/lirc/lirc_sasem.c       |  971 ++++++++++++++++++++++
- drivers/input/lirc/lirc_serial.c      | 1348 +++++++++++++++++++++++++++++++
- drivers/input/lirc/lirc_sir.c         | 1323 ++++++++++++++++++++++++++++++
- drivers/input/lirc/lirc_streamzap.c   |  810 +++++++++++++++++++
- drivers/input/lirc/lirc_ttusbir.c     |  393 +++++++++
- 29 files changed, 17464 insertions(+), 0 deletions(-)
-
 diff --git a/drivers/input/Kconfig b/drivers/input/Kconfig
-index 63512d9..de4b170 100644
+index 9dea14d..d84ac4a 100644
 --- a/drivers/input/Kconfig
 +++ b/drivers/input/Kconfig
-@@ -161,5 +161,7 @@ source "drivers/input/gameport/Kconfig"
+@@ -173,5 +173,7 @@ source "drivers/input/gameport/Kconfig"
  
  endmenu
  
@@ -46,14 +11,16 @@
  endmenu
  
 diff --git a/drivers/input/Makefile b/drivers/input/Makefile
-index 99af903..78b0420 100644
+index 2ae87b1..24bdec1 100644
 --- a/drivers/input/Makefile
 +++ b/drivers/input/Makefile
-@@ -22,3 +22,4 @@ obj-$(CONFIG_INPUT_TABLET)	+= tablet/
+@@ -21,5 +21,6 @@ obj-$(CONFIG_INPUT_JOYSTICK)	+= joystick/
+ obj-$(CONFIG_INPUT_TABLET)	+= tablet/
  obj-$(CONFIG_INPUT_TOUCHSCREEN)	+= touchscreen/
  obj-$(CONFIG_INPUT_MISC)	+= misc/
++obj-$(CONFIG_INPUT_LIRC)	+= lirc/
  
-+obj-$(CONFIG_INPUT_LIRC)       += lirc/
+ obj-$(CONFIG_INPUT_APMPOWER)	+= apm-power.o
 diff --git a/drivers/input/lirc/Kconfig b/drivers/input/lirc/Kconfig
 new file mode 100644
 index 0000000..138e58a

linux-2.6-uvcvideo.patch:

Index: linux-2.6-uvcvideo.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-8/linux-2.6-uvcvideo.patch,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- linux-2.6-uvcvideo.patch	16 Feb 2008 00:47:57 -0000	1.1
+++ linux-2.6-uvcvideo.patch	21 May 2008 21:22:40 -0000	1.2
@@ -1,8 +1,8 @@
 diff --git a/drivers/media/video/Kconfig b/drivers/media/video/Kconfig
-index c9f14bf..19acd71 100644
+index 1832966..1be8bb6 100644
 --- a/drivers/media/video/Kconfig
 +++ b/drivers/media/video/Kconfig
-@@ -718,6 +718,7 @@ source "drivers/media/video/em28xx/Kconfig"
+@@ -737,6 +737,7 @@ source "drivers/media/video/em28xx/Kconfig"
  source "drivers/media/video/usbvision/Kconfig"
  
  source "drivers/media/video/usbvideo/Kconfig"
@@ -11,10 +11,10 @@
  source "drivers/media/video/et61x251/Kconfig"
  
 diff --git a/drivers/media/video/Makefile b/drivers/media/video/Makefile
-index b5a0641..91033cf 100644
+index 3f209b3..dda5db0 100644
 --- a/drivers/media/video/Makefile
 +++ b/drivers/media/video/Makefile
-@@ -123,6 +123,8 @@ obj-$(CONFIG_USB_KONICAWC)      += usbvideo/
+@@ -130,6 +130,8 @@ obj-$(CONFIG_USB_KONICAWC)      += usbvideo/
  obj-$(CONFIG_USB_VICAM)         += usbvideo/
  obj-$(CONFIG_USB_QUICKCAM_MESSENGER)	+= usbvideo/
  
@@ -38,18 +38,18 @@
 +	If unsure, jump up and down and look confused.
 diff --git a/drivers/media/video/uvcvideo/Makefile b/drivers/media/video/uvcvideo/Makefile
 new file mode 100644
-index 0000000..ada681c
+index 0000000..fe006fb
 --- /dev/null
 +++ b/drivers/media/video/uvcvideo/Makefile
 @@ -0,0 +1,2 @@
 +obj-$(CONFIG_USB_UVCVIDEO)	:= uvcvideo.o
-+uvcvideo-objs   := uvc_driver.o uvc_queue.o uvc_v4l2.o uvc_video.o uvc_ctrl.o uvc_status.o uvc_isight.o
++uvcvideo-objs	:= uvc_driver.o uvc_queue.o uvc_v4l2.o uvc_video.o uvc_ctrl.o uvc_status.o uvc_isight.o
 diff --git a/drivers/media/video/uvcvideo/uvc_compat.h b/drivers/media/video/uvcvideo/uvc_compat.h
 new file mode 100644
-index 0000000..321f3d3
+index 0000000..7152561
 --- /dev/null
 +++ b/drivers/media/video/uvcvideo/uvc_compat.h
-@@ -0,0 +1,263 @@
+@@ -0,0 +1,316 @@
 +#ifndef _UVC_COMPAT_H
 +#define _UVC_COMPAT_H
 +
@@ -191,6 +191,51 @@
 +#define VIDIOC_ENUM_FRAMEINTERVALS	_IOWR ('V', 75, struct v4l2_frmivalenum)
 +#endif
 +
++#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,26)
++/*
++ * V4L2 Control identifiers.
++ */
++#define V4L2_CTRL_CLASS_CAMERA 0x009A0000	/* Camera class controls */
++ 
++#define V4L2_CID_POWER_LINE_FREQUENCY		(V4L2_CID_BASE+24) 
++enum v4l2_power_line_frequency {
++	V4L2_CID_POWER_LINE_FREQUENCY_DISABLED	= 0,
++	V4L2_CID_POWER_LINE_FREQUENCY_50HZ	= 1,
++	V4L2_CID_POWER_LINE_FREQUENCY_60HZ	= 2,
++};
++
++#define V4L2_CID_HUE_AUTO			(V4L2_CID_BASE+25) 
++#define V4L2_CID_WHITE_BALANCE_TEMPERATURE	(V4L2_CID_BASE+26) 
++#define V4L2_CID_SHARPNESS			(V4L2_CID_BASE+27) 
++#define V4L2_CID_BACKLIGHT_COMPENSATION 	(V4L2_CID_BASE+28) 
++
++#define V4L2_CID_CAMERA_CLASS_BASE 		(V4L2_CTRL_CLASS_CAMERA | 0x900)
++#define V4L2_CID_CAMERA_CLASS 			(V4L2_CTRL_CLASS_CAMERA | 1)
++
++#define V4L2_CID_EXPOSURE_AUTO			(V4L2_CID_CAMERA_CLASS_BASE+1)
++enum  v4l2_exposure_auto_type {
++	V4L2_EXPOSURE_MANUAL = 0,
++	V4L2_EXPOSURE_AUTO = 1,
++	V4L2_EXPOSURE_SHUTTER_PRIORITY = 2,
++	V4L2_EXPOSURE_APERTURE_PRIORITY = 3
++};
++#define V4L2_CID_EXPOSURE_ABSOLUTE		(V4L2_CID_CAMERA_CLASS_BASE+2)
++#define V4L2_CID_EXPOSURE_AUTO_PRIORITY		(V4L2_CID_CAMERA_CLASS_BASE+3)
++
++#define V4L2_CID_PAN_RELATIVE			(V4L2_CID_CAMERA_CLASS_BASE+4)
++#define V4L2_CID_TILT_RELATIVE			(V4L2_CID_CAMERA_CLASS_BASE+5)
++#define V4L2_CID_PAN_RESET			(V4L2_CID_CAMERA_CLASS_BASE+6)
++#define V4L2_CID_TILT_RESET			(V4L2_CID_CAMERA_CLASS_BASE+7)
++
++#define V4L2_CID_PAN_ABSOLUTE			(V4L2_CID_CAMERA_CLASS_BASE+8)
++#define V4L2_CID_TILT_ABSOLUTE			(V4L2_CID_CAMERA_CLASS_BASE+9)
++
++#define V4L2_CID_FOCUS_ABSOLUTE			(V4L2_CID_CAMERA_CLASS_BASE+10)
++#define V4L2_CID_FOCUS_RELATIVE			(V4L2_CID_CAMERA_CLASS_BASE+11)
++#define V4L2_CID_FOCUS_AUTO			(V4L2_CID_CAMERA_CLASS_BASE+12)
++ 
++#endif
++
 +#ifdef __KERNEL__
 +
 +#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,14)
@@ -309,16 +354,24 @@
 +
 +#endif
 +
++#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,22)
++/*
++ * Linked list API
++ */
++#define list_first_entry(ptr, type, member) \
++	list_entry((ptr)->next, type, member)
++#endif
++
 +#endif /* __KERNEL__ */
 +
 +#endif /* _UVC_COMPAT_H */
 +
 diff --git a/drivers/media/video/uvcvideo/uvc_ctrl.c b/drivers/media/video/uvcvideo/uvc_ctrl.c
 new file mode 100644
-index 0000000..8b7caf9
+index 0000000..dce576b
 --- /dev/null
 +++ b/drivers/media/video/uvcvideo/uvc_ctrl.c
-@@ -0,0 +1,1169 @@
+@@ -0,0 +1,1245 @@
 +/*
 + *      uvcvideo.c  --  USB Video Class driver
 + *
@@ -493,6 +546,14 @@
 +		.flags		= UVC_CONTROL_SET_CUR | UVC_CONTROL_GET_RANGE
 +				| UVC_CONTROL_RESTORE | UVC_CONTROL_AUTO_UPDATE,
 +	},
++	{
++		.entity		= UVC_GUID_UVC_PROCESSING,
++		.selector	= PU_WHITE_BALANCE_COMPONENT_CONTROL,
++		.index		= 7,
++		.size		= 4,
++		.flags		= UVC_CONTROL_SET_CUR | UVC_CONTROL_GET_RANGE
++				| UVC_CONTROL_RESTORE | UVC_CONTROL_AUTO_UPDATE,
++	},
 +};
 +
 +static struct uvc_menu_info power_line_frequency_controls[] = {
@@ -644,7 +705,7 @@
 +		.data_type	= UVC_CTRL_DATA_TYPE_UNSIGNED,
 +	},
 +	{
-+		.id		= V4L2_CID_WHITE_BALANCE_TEMPERATURE_AUTO,
++		.id		= V4L2_CID_AUTO_WHITE_BALANCE,
 +		.name		= "White Balance Temperature, Auto",
 +		.entity		= UVC_GUID_UVC_PROCESSING,
 +		.selector	= PU_WHITE_BALANCE_TEMPERATURE_AUTO_CONTROL,
@@ -664,6 +725,36 @@
 +		.data_type	= UVC_CTRL_DATA_TYPE_UNSIGNED,
 +	},
 +	{
++		.id		= V4L2_CID_AUTO_WHITE_BALANCE,
++		.name		= "White Balance Component, Auto",
++		.entity		= UVC_GUID_UVC_PROCESSING,
++		.selector	= PU_WHITE_BALANCE_COMPONENT_AUTO_CONTROL,
++		.size		= 1,
++		.offset		= 0,
++		.v4l2_type	= V4L2_CTRL_TYPE_BOOLEAN,
++		.data_type	= UVC_CTRL_DATA_TYPE_BOOLEAN,
++	},
++	{
++		.id		= V4L2_CID_BLUE_BALANCE,
++		.name		= "White Balance Blue Component",
++		.entity		= UVC_GUID_UVC_PROCESSING,
++		.selector	= PU_WHITE_BALANCE_COMPONENT_CONTROL,
++		.size		= 16,
++		.offset		= 0,
++		.v4l2_type	= V4L2_CTRL_TYPE_INTEGER,
++		.data_type	= UVC_CTRL_DATA_TYPE_SIGNED,
++	},
++	{
++		.id		= V4L2_CID_RED_BALANCE,
++		.name		= "White Balance Red Component",
++		.entity		= UVC_GUID_UVC_PROCESSING,
++		.selector	= PU_WHITE_BALANCE_COMPONENT_CONTROL,
++		.size		= 16,
++		.offset		= 16,
++		.v4l2_type	= V4L2_CTRL_TYPE_INTEGER,
++		.data_type	= UVC_CTRL_DATA_TYPE_SIGNED,
++	},
++	{
 +		.id		= V4L2_CID_FOCUS_ABSOLUTE,
 +		.name		= "Focus (absolute)",
 +		.entity		= UVC_GUID_UVC_CAMERA,
@@ -857,6 +948,8 @@
 +{
 +	struct uvc_control *ctrl;
 +	struct uvc_control_mapping *mapping;
++	struct uvc_menu_info *menu;
++	unsigned int i;
 +	__u8 data[8];
 +	int ret;
 +
@@ -879,6 +972,23 @@
 +			return ret;
 +		v4l2_ctrl->default_value = uvc_get_le_value(data, mapping);
 +	}
++
++	if (mapping->v4l2_type == V4L2_CTRL_TYPE_MENU) {
++		v4l2_ctrl->minimum = 0;
++		v4l2_ctrl->maximum = mapping->menu_count - 1;
++		v4l2_ctrl->step = 1;
++
++		menu = mapping->menu_info;
++		for (i = 0; i < mapping->menu_count; ++i, ++menu) {
++			if (menu->value == v4l2_ctrl->default_value) {
++				v4l2_ctrl->default_value = i;
++				break;
++			}
++		}
++
++		return 0;
++	}
++
 +	if (ctrl->info->flags & UVC_CONTROL_GET_MIN) {
 +		if ((ret = uvc_query_ctrl(video->dev, GET_MIN, ctrl->entity->id,
 +					video->dev->intfnum, ctrl->info->selector,
@@ -1006,6 +1116,8 @@
 +{
 +	struct uvc_control *ctrl;
 +	struct uvc_control_mapping *mapping;
++	struct uvc_menu_info *menu;
++	unsigned int i;
 +	int ret;
 +
 +	ctrl = uvc_find_control(video, xctrl->id, &mapping);
@@ -1027,6 +1139,16 @@
 +	xctrl->value = uvc_get_le_value(
 +		uvc_ctrl_data(ctrl, UVC_CTRL_DATA_CURRENT), mapping);
 +
++	if (mapping->v4l2_type == V4L2_CTRL_TYPE_MENU) {
++		menu = mapping->menu_info;
++		for (i = 0; i < mapping->menu_count; ++i, ++menu) {
++			if (menu->value == xctrl->value) {
++				xctrl->value = i;
++				break;
++			}
++		}
++	}
++
 +	return 0;
 +}
 +
@@ -1035,12 +1157,19 @@
 +{
 +	struct uvc_control *ctrl;
 +	struct uvc_control_mapping *mapping;
++	s32 value = xctrl->value;
 +	int ret;
 +
 +	ctrl = uvc_find_control(video, xctrl->id, &mapping);
 +	if (ctrl == NULL || (ctrl->info->flags & UVC_CONTROL_SET_CUR) == 0)
 +		return -EINVAL;
 +
++	if (mapping->v4l2_type == V4L2_CTRL_TYPE_MENU) {
++		if (value < 0 || value >= mapping->menu_count)
++			return -EINVAL;
++		value = mapping->menu_info[value].value;
++	}
++
 +	if (!ctrl->loaded && (ctrl->info->size * 8) != mapping->size) {
 +		if ((ctrl->info->flags & UVC_CONTROL_GET_CUR) == 0) {
 +			memset(uvc_ctrl_data(ctrl, UVC_CTRL_DATA_CURRENT),
@@ -1065,7 +1194,7 @@
 +		       ctrl->info->size);
 +	}
 +
-+	uvc_set_le_value(xctrl->value,
++	uvc_set_le_value(value,
 +		uvc_ctrl_data(ctrl, UVC_CTRL_DATA_CURRENT), mapping);
 +
 +	ctrl->dirty = 1;
@@ -1490,10 +1619,10 @@
 +
 diff --git a/drivers/media/video/uvcvideo/uvc_driver.c b/drivers/media/video/uvcvideo/uvc_driver.c
 new file mode 100644
-index 0000000..bd194fb
+index 0000000..6acfce1
 --- /dev/null
 +++ b/drivers/media/video/uvcvideo/uvc_driver.c
-@@ -0,0 +1,1877 @@
+@@ -0,0 +1,1920 @@
 +/*
 + *      uvcvideo.c  --  USB Video Class driver
 + *
@@ -1539,10 +1668,16 @@
 +#endif
 +
 +#include "uvcvideo.h"
++#include "version.h"
 +
 +#define DRIVER_AUTHOR		"Laurent Pinchart <laurent.pinchart at skynet.be>"
 +#define DRIVER_DESC		"USB Video Class driver"
-+#define DRIVER_VERSION		"0.1.0"
++#ifndef DRIVER_VERSION
++#define DRIVER_VERSION		"v0.1.0"
++#endif
++
++static unsigned int uvc_quirks_param = 0;
++unsigned int uvc_trace_param = 0;
 +
 +/* ------------------------------------------------------------------------
 + * Control, formats, ...
@@ -1579,6 +1714,16 @@
 +		.guid		= UVC_GUID_FORMAT_UYVY,
 +		.fcc		= V4L2_PIX_FMT_UYVY,
 +	},
++	{
++		.name		= "Greyscale",
++		.guid		= UVC_GUID_FORMAT_Y800,
++		.fcc		= V4L2_PIX_FMT_GREY,
++	},
++	{
++		.name		= "RGB Bayer",
++		.guid		= UVC_GUID_FORMAT_BY8,
++		.fcc		= V4L2_PIX_FMT_SBGGR8,
++	},
 +};
 +
 +#if 0
@@ -2520,8 +2665,9 @@
 +
 +		case VC_PROCESSING_UNIT:
 +			n = buflen >= 8 ? buffer[7] : 0;
++			p = dev->uvc_version >= 0x0110 ? 10 : 9;
 +
-+			if (buflen < 8 + n) {
++			if (buflen < p + n) {
 +				uvc_trace(UVC_TRACE_DESCR, "device %d videocontrol "
 +				       "interface %d PROCESSING_UNIT error\n", udev->devnum,
 +				       dev->intf->cur_altsetting->desc.bInterfaceNumber);
@@ -2539,7 +2685,8 @@
 +			unit->processing.bControlSize = buffer[7];
 +			unit->processing.bmControls = (__u8*)unit + sizeof *unit;
 +			memcpy(unit->processing.bmControls, &buffer[8], n);
-+			unit->processing.bmVideoStandards = buffer[9+n];
++			if (dev->uvc_version >= 0x0110)
++				unit->processing.bmVideoStandards = buffer[9+n];
 +
 +			if (buffer[8+n] != 0)
 +				usb_string(udev, buffer[8+n], unit->name, sizeof unit->name);
@@ -2919,14 +3066,6 @@
 +	if (vdev == NULL)
 +		return -1;
 +
-+	if (dev->udev->product != NULL)
-+		strncpy(vdev->name, dev->udev->product, sizeof vdev->name);
-+	else
-+		snprintf(vdev->name, sizeof vdev->name,
-+			"UVC Camera (%04x:%04x)",
-+			le16_to_cpu(dev->udev->descriptor.idVendor),
-+			le16_to_cpu(dev->udev->descriptor.idProduct));
-+
 +	/* We already hold a reference to dev->udev. The video device will be
 +	 * unregistered before the reference is released, so we don't need to
 +	 * get another one.
@@ -2937,6 +3076,7 @@
 +	vdev->minor = -1;
 +	vdev->fops = &uvc_fops;
 +	vdev->release = video_device_release;
++	strncpy(vdev->name, dev->name, sizeof vdev->name);
 +
 +	/* Set the driver data before calling video_register_device, otherwise
 +	 * uvc_v4l2_open might race us.
@@ -3030,7 +3170,15 @@
 +	dev->udev = usb_get_dev(udev);
 +	dev->intf = usb_get_intf(intf);
 +	dev->intfnum = intf->cur_altsetting->desc.bInterfaceNumber;
-+	dev->quirks = id->driver_info;
++	dev->quirks = id->driver_info | uvc_quirks_param;
++
++	if (udev->product != NULL)
++		strncpy(dev->name, udev->product, sizeof dev->name);
++	else
++		snprintf(dev->name, sizeof dev->name,
++			"UVC Camera (%04x:%04x)",
++			le16_to_cpu(udev->descriptor.idVendor),
++			le16_to_cpu(udev->descriptor.idProduct));
 +
 +	/* Parse the Video Class control descriptor */
 +	if (uvc_parse_control(dev) < 0) {
@@ -3044,6 +3192,13 @@
 +		le16_to_cpu(udev->descriptor.idVendor),
 +		le16_to_cpu(udev->descriptor.idProduct));
 +
++	if (uvc_quirks_param != 0) {
++		uvc_printk(KERN_INFO, "Forcing device quirks 0x%x by module "
++			"parameter for testing purpose.\n", uvc_quirks_param);
++		uvc_printk(KERN_INFO, "Please report required quirks to the "
++			"linux-uvc-devel mailing list.\n");
++	}
++
 +	/* Initialize controls */
 +	if (uvc_ctrl_init_device(dev) < 0)
 +		goto error;
@@ -3213,14 +3368,6 @@
 +	  .bInterfaceClass	= USB_CLASS_VENDOR_SPEC,
 +	  .bInterfaceSubClass	= 1,
 +	  .bInterfaceProtocol	= 0 },
-+	/* Logitech Quickcam Communicator */
-+	{ .match_flags		= USB_DEVICE_ID_MATCH_DEVICE
-+				| USB_DEVICE_ID_MATCH_INT_INFO,
-+	  .idVendor		= 0x046d,
-+	  .idProduct		= 0x08d7,
-+	  .bInterfaceClass	= USB_CLASS_VENDOR_SPEC,
-+	  .bInterfaceSubClass	= 1,
-+	  .bInterfaceProtocol	= 0 },
 +	/* Logitech Quickcam OEM Dell Notebook */
 +	{ .match_flags		= USB_DEVICE_ID_MATCH_DEVICE
 +				| USB_DEVICE_ID_MATCH_INT_INFO,
@@ -3238,11 +3385,24 @@
 +	  .bInterfaceSubClass	= 1,
 +	  .bInterfaceProtocol	= 0 },
 +	/* Apple Built-In iSight */
-+	{ .match_flags		= USB_DEVICE_ID_MATCH_DEVICE,
++	{ .match_flags          = USB_DEVICE_ID_MATCH_DEVICE
++				| USB_DEVICE_ID_MATCH_INT_INFO,
 +	  .idVendor		= 0x05ac,
 +	  .idProduct		= 0x8501,
++	  .bInterfaceClass      = USB_CLASS_VIDEO,
++	  .bInterfaceSubClass   = 1,
++	  .bInterfaceProtocol   = 0,
 +	  .driver_info 		= UVC_QUIRK_PROBE_MINMAX
 +	                        | UVC_QUIRK_BUILTIN_ISIGHT },
++	/* Genesys Logic USB 2.0 PC Camera */
++	{ .match_flags          = USB_DEVICE_ID_MATCH_DEVICE
++				| USB_DEVICE_ID_MATCH_INT_INFO,
++	  .idVendor             = 0x05e3,
++	  .idProduct            = 0x0505,
++	  .bInterfaceClass      = USB_CLASS_VIDEO,
++	  .bInterfaceSubClass   = 1,
++	  .bInterfaceProtocol   = 0,
++	  .driver_info          = UVC_QUIRK_STREAM_NO_FID },
 +	/* Silicon Motion SM371 */
 +	{ .match_flags		= USB_DEVICE_ID_MATCH_DEVICE
 +				| USB_DEVICE_ID_MATCH_INT_INFO,
@@ -3297,6 +3457,15 @@
 +	  .bInterfaceSubClass	= 1,
 +	  .bInterfaceProtocol	= 0,
 +	  .driver_info		= UVC_QUIRK_PROBE_MINMAX },
++	/* Packard Bell OEM Webcam */
++	{ .match_flags		= USB_DEVICE_ID_MATCH_DEVICE
++				| USB_DEVICE_ID_MATCH_INT_INFO,
++	  .idVendor		= 0x5986,
++	  .idProduct		= 0x0101,
++	  .bInterfaceClass	= USB_CLASS_VIDEO,
++	  .bInterfaceSubClass	= 1,
++	  .bInterfaceProtocol	= 0,
++	  .driver_info		= UVC_QUIRK_PROBE_MINMAX },
 +	/* Acer Crystal Eye webcam */
 +	{ .match_flags		= USB_DEVICE_ID_MATCH_DEVICE
 +				| USB_DEVICE_ID_MATCH_INT_INFO,
@@ -3352,7 +3521,7 @@
 +
 +	result = usb_register(&uvc_driver.driver);
 +	if (result == 0)
-+		printk(KERN_INFO DRIVER_DESC " (v" DRIVER_VERSION ")\n");
++		printk(KERN_INFO DRIVER_DESC " (" DRIVER_VERSION ")\n");
 +	return result;
 +}
 +
@@ -3364,12 +3533,15 @@
 +module_init(uvc_init);
 +module_exit(uvc_cleanup);
 +
-+unsigned int uvc_trace_param = 0;
++module_param_named(quirks, uvc_quirks_param, uint, S_IRUGO|S_IWUSR);
++MODULE_PARM_DESC(quirks, "Forced device quirks");
 +module_param_named(trace, uvc_trace_param, uint, S_IRUGO|S_IWUSR);
++MODULE_PARM_DESC(trace, "Trace level bitmask");
 +
 +MODULE_AUTHOR(DRIVER_AUTHOR);
 +MODULE_DESCRIPTION(DRIVER_DESC);
 +MODULE_LICENSE("GPL");
++MODULE_VERSION(DRIVER_VERSION);
 +
 diff --git a/drivers/media/video/uvcvideo/uvc_isight.c b/drivers/media/video/uvcvideo/uvc_isight.c
 new file mode 100644
@@ -3519,10 +3691,10 @@
 +}
 diff --git a/drivers/media/video/uvcvideo/uvc_queue.c b/drivers/media/video/uvcvideo/uvc_queue.c
 new file mode 100644
-index 0000000..4957109
+index 0000000..d7e4461
 --- /dev/null
 +++ b/drivers/media/video/uvcvideo/uvc_queue.c
-@@ -0,0 +1,414 @@
+@@ -0,0 +1,463 @@
 +/*
 + *      uvcvideo.c  --  USB Video Class driver
 + *
@@ -3705,7 +3877,7 @@
 +	return 0;
 +}
 +
-+void uvc_query_buffer(struct uvc_buffer *buf,
++static void __uvc_query_buffer(struct uvc_buffer *buf,
 +		struct v4l2_buffer *v4l2_buf)
 +{
 +	memcpy(v4l2_buf, &buf->buf, sizeof *v4l2_buf);
@@ -3728,6 +3900,24 @@
 +	}
 +}
 +
++int uvc_query_buffer(struct uvc_video_queue *queue,
++		struct v4l2_buffer *v4l2_buf)
++{
++	int ret = 0;
++
++	mutex_lock(&queue->mutex);
++	if (v4l2_buf->index >= queue->count) {
++		ret = -EINVAL;
++		goto done;
++	}
++
++	__uvc_query_buffer(&queue->buffer[v4l2_buf->index], v4l2_buf);
++
++done:
++       mutex_unlock(&queue->mutex);
++       return ret;
++}
++
 +/*
 + * Queue a video buffer. Attempting to queue a buffer that has already been
 + * queued will return -EINVAL.
@@ -3813,11 +4003,13 @@
 +		goto done;
 +	}
 +
-+	buf = list_entry(queue->mainqueue.next, struct uvc_buffer, stream);
-+	uvc_trace(UVC_TRACE_CAPTURE, "Dequeuing buffer %u.\n", buf->buf.index);
++	buf = list_first_entry(&queue->mainqueue, struct uvc_buffer, stream);
 +	if ((ret = uvc_queue_waiton(buf, nonblocking)) < 0)
 +		goto done;
 +
++	uvc_trace(UVC_TRACE_CAPTURE, "Dequeuing buffer %u (%u, %u bytes).\n",
++		buf->buf.index, buf->state, buf->buf.bytesused);
++
 +	switch (buf->state) {
 +	case UVC_BUF_STATE_ERROR:
 +		uvc_trace(UVC_TRACE_CAPTURE, "[W] Corrupted data "
@@ -3838,7 +4030,7 @@
 +	}
 +
 +	list_del(&buf->stream);
-+	uvc_query_buffer(buf, v4l2_buf);
++	__uvc_query_buffer(buf, v4l2_buf);
 +
 +done:
 +	mutex_unlock(&queue->mutex);
@@ -3846,6 +4038,35 @@
 +}
 +
 +/*
++ * Poll the video queue.
++ *
++ * This function implements video queue polling and is intended to be used by
++ * the device poll handler.
++ */
++unsigned int uvc_queue_poll(struct uvc_video_queue *queue, struct file *file,
++		poll_table *wait)
++{
++	struct uvc_buffer *buf;
++	unsigned int mask = 0;
++
++	mutex_lock(&queue->mutex);
++	if (list_empty(&queue->mainqueue)) {
++		mask |= POLLERR;
++		goto done;
++	}
++	buf = list_first_entry(&queue->mainqueue, struct uvc_buffer, stream);
++
++	poll_wait(file, &buf->wait, wait);
++	if (buf->state == UVC_BUF_STATE_DONE ||
++	    buf->state == UVC_BUF_STATE_ERROR)
++		mask |= POLLIN | POLLRDNORM;
++
++done:
++	mutex_unlock(&queue->mutex);
++	return mask;
++}
++
++/*
 + * Enable or disable the video buffers queue.
 + *
 + * The queue must be enabled before starting video acquisition and must be
@@ -3907,7 +4128,7 @@
 +
 +	spin_lock_irqsave(&queue->irqlock, flags);
 +	while (!list_empty(&queue->irqqueue)) {
-+		buf = list_entry(queue->irqqueue.next, struct uvc_buffer, queue);
++		buf = list_first_entry(&queue->irqqueue, struct uvc_buffer, queue);
 +		list_del(&buf->queue);
 +		buf->state = UVC_BUF_STATE_ERROR;
 +		wake_up(&buf->wait);
@@ -3924,7 +4145,7 @@
 +	spin_lock_irqsave(&queue->irqlock, flags);
 +	list_del(&buf->queue);
 +	if (!list_empty(&queue->irqqueue))
-+		nextbuf = list_entry(queue->irqqueue.next, struct uvc_buffer,
++		nextbuf = list_first_entry(&queue->irqqueue, struct uvc_buffer,
 +					queue);
 +	else
 +		nextbuf = NULL;
@@ -3939,10 +4160,10 @@
 +
 diff --git a/drivers/media/video/uvcvideo/uvc_status.c b/drivers/media/video/uvcvideo/uvc_status.c
 new file mode 100644
-index 0000000..a944152
+index 0000000..4be8de4
 --- /dev/null
 +++ b/drivers/media/video/uvcvideo/uvc_status.c
-@@ -0,0 +1,153 @@
+@@ -0,0 +1,220 @@
 +/*
 + *      uvc_status.c  --  USB Video Class driver
 + *
@@ -3957,10 +4178,72 @@
 + */
 +
 +#include <linux/kernel.h>
++#include <linux/version.h>
++#include <linux/input.h>
 +#include <linux/usb.h>
++#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,18)
++#include <linux/usb_input.h>
++#else
++#include <linux/usb/input.h>
++#endif
 +
 +#include "uvcvideo.h"
 +
++/* --------------------------------------------------------------------------
++ * Input device
++ */
++static int uvc_input_init(struct uvc_device *dev)
++{
++	struct usb_device *udev = dev->udev;
++	struct input_dev *input;
++	char *phys = NULL;
++	int ret;
++
++	input = input_allocate_device();
++	if (input == NULL)
++		return -ENOMEM;
++
++	phys = kmalloc(6 + strlen(udev->bus->bus_name) + strlen(udev->devpath),
++			GFP_KERNEL);
++	if (phys == NULL) {
++		ret = -ENOMEM;
++		goto error;
++	}
++	sprintf(phys, "usb-%s-%s", udev->bus->bus_name, udev->devpath);
++
++	input->name = dev->name;
++	input->phys = phys;
++	usb_to_input_id(udev, &input->id);
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,22)
++	input->dev.parent = &dev->intf->dev;
++#else
++	input->cdev.dev = &dev->intf->dev;
++#endif
++
++	set_bit(EV_KEY, input->evbit);
++	set_bit(BTN_0, input->keybit);
++
++	if ((ret = input_register_device(input)) < 0)
++		goto error;
++
++	dev->input = input;
++	return 0;
++
++error:
++	input_free_device(input);
++	kfree(phys);
++	return ret;
++}
++
++static void uvc_input_cleanup(struct uvc_device *dev)
++{
++	if (dev->input)
++		input_unregister_device(dev->input);
++}
++
++/* --------------------------------------------------------------------------
++ * Status interrupt endpoint
++ */
 +static void uvc_event_streaming(struct uvc_device *dev, __u8 *data, int len)
 +{
 +	if (len < 3) {
@@ -3974,6 +4257,8 @@
 +			return;
 +		uvc_trace(UVC_TRACE_STATUS, "Button (intf %u) %s len %d\n",
 +			data[1], data[3] ? "pressed" : "released", len);
++		if (dev->input)
++			input_report_key(dev->input, BTN_0, data[3]);
 +	} else {
 +		uvc_trace(UVC_TRACE_STATUS, "Stream %u error event %02x %02x "
 +			"len %d.\n", data[1], data[2], data[3], len);
@@ -4055,6 +4340,8 @@
 +	if (ep == NULL)
 +		return 0;
 +
++	uvc_input_init(dev);
++
 +	dev->int_urb = usb_alloc_urb(0, GFP_KERNEL);
 +	if (dev->int_urb == NULL)
 +		return -ENOMEM;
@@ -4080,6 +4367,7 @@
 +{
 +	usb_kill_urb(dev->int_urb);
 +	usb_free_urb(dev->int_urb);
++	uvc_input_cleanup(dev);
 +}
 +
 +int uvc_status_suspend(struct uvc_device *dev)
@@ -4098,10 +4386,10 @@
 +
 diff --git a/drivers/media/video/uvcvideo/uvc_v4l2.c b/drivers/media/video/uvcvideo/uvc_v4l2.c
 new file mode 100644
-index 0000000..fcd2c6e
+index 0000000..c335758
 --- /dev/null
 +++ b/drivers/media/video/uvcvideo/uvc_v4l2.c
-@@ -0,0 +1,1112 @@
+@@ -0,0 +1,1087 @@
 +/*
 + *      uvcvideo.c  --  USB Video Class driver
 + *
@@ -4150,22 +4438,17 @@
 +	struct uvc_menu_info *menu_info;
 +	struct uvc_control_mapping *mapping;
 +	struct uvc_control *ctrl;
-+	__u32 i;
 +
 +	ctrl = uvc_find_control(video, query_menu->id, &mapping);
 +	if (ctrl == NULL || mapping->v4l2_type != V4L2_CTRL_TYPE_MENU)
 +		return -EINVAL;
 +
-+	menu_info = mapping->menu_info;
-+
-+	for (i = 0; i < mapping->menu_count; ++i, ++menu_info) {
-+		if (query_menu->index == menu_info->index) {
-+			strncpy(query_menu->name, menu_info->name, 32);
-+			return 0;
-+		}
-+	}
++	if (query_menu->index >= mapping->menu_count)
++		return -EINVAL;
 +
-+	return -EINVAL;
++	menu_info = &mapping->menu_info[query_menu->index];
++	strncpy(query_menu->name, menu_info->name, 32);
++	return 0;
 +}
 +
 +/*
@@ -4706,7 +4989,7 @@
 +		if (selector == NULL) {
 +			if (index != 0)
 +				return -EINVAL;
-+			iterm = list_entry(video->iterms.next,
++			iterm = list_first_entry(&video->iterms,
 +					struct uvc_entity, chain);
 +			pin = iterm->id;
 +		} else if (pin < selector->selector.bNrInPins) {
@@ -4949,19 +5232,15 @@
 +	case VIDIOC_QUERYBUF:
 +	{
 +		struct v4l2_buffer *buf = arg;
-+		struct uvc_buffer *ubuf;
 +
-+		if (buf->type != V4L2_BUF_TYPE_VIDEO_CAPTURE ||
-+		    buf->index >= video->queue.count)
++		if (buf->type != V4L2_BUF_TYPE_VIDEO_CAPTURE)
 +			return -EINVAL;
 +
 +		if (!uvc_has_privileges(handle))
 +			return -EBUSY;
 +
-+		ubuf = &video->queue.buffer[buf->index];
-+		uvc_query_buffer(ubuf, buf);
++		return uvc_query_buffer(&video->queue, buf);
 +	}
-+		break;
 +
 +	case VIDIOC_QBUF:
 +		if (!uvc_has_privileges(handle))
@@ -5178,26 +5457,10 @@
 +{
 +	struct video_device *vdev = video_devdata(file);
 +	struct uvc_video_device *video = video_get_drvdata(vdev);
-+	struct uvc_buffer *buf;
-+	unsigned int mask = 0;
 +
 +	uvc_trace(UVC_TRACE_CALLS, "uvc_v4l2_poll\n");
 +
-+	mutex_lock(&video->queue.mutex);
-+	if (list_empty(&video->queue.mainqueue)) {
-+		mask |= POLLERR;
-+		goto done;
-+	}
-+	buf = list_entry(video->queue.mainqueue.next, struct uvc_buffer, stream);
-+
-+	poll_wait(file, &buf->wait, wait);
-+	if (buf->state == UVC_BUF_STATE_DONE ||
-+	    buf->state == UVC_BUF_STATE_ERROR)
-+		mask |= POLLIN | POLLRDNORM;
-+
-+done:
-+	mutex_unlock(&video->queue.mutex);
-+	return mask;
++	return uvc_queue_poll(&video->queue, file, wait);
 +}
 +
 +struct file_operations uvc_fops = {
@@ -5216,10 +5479,10 @@
 +
 diff --git a/drivers/media/video/uvcvideo/uvc_video.c b/drivers/media/video/uvcvideo/uvc_video.c
 new file mode 100644
-index 0000000..2f33732
+index 0000000..cb89a7a
 --- /dev/null
 +++ b/drivers/media/video/uvcvideo/uvc_video.c
-@@ -0,0 +1,913 @@
+@@ -0,0 +1,922 @@
 +/*
 + *      uvcvideo.c  --  USB Video Class driver
 + *
@@ -5242,6 +5505,7 @@
 +#include <linux/vmalloc.h>
 +#include <linux/wait.h>
 +#include <asm/atomic.h>
++#include <asm/unaligned.h>
 +
 +#if LINUX_VERSION_CODE > KERNEL_VERSION(2,6,15)
 +#include <media/v4l2-common.h>
@@ -5309,11 +5573,14 @@
 +	ctrl->wCompQuality = le16_to_cpup((__le16*)&data[12]);
 +	ctrl->wCompWindowSize = le16_to_cpup((__le16*)&data[14]);
 +	ctrl->wDelay = le16_to_cpup((__le16*)&data[16]);
-+	ctrl->dwMaxVideoFrameSize = le32_to_cpup((__le32*)&data[18]);
-+	ctrl->dwMaxPayloadTransferSize = le32_to_cpup((__le32*)&data[22]);
++	ctrl->dwMaxVideoFrameSize =
++		le32_to_cpu(get_unaligned((__le32*)&data[18]));
++	ctrl->dwMaxPayloadTransferSize =
++		le32_to_cpu(get_unaligned((__le32*)&data[22]));
 +
 +	if (size == 34) {
-+		ctrl->dwClockFrequency = le32_to_cpup((__le32*)&data[26]);
++		ctrl->dwClockFrequency =
++			le32_to_cpu(get_unaligned((__le32*)&data[26]));
 +		ctrl->bmFramingInfo = data[30];
 +		ctrl->bPreferedVersion = data[31];
 +		ctrl->bMinVersion = data[32];
@@ -5335,9 +5602,11 @@
 +		struct uvc_format *format = NULL;
 +		struct uvc_frame *frame = NULL;
 +
-+		if (ctrl->bFormatIndex <= video->streaming->nformats)
++		if (ctrl->bFormatIndex <= video->streaming->nformats &&
++		    ctrl->bFormatIndex != 0)
 +			format = &video->streaming->format[ctrl->bFormatIndex - 1];
-+		if (format && ctrl->bFrameIndex <= format->nframes) {
++		if (format && ctrl->bFrameIndex <= format->nframes &&
++		    ctrl->bFrameIndex != 0) {
 +			frame = &format->frame[ctrl->bFrameIndex - 1];
 +			ctrl->dwMaxVideoFrameSize = frame->dwMaxVideoFrameBufferSize;
 +		}
@@ -5367,11 +5636,14 @@
 +	/* Note: Some of the fields below are not required for IN devices (see
 +	 * UVC spec, 4.3.1.1), but we still copy them in case support for OUT
 +	 * devices is added in the future. */
-+	*(__le32*)&data[18] = cpu_to_le32(ctrl->dwMaxVideoFrameSize);
-+	*(__le32*)&data[22] = cpu_to_le32(ctrl->dwMaxPayloadTransferSize);
++	put_unaligned(cpu_to_le32(ctrl->dwMaxVideoFrameSize),
++		(__le32*)&data[18]);
++	put_unaligned(cpu_to_le32(ctrl->dwMaxPayloadTransferSize),
++		(__le32*)&data[22]);
 +
 +	if (size == 34) {
-+		*(__le32*)&data[26] = cpu_to_le32(ctrl->dwClockFrequency);
++		put_unaligned(cpu_to_le32(ctrl->dwClockFrequency),
++			(__le32*)&data[26]);
 +		data[30] = ctrl->bmFramingInfo;
 +		data[31] = ctrl->bPreferedVersion;
 +		data[32] = ctrl->bMinVersion;
@@ -5744,7 +6016,7 @@
 +
 +	spin_lock_irqsave(&queue->irqlock, flags);
 +	if (!list_empty(&queue->irqqueue))
-+		buf = list_entry(queue->irqqueue.next, struct uvc_buffer, queue);
++		buf = list_first_entry(&queue->irqqueue, struct uvc_buffer, queue);
 +	spin_unlock_irqrestore(&queue->irqlock, flags);
 +
 +	video->decode(urb, video, buf);
@@ -6135,10 +6407,10 @@
 +
 diff --git a/drivers/media/video/uvcvideo/uvcvideo.h b/drivers/media/video/uvcvideo/uvcvideo.h
 new file mode 100644
-index 0000000..73b2146
+index 0000000..fb755c2
 --- /dev/null
 +++ b/drivers/media/video/uvcvideo/uvcvideo.h
-@@ -0,0 +1,787 @@
+@@ -0,0 +1,771 @@
 +#ifndef _USB_VIDEO_H_
 +#define _USB_VIDEO_H_
 +
@@ -6149,32 +6421,6 @@
 +#include "uvc_compat.h"
 +
 +/*
-+ * Private V4L2 control identifiers.
-+ */
-+
-+#define V4L2_CID_BACKLIGHT_COMPENSATION		(V4L2_CID_PRIVATE_BASE+0)
-+#define V4L2_CID_POWER_LINE_FREQUENCY		(V4L2_CID_PRIVATE_BASE+1)
-+#define V4L2_CID_SHARPNESS			(V4L2_CID_PRIVATE_BASE+2)
-+#define V4L2_CID_HUE_AUTO			(V4L2_CID_PRIVATE_BASE+3)
-+
-+#define V4L2_CID_FOCUS_AUTO			(V4L2_CID_PRIVATE_BASE+4)
-+#define V4L2_CID_FOCUS_ABSOLUTE			(V4L2_CID_PRIVATE_BASE+5)
-+#define V4L2_CID_FOCUS_RELATIVE			(V4L2_CID_PRIVATE_BASE+6)
-+
-+#define V4L2_CID_PAN_RELATIVE			(V4L2_CID_PRIVATE_BASE+7)
-+#define V4L2_CID_TILT_RELATIVE			(V4L2_CID_PRIVATE_BASE+8)
-+#define V4L2_CID_PANTILT_RESET			(V4L2_CID_PRIVATE_BASE+9)
-+
-+#define V4L2_CID_EXPOSURE_AUTO			(V4L2_CID_PRIVATE_BASE+10)
-+#define V4L2_CID_EXPOSURE_ABSOLUTE		(V4L2_CID_PRIVATE_BASE+11)
-+#define V4L2_CID_EXPOSURE_AUTO_PRIORITY		(V4L2_CID_PRIVATE_BASE+14)
-+
-+#define V4L2_CID_WHITE_BALANCE_TEMPERATURE_AUTO	(V4L2_CID_PRIVATE_BASE+12)
-+#define V4L2_CID_WHITE_BALANCE_TEMPERATURE	(V4L2_CID_PRIVATE_BASE+13)
-+
-+#define V4L2_CID_PRIVATE_LAST			V4L2_CID_EXPOSURE_AUTO_PRIORITY
-+
-+/*
 + * Dynamic controls
 + */
 +/* Data types for UVC control data */
@@ -6236,6 +6482,8 @@
 +
 +#ifdef __KERNEL__
 +
++#include <linux/poll.h>
++
 +/* --------------------------------------------------------------------------
 + * UVC constants
 + */
@@ -6434,6 +6682,10 @@
 +				 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71}
 +#define UVC_GUID_FORMAT_UYVY	{ 'U',  'Y',  'V',  'Y', 0x00, 0x00, 0x10, 0x00, \
 +				 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71}
++#define UVC_GUID_FORMAT_Y800	{ 'Y',  '8',  '0',  '0', 0x00, 0x00, 0x10, 0x00, \
++				 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71}
++#define UVC_GUID_FORMAT_BY8	{ 'B',  'Y',  '8',  ' ', 0x00, 0x00, 0x10, 0x00, \
++				 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71}
 +
 +
 +/* ------------------------------------------------------------------------
@@ -6494,7 +6746,7 @@
 +};
 +
 +struct uvc_menu_info {
-+	__u32 index;
++	__u32 value;
 +	__u8 name[32];
 +};
 +
@@ -6705,8 +6957,8 @@
 +	unsigned int count;
 +	unsigned int buf_size;
 +	struct uvc_buffer buffer[UVC_MAX_VIDEO_BUFFERS];
-+	struct mutex mutex;
-+	spinlock_t irqlock;
++	struct mutex mutex;	/* protects buffers and mainqueue */
++	spinlock_t irqlock;	/* protects irqqueue */
 +
 +	struct list_head mainqueue;
 +	struct list_head irqqueue;
@@ -6756,6 +7008,7 @@
 +	struct usb_interface *intf;
 +	__u32 quirks;
 +	int intfnum;
++	char name[32];
 +
 +	enum uvc_device_state state;
 +	struct kref kref;
@@ -6773,6 +7026,7 @@
 +	struct usb_host_endpoint *int_ep;
 +	struct urb *int_urb;
 +	__u8 status[16];
++	struct input_dev *input;
 +
 +	/* Video Streaming interfaces */
 +	struct list_head streaming;
@@ -6846,7 +7100,7 @@
 +extern int uvc_alloc_buffers(struct uvc_video_queue *queue,
 +		unsigned int nbuffers, unsigned int buflength);
 +extern int uvc_free_buffers(struct uvc_video_queue *queue);
-+extern void uvc_query_buffer(struct uvc_buffer *buf,
++extern int uvc_query_buffer(struct uvc_video_queue *queue,
 +		struct v4l2_buffer *v4l2_buf);
 +extern int uvc_queue_buffer(struct uvc_video_queue *queue,
 +		struct v4l2_buffer *v4l2_buf);
@@ -6856,6 +7110,8 @@
 +extern void uvc_queue_cancel(struct uvc_video_queue *queue);
 +extern struct uvc_buffer *uvc_queue_next_buffer(struct uvc_video_queue *queue,
 +		struct uvc_buffer *buf);
++extern unsigned int uvc_queue_poll(struct uvc_video_queue *queue,
++		struct file *file, poll_table *wait);
 +
 +/* V4L2 interface */
 +extern struct file_operations uvc_fops;
@@ -6926,3 +7182,10 @@
 +
 +#endif
 +
+diff --git a/drivers/media/video/uvcvideo/version.h b/drivers/media/video/uvcvideo/version.h
+new file mode 100644
+index 0000000..503c00c
+--- /dev/null
++++ b/drivers/media/video/uvcvideo/version.h
+@@ -0,0 +1 @@
++#define	DRIVER_VERSION	"SVN r200"

linux-2.6-wireless-pending.patch:

View full diff with command:
/usr/bin/cvs -f diff  -kk -u -N -r 1.43 -r 1.44 linux-2.6-wireless-pending.patch
Index: linux-2.6-wireless-pending.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-8/linux-2.6-wireless-pending.patch,v
retrieving revision 1.43
retrieving revision 1.44
diff -u -r1.43 -r1.44
--- linux-2.6-wireless-pending.patch	9 May 2008 22:39:12 -0000	1.43
+++ linux-2.6-wireless-pending.patch	21 May 2008 21:22:40 -0000	1.44
@@ -1,99999 +1,13786 @@
-commit 61c2b682b8391f13b67e2d95990a0aba34697d9c
-Author: Ivo van Doorn <ivdoorn at gmail.com>
-Date:   Mon Apr 21 19:01:09 2008 +0200
+commit 297c3669dd481e977927dc123ed3deed10833e2a
+Author: Holger Schurig <hs4233 at mail.mn-solutions.de>
+Date:   Wed May 14 16:27:18 2008 +0200
 
-    rt2x00: Fix quality/activity led handling
+    libertas: remove lbs_get_data_rate()
     
-    There was an obvious typo in LED structure
-    initialization which caused the radio and quality/activity
-    leds to be incorrectly initialized which resulted in
-    the leds not being enabled.
-    
-    Additionally add the rt2x00led_led_activity() handler
-    that will enable TX/RX activity leds when the radio
-    is being enabled.
+    lbs_get_data_rate() gets called, but no-one uses it's result.
     
-    Signed-off-by: Ivo van Doorn <IvDoorn at gmail.com>
+    Signed-off-by: Holger Schurig <hs4233 at mail.mn-solutions.de>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 44a9809b97ec5acd1c549c3120bdd35613897d7c
-Author: Ivo van Doorn <ivdoorn at gmail.com>
-Date:   Mon Apr 21 19:00:17 2008 +0200
+commit 7cb92ee3af4f32ae278c6aad4d9c49fb52a99a66
+Author: Harvey Harrison <harvey.harrison at gmail.com>
+Date:   Tue May 13 18:13:35 2008 -0700
 
-    rt2x00: Don't enable short preamble for 1MBs
+    b43: use the bitrev helpers rather than rolling a private one
     
-    The timing settings for 1MBs should exclude
-    the short preamble bit since that only applies
-    to 2MBs, 5.5MBs and 11MBs.
+    The 4-bit reversal flip_4bit is replaced with the bitrev helper
+    bitrev8 and a 4-bit shift.  The B43_WARN is moved to the location
+    where a register is read from for checking there.  The other caller
+    explicitly passes an array index which is guaranteed to be within range
+    and so a B43_WARN is not added there.
     
-    Signed-off-by: Ivo van Doorn <IvDoorn at gmail.com>
+    Signed-off-by: Harvey Harrison <harvey.harrison at gmail.com>
+    Reviewed-by: Michael Buesch <mb at bu3sch.de>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 2218228392080f0ca2fc2974604e79f57b12c436
-Author: Kirill A. Shutemov <kirill at shutemov.name>
-Date:   Tue Apr 22 16:38:55 2008 +0300
+commit 8c122e14ca821402b9181f16494d9f11169deeae
+Author: Bob Copeland <me at bobcopeland.com>
+Date:   Mon May 12 21:16:44 2008 -0400
 
-    Make linux/wireless.h be able to compile
+    ath5k: Fix loop variable initializations
     
-    Signed-off-by: Kirill A. Shutemov <kirill at shutemov.name>
-    Signed-off-by: John W. Linville <linville at tuxdriver.com>
-
-commit 786b4557075ae0d8a23e73c316dc4204b41ccb4d
-Author: Bill Moss <bmoss at clemson.edu>
-Date:   Thu Apr 17 16:03:40 2008 -0700
-
-    iwlwifi: fix debug messages during scanning
+    In ath5k_tasklet_rx, both status structures 'rxs' and 'rs' are
+    initialized at the top of the tasklet, but not within the loop.
+    If the loop is executed multiple times in the tasklet then the
+    variables may see changes from previous packets.
     
-    direct_mask will be set when we are not associated and requesting a
-    direct scan. The second debug print will be confusing as priv->essid
-    is not set at that time and it will thus print "<hidden>" while it is
-    known to which AP a direct scan is requested - as previous debug message
-    also indicates.
+    For TKIP, this results in 'Invalid Michael MIC' errors if two packets
+    are processed in the tasklet: rxs.flag gets set to RX_DECRYPTED by
+    mac80211 when it decrypts the first encrypted packet.  The subsequent
+    packet will have RX_DECRYPTED set upon entry to mac80211, so mac80211
+    will not try to decrypt it.
     
-    Now make all debugging consistent.
+    We currently initialize all but two fields in the structures, so fix
+    the other two.
     
-    Signed-off-by: Bill Moss <bmoss at clemson.edu>
-    Signed-off-by: Reinette Chatre <reinette.chatre at intel.com>
+    Signed-off-by: Bob Copeland <me at bobcopeland.com>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit f52764886540b16e7962bd1d150bd939aec9248c
-Author: Guy Cohen <guy.cohen at intel.com>
-Date:   Mon Apr 21 15:41:57 2008 -0700
+commit 01669110ba331be385af8d5310ff6c3b93b09620
+Author: Ivo van Doorn <ivdoorn at gmail.com>
+Date:   Tue May 13 15:03:02 2008 +0200
 
-    iwlwifi: fix current channel is not scanned
+    mac80211: Set IEEE80211_TXPD_REQ_TX_STATUS for all TX frames
     
-    All channels should be scanned, including the current channel
-    when the client is associated.
+    All interfaces should set the IEEE80211_TXPD_REQ_TX_STATUS flag for all TX frames
+    which will force the master interface to set the IEEE80211_TX_CTL_REQ_TX_STATUS
+    flag. This in turn will allow drivers to check for that flag before reporting
+    the TX status to mac80211.
     
-    Removed also unused flag to scan only active channels.
+    This is very usefull when frames (like beacons, RTS and CTS-to-self) should not
+    be reported back to mac80211. Later we could add more extensive checks to
+    exclude more frames from being reported, or let mac80211 decide if it wants
+    the frame for status reporting or not.
     
-    Signed-off-by: Guy Cohen <guy.cohen at intel.com>
-    Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach at intel.com>
-    Signed-off-by: Tomas Winkler <tomas.winkler at intel.com>
+    v2: Monitor interfaces should also set IEEE80211_TXPD_REQ_TX_STATUS
+    
+    Signed-off-by: Ivo van Doorn <IvDoorn at gmail.com>
+    Acked-by: Johannes Berg <johannes at sipsolutions.net>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 21a75d7788f4e29b6c6d28e08f9f0310c4de828d
-Author: Michael Buesch <mb at bu3sch.de>
-Date:   Fri Apr 25 19:29:08 2008 +0200
+commit 5e15aedb1d67c2d31643edc3fa282647b0f3befb
+Author: Huang Weiyi <weiyi.huang at gmail.com>
+Date:   Sat May 10 11:12:31 2008 +0200
 
-    b43: Fix some TX/RX locking issues
+    b43: nphy.c remove duplicated include
     
-    This fixes some TX/RX related locking issues.
-    With this patch applied, some of the PHY transmission errors are fixed.
+    Remove duplicated include <linux/delay.h> in
+    drivers/net/wireless/b43/nphy.c
     
+    Signed-off-by: Huang Weiyi <weiyi.huang at gmail.com>
     Signed-off-by: Michael Buesch <mb at bu3sch.de>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit c0d43990768b6ca83604ff4be80425b89d317e2f
-Author: Holger Schurig <hs4233 at mail.mn-solutions.de>
-Date:   Tue Apr 29 10:07:56 2008 +0200
+commit 7ce2d429578b4e32ea68d60e7f16a2a7bb17dada
+Author: Eric W. Biederman <ebiederm at xmission.com>
+Date:   Thu May 8 14:30:18 2008 -0700
 
-    libertas: fix use-before-check violation
+    wireless: Add missing locking to cfg80211_dev_rename
     
-    According to Coverity (kudo's to Adrian Bunk), we had one use-before-check
-    bug in libe libertas driver. This patch fixes this issue.
-    
-    Signed-off-by: Holger Schurig <hs4233 at mail.mn-solutions.de>
-    Signed-off-by: John W. Linville <linville at tuxdriver.com>
-
-commit 2e35af143a1380173ba292e48e9b4913ef16b4ee
-Author: Michael Buesch <mb at bu3sch.de>
-Date:   Sun Apr 27 19:06:18 2008 +0200
-
-    b43: Fix dual-PHY devices
+    device_rename only performs useful and race free validity
+    checking at the optional sysfs level so depending on it
+    for all of the validity checking in cfg80211_dev_rename
+    is racy.
     
-    This fixes operation of dual-PHY (A/B/G) devices.
-    Do not anounce the A-PHY to mac80211, as that's not supported, yet.
+    Instead implement all of the needed validity checking
+    and locking in cfg80211_dev_rename.
     
-    Signed-off-by: Michael Buesch <mb at bu3sch.de>
+    Signed-off-by: Eric W. Biederman <ebiederm at xmission.com>
+    Acked-by: Johannes Berg <johannes at sipsolutions.net>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 17f830459d6116ae13dbcfc9d09a406e6717b1a6
-Author: Harvey Harrison <harvey.harrison at gmail.com>
-Date:   Sun Apr 27 03:48:40 2008 -0700
+commit 54a5c8046dce102c1a435ca5a95f5c0699662d21
+Author: Bruno Randolf <br1 at einfach.org>
+Date:   Thu May 8 19:22:43 2008 +0200
 
-    mac80211: incorrect shift direction
+    mac80211: make rx radiotap header more flexible
     
-    Looks like  5d2cdcd4e85c5187db30a6b29f79fbbe59f39f78 ("mac80211: get a
-    TKIP phase key from skb") got the shifts wrong.
+    use hw flags and rx flags to determine which fields are present in the header
[...156085 lines suppressed...]
-+      <para>TBD</para>
-+      <para>Some parts of the if_conf should be discussed here instead</para>
-+      <para>
-+        Insert notes about VLAN interfaces with hw crypto here or
-+        in the hw crypto chapter.
-+      </para>
-+!Finclude/net/mac80211.h ieee80211_get_buffered_bc
-+!Finclude/net/mac80211.h ieee80211_beacon_get
-+    </chapter>
-+
-+    <chapter id="multi-iface">
-+      <title>Supporting multiple virtual interfaces</title>
-+      <para>TBD</para>
-+      <para>
-+        Note: WDS with identical MAC address should almost always be OK
-+      </para>
-+      <para>
-+        Insert notes about having multiple virtual interfaces with
-+        different MAC addresses here, note which configurations are
-+        supported by mac80211, add notes about supporting hw crypto
-+        with it.
-+      </para>
-+    </chapter>
-+
-+    <chapter id="hardware-scan-offload">
-+      <title>Hardware scan offload</title>
-+      <para>TBD</para>
-+!Finclude/net/mac80211.h ieee80211_scan_completed
-+    </chapter>
-+  </part>
-+
-+  <part id="rate-control">
-+    <title>Rate control interface</title>
-+    <partintro>
-+      <para>TBD</para>
-+      <para>
-+       This part of the book describes the rate control algorithm
-+       interface and how it relates to mac80211 and drivers.
-+      </para>
-+    </partintro>
-+    <chapter id="dummy">
-+      <title>dummy chapter</title>
-+      <para>TBD</para>
-+    </chapter>
-+  </part>
-+
-+  <part id="internal">
-+    <title>Internals</title>
-+    <partintro>
-+      <para>TBD</para>
-+      <para>
-+       This part of the book describes mac80211 internals.
-+      </para>
-+    </partintro>
-+
-+    <chapter id="key-handling">
-+      <title>Key handling</title>
-+      <sect1>
-+        <title>Key handling basics</title>
-+!Pnet/mac80211/key.c Key handling basics
-+      </sect1>
-+      <sect1>
-+        <title>MORE TBD</title>
-+        <para>TBD</para>
-+      </sect1>
-+    </chapter>
-+
-+    <chapter id="rx-processing">
-+      <title>Receive processing</title>
-+      <para>TBD</para>
-+    </chapter>
-+
-+    <chapter id="tx-processing">
-+      <title>Transmit processing</title>
-+      <para>TBD</para>
-+    </chapter>
-+
-+    <chapter id="sta-info">
-+      <title>Station info handling</title>
-+      <sect1>
-+        <title>Programming information</title>
-+!Fnet/mac80211/sta_info.h sta_info
-+!Fnet/mac80211/sta_info.h ieee80211_sta_info_flags
-+      </sect1>
-+      <sect1>
-+        <title>STA information lifetime rules</title>
-+!Pnet/mac80211/sta_info.c STA information lifetime rules
-+      </sect1>
-+    </chapter>
-+
-+    <chapter id="synchronisation">
-+      <title>Synchronisation</title>
-+      <para>TBD</para>
-+      <para>Locking, lots of RCU</para>
-+    </chapter>
-+  </part>
-+</book>
-diff -up linux-2.6.24.noarch/Documentation/DocBook/Makefile.orig linux-2.6.24.noarch/Documentation/DocBook/Makefile
---- linux-2.6.24.noarch/Documentation/DocBook/Makefile.orig	2008-05-09 18:11:45.000000000 -0400
-+++ linux-2.6.24.noarch/Documentation/DocBook/Makefile	2008-05-09 18:12:23.000000000 -0400
-@@ -11,7 +11,8 @@ DOCBOOKS := wanbook.xml z8530book.xml mc
- 	    procfs-guide.xml writing_usb_driver.xml \
- 	    kernel-api.xml filesystems.xml lsm.xml utrace.xml usb.xml \
- 	    gadget.xml libata.xml mtdnand.xml librs.xml rapidio.xml \
--	    genericirq.xml s390-drivers.xml uio-howto.xml
-+	    genericirq.xml s390-drivers.xml uio-howto.xml \
-+	    mac80211.xml
- 
- ###
- # The build process is as follows (targets):
-diff -up linux-2.6.24.noarch/Documentation/feature-removal-schedule.txt.orig linux-2.6.24.noarch/Documentation/feature-removal-schedule.txt
---- linux-2.6.24.noarch/Documentation/feature-removal-schedule.txt.orig	2008-05-09 18:11:45.000000000 -0400
-+++ linux-2.6.24.noarch/Documentation/feature-removal-schedule.txt	2008-05-09 18:12:23.000000000 -0400
-@@ -332,31 +332,6 @@ Why:	This driver has been marked obsolet
- 	2.4 or later kernels, provides richer features and is more robust.
- Who:	Stephen Hemminger <shemminger at linux-foundation.org>
- 
--What:	bcm43xx wireless network driver
--When:	2.6.26
--Files:	drivers/net/wireless/bcm43xx
--Why:	This driver's functionality has been replaced by the
--	mac80211-based b43 and b43legacy drivers.
--Who:	John W. Linville <linville at tuxdriver.com>
--
-----------------------------
--
--What:	ieee80211 softmac wireless networking component
--When:	2.6.26 (or after removal of bcm43xx and port of zd1211rw to mac80211)
--Files:	net/ieee80211/softmac
--Why:	No in-kernel drivers will depend on it any longer.
--Who:	John W. Linville <linville at tuxdriver.com>
--
-----------------------------
--
--What:	rc80211-simple rate control algorithm for mac80211
--When:	2.6.26
--Files:	net/mac80211/rc80211-simple.c
--Why:	This algorithm was provided for reference but always exhibited bad
--	responsiveness and performance and has some serious flaws. It has been
--	replaced by rc80211-pid.
--Who:	Stefano Brivio <stefano.brivio at polimi.it>
--
- ---------------------------
+ 	return 0;
+ }
+@@ -446,9 +445,9 @@ static void adm8211_interrupt_rci(struct
+ 			struct ieee80211_rx_status rx_status = {0};
+ 
+ 			if (priv->pdev->revision < ADM8211_REV_CA)
+-				rx_status.ssi = rssi;
++				rx_status.signal = rssi;
+ 			else
+-				rx_status.ssi = 100 - rssi;
++				rx_status.signal = 100 - rssi;
+ 
+ 			rx_status.rate_idx = rate;
+ 
+@@ -1894,9 +1893,10 @@ static int __devinit adm8211_probe(struc
+ 
+ 	dev->extra_tx_headroom = sizeof(struct adm8211_tx_hdr);
+ 	/* dev->flags = IEEE80211_HW_RX_INCLUDES_FCS in promisc mode */
++	dev->flags = IEEE80211_HW_SIGNAL_UNSPEC;
+ 
+ 	dev->channel_change_time = 1000;
+-	dev->max_rssi = 100;	/* FIXME: find better value */
++	dev->max_signal = 100;    /* FIXME: find better value */
+ 
+ 	dev->queues = 1; /* ADM8211C supports more, maybe ADM8211B too */
  
- What:	b43 support for firmware revision < 410
+diff -up linux-2.6.25.noarch/drivers/ssb/pci.c.orig linux-2.6.25.noarch/drivers/ssb/pci.c
+--- linux-2.6.25.noarch/drivers/ssb/pci.c.orig	2008-05-19 17:24:59.000000000 -0400
++++ linux-2.6.25.noarch/drivers/ssb/pci.c	2008-05-19 17:26:13.000000000 -0400
+@@ -510,17 +510,15 @@ static int ssb_pci_sprom_get(struct ssb_
+ 	sprom_do_read(bus, buf);
+ 	err = sprom_check_crc(buf, bus->sprom_size);
+ 	if (err) {
+-		/* check for rev 4 sprom - has special signature */
+-		if (buf[32] == 0x5372) {
+-			kfree(buf);
+-			buf = kcalloc(SSB_SPROMSIZE_WORDS_R4, sizeof(u16),
+-				      GFP_KERNEL);
+-			if (!buf)
+-				goto out;
+-			bus->sprom_size = SSB_SPROMSIZE_WORDS_R4;
+-			sprom_do_read(bus, buf);
+-			err = sprom_check_crc(buf, bus->sprom_size);
+-		}
++		/* try for a 440 byte SPROM - revision 4 and higher */
++		kfree(buf);
++		buf = kcalloc(SSB_SPROMSIZE_WORDS_R4, sizeof(u16),
++			      GFP_KERNEL);
++		if (!buf)
++			goto out;
++		bus->sprom_size = SSB_SPROMSIZE_WORDS_R4;
++		sprom_do_read(bus, buf);
++		err = sprom_check_crc(buf, bus->sprom_size);
+ 		if (err)
+ 			ssb_printk(KERN_WARNING PFX "WARNING: Invalid"
+ 				   " SPROM CRC (corrupt SPROM)\n");

linux-2.6-wireless.patch:

View full diff with command:
/usr/bin/cvs -f diff  -kk -u -N -r 1.36 -r 1.37 linux-2.6-wireless.patch
Index: linux-2.6-wireless.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-8/linux-2.6-wireless.patch,v
retrieving revision 1.36
retrieving revision 1.37
diff -u -r1.36 -r1.37
--- linux-2.6-wireless.patch	15 Apr 2008 21:12:56 -0000	1.36
+++ linux-2.6-wireless.patch	21 May 2008 21:22:41 -0000	1.37
@@ -1,10042 +1,8991 @@
-commit dc4ae1f46dbbcd08b3b5e23ad5ef87bf4bb41adf
-Author: Stefano Brivio <stefano.brivio at polimi.it>
-Date:   Mon Apr 14 00:59:49 2008 +0200
+commit 229ce3abb6d6d4598de8ef1ed1e2da8163a9bbc0
+Author: Masakazu Mokuno <mokuno at sm.sony.co.jp>
+Date:   Wed May 14 14:16:50 2008 +0900
 
-    b43legacy: fix DMA mapping leakage
+    wireless: Create 'device' symlink in sysfs
     
-    This fixes a DMA mapping leakage in the case where we reject a DMA buffer
-    because of its address.
-    The patch by Michael Buesch has been ported to b43legacy.
+    Some network interfaces of the wireless drivers lack the 'device'
+    symlink in sysfs.
+    This patch lets the drivers create the links.
     
-    Signed-off-by: Stefano Brivio <stefano.brivio at polimi.it>
-    Cc: Christian Casteyde <casteyde.christian at free.fr>
+    Signed-off-by: Masakazu Mokuno <mokuno at sm.sony.co.jp>
+    Acked-by: Dan Williams <dcbw at redhat.com>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit b3fc9c6c58c986f7a24fd8b0794d1e0794935a28
-Author: Johannes Berg <johannes at sipsolutions.net>
-Date:   Sun Apr 13 10:12:47 2008 +0200
+commit b7acbdfbd1f277c1eb23f344f899cfa4cd0bf36a
+Author: Roel Kluin <roel.kluin at gmail.com>
+Date:   Tue May 13 22:12:27 2008 +0200
 
-    mac80211: remove message on receiving unexpected unencrypted frames
-    
-    Some people are getting this message a lot, and we have traced it to
-    broken access points that much too often send completely empty frames
-    (all bytes zeroed, which they shouldn't do at all.)
+    wireless, airo: waitbusy() won't delay
     
-    Since we cannot do anything about such frames in any case except the
-    special case where we're debugging an AP, just remove the message.
+    There will be no delay even when COMMAND_BUSY (defined 0x8000) is set:
+    0x8000 & (delay < 10000) will evaluate to 0 - when delay is 0.
     
-    Signed-off-by: Johannes Berg <johannes at sipsolutions.net>
+    Signed-off-by: Roel Kluin <roel.kluin at gmail.com>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 2dd0f69222c481574baf6a4affb9256a7c7410e7
-Author: Ivo van Doorn <ivdoorn at gmail.com>
-Date:   Sat Apr 12 19:25:00 2008 +0200
+commit 02969d296e91626d9942ea15f8a95fe056025ef1
+Author: Brian Cavagnolo <brian at cozybit.com>
+Date:   Tue May 13 13:54:59 2008 +0100
 
-    Update rt2x00 MAINTAINERS entry
+    libertas: fix command timeout after firmware failure
     
-    Add the tree entry for rt2x00 to inform people about the
-    rt2x00.git tree.
+    This is a fix for OLPC ticket #6586: "SCAN command fails, timer doesn't
+    fire". In fact, the timer was firing; the problem was that the dnld_sent
+    state variable was not being updated after the timer expired, so
+    lbs_execute_next_command was not being called.
     
-    Signed-off-by: Ivo van Doorn <IvDoorn at gmail.com>
+    Signed-off-by: Brian Cavagnolo <brian at cozybit.com>
+    Signed-off-by: Javier Cardona <javier at cozybit.com>
+    Signed-off-by: David Woodhouse <dwmw2 at infradead.org>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit e089764596ccde1037f2849fcee002c68986e67c
+commit 2f561feb386d6adefbad63c59a1fcd298ac6a79c
 Author: Ivo van Doorn <ivdoorn at gmail.com>
-Date:   Sat Apr 12 19:23:55 2008 +0200
-
-    Add rfkill to MAINTAINERS file
-    
-    I have been acting as the maintainer since the rfkill introduction,
-    so lets make it official by adding a rfkill entry in the MAINTAINERS file.
-    
-    Signed-off-by: Ivo van Doorn <IvDoorn at gmail.com>
-    Signed-off-by: John W. Linville <linville at tuxdriver.com>
+Date:   Sat May 10 13:40:49 2008 +0200
 
-commit 89796f64a20d31e74ee0051df2e26812c852e734
-Author: Carlos Corbacho <carlos at strangeworlds.co.uk>
-Date:   Sat Apr 12 16:39:47 2008 +0100
-
-    rfkill: Fix device type check when toggling states
-    
-    rfkill_switch_all() is supposed to only switch all the interfaces of a
-    given type, but does not actually do this; instead, it just switches
-    everything currently in the same state.
+    mac80211: Add RTNL version of ieee80211_iterate_active_interfaces
     
-    Add the necessary type check in.
+    Since commit e38bad4766a110b61fa6038f10be16ced8c6cc38
+    	mac80211: make ieee80211_iterate_active_interfaces not need rtnl
+    rt2500usb and rt73usb broke down due to attempting register access
+    in atomic context (which is not possible for USB hardware).
     
-    (This fixes a bug I've been seeing while developing an rfkill laptop
-    driver, with both bluetooth and wireless simultaneously changing state
-    after only pressing either KEY_WLAN or KEY_BLUETOOTH).
+    This patch restores ieee80211_iterate_active_interfaces() to use RTNL lock,
+    and provides the non-RTNL version under a new name:
+    	ieee80211_iterate_active_interfaces_atomic()
     
-    Signed-off-by: Carlos Corbacho <carlos at strangeworlds.co.uk>
-    Signed-off-by: John W. Linville <linville at tuxdriver.com>
-
-commit cdbbe3d1f53086ece706674d3bf4f6d148083694
-Author: Michael Buesch <mb at bu3sch.de>
-Date:   Fri Apr 11 12:16:36 2008 +0200
-
-    b43legacy: Fix usage of struct device used for DMAing
+    So far only rt2x00 uses ieee80211_iterate_active_interfaces(), and those
+    drivers require the RTNL version of ieee80211_iterate_active_interfaces().
+    Since they already call that function directly, this patch will automatically
+    fix the USB rt2x00 drivers.
     
-    This fixes b43legacy for the SSB DMA API change.
+    v2: Rename ieee80211_iterate_active_interfaces_rtnl
     
-    Signed-off-by: Michael Buesch <mb at bu3sch.de>
-    Cc: Stefano Brivio <stefano.brivio at polimi.it>
+    Signed-off-by: Ivo van Doorn <IvDoorn at gmail.com>
+    Acked-by: Johannes Berg <johannes at sipsolutions.net>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 4ac58469f13028e1eb97f8bc7b0fca5072591d8d
-Author: Michael Buesch <mb at bu3sch.de>
-Date:   Fri Apr 11 11:59:00 2008 +0200
+commit 34a961f7db36f10abd6b153411fe8c810f21f6b3
+Author: Abhijeet Kolekar <abhijeet.kolekar at intel.com>
+Date:   Fri May 9 09:35:41 2008 -0700
 
-    ssb: Fix usage of struct device used for DMAing
-    
-    This fixes DMA on architectures where DMA is nontrivial, like PPC64.
-    We must use the host-device's (PCI) struct device for any DMA
-    operation instead of the SSB device. For this we add a new
-    struct device pointer to the SSB device structure that will always
-    point to the right device for DMAing.
+    mac80211 : Association with 11n hidden ssid ap.
     
-    Without this patch b43 and b44 drivers won't work on complex-DMA
-    architectures, that for example need dev->archdata for DMA operations.
-    
-    Signed-off-by: Michael Buesch <mb at bu3sch.de>
-    Signed-off-by: John W. Linville <linville at tuxdriver.com>
-
-commit 2d4543fdb487b1301ae48703dea3e66ead2d3c75
-Author: Reinette Chatre <reinette.chatre at intel.com>
-Date:   Thu Apr 10 13:16:27 2008 -0700
-
-    MAINTAINERS: move to generic repository for iwlwifi
+    This patch fixes the association problem with 11n hidden ssid ap.
+    Patch fixes the problem of associating with hidden ssid when
+    all three parameters ap,essid and channel are given to iwconfig.
+    This patch removes the condition of checking three parameters
+    and always checks for bss in bss list while associating.
     
-    Signed-off-by: Reinette Chatre <reinette.chatre at intel.com>
+    Signed-off-by: Abhijeet Kolekar <abhijeet.kolekar at intel.com>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 385f848a986b4677bc91e5f5f9033449a876819d
-Author: Stefano Brivio <stefano.brivio at polimi.it>
-Date:   Sun Apr 6 17:10:53 2008 +0200
+commit 23f40dc650c0344b37fe54143868a31be66db882
+Author: Mathieu Chouquet-Stringer <mchouque at free.fr>
+Date:   Wed May 14 19:03:18 2008 -0400
 
-    b43legacy: fix initvals loading on bcm4303
+    hostap: fix "registers" registration in procfs
     
-    This allows for the correct initial values to be uploaded to bcm4303
-    devices. It should be correct, but I can't reliably test this as I suspect
-    there's something going wrong with an hardware rfkill switch on my laptop.
-    Please test.
+    The "registers" entry was incorrectly created in the procfs root instead
+    of the device specific directory.  Move "registers" registration
+    immediately after the containing procfs directory is created.
     
-    Signed-off-by: Stefano Brivio <stefano.brivio at polimi.it>
+    Signed-off-by: Mathieu Chouquet-Stringer <mchouque at free.fr>
+    Signed-off-by: Pavel Roskin <proski at gnu.org>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit aa979a6acbb468b0ebe8cf36dc782a5b3cc1e28d
-Author: Herton Ronaldo Krzesinski <herton at mandriva.com.br>
[...249537 lines suppressed...]
 +
- /**************************************************
-  * Code for hostmode operation.
-  **************************************************/
-@@ -66,6 +79,7 @@ int pcibios_plat_dev_init(struct pci_dev
- 			base = &ssb_pcicore_pcibus_iobase;
- 		else
- 			base = &ssb_pcicore_pcibus_membase;
-+		res->flags |= IORESOURCE_PCI_FIXED;
- 		if (res->end) {
- 			size = res->end - res->start + 1;
- 			if (*base & (size - 1))
-@@ -88,20 +102,28 @@ int pcibios_plat_dev_init(struct pci_dev
- 
- static void __init ssb_fixup_pcibridge(struct pci_dev *dev)
- {
-+	u8 lat;
++/* Common sprom device-attribute store-handler */
++ssize_t ssb_attr_sprom_store(struct ssb_bus *bus,
++			     const char *buf, size_t count,
++			     int (*sprom_check_crc)(const u16 *sprom, size_t size),
++			     int (*sprom_write)(struct ssb_bus *bus, const u16 *sprom))
++{
++	u16 *sprom;
++	int res = 0, err = -ENOMEM;
++	size_t sprom_size_words = bus->sprom_size;
 +
- 	if (dev->bus->number != 0 || PCI_SLOT(dev->devfn) != 0)
- 		return;
- 
--	ssb_printk(KERN_INFO "PCI: fixing up bridge\n");
-+	ssb_printk(KERN_INFO "PCI: Fixing up bridge %s\n", pci_name(dev));
- 
- 	/* Enable PCI bridge bus mastering and memory space */
- 	pci_set_master(dev);
--	pcibios_enable_device(dev, ~0);
-+	if (pcibios_enable_device(dev, ~0) < 0) {
-+		ssb_printk(KERN_ERR "PCI: SSB bridge enable failed\n");
-+		return;
++	sprom = kcalloc(bus->sprom_size, sizeof(u16), GFP_KERNEL);
++	if (!sprom)
++		goto out;
++	err = hex2sprom(sprom, buf, count, sprom_size_words);
++	if (err) {
++		err = -EINVAL;
++		goto out_kfree;
++	}
++	err = sprom_check_crc(sprom, sprom_size_words);
++	if (err) {
++		err = -EINVAL;
++		goto out_kfree;
 +	}
- 
- 	/* Enable PCI bridge BAR1 prefetch and burst */
- 	pci_write_config_dword(dev, SSB_BAR1_CONTROL, 3);
- 
- 	/* Make sure our latency is high enough to handle the devices behind us */
--	pci_write_config_byte(dev, PCI_LATENCY_TIMER, 0xa8);
-+	lat = 168;
-+	ssb_printk(KERN_INFO "PCI: Fixing latency timer of device %s to %u\n",
-+		   pci_name(dev), lat);
-+	pci_write_config_byte(dev, PCI_LATENCY_TIMER, lat);
- }
- DECLARE_PCI_FIXUP_EARLY(PCI_ANY_ID, PCI_ANY_ID, ssb_fixup_pcibridge);
- 
-@@ -117,8 +139,10 @@ static u32 get_cfgspace_addr(struct ssb_
- 	u32 addr = 0;
- 	u32 tmp;
- 
--	if (unlikely(pc->cardbusmode && dev > 1))
-+	/* We do only have one cardbus device behind the bridge. */
-+	if (pc->cardbusmode && (dev >= 1))
- 		goto out;
 +
- 	if (bus == 0) {
- 		/* Type 0 transaction */
- 		if (unlikely(dev >= SSB_PCI_SLOT_MAX))
-@@ -279,14 +303,14 @@ static struct resource ssb_pcicore_mem_r
- 	.name	= "SSB PCIcore external memory",
- 	.start	= SSB_PCI_DMA,
- 	.end	= SSB_PCI_DMA + SSB_PCI_DMA_SZ - 1,
--	.flags	= IORESOURCE_MEM,
-+	.flags	= IORESOURCE_MEM | IORESOURCE_PCI_FIXED,
- };
- 
- static struct resource ssb_pcicore_io_resource = {
- 	.name	= "SSB PCIcore external I/O",
- 	.start	= 0x100,
- 	.end	= 0x7FF,
--	.flags	= IORESOURCE_IO,
-+	.flags	= IORESOURCE_IO | IORESOURCE_PCI_FIXED,
- };
- 
- static struct pci_controller ssb_pcicore_controller = {
-@@ -318,7 +342,16 @@ static void ssb_pcicore_init_hostmode(st
- 	pcicore_write32(pc, SSB_PCICORE_ARBCTL, val);
- 	udelay(1); /* Assertion time demanded by the PCI standard */
- 
--	/*TODO cardbus mode */
-+	if (pc->dev->bus->has_cardbus_slot) {
-+		ssb_dprintk(KERN_INFO PFX "CardBus slot detected\n");
-+		pc->cardbusmode = 1;
-+		/* GPIO 1 resets the bridge */
-+		ssb_gpio_out(pc->dev->bus, 1, 1);
-+		ssb_gpio_outen(pc->dev->bus, 1, 1);
-+		pcicore_write16(pc, SSB_PCICORE_SPROM(0),
-+				pcicore_read16(pc, SSB_PCICORE_SPROM(0))
-+				| 0x0400);
-+	}
- 
- 	/* 64MB I/O window */
- 	pcicore_write32(pc, SSB_PCICORE_SBTOPCI0,
-@@ -344,7 +377,8 @@ static void ssb_pcicore_init_hostmode(st
- 	/* Ok, ready to run, register it to the system.
- 	 * The following needs change, if we want to port hostmode
- 	 * to non-MIPS platform. */
--	set_io_port_base((unsigned long)ioremap_nocache(SSB_PCI_MEM, 0x04000000));
-+	ssb_pcicore_controller.io_map_base = (unsigned long)ioremap_nocache(SSB_PCI_MEM, 0x04000000);
-+	set_io_port_base(ssb_pcicore_controller.io_map_base);
- 	/* Give some time to the PCI controller to configure itself with the new
- 	 * values. Not waiting at this point causes crashes of the machine. */
- 	mdelay(10);
-@@ -517,7 +551,7 @@ int ssb_pcicore_dev_irqvecs_enable(struc
- 		} else {
- 			tmp = ssb_read32(dev, SSB_TPSFLAG);
- 			tmp &= SSB_TPSFLAG_BPFLAG;
--			intvec |= tmp;
-+			intvec |= (1 << tmp);
- 		}
- 		ssb_write32(pdev, SSB_INTVEC, intvec);
- 	}
-diff -up linux-2.6.24.noarch/Documentation/feature-removal-schedule.txt.orig linux-2.6.24.noarch/Documentation/feature-removal-schedule.txt
---- linux-2.6.24.noarch/Documentation/feature-removal-schedule.txt.orig	2008-04-15 16:47:26.000000000 -0400
-+++ linux-2.6.24.noarch/Documentation/feature-removal-schedule.txt	2008-04-15 16:47:31.000000000 -0400
-@@ -332,4 +332,36 @@ Why:	This driver has been marked obsolet
- 	2.4 or later kernels, provides richer features and is more robust.
- Who:	Stephen Hemminger <shemminger at linux-foundation.org>
- 
-+What:	bcm43xx wireless network driver
-+When:	2.6.26
-+Files:	drivers/net/wireless/bcm43xx
-+Why:	This driver's functionality has been replaced by the
-+	mac80211-based b43 and b43legacy drivers.
-+Who:	John W. Linville <linville at tuxdriver.com>
-+
-+---------------------------
-+
-+What:	ieee80211 softmac wireless networking component
-+When:	2.6.26 (or after removal of bcm43xx and port of zd1211rw to mac80211)
-+Files:	net/ieee80211/softmac
-+Why:	No in-kernel drivers will depend on it any longer.
-+Who:	John W. Linville <linville at tuxdriver.com>
-+
- ---------------------------
-+
-+What:	rc80211-simple rate control algorithm for mac80211
-+When:	2.6.26
-+Files:	net/mac80211/rc80211-simple.c
-+Why:	This algorithm was provided for reference but always exhibited bad
-+	responsiveness and performance and has some serious flaws. It has been
-+	replaced by rc80211-pid.
-+Who:	Stefano Brivio <stefano.brivio at polimi.it>
-+
-+---------------------------
-+
-+What:	b43 support for firmware revision < 410
-+When:	July 2008
-+Why:	The support code for the old firmware hurts code readability/maintainability
-+	and slightly hurts runtime performance. Bugfixes for the old firmware
-+	are not provided by Broadcom anymore.
-+Who:	Michael Buesch <mb at bu3sch.de>
++	/* Use interruptible locking, as the SPROM write might
++	 * be holding the lock for several seconds. So allow userspace
++	 * to cancel operation. */
++	err = -ERESTARTSYS;
++	if (mutex_lock_interruptible(&bus->sprom_mutex))
++		goto out_kfree;
++	err = ssb_devices_freeze(bus);
++	if (err == -EOPNOTSUPP) {
++		ssb_printk(KERN_ERR PFX "SPROM write: Could not freeze devices. "
++			   "No suspend support. Is CONFIG_PM enabled?\n");
++		goto out_unlock;
++	}
++	if (err) {
++		ssb_printk(KERN_ERR PFX "SPROM write: Could not freeze all devices\n");
++		goto out_unlock;
++	}
++	res = sprom_write(bus, sprom);
++	err = ssb_devices_thaw(bus);
++	if (err)
++		ssb_printk(KERN_ERR PFX "SPROM write: Could not thaw all devices\n");
++out_unlock:
++	mutex_unlock(&bus->sprom_mutex);
++out_kfree:
++	kfree(sprom);
++out:
++	if (res)
++		return res;
++	return err ? err : count;
++}


--- linux-2.6-acpi-disable-stray-interrupt-1.patch DELETED ---


--- linux-2.6-acpi-disable-stray-interrupt-2.patch DELETED ---


--- linux-2.6-acpi-video-backlight-rationalize.patch DELETED ---


--- linux-2.6-acpi_ec_early_init_fix.patch DELETED ---


--- linux-2.6-ath5k-use-soft-wep.patch DELETED ---


--- linux-2.6-bcm43xx-pci-neuter.patch DELETED ---


--- linux-2.6-cfg80211-extras.patch DELETED ---


--- linux-2.6-ps3_gelic_wireless.patch DELETED ---


--- linux-2.6-rndis_host-fixes.patch DELETED ---


--- linux-2.6-rndis_wlan.patch DELETED ---


--- linux-2.6-wireless-pending-fixups.patch DELETED ---


--- linux-2.6-wireless-pending-too.patch DELETED ---


--- linux-2.6-zd1211rw-module-alias.patch DELETED ---




More information about the fedora-extras-commits mailing list