Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 03b29773 authored by Michael Buesch's avatar Michael Buesch Committed by David S. Miller
Browse files

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: default avatarMichael Buesch <mb@bu3sch.de>
Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
parent 993e1c78
Loading
Loading
Loading
Loading
+0 −48
Original line number Diff line number Diff line
@@ -83,51 +83,3 @@ config B43_DEBUG

	  Say Y, if you want to find out why the driver does not
	  work for you.

config B43_DMA
	bool
	depends on B43
config B43_PIO
	bool
	depends on B43

choice
	prompt "Broadcom 43xx data transfer mode"
	depends on B43
	default B43_DMA_AND_PIO_MODE

config B43_DMA_AND_PIO_MODE
	bool "DMA + PIO"
	select B43_DMA
	select B43_PIO
	---help---
	  Include both, Direct Memory Access (DMA) and Programmed I/O (PIO)
	  data transfer modes.
	  The actually used mode is selectable through the module
	  parameter "pio". If the module parameter is pio=0, DMA is used.
	  Otherwise PIO is used. DMA is default.

	  If unsure, choose this option.

config B43_DMA_MODE
	bool "DMA (Direct Memory Access) only"
	select B43_DMA
	---help---
	  Only include Direct Memory Access (DMA).
	  This reduces the size of the driver module, by omitting the PIO code.

config B43_PIO_MODE
	bool "PIO (Programmed I/O) only"
	select B43_PIO
	---help---
	  Only include Programmed I/O (PIO).
	  This reduces the size of the driver module, by omitting the DMA code.
	  Please note that PIO transfers are slow (compared to DMA).

	  Also note that not all devices of the 43xx series support PIO.
	  The 4306 (Apple Airport Extreme and others) supports PIO, while
	  the 4318 is known to _not_ support PIO.

	  Only use PIO, if DMA does not work for you.

endchoice
+1 −8
Original line number Diff line number Diff line
# b43 core
b43-y				+= main.o
b43-y				+= tables.o
b43-y				+= phy.o
@@ -6,16 +5,10 @@ b43-y += sysfs.o
b43-y				+= xmit.o
b43-y				+= lo.o
b43-y				+= wa.o
# b43 RFKILL button support
b43-y				+= dma.o
b43-$(CONFIG_B43_RFKILL)	+= rfkill.o
# b43 LED support
b43-$(CONFIG_B43_LEDS)		+= leds.o
# b43 PCMCIA support
b43-$(CONFIG_B43_PCMCIA)	+= pcmcia.o
# b43 debugging
b43-$(CONFIG_B43_DEBUG)		+= debugfs.o
# b43 DMA and PIO
b43-$(CONFIG_B43_DMA)		+= dma.o
b43-$(CONFIG_B43_PIO)		+= pio.o

obj-$(CONFIG_B43)		+= b43.o
+3 −42
Original line number Diff line number Diff line
@@ -68,11 +68,6 @@
#define B43_MMIO_DMA64_BASE3		0x2C0
#define B43_MMIO_DMA64_BASE4		0x300
#define B43_MMIO_DMA64_BASE5		0x340
/* PIO */
#define B43_MMIO_PIO1_BASE		0x300
#define B43_MMIO_PIO2_BASE		0x310
#define B43_MMIO_PIO3_BASE		0x320
#define B43_MMIO_PIO4_BASE		0x330

#define B43_MMIO_PHY_VER		0x3E0
#define B43_MMIO_PHY_RADIO		0x3E2
@@ -579,14 +574,6 @@ struct b43_dma {
	struct b43_dmaring *rx_ring3;	/* only available on core.rev < 5 */
};

/* Data structures for PIO transmission, per 80211 core. */
struct b43_pio {
	struct b43_pioqueue *queue0;
	struct b43_pioqueue *queue1;
	struct b43_pioqueue *queue2;
	struct b43_pioqueue *queue3;
};

/* Context information for a noise calculation (Link Quality). */
struct b43_noise_calculation {
	u8 channel_at_start;
@@ -705,7 +692,6 @@ struct b43_wldev {
	/* Saved init status for handling suspend. */
	int suspend_init_status;

	bool __using_pio;	/* Internal, use b43_using_pio(). */
	bool bad_frames_preempt;	/* Use "Bad Frames Preemption" (default off) */
	bool reg124_set_0x4;	/* Some variable to keep track of IRQ stuff. */
	bool short_preamble;	/* TRUE, if short preamble is enabled. */
@@ -714,12 +700,9 @@ struct b43_wldev {

	/* PHY/Radio device. */
	struct b43_phy phy;
	union {

	/* DMA engines. */
	struct b43_dma dma;
		/* PIO engines. */
		struct b43_pio pio;
	};

	/* Various statistics about the physical device. */
	struct b43_stats stats;
@@ -774,28 +757,6 @@ static inline struct b43_wl *hw_to_b43_wl(struct ieee80211_hw *hw)
	return hw->priv;
}

/* Helper function, which returns a boolean.
 * TRUE, if PIO is used; FALSE, if DMA is used.
 */
#if defined(CONFIG_B43_DMA) && defined(CONFIG_B43_PIO)
static inline int b43_using_pio(struct b43_wldev *dev)
{
	return dev->__using_pio;
}
#elif defined(CONFIG_B43_DMA)
static inline int b43_using_pio(struct b43_wldev *dev)
{
	return 0;
}
#elif defined(CONFIG_B43_PIO)
static inline int b43_using_pio(struct b43_wldev *dev)
{
	return 1;
}
#else
# error "Using neither DMA nor PIO? Confused..."
#endif

static inline struct b43_wldev *dev_to_b43_wldev(struct device *dev)
{
	struct ssb_device *ssb_dev = dev_to_ssb_dev(dev);
+0 −1
Original line number Diff line number Diff line
@@ -34,7 +34,6 @@
#include "main.h"
#include "debugfs.h"
#include "dma.h"
#include "pio.h"
#include "xmit.h"


+5 −14
Original line number Diff line number Diff line
@@ -915,11 +915,7 @@ static void b43_destroy_dmaring(struct b43_dmaring *ring)

void b43_dma_free(struct b43_wldev *dev)
{
	struct b43_dma *dma;

	if (b43_using_pio(dev))
		return;
	dma = &dev->dma;
	struct b43_dma *dma = &dev->dma;

	b43_destroy_dmaring(dma->rx_ring3);
	dma->rx_ring3 = NULL;
@@ -954,16 +950,11 @@ int b43_dma_init(struct b43_wldev *dev)

	err = ssb_dma_set_mask(dev->dev, dmamask);
	if (err) {
#ifdef B43_PIO
		b43warn(dev->wl, "DMA for this device not supported. "
			"Falling back to PIO\n");
		dev->__using_pio = 1;
		return -EAGAIN;
#else
		b43err(dev->wl, "DMA for this device not supported and "
		       "no PIO support compiled in\n");
		b43err(dev->wl, "The machine/kernel does not support "
		       "the required DMA mask (0x%08X%08X)\n",
		       (unsigned int)((dmamask & 0xFFFFFFFF00000000ULL) >> 32),
		       (unsigned int)(dmamask & 0x00000000FFFFFFFFULL));
		return -EOPNOTSUPP;
#endif
	}

	err = -ENOMEM;
Loading