rpms/kernel/F-8 linux-2.6-b43-rev-d.patch, NONE, 1.1 linux-2.6-rtl8180.patch, NONE, 1.1 config-generic, 1.36, 1.37 kernel.spec, 1.264, 1.265 linux-2.6-ath5k.patch, 1.6, 1.7 linux-2.6-wireless-pending.patch, 1.12, 1.13 linux-2.6-wireless.patch, 1.11, 1.12 linux-2.6-drivers-ssb-debug-revision.patch, 1.1, NONE

John W. Linville (linville) fedora-extras-commits at redhat.com
Fri Nov 16 04:01:18 UTC 2007


Author: linville

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

Modified Files:
	config-generic kernel.spec linux-2.6-ath5k.patch 
	linux-2.6-wireless-pending.patch linux-2.6-wireless.patch 
Added Files:
	linux-2.6-b43-rev-d.patch linux-2.6-rtl8180.patch 
Removed Files:
	linux-2.6-drivers-ssb-debug-revision.patch 
Log Message:
wireless updates 2007-11-15

linux-2.6-b43-rev-d.patch:

--- NEW FILE linux-2.6-b43-rev-d.patch ---
diff -up linux-2.6.23.noarch/drivers/net/wireless/b43/dma.c.orig linux-2.6.23.noarch/drivers/net/wireless/b43/dma.c
--- linux-2.6.23.noarch/drivers/net/wireless/b43/dma.c.orig	2007-11-15 22:41:08.000000000 -0500
+++ linux-2.6.23.noarch/drivers/net/wireless/b43/dma.c	2007-11-15 22:44:59.000000000 -0500
@@ -165,7 +165,7 @@ static void op64_fill_descriptor(struct 
 	addrhi = (((u64) dmaaddr >> 32) & ~SSB_DMA_TRANSLATION_MASK);
 	addrext = (((u64) dmaaddr >> 32) & SSB_DMA_TRANSLATION_MASK)
 	    >> SSB_DMA_TRANSLATION_SHIFT;
-	addrhi |= ssb_dma_translation(ring->dev->dev);
+	addrhi |= (ssb_dma_translation(ring->dev->dev) << 1);
 	if (slot == ring->nr_slots - 1)
 		ctl0 |= B43_DMA64_DCTL0_DTABLEEND;
 	if (start)
@@ -426,14 +426,15 @@ static inline
 static int alloc_ringmemory(struct b43_dmaring *ring)
 {
 	struct device *dev = ring->dev->dev->dev;
+	int size = (ring->dma64) ? 8192 : B43_DMA_RINGMEMSIZE;
 
-	ring->descbase = dma_alloc_coherent(dev, B43_DMA_RINGMEMSIZE,
+	ring->descbase = dma_alloc_coherent(dev, size,
 					    &(ring->dmabase), GFP_KERNEL);
 	if (!ring->descbase) {
 		b43err(ring->dev->wl, "DMA ringmemory allocation failed\n");
 		return -ENOMEM;
 	}
-	memset(ring->descbase, 0, B43_DMA_RINGMEMSIZE);
+	memset(ring->descbase, 0, size);
 
 	return 0;
 }
@@ -483,7 +484,7 @@ int b43_dmacontroller_rx_reset(struct b4
 	return 0;
 }
 
-/* Reset the RX DMA channel */
+/* Reset the TX DMA channel */
 int b43_dmacontroller_tx_reset(struct b43_wldev *dev, u16 mmio_base, int dma64)
 {
 	int i;
@@ -636,18 +637,13 @@ static int dmacontroller_setup(struct b4
 		if (ring->dma64) {
 			u64 ringbase = (u64) (ring->dmabase);
 
-			addrext = ((ringbase >> 32) & SSB_DMA_TRANSLATION_MASK)
-			    >> SSB_DMA_TRANSLATION_SHIFT;
-			value = B43_DMA64_TXENABLE;
-			value |= (addrext << B43_DMA64_TXADDREXT_SHIFT)
-			    & B43_DMA64_TXADDREXT_MASK;
-			b43_dma_write(ring, B43_DMA64_TXCTL, value);
+			b43_dma_write(ring, B43_DMA64_TXCTL,
+				      B43_DMA64_TXENABLE);
 			b43_dma_write(ring, B43_DMA64_TXRINGLO,
 				      (ringbase & 0xFFFFFFFF));
 			b43_dma_write(ring, B43_DMA64_TXRINGHI,
 				      ((ringbase >> 32) &
-				       ~SSB_DMA_TRANSLATION_MASK)
-				      | trans);
+				       0xFFFFFFFF));
 		} else {
 			u32 ringbase = (u32) (ring->dmabase);
 
@@ -668,20 +664,16 @@ static int dmacontroller_setup(struct b4
 		if (ring->dma64) {
 			u64 ringbase = (u64) (ring->dmabase);
 
-			addrext = ((ringbase >> 32) & SSB_DMA_TRANSLATION_MASK)
-			    >> SSB_DMA_TRANSLATION_SHIFT;
-			value = (ring->frameoffset << B43_DMA64_RXFROFF_SHIFT);
-			value |= B43_DMA64_RXENABLE;
-			value |= (addrext << B43_DMA64_RXADDREXT_SHIFT)
-			    & B43_DMA64_RXADDREXT_MASK;
+			value = (ring->frameoffset << B43_DMA64_RXFROFF_SHIFT)
+				| B43_DMA64_RXENABLE;
 			b43_dma_write(ring, B43_DMA64_RXCTL, value);
 			b43_dma_write(ring, B43_DMA64_RXRINGLO,
 				      (ringbase & 0xFFFFFFFF));
 			b43_dma_write(ring, B43_DMA64_RXRINGHI,
 				      ((ringbase >> 32) &
-				       ~SSB_DMA_TRANSLATION_MASK)
-				      | trans);
-			b43_dma_write(ring, B43_DMA64_RXINDEX, 200);
+				       0xFFFFFFFF));
+			b43_dma_write(ring, B43_DMA64_RXINDEX, ring->nr_slots *
+				      sizeof(struct b43_dmadesc64));
 		} else {
 			u32 ringbase = (u32) (ring->dmabase);
 
@@ -695,11 +687,12 @@ static int dmacontroller_setup(struct b4
 			b43_dma_write(ring, B43_DMA32_RXRING,
 				      (ringbase & ~SSB_DMA_TRANSLATION_MASK)
 				      | trans);
-			b43_dma_write(ring, B43_DMA32_RXINDEX, 200);
+			b43_dma_write(ring, B43_DMA32_RXINDEX, ring->nr_slots *
+				      sizeof(struct b43_dmadesc32));
 		}
 	}
 
-      out:
+out:
 	return err;
 }
 
diff -up linux-2.6.23.noarch/drivers/net/wireless/b43/main.c.orig linux-2.6.23.noarch/drivers/net/wireless/b43/main.c
--- linux-2.6.23.noarch/drivers/net/wireless/b43/main.c.orig	2007-11-15 22:41:09.000000000 -0500
+++ linux-2.6.23.noarch/drivers/net/wireless/b43/main.c	2007-11-15 22:44:59.000000000 -0500
@@ -93,6 +93,7 @@ static const struct ssb_device_id b43_ss
 	SSB_DEVICE(SSB_VENDOR_BROADCOM, SSB_DEV_80211, 7),
 	SSB_DEVICE(SSB_VENDOR_BROADCOM, SSB_DEV_80211, 9),
 	SSB_DEVICE(SSB_VENDOR_BROADCOM, SSB_DEV_80211, 10),
+	SSB_DEVICE(SSB_VENDOR_BROADCOM, SSB_DEV_80211, 13),
 	SSB_DEVTABLE_END
 };
 
@@ -3063,7 +3064,7 @@ static int b43_phy_versioning(struct b43
 			unsupported = 1;
 		break;
 	case B43_PHYTYPE_G:
-		if (phy_rev > 8)
+		if (phy_rev > 9)
 			unsupported = 1;
 		break;
 	default:
diff -up linux-2.6.23.noarch/drivers/net/wireless/b43/dma.h.orig linux-2.6.23.noarch/drivers/net/wireless/b43/dma.h
--- linux-2.6.23.noarch/drivers/net/wireless/b43/dma.h.orig	2007-11-15 22:41:09.000000000 -0500
+++ linux-2.6.23.noarch/drivers/net/wireless/b43/dma.h	2007-11-15 22:44:59.000000000 -0500
@@ -260,6 +260,13 @@ static inline u32 b43_dma_read(struct b4
 static inline
     void b43_dma_write(struct b43_dmaring *ring, u16 offset, u32 value)
 {
+	/* temporary debugging code */
+	if (((offset == 8) || (offset == 0x28)) && ring->dma64 &&
+	     ((value & 0x1FFF) != 0)) {
+		printk(KERN_ERR "b43: bad desc ring address for 64-bit DMA"
+		       " - offset, value: 0x%.2X 0x%.4X\n", offset, value);
+		dump_stack();
+	}
 	b43_write32(ring->dev, ring->mmio_base + offset, value);
 }
 

linux-2.6-rtl8180.patch:

--- NEW FILE linux-2.6-rtl8180.patch ---
diff -up linux-2.6.23.noarch/drivers/net/wireless/Kconfig.orig linux-2.6.23.noarch/drivers/net/wireless/Kconfig
--- linux-2.6.23.noarch/drivers/net/wireless/Kconfig.orig	2007-11-15 14:01:43.000000000 -0500
+++ linux-2.6.23.noarch/drivers/net/wireless/Kconfig	2007-11-15 14:08:21.000000000 -0500
@@ -546,6 +546,11 @@ config USB_ZD1201
 	  To compile this driver as a module, choose M here: the
 	  module will be called zd1201.
 
+config RTL8180
+	tristate "Realtek 8185 PCI support"
+	depends on MAC80211 && PCI && WLAN_80211 && EXPERIMENTAL
+	select EEPROM_93CX6
+
 config RTL8187
 	tristate "Realtek 8187 USB support"
 	depends on MAC80211 && USB && WLAN_80211 && EXPERIMENTAL
diff -up linux-2.6.23.noarch/drivers/net/wireless/Makefile.orig linux-2.6.23.noarch/drivers/net/wireless/Makefile
--- linux-2.6.23.noarch/drivers/net/wireless/Makefile.orig	2007-11-15 14:01:43.000000000 -0500
+++ linux-2.6.23.noarch/drivers/net/wireless/Makefile	2007-11-15 14:08:21.000000000 -0500
@@ -50,7 +50,10 @@ obj-$(CONFIG_PCMCIA_WL3501)	+= wl3501_cs
 obj-$(CONFIG_USB_ZD1201)	+= zd1201.o
 obj-$(CONFIG_LIBERTAS)		+= libertas/
 
+rtl8180-objs		:= rtl8180_dev.o rtl8180_rtl8225.o
 rtl8187-objs		:= rtl8187_dev.o rtl8187_rtl8225.o
+
+obj-$(CONFIG_RTL8180)	+= rtl8180.o
 obj-$(CONFIG_RTL8187)	+= rtl8187.o
 
 obj-$(CONFIG_ADM8211)	+= adm8211.o
diff -up /dev/null linux-2.6.23.noarch/drivers/net/wireless/rtl8180_dev.c
--- /dev/null	2007-11-12 23:12:46.917997680 -0500
+++ linux-2.6.23.noarch/drivers/net/wireless/rtl8180_dev.c	2007-11-15 14:08:31.000000000 -0500
@@ -0,0 +1,1018 @@
+
+/*
+ * Linux device driver for RTL8180 / RTL8185
+ *
+ * Copyright 2007 Michael Wu <flamingice at sourmilk.net>
+ * Copyright 2007 Andrea Merello <andreamrl at tiscali.it>
+ *
+ * Based on the r8180 driver, which is:
+ * Copyright 2004-2005 Andrea Merello <andreamrl at tiscali.it>, et al.
+ *
+ * Thanks to Realtek for their support!
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ */
+
+#include <linux/init.h>
+#include <linux/pci.h>
+#include <linux/delay.h>
+#include <linux/etherdevice.h>
+#include <linux/eeprom_93cx6.h>
+#include <net/mac80211.h>
+
+#include "rtl8180.h"
+#include "rtl8180_rtl8225.h"
+
+MODULE_AUTHOR("Michael Wu <flamingice at sourmilk.net>");
+MODULE_AUTHOR("Andrea Merello <andreamrl at tiscali.it>");
+MODULE_DESCRIPTION("RTL8180 / RTL8185 PCI wireless driver");
+MODULE_LICENSE("GPL");
+
+static struct pci_device_id rtl8180_table[] __devinitdata = {
+	{ PCI_DEVICE(PCI_VENDOR_ID_REALTEK, 0x8185) },
+	{ }
+};
+
+MODULE_DEVICE_TABLE(pci, rtl8180_table);
+
+void rtl8180_write_phy(struct ieee80211_hw *dev, u8 addr, u32 data)
+{
+	struct rtl8180_priv *priv = dev->priv;
+	int i = 10;
+	u32 buf;
+
+	buf = (data << 8) | addr;
+
+	rtl818x_iowrite32(priv, (__le32 __iomem *)&priv->map->PHY[0], buf | 0x80);
+	while (i--) {
+		rtl818x_iowrite32(priv, (__le32 __iomem *)&priv->map->PHY[0], buf);
+		if (rtl818x_ioread8(priv, &priv->map->PHY[2]) == (data & 0xFF))
+			return;
+	}
+}
+
+static void rtl8180_handle_rx(struct ieee80211_hw *dev)
+{
+	struct rtl8180_priv *priv = dev->priv;
+	unsigned int count = 32;
+
+	while (count--) {
+		struct rtl8180_rx_desc *entry = &priv->rx_ring[priv->rx_idx];
+		struct sk_buff *skb = priv->rx_buf[priv->rx_idx];
+		u32 flags = le32_to_cpu(entry->flags);
+
+		if (flags & RTL8180_RX_DESC_FLAG_OWN)
+			return;
+
+		if (unlikely(flags & (RTL8180_RX_DESC_FLAG_DMA_FAIL |
+				      RTL8180_RX_DESC_FLAG_FOF |
+				      RTL8180_RX_DESC_FLAG_RX_ERR)))
+			goto done;
+		else {
+			u32 flags2 = le32_to_cpu(entry->flags2);
+			struct ieee80211_rx_status rx_status = {0};
+			struct sk_buff *new_skb = dev_alloc_skb(MAX_RX_SIZE);
+			int rate;
+
+			if (unlikely(!new_skb))
+				goto done;
+
+			pci_unmap_single(priv->pdev,
+					 *((dma_addr_t *)skb->cb),
+					 MAX_RX_SIZE, PCI_DMA_FROMDEVICE);
+			skb_put(skb, flags & 0xFFF);
+
+			rate = (flags >> 20) & 0xF;
+			rx_status.antenna = (flags2 >> 15) & 1;
+			/* TODO: improve signal/rssi reporting */
+			rx_status.signal = flags2 & 0xFF;
+			rx_status.ssi = (flags2 >> 8) & 0x7F;
+			rx_status.rate = priv->rates[rate].rate;
+			rx_status.freq = dev->conf.freq;
+			rx_status.channel = dev->conf.channel;
+			rx_status.phymode = dev->conf.phymode;
+			rx_status.mactime = le64_to_cpu(entry->tsft);
+			ieee80211_rx_irqsafe(dev, skb, &rx_status);
+
+			skb = new_skb;
+			priv->rx_buf[priv->rx_idx] = skb;
+			*((dma_addr_t *) skb->cb) =
+				pci_map_single(priv->pdev, skb_tail_pointer(skb),
+					       MAX_RX_SIZE, PCI_DMA_FROMDEVICE);
+		}
+
+	done:
+		entry->rx_buf = cpu_to_le32(*((dma_addr_t *)skb->cb));
+		entry->flags = cpu_to_le32(RTL8180_RX_DESC_FLAG_OWN |
+					   MAX_RX_SIZE);
+		if (priv->rx_idx == 31)
+			entry->flags |= cpu_to_le32(RTL8180_RX_DESC_FLAG_EOR);
+		priv->rx_idx = (priv->rx_idx + 1) % 32;
+	}
+}
+
+static void rtl8180_handle_tx(struct ieee80211_hw *dev, unsigned int prio)
+{
+	struct rtl8180_priv *priv = dev->priv;
+	struct rtl8180_tx_ring *ring = &priv->tx_ring[prio];
+
+	while (skb_queue_len(&ring->queue)) {
+		struct rtl8180_tx_desc *entry = &ring->desc[ring->idx];
+		struct sk_buff *skb;
+		struct ieee80211_tx_status status = { {0} };
+		struct ieee80211_tx_control *control;
+		u32 flags = le32_to_cpu(entry->flags);
+
+		if (flags & RTL8180_TX_DESC_FLAG_OWN)
+			return;
+
+		ring->idx = (ring->idx + 1) % ring->entries;
+		skb = __skb_dequeue(&ring->queue);
+		pci_unmap_single(priv->pdev, le32_to_cpu(entry->tx_buf),
+				 skb->len, PCI_DMA_TODEVICE);
+
+		control = *((struct ieee80211_tx_control **)skb->cb);
+		if (control)
+			memcpy(&status.control, control, sizeof(*control));
+		kfree(control);
+
+		if (!(status.control.flags & IEEE80211_TXCTL_NO_ACK)) {
+			if (flags & RTL8180_TX_DESC_FLAG_TX_OK)
+				status.flags = IEEE80211_TX_STATUS_ACK;
+			else
+				status.excessive_retries = 1;
+		}
+		status.retry_count = flags & 0xFF;
+
+		ieee80211_tx_status_irqsafe(dev, skb, &status);
+		if (ring->entries - skb_queue_len(&ring->queue) == 2)
+			ieee80211_wake_queue(dev, prio);
+	}
+}
+
+static irqreturn_t rtl8180_interrupt(int irq, void *dev_id)
+{
+	struct ieee80211_hw *dev = dev_id;
+	struct rtl8180_priv *priv = dev->priv;
+	u16 reg;
+
+	spin_lock(&priv->lock);
+	reg = rtl818x_ioread16(priv, &priv->map->INT_STATUS);
+	if (unlikely(reg == 0xFFFF)) {
+		spin_unlock(&priv->lock);
+		return IRQ_HANDLED;
+	}
[...1672 lines suppressed...]
+
+	rtl818x_iowrite8(priv, (u8 __iomem *)((void __iomem *)priv->map + 0x5B), 0x0D); msleep(1);
+
+	rtl8225z2_rf_set_tx_power(dev, 1);
+
+	/* RX antenna default to A */
+	rtl8225_write_phy_cck(dev, 0x10, 0x9b); msleep(1);	/* B: 0xDB */
+	rtl8225_write_phy_ofdm(dev, 0x26, 0x90); msleep(1);	/* B: 0x10 */
+
+	rtl818x_iowrite8(priv, &priv->map->TX_ANTENNA, 0x03);	/* B: 0x00 */
+	msleep(1);
+	rtl818x_iowrite32(priv, (__le32 __iomem *)((void __iomem *)priv->map + 0x94), 0x15c00002);
+	rtl818x_iowrite16(priv, &priv->map->RFPinsEnable, 0x1FFF);
+}
+
+void rtl8225_rf_stop(struct ieee80211_hw *dev)
+{
+	struct rtl8180_priv *priv = dev->priv;
+	u8 reg;
+
+	rtl8225_write(dev, 0x4, 0x1f); msleep(1);
+
+	rtl818x_iowrite8(priv, &priv->map->EEPROM_CMD, RTL818X_EEPROM_CMD_CONFIG);
+	reg = rtl818x_ioread8(priv, &priv->map->CONFIG3);
+	rtl818x_iowrite8(priv, &priv->map->CONFIG3, reg | RTL818X_CONFIG3_ANAPARAM_WRITE);
+	rtl818x_iowrite32(priv, &priv->map->ANAPARAM2, RTL8225_ANAPARAM2_OFF);
+	rtl818x_iowrite32(priv, &priv->map->ANAPARAM, RTL8225_ANAPARAM_OFF);
+	rtl818x_iowrite8(priv, &priv->map->CONFIG3, reg & ~RTL818X_CONFIG3_ANAPARAM_WRITE);
+	rtl818x_iowrite8(priv, &priv->map->EEPROM_CMD, RTL818X_EEPROM_CMD_NORMAL);
+}
+
+void rtl8225_rf_set_channel(struct ieee80211_hw *dev,
+			    struct ieee80211_conf *conf)
+{
+	struct rtl8180_priv *priv = dev->priv;
+
+	if (priv->rf_init == rtl8225_rf_init)
+		rtl8225_rf_set_tx_power(dev, conf->channel);
+	else
+		rtl8225z2_rf_set_tx_power(dev, conf->channel);
+
+	rtl8225_write(dev, 0x7, rtl8225_chan[conf->channel - 1]);
+	msleep(10);
+
+	if (conf->flags & IEEE80211_CONF_SHORT_SLOT_TIME) {
+		rtl818x_iowrite8(priv, &priv->map->SLOT, 0x9);
+		rtl818x_iowrite8(priv, &priv->map->SIFS, 0x22);
+		rtl818x_iowrite8(priv, &priv->map->DIFS, 0x14);
+		rtl818x_iowrite8(priv, &priv->map->EIFS, 81);
+		rtl818x_iowrite8(priv, &priv->map->CW_VAL, 0x73);
+	} else {
+		rtl818x_iowrite8(priv, &priv->map->SLOT, 0x14);
+		rtl818x_iowrite8(priv, &priv->map->SIFS, 0x44);
+		rtl818x_iowrite8(priv, &priv->map->DIFS, 0x24);
+		rtl818x_iowrite8(priv, &priv->map->EIFS, 81);
+		rtl818x_iowrite8(priv, &priv->map->CW_VAL, 0xa5);
+	}
+}
diff -up /dev/null linux-2.6.23.noarch/drivers/net/wireless/rtl8180.h
--- /dev/null	2007-11-12 23:12:46.917997680 -0500
+++ linux-2.6.23.noarch/drivers/net/wireless/rtl8180.h	2007-11-15 14:08:21.000000000 -0500
@@ -0,0 +1,138 @@
+#ifndef RTL8180_H
+#define RTL8180_H
+
+#include "rtl818x.h"
+
+#define MAX_RX_SIZE IEEE80211_MAX_RTS_THRESHOLD
+
+#define RF_PARAM_DIGPHY		(1 << 0)
+#define RF_PARAM_ANTBDEFAULT	(1 << 1)
+#define RF_PARAM_CARRIERSENSE1	(1 << 2)
+#define RF_PARAM_CARRIERSENSE2	(1 << 3)
+
+enum rtl8180_tx_desc_flags {
+	RTL8180_TX_DESC_FLAG_NO_ENC	= (1 << 15),
+	RTL8180_TX_DESC_FLAG_TX_OK	= (1 << 15),
+	RTL8180_TX_DESC_FLAG_SPLCP	= (1 << 16),
+	RTL8180_TX_DESC_FLAG_RX_UNDER	= (1 << 16),
+	RTL8180_TX_DESC_FLAG_MOREFRAG	= (1 << 17),
+	RTL8180_TX_DESC_FLAG_CTS	= (1 << 18),
+	RTL8180_TX_DESC_FLAG_RTS	= (1 << 23),
+	RTL8180_TX_DESC_FLAG_LS		= (1 << 28),
+	RTL8180_TX_DESC_FLAG_FS		= (1 << 29),
+	RTL8180_TX_DESC_FLAG_DMA	= (1 << 30),
+	RTL8180_TX_DESC_FLAG_OWN	= (1 << 31)
+};
+
+struct rtl8180_tx_desc {
+	__le32 flags;
+	__le16 rts_duration;
+	__le16 plcp_len;
+	__le32 tx_buf;
+	__le32 frame_len;
+	__le32 next_tx_desc;
+	u8 cw;
+	u8 retry_limit;
+	u8 agc;
+	u8 flags2;
+	u32 reserved[2];
+} __attribute__ ((packed));
+
+enum rtl8180_rx_desc_flags {
+	RTL8180_RX_DESC_FLAG_ICV_ERR	= (1 << 12),
+	RTL8180_RX_DESC_FLAG_CRC32_ERR	= (1 << 13),
+	RTL8180_RX_DESC_FLAG_PM		= (1 << 14),
+	RTL8180_RX_DESC_FLAG_RX_ERR	= (1 << 15),
+	RTL8180_RX_DESC_FLAG_BCAST	= (1 << 16),
+	RTL8180_RX_DESC_FLAG_PAM	= (1 << 17),
+	RTL8180_RX_DESC_FLAG_MCAST	= (1 << 18),
+	RTL8180_RX_DESC_FLAG_SPLCP	= (1 << 25),
+	RTL8180_RX_DESC_FLAG_FOF	= (1 << 26),
+	RTL8180_RX_DESC_FLAG_DMA_FAIL	= (1 << 27),
+	RTL8180_RX_DESC_FLAG_LS		= (1 << 28),
+	RTL8180_RX_DESC_FLAG_FS		= (1 << 29),
+	RTL8180_RX_DESC_FLAG_EOR	= (1 << 30),
+	RTL8180_RX_DESC_FLAG_OWN	= (1 << 31)
+};
+
+struct rtl8180_rx_desc {
+	__le32 flags;
+	__le32 flags2;
+	union {
+		__le32 rx_buf;
+		__le64 tsft;
+	};
+} __attribute__ ((packed));
+
+struct rtl8180_tx_ring {
+	struct rtl8180_tx_desc *desc;
+	dma_addr_t dma;
+	unsigned int idx;
+	unsigned int entries;
+	struct sk_buff_head queue;
+};
+
+struct rtl8180_priv {
+	/* common between rtl818x drivers */
+	struct rtl818x_csr __iomem *map;
+	void (*rf_init)(struct ieee80211_hw *);
+	void (*rf_stop)(struct ieee80211_hw *);
+	void (*rf_set_chan)(struct ieee80211_hw *, struct ieee80211_conf *);
+	int mode;
+	int if_id;
+
+	/* rtl8180 driver specific */
+	spinlock_t lock;
+	struct rtl8180_rx_desc *rx_ring;
+	dma_addr_t rx_ring_dma;
+	unsigned int rx_idx;
+	struct sk_buff *rx_buf[32];
+	struct rtl8180_tx_ring tx_ring[4];
+	struct ieee80211_channel channels[14];
+	struct ieee80211_rate rates[12];
+	struct ieee80211_hw_mode modes[2];
+	struct pci_dev *pdev;
+	u32 rx_conf;
+
+	int r8185;
+	u32 anaparam;
+	u16 rfparam;
+	u8 csthreshold;
+};
+
+void rtl8180_write_phy(struct ieee80211_hw *dev, u8 addr, u32 data);
+
+static inline u8 rtl818x_ioread8(struct rtl8180_priv *priv, u8 __iomem *addr)
+{
+	return ioread8(addr);
+}
+
+static inline u16 rtl818x_ioread16(struct rtl8180_priv *priv, __le16 __iomem *addr)
+{
+	return ioread16(addr);
+}
+
+static inline u32 rtl818x_ioread32(struct rtl8180_priv *priv, __le32 __iomem *addr)
+{
+	return ioread32(addr);
+}
+
+static inline void rtl818x_iowrite8(struct rtl8180_priv *priv,
+				    u8 __iomem *addr, u8 val)
+{
+	iowrite8(val, addr);
+}
+
+static inline void rtl818x_iowrite16(struct rtl8180_priv *priv,
+				     __le16 __iomem *addr, u16 val)
+{
+	iowrite16(val, addr);
+}
+
+static inline void rtl818x_iowrite32(struct rtl8180_priv *priv,
+				     __le32 __iomem *addr, u32 val)
+{
+	iowrite32(val, addr);
+}
+
+#endif /* RTL8180_H */


Index: config-generic
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-8/config-generic,v
retrieving revision 1.36
retrieving revision 1.37
diff -u -r1.36 -r1.37
--- config-generic	8 Nov 2007 22:06:15 -0000	1.36
+++ config-generic	16 Nov 2007 04:00:40 -0000	1.37
@@ -1245,7 +1245,10 @@
 # CONFIG_IPW2200 is not set
 # CONFIG_IPW2100_DEBUG is not set
 # CONFIG_IPW2200_DEBUG is not set
-# CONFIG_LIBERTAS is not set
+CONFIG_LIBERTAS=m
+CONFIG_LIBERTAS_USB=m
+CONFIG_LIBERTAS_CS=m
+# CONFIG_LIBERTAS_DEBUG is not set
 
 CONFIG_IWL4965=m
 CONFIG_IWL4965_DEBUG=y
@@ -1281,7 +1284,7 @@
 CONFIG_RT61PCI_RFKILL=y
 CONFIG_RT2500USB=m
 CONFIG_RT73USB=m
-CONFIG_RTL818X=y
+CONFIG_RTL8180=m
 CONFIG_RTL8187=m
 CONFIG_TMD_HERMES=m
 CONFIG_USB_ATMEL=m


Index: kernel.spec
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-8/kernel.spec,v
retrieving revision 1.264
retrieving revision 1.265
diff -u -r1.264 -r1.265
--- kernel.spec	15 Nov 2007 20:03:44 -0000	1.264
+++ kernel.spec	16 Nov 2007 04:00:40 -0000	1.265
@@ -673,7 +673,8 @@
 Patch690: linux-2.6-at76.patch
 Patch691: linux-2.6-ath5k.patch
 Patch692: linux-2.6-zd1211rw-mac80211.patch
-Patch700: linux-2.6-drivers-ssb-debug-revision.patch
+Patch693: linux-2.6-rtl8180.patch
+Patch694: linux-2.6-b43-rev-d.patch
 Patch710: linux-2.6-netdev-e1000e-01.patch
 Patch711: linux-2.6-netdev-e1000e-02.patch
 Patch712: linux-2.6-netdev-e1000e-03.patch
@@ -1284,9 +1285,8 @@
 ApplyPatch linux-2.6-at76.patch
 ApplyPatch linux-2.6-ath5k.patch
 ApplyPatch linux-2.6-zd1211rw-mac80211.patch
-
-# debug the SSB driver
-ApplyPatch linux-2.6-drivers-ssb-debug-revision.patch
+ApplyPatch linux-2.6-rtl8180.patch
+ApplyPatch linux-2.6-b43-rev-d.patch
 
 # latest Intel driver for ich9
 ApplyPatch linux-2.6-netdev-e1000e-01.patch
@@ -1989,6 +1989,14 @@
 
 
 %changelog
+* Thu Nov 15 2007 John W. Linville <linville at redhat.com>
+- wireless fixes from 2.6.24
+- wireless updates destined for 2.6.25
+- ath5k driver updates
+- add rtl8180 driver
+- enable libertas driver
+- add experimental b43 rev D support
+
 * Thu Nov 15 2007 Chuck Ebbert <cebbert at redhat.com>
 - Add DMI based autoloading for the Dell dcdbas driver (#248257)
 

linux-2.6-ath5k.patch:

Index: linux-2.6-ath5k.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-8/linux-2.6-ath5k.patch,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- linux-2.6-ath5k.patch	8 Nov 2007 22:06:15 -0000	1.6
+++ linux-2.6-ath5k.patch	16 Nov 2007 04:00:40 -0000	1.7
@@ -1,7 +1,7 @@
 diff -up linux-2.6.23.noarch/drivers/net/wireless/Kconfig.orig linux-2.6.23.noarch/drivers/net/wireless/Kconfig
---- linux-2.6.23.noarch/drivers/net/wireless/Kconfig.orig	2007-11-08 16:48:58.000000000 -0500
-+++ linux-2.6.23.noarch/drivers/net/wireless/Kconfig	2007-11-08 16:50:01.000000000 -0500
-@@ -598,6 +598,19 @@ config P54_PCI
+--- linux-2.6.23.noarch/drivers/net/wireless/Kconfig.orig	2007-11-15 12:47:29.000000000 -0500
++++ linux-2.6.23.noarch/drivers/net/wireless/Kconfig	2007-11-15 13:14:13.000000000 -0500
+@@ -598,6 +598,24 @@ config P54_PCI
  	tristate "Prism54 PCI support"
  	depends on P54_COMMON && PCI
  
@@ -10,8 +10,13 @@
 +	depends on PCI && MAC80211 && WLAN_80211 && EXPERIMENTAL
 +	default m
 +	---help---
-+	  This module adds support for atheros 5xxx (e.g. 5212) wireless
-+	  cards. If you have this card in your PC, select this to be build.
++	  This module adds support for wireless adapters based on
++	  Atheros 5xxx chipset.
++
++	  Currently the following chip versions are supported:
++
++	  MAC: AR5211 AR5212
++	  PHY: RF5111/2111 RF5112/2112 RF5413/2413
 +
 +	  This driver uses the kernel's mac80211 subsystem.
 +
@@ -22,8 +27,8 @@
  source "drivers/net/wireless/bcm43xx/Kconfig"
  source "drivers/net/wireless/b43/Kconfig"
 diff -up linux-2.6.23.noarch/drivers/net/wireless/Makefile.orig linux-2.6.23.noarch/drivers/net/wireless/Makefile
---- linux-2.6.23.noarch/drivers/net/wireless/Makefile.orig	2007-11-08 16:48:58.000000000 -0500
-+++ linux-2.6.23.noarch/drivers/net/wireless/Makefile	2007-11-08 16:49:33.000000000 -0500
+--- linux-2.6.23.noarch/drivers/net/wireless/Makefile.orig	2007-11-15 12:47:29.000000000 -0500
++++ linux-2.6.23.noarch/drivers/net/wireless/Makefile	2007-11-15 13:13:38.000000000 -0500
 @@ -62,3 +62,5 @@ obj-$(CONFIG_RT2X00)		+= rt2x00/
  obj-$(CONFIG_P54_COMMON)	+= p54common.o
  obj-$(CONFIG_P54_USB)		+= p54usb.o
@@ -31,9 +36,9 @@
 +
 +obj-$(CONFIG_ATH5K)	+= ath5k/
 diff -up /dev/null linux-2.6.23.noarch/drivers/net/wireless/ath5k/initvals.c
---- /dev/null	2007-10-26 17:27:29.928203379 -0400
-+++ linux-2.6.23.noarch/drivers/net/wireless/ath5k/initvals.c	2007-11-08 16:49:33.000000000 -0500
-@@ -0,0 +1,1102 @@
+--- /dev/null	2007-11-12 23:12:46.917997680 -0500
++++ linux-2.6.23.noarch/drivers/net/wireless/ath5k/initvals.c	2007-11-15 13:13:38.000000000 -0500
+@@ -0,0 +1,1332 @@
 +/*
 + * Initial register settings functions
 + *
@@ -891,6 +896,230 @@
 +		{ 0x642c0140, 0x642c0140, 0x6442c160, 0x6442c160, 0x6442c160 } },
 +};
 +
++/* Initial mode-specific settings for RF5413/5414 */
++static const struct ath5k_ini_mode rf5413_ini_mode[] = {
++	{ AR5K_TXCFG,
++		{ 0x00000015, 0x00000015, 0x00000015, 0x00000015, 0x00000015, } },
++	{ AR5K_USEC_5211,
++		{ 0x128d93a7, 0x128d93a7, 0x04e01395, 0x12e013ab, 0x12e013ab, } },
++	{ AR5K_PHY_TURBO,
++		{ 0x00000000, 0x00000003, 0x00000000, 0x00000000, 0x00000003, } },
++	{ 0x9820,
++		{ 0x02020200, 0x02020200, 0x02010200, 0x02020200, 0x02020200, } },
++	{ 0x9824,
++		{ 0x00000e0e, 0x00000e0e, 0x00000e0e, 0x00000e0e, 0x00000e0e, } },
++	{ 0x9828,
++		{ 0x0a020001, 0x0a020001, 0x05020100, 0x0a020001, 0x0a020001, } },
++	{ 0x9834,
++		{ 0x00000e0e, 0x00000e0e, 0x00000e0e, 0x00000e0e, 0x00000e0e, } },
++	{ 0x9838,
++		{ 0x00000007, 0x00000007, 0x0000000b, 0x0000000b, 0x0000000b, } },
++	{ 0x9844,
++		{ 0x1372161c, 0x13721c25, 0x13721728, 0x137216a2, 0x13721c25, } },
++	{ 0x9848,
++		{ 0x0018fa61, 0x0018fa61, 0x001a1a63, 0x001a1a63, 0x001a1a63, } },
++	{ 0x9850,
++		{ 0x0c98b4e0, 0x0c98b4e0, 0x0c98b0da, 0x0c98b0da, 0x0c98b0da, } },
++	{ AR5K_PHY_SIG,
++		{ 0x7ec80d2e, 0x7ec80d2e, 0x7ec80d2e, 0x7ec80d2e, 0x7ec80d2e, } },
++	{ AR5K_PHY_AGCCOARSE,
++		{ 0x3139605e, 0x3139605e, 0x3139605e, 0x3139605e, 0x3139605e, } },
++	{ AR5K_PHY_AGCCTL,
++		{ 0x00009d10, 0x00009d10, 0x00009d18, 0x00009d10, 0x00009d10, } },
++	{ AR5K_PHY_NF,
++		{ 0x0001ce00, 0x0001ce00, 0x0001ce00, 0x0001ce00, 0x0001ce00, } },
++	{ AR5K_PHY_ADCSAT,
++		{ 0x409a4190, 0x409a4190, 0x409a4190, 0x409a4190, 0x409a4190, } },
++	{ 0x986c,
++		{ 0x050cb081, 0x050cb081, 0x050cb081, 0x050cb081, 0x050cb081, } },
++	{ AR5K_PHY_RX_DELAY,
++		{ 0x000007d0, 0x000007d0, 0x0000044c, 0x00000898, 0x00000898, } },
++	{ 0x9918,
++		{ 0x000001b8, 0x000001b8, 0x00000084, 0x00000108, 0x000001b8, } },
++	{ 0x9924,
++		{ 0x10058a05, 0x10058a05, 0x10058a05, 0x10058a05, 0x10058a05, } },
++	{ AR5K_PHY_FRAME_CTL_5211,
++		{ 0xf7b81000, 0xf7b81000, 0xf7b80d00, 0xf7b81000, 0xf7b81000, } },
++	{ 0xa230,
++		{ 0x00000000, 0x00000000, 0x00000000, 0x00000108, 0x00000000, } },
++	{ AR5K_PHY_CCKTXCTL,
++		{ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, } },
++	{ 0xa208,
++		{ 0xd6be6788, 0xd6be6788, 0xd03e6788, 0xd03e6788, 0xd03e6788, } },
++	{ AR5K_PHY_GAIN_2GHZ,
++		{ 0x002ec1e0, 0x002ec1e0, 0x002ac120, 0x002ac120, 0x002ac120, } },
++	{ 0xa21c,
++		{ 0x1883800a, 0x1883800a, 0x1863800a, 0x1883800a, 0x1883800a, } },
++	{ 0xa300,
++		{ 0x18010000, 0x18010000, 0x18010000, 0x18010000, 0x18010000, } },
++	{ 0xa304,
++		{ 0x30032602, 0x30032602, 0x30032602, 0x30032602, 0x30032602, } },
++	{ 0xa308,
++		{ 0x48073e06, 0x48073e06, 0x48073e06, 0x48073e06, 0x48073e06, } },
++	{ 0xa30c,
++		{ 0x560b4c0a, 0x560b4c0a, 0x560b4c0a, 0x560b4c0a, 0x560b4c0a, } },
++	{ 0xa310,
++		{ 0x641a600f, 0x641a600f, 0x641a600f, 0x641a600f, 0x641a600f, } },
++	{ 0xa314,
++		{ 0x784f6e1b, 0x784f6e1b, 0x784f6e1b, 0x784f6e1b, 0x784f6e1b, } },
++	{ 0xa318,
++		{ 0x868f7c5a, 0x868f7c5a, 0x868f7c5a, 0x868f7c5a, 0x868f7c5a, } },
++	{ 0xa31c,
++		{ 0x90cf865b, 0x90cf865b, 0x8ecf865b, 0x8ecf865b, 0x8ecf865b, } },
++	{ 0xa320,
++		{ 0x9d4f970f, 0x9d4f970f, 0x9b4f970f, 0x9b4f970f, 0x9b4f970f, } },
++	{ 0xa324,
++		{ 0xa7cfa38f, 0xa7cfa38f, 0xa3cf9f8f, 0xa3cf9f8f, 0xa3cf9f8f, } },
++	{ 0xa328,
++		{ 0xb55faf1f, 0xb55faf1f, 0xb35faf1f, 0xb35faf1f, 0xb35faf1f, } },
++	{ 0xa32c,
++		{ 0xbddfb99f, 0xbddfb99f, 0xbbdfb99f, 0xbbdfb99f, 0xbbdfb99f, } },
++	{ 0xa330,
++		{ 0xcb7fc53f, 0xcb7fc53f, 0xcb7fc73f, 0xcb7fc73f, 0xcb7fc73f, } },
++	{ 0xa334,
++		{ 0xd5ffd1bf, 0xd5ffd1bf, 0xd3ffd1bf, 0xd3ffd1bf, 0xd3ffd1bf, } },
++	{ AR5K_DCU_FP,
++		{ 0x000003e0, 0x000003e0, 0x000003e0, 0x000003e0, 0x000003e0, } },
++	{ 0x4068,
++		{ 0x00000010, 0x00000010, 0x00000010, 0x00000010, 0x00000010, } },
++	{ 0x8060,
++		{ 0x0000000f, 0x0000000f, 0x0000000f, 0x0000000f, 0x0000000f, } },
++	{ 0x809c,
++		{ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, } },
++	{ 0x80a0,
++		{ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, } },
++	{ 0x8118,
++		{ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, } },
++	{ 0x811c,
++		{ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, } },
++	{ 0x8120,
++		{ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, } },
++	{ 0x8124,
++		{ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, } },
++	{ 0x8128,
++		{ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, } },
++	{ 0x812c,
++		{ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, } },
++	{ 0x8130,
++		{ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, } },
++	{ 0x8134,
++		{ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, } },
++	{ 0x8138,
++		{ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, } },
++	{ 0x813c,
++		{ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, } },
++	{ 0x8140,
++		{ 0x800003f9, 0x800003f9, 0x800003f9, 0x800003f9, 0x800003f9, } },
++	{ 0x8144,
++		{ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, } },
++	{ AR5K_PHY_AGC,
++		{ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, } },
++	{ 0x982c,
++		{ 0x0000a000, 0x0000a000, 0x0000a000, 0x0000a000, 0x0000a000, } },
++	{ 0x983c,
++		{ 0x00200400, 0x00200400, 0x00200400, 0x00200400, 0x00200400, } },
++	{ 0x984c,
++		{ 0x1284233c, 0x1284233c, 0x1284233c, 0x1284233c, 0x1284233c, } },
++	{ AR5K_PHY_SCR,
++		{ 0x0000001f, 0x0000001f, 0x0000001f, 0x0000001f, 0x0000001f, } },
++	{ AR5K_PHY_SLMT,
++		{ 0x00000080, 0x00000080, 0x00000080, 0x00000080, 0x00000080, } },
++	{ AR5K_PHY_SCAL,
++		{ 0x0000000e, 0x0000000e, 0x0000000e, 0x0000000e, 0x0000000e, } },
++	{ 0x9958,
++		{ 0x00081fff, 0x00081fff, 0x00081fff, 0x00081fff, 0x00081fff, } },
++	{ 0x9980,
++		{ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, } },
++	{ 0x9984,
++		{ 0x02800000, 0x02800000, 0x02800000, 0x02800000, 0x02800000, } },
++	{ 0x99a0,
++		{ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, } },
++	{ 0x99e0,
++		{ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, } },
++	{ 0x99e4,
++		{ 0xaaaaaaaa, 0xaaaaaaaa, 0xaaaaaaaa, 0xaaaaaaaa, 0xaaaaaaaa, } },
++	{ 0x99e8,
++		{ 0x3c466478, 0x3c466478, 0x3c466478, 0x3c466478, 0x3c466478, } },
++	{ 0x99ec,
++		{ 0x000000aa, 0x000000aa, 0x000000aa, 0x000000aa, 0x000000aa, } },
++	{ AR5K_PHY_SCLOCK,
++		{ 0x0000000c, 0x0000000c, 0x0000000c, 0x0000000c, 0x0000000c, } },
++	{ AR5K_PHY_SDELAY,
++		{ 0x000000ff, 0x000000ff, 0x000000ff, 0x000000ff, 0x000000ff, } },
++	{ AR5K_PHY_SPENDING,
++		{ 0x00000014, 0x00000014, 0x00000014, 0x00000014, 0x00000014, } },
++	{ 0xa228,
++		{ 0x000009b5, 0x000009b5, 0x000009b5, 0x000009b5, 0x000009b5, } },
++	{ 0xa23c,
++		{ 0x93c889af, 0x93c889af, 0x93c889af, 0x93c889af, 0x93c889af, } },
++	{ 0xa24c,
++		{ 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000001, } },
++	{ 0xa250,
++		{ 0x0000a000, 0x0000a000, 0x0000a000, 0x0000a000, 0x0000a000, } },
++	{ 0xa254,
++		{ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, } },
++	{ 0xa258,
++		{ 0x0cc75380, 0x0cc75380, 0x0cc75380, 0x0cc75380, 0x0cc75380, } },
++	{ 0xa25c,
++		{ 0x0f0f0f01, 0x0f0f0f01, 0x0f0f0f01, 0x0f0f0f01, 0x0f0f0f01, } },
++	{ 0xa260,
++		{ 0x5f690f01, 0x5f690f01, 0x5f690f01, 0x5f690f01, 0x5f690f01, } },
++	{ 0xa264,
++		{ 0x00418a11, 0x00418a11, 0x00418a11, 0x00418a11, 0x00418a11, } },
++	{ 0xa268,
++		{ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, } },
++	{ 0xa26c,
++		{ 0x0c30c16a, 0x0c30c16a, 0x0c30c16a, 0x0c30c16a, 0x0c30c16a, } },
++	{ 0xa270,
++		{ 0x00820820, 0x00820820, 0x00820820, 0x00820820, 0x00820820, } },
++	{ 0xa274,
++		{ 0x081b7caa, 0x081b7caa, 0x081b7caa, 0x081b7caa, 0x081b7caa, } },
++	{ 0xa278,
++		{ 0x1ce739ce, 0x1ce739ce, 0x1ce739ce, 0x1ce739ce, 0x1ce739ce, } },
++	{ 0xa27c,
++		{ 0x051701ce, 0x051701ce, 0x051701ce, 0x051701ce, 0x051701ce, } },
++	{ 0xa338,
++		{ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, } },
++	{ 0xa33c,
++		{ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, } },
++	{ 0xa340,
++		{ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, } },
++	{ 0xa344,
++		{ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, } },
++	{ 0xa348,
++		{ 0x3fffffff, 0x3fffffff, 0x3fffffff, 0x3fffffff, 0x3fffffff, } },
++	{ 0xa34c,
++		{ 0x3fffffff, 0x3fffffff, 0x3fffffff, 0x3fffffff, 0x3fffffff, } },
++	{ 0xa350,
++		{ 0x3fffffff, 0x3fffffff, 0x3fffffff, 0x3fffffff, 0x3fffffff, } },
++	{ 0xa354,
++		{ 0x0003ffff, 0x0003ffff, 0x0003ffff, 0x0003ffff, 0x0003ffff, } },
++	{ 0xa358,
++		{ 0x79a8aa1f, 0x79a8aa1f, 0x79a8aa1f, 0x79a8aa1f, 0x79a8aa1f, } },
++	{ 0xa35c,
++		{ 0x066c420f, 0x066c420f, 0x066c420f, 0x066c420f, 0x066c420f, } },
++	{ 0xa360,
++		{ 0x0f282207, 0x0f282207, 0x0f282207, 0x0f282207, 0x0f282207, } },
++	{ 0xa364,
++		{ 0x17601685, 0x17601685, 0x17601685, 0x17601685, 0x17601685, } },
++	{ 0xa368,
++		{ 0x1f801104, 0x1f801104, 0x1f801104, 0x1f801104, 0x1f801104, } },
++	{ 0xa36c,
++		{ 0x37a00c03, 0x37a00c03, 0x37a00c03, 0x37a00c03, 0x37a00c03, } },
++	{ 0xa370,
++		{ 0x3fc40883, 0x3fc40883, 0x3fc40883, 0x3fc40883, 0x3fc40883, } },
++	{ 0xa374,
++		{ 0x57c00803, 0x57c00803, 0x57c00803, 0x57c00803, 0x57c00803, } },
++	{ 0xa378,
++		{ 0x5fd80682, 0x5fd80682, 0x5fd80682, 0x5fd80682, 0x5fd80682, } },
++	{ 0xa37c,
++		{ 0x7fe00482, 0x7fe00482, 0x7fe00482, 0x7fe00482, 0x7fe00482, } },
++	{ 0xa380,
++		{ 0x7f3c7bba, 0x7f3c7bba, 0x7f3c7bba, 0x7f3c7bba, 0x7f3c7bba, } },
++	{ 0xa384,
++		{ 0xf3307ff0, 0xf3307ff0, 0xf3307ff0, 0xf3307ff0, 0xf3307ff0, } },
++};
++
 +/*
 + * Initial BaseBand Gain settings for RF5111/5112 (only AR5210 comes with
 + * RF5110 so initial BB Gain settings are included in AR5K_AR5210_INI)
@@ -1086,14 +1315,19 @@
 +	if (ah->ah_version == AR5K_AR5212) {
 +		ath5k_hw_ini_mode_registers(ah, ARRAY_SIZE(ar5212_ini_mode),
 +				ar5212_ini_mode, mode);
-+		if (ah->ah_radio == AR5K_RF5111)
++		if (ah->ah_radio == AR5K_RF5111){
 +			ath5k_hw_ini_mode_registers(ah,
 +					ARRAY_SIZE(ar5212_rf5111_ini_mode),
 +					ar5212_rf5111_ini_mode, mode);
-+		else if (ah->ah_radio == AR5K_RF5112)
++		} else if (ah->ah_radio == AR5K_RF5112){
 +			ath5k_hw_ini_mode_registers(ah,
 +					ARRAY_SIZE(ar5212_rf5112_ini_mode),
 +					ar5212_rf5112_ini_mode, mode);
++		} else if (ah->ah_radio == AR5K_RF5413){
++			ath5k_hw_ini_mode_registers(ah,
++					ARRAY_SIZE(rf5413_ini_mode),
++					rf5413_ini_mode, mode);
++		}
 +	}
 +	/*For 5211*/
 +	if (ah->ah_version == AR5K_AR5211)
@@ -1108,9 +1342,10 @@
 +	if (ah->ah_version == AR5K_AR5212) {
 +		ath5k_hw_ini_registers(ah, ARRAY_SIZE(ar5212_ini),
 +				ar5212_ini, change_channel);
-+		if (ah->ah_radio == AR5K_RF5112) {
++		if (ah->ah_radio >= AR5K_RF5112) {
 +			ath5k_hw_reg_write(ah, AR5K_PHY_PAPD_PROBE_INI_5112,
 +					AR5K_PHY_PAPD_PROBE);
++			/* Same for RF5413/5414 */
 +			ath5k_hw_ini_registers(ah,
 +					ARRAY_SIZE(rf5112_ini_bbgain),
 +					rf5112_ini_bbgain, change_channel);
@@ -1137,9 +1372,9 @@
 +	return 0;
 +}
 diff -up /dev/null linux-2.6.23.noarch/drivers/net/wireless/ath5k/hw.c
---- /dev/null	2007-10-26 17:27:29.928203379 -0400
-+++ linux-2.6.23.noarch/drivers/net/wireless/ath5k/hw.c	2007-11-08 16:49:33.000000000 -0500
-@@ -0,0 +1,4395 @@
+--- /dev/null	2007-11-12 23:12:46.917997680 -0500
++++ linux-2.6.23.noarch/drivers/net/wireless/ath5k/hw.c	2007-11-15 13:13:38.000000000 -0500
+@@ -0,0 +1,4400 @@
 + /*
 + * Copyright (c) 2004-2007 Reyk Floeter <reyk at openbsd.org>
 + * Copyright (c) 2006-2007 Nick Kossifidis <mickflemm at gmail.com>
@@ -1368,11 +1603,15 @@
 +		ah->ah_radio_2ghz_revision = 0;
 +
 +	/* Identify the radio chip*/
-+	if (ah->ah_version == AR5K_AR5210)
++	if (ah->ah_version == AR5K_AR5210) {
 +		ah->ah_radio = AR5K_RF5110;
-+	else
-+		ah->ah_radio = ah->ah_radio_5ghz_revision <
-+			AR5K_SREV_RAD_5112 ? AR5K_RF5111 : AR5K_RF5112;
++	} else if (ah->ah_radio_5ghz_revision < AR5K_SREV_RAD_5112) {
++		ah->ah_radio = AR5K_RF5111;
++	} else if (ah->ah_radio_5ghz_revision < AR5K_SREV_RAD_SC1) {
++		ah->ah_radio = AR5K_RF5112;
++	} else {
++		ah->ah_radio = AR5K_RF5413;
++	}
 +
 +	ah->ah_phy = AR5K_PHY(0);
 +
@@ -1595,9 +1834,9 @@
 +	kfree(ah);
 +}
 +
-+/*
-+ * Reset function and helpers
-+ */
++/****************************\
++  Reset function and helpers
++\****************************/
 +
 +/**
 + * ath5k_hw_write_ofdm_timings - set OFDM timings on AR5212
@@ -1779,7 +2018,8 @@
 +	 */
 +	if (ah->ah_version != AR5K_AR5210) {
 +		if (ah->ah_radio != AR5K_RF5111 &&
-+				ah->ah_radio != AR5K_RF5112) {
++			ah->ah_radio != AR5K_RF5112 &&
++			ah->ah_radio != AR5K_RF5413) {
 +			AR5K_PRINTF("invalid phy radio: %u\n", ah->ah_radio);
 +			return -EINVAL;
 +		}
@@ -1861,7 +2101,7 @@
 +				AR5K_SREV_RAD_5112A) {
 +			ath5k_hw_reg_write(ah, AR5K_PHY_CCKTXCTL_WORLD,
 +					AR5K_PHY_CCKTXCTL);
-+			if (channel->val & CHANNEL_A)
++			if (channel->val & CHANNEL_5GHZ)
 +				data = 0xffb81020;
 +			else
 +				data = 0xffb80d20;
@@ -5536,8 +5776,8 @@
 +	return -EIO;
 +}
 diff -up /dev/null linux-2.6.23.noarch/drivers/net/wireless/ath5k/regdom.c
---- /dev/null	2007-10-26 17:27:29.928203379 -0400
-+++ linux-2.6.23.noarch/drivers/net/wireless/ath5k/regdom.c	2007-11-08 16:49:33.000000000 -0500
+--- /dev/null	2007-11-12 23:12:46.917997680 -0500
++++ linux-2.6.23.noarch/drivers/net/wireless/ath5k/regdom.c	2007-11-15 13:13:38.000000000 -0500
 @@ -0,0 +1,121 @@
 +/*
 + * Copyright (c) 2004, 2005 Reyk Floeter <reyk at vantronix.net>
@@ -5661,15 +5901,15 @@
 +}
 +
 diff -up /dev/null linux-2.6.23.noarch/drivers/net/wireless/ath5k/Makefile
---- /dev/null	2007-10-26 17:27:29.928203379 -0400
-+++ linux-2.6.23.noarch/drivers/net/wireless/ath5k/Makefile	2007-11-08 16:49:33.000000000 -0500
+--- /dev/null	2007-11-12 23:12:46.917997680 -0500
++++ linux-2.6.23.noarch/drivers/net/wireless/ath5k/Makefile	2007-11-15 13:13:38.000000000 -0500
 @@ -0,0 +1,2 @@
 +ath5k-objs		= base.o hw.o regdom.o initvals.o phy.o
 +obj-$(CONFIG_ATH5K)	+= ath5k.o
 diff -up /dev/null linux-2.6.23.noarch/drivers/net/wireless/ath5k/base.c
---- /dev/null	2007-10-26 17:27:29.928203379 -0400
-+++ linux-2.6.23.noarch/drivers/net/wireless/ath5k/base.c	2007-11-08 16:49:33.000000000 -0500
-@@ -0,0 +1,2914 @@
+--- /dev/null	2007-11-12 23:12:46.917997680 -0500
++++ linux-2.6.23.noarch/drivers/net/wireless/ath5k/base.c	2007-11-15 13:13:38.000000000 -0500
+@@ -0,0 +1,2932 @@
 +/*-
 + * Copyright (c) 2002-2005 Sam Leffler, Errno Consulting
 + * Copyright (c) 2004-2005 Atheros Communications, Inc.
@@ -5767,7 +6007,7 @@
 +	ATH_LED_RX,
 +};
 +
-+static int ath5k_calinterval = 1; /* Calibrate PHY every 1 sec (TODO: Fixme) */
++static int ath5k_calinterval = 10; /* Calibrate PHY every 10 secs (TODO: Fixme) */
 +
 +#if AR_DEBUG
 +static unsigned int ath5k_debug;
@@ -6242,22 +6482,40 @@
 +	if (ret)
 +		goto err_ah;
 +
-+	dev_info(&pdev->dev, "Atheros AR%s chip found: MAC 0x%x, PHY: 0x%x\n",
++	dev_info(&pdev->dev, "Atheros AR%s chip found (MAC: 0x%x, PHY: 0x%x)\n",
 +			ath5k_chip_name(AR5K_VERSION_VER,sc->ah->ah_mac_srev),
 +					sc->ah->ah_mac_srev,
 +					sc->ah->ah_phy_revision);
 +
-+	if(sc->ah->ah_radio_5ghz_revision && !sc->ah->ah_radio_2ghz_revision){
-+		dev_info(&pdev->dev, "RF%s radio found (0x%x)\n",
-+			ath5k_chip_name(AR5K_VERSION_RAD,sc->ah->ah_radio_5ghz_revision),
-+					sc->ah->ah_radio_5ghz_revision);
-+	} else if(sc->ah->ah_radio_5ghz_revision && sc->ah->ah_radio_2ghz_revision){
-+		dev_info(&pdev->dev, "RF%s 5GHz radio found (0x%x)\n",
-+			ath5k_chip_name(AR5K_VERSION_RAD,sc->ah->ah_radio_5ghz_revision),
-+					sc->ah->ah_radio_5ghz_revision);
-+		dev_info(&pdev->dev, "RF%s 2GHz radio found (0x%x)\n",
-+			ath5k_chip_name(AR5K_VERSION_RAD,sc->ah->ah_radio_2ghz_revision),
-+					sc->ah->ah_radio_2ghz_revision);
++	if(!sc->ah->ah_single_chip){
++		/* Single chip radio (!RF5111) */
++		if(sc->ah->ah_radio_5ghz_revision && !sc->ah->ah_radio_2ghz_revision) {
++			/* No 5GHz support -> report 2GHz radio */
++			if(!test_bit(MODE_IEEE80211A, sc->ah->ah_capabilities.cap_mode)){
++				dev_info(&pdev->dev, "RF%s 2GHz radio found (0x%x)\n",
++					ath5k_chip_name(AR5K_VERSION_RAD,sc->ah->ah_radio_5ghz_revision),
++							sc->ah->ah_radio_5ghz_revision);
++			/* No 2GHz support (5110 and some 5Ghz only cards) -> report 5Ghz radio */
++			} else if(!test_bit(MODE_IEEE80211B, sc->ah->ah_capabilities.cap_mode)){
++				dev_info(&pdev->dev, "RF%s 5GHz radio found (0x%x)\n",
++					ath5k_chip_name(AR5K_VERSION_RAD,sc->ah->ah_radio_5ghz_revision),
++							sc->ah->ah_radio_5ghz_revision);
++			/* Multiband radio */
++			} else {
++				dev_info(&pdev->dev, "RF%s multiband radio found (0x%x)\n",
++					ath5k_chip_name(AR5K_VERSION_RAD,sc->ah->ah_radio_5ghz_revision),
++							sc->ah->ah_radio_5ghz_revision);
++			}
++		}
++		/* Multi chip radio (RF5111 - RF2111) -> report both 2GHz/5GHz radios */
++		else if(sc->ah->ah_radio_5ghz_revision && sc->ah->ah_radio_2ghz_revision){
++			dev_info(&pdev->dev, "RF%s 5GHz radio found (0x%x)\n",
++				ath5k_chip_name(AR5K_VERSION_RAD,sc->ah->ah_radio_5ghz_revision),
++						sc->ah->ah_radio_5ghz_revision);
++			dev_info(&pdev->dev, "RF%s 2GHz radio found (0x%x)\n",
++				ath5k_chip_name(AR5K_VERSION_RAD,sc->ah->ah_radio_2ghz_revision),
++						sc->ah->ah_radio_2ghz_revision);
++		}
 +	}
 +
 +
@@ -8585,8 +8843,8 @@
 +}
 +
 diff -up /dev/null linux-2.6.23.noarch/drivers/net/wireless/ath5k/reg.h
---- /dev/null	2007-10-26 17:27:29.928203379 -0400
-+++ linux-2.6.23.noarch/drivers/net/wireless/ath5k/reg.h	2007-11-08 16:49:33.000000000 -0500
+--- /dev/null	2007-11-12 23:12:46.917997680 -0500
++++ linux-2.6.23.noarch/drivers/net/wireless/ath5k/reg.h	2007-11-15 13:13:38.000000000 -0500
 @@ -0,0 +1,1983 @@
 +/*
 + * Copyright (c) 2007 Nick Kossifidis <mickflemm at gmail.com>
@@ -10572,8 +10830,8 @@
 +#define	AR5K_PHY_GAIN_2GHZ_MARGIN_TXRX_S	18
 +#define	AR5K_PHY_GAIN_2GHZ_INI_5111	0x6480416c
 diff -up /dev/null linux-2.6.23.noarch/drivers/net/wireless/ath5k/regdom.h
---- /dev/null	2007-10-26 17:27:29.928203379 -0400
-+++ linux-2.6.23.noarch/drivers/net/wireless/ath5k/regdom.h	2007-11-08 16:49:33.000000000 -0500
+--- /dev/null	2007-11-12 23:12:46.917997680 -0500
++++ linux-2.6.23.noarch/drivers/net/wireless/ath5k/regdom.h	2007-11-15 13:13:38.000000000 -0500
 @@ -0,0 +1,500 @@
 +/*
 + * Copyright (c) 2004, 2005 Reyk Floeter <reyk at openbsd.org>
@@ -11076,9 +11334,9 @@
 +
 +#endif
 diff -up /dev/null linux-2.6.23.noarch/drivers/net/wireless/ath5k/phy.c
---- /dev/null	2007-10-26 17:27:29.928203379 -0400
-+++ linux-2.6.23.noarch/drivers/net/wireless/ath5k/phy.c	2007-11-08 16:49:33.000000000 -0500
-@@ -0,0 +1,1687 @@
+--- /dev/null	2007-11-12 23:12:46.917997680 -0500
++++ linux-2.6.23.noarch/drivers/net/wireless/ath5k/phy.c	2007-11-15 13:13:38.000000000 -0500
+@@ -0,0 +1,1907 @@
 +/*
 + * PHY functions
 + *
@@ -11538,6 +11796,97 @@
 +	    { 0x00000003, 0x00000003, 0x00000003, 0x00000003, 0x00000003 } },
 +};
 +
++/* RF5413/5414 mode-specific init registers */
++static const struct ath5k_ini_rf rfregs_5413[] = {
++	{ 1, 0x98d4,
++	/*    mode a/XR   mode aTurbo mode b      mode g      mode gTurbo */
++	    { 0x00000020, 0x00000020, 0x00000020, 0x00000020, 0x00000020 } },
++	{ 2, 0x98d0,
++	    { 0x00000008, 0x00000008, 0x00000008, 0x00000008, 0x00000008 } },
++	{ 3, 0x98dc,
++	    { 0x00a000c0, 0x00a000c0, 0x00e000c0, 0x00e000c0, 0x00e000c0 } },
++	{ 6, 0x989c,
++	    { 0x33000000, 0x33000000, 0x33000000, 0x33000000, 0x33000000 } },
++	{ 6, 0x989c,
++	    { 0x01000000, 0x01000000, 0x01000000, 0x01000000, 0x01000000 } },
++	{ 6, 0x989c,
++	    { 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 } },
++	{ 6, 0x989c,
++	    { 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 } },
++	{ 6, 0x989c,
++	    { 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 } },
++	{ 6, 0x989c,
++	    { 0x1f000000, 0x1f000000, 0x1f000000, 0x1f000000, 0x1f000000 } },
++	{ 6, 0x989c,
++	    { 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 } },
++	{ 6, 0x989c,
++	    { 0x00b80000, 0x00b80000, 0x00b80000, 0x00b80000, 0x00b80000 } },
++	{ 6, 0x989c,
++	    { 0x00b70000, 0x00b70000, 0x00b70000, 0x00b70000, 0x00b70000 } },
++	{ 6, 0x989c,
++	    { 0x00840000, 0x00840000, 0x00840000, 0x00840000, 0x00840000 } },
++	{ 6, 0x989c,
++	    { 0x00980000, 0x00980000, 0x00980000, 0x00980000, 0x00980000 } },
++	{ 6, 0x989c,
++	    { 0x00c00000, 0x00c00000, 0x00c00000, 0x00c00000, 0x00c00000 } },
++	{ 6, 0x989c,
++	    { 0x00ff0000, 0x00ff0000, 0x00ff0000, 0x00ff0000, 0x00ff0000 } },
++	{ 6, 0x989c,
++	    { 0x00ff0000, 0x00ff0000, 0x00ff0000, 0x00ff0000, 0x00ff0000 } },
++	{ 6, 0x989c,
++	    { 0x00ff0000, 0x00ff0000, 0x00ff0000, 0x00ff0000, 0x00ff0000 } },
++	{ 6, 0x989c,
++	    { 0x00ff0000, 0x00ff0000, 0x00ff0000, 0x00ff0000, 0x00ff0000 } },
++	{ 6, 0x989c,
++	    { 0x00d70000, 0x00d70000, 0x00d70000, 0x00d70000, 0x00d70000 } },
++	{ 6, 0x989c,
++	    { 0x00610000, 0x00610000, 0x00610000, 0x00610000, 0x00610000 } },
++	{ 6, 0x989c,
++	    { 0x00fe0000, 0x00fe0000, 0x00fe0000, 0x00fe0000, 0x00fe0000 } },
++	{ 6, 0x989c,
++	    { 0x00de0000, 0x00de0000, 0x00de0000, 0x00de0000, 0x00de0000 } },
++	{ 6, 0x989c,
++	    { 0x007f0000, 0x007f0000, 0x007f0000, 0x007f0000, 0x007f0000 } },
++	{ 6, 0x989c,
++	    { 0x043d0000, 0x043d0000, 0x043d0000, 0x043d0000, 0x043d0000 } },
++	{ 6, 0x989c,
++	    { 0x00770000, 0x00770000, 0x00770000, 0x00770000, 0x00770000 } },
++	{ 6, 0x989c,
++	    { 0x00440000, 0x00440000, 0x00440000, 0x00440000, 0x00440000 } },
++	{ 6, 0x989c,
++	    { 0x00980000, 0x00980000, 0x00980000, 0x00980000, 0x00980000 } },
++	{ 6, 0x989c,
++	    { 0x00100080, 0x00100080, 0x00100080, 0x00100080, 0x00100080 } },
++	{ 6, 0x989c,
++	    { 0x0005c034, 0x0005c034, 0x0005c034, 0x0005c034, 0x0005c034 } },
++	{ 6, 0x989c,
++	    { 0x003100f0, 0x003100f0, 0x003100f0, 0x003100f0, 0x003100f0 } },
++	{ 6, 0x989c,
++	    { 0x000c011f, 0x000c011f, 0x000c011f, 0x000c011f, 0x000c011f } },
++	{ 6, 0x989c,
++	    { 0x00510040, 0x00510040, 0x005100a0, 0x005100a0, 0x005100a0 } },
++	{ 6, 0x989c,
++	    { 0x0050006a, 0x0050006a, 0x005000dd, 0x005000dd, 0x005000dd } },
++	{ 6, 0x989c,
++	    { 0x00000001, 0x00000001, 0x00000000, 0x00000000, 0x00000000 } },
++	{ 6, 0x989c,
++	    { 0x00004044, 0x00004044, 0x00004044, 0x00004044, 0x00004044 } },
++	{ 6, 0x989c,
++	    { 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 } },
++	{ 6, 0x989c,
++	    { 0x000060c0, 0x000060c0, 0x000060c0, 0x000060c0, 0x000060c0 } },
++	{ 6, 0x989c,
++	    { 0x00002c00, 0x00002c00, 0x00003600, 0x00003600, 0x00003600 } },
++	{ 6, 0x98c8,
++	    { 0x00000403, 0x00000403, 0x00040403, 0x00040403, 0x00040403 } },
++	{ 7, 0x989c,
++	    { 0x00006400, 0x00006400, 0x00006400, 0x00006400, 0x00006400 } },
++	{ 7, 0x989c,
++	    { 0x00000800, 0x00000800, 0x00000800, 0x00000800, 0x00000800 } },
++	{ 7, 0x98cc,
++	    { 0x0000000e, 0x0000000e, 0x0000000e, 0x0000000e, 0x0000000e } },
++};
++
 +
 +/* Initial RF Gain settings for RF5112 */
 +static const struct ath5k_ini_rfgain rfgain_5112[] = {
@@ -11608,6 +11957,75 @@
 +	{ AR5K_RF_GAIN(63),	{ 0x000000fc, 0x000000fc } },
 +};
 +
++/* Initial RF Gain settings for RF5413 */
++static const struct ath5k_ini_rfgain rfgain_5413[] = {
++	/*			      5Ghz	2Ghz	*/
++	{ AR5K_RF_GAIN(0),	{ 0x00000000, 0x00000000 } },
++	{ AR5K_RF_GAIN(1),	{ 0x00000040, 0x00000040 } },
++	{ AR5K_RF_GAIN(2),	{ 0x00000080, 0x00000080 } },
++	{ AR5K_RF_GAIN(3),	{ 0x000001a1, 0x00000161 } },
++	{ AR5K_RF_GAIN(4),	{ 0x000001e1, 0x000001a1 } },
++	{ AR5K_RF_GAIN(5),	{ 0x00000021, 0x000001e1 } },
++	{ AR5K_RF_GAIN(6),	{ 0x00000061, 0x00000021 } },
++	{ AR5K_RF_GAIN(7),	{ 0x00000188, 0x00000061 } },
++	{ AR5K_RF_GAIN(8),	{ 0x000001c8, 0x00000188 } },
++	{ AR5K_RF_GAIN(9),	{ 0x00000008, 0x000001c8 } },
++	{ AR5K_RF_GAIN(10),	{ 0x00000048, 0x00000008 } },
++	{ AR5K_RF_GAIN(11),	{ 0x00000088, 0x00000048 } },
++	{ AR5K_RF_GAIN(12),	{ 0x000001a9, 0x00000088 } },
++	{ AR5K_RF_GAIN(13),	{ 0x000001e9, 0x00000169 } },
++	{ AR5K_RF_GAIN(14),	{ 0x00000029, 0x000001a9 } },
++	{ AR5K_RF_GAIN(15),	{ 0x00000069, 0x000001e9 } },
++	{ AR5K_RF_GAIN(16),	{ 0x000001d0, 0x00000029 } },
++	{ AR5K_RF_GAIN(17),	{ 0x00000010, 0x00000069 } },
++	{ AR5K_RF_GAIN(18),	{ 0x00000050, 0x00000190 } },
++	{ AR5K_RF_GAIN(19),	{ 0x00000090, 0x000001d0 } },
++	{ AR5K_RF_GAIN(20),	{ 0x000001b1, 0x00000010 } },
++	{ AR5K_RF_GAIN(21),	{ 0x000001f1, 0x00000050 } },
++	{ AR5K_RF_GAIN(22),	{ 0x00000031, 0x00000090 } },
++	{ AR5K_RF_GAIN(23),	{ 0x00000071, 0x00000171 } },
++	{ AR5K_RF_GAIN(24),	{ 0x000001b8, 0x000001b1 } },
++	{ AR5K_RF_GAIN(25),	{ 0x000001f8, 0x000001f1 } },
++	{ AR5K_RF_GAIN(26),	{ 0x00000038, 0x00000031 } },
++	{ AR5K_RF_GAIN(27),	{ 0x00000078, 0x00000071 } },
++	{ AR5K_RF_GAIN(28),	{ 0x00000199, 0x00000198 } },
++	{ AR5K_RF_GAIN(29),	{ 0x000001d9, 0x000001d8 } },
++	{ AR5K_RF_GAIN(30),	{ 0x00000019, 0x00000018 } },
++	{ AR5K_RF_GAIN(31),	{ 0x00000059, 0x00000058 } },
++	{ AR5K_RF_GAIN(32),	{ 0x00000099, 0x00000098 } },
++	{ AR5K_RF_GAIN(33),	{ 0x000000d9, 0x00000179 } },
++	{ AR5K_RF_GAIN(34),	{ 0x000000f9, 0x000001b9 } },
++	{ AR5K_RF_GAIN(35),	{ 0x000000f9, 0x000001f9 } },
++	{ AR5K_RF_GAIN(36),	{ 0x000000f9, 0x00000039 } },
++	{ AR5K_RF_GAIN(37),	{ 0x000000f9, 0x00000079 } },
++	{ AR5K_RF_GAIN(38),	{ 0x000000f9, 0x000000b9 } },
++	{ AR5K_RF_GAIN(39),	{ 0x000000f9, 0x000000f9 } },
++	{ AR5K_RF_GAIN(40),	{ 0x000000f9, 0x000000f9 } },
++	{ AR5K_RF_GAIN(41),	{ 0x000000f9, 0x000000f9 } },
++	{ AR5K_RF_GAIN(42),	{ 0x000000f9, 0x000000f9 } },
++	{ AR5K_RF_GAIN(43),	{ 0x000000f9, 0x000000f9 } },
++	{ AR5K_RF_GAIN(44),	{ 0x000000f9, 0x000000f9 } },
++	{ AR5K_RF_GAIN(45),	{ 0x000000f9, 0x000000f9 } },
++	{ AR5K_RF_GAIN(46),	{ 0x000000f9, 0x000000f9 } },
++	{ AR5K_RF_GAIN(47),	{ 0x000000f9, 0x000000f9 } },
++	{ AR5K_RF_GAIN(48),	{ 0x000000f9, 0x000000f9 } },
++	{ AR5K_RF_GAIN(49),	{ 0x000000f9, 0x000000f9 } },
++	{ AR5K_RF_GAIN(50),	{ 0x000000f9, 0x000000f9 } },
++	{ AR5K_RF_GAIN(51),	{ 0x000000f9, 0x000000f9 } },
++	{ AR5K_RF_GAIN(52),	{ 0x000000f9, 0x000000f9 } },
++	{ AR5K_RF_GAIN(53),	{ 0x000000f9, 0x000000f9 } },
++	{ AR5K_RF_GAIN(54),	{ 0x000000f9, 0x000000f9 } },
++	{ AR5K_RF_GAIN(55),	{ 0x000000f9, 0x000000f9 } },
++	{ AR5K_RF_GAIN(56),	{ 0x000000f9, 0x000000f9 } },
++	{ AR5K_RF_GAIN(57),	{ 0x000000f9, 0x000000f9 } },
++	{ AR5K_RF_GAIN(58),	{ 0x000000f9, 0x000000f9 } },
++	{ AR5K_RF_GAIN(59),	{ 0x000000f9, 0x000000f9 } },
++	{ AR5K_RF_GAIN(60),	{ 0x000000f9, 0x000000f9 } },
++	{ AR5K_RF_GAIN(61),	{ 0x000000f9, 0x000000f9 } },
++	{ AR5K_RF_GAIN(62),	{ 0x000000f9, 0x000000f9 } },
++	{ AR5K_RF_GAIN(63),	{ 0x000000f9, 0x000000f9 } },
++};
++
 +static const struct ath5k_gain_opt rfgain_opt_5112 = {
 +	1,
 +	8,
@@ -11758,6 +12176,7 @@
 +		go = &rfgain_opt_5111;
 +		break;
 +	case AR5K_RF5112:
++	case AR5K_RF5413: /* ??? */
 +		go = &rfgain_opt_5112;
 +		break;
 +	default:
@@ -12005,6 +12424,56 @@
 +}
 +
 +/*
++ * Initialize RF5413/5414
++ */
++static int ath5k_hw_rf5413_rfregs(struct ath5k_hw *ah,
++		struct ieee80211_channel *channel, unsigned int mode)
++{
++	const struct ath5k_ini_rf *rf_ini;
++	u32 *rf;
++	unsigned int rf_size, i;
++	int bank = -1;
++
++	AR5K_ASSERT_ENTRY(mode, AR5K_INI_VAL_MAX);
++
++	rf = ah->ah_rf_banks;
++
++	rf_ini = rfregs_5413;
++	rf_size = ARRAY_SIZE(rfregs_5413);
++
++	/* Copy values to modify them */
++	for (i = 0; i < rf_size; i++) {
++		if (rf_ini[i].rf_bank >= AR5K_RF5112_INI_RF_MAX_BANKS) {
++			AR5K_PRINT("invalid bank\n");
++			return -EINVAL;
++		}
++
++		if (bank != rf_ini[i].rf_bank) {
++			bank = rf_ini[i].rf_bank;
++			ah->ah_offset[bank] = i;
++		}
++
++		rf[i] = rf_ini[i].rf_value[mode];
++	}
++
++	/*
++	 * After compairing dumps from different cards
++	 * we get the same RF_BUFFER settings (diff returns
++	 * 0 lines). It seems that RF_BUFFER settings are static
++	 * and are written unmodified (no EEPROM stuff
++	 * is used because calibration data would be
++	 * different between different cards and would result
++	 * different RF_BUFFER settings)
++	 */
++
++	/* Write RF values */
++	for (i = 0; i < rf_size; i++)
++		ath5k_hw_reg_write(ah, rf[i], rf_ini[i].rf_register);
++
++	return 0;
++}
++
++/*
 + * Initialize RF
 + */
 +int ath5k_hw_rfregs(struct ath5k_hw *ah, struct ieee80211_channel *channel,
@@ -12025,6 +12494,10 @@
 +			ah->ah_rf_banks_size = sizeof(rfregs_5112);
 +		func = ath5k_hw_rf5112_rfregs;
 +		break;
++	case AR5K_RF5413:
++		ah->ah_rf_banks_size = sizeof(rfregs_5413);
++		func = ath5k_hw_rf5413_rfregs;
++		break;
 +	default:
 +		return -EINVAL;
 +	}
@@ -12059,6 +12532,10 @@
 +		ath5k_rfg = rfgain_5112;
 +		size = ARRAY_SIZE(rfgain_5112);
 +		break;
++	case AR5K_RF5413:
++		ath5k_rfg = rfgain_5413;
++		size = ARRAY_SIZE(rfgain_5413);
++		break;
 +	default:
 +		return -EINVAL;
 +	}
@@ -12102,7 +12579,7 @@
 +		if (type == AR5K_PHY_PAPD_PROBE_TYPE_CCK)
 +			ah->ah_gain.g_current += AR5K_GAIN_CCK_PROBE_CORR;
 +
-+		if (ah->ah_radio == AR5K_RF5112) {
++		if (ah->ah_radio >= AR5K_RF5112) {
 +			ath5k_hw_rfregs_gainf_corr(ah);
 +			ah->ah_gain.g_current =
 +				ah->ah_gain.g_current>=ah->ah_gain.g_f_corr ?
@@ -12133,6 +12610,7 @@
 +		ah->ah_gain.g_active = 1;
 +		break;
 +	case AR5K_RF5112:
++	case AR5K_RF5413: /* ??? */
 +		ah->ah_gain.g_step_idx = rfgain_opt_5112.go_default;
 +		ah->ah_gain.g_step =
 +		    &rfgain_opt_5112.go_step[ah->ah_gain.g_step_idx];
@@ -12283,7 +12761,7 @@
 +}
 +
 +/*
-+ * Set channel on 5112
++ * Set channel on 5112 and newer
 + */
 +static int ath5k_hw_rf5112_channel(struct ath5k_hw *ah,
 +		struct ieee80211_channel *channel)
@@ -12767,8 +13245,8 @@
 +	return ath5k_hw_txpower(ah, channel, power);
 +}
 diff -up /dev/null linux-2.6.23.noarch/drivers/net/wireless/ath5k/base.h
---- /dev/null	2007-10-26 17:27:29.928203379 -0400
-+++ linux-2.6.23.noarch/drivers/net/wireless/ath5k/base.h	2007-11-08 16:49:33.000000000 -0500
+--- /dev/null	2007-11-12 23:12:46.917997680 -0500
++++ linux-2.6.23.noarch/drivers/net/wireless/ath5k/base.h	2007-11-15 13:13:38.000000000 -0500
 @@ -0,0 +1,175 @@
 +/*-
 + * Copyright (c) 2002-2007 Sam Leffler, Errno Consulting
@@ -12946,8 +13424,8 @@
 +
 +#endif
 diff -up /dev/null linux-2.6.23.noarch/drivers/net/wireless/ath5k/hw.h
---- /dev/null	2007-10-26 17:27:29.928203379 -0400
-+++ linux-2.6.23.noarch/drivers/net/wireless/ath5k/hw.h	2007-11-08 16:49:33.000000000 -0500
+--- /dev/null	2007-11-12 23:12:46.917997680 -0500
++++ linux-2.6.23.noarch/drivers/net/wireless/ath5k/hw.h	2007-11-15 13:13:38.000000000 -0500
 @@ -0,0 +1,588 @@
 +/*
 + * Copyright (c) 2004-2007 Reyk Floeter <reyk at openbsd.org>
@@ -13538,9 +14016,9 @@
 +	return retval;
 +}
 diff -up /dev/null linux-2.6.23.noarch/drivers/net/wireless/ath5k/ath5k.h
---- /dev/null	2007-10-26 17:27:29.928203379 -0400
-+++ linux-2.6.23.noarch/drivers/net/wireless/ath5k/ath5k.h	2007-11-08 16:49:33.000000000 -0500
-@@ -0,0 +1,1135 @@
+--- /dev/null	2007-11-12 23:12:46.917997680 -0500
++++ linux-2.6.23.noarch/drivers/net/wireless/ath5k/ath5k.h	2007-11-15 13:13:38.000000000 -0500
+@@ -0,0 +1,1136 @@
 +/*
 + * Copyright (c) 2004-2007 Reyk Floeter <reyk at openbsd.org>
 + * Copyright (c) 2006-2007 Nick Kossifidis <mickflemm at gmail.com>
@@ -13674,6 +14152,7 @@
 +	AR5K_RF5110	= 0,
 +	AR5K_RF5111	= 1,
 +	AR5K_RF5112	= 2,
++	AR5K_RF5413	= 3,
 +};
 +
 +/*
@@ -14677,18 +15156,21 @@
 +
 +#endif
 diff -up linux-2.6.23.noarch/MAINTAINERS.orig linux-2.6.23.noarch/MAINTAINERS
---- linux-2.6.23.noarch/MAINTAINERS.orig	2007-11-08 16:48:58.000000000 -0500
-+++ linux-2.6.23.noarch/MAINTAINERS	2007-11-08 16:49:33.000000000 -0500
-@@ -642,6 +642,14 @@ M:	ecashin at coraid.com
+--- linux-2.6.23.noarch/MAINTAINERS.orig	2007-11-15 12:47:29.000000000 -0500
++++ linux-2.6.23.noarch/MAINTAINERS	2007-11-15 13:13:38.000000000 -0500
+@@ -642,6 +642,17 @@ M:	ecashin at coraid.com
  W:	http://www.coraid.com/support/linux
  S:	Supported
  
 +ATHEROS ATH5K WIRELESS DRIVER
 +P:	Jiri Slaby
 +M:	jirislaby at gmail.com
++P:	Nick Kossifidis
++M:	mickflemm at gmail.com
 +P:	Luis R. Rodriguez
 +M:	mcgrof at gmail.com
 +L:	linux-wireless at vger.kernel.org
++L:	ath5k-devel at lists.ath5k.org
 +S:	Maintained
 +
  ATL1 ETHERNET DRIVER

linux-2.6-wireless-pending.patch:

View full diff with command:
/usr/bin/cvs -f diff  -kk -u -N -r 1.12 -r 1.13 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.12
retrieving revision 1.13
diff -u -r1.12 -r1.13
--- linux-2.6-wireless-pending.patch	8 Nov 2007 22:06:16 -0000	1.12
+++ linux-2.6-wireless-pending.patch	16 Nov 2007 04:00:40 -0000	1.13
@@ -1,6 +1,455 @@
+diff -up linux-2.6.23.noarch/drivers/ssb/b43_pci_bridge.c.orig linux-2.6.23.noarch/drivers/ssb/b43_pci_bridge.c
+--- linux-2.6.23.noarch/drivers/ssb/b43_pci_bridge.c.orig	2007-11-15 22:18:11.000000000 -0500
++++ linux-2.6.23.noarch/drivers/ssb/b43_pci_bridge.c	2007-11-15 22:19:59.000000000 -0500
+@@ -27,6 +27,7 @@ static const struct pci_device_id b43_pc
+ 	{ PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, 0x4321) },
+ 	{ PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, 0x4324) },
+ 	{ PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, 0x4325) },
++	{ PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, 0x4328) },
+ 	{ 0, },
+ };
+ MODULE_DEVICE_TABLE(pci, b43_pci_bridge_tbl);
+diff -up linux-2.6.23.noarch/drivers/ssb/pci.c.orig linux-2.6.23.noarch/drivers/ssb/pci.c
+--- linux-2.6.23.noarch/drivers/ssb/pci.c.orig	2007-11-15 22:18:11.000000000 -0500
++++ linux-2.6.23.noarch/drivers/ssb/pci.c	2007-11-15 22:19:59.000000000 -0500
+@@ -212,29 +212,29 @@ static inline u8 ssb_crc8(u8 crc, u8 dat
+ 	return t[crc ^ data];
+ }
+ 
+-static u8 ssb_sprom_crc(const u16 *sprom)
++static u8 ssb_sprom_crc(const u16 *sprom, u16 size)
+ {
+ 	int word;
+ 	u8 crc = 0xFF;
+ 
+-	for (word = 0; word < SSB_SPROMSIZE_WORDS - 1; word++) {
++	for (word = 0; word < size - 1; word++) {
+ 		crc = ssb_crc8(crc, sprom[word] & 0x00FF);
+ 		crc = ssb_crc8(crc, (sprom[word] & 0xFF00) >> 8);
+ 	}
+-	crc = ssb_crc8(crc, sprom[SPOFF(SSB_SPROM_REVISION)] & 0x00FF);
++	crc = ssb_crc8(crc, sprom[size - 1] & 0x00FF);
+ 	crc ^= 0xFF;
+ 
+ 	return crc;
+ }
+ 
+-static int sprom_check_crc(const u16 *sprom)
++static int sprom_check_crc(const u16 *sprom, u16 size)
+ {
+ 	u8 crc;
+ 	u8 expected_crc;
+ 	u16 tmp;
+ 
+-	crc = ssb_sprom_crc(sprom);
+-	tmp = sprom[SPOFF(SSB_SPROM_REVISION)] & SSB_SPROM_REVISION_CRC;
++	crc = ssb_sprom_crc(sprom, size);
++	tmp = sprom[size - 1] & SSB_SPROM_REVISION_CRC;
+ 	expected_crc = tmp >> SSB_SPROM_REVISION_CRC_SHIFT;
+ 	if (crc != expected_crc)
+ 		return -EPROTO;
+@@ -246,7 +246,7 @@ static void sprom_do_read(struct ssb_bus
+ {
+ 	int i;
+ 
+-	for (i = 0; i < SSB_SPROMSIZE_WORDS; i++)
++	for (i = 0; i < bus->sprom_size; i++)
+ 		sprom[i] = readw(bus->mmio + SSB_SPROM_BASE + (i * 2));
+ }
+ 
+@@ -255,6 +255,7 @@ static int sprom_do_write(struct ssb_bus
+ 	struct pci_dev *pdev = bus->host_pci;
+ 	int i, err;
+ 	u32 spromctl;
++	u16 size = bus->sprom_size;
+ 
+ 	ssb_printk(KERN_NOTICE PFX "Writing SPROM. Do NOT turn off the power! Please stand by...\n");
+ 	err = pci_read_config_dword(pdev, SSB_SPROMCTL, &spromctl);
+@@ -266,12 +267,12 @@ static int sprom_do_write(struct ssb_bus
+ 		goto err_ctlreg;
+ 	ssb_printk(KERN_NOTICE PFX "[ 0%%");
+ 	msleep(500);
+-	for (i = 0; i < SSB_SPROMSIZE_WORDS; i++) {
+-		if (i == SSB_SPROMSIZE_WORDS / 4)
++	for (i = 0; i < size; i++) {
++		if (i == size / 4)
+ 			ssb_printk("25%%");
+-		else if (i == SSB_SPROMSIZE_WORDS / 2)
++		else if (i == size / 2)
+ 			ssb_printk("50%%");
+-		else if (i == (SSB_SPROMSIZE_WORDS / 4) * 3)
++		else if (i == (size * 3) / 4)
+ 			ssb_printk("75%%");
+ 		else if (i % 2)
+ 			ssb_printk(".");
+@@ -296,38 +297,38 @@ err_ctlreg:
+ 	return err;
+ }
+ 
+-static void sprom_extract_r1(struct ssb_sprom_r1 *out, const u16 *in)
++static void sprom_extract_r123(struct ssb_sprom *out, const u16 *in)
+ {
+ 	int i;
+ 	u16 v;
++	u16 loc[3];
+ 
+-	SPEX(pci_spid, SSB_SPROM1_SPID, 0xFFFF, 0);
+-	SPEX(pci_svid, SSB_SPROM1_SVID, 0xFFFF, 0);
+-	SPEX(pci_pid, SSB_SPROM1_PID, 0xFFFF, 0);
++	if (out->revision == 3) {			/* rev 3 moved MAC */
++		loc[0] = SSB_SPROM3_IL0MAC;
++		loc[1] = SSB_SPROM3_ET0MAC;
++		loc[2] = SSB_SPROM3_ET1MAC;
++	} else {
++		loc[0] = SSB_SPROM1_IL0MAC;
++		loc[1] = SSB_SPROM1_ET0MAC;
++		loc[2] = SSB_SPROM1_ET1MAC;
++	}
+ 	for (i = 0; i < 3; i++) {
+-		v = in[SPOFF(SSB_SPROM1_IL0MAC) + i];
++		v = in[SPOFF(loc[0]) + i];
+ 		*(((__be16 *)out->il0mac) + i) = cpu_to_be16(v);
+ 	}
+ 	for (i = 0; i < 3; i++) {
+-		v = in[SPOFF(SSB_SPROM1_ET0MAC) + i];
++		v = in[SPOFF(loc[1]) + i];
+ 		*(((__be16 *)out->et0mac) + i) = cpu_to_be16(v);
+ 	}
+ 	for (i = 0; i < 3; i++) {
+-		v = in[SPOFF(SSB_SPROM1_ET1MAC) + i];
++		v = in[SPOFF(loc[2]) + i];
+ 		*(((__be16 *)out->et1mac) + i) = cpu_to_be16(v);
+ 	}
+ 	SPEX(et0phyaddr, SSB_SPROM1_ETHPHY, SSB_SPROM1_ETHPHY_ET0A, 0);
+ 	SPEX(et1phyaddr, SSB_SPROM1_ETHPHY, SSB_SPROM1_ETHPHY_ET1A,
+ 	     SSB_SPROM1_ETHPHY_ET1A_SHIFT);
+-	SPEX(et0mdcport, SSB_SPROM1_ETHPHY, SSB_SPROM1_ETHPHY_ET0M, 14);
+-	SPEX(et1mdcport, SSB_SPROM1_ETHPHY, SSB_SPROM1_ETHPHY_ET1M, 15);
+-	SPEX(board_rev, SSB_SPROM1_BINF, SSB_SPROM1_BINF_BREV, 0);
+ 	SPEX(country_code, SSB_SPROM1_BINF, SSB_SPROM1_BINF_CCODE,
+ 	     SSB_SPROM1_BINF_CCODE_SHIFT);
+-	SPEX(antenna_a, SSB_SPROM1_BINF, SSB_SPROM1_BINF_ANTA,
+-	     SSB_SPROM1_BINF_ANTA_SHIFT);
+-	SPEX(antenna_bg, SSB_SPROM1_BINF, SSB_SPROM1_BINF_ANTBG,
+-	     SSB_SPROM1_BINF_ANTBG_SHIFT);
+ 	SPEX(pa0b0, SSB_SPROM1_PA0B0, 0xFFFF, 0);
+ 	SPEX(pa0b1, SSB_SPROM1_PA0B1, 0xFFFF, 0);
+ 	SPEX(pa0b2, SSB_SPROM1_PA0B2, 0xFFFF, 0);
+@@ -350,97 +351,75 @@ static void sprom_extract_r1(struct ssb_
+ 	SPEX(antenna_gain_a, SSB_SPROM1_AGAIN, SSB_SPROM1_AGAIN_A, 0);
+ 	SPEX(antenna_gain_bg, SSB_SPROM1_AGAIN, SSB_SPROM1_AGAIN_BG,
+ 	     SSB_SPROM1_AGAIN_BG_SHIFT);
+-	for (i = 0; i < 4; i++) {
+-		v = in[SPOFF(SSB_SPROM1_OEM) + i];
+-		*(((__le16 *)out->oem) + i) = cpu_to_le16(v);
+-	}
+ }
+ 
+-static void sprom_extract_r2(struct ssb_sprom_r2 *out, const u16 *in)
++static void sprom_extract_r4(struct ssb_sprom *out, const u16 *in)
+ {
+ 	int i;
+ 	u16 v;
+ 
+-	SPEX(boardflags_hi, SSB_SPROM2_BFLHI,  0xFFFF, 0);
+-	SPEX(maxpwr_a_hi, SSB_SPROM2_MAXP_A, SSB_SPROM2_MAXP_A_HI, 0);
+-	SPEX(maxpwr_a_lo, SSB_SPROM2_MAXP_A, SSB_SPROM2_MAXP_A_LO,
+-	     SSB_SPROM2_MAXP_A_LO_SHIFT);
+-	SPEX(pa1lob0, SSB_SPROM2_PA1LOB0, 0xFFFF, 0);
+-	SPEX(pa1lob1, SSB_SPROM2_PA1LOB1, 0xFFFF, 0);
+-	SPEX(pa1lob2, SSB_SPROM2_PA1LOB2, 0xFFFF, 0);
+-	SPEX(pa1hib0, SSB_SPROM2_PA1HIB0, 0xFFFF, 0);
+-	SPEX(pa1hib1, SSB_SPROM2_PA1HIB1, 0xFFFF, 0);
+-	SPEX(pa1hib2, SSB_SPROM2_PA1HIB2, 0xFFFF, 0);
+-	SPEX(ofdm_pwr_off, SSB_SPROM2_OPO, SSB_SPROM2_OPO_VALUE, 0);
+-	for (i = 0; i < 4; i++) {
+-		v = in[SPOFF(SSB_SPROM2_CCODE) + i];
+-		*(((__le16 *)out->country_str) + i) = cpu_to_le16(v);
++	/* extract the equivalent of the r1 variables */
++	for (i = 0; i < 3; i++) {
++		v = in[SPOFF(SSB_SPROM4_IL0MAC) + i];
++		*(((__be16 *)out->il0mac) + i) = cpu_to_be16(v);
+ 	}
++	for (i = 0; i < 3; i++) {
++		v = in[SPOFF(SSB_SPROM4_ET0MAC) + i];
++		*(((__be16 *)out->et0mac) + i) = cpu_to_be16(v);
++	}
++	for (i = 0; i < 3; i++) {
++		v = in[SPOFF(SSB_SPROM4_ET1MAC) + i];
++		*(((__be16 *)out->et1mac) + i) = cpu_to_be16(v);
++	}
++	SPEX(et0phyaddr, SSB_SPROM4_ETHPHY, SSB_SPROM4_ETHPHY_ET0A, 0);
++	SPEX(et1phyaddr, SSB_SPROM4_ETHPHY, SSB_SPROM4_ETHPHY_ET1A,
++	     SSB_SPROM4_ETHPHY_ET1A_SHIFT);
++	SPEX(country_code, SSB_SPROM4_CCODE, 0xFFFF, 0);
++	SPEX(boardflags_lo, SSB_SPROM4_BFLLO, 0xFFFF, 0);
++	SPEX(antenna_gain_a, SSB_SPROM4_AGAIN, SSB_SPROM4_AGAIN_0, 0);
++	SPEX(antenna_gain_bg, SSB_SPROM4_AGAIN, SSB_SPROM4_AGAIN_1,
++	     SSB_SPROM4_AGAIN_1_SHIFT);
++	SPEX(maxpwr_bg, SSB_SPROM4_MAXP_BG, SSB_SPROM4_MAXP_BG_MASK, 0);
++	SPEX(itssi_bg, SSB_SPROM4_MAXP_BG, SSB_SPROM4_ITSSI_BG,
++	     SSB_SPROM4_ITSSI_BG_SHIFT);
[...50750 lines suppressed...]
++
++/* SPROM Revision 3 (inherits most data from rev 2) */
++#define SSB_SPROM3_IL0MAC		0x104A	/* 6 bytes MAC address for 802.11b/g */
++#define SSB_SPROM3_ET0MAC		0x1050	/* 6 bytes MAC address for Ethernet ?? */
++#define SSB_SPROM3_ET1MAC		0x1050	/* 6 bytes MAC address for 802.11a ?? */
+ #define SSB_SPROM3_OFDMAPO		0x102C	/* A-PHY OFDM Mid Power Offset (4 bytes, BigEndian) */
+ #define SSB_SPROM3_OFDMALPO		0x1030	/* A-PHY OFDM Low Power Offset (4 bytes, BigEndian) */
+ #define SSB_SPROM3_OFDMAHPO		0x1034	/* A-PHY OFDM High Power Offset (4 bytes, BigEndian) */
+@@ -251,6 +264,48 @@
+ #define  SSB_SPROM3_CCKPO_11M_SHIFT	12
+ #define  SSB_SPROM3_OFDMGPO		0x107A	/* G-PHY OFDM Power Offset (4 bytes, BigEndian) */
+ 
++/* SPROM Revision 4 		entries with ?? in comment are unknown */
++#define SSB_SPROM4_IL0MAC		0x104C	/* 6 byte MAC address for a/b/g/n */
++#define SSB_SPROM4_ET0MAC		0x1018	/* 6 bytes MAC address for Ethernet ?? */
++#define SSB_SPROM4_ET1MAC		0x1018	/* 6 bytes MAC address for 802.11a ?? */
++#define SSB_SPROM4_ETHPHY		0x105A	/* Ethernet PHY settings ?? */
++#define  SSB_SPROM4_ETHPHY_ET0A		0x001F	/* MII Address for enet0 */
++#define  SSB_SPROM4_ETHPHY_ET1A		0x03E0	/* MII Address for enet1 */
++#define  SSB_SPROM4_ETHPHY_ET1A_SHIFT	5
++#define  SSB_SPROM4_ETHPHY_ET0M		(1<<14)	/* MDIO for enet0 */
++#define  SSB_SPROM4_ETHPHY_ET1M		(1<<15)	/* MDIO for enet1 */
++#define SSB_SPROM4_CCODE		0x1052	/* Country Code (2 bytes) */
++#define SSB_SPROM4_ANT_A		0x105D  /* A Antennas */
++#define SSB_SPROM4_ANT_BG		0x105C  /* B/G Antennas */
++#define SSB_SPROM4_BFLLO		0x1044	/* Boardflags (low 16 bits) */
++#define SSB_SPROM4_AGAIN		0x105E	/* Antenna Gain (in dBm Q5.2) */
++#define  SSB_SPROM4_AGAIN_0		0x00FF	/* Antenna 0 */
++#define  SSB_SPROM4_AGAIN_1		0xFF00	/* Antenna 1 */
++#define  SSB_SPROM4_AGAIN_1_SHIFT	8
++#define SSB_SPROM4_BFLHI		0x1046  /* Board Flags Hi */
++#define SSB_SPROM4_MAXP_BG		0x1080  /* Max Power BG in path 1 */
++#define  SSB_SPROM4_MAXP_BG_MASK	0x00FF  /* Mask for Max Power BG */
++#define  SSB_SPROM4_ITSSI_BG		0xFF00	/* Mask for path 1 itssi_bg */
++#define  SSB_SPROM4_ITSSI_BG_SHIFT	8
++#define SSB_SPROM4_MAXP_A		0x108A  /* Max Power A in path 1 */
++#define  SSB_SPROM4_MAXP_A_MASK		0x00FF  /* Mask for Max Power A */
++#define  SSB_SPROM4_ITSSI_A		0xFF00	/* Mask for path 1 itssi_a */
++#define  SSB_SPROM4_ITSSI_A_SHIFT	8
++#define SSB_SPROM4_GPIOA		0x1056	/* Gen. Purpose IO # 0 and 1 */
++#define  SSB_SPROM4_GPIOA_P0		0x00FF	/* Pin 0 */
++#define  SSB_SPROM4_GPIOA_P1		0xFF00	/* Pin 1 */
++#define  SSB_SPROM4_GPIOA_P1_SHIFT	8
++#define SSB_SPROM4_GPIOB		0x1058	/* Gen. Purpose IO # 2 and 3 */
++#define  SSB_SPROM4_GPIOB_P2		0x00FF	/* Pin 2 */
++#define  SSB_SPROM4_GPIOB_P3		0xFF00	/* Pin 3 */
++#define  SSB_SPROM4_GPIOB_P3_SHIFT	8
++#define SSB_SPROM4_PA0B0		0x1082	/* The paXbY locations are */
++#define SSB_SPROM4_PA0B1		0x1084	/*   only guesses */
++#define SSB_SPROM4_PA0B2		0x1086
++#define SSB_SPROM4_PA1B0		0x108E
++#define SSB_SPROM4_PA1B1		0x1090
++#define SSB_SPROM4_PA1B2		0x1092
++
+ /* Values for SSB_SPROM1_BINF_CCODE */
+ enum {
+ 	SSB_SPROM1CCODE_WORLD = 0,
+diff -up linux-2.6.23.noarch/include/linux/ssb/ssb.h.orig linux-2.6.23.noarch/include/linux/ssb/ssb.h
+--- linux-2.6.23.noarch/include/linux/ssb/ssb.h.orig	2007-11-15 22:18:12.000000000 -0500
++++ linux-2.6.23.noarch/include/linux/ssb/ssb.h	2007-11-15 22:19:59.000000000 -0500
+@@ -15,22 +15,13 @@ struct pcmcia_device;
+ struct ssb_bus;
+ struct ssb_driver;
+ 
+-
+-struct ssb_sprom_r1 {
+-	u16 pci_spid;		/* Subsystem Product ID for PCI */
+-	u16 pci_svid;		/* Subsystem Vendor ID for PCI */
+-	u16 pci_pid;		/* Product ID for PCI */
++struct ssb_sprom {
+ 	u8 il0mac[6];		/* MAC address for 802.11b/g */
+ 	u8 et0mac[6];		/* MAC address for Ethernet */
+ 	u8 et1mac[6];		/* MAC address for 802.11a */
+-	u8 et0phyaddr:5;	/* MII address for enet0 */
+-	u8 et1phyaddr:5;	/* MII address for enet1 */
+-	u8 et0mdcport:1;	/* MDIO for enet0 */
+-	u8 et1mdcport:1;	/* MDIO for enet1 */
+-	u8 board_rev;		/* Board revision */
+-	u8 country_code:4;	/* Country Code */
+-	u8 antenna_a:2;		/* Antenna 0/1 available for A-PHY */
+-	u8 antenna_bg:2;	/* Antenna 0/1 available for B-PHY and G-PHY */
++	u8 et0phyaddr;		/* MII address for enet0 */
++	u8 et1phyaddr;		/* MII address for enet1 */
++	u8 country_code;	/* Country Code */
+ 	u16 pa0b0;
+ 	u16 pa0b1;
+ 	u16 pa0b2;
+@@ -41,61 +32,15 @@ struct ssb_sprom_r1 {
+ 	u8 gpio1;		/* GPIO pin 1 */
+ 	u8 gpio2;		/* GPIO pin 2 */
+ 	u8 gpio3;		/* GPIO pin 3 */
+-	u16 maxpwr_a;		/* A-PHY Power Amplifier Max Power (in dBm Q5.2) */
+-	u16 maxpwr_bg;		/* B/G-PHY Power Amplifier Max Power (in dBm Q5.2) */
++	u16 maxpwr_a;		/* A-PHY Amplifier Max Power (in dBm Q5.2) */
++	u16 maxpwr_bg;		/* B/G-PHY Amplifier Max Power (in dBm Q5.2) */
+ 	u8 itssi_a;		/* Idle TSSI Target for A-PHY */
+ 	u8 itssi_bg;		/* Idle TSSI Target for B/G-PHY */
+ 	u16 boardflags_lo;	/* Boardflags (low 16 bits) */
+ 	u8 antenna_gain_a;	/* A-PHY Antenna gain (in dBm Q5.2) */
+ 	u8 antenna_gain_bg;	/* B/G-PHY Antenna gain (in dBm Q5.2) */
+-	u8 oem[8];		/* OEM string (rev 1 only) */
+-};
+-
+-struct ssb_sprom_r2 {
+-	u16 boardflags_hi;	/* Boardflags (high 16 bits) */
+-	u8 maxpwr_a_lo;		/* A-PHY Max Power Low */
+-	u8 maxpwr_a_hi;		/* A-PHY Max Power High */
+-	u16 pa1lob0;		/* A-PHY PA Low Settings */
+-	u16 pa1lob1;		/* A-PHY PA Low Settings */
+-	u16 pa1lob2;		/* A-PHY PA Low Settings */
+-	u16 pa1hib0;		/* A-PHY PA High Settings */
+-	u16 pa1hib1;		/* A-PHY PA High Settings */
+-	u16 pa1hib2;		/* A-PHY PA High Settings */
+-	u8 ofdm_pwr_off;	/* OFDM Power Offset from CCK Level */
+-	u8 country_str[2];	/* Two char Country Code */
+-};
+ 
+-struct ssb_sprom_r3 {
+-	u32 ofdmapo;		/* A-PHY OFDM Mid Power Offset */
+-	u32 ofdmalpo;		/* A-PHY OFDM Low Power Offset */
+-	u32 ofdmahpo;		/* A-PHY OFDM High Power Offset */
+-	u8 gpioldc_on_cnt;	/* GPIO LED Powersave Duty Cycle ON count */
+-	u8 gpioldc_off_cnt;	/* GPIO LED Powersave Duty Cycle OFF count */
+-	u8 cckpo_1M:4;		/* CCK Power Offset for Rate 1M */
+-	u8 cckpo_2M:4;		/* CCK Power Offset for Rate 2M */
+-	u8 cckpo_55M:4;		/* CCK Power Offset for Rate 5.5M */
+-	u8 cckpo_11M:4;		/* CCK Power Offset for Rate 11M */
+-	u32 ofdmgpo;		/* G-PHY OFDM Power Offset */
+-};
+-
+-struct ssb_sprom_r4 {
+-	/* TODO */
+-};
+-
+-struct ssb_sprom {
+-	u8 revision;
+-	u8 crc;
+-	/* The valid r# fields are selected by the "revision".
+-	 * Revision 3 and lower inherit from lower revisions.
+-	 */
+-	union {
+-		struct {
+-			struct ssb_sprom_r1 r1;
+-			struct ssb_sprom_r2 r2;
+-			struct ssb_sprom_r3 r3;
+-		};
+-		struct ssb_sprom_r4 r4;
+-	};
++	/* TODO - add any parameters needed from rev 2, 3, or 4 SPROMs */
+ };
+ 
+ /* Information about the PCB the circuitry is soldered on. */
+@@ -288,6 +233,7 @@ struct ssb_bus {
+ 	/* ID information about the Chip. */
+ 	u16 chip_id;
+ 	u16 chip_rev;
++	u16 sprom_size;		/* number of words in sprom */
+ 	u8 chip_package;
+ 
+ 	/* List of devices (cores) on the backplane. */
+diff -up linux-2.6.23.noarch/MAINTAINERS.orig linux-2.6.23.noarch/MAINTAINERS
+--- linux-2.6.23.noarch/MAINTAINERS.orig	2007-11-15 22:18:12.000000000 -0500
++++ linux-2.6.23.noarch/MAINTAINERS	2007-11-15 22:19:56.000000000 -0500
+@@ -2063,10 +2063,12 @@ W:	http://sourceforge.net/projects/e1000
+ S:	Supported
+ 
+ INTEL PRO/WIRELESS 2100 NETWORK CONNECTION SUPPORT
+-P:	Yi Zhu
++P:	Zhu Yi
+ M:	yi.zhu at intel.com
+ P:	James Ketrenos
+ M:	jketreno at linux.intel.com
++P:	Reinette Chatre
++M:	reinette.chatre at intel.com
+ L:	linux-wireless at vger.kernel.org
+ L:	ipw2100-devel at lists.sourceforge.net
+ L:	http://lists.sourceforge.net/mailman/listinfo/ipw2100-devel
+@@ -2074,10 +2076,12 @@ W:	http://ipw2100.sourceforge.net
+ S:	Supported
+ 
+ INTEL PRO/WIRELESS 2915ABG NETWORK CONNECTION SUPPORT
+-P:	Yi Zhu
++P:	Zhu Yi
+ M:	yi.zhu at intel.com
+ P:	James Ketrenos
+ M:	jketreno at linux.intel.com
++P:	Reinette Chatre
++M:	reinette.chatre at intel.com
+ L:	linux-wireless at vger.kernel.org
+ L:	ipw2100-devel at lists.sourceforge.net
+ L:	http://lists.sourceforge.net/mailman/listinfo/ipw2100-devel
+@@ -2087,6 +2091,8 @@ S:	Supported
+ INTEL WIRELESS WIFI LINK (iwlwifi)
+ P:	Zhu Yi
+ M:	yi.zhu at intel.com
++P:	Reinette Chatre
++M:	reinette.chatre at intel.com
+ L:	linux-wireless at vger.kernel.org
+ L:	ipw3945-devel at lists.sourceforge.net
+ W:	http://intellinuxwireless.org

linux-2.6-wireless.patch:

View full diff with command:
/usr/bin/cvs -f diff  -kk -u -N -r 1.11 -r 1.12 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.11
retrieving revision 1.12
diff -u -r1.11 -r1.12
--- linux-2.6-wireless.patch	8 Nov 2007 22:06:16 -0000	1.11
+++ linux-2.6-wireless.patch	16 Nov 2007 04:00:40 -0000	1.12
@@ -1,6 +1,6 @@
 diff -up linux-2.6.23.noarch/drivers/Kconfig.orig linux-2.6.23.noarch/drivers/Kconfig
---- linux-2.6.23.noarch/drivers/Kconfig.orig	2007-11-07 21:34:15.000000000 -0500
-+++ linux-2.6.23.noarch/drivers/Kconfig	2007-11-07 21:34:29.000000000 -0500
+--- linux-2.6.23.noarch/drivers/Kconfig.orig	2007-11-15 20:56:59.000000000 -0500
++++ linux-2.6.23.noarch/drivers/Kconfig	2007-11-15 20:57:07.000000000 -0500
 @@ -58,6 +58,8 @@ source "drivers/power/Kconfig"
  
  source "drivers/hwmon/Kconfig"
@@ -11,8 +11,8 @@
  
  source "drivers/media/Kconfig"
 diff -up /dev/null linux-2.6.23.noarch/drivers/ssb/ssb_private.h
---- /dev/null	2007-10-26 17:27:29.928203379 -0400
-+++ linux-2.6.23.noarch/drivers/ssb/ssb_private.h	2007-11-07 21:34:29.000000000 -0500
+--- /dev/null	2007-11-12 23:12:46.917997680 -0500
++++ linux-2.6.23.noarch/drivers/ssb/ssb_private.h	2007-11-15 20:57:07.000000000 -0500
 @@ -0,0 +1,136 @@
 +#ifndef LINUX_SSB_PRIVATE_H_
 +#define LINUX_SSB_PRIVATE_H_
@@ -151,8 +151,8 @@
 +
 +#endif /* LINUX_SSB_PRIVATE_H_ */
 diff -up /dev/null linux-2.6.23.noarch/drivers/ssb/driver_extif.c
---- /dev/null	2007-10-26 17:27:29.928203379 -0400
-+++ linux-2.6.23.noarch/drivers/ssb/driver_extif.c	2007-11-07 21:34:29.000000000 -0500
+--- /dev/null	2007-11-12 23:12:46.917997680 -0500
++++ linux-2.6.23.noarch/drivers/ssb/driver_extif.c	2007-11-15 20:57:07.000000000 -0500
 @@ -0,0 +1,129 @@
 +/*
 + * Sonics Silicon Backplane
@@ -284,8 +284,8 @@
 +}
 +
 diff -up /dev/null linux-2.6.23.noarch/drivers/ssb/scan.c
---- /dev/null	2007-10-26 17:27:29.928203379 -0400
-+++ linux-2.6.23.noarch/drivers/ssb/scan.c	2007-11-07 21:34:29.000000000 -0500
+--- /dev/null	2007-11-12 23:12:46.917997680 -0500
++++ linux-2.6.23.noarch/drivers/ssb/scan.c	2007-11-15 20:57:07.000000000 -0500
 @@ -0,0 +1,413 @@
 +/*
 + * Sonics Silicon Backplane
@@ -701,8 +701,8 @@
 +	goto out;
 +}
 diff -up /dev/null linux-2.6.23.noarch/drivers/ssb/driver_pcicore.c
---- /dev/null	2007-10-26 17:27:29.928203379 -0400
-+++ linux-2.6.23.noarch/drivers/ssb/driver_pcicore.c	2007-11-07 21:34:29.000000000 -0500
+--- /dev/null	2007-11-12 23:12:46.917997680 -0500
++++ linux-2.6.23.noarch/drivers/ssb/driver_pcicore.c	2007-11-15 20:57:07.000000000 -0500
 @@ -0,0 +1,576 @@
 +/*
 + * Sonics Silicon Backplane
@@ -1281,8 +1281,8 @@
 +}
 +EXPORT_SYMBOL(ssb_pcicore_dev_irqvecs_enable);
 diff -up /dev/null linux-2.6.23.noarch/drivers/ssb/driver_chipcommon.c
---- /dev/null	2007-10-26 17:27:29.928203379 -0400
-+++ linux-2.6.23.noarch/drivers/ssb/driver_chipcommon.c	2007-11-07 21:34:29.000000000 -0500
+--- /dev/null	2007-11-12 23:12:46.917997680 -0500
++++ linux-2.6.23.noarch/drivers/ssb/driver_chipcommon.c	2007-11-15 20:57:07.000000000 -0500
 @@ -0,0 +1,445 @@
 +/*
 + * Sonics Silicon Backplane
@@ -1730,8 +1730,8 @@
 +}
 +#endif /* CONFIG_SSB_SERIAL */
 diff -up /dev/null linux-2.6.23.noarch/drivers/ssb/b43_pci_bridge.c
---- /dev/null	2007-10-26 17:27:29.928203379 -0400
-+++ linux-2.6.23.noarch/drivers/ssb/b43_pci_bridge.c	2007-11-07 21:34:29.000000000 -0500
+--- /dev/null	2007-11-12 23:12:46.917997680 -0500
++++ linux-2.6.23.noarch/drivers/ssb/b43_pci_bridge.c	2007-11-15 20:57:07.000000000 -0500
 @@ -0,0 +1,48 @@
 +/*
 + * Broadcom 43xx PCI-SSB bridge module
@@ -1782,8 +1782,8 @@
 +	ssb_pcihost_unregister(&b43_pci_bridge_driver);
 +}
 diff -up /dev/null linux-2.6.23.noarch/drivers/ssb/Kconfig
---- /dev/null	2007-10-26 17:27:29.928203379 -0400
-+++ linux-2.6.23.noarch/drivers/ssb/Kconfig	2007-11-07 21:34:29.000000000 -0500
+--- /dev/null	2007-11-12 23:12:46.917997680 -0500
++++ linux-2.6.23.noarch/drivers/ssb/Kconfig	2007-11-15 20:57:07.000000000 -0500
 @@ -0,0 +1,117 @@
 +menu "Sonics Silicon Backplane"
 +
@@ -1903,8 +1903,8 @@
 +
 +endmenu
 diff -up /dev/null linux-2.6.23.noarch/drivers/ssb/pci.c
---- /dev/null	2007-10-26 17:27:29.928203379 -0400
-+++ linux-2.6.23.noarch/drivers/ssb/pci.c	2007-11-07 21:34:29.000000000 -0500
+--- /dev/null	2007-11-12 23:12:46.917997680 -0500
++++ linux-2.6.23.noarch/drivers/ssb/pci.c	2007-11-15 20:57:07.000000000 -0500
 @@ -0,0 +1,740 @@
 +/*
 + * Sonics Silicon Backplane PCI-Hostbus related functions.
@@ -2647,8 +2647,8 @@
 +	return err;
 +}
 diff -up /dev/null linux-2.6.23.noarch/drivers/ssb/pcmcia.c
---- /dev/null	2007-10-26 17:27:29.928203379 -0400
-+++ linux-2.6.23.noarch/drivers/ssb/pcmcia.c	2007-11-07 21:34:49.000000000 -0500
+--- /dev/null	2007-11-12 23:12:46.917997680 -0500
++++ linux-2.6.23.noarch/drivers/ssb/pcmcia.c	2007-11-15 20:57:07.000000000 -0500
 @@ -0,0 +1,271 @@
 +/*
 + * Sonics Silicon Backplane
@@ -2922,8 +2922,8 @@
 +	return -ENODEV;
 +}
 diff -up /dev/null linux-2.6.23.noarch/drivers/ssb/Makefile
---- /dev/null	2007-10-26 17:27:29.928203379 -0400
-+++ linux-2.6.23.noarch/drivers/ssb/Makefile	2007-11-07 21:34:29.000000000 -0500
+--- /dev/null	2007-11-12 23:12:46.917997680 -0500
++++ linux-2.6.23.noarch/drivers/ssb/Makefile	2007-11-15 20:57:07.000000000 -0500
 @@ -0,0 +1,18 @@
 +# core
 +ssb-y					+= main.o scan.o
@@ -2944,8 +2944,8 @@
 +
 +obj-$(CONFIG_SSB)			+= ssb.o
 diff -up /dev/null linux-2.6.23.noarch/drivers/ssb/main.c
---- /dev/null	2007-10-26 17:27:29.928203379 -0400
-+++ linux-2.6.23.noarch/drivers/ssb/main.c	2007-11-07 21:34:49.000000000 -0500
+--- /dev/null	2007-11-12 23:12:46.917997680 -0500
++++ linux-2.6.23.noarch/drivers/ssb/main.c	2007-11-15 20:57:07.000000000 -0500
 @@ -0,0 +1,1166 @@
 +/*
 + * Sonics Silicon Backplane
@@ -4114,8 +4114,8 @@
 +}
 +module_exit(ssb_modexit)
 diff -up /dev/null linux-2.6.23.noarch/drivers/ssb/driver_mipscore.c
---- /dev/null	2007-10-26 17:27:29.928203379 -0400
-+++ linux-2.6.23.noarch/drivers/ssb/driver_mipscore.c	2007-11-07 21:34:29.000000000 -0500
+--- /dev/null	2007-11-12 23:12:46.917997680 -0500
++++ linux-2.6.23.noarch/drivers/ssb/driver_mipscore.c	2007-11-15 20:57:07.000000000 -0500
 @@ -0,0 +1,224 @@
 +/*
 + * Sonics Silicon Backplane
@@ -4342,8 +4342,8 @@
 +	ssb_mips_flash_detect(mcore);
 +}
 diff -up /dev/null linux-2.6.23.noarch/drivers/ssb/pcihost_wrapper.c
---- /dev/null	2007-10-26 17:27:29.928203379 -0400
-+++ linux-2.6.23.noarch/drivers/ssb/pcihost_wrapper.c	2007-11-07 21:34:29.000000000 -0500
+--- /dev/null	2007-11-12 23:12:46.917997680 -0500
++++ linux-2.6.23.noarch/drivers/ssb/pcihost_wrapper.c	2007-11-15 20:57:07.000000000 -0500
 @@ -0,0 +1,104 @@
 +/*
 + * Sonics Silicon Backplane
@@ -4450,8 +4450,8 @@
 +}
 +EXPORT_SYMBOL(ssb_pcihost_register);
 diff -up linux-2.6.23.noarch/drivers/net/b44.c.orig linux-2.6.23.noarch/drivers/net/b44.c
---- linux-2.6.23.noarch/drivers/net/b44.c.orig	2007-11-07 21:34:15.000000000 -0500
-+++ linux-2.6.23.noarch/drivers/net/b44.c	2007-11-07 21:34:29.000000000 -0500
+--- linux-2.6.23.noarch/drivers/net/b44.c.orig	2007-11-15 20:56:59.000000000 -0500
++++ linux-2.6.23.noarch/drivers/net/b44.c	2007-11-15 20:57:07.000000000 -0500
 @@ -1,8 +1,11 @@
 -/* b44.c: Broadcom 4400 device driver.
 +/* b44.c: Broadcom 44xx/47xx Fast Ethernet device driver.
@@ -5790,8 +5790,8 @@
  
  module_init(b44_init);
 diff -up linux-2.6.23.noarch/drivers/net/Kconfig.orig linux-2.6.23.noarch/drivers/net/Kconfig
---- linux-2.6.23.noarch/drivers/net/Kconfig.orig	2007-11-07 21:34:15.000000000 -0500
-+++ linux-2.6.23.noarch/drivers/net/Kconfig	2007-11-07 21:34:29.000000000 -0500
+--- linux-2.6.23.noarch/drivers/net/Kconfig.orig	2007-11-15 20:56:59.000000000 -0500
++++ linux-2.6.23.noarch/drivers/net/Kconfig	2007-11-15 20:57:07.000000000 -0500
 @@ -1453,18 +1453,38 @@ config APRICOT
  	  called apricot.
  
@@ -5836,8 +5836,8 @@
  	tristate "nForce Ethernet support"
  	depends on NET_PCI && PCI
 diff -up linux-2.6.23.noarch/drivers/net/wireless/rtl8187_dev.c.orig linux-2.6.23.noarch/drivers/net/wireless/rtl8187_dev.c
---- linux-2.6.23.noarch/drivers/net/wireless/rtl8187_dev.c.orig	2007-11-07 21:34:15.000000000 -0500
-+++ linux-2.6.23.noarch/drivers/net/wireless/rtl8187_dev.c	2007-11-07 21:34:29.000000000 -0500
+--- linux-2.6.23.noarch/drivers/net/wireless/rtl8187_dev.c.orig	2007-11-15 20:56:59.000000000 -0500
++++ linux-2.6.23.noarch/drivers/net/wireless/rtl8187_dev.c	2007-11-15 20:57:07.000000000 -0500
 @@ -36,11 +36,64 @@ static struct usb_device_id rtl8187_tabl
  	/* Netgear */
  	{USB_DEVICE(0x0846, 0x6100)},
@@ -6157,8 +6157,8 @@
  	dev->queues = 1;
  	dev->max_rssi = 65;
 diff -up linux-2.6.23.noarch/drivers/net/wireless/zd1201.c.orig linux-2.6.23.noarch/drivers/net/wireless/zd1201.c
---- linux-2.6.23.noarch/drivers/net/wireless/zd1201.c.orig	2007-11-07 21:34:15.000000000 -0500
-+++ linux-2.6.23.noarch/drivers/net/wireless/zd1201.c	2007-11-07 21:34:29.000000000 -0500
+--- linux-2.6.23.noarch/drivers/net/wireless/zd1201.c.orig	2007-11-15 20:56:59.000000000 -0500
[...3623 lines suppressed...]
  /*
 - * Copyright (C) 2006 Ivo van Doorn
@@ -131596,8 +131707,8 @@
 +subsys_initcall(rfkill_init);
  module_exit(rfkill_exit);
 diff -up linux-2.6.23.noarch/include/net/iw_handler.h.orig linux-2.6.23.noarch/include/net/iw_handler.h
---- linux-2.6.23.noarch/include/net/iw_handler.h.orig	2007-11-07 21:34:15.000000000 -0500
-+++ linux-2.6.23.noarch/include/net/iw_handler.h	2007-11-07 21:34:30.000000000 -0500
+--- linux-2.6.23.noarch/include/net/iw_handler.h.orig	2007-11-15 20:57:00.000000000 -0500
++++ linux-2.6.23.noarch/include/net/iw_handler.h	2007-11-15 20:57:07.000000000 -0500
 @@ -431,7 +431,13 @@ struct iw_public_data {
   * Those may be called only within the kernel.
   */
@@ -131614,8 +131725,8 @@
  /* Send a single event to user space */
  extern void wireless_send_event(struct net_device *	dev,
 diff -up linux-2.6.23.noarch/include/net/ieee80211softmac.h.orig linux-2.6.23.noarch/include/net/ieee80211softmac.h
---- linux-2.6.23.noarch/include/net/ieee80211softmac.h.orig	2007-11-07 21:34:15.000000000 -0500
-+++ linux-2.6.23.noarch/include/net/ieee80211softmac.h	2007-11-07 21:34:30.000000000 -0500
+--- linux-2.6.23.noarch/include/net/ieee80211softmac.h.orig	2007-11-15 20:57:00.000000000 -0500
++++ linux-2.6.23.noarch/include/net/ieee80211softmac.h	2007-11-15 20:57:07.000000000 -0500
 @@ -229,6 +229,8 @@ struct ieee80211softmac_device {
  	/* this lock protects this structure */
  	spinlock_t lock;
@@ -131626,8 +131737,8 @@
  	u8 scanning;
  
 diff -up linux-2.6.23.noarch/include/net/cfg80211.h.orig linux-2.6.23.noarch/include/net/cfg80211.h
---- linux-2.6.23.noarch/include/net/cfg80211.h.orig	2007-11-07 21:34:15.000000000 -0500
-+++ linux-2.6.23.noarch/include/net/cfg80211.h	2007-11-07 21:34:30.000000000 -0500
+--- linux-2.6.23.noarch/include/net/cfg80211.h.orig	2007-11-15 20:57:00.000000000 -0500
++++ linux-2.6.23.noarch/include/net/cfg80211.h	2007-11-15 20:57:07.000000000 -0500
 @@ -3,15 +3,15 @@
  
  #include <linux/netlink.h>
@@ -131665,8 +131776,8 @@
  
  #endif /* __NET_CFG80211_H */
 diff -up linux-2.6.23.noarch/include/net/ieee80211_radiotap.h.orig linux-2.6.23.noarch/include/net/ieee80211_radiotap.h
---- linux-2.6.23.noarch/include/net/ieee80211_radiotap.h.orig	2007-11-07 21:34:15.000000000 -0500
-+++ linux-2.6.23.noarch/include/net/ieee80211_radiotap.h	2007-11-07 21:34:30.000000000 -0500
+--- linux-2.6.23.noarch/include/net/ieee80211_radiotap.h.orig	2007-11-15 20:57:00.000000000 -0500
++++ linux-2.6.23.noarch/include/net/ieee80211_radiotap.h	2007-11-15 20:57:07.000000000 -0500
 @@ -40,6 +40,7 @@
  
  #include <linux/if_ether.h>
@@ -131690,8 +131801,8 @@
 +
  #endif				/* IEEE80211_RADIOTAP_H */
 diff -up linux-2.6.23.noarch/include/net/mac80211.h.orig linux-2.6.23.noarch/include/net/mac80211.h
---- linux-2.6.23.noarch/include/net/mac80211.h.orig	2007-11-07 21:34:15.000000000 -0500
-+++ linux-2.6.23.noarch/include/net/mac80211.h	2007-11-07 21:34:30.000000000 -0500
+--- linux-2.6.23.noarch/include/net/mac80211.h.orig	2007-11-15 20:57:00.000000000 -0500
++++ linux-2.6.23.noarch/include/net/mac80211.h	2007-11-15 20:57:07.000000000 -0500
 @@ -1,7 +1,9 @@
  /*
 - * Low-level hardware driver -- IEEE 802.11 driver (80211.o) interface
@@ -133382,8 +133493,8 @@
  #define MAC_ARG(x) ((u8*)(x))[0], ((u8*)(x))[1], ((u8*)(x))[2], \
  		   ((u8*)(x))[3], ((u8*)(x))[4], ((u8*)(x))[5]
 diff -up linux-2.6.23.noarch/include/linux/ieee80211.h.orig linux-2.6.23.noarch/include/linux/ieee80211.h
---- linux-2.6.23.noarch/include/linux/ieee80211.h.orig	2007-11-07 21:34:15.000000000 -0500
-+++ linux-2.6.23.noarch/include/linux/ieee80211.h	2007-11-07 21:34:30.000000000 -0500
+--- linux-2.6.23.noarch/include/linux/ieee80211.h.orig	2007-11-15 20:57:00.000000000 -0500
++++ linux-2.6.23.noarch/include/linux/ieee80211.h	2007-11-15 20:57:07.000000000 -0500
 @@ -16,6 +16,7 @@
  #define IEEE80211_H
  
@@ -133458,8 +133569,8 @@
 +
  #endif /* IEEE80211_H */
 diff -up /dev/null linux-2.6.23.noarch/include/linux/ssb/ssb_driver_chipcommon.h
---- /dev/null	2007-10-26 17:27:29.928203379 -0400
-+++ linux-2.6.23.noarch/include/linux/ssb/ssb_driver_chipcommon.h	2007-11-07 21:34:30.000000000 -0500
+--- /dev/null	2007-11-12 23:12:46.917997680 -0500
++++ linux-2.6.23.noarch/include/linux/ssb/ssb_driver_chipcommon.h	2007-11-15 20:57:07.000000000 -0500
 @@ -0,0 +1,396 @@
 +#ifndef LINUX_SSB_CHIPCO_H_
 +#define LINUX_SSB_CHIPCO_H_
@@ -133858,8 +133969,8 @@
 +
 +#endif /* LINUX_SSB_CHIPCO_H_ */
 diff -up /dev/null linux-2.6.23.noarch/include/linux/ssb/ssb_driver_extif.h
---- /dev/null	2007-10-26 17:27:29.928203379 -0400
-+++ linux-2.6.23.noarch/include/linux/ssb/ssb_driver_extif.h	2007-11-07 21:34:30.000000000 -0500
+--- /dev/null	2007-11-12 23:12:46.917997680 -0500
++++ linux-2.6.23.noarch/include/linux/ssb/ssb_driver_extif.h	2007-11-15 20:57:07.000000000 -0500
 @@ -0,0 +1,204 @@
 +/*
 + * Hardware-specific External Interface I/O core definitions
@@ -134066,8 +134177,8 @@
 +#endif /* CONFIG_SSB_DRIVER_EXTIF */
 +#endif /* LINUX_SSB_EXTIFCORE_H_ */
 diff -up /dev/null linux-2.6.23.noarch/include/linux/ssb/ssb_regs.h
---- /dev/null	2007-10-26 17:27:29.928203379 -0400
-+++ linux-2.6.23.noarch/include/linux/ssb/ssb_regs.h	2007-11-07 21:34:30.000000000 -0500
+--- /dev/null	2007-11-12 23:12:46.917997680 -0500
++++ linux-2.6.23.noarch/include/linux/ssb/ssb_regs.h	2007-11-15 20:57:07.000000000 -0500
 @@ -0,0 +1,292 @@
 +#ifndef LINUX_SSB_REGS_H_
 +#define LINUX_SSB_REGS_H_
@@ -134362,8 +134473,8 @@
 +
 +#endif /* LINUX_SSB_REGS_H_ */
 diff -up /dev/null linux-2.6.23.noarch/include/linux/ssb/ssb.h
---- /dev/null	2007-10-26 17:27:29.928203379 -0400
-+++ linux-2.6.23.noarch/include/linux/ssb/ssb.h	2007-11-07 21:34:30.000000000 -0500
+--- /dev/null	2007-11-12 23:12:46.917997680 -0500
++++ linux-2.6.23.noarch/include/linux/ssb/ssb.h	2007-11-15 20:57:07.000000000 -0500
 @@ -0,0 +1,424 @@
 +#ifndef LINUX_SSB_H_
 +#define LINUX_SSB_H_
@@ -134790,8 +134901,8 @@
 +
 +#endif /* LINUX_SSB_H_ */
 diff -up /dev/null linux-2.6.23.noarch/include/linux/ssb/ssb_driver_mips.h
---- /dev/null	2007-10-26 17:27:29.928203379 -0400
-+++ linux-2.6.23.noarch/include/linux/ssb/ssb_driver_mips.h	2007-11-07 21:34:30.000000000 -0500
+--- /dev/null	2007-11-12 23:12:46.917997680 -0500
++++ linux-2.6.23.noarch/include/linux/ssb/ssb_driver_mips.h	2007-11-15 20:57:07.000000000 -0500
 @@ -0,0 +1,46 @@
 +#ifndef LINUX_SSB_MIPSCORE_H_
 +#define LINUX_SSB_MIPSCORE_H_
@@ -134840,8 +134951,8 @@
 +
 +#endif /* LINUX_SSB_MIPSCORE_H_ */
 diff -up /dev/null linux-2.6.23.noarch/include/linux/ssb/ssb_driver_pci.h
---- /dev/null	2007-10-26 17:27:29.928203379 -0400
-+++ linux-2.6.23.noarch/include/linux/ssb/ssb_driver_pci.h	2007-11-07 21:34:30.000000000 -0500
+--- /dev/null	2007-11-12 23:12:46.917997680 -0500
++++ linux-2.6.23.noarch/include/linux/ssb/ssb_driver_pci.h	2007-11-15 20:57:07.000000000 -0500
 @@ -0,0 +1,106 @@
 +#ifndef LINUX_SSB_PCICORE_H_
 +#define LINUX_SSB_PCICORE_H_
@@ -134950,8 +135061,8 @@
 +#endif /* CONFIG_SSB_DRIVER_PCICORE */
 +#endif /* LINUX_SSB_PCICORE_H_ */
 diff -up linux-2.6.23.noarch/include/linux/nl80211.h.orig linux-2.6.23.noarch/include/linux/nl80211.h
---- linux-2.6.23.noarch/include/linux/nl80211.h.orig	2007-11-07 21:34:15.000000000 -0500
-+++ linux-2.6.23.noarch/include/linux/nl80211.h	2007-11-07 21:34:30.000000000 -0500
+--- linux-2.6.23.noarch/include/linux/nl80211.h.orig	2007-11-15 20:57:00.000000000 -0500
++++ linux-2.6.23.noarch/include/linux/nl80211.h	2007-11-15 20:57:07.000000000 -0500
 @@ -7,7 +7,97 @@
   */
  
@@ -135074,8 +135185,8 @@
  
  #endif /* __LINUX_NL80211_H */
 diff -up linux-2.6.23.noarch/include/linux/mod_devicetable.h.orig linux-2.6.23.noarch/include/linux/mod_devicetable.h
---- linux-2.6.23.noarch/include/linux/mod_devicetable.h.orig	2007-11-07 21:34:15.000000000 -0500
-+++ linux-2.6.23.noarch/include/linux/mod_devicetable.h	2007-11-07 21:34:30.000000000 -0500
+--- linux-2.6.23.noarch/include/linux/mod_devicetable.h.orig	2007-11-15 20:57:00.000000000 -0500
++++ linux-2.6.23.noarch/include/linux/mod_devicetable.h	2007-11-15 20:57:07.000000000 -0500
 @@ -340,4 +340,19 @@ struct parisc_device_id {
  #define PA_HVERSION_ANY_ID	0xffff
  #define PA_SVERSION_ANY_ID	0xffffffff
@@ -135097,8 +135208,8 @@
 +
  #endif /* LINUX_MOD_DEVICETABLE_H */
 diff -up linux-2.6.23.noarch/include/linux/rfkill.h.orig linux-2.6.23.noarch/include/linux/rfkill.h
---- linux-2.6.23.noarch/include/linux/rfkill.h.orig	2007-11-07 21:34:15.000000000 -0500
-+++ linux-2.6.23.noarch/include/linux/rfkill.h	2007-11-07 21:34:30.000000000 -0500
+--- linux-2.6.23.noarch/include/linux/rfkill.h.orig	2007-11-15 20:57:00.000000000 -0500
++++ linux-2.6.23.noarch/include/linux/rfkill.h	2007-11-15 20:57:07.000000000 -0500
 @@ -2,7 +2,7 @@
  #define __RFKILL_H
  
@@ -135181,8 +135292,8 @@
  
  #endif /* RFKILL_H */
 diff -up linux-2.6.23.noarch/Documentation/networking/mac80211-injection.txt.orig linux-2.6.23.noarch/Documentation/networking/mac80211-injection.txt
---- linux-2.6.23.noarch/Documentation/networking/mac80211-injection.txt.orig	2007-11-07 21:34:15.000000000 -0500
-+++ linux-2.6.23.noarch/Documentation/networking/mac80211-injection.txt	2007-11-07 21:34:30.000000000 -0500
+--- linux-2.6.23.noarch/Documentation/networking/mac80211-injection.txt.orig	2007-11-15 20:57:00.000000000 -0500
++++ linux-2.6.23.noarch/Documentation/networking/mac80211-injection.txt	2007-11-15 20:57:07.000000000 -0500
 @@ -13,15 +13,35 @@ The radiotap format is discussed in
  ./Documentation/networking/radiotap-headers.txt.
  
@@ -135226,8 +135337,8 @@
  Here is an example valid radiotap header defining these three parameters
  
 diff -up linux-2.6.23.noarch/MAINTAINERS.orig linux-2.6.23.noarch/MAINTAINERS
---- linux-2.6.23.noarch/MAINTAINERS.orig	2007-11-07 21:34:15.000000000 -0500
-+++ linux-2.6.23.noarch/MAINTAINERS	2007-11-07 21:34:46.000000000 -0500
+--- linux-2.6.23.noarch/MAINTAINERS.orig	2007-11-15 20:57:00.000000000 -0500
++++ linux-2.6.23.noarch/MAINTAINERS	2007-11-15 20:57:07.000000000 -0500
 @@ -284,6 +284,14 @@ M:	corentin.labbe at geomatys.fr
  L:	lm-sensors at lm-sensors.org
  S:	Maintained
@@ -135370,8 +135481,8 @@
  P:	Mattia Dongili
  M:	malattia at linux.it
 diff -up linux-2.6.23.noarch/CREDITS.orig linux-2.6.23.noarch/CREDITS
---- linux-2.6.23.noarch/CREDITS.orig	2007-11-07 21:34:15.000000000 -0500
-+++ linux-2.6.23.noarch/CREDITS	2007-11-07 21:34:30.000000000 -0500
+--- linux-2.6.23.noarch/CREDITS.orig	2007-11-15 20:57:00.000000000 -0500
++++ linux-2.6.23.noarch/CREDITS	2007-11-15 20:57:07.000000000 -0500
 @@ -665,6 +665,11 @@ D: Minor updates to SCSI types, added /p
  S: (ask for current address)
  S: USA


--- linux-2.6-drivers-ssb-debug-revision.patch DELETED ---




More information about the fedora-extras-commits mailing list