diff options
Diffstat (limited to 'drivers/net/wireless/b43/main.c')
-rw-r--r-- | drivers/net/wireless/b43/main.c | 14 |
1 files changed, 8 insertions, 6 deletions
diff --git a/drivers/net/wireless/b43/main.c b/drivers/net/wireless/b43/main.c index 8f7a8c0ec27d..16580d0d3a02 100644 --- a/drivers/net/wireless/b43/main.c +++ b/drivers/net/wireless/b43/main.c | |||
@@ -107,9 +107,9 @@ int b43_modparam_verbose = B43_VERBOSITY_DEFAULT; | |||
107 | module_param_named(verbose, b43_modparam_verbose, int, 0644); | 107 | module_param_named(verbose, b43_modparam_verbose, int, 0644); |
108 | MODULE_PARM_DESC(verbose, "Log message verbosity: 0=error, 1=warn, 2=info(default), 3=debug"); | 108 | MODULE_PARM_DESC(verbose, "Log message verbosity: 0=error, 1=warn, 2=info(default), 3=debug"); |
109 | 109 | ||
110 | static int modparam_pio; | 110 | int b43_modparam_pio = B43_PIO_DEFAULT; |
111 | module_param_named(pio, modparam_pio, int, 0444); | 111 | module_param_named(pio, b43_modparam_pio, int, 0644); |
112 | MODULE_PARM_DESC(pio, "enable(1) / disable(0) PIO mode"); | 112 | MODULE_PARM_DESC(pio, "Use PIO accesses by default: 0=DMA, 1=PIO"); |
113 | 113 | ||
114 | static const struct ssb_device_id b43_ssb_tbl[] = { | 114 | static const struct ssb_device_id b43_ssb_tbl[] = { |
115 | SSB_DEVICE(SSB_VENDOR_BROADCOM, SSB_DEV_80211, 5), | 115 | SSB_DEVICE(SSB_VENDOR_BROADCOM, SSB_DEV_80211, 5), |
@@ -1804,8 +1804,9 @@ static void b43_do_interrupt_thread(struct b43_wldev *dev) | |||
1804 | dma_reason[4], dma_reason[5]); | 1804 | dma_reason[4], dma_reason[5]); |
1805 | b43err(dev->wl, "This device does not support DMA " | 1805 | b43err(dev->wl, "This device does not support DMA " |
1806 | "on your system. Please use PIO instead.\n"); | 1806 | "on your system. Please use PIO instead.\n"); |
1807 | b43err(dev->wl, "Unload the b43 module and reload " | 1807 | /* Fall back to PIO transfers if we get fatal DMA errors! */ |
1808 | "with 'pio=1'\n"); | 1808 | dev->use_pio = 1; |
1809 | b43_controller_restart(dev, "DMA error"); | ||
1809 | return; | 1810 | return; |
1810 | } | 1811 | } |
1811 | if (merged_dma_reason & B43_DMAIRQ_NONFATALMASK) { | 1812 | if (merged_dma_reason & B43_DMAIRQ_NONFATALMASK) { |
@@ -4357,7 +4358,7 @@ static int b43_wireless_core_init(struct b43_wldev *dev) | |||
4357 | 4358 | ||
4358 | if ((dev->dev->bus->bustype == SSB_BUSTYPE_PCMCIA) || | 4359 | if ((dev->dev->bus->bustype == SSB_BUSTYPE_PCMCIA) || |
4359 | (dev->dev->bus->bustype == SSB_BUSTYPE_SDIO) || | 4360 | (dev->dev->bus->bustype == SSB_BUSTYPE_SDIO) || |
4360 | modparam_pio) { | 4361 | dev->use_pio) { |
4361 | dev->__using_pio_transfers = 1; | 4362 | dev->__using_pio_transfers = 1; |
4362 | err = b43_pio_init(dev); | 4363 | err = b43_pio_init(dev); |
4363 | } else { | 4364 | } else { |
@@ -4824,6 +4825,7 @@ static int b43_one_core_attach(struct ssb_device *dev, struct b43_wl *wl) | |||
4824 | if (!wldev) | 4825 | if (!wldev) |
4825 | goto out; | 4826 | goto out; |
4826 | 4827 | ||
4828 | wldev->use_pio = b43_modparam_pio; | ||
4827 | wldev->dev = dev; | 4829 | wldev->dev = dev; |
4828 | wldev->wl = wl; | 4830 | wldev->wl = wl; |
4829 | b43_set_status(wldev, B43_STAT_UNINIT); | 4831 | b43_set_status(wldev, B43_STAT_UNINIT); |