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

Commit a2413598 authored by Jeff Garzik's avatar Jeff Garzik
Browse files

Merge branch 'upstream' of...

Merge branch 'upstream' of master.kernel.org:/pub/scm/linux/kernel/git/linville/wireless-2.6 into upstream
parents f2ad2d9b c576af47
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -449,9 +449,9 @@ L: linux-hams@vger.kernel.org
W:	http://www.baycom.org/~tom/ham/ham.html
S:	Maintained

BCM43XX WIRELESS DRIVER
P:	Michael Buesch
M:	mb@bu3sch.de
BCM43XX WIRELESS DRIVER (SOFTMAC BASED VERSION)
P:	Larry Finger
M:	Larry.Finger@lwfinger.net
P:	Stefano Brivio
M:	st3@riseup.net
W:	http://bcm43xx.berlios.de/
+6 −17
Original line number Diff line number Diff line
@@ -271,25 +271,14 @@ config IPW2200_DEBUG
	bool "Enable full debugging output in IPW2200 module."
	depends on IPW2200
	---help---
	  This option will enable debug tracing output for the IPW2200.  
	  This option will enable low level debug tracing output for IPW2200.

	  This will result in the kernel module being ~100k larger.  You can 
	  control which debug output is sent to the kernel log by setting the 
	  value in 

	  /sys/bus/pci/drivers/ipw2200/debug_level

	  This entry will only exist if this option is enabled.
	  Note, normal debug code is already compiled in. This low level
	  debug option enables debug on hot paths (e.g Tx, Rx, ISR) and
	  will result in the kernel module being ~70 larger.  Most users
	  will typically not need this high verbosity debug information.

	  To set a value, simply echo an 8-byte hex value to the same file:

	  % echo 0x00000FFO > /sys/bus/pci/drivers/ipw2200/debug_level

	  You can find the list of debug mask values in 
	  drivers/net/wireless/ipw2200.h

	  If you are not trying to debug or develop the IPW2200 driver, you 
	  most likely want to say N here.
	  If you are not sure, say N here.

config AIRO
	tristate "Cisco/Aironet 34X/35X/4500/4800 ISA and PCI cards"
+16 −24
Original line number Diff line number Diff line
@@ -47,6 +47,7 @@
#include <linux/pci.h>
#include <asm/uaccess.h>
#include <net/ieee80211.h>
#include <linux/kthread.h>

#include "airo.h"

@@ -1187,11 +1188,10 @@ struct airo_info {
			int whichbap);
	unsigned short *flash;
	tdsRssiEntry *rssi;
	struct task_struct *task;
	struct task_struct *list_bss_task;
	struct task_struct *airo_thread_task;
	struct semaphore sem;
	pid_t thr_pid;
	wait_queue_head_t thr_wait;
	struct completion thr_exited;
	unsigned long expires;
	struct {
		struct sk_buff *skb;
@@ -1733,12 +1733,12 @@ static int readBSSListRid(struct airo_info *ai, int first,
		cmd.cmd=CMD_LISTBSS;
		if (down_interruptible(&ai->sem))
			return -ERESTARTSYS;
		ai->list_bss_task = current;
		issuecommand(ai, &cmd, &rsp);
		up(&ai->sem);
		/* Let the command take effect */
		ai->task = current;
		ssleep(3);
		ai->task = NULL;
		schedule_timeout_uninterruptible(3 * HZ);
		ai->list_bss_task = NULL;
	}
	rc = PC4500_readrid(ai, first ? ai->bssListFirst : ai->bssListNext,
			    list, ai->bssListRidLen, 1);
@@ -2400,8 +2400,7 @@ void stop_airo_card( struct net_device *dev, int freeres )
		clear_bit(FLAG_REGISTERED, &ai->flags);
	}
	set_bit(JOB_DIE, &ai->jobs);
	kill_proc(ai->thr_pid, SIGTERM, 1);
	wait_for_completion(&ai->thr_exited);
	kthread_stop(ai->airo_thread_task);

	/*
	 * Clean out tx queue
@@ -2811,9 +2810,8 @@ static struct net_device *_init_airo_card( unsigned short irq, int port,
	ai->config.len = 0;
	ai->pci = pci;
	init_waitqueue_head (&ai->thr_wait);
	init_completion (&ai->thr_exited);
	ai->thr_pid = kernel_thread(airo_thread, dev, CLONE_FS | CLONE_FILES);
	if (ai->thr_pid < 0)
	ai->airo_thread_task = kthread_run(airo_thread, dev, dev->name);
	if (IS_ERR(ai->airo_thread_task))
		goto err_out_free;
	ai->tfm = NULL;
	rc = add_airo_dev( dev );
@@ -2930,8 +2928,7 @@ static struct net_device *_init_airo_card( unsigned short irq, int port,
	del_airo_dev(dev);
err_out_thr:
	set_bit(JOB_DIE, &ai->jobs);
	kill_proc(ai->thr_pid, SIGTERM, 1);
	wait_for_completion(&ai->thr_exited);
	kthread_stop(ai->airo_thread_task);
err_out_free:
	free_netdev(dev);
	return NULL;
@@ -3063,13 +3060,7 @@ static int airo_thread(void *data) {
	struct airo_info *ai = dev->priv;
	int locked;
	
	daemonize("%s", dev->name);
	allow_signal(SIGTERM);

	while(1) {
		if (signal_pending(current))
			flush_signals(current);

		/* make swsusp happy with our thread */
		try_to_freeze();

@@ -3097,7 +3088,7 @@ static int airo_thread(void *data) {
						set_bit(JOB_AUTOWEP, &ai->jobs);
						break;
					}
					if (!signal_pending(current)) {
					if (!kthread_should_stop()) {
						unsigned long wake_at;
						if (!ai->expires || !ai->scan_timeout) {
							wake_at = max(ai->expires,
@@ -3109,7 +3100,7 @@ static int airo_thread(void *data) {
						schedule_timeout(wake_at - jiffies);
						continue;
					}
				} else if (!signal_pending(current)) {
				} else if (!kthread_should_stop()) {
					schedule();
					continue;
				}
@@ -3154,7 +3145,8 @@ static int airo_thread(void *data) {
		else  /* Shouldn't get here, but we make sure to unlock */
			up(&ai->sem);
	}
	complete_and_exit (&ai->thr_exited, 0);

	return 0;
}

static irqreturn_t airo_interrupt ( int irq, void* dev_id, struct pt_regs *regs) {
@@ -3235,8 +3227,8 @@ static irqreturn_t airo_interrupt ( int irq, void* dev_id, struct pt_regs *regs)
			if(newStatus == ASSOCIATED || newStatus == REASSOCIATED) {
				if (auto_wep)
					apriv->expires = 0;
				if (apriv->task)
					wake_up_process (apriv->task);
				if (apriv->list_bss_task)
					wake_up_process(apriv->list_bss_task);
				set_bit(FLAG_UPDATE_UNI, &apriv->flags);
				set_bit(FLAG_UPDATE_MULTI, &apriv->flags);

+42 −16
Original line number Diff line number Diff line
@@ -33,14 +33,18 @@
#define BCM43xx_PCICFG_ICR		0x94

/* MMIO offsets */
#define BCM43xx_MMIO_DMA1_REASON	0x20
#define BCM43xx_MMIO_DMA1_IRQ_MASK	0x24
#define BCM43xx_MMIO_DMA2_REASON	0x28
#define BCM43xx_MMIO_DMA2_IRQ_MASK	0x2C
#define BCM43xx_MMIO_DMA3_REASON	0x30
#define BCM43xx_MMIO_DMA3_IRQ_MASK	0x34
#define BCM43xx_MMIO_DMA4_REASON	0x38
#define BCM43xx_MMIO_DMA4_IRQ_MASK	0x3C
#define BCM43xx_MMIO_DMA0_REASON	0x20
#define BCM43xx_MMIO_DMA0_IRQ_MASK	0x24
#define BCM43xx_MMIO_DMA1_REASON	0x28
#define BCM43xx_MMIO_DMA1_IRQ_MASK	0x2C
#define BCM43xx_MMIO_DMA2_REASON	0x30
#define BCM43xx_MMIO_DMA2_IRQ_MASK	0x34
#define BCM43xx_MMIO_DMA3_REASON	0x38
#define BCM43xx_MMIO_DMA3_IRQ_MASK	0x3C
#define BCM43xx_MMIO_DMA4_REASON	0x40
#define BCM43xx_MMIO_DMA4_IRQ_MASK	0x44
#define BCM43xx_MMIO_DMA5_REASON	0x48
#define BCM43xx_MMIO_DMA5_IRQ_MASK	0x4C
#define BCM43xx_MMIO_STATUS_BITFIELD	0x120
#define BCM43xx_MMIO_STATUS2_BITFIELD	0x124
#define BCM43xx_MMIO_GEN_IRQ_REASON	0x128
@@ -56,14 +60,27 @@
#define BCM43xx_MMIO_XMITSTAT_1		0x174
#define BCM43xx_MMIO_REV3PLUS_TSF_LOW	0x180 /* core rev >= 3 only */
#define BCM43xx_MMIO_REV3PLUS_TSF_HIGH	0x184 /* core rev >= 3 only */
#define BCM43xx_MMIO_DMA1_BASE		0x200
#define BCM43xx_MMIO_DMA2_BASE		0x220
#define BCM43xx_MMIO_DMA3_BASE		0x240
#define BCM43xx_MMIO_DMA4_BASE		0x260

/* 32-bit DMA */
#define BCM43xx_MMIO_DMA32_BASE0	0x200
#define BCM43xx_MMIO_DMA32_BASE1	0x220
#define BCM43xx_MMIO_DMA32_BASE2	0x240
#define BCM43xx_MMIO_DMA32_BASE3	0x260
#define BCM43xx_MMIO_DMA32_BASE4	0x280
#define BCM43xx_MMIO_DMA32_BASE5	0x2A0
/* 64-bit DMA */
#define BCM43xx_MMIO_DMA64_BASE0	0x200
#define BCM43xx_MMIO_DMA64_BASE1	0x240
#define BCM43xx_MMIO_DMA64_BASE2	0x280
#define BCM43xx_MMIO_DMA64_BASE3	0x2C0
#define BCM43xx_MMIO_DMA64_BASE4	0x300
#define BCM43xx_MMIO_DMA64_BASE5	0x340
/* PIO */
#define BCM43xx_MMIO_PIO1_BASE		0x300
#define BCM43xx_MMIO_PIO2_BASE		0x310
#define BCM43xx_MMIO_PIO3_BASE		0x320
#define BCM43xx_MMIO_PIO4_BASE		0x330

#define BCM43xx_MMIO_PHY_VER		0x3E0
#define BCM43xx_MMIO_PHY_RADIO		0x3E2
#define BCM43xx_MMIO_ANTENNA		0x3E8
@@ -233,8 +250,14 @@
#define BCM43xx_SBTMSTATELOW_FORCE_GATE_CLOCK	0x20000

/* sbtmstatehigh state flags */
#define BCM43xx_SBTMSTATEHIGH_SERROR		0x1
#define BCM43xx_SBTMSTATEHIGH_BUSY		0x4
#define BCM43xx_SBTMSTATEHIGH_SERROR		0x00000001
#define BCM43xx_SBTMSTATEHIGH_BUSY		0x00000004
#define BCM43xx_SBTMSTATEHIGH_TIMEOUT		0x00000020
#define BCM43xx_SBTMSTATEHIGH_COREFLAGS		0x1FFF0000
#define BCM43xx_SBTMSTATEHIGH_DMA64BIT		0x10000000
#define BCM43xx_SBTMSTATEHIGH_GATEDCLK		0x20000000
#define BCM43xx_SBTMSTATEHIGH_BISTFAILED	0x40000000
#define BCM43xx_SBTMSTATEHIGH_BISTCOMPLETE	0x80000000

/* sbimstate flags */
#define BCM43xx_SBIMSTATE_IB_ERROR		0x20000
@@ -574,8 +597,11 @@ struct bcm43xx_dma {
	struct bcm43xx_dmaring *tx_ring1;
	struct bcm43xx_dmaring *tx_ring2;
	struct bcm43xx_dmaring *tx_ring3;
	struct bcm43xx_dmaring *tx_ring4;
	struct bcm43xx_dmaring *tx_ring5;

	struct bcm43xx_dmaring *rx_ring0;
	struct bcm43xx_dmaring *rx_ring1; /* only available on core.rev < 5 */
	struct bcm43xx_dmaring *rx_ring3; /* only available on core.rev < 5 */
};

/* Data structures for PIO transmission, per 80211 core. */
@@ -739,7 +765,7 @@ struct bcm43xx_private {

	/* Reason code of the last interrupt. */
	u32 irq_reason;
	u32 dma_reason[4];
	u32 dma_reason[6];
	/* saved irq enable/disable state bitfield. */
	u32 irq_savedstate;
	/* Link Quality calculation context. */
Loading