summaryrefslogtreecommitdiff
path: root/package/mac80211/patches/530-b43-optimize-hotpath-mmio.patch
diff options
context:
space:
mode:
Diffstat (limited to 'package/mac80211/patches/530-b43-optimize-hotpath-mmio.patch')
-rw-r--r--package/mac80211/patches/530-b43-optimize-hotpath-mmio.patch173
1 files changed, 0 insertions, 173 deletions
diff --git a/package/mac80211/patches/530-b43-optimize-hotpath-mmio.patch b/package/mac80211/patches/530-b43-optimize-hotpath-mmio.patch
deleted file mode 100644
index 9ea12f3..0000000
--- a/package/mac80211/patches/530-b43-optimize-hotpath-mmio.patch
+++ /dev/null
@@ -1,173 +0,0 @@
---- a/drivers/net/wireless/b43/b43.h
-+++ b/drivers/net/wireless/b43/b43.h
-@@ -778,8 +778,8 @@ struct b43_wldev {
- /* Reason code of the last interrupt. */
- u32 irq_reason;
- u32 dma_reason[6];
-- /* saved irq enable/disable state bitfield. */
-- u32 irq_savedstate;
-+ /* The currently active generic-interrupt mask. */
-+ u32 irq_mask;
- /* Link Quality calculation context. */
- struct b43_noise_calculation noisecalc;
- /* if > 0 MAC is suspended. if == 0 MAC is enabled. */
---- a/drivers/net/wireless/b43/main.c
-+++ b/drivers/net/wireless/b43/main.c
-@@ -673,32 +673,6 @@ static void b43_short_slot_timing_disabl
- b43_set_slot_time(dev, 20);
- }
-
--/* Enable a Generic IRQ. "mask" is the mask of which IRQs to enable.
-- * Returns the _previously_ enabled IRQ mask.
-- */
--static inline u32 b43_interrupt_enable(struct b43_wldev *dev, u32 mask)
--{
-- u32 old_mask;
--
-- old_mask = b43_read32(dev, B43_MMIO_GEN_IRQ_MASK);
-- b43_write32(dev, B43_MMIO_GEN_IRQ_MASK, old_mask | mask);
--
-- return old_mask;
--}
--
--/* Disable a Generic IRQ. "mask" is the mask of which IRQs to disable.
-- * Returns the _previously_ enabled IRQ mask.
-- */
--static inline u32 b43_interrupt_disable(struct b43_wldev *dev, u32 mask)
--{
-- u32 old_mask;
--
-- old_mask = b43_read32(dev, B43_MMIO_GEN_IRQ_MASK);
-- b43_write32(dev, B43_MMIO_GEN_IRQ_MASK, old_mask & ~mask);
--
-- return old_mask;
--}
--
- /* Synchronize IRQ top- and bottom-half.
- * IRQs must be masked before calling this.
- * This must not be called with the irq_lock held.
-@@ -1593,7 +1567,7 @@ static void handle_irq_beacon(struct b43
- /* This is the bottom half of the asynchronous beacon update. */
-
- /* Ignore interrupt in the future. */
-- dev->irq_savedstate &= ~B43_IRQ_BEACON;
-+ dev->irq_mask &= ~B43_IRQ_BEACON;
-
- cmd = b43_read32(dev, B43_MMIO_MACCMD);
- beacon0_valid = (cmd & B43_MACCMD_BEACON0_VALID);
-@@ -1602,7 +1576,7 @@ static void handle_irq_beacon(struct b43
- /* Schedule interrupt manually, if busy. */
- if (beacon0_valid && beacon1_valid) {
- b43_write32(dev, B43_MMIO_GEN_IRQ_REASON, B43_IRQ_BEACON);
-- dev->irq_savedstate |= B43_IRQ_BEACON;
-+ dev->irq_mask |= B43_IRQ_BEACON;
- return;
- }
-
-@@ -1641,11 +1615,9 @@ static void b43_beacon_update_trigger_wo
- if (likely(dev && (b43_status(dev) >= B43_STAT_INITIALIZED))) {
- spin_lock_irq(&wl->irq_lock);
- /* update beacon right away or defer to irq */
-- dev->irq_savedstate = b43_read32(dev, B43_MMIO_GEN_IRQ_MASK);
- handle_irq_beacon(dev);
- /* The handler might have updated the IRQ mask. */
-- b43_write32(dev, B43_MMIO_GEN_IRQ_MASK,
-- dev->irq_savedstate);
-+ b43_write32(dev, B43_MMIO_GEN_IRQ_MASK, dev->irq_mask);
- mmiowb();
- spin_unlock_irq(&wl->irq_lock);
- }
-@@ -1879,7 +1851,7 @@ static void b43_interrupt_tasklet(struct
- if (reason & B43_IRQ_TX_OK)
- handle_irq_transmit_status(dev);
-
-- b43_interrupt_enable(dev, dev->irq_savedstate);
-+ b43_write32(dev, B43_MMIO_GEN_IRQ_MASK, dev->irq_mask);
- mmiowb();
- spin_unlock_irqrestore(&dev->wl->irq_lock, flags);
- }
-@@ -1893,7 +1865,9 @@ static void b43_interrupt_ack(struct b43
- b43_write32(dev, B43_MMIO_DMA2_REASON, dev->dma_reason[2]);
- b43_write32(dev, B43_MMIO_DMA3_REASON, dev->dma_reason[3]);
- b43_write32(dev, B43_MMIO_DMA4_REASON, dev->dma_reason[4]);
-+/* Unused ring
- b43_write32(dev, B43_MMIO_DMA5_REASON, dev->dma_reason[5]);
-+*/
- }
-
- /* Interrupt handler top-half */
-@@ -1903,18 +1877,19 @@ static irqreturn_t b43_interrupt_handler
- struct b43_wldev *dev = dev_id;
- u32 reason;
-
-- if (!dev)
-- return IRQ_NONE;
-+ B43_WARN_ON(!dev);
-
- spin_lock(&dev->wl->irq_lock);
-
-- if (b43_status(dev) < B43_STAT_STARTED)
-+ if (unlikely(b43_status(dev) < B43_STAT_STARTED)) {
-+ /* This can only happen on shared IRQ lines. */
- goto out;
-+ }
- reason = b43_read32(dev, B43_MMIO_GEN_IRQ_REASON);
- if (reason == 0xffffffff) /* shared IRQ */
- goto out;
- ret = IRQ_HANDLED;
-- reason &= b43_read32(dev, B43_MMIO_GEN_IRQ_MASK);
-+ reason &= dev->irq_mask;
- if (!reason)
- goto out;
-
-@@ -1928,16 +1903,18 @@ static irqreturn_t b43_interrupt_handler
- & 0x0001DC00;
- dev->dma_reason[4] = b43_read32(dev, B43_MMIO_DMA4_REASON)
- & 0x0000DC00;
-+/* Unused ring
- dev->dma_reason[5] = b43_read32(dev, B43_MMIO_DMA5_REASON)
- & 0x0000DC00;
-+*/
-
- b43_interrupt_ack(dev, reason);
- /* disable all IRQs. They are enabled again in the bottom half. */
-- dev->irq_savedstate = b43_interrupt_disable(dev, B43_IRQ_ALL);
-+ b43_write32(dev, B43_MMIO_GEN_IRQ_MASK, 0);
- /* save the reason code and call our bottom half. */
- dev->irq_reason = reason;
- tasklet_schedule(&dev->isr_tasklet);
-- out:
-+out:
- mmiowb();
- spin_unlock(&dev->wl->irq_lock);
-
-@@ -3799,7 +3776,7 @@ static void b43_wireless_core_stop(struc
- * setting the status to INITIALIZED, as the interrupt handler
- * won't care about IRQs then. */
- spin_lock_irqsave(&wl->irq_lock, flags);
-- dev->irq_savedstate = b43_interrupt_disable(dev, B43_IRQ_ALL);
-+ b43_write32(dev, B43_MMIO_GEN_IRQ_MASK, 0);
- b43_read32(dev, B43_MMIO_GEN_IRQ_MASK); /* flush */
- spin_unlock_irqrestore(&wl->irq_lock, flags);
- b43_synchronize_irq(dev);
-@@ -3840,7 +3817,7 @@ static int b43_wireless_core_start(struc
-
- /* Start data flow (TX/RX). */
- b43_mac_enable(dev);
-- b43_interrupt_enable(dev, dev->irq_savedstate);
-+ b43_write32(dev, B43_MMIO_GEN_IRQ_MASK, dev->irq_mask);
-
- /* Start maintainance work */
- b43_periodic_tasks_setup(dev);
-@@ -3998,9 +3975,9 @@ static void setup_struct_wldev_for_init(
- /* IRQ related flags */
- dev->irq_reason = 0;
- memset(dev->dma_reason, 0, sizeof(dev->dma_reason));
-- dev->irq_savedstate = B43_IRQ_MASKTEMPLATE;
-+ dev->irq_mask = B43_IRQ_MASKTEMPLATE;
- if (b43_modparam_verbose < B43_VERBOSITY_DEBUG)
-- dev->irq_savedstate &= ~B43_IRQ_PHY_TXERR;
-+ dev->irq_mask &= ~B43_IRQ_PHY_TXERR;
-
- dev->mac_suspended = 1;
-