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

Commit a8519de4 authored by David S. Miller's avatar David S. Miller
Browse files
parents 5c16807d 560ad81b
Loading
Loading
Loading
Loading
+13 −1
Original line number Original line Diff line number Diff line
@@ -3583,9 +3583,12 @@ M: "John W. Linville" <linville@tuxdriver.com>
L:	linux-wireless@vger.kernel.org
L:	linux-wireless@vger.kernel.org
T:	git git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-2.6.git
T:	git git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-2.6.git
S:	Maintained
S:	Maintained
F:	net/mac80211/
F:	net/rfkill/
F:	net/wireless/
F:	net/wireless/
F:	include/net/ieee80211*
F:	include/net/ieee80211*
F:	include/linux/wireless.h
F:	include/linux/wireless.h
F:	drivers/net/wireless/


NETWORKING DRIVERS
NETWORKING DRIVERS
L:	netdev@vger.kernel.org
L:	netdev@vger.kernel.org
@@ -5577,7 +5580,16 @@ L: linux-wireless@vger.kernel.org
W:	http://wireless.kernel.org
W:	http://wireless.kernel.org
T:	git git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-testing.git
T:	git git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-testing.git
S:	Maintained
S:	Maintained
F:	drivers/net/wireless/wl12xx/wl1251*
F:	drivers/net/wireless/wl12xx/*
X:	drivers/net/wireless/wl12xx/wl1271*

WL1271 WIRELESS DRIVER
M:	Luciano Coelho <luciano.coelho@nokia.com>
L:	linux-wireless@vger.kernel.org
W:	http://wireless.kernel.org
T:	git git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-testing.git
S:	Maintained
F:	drivers/net/wireless/wl12xx/wl1271*


WL3501 WIRELESS PCMCIA CARD DRIVER
WL3501 WIRELESS PCMCIA CARD DRIVER
M:	Arnaldo Carvalho de Melo <acme@ghostprotocols.net>
M:	Arnaldo Carvalho de Melo <acme@ghostprotocols.net>
+43 −1
Original line number Original line Diff line number Diff line
@@ -233,6 +233,11 @@ void usbnet_skb_return (struct usbnet *dev, struct sk_buff *skb)
{
{
	int	status;
	int	status;


	if (test_bit(EVENT_RX_PAUSED, &dev->flags)) {
		skb_queue_tail(&dev->rxq_pause, skb);
		return;
	}

	skb->protocol = eth_type_trans (skb, dev->net);
	skb->protocol = eth_type_trans (skb, dev->net);
	dev->net->stats.rx_packets++;
	dev->net->stats.rx_packets++;
	dev->net->stats.rx_bytes += skb->len;
	dev->net->stats.rx_bytes += skb->len;
@@ -525,6 +530,41 @@ static void intr_complete (struct urb *urb)
		deverr(dev, "intr resubmit --> %d", status);
		deverr(dev, "intr resubmit --> %d", status);
}
}


/*-------------------------------------------------------------------------*/
void usbnet_pause_rx(struct usbnet *dev)
{
	set_bit(EVENT_RX_PAUSED, &dev->flags);

	if (netif_msg_rx_status(dev))
		devdbg(dev, "paused rx queue enabled");
}
EXPORT_SYMBOL_GPL(usbnet_pause_rx);

void usbnet_resume_rx(struct usbnet *dev)
{
	struct sk_buff *skb;
	int num = 0;

	clear_bit(EVENT_RX_PAUSED, &dev->flags);

	while ((skb = skb_dequeue(&dev->rxq_pause)) != NULL) {
		usbnet_skb_return(dev, skb);
		num++;
	}

	tasklet_schedule(&dev->bh);

	if (netif_msg_rx_status(dev))
		devdbg(dev, "paused rx queue disabled, %d skbs requeued", num);
}
EXPORT_SYMBOL_GPL(usbnet_resume_rx);

void usbnet_purge_paused_rxq(struct usbnet *dev)
{
	skb_queue_purge(&dev->rxq_pause);
}
EXPORT_SYMBOL_GPL(usbnet_purge_paused_rxq);

/*-------------------------------------------------------------------------*/
/*-------------------------------------------------------------------------*/


// unlink pending rx/tx; completion handlers do all other cleanup
// unlink pending rx/tx; completion handlers do all other cleanup
@@ -623,6 +663,8 @@ int usbnet_stop (struct net_device *net)


	usb_kill_urb(dev->interrupt);
	usb_kill_urb(dev->interrupt);


	usbnet_purge_paused_rxq(dev);

	/* deferred work (task, timer, softirq) must also stop.
	/* deferred work (task, timer, softirq) must also stop.
	 * can't flush_scheduled_work() until we drop rtnl (later),
	 * can't flush_scheduled_work() until we drop rtnl (later),
	 * else workers could deadlock; so make workers a NOP.
	 * else workers could deadlock; so make workers a NOP.
@@ -1113,7 +1155,6 @@ static void usbnet_bh (unsigned long param)
}
}





/*-------------------------------------------------------------------------
/*-------------------------------------------------------------------------
 *
 *
 * USB Device Driver support
 * USB Device Driver support
@@ -1210,6 +1251,7 @@ usbnet_probe (struct usb_interface *udev, const struct usb_device_id *prod)
	skb_queue_head_init (&dev->rxq);
	skb_queue_head_init (&dev->rxq);
	skb_queue_head_init (&dev->txq);
	skb_queue_head_init (&dev->txq);
	skb_queue_head_init (&dev->done);
	skb_queue_head_init (&dev->done);
	skb_queue_head_init(&dev->rxq_pause);
	dev->bh.func = usbnet_bh;
	dev->bh.func = usbnet_bh;
	dev->bh.data = (unsigned long) dev;
	dev->bh.data = (unsigned long) dev;
	INIT_WORK (&dev->kevent, kevent);
	INIT_WORK (&dev->kevent, kevent);
+1 −3
Original line number Original line Diff line number Diff line
@@ -5,9 +5,7 @@ menuconfig ATH_COMMON
	---help---
	---help---
	  This will enable the support for the Atheros wireless drivers.
	  This will enable the support for the Atheros wireless drivers.
	  ath5k, ath9k and ar9170 drivers share some common code, this option
	  ath5k, ath9k and ar9170 drivers share some common code, this option
	  enables the common ath.ko module which currently shares just common
	  enables the common ath.ko module which shares common helpers.
	  regulatory EEPROM helpers but will likely be extended later to share
	  more between modules.


	  For more information and documentation on this module you can visit:
	  For more information and documentation on this module you can visit:


+30 −0
Original line number Original line Diff line number Diff line
/*
 * Copyright (c) 2008-2009 Atheros Communications Inc.
 *
 * Permission to use, copy, modify, and/or distribute this software for any
 * purpose with or without fee is hereby granted, provided that the above
 * copyright notice and this permission notice appear in all copies.
 *
 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 */

#ifndef ATH_H
#define ATH_H

#include <linux/skbuff.h>

struct ath_common {
	u16 cachelsz;
};

struct sk_buff *ath_rxbuf_alloc(struct ath_common *common,
				u32 len,
				gfp_t gfp_mask);

#endif /* ATH_H */
+17 −0
Original line number Original line Diff line number Diff line
@@ -919,6 +919,12 @@ enum ath5k_int {
	AR5K_INT_NOCARD	= 0xffffffff
	AR5K_INT_NOCARD	= 0xffffffff
};
};


/* Software interrupts used for calibration */
enum ath5k_software_interrupt {
	AR5K_SWI_FULL_CALIBRATION = 0x01,
	AR5K_SWI_SHORT_CALIBRATION = 0x02,
};

/*
/*
 * Power management
 * Power management
 */
 */
@@ -1123,6 +1129,15 @@ struct ath5k_hw {
	/* noise floor from last periodic calibration */
	/* noise floor from last periodic calibration */
	s32			ah_noise_floor;
	s32			ah_noise_floor;


	/* Calibration timestamp */
	unsigned long		ah_cal_tstamp;

	/* Calibration interval (secs) */
	u8			ah_cal_intval;

	/* Software interrupt mask */
	u8			ah_swi_mask;

	/*
	/*
	 * Function pointers
	 * Function pointers
	 */
	 */
@@ -1157,6 +1172,7 @@ extern void ath5k_unregister_leds(struct ath5k_softc *sc);


/* Reset Functions */
/* Reset Functions */
extern int ath5k_hw_nic_wakeup(struct ath5k_hw *ah, int flags, bool initial);
extern int ath5k_hw_nic_wakeup(struct ath5k_hw *ah, int flags, bool initial);
extern int ath5k_hw_on_hold(struct ath5k_hw *ah);
extern int ath5k_hw_reset(struct ath5k_hw *ah, enum nl80211_iftype op_mode, struct ieee80211_channel *channel, bool change_channel);
extern int ath5k_hw_reset(struct ath5k_hw *ah, enum nl80211_iftype op_mode, struct ieee80211_channel *channel, bool change_channel);
/* Power management functions */
/* Power management functions */
extern int ath5k_hw_set_power(struct ath5k_hw *ah, enum ath5k_power_mode mode, bool set_chip, u16 sleep_duration);
extern int ath5k_hw_set_power(struct ath5k_hw *ah, enum ath5k_power_mode mode, bool set_chip, u16 sleep_duration);
@@ -1275,6 +1291,7 @@ extern int ath5k_hw_channel(struct ath5k_hw *ah, struct ieee80211_channel *chann
/* PHY calibration */
/* PHY calibration */
extern int ath5k_hw_phy_calibrate(struct ath5k_hw *ah, struct ieee80211_channel *channel);
extern int ath5k_hw_phy_calibrate(struct ath5k_hw *ah, struct ieee80211_channel *channel);
extern int ath5k_hw_noise_floor_calibration(struct ath5k_hw *ah, short freq);
extern int ath5k_hw_noise_floor_calibration(struct ath5k_hw *ah, short freq);
extern void ath5k_hw_calibration_poll(struct ath5k_hw *ah);
/* Spur mitigation */
/* Spur mitigation */
bool ath5k_hw_chan_has_spur_noise(struct ath5k_hw *ah,
bool ath5k_hw_chan_has_spur_noise(struct ath5k_hw *ah,
				struct ieee80211_channel *channel);
				struct ieee80211_channel *channel);
Loading