diff options
author | Michael Buesch <mb@bu3sch.de> | 2007-12-26 08:41:30 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2008-01-28 18:09:17 -0500 |
commit | 03b29773b613f10d2f97dbf0983f1c4c58507967 (patch) | |
tree | ce1ca3fd9a8ae572e20a629976152f4e1a6c4f7b /drivers/net/wireless/b43/main.c | |
parent | 993e1c780b323736a2cdc24564f35e80ce8d3337 (diff) |
b43: Remove PIO support
Remove b43 PIO support.
DMA works well on all supported devices. There's no reason to use PIO.
Additionally, new devices don't support PIO in hardware anymore.
b43 PIO support is dead and unused code.
After applying this patch please do
git rm drivers/net/wireless/b43/pio.h
git rm drivers/net/wireless/b43/pio.c
to remove the main PIO support code.
Signed-off-by: Michael Buesch <mb@bu3sch.de>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net/wireless/b43/main.c')
-rw-r--r-- | drivers/net/wireless/b43/main.c | 84 |
1 files changed, 8 insertions, 76 deletions
diff --git a/drivers/net/wireless/b43/main.c b/drivers/net/wireless/b43/main.c index 6b3013c2d96d..2add839f5045 100644 --- a/drivers/net/wireless/b43/main.c +++ b/drivers/net/wireless/b43/main.c | |||
@@ -46,7 +46,6 @@ | |||
46 | #include "debugfs.h" | 46 | #include "debugfs.h" |
47 | #include "phy.h" | 47 | #include "phy.h" |
48 | #include "dma.h" | 48 | #include "dma.h" |
49 | #include "pio.h" | ||
50 | #include "sysfs.h" | 49 | #include "sysfs.h" |
51 | #include "xmit.h" | 50 | #include "xmit.h" |
52 | #include "lo.h" | 51 | #include "lo.h" |
@@ -58,17 +57,6 @@ MODULE_AUTHOR("Stefano Brivio"); | |||
58 | MODULE_AUTHOR("Michael Buesch"); | 57 | MODULE_AUTHOR("Michael Buesch"); |
59 | MODULE_LICENSE("GPL"); | 58 | MODULE_LICENSE("GPL"); |
60 | 59 | ||
61 | extern char *nvram_get(char *name); | ||
62 | |||
63 | #if defined(CONFIG_B43_DMA) && defined(CONFIG_B43_PIO) | ||
64 | static int modparam_pio; | ||
65 | module_param_named(pio, modparam_pio, int, 0444); | ||
66 | MODULE_PARM_DESC(pio, "enable(1) / disable(0) PIO mode"); | ||
67 | #elif defined(CONFIG_B43_DMA) | ||
68 | # define modparam_pio 0 | ||
69 | #elif defined(CONFIG_B43_PIO) | ||
70 | # define modparam_pio 1 | ||
71 | #endif | ||
72 | 60 | ||
73 | static int modparam_bad_frames_preempt; | 61 | static int modparam_bad_frames_preempt; |
74 | module_param_named(bad_frames_preempt, modparam_bad_frames_preempt, int, 0444); | 62 | module_param_named(bad_frames_preempt, modparam_bad_frames_preempt, int, 0444); |
@@ -1447,20 +1435,12 @@ static void b43_interrupt_tasklet(struct b43_wldev *dev) | |||
1447 | handle_irq_noise(dev); | 1435 | handle_irq_noise(dev); |
1448 | 1436 | ||
1449 | /* Check the DMA reason registers for received data. */ | 1437 | /* Check the DMA reason registers for received data. */ |
1450 | if (dma_reason[0] & B43_DMAIRQ_RX_DONE) { | 1438 | if (dma_reason[0] & B43_DMAIRQ_RX_DONE) |
1451 | if (b43_using_pio(dev)) | 1439 | b43_dma_rx(dev->dma.rx_ring0); |
1452 | b43_pio_rx(dev->pio.queue0); | 1440 | if (dma_reason[3] & B43_DMAIRQ_RX_DONE) |
1453 | else | 1441 | b43_dma_rx(dev->dma.rx_ring3); |
1454 | b43_dma_rx(dev->dma.rx_ring0); | ||
1455 | } | ||
1456 | B43_WARN_ON(dma_reason[1] & B43_DMAIRQ_RX_DONE); | 1442 | B43_WARN_ON(dma_reason[1] & B43_DMAIRQ_RX_DONE); |
1457 | B43_WARN_ON(dma_reason[2] & B43_DMAIRQ_RX_DONE); | 1443 | B43_WARN_ON(dma_reason[2] & B43_DMAIRQ_RX_DONE); |
1458 | if (dma_reason[3] & B43_DMAIRQ_RX_DONE) { | ||
1459 | if (b43_using_pio(dev)) | ||
1460 | b43_pio_rx(dev->pio.queue3); | ||
1461 | else | ||
1462 | b43_dma_rx(dev->dma.rx_ring3); | ||
1463 | } | ||
1464 | B43_WARN_ON(dma_reason[4] & B43_DMAIRQ_RX_DONE); | 1444 | B43_WARN_ON(dma_reason[4] & B43_DMAIRQ_RX_DONE); |
1465 | B43_WARN_ON(dma_reason[5] & B43_DMAIRQ_RX_DONE); | 1445 | B43_WARN_ON(dma_reason[5] & B43_DMAIRQ_RX_DONE); |
1466 | 1446 | ||
@@ -1472,29 +1452,8 @@ static void b43_interrupt_tasklet(struct b43_wldev *dev) | |||
1472 | spin_unlock_irqrestore(&dev->wl->irq_lock, flags); | 1452 | spin_unlock_irqrestore(&dev->wl->irq_lock, flags); |
1473 | } | 1453 | } |
1474 | 1454 | ||
1475 | static void pio_irq_workaround(struct b43_wldev *dev, u16 base, int queueidx) | ||
1476 | { | ||
1477 | u16 rxctl; | ||
1478 | |||
1479 | rxctl = b43_read16(dev, base + B43_PIO_RXCTL); | ||
1480 | if (rxctl & B43_PIO_RXCTL_DATAAVAILABLE) | ||
1481 | dev->dma_reason[queueidx] |= B43_DMAIRQ_RX_DONE; | ||
1482 | else | ||
1483 | dev->dma_reason[queueidx] &= ~B43_DMAIRQ_RX_DONE; | ||
1484 | } | ||
1485 | |||
1486 | static void b43_interrupt_ack(struct b43_wldev *dev, u32 reason) | 1455 | static void b43_interrupt_ack(struct b43_wldev *dev, u32 reason) |
1487 | { | 1456 | { |
1488 | if (b43_using_pio(dev) && | ||
1489 | (dev->dev->id.revision < 3) && | ||
1490 | (!(reason & B43_IRQ_PIO_WORKAROUND))) { | ||
1491 | /* Apply a PIO specific workaround to the dma_reasons */ | ||
1492 | pio_irq_workaround(dev, B43_MMIO_PIO1_BASE, 0); | ||
1493 | pio_irq_workaround(dev, B43_MMIO_PIO2_BASE, 1); | ||
1494 | pio_irq_workaround(dev, B43_MMIO_PIO3_BASE, 2); | ||
1495 | pio_irq_workaround(dev, B43_MMIO_PIO4_BASE, 3); | ||
1496 | } | ||
1497 | |||
1498 | b43_write32(dev, B43_MMIO_GEN_IRQ_REASON, reason); | 1457 | b43_write32(dev, B43_MMIO_GEN_IRQ_REASON, reason); |
1499 | 1458 | ||
1500 | b43_write32(dev, B43_MMIO_DMA0_REASON, dev->dma_reason[0]); | 1459 | b43_write32(dev, B43_MMIO_DMA0_REASON, dev->dma_reason[0]); |
@@ -2225,14 +2184,6 @@ static int b43_chip_init(struct b43_wldev *dev) | |||
2225 | b43_write32(dev, B43_MMIO_MACCTL, b43_read32(dev, B43_MMIO_MACCTL) | 2184 | b43_write32(dev, B43_MMIO_MACCTL, b43_read32(dev, B43_MMIO_MACCTL) |
2226 | | B43_MACCTL_INFRA); | 2185 | | B43_MACCTL_INFRA); |
2227 | 2186 | ||
2228 | if (b43_using_pio(dev)) { | ||
2229 | b43_write32(dev, 0x0210, 0x00000100); | ||
2230 | b43_write32(dev, 0x0230, 0x00000100); | ||
2231 | b43_write32(dev, 0x0250, 0x00000100); | ||
2232 | b43_write32(dev, 0x0270, 0x00000100); | ||
2233 | b43_shm_write16(dev, B43_SHM_SHARED, 0x0034, 0x0000); | ||
2234 | } | ||
2235 | |||
2236 | /* Probe Response Timeout value */ | 2187 | /* Probe Response Timeout value */ |
2237 | /* FIXME: Default to 0, has to be set by ioctl probably... :-/ */ | 2188 | /* FIXME: Default to 0, has to be set by ioctl probably... :-/ */ |
2238 | b43_shm_write16(dev, B43_SHM_SHARED, 0x0074, 0x0000); | 2189 | b43_shm_write16(dev, B43_SHM_SHARED, 0x0074, 0x0000); |
@@ -2513,19 +2464,13 @@ static int b43_op_tx(struct ieee80211_hw *hw, | |||
2513 | struct b43_wl *wl = hw_to_b43_wl(hw); | 2464 | struct b43_wl *wl = hw_to_b43_wl(hw); |
2514 | struct b43_wldev *dev = wl->current_dev; | 2465 | struct b43_wldev *dev = wl->current_dev; |
2515 | int err = -ENODEV; | 2466 | int err = -ENODEV; |
2516 | unsigned long flags; | ||
2517 | 2467 | ||
2518 | if (unlikely(!dev)) | 2468 | if (unlikely(!dev)) |
2519 | goto out; | 2469 | goto out; |
2520 | if (unlikely(b43_status(dev) < B43_STAT_STARTED)) | 2470 | if (unlikely(b43_status(dev) < B43_STAT_STARTED)) |
2521 | goto out; | 2471 | goto out; |
2522 | /* DMA-TX is done without a global lock. */ | 2472 | /* DMA-TX is done without a global lock. */ |
2523 | if (b43_using_pio(dev)) { | 2473 | err = b43_dma_tx(dev, skb, ctl); |
2524 | spin_lock_irqsave(&wl->irq_lock, flags); | ||
2525 | err = b43_pio_tx(dev, skb, ctl); | ||
2526 | spin_unlock_irqrestore(&wl->irq_lock, flags); | ||
2527 | } else | ||
2528 | err = b43_dma_tx(dev, skb, ctl); | ||
2529 | out: | 2474 | out: |
2530 | if (unlikely(err)) | 2475 | if (unlikely(err)) |
2531 | return NETDEV_TX_BUSY; | 2476 | return NETDEV_TX_BUSY; |
@@ -2551,10 +2496,7 @@ static int b43_op_get_tx_stats(struct ieee80211_hw *hw, | |||
2551 | goto out; | 2496 | goto out; |
2552 | spin_lock_irqsave(&wl->irq_lock, flags); | 2497 | spin_lock_irqsave(&wl->irq_lock, flags); |
2553 | if (likely(b43_status(dev) >= B43_STAT_STARTED)) { | 2498 | if (likely(b43_status(dev) >= B43_STAT_STARTED)) { |
2554 | if (b43_using_pio(dev)) | 2499 | b43_dma_get_tx_stats(dev, stats); |
2555 | b43_pio_get_tx_stats(dev, stats); | ||
2556 | else | ||
2557 | b43_dma_get_tx_stats(dev, stats); | ||
2558 | err = 0; | 2500 | err = 0; |
2559 | } | 2501 | } |
2560 | spin_unlock_irqrestore(&wl->irq_lock, flags); | 2502 | spin_unlock_irqrestore(&wl->irq_lock, flags); |
@@ -3336,7 +3278,6 @@ static void b43_wireless_core_exit(struct b43_wldev *dev) | |||
3336 | 3278 | ||
3337 | b43_leds_exit(dev); | 3279 | b43_leds_exit(dev); |
3338 | b43_rng_exit(dev->wl); | 3280 | b43_rng_exit(dev->wl); |
3339 | b43_pio_free(dev); | ||
3340 | b43_dma_free(dev); | 3281 | b43_dma_free(dev); |
3341 | b43_chip_exit(dev); | 3282 | b43_chip_exit(dev); |
3342 | b43_radio_turn_off(dev, 1); | 3283 | b43_radio_turn_off(dev, 1); |
@@ -3430,17 +3371,10 @@ static int b43_wireless_core_init(struct b43_wldev *dev) | |||
3430 | /* Maximum Contention Window */ | 3371 | /* Maximum Contention Window */ |
3431 | b43_shm_write16(dev, B43_SHM_SCRATCH, B43_SHM_SC_MAXCONT, 0x3FF); | 3372 | b43_shm_write16(dev, B43_SHM_SCRATCH, B43_SHM_SC_MAXCONT, 0x3FF); |
3432 | 3373 | ||
3433 | do { | 3374 | err = b43_dma_init(dev); |
3434 | if (b43_using_pio(dev)) { | ||
3435 | err = b43_pio_init(dev); | ||
3436 | } else { | ||
3437 | err = b43_dma_init(dev); | ||
3438 | if (!err) | ||
3439 | b43_qos_init(dev); | ||
3440 | } | ||
3441 | } while (err == -EAGAIN); | ||
3442 | if (err) | 3375 | if (err) |
3443 | goto err_chip_exit; | 3376 | goto err_chip_exit; |
3377 | b43_qos_init(dev); | ||
3444 | 3378 | ||
3445 | //FIXME | 3379 | //FIXME |
3446 | #if 1 | 3380 | #if 1 |
@@ -3890,8 +3824,6 @@ static int b43_one_core_attach(struct ssb_device *dev, struct b43_wl *wl) | |||
3890 | tasklet_init(&wldev->isr_tasklet, | 3824 | tasklet_init(&wldev->isr_tasklet, |
3891 | (void (*)(unsigned long))b43_interrupt_tasklet, | 3825 | (void (*)(unsigned long))b43_interrupt_tasklet, |
3892 | (unsigned long)wldev); | 3826 | (unsigned long)wldev); |
3893 | if (modparam_pio) | ||
3894 | wldev->__using_pio = 1; | ||
3895 | INIT_LIST_HEAD(&wldev->list); | 3827 | INIT_LIST_HEAD(&wldev->list); |
3896 | 3828 | ||
3897 | err = b43_wireless_core_attach(wldev); | 3829 | err = b43_wireless_core_attach(wldev); |