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

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

Merge branch 'upstream-fixes' of...

Merge branch 'upstream-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-2.6 into upstream-fixes
parents cfadbd29 41072a1b
Loading
Loading
Loading
Loading
+76 −29
Original line number Original line Diff line number Diff line
@@ -2897,6 +2897,8 @@ static struct net_device *_init_airo_card( unsigned short irq, int port,
		goto err_out_map;
		goto err_out_map;
	}
	}
	ai->wifidev = init_wifidev(ai, dev);
	ai->wifidev = init_wifidev(ai, dev);
	if (!ai->wifidev)
		goto err_out_reg;


	set_bit(FLAG_REGISTERED,&ai->flags);
	set_bit(FLAG_REGISTERED,&ai->flags);
	airo_print_info(dev->name, "MAC enabled %x:%x:%x:%x:%x:%x",
	airo_print_info(dev->name, "MAC enabled %x:%x:%x:%x:%x:%x",
@@ -2908,11 +2910,18 @@ static struct net_device *_init_airo_card( unsigned short irq, int port,
		for( i = 0; i < MAX_FIDS; i++ )
		for( i = 0; i < MAX_FIDS; i++ )
			ai->fids[i] = transmit_allocate(ai,AIRO_DEF_MTU,i>=MAX_FIDS/2);
			ai->fids[i] = transmit_allocate(ai,AIRO_DEF_MTU,i>=MAX_FIDS/2);


	setup_proc_entry( dev, dev->priv ); /* XXX check for failure */
	if (setup_proc_entry(dev, dev->priv) < 0)
		goto err_out_wifi;

	netif_start_queue(dev);
	netif_start_queue(dev);
	SET_MODULE_OWNER(dev);
	SET_MODULE_OWNER(dev);
	return dev;
	return dev;


err_out_wifi:
	unregister_netdev(ai->wifidev);
	free_netdev(ai->wifidev);
err_out_reg:
	unregister_netdev(dev);
err_out_map:
err_out_map:
	if (test_bit(FLAG_MPI,&ai->flags) && pci) {
	if (test_bit(FLAG_MPI,&ai->flags) && pci) {
		pci_free_consistent(pci, PCI_SHARED_LEN, ai->shared, ai->shared_dma);
		pci_free_consistent(pci, PCI_SHARED_LEN, ai->shared, ai->shared_dma);
@@ -3089,7 +3098,8 @@ static int airo_thread(void *data) {
						set_bit(JOB_AUTOWEP, &ai->jobs);
						set_bit(JOB_AUTOWEP, &ai->jobs);
						break;
						break;
					}
					}
					if (!kthread_should_stop()) {
					if (!kthread_should_stop() &&
					    !freezing(current)) {
						unsigned long wake_at;
						unsigned long wake_at;
						if (!ai->expires || !ai->scan_timeout) {
						if (!ai->expires || !ai->scan_timeout) {
							wake_at = max(ai->expires,
							wake_at = max(ai->expires,
@@ -3101,7 +3111,8 @@ static int airo_thread(void *data) {
						schedule_timeout(wake_at - jiffies);
						schedule_timeout(wake_at - jiffies);
						continue;
						continue;
					}
					}
				} else if (!kthread_should_stop()) {
				} else if (!kthread_should_stop() &&
					   !freezing(current)) {
					schedule();
					schedule();
					continue;
					continue;
				}
				}
@@ -4495,6 +4506,8 @@ static int setup_proc_entry( struct net_device *dev,
	apriv->proc_entry = create_proc_entry(apriv->proc_name,
	apriv->proc_entry = create_proc_entry(apriv->proc_name,
					      S_IFDIR|airo_perm,
					      S_IFDIR|airo_perm,
					      airo_entry);
					      airo_entry);
	if (!apriv->proc_entry)
		goto fail;
	apriv->proc_entry->uid = proc_uid;
	apriv->proc_entry->uid = proc_uid;
	apriv->proc_entry->gid = proc_gid;
	apriv->proc_entry->gid = proc_gid;
	apriv->proc_entry->owner = THIS_MODULE;
	apriv->proc_entry->owner = THIS_MODULE;
@@ -4503,6 +4516,8 @@ static int setup_proc_entry( struct net_device *dev,
	entry = create_proc_entry("StatsDelta",
	entry = create_proc_entry("StatsDelta",
				  S_IFREG | (S_IRUGO&proc_perm),
				  S_IFREG | (S_IRUGO&proc_perm),
				  apriv->proc_entry);
				  apriv->proc_entry);
	if (!entry)
		goto fail_stats_delta;
	entry->uid = proc_uid;
	entry->uid = proc_uid;
	entry->gid = proc_gid;
	entry->gid = proc_gid;
	entry->data = dev;
	entry->data = dev;
@@ -4513,6 +4528,8 @@ static int setup_proc_entry( struct net_device *dev,
	entry = create_proc_entry("Stats",
	entry = create_proc_entry("Stats",
				  S_IFREG | (S_IRUGO&proc_perm),
				  S_IFREG | (S_IRUGO&proc_perm),
				  apriv->proc_entry);
				  apriv->proc_entry);
	if (!entry)
		goto fail_stats;
	entry->uid = proc_uid;
	entry->uid = proc_uid;
	entry->gid = proc_gid;
	entry->gid = proc_gid;
	entry->data = dev;
	entry->data = dev;
@@ -4523,6 +4540,8 @@ static int setup_proc_entry( struct net_device *dev,
	entry = create_proc_entry("Status",
	entry = create_proc_entry("Status",
				  S_IFREG | (S_IRUGO&proc_perm),
				  S_IFREG | (S_IRUGO&proc_perm),
				  apriv->proc_entry);
				  apriv->proc_entry);
	if (!entry)
		goto fail_status;
	entry->uid = proc_uid;
	entry->uid = proc_uid;
	entry->gid = proc_gid;
	entry->gid = proc_gid;
	entry->data = dev;
	entry->data = dev;
@@ -4533,6 +4552,8 @@ static int setup_proc_entry( struct net_device *dev,
	entry = create_proc_entry("Config",
	entry = create_proc_entry("Config",
				  S_IFREG | proc_perm,
				  S_IFREG | proc_perm,
				  apriv->proc_entry);
				  apriv->proc_entry);
	if (!entry)
		goto fail_config;
	entry->uid = proc_uid;
	entry->uid = proc_uid;
	entry->gid = proc_gid;
	entry->gid = proc_gid;
	entry->data = dev;
	entry->data = dev;
@@ -4543,6 +4564,8 @@ static int setup_proc_entry( struct net_device *dev,
	entry = create_proc_entry("SSID",
	entry = create_proc_entry("SSID",
				  S_IFREG | proc_perm,
				  S_IFREG | proc_perm,
				  apriv->proc_entry);
				  apriv->proc_entry);
	if (!entry)
		goto fail_ssid;
	entry->uid = proc_uid;
	entry->uid = proc_uid;
	entry->gid = proc_gid;
	entry->gid = proc_gid;
	entry->data = dev;
	entry->data = dev;
@@ -4553,6 +4576,8 @@ static int setup_proc_entry( struct net_device *dev,
	entry = create_proc_entry("APList",
	entry = create_proc_entry("APList",
				  S_IFREG | proc_perm,
				  S_IFREG | proc_perm,
				  apriv->proc_entry);
				  apriv->proc_entry);
	if (!entry)
		goto fail_aplist;
	entry->uid = proc_uid;
	entry->uid = proc_uid;
	entry->gid = proc_gid;
	entry->gid = proc_gid;
	entry->data = dev;
	entry->data = dev;
@@ -4563,6 +4588,8 @@ static int setup_proc_entry( struct net_device *dev,
	entry = create_proc_entry("BSSList",
	entry = create_proc_entry("BSSList",
				  S_IFREG | proc_perm,
				  S_IFREG | proc_perm,
				  apriv->proc_entry);
				  apriv->proc_entry);
	if (!entry)
		goto fail_bsslist;
	entry->uid = proc_uid;
	entry->uid = proc_uid;
	entry->gid = proc_gid;
	entry->gid = proc_gid;
	entry->data = dev;
	entry->data = dev;
@@ -4573,6 +4600,8 @@ static int setup_proc_entry( struct net_device *dev,
	entry = create_proc_entry("WepKey",
	entry = create_proc_entry("WepKey",
				  S_IFREG | proc_perm,
				  S_IFREG | proc_perm,
				  apriv->proc_entry);
				  apriv->proc_entry);
	if (!entry)
		goto fail_wepkey;
	entry->uid = proc_uid;
	entry->uid = proc_uid;
	entry->gid = proc_gid;
	entry->gid = proc_gid;
	entry->data = dev;
	entry->data = dev;
@@ -4580,6 +4609,25 @@ static int setup_proc_entry( struct net_device *dev,
	SETPROC_OPS(entry, proc_wepkey_ops);
	SETPROC_OPS(entry, proc_wepkey_ops);


	return 0;
	return 0;

fail_wepkey:
	remove_proc_entry("BSSList", apriv->proc_entry);
fail_bsslist:
	remove_proc_entry("APList", apriv->proc_entry);
fail_aplist:
	remove_proc_entry("SSID", apriv->proc_entry);
fail_ssid:
	remove_proc_entry("Config", apriv->proc_entry);
fail_config:
	remove_proc_entry("Status", apriv->proc_entry);
fail_status:
	remove_proc_entry("Stats", apriv->proc_entry);
fail_stats:
	remove_proc_entry("StatsDelta", apriv->proc_entry);
fail_stats_delta:
	remove_proc_entry(apriv->proc_name, airo_entry);
fail:
	return -ENOMEM;
}
}


static int takedown_proc_entry( struct net_device *dev,
static int takedown_proc_entry( struct net_device *dev,
@@ -5924,7 +5972,6 @@ static int airo_get_essid(struct net_device *dev,


	/* Get the current SSID */
	/* Get the current SSID */
	memcpy(extra, status_rid.SSID, status_rid.SSIDlen);
	memcpy(extra, status_rid.SSID, status_rid.SSIDlen);
	extra[status_rid.SSIDlen] = '\0';
	/* If none, we may want to get the one that was set */
	/* If none, we may want to get the one that was set */


	/* Push it out ! */
	/* Push it out ! */
+0 −2
Original line number Original line Diff line number Diff line
@@ -1678,11 +1678,9 @@ static int atmel_get_essid(struct net_device *dev,
	/* Get the current SSID */
	/* Get the current SSID */
	if (priv->new_SSID_size != 0) {
	if (priv->new_SSID_size != 0) {
		memcpy(extra, priv->new_SSID, priv->new_SSID_size);
		memcpy(extra, priv->new_SSID, priv->new_SSID_size);
		extra[priv->new_SSID_size] = '\0';
		dwrq->length = priv->new_SSID_size;
		dwrq->length = priv->new_SSID_size;
	} else {
	} else {
		memcpy(extra, priv->SSID, priv->SSID_size);
		memcpy(extra, priv->SSID, priv->SSID_size);
		extra[priv->SSID_size] = '\0';
		dwrq->length = priv->SSID_size;
		dwrq->length = priv->SSID_size;
	}
	}


+23 −5
Original line number Original line Diff line number Diff line
@@ -705,11 +705,30 @@ int bcm43xx_dma_init(struct bcm43xx_private *bcm)
	struct bcm43xx_dmaring *ring;
	struct bcm43xx_dmaring *ring;
	int err = -ENOMEM;
	int err = -ENOMEM;
	int dma64 = 0;
	int dma64 = 0;
	u32 sbtmstatehi;
	u64 mask = bcm43xx_get_supported_dma_mask(bcm);
	int nobits;


	sbtmstatehi = bcm43xx_read32(bcm, BCM43xx_CIR_SBTMSTATEHIGH);
	if (mask == DMA_64BIT_MASK) {
	if (sbtmstatehi & BCM43xx_SBTMSTATEHIGH_DMA64BIT)
		dma64 = 1;
		dma64 = 1;
		nobits = 64;
	} else if (mask == DMA_32BIT_MASK)
		nobits = 32;
	else
		nobits = 30;
	err = pci_set_dma_mask(bcm->pci_dev, mask);
	err |= pci_set_consistent_dma_mask(bcm->pci_dev, mask);
	if (err) {
#ifdef CONFIG_BCM43XX_PIO
		printk(KERN_WARNING PFX "DMA not supported on this device."
					" Falling back to PIO.\n");
		bcm->__using_pio = 1;
		return -ENOSYS;
#else
		printk(KERN_ERR PFX "FATAL: DMA not supported and PIO not configured. "
				    "Please recompile the driver with PIO support.\n");
		return -ENODEV;
#endif /* CONFIG_BCM43XX_PIO */
	}


	/* setup TX DMA channels. */
	/* setup TX DMA channels. */
	ring = bcm43xx_setup_dmaring(bcm, 0, 1, dma64);
	ring = bcm43xx_setup_dmaring(bcm, 0, 1, dma64);
@@ -755,8 +774,7 @@ int bcm43xx_dma_init(struct bcm43xx_private *bcm)
		dma->rx_ring3 = ring;
		dma->rx_ring3 = ring;
	}
	}


	dprintk(KERN_INFO PFX "%s DMA initialized\n",
	dprintk(KERN_INFO PFX "%d-bit DMA initialized\n", nobits);
			dma64 ? "64-bit" : "32-bit");
	err = 0;
	err = 0;
out:
out:
	return err;
	return err;
+17 −0
Original line number Original line Diff line number Diff line
@@ -314,6 +314,23 @@ int bcm43xx_dma_tx(struct bcm43xx_private *bcm,
		   struct ieee80211_txb *txb);
		   struct ieee80211_txb *txb);
void bcm43xx_dma_rx(struct bcm43xx_dmaring *ring);
void bcm43xx_dma_rx(struct bcm43xx_dmaring *ring);


/* Helper function that returns the dma mask for this device. */
static inline
u64 bcm43xx_get_supported_dma_mask(struct bcm43xx_private *bcm)
{
	int dma64 = bcm43xx_read32(bcm, BCM43xx_CIR_SBTMSTATEHIGH) &
				   BCM43xx_SBTMSTATEHIGH_DMA64BIT;
	u16 mmio_base = bcm43xx_dmacontroller_base(dma64, 0);
	u32 mask = BCM43xx_DMA32_TXADDREXT_MASK;

	if (dma64)
		return DMA_64BIT_MASK;
	bcm43xx_write32(bcm, mmio_base + BCM43xx_DMA32_TXCTL, mask);
	if (bcm43xx_read32(bcm, mmio_base + BCM43xx_DMA32_TXCTL) & mask)
		return DMA_32BIT_MASK;
	return DMA_30BIT_MASK;
}

#else /* CONFIG_BCM43XX_DMA */
#else /* CONFIG_BCM43XX_DMA */




+1 −1
Original line number Original line Diff line number Diff line
@@ -242,7 +242,7 @@ void bcm43xx_leds_update(struct bcm43xx_private *bcm, int activity)
			//TODO
			//TODO
			break;
			break;
		case BCM43xx_LED_ASSOC:
		case BCM43xx_LED_ASSOC:
			if (bcm->softmac->associated)
			if (bcm->softmac->associnfo.associated)
				turn_on = 1;
				turn_on = 1;
			break;
			break;
#ifdef CONFIG_BCM43XX_DEBUG
#ifdef CONFIG_BCM43XX_DEBUG
Loading