rpms/kernel/F-8 linux-2.6-cfg80211-extras.patch, NONE, 1.1 kernel.spec, 1.271, 1.272 linux-2.6-b43-rev-d.patch, 1.1, 1.2
John W. Linville (linville)
fedora-extras-commits at redhat.com
Wed Nov 21 21:44:15 UTC 2007
Author: linville
Update of /cvs/pkgs/rpms/kernel/F-8
In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv32281
Modified Files:
kernel.spec linux-2.6-b43-rev-d.patch
Added Files:
linux-2.6-cfg80211-extras.patch
Log Message:
Revise b43 rev D support, Restore ability to add/remove virtual i/fs to mac80211 devices
linux-2.6-cfg80211-extras.patch:
--- NEW FILE linux-2.6-cfg80211-extras.patch ---
diff -up linux-2.6.23.noarch/net/wireless/sysfs.c.orig linux-2.6.23.noarch/net/wireless/sysfs.c
--- linux-2.6.23.noarch/net/wireless/sysfs.c.orig 2007-11-21 16:19:19.000000000 -0500
+++ linux-2.6.23.noarch/net/wireless/sysfs.c 2007-11-21 16:21:07.000000000 -0500
@@ -39,9 +39,61 @@ static ssize_t _show_permaddr(struct dev
addr[0], addr[1], addr[2], addr[3], addr[4], addr[5]);
}
+static ssize_t _store_add_iface(struct device *dev,
+ struct device_attribute *attr,
+ const char *buf, size_t len)
+{
+ struct cfg80211_registered_device *rdev = dev_to_rdev(dev);
+ int res;
+
+ if (!capable(CAP_NET_ADMIN))
+ return -EPERM;
+ if (len > IFNAMSIZ)
+ return -EINVAL;
+ if (!rdev->ops->add_virtual_intf)
+ return -ENOSYS;
+
+ rtnl_lock();
+ res = rdev->ops->add_virtual_intf(&rdev->wiphy, (char*)buf,
+ NL80211_IFTYPE_UNSPECIFIED);
+ rtnl_unlock();
+
+ return res ? res : len;
+}
+
+static ssize_t _store_remove_iface(struct device *dev,
+ struct device_attribute *attr,
+ const char *buf, size_t len)
+{
+ struct cfg80211_registered_device *rdev = dev_to_rdev(dev);
+ int res, ifidx;
+ struct net_device *netdev;
+
+ if (!capable(CAP_NET_ADMIN))
+ return -EPERM;
+ if (len > IFNAMSIZ)
+ return -EINVAL;
+ if (!rdev->ops->del_virtual_intf)
+ return -ENOSYS;
+
+ netdev = dev_get_by_name(buf);
+ if (!netdev)
+ return -ENODEV;
+ ifidx = netdev->ifindex;
+ dev_put(netdev);
+
+ rtnl_lock();
+ res = rdev->ops->del_virtual_intf(&rdev->wiphy, ifidx);
+ rtnl_unlock();
+
+ return res ? res : len;
+}
+
static struct device_attribute ieee80211_dev_attrs[] = {
__ATTR(index, S_IRUGO, _show_index, NULL),
__ATTR(macaddress, S_IRUGO, _show_permaddr, NULL),
+ __ATTR(add_iface, S_IWUGO, NULL, _store_add_iface),
+ __ATTR(remove_iface, S_IWUGO, NULL, _store_remove_iface),
{}
};
Index: kernel.spec
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-8/kernel.spec,v
retrieving revision 1.271
retrieving revision 1.272
diff -u -r1.271 -r1.272
--- kernel.spec 20 Nov 2007 18:56:08 -0000 1.271
+++ kernel.spec 21 Nov 2007 21:43:40 -0000 1.272
@@ -676,6 +676,7 @@
Patch692: linux-2.6-zd1211rw-mac80211.patch
Patch693: linux-2.6-rtl8180.patch
Patch694: linux-2.6-b43-rev-d.patch
+Patch700: linux-2.6-cfg80211-extras.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
@@ -1262,6 +1263,7 @@
ApplyPatch linux-2.6-wireless.patch
# wireless patches staged for 2.6.25
ApplyPatch linux-2.6-wireless-pending.patch
+
# Add misc wireless bits from upstream wireless tree
ApplyPatch linux-2.6-at76.patch
ApplyPatch linux-2.6-ath5k.patch
@@ -1269,6 +1271,9 @@
ApplyPatch linux-2.6-rtl8180.patch
ApplyPatch linux-2.6-b43-rev-d.patch
+# Restore ability to add/remove virtual i/fs to mac80211 devices
+ApplyPatch linux-2.6-cfg80211-extras.patch
+
# latest Intel driver for ich9
ApplyPatch linux-2.6-netdev-e1000e-01.patch
ApplyPatch linux-2.6-netdev-e1000e-02.patch
@@ -1957,6 +1962,10 @@
%changelog
+* Wed Nov 21 2007 John W. Linville <linville at redhat.com>
+- Revise b43 rev D support (new upstream patch)
+- Restore ability to add/remove virtual i/fs to mac80211 devices
+
* Tue Nov 20 2007 Chuck Ebbert <cebbert at redhat.com>
- Linux 2.6.23.9-rc1
linux-2.6-b43-rev-d.patch:
Index: linux-2.6-b43-rev-d.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-8/linux-2.6-b43-rev-d.patch,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- linux-2.6-b43-rev-d.patch 16 Nov 2007 04:00:40 -0000 1.1
+++ linux-2.6-b43-rev-d.patch 21 Nov 2007 21:43:40 -0000 1.2
@@ -1,6 +1,70 @@
-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
+From Larry.Finger at lwfinger.net Wed Nov 21 14:32:10 2007
+Return-Path: <Larry.Finger at lwfinger.net>
+Received: from hrndva-omtalb.mail.rr.com (hrndva-omtalb.mail.rr.com [71.74.56.123])
+ by ra.tuxdriver.com (8.14.0/8.13.7) with ESMTP id lALJVxqi008841
+ for <linville at tuxdriver.com>; Wed, 21 Nov 2007 14:32:10 -0500
+Received: from localhost ([69.76.246.60]) by hrndva-omta02.mail.rr.com
+ with SMTP
+ id <20071121193154.VQJG9083.hrndva-omta02.mail.rr.com at localhost>;
+ Wed, 21 Nov 2007 19:31:54 +0000
+Date: Wed, 21 Nov 2007 13:31:53 -0600
+From: Larry Finger <Larry.Finger at lwfinger.net>
+To: John Linville <linville at tuxdriver.com>, Michael Buesch <mb at bu3sch.de>
+Cc: Bcm43xx-dev at lists.berlios.de, linux-wireless at vger.kernel.org
+Subject: [PATCH] b43: Changes to enable BCM4311 rev 02 with wireless core
+ revision 13
+Message-ID: <474487a9.9c54/m97tX72L4+l%Larry.Finger at lwfinger.net>
+User-Agent: Heirloom mailx 12.2 01/07/07
+MIME-Version: 1.0
+Content-Type: text/plain; charset=utf-8
+Content-Transfer-Encoding: 8bit
+X-Spam-Status: No, score=-2.6 required=3.0 tests=AWL,BAYES_00 autolearn=ham
+ version=3.1.8-gr1
+X-Spam-Checker-Version: SpamAssassin 3.1.8-gr1 (2007-02-13) on ra.tuxdriver.com
+Status: RO
+X-Status: A
+Content-Length: 8397
+
+The BCM94311MCG rev 02 chip has an 802.11 core with revision 13 and
+has not been supported until now. The changes include the following:
+
+(1) Add the 802.11 rev 13 device to the ssb_device_id table to load b43.
+(2) Add PHY revision 9 to the supported list.
+(3) Fix 64-bit addressing errors.
+(4) Remove some magic numbers in the DMA setup.
+
+The DMA implementation for this chip supports full 64-bit addressing with
+one exception. Whenever the Descriptor Ring Buffer is in high memory, a
+fatal DMA error occurs. This problem was not present in 2.6.24-rc2 due
+to code to "Bias the placement of kernel pages at lower PFNs". When
+commit 44048d70 reverted that code, the DMA error appeared. As a "fix",
+use the GFP_DMA flag when allocating the buffer for 64-bit DMA. At present,
+this problem is thought to arise from a hardware error. The present driver
+allocates one ring buffer for RX and six for TX; however, only one of the
+TX buffers is used. To minimize any system impact associated with using low
+memory, this patch removes the allocation of the unused buffers.
+
+This patch has been tested by Cédric Caumont <icare40 at hotmail.com>.
+
+Signed-off-by: Larry Finger <Larry.Finger at lwfinger.net>
+---
+
+John,
+
+This patch is intended for the everything branch of wireless-2.6.
+
+Larry
+---
+
+ dma.c | 86 ++++++++++++++++++++++++++++++++++-------------------------------
+ main.c | 3 +-
+ wa.c | 1
+ 3 files changed, 49 insertions(+), 41 deletions(-)
+
+Index: wireless-2.6/drivers/net/wireless/b43/dma.c
+===================================================================
+--- wireless-2.6.orig/drivers/net/wireless/b43/dma.c
++++ wireless-2.6/drivers/net/wireless/b43/dma.c
@@ -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)
@@ -10,25 +74,29 @@
if (slot == ring->nr_slots - 1)
ctl0 |= B43_DMA64_DCTL0_DTABLEEND;
if (start)
-@@ -426,14 +426,15 @@ static inline
+@@ -426,9 +426,20 @@ 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;
++ gfp_t flags = GFP_KERNEL;
-- ring->descbase = dma_alloc_coherent(dev, B43_DMA_RINGMEMSIZE,
-+ ring->descbase = dma_alloc_coherent(dev, size,
- &(ring->dmabase), GFP_KERNEL);
++ /* The specs call for 4K buffers for 30- and 32-bit DMA
++ * and 8K buffers for 64-bit DMA; however, 4K is sufficient for
++ * the latter as long as the buffer does not cross an 8K boundary.
++ *
++ * For unknown reasons - possibly a hardware error - the BCM4311 rev
++ * 02, which uses 64-bit DMA, needs the ring buffer in very low memory,
++ * which accounts for the GFP_DMA flag below.
++ */
++ if (ring->dma64)
++ flags = GFP_DMA;
+ ring->descbase = dma_alloc_coherent(dev, B43_DMA_RINGMEMSIZE,
+- &(ring->dmabase), GFP_KERNEL);
++ &(ring->dmabase), flags);
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
+@@ -483,7 +494,7 @@ int b43_dmacontroller_rx_reset(struct b4
return 0;
}
@@ -37,7 +105,7 @@
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
+@@ -636,18 +647,12 @@ static int dmacontroller_setup(struct b4
if (ring->dma64) {
u64 ringbase = (u64) (ring->dmabase);
@@ -52,14 +120,14 @@
b43_dma_write(ring, B43_DMA64_TXRINGLO,
(ringbase & 0xFFFFFFFF));
b43_dma_write(ring, B43_DMA64_TXRINGHI,
- ((ringbase >> 32) &
+- ((ringbase >> 32) &
- ~SSB_DMA_TRANSLATION_MASK)
- | trans);
-+ 0xFFFFFFFF));
++ (ringbase >> 32));
} else {
u32 ringbase = (u32) (ring->dmabase);
-@@ -668,20 +664,16 @@ static int dmacontroller_setup(struct b4
+@@ -668,20 +673,15 @@ static int dmacontroller_setup(struct b4
if (ring->dma64) {
u64 ringbase = (u64) (ring->dmabase);
@@ -75,17 +143,17 @@
b43_dma_write(ring, B43_DMA64_RXRINGLO,
(ringbase & 0xFFFFFFFF));
b43_dma_write(ring, B43_DMA64_RXRINGHI,
- ((ringbase >> 32) &
+- ((ringbase >> 32) &
- ~SSB_DMA_TRANSLATION_MASK)
- | trans);
- b43_dma_write(ring, B43_DMA64_RXINDEX, 200);
-+ 0xFFFFFFFF));
++ (ringbase >> 32));
+ 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
+@@ -695,11 +695,12 @@ static int dmacontroller_setup(struct b4
b43_dma_write(ring, B43_DMA32_RXRING,
(ringbase & ~SSB_DMA_TRANSLATION_MASK)
| trans);
@@ -100,9 +168,89 @@
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
+@@ -954,19 +955,21 @@ int b43_dma_init(struct b43_wldev *dev)
+
+ err = -ENOMEM;
+ /* setup TX DMA channels. */
+- ring = b43_setup_dmaring(dev, 0, 1, dma64);
++ ring = b43_setup_dmaring(dev, 1, 1, dma64);
+ if (!ring)
+ goto out;
+- dma->tx_ring0 = ring;
++ dma->tx_ring1 = ring;
+
+- ring = b43_setup_dmaring(dev, 1, 1, dma64);
++ /* The driver only uses ring1 for TX - skip setup for the rest */
++#if 0
++ ring = b43_setup_dmaring(dev, 0, 1, dma64);
+ if (!ring)
+- goto err_destroy_tx0;
+- dma->tx_ring1 = ring;
++ goto err_destroy_tx1;
++ dma->tx_ring0 = ring;
+
+ ring = b43_setup_dmaring(dev, 2, 1, dma64);
+ if (!ring)
+- goto err_destroy_tx1;
++ goto err_destroy_tx0;
+ dma->tx_ring2 = ring;
+
+ ring = b43_setup_dmaring(dev, 3, 1, dma64);
+@@ -983,6 +986,7 @@ int b43_dma_init(struct b43_wldev *dev)
+ if (!ring)
+ goto err_destroy_tx4;
+ dma->tx_ring5 = ring;
++#endif
+
+ /* setup RX DMA channels. */
+ ring = b43_setup_dmaring(dev, 0, 0, dma64);
+@@ -1001,30 +1005,32 @@ int b43_dma_init(struct b43_wldev *dev)
+ (dmamask == DMA_64BIT_MASK) ? 64 :
+ (dmamask == DMA_32BIT_MASK) ? 32 : 30);
+ err = 0;
+- out:
++out:
+ return err;
+
+- err_destroy_rx0:
++err_destroy_rx0:
+ b43_destroy_dmaring(dma->rx_ring0);
+ dma->rx_ring0 = NULL;
+- err_destroy_tx5:
++err_destroy_tx5:
++#if 0
+ b43_destroy_dmaring(dma->tx_ring5);
+ dma->tx_ring5 = NULL;
+- err_destroy_tx4:
++err_destroy_tx4:
+ b43_destroy_dmaring(dma->tx_ring4);
+ dma->tx_ring4 = NULL;
+- err_destroy_tx3:
++err_destroy_tx3:
+ b43_destroy_dmaring(dma->tx_ring3);
+ dma->tx_ring3 = NULL;
+- err_destroy_tx2:
++err_destroy_tx2:
+ b43_destroy_dmaring(dma->tx_ring2);
+ dma->tx_ring2 = NULL;
+- err_destroy_tx1:
+- b43_destroy_dmaring(dma->tx_ring1);
+- dma->tx_ring1 = NULL;
+- err_destroy_tx0:
++err_destroy_tx0:
+ b43_destroy_dmaring(dma->tx_ring0);
+ dma->tx_ring0 = NULL;
++err_destroy_tx1:
++#endif
++ b43_destroy_dmaring(dma->tx_ring1);
++ dma->tx_ring1 = NULL;
+ goto out;
+ }
+
+Index: wireless-2.6/drivers/net/wireless/b43/main.c
+===================================================================
+--- wireless-2.6.orig/drivers/net/wireless/b43/main.c
++++ wireless-2.6/drivers/net/wireless/b43/main.c
@@ -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),
@@ -111,7 +259,7 @@
SSB_DEVTABLE_END
};
-@@ -3063,7 +3064,7 @@ static int b43_phy_versioning(struct b43
+@@ -3064,7 +3065,7 @@ static int b43_phy_versioning(struct b43
unsupported = 1;
break;
case B43_PHYTYPE_G:
@@ -120,20 +268,16 @@
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);
- }
-
+Index: wireless-2.6/drivers/net/wireless/b43/wa.c
+===================================================================
+--- wireless-2.6.orig/drivers/net/wireless/b43/wa.c
++++ wireless-2.6/drivers/net/wireless/b43/wa.c
+@@ -642,6 +642,7 @@ void b43_wa_all(struct b43_wldev *dev)
+ case 6:
+ case 7:
+ case 8:
++ case 9:
+ b43_wa_tr_ltov(dev);
+ b43_wa_crs_ed(dev);
+ b43_wa_rssi_lt(dev);
+
More information about the fedora-extras-commits
mailing list