Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 203887
b: refs/heads/master
c: 800f65b
h: refs/heads/master
i:
  203885: ff1d74b
  203883: f678d37
  203879: 103dd90
  203871: cf91b8d
v: v3
  • Loading branch information
John W. Linville committed Jul 27, 2010
1 parent 7689a73 commit c36bfc8
Show file tree
Hide file tree
Showing 95 changed files with 2,458 additions and 4,638 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: b3190df628617c7a4f188a9465aeabe1f5761933
refs/heads/master: 800f65bba8d2030b3fef62850e203f9f176625a8
18 changes: 4 additions & 14 deletions trunk/MAINTAINERS
Original file line number Diff line number Diff line change
Expand Up @@ -4522,7 +4522,7 @@ PRISM54 WIRELESS DRIVER
M: "Luis R. Rodriguez" <mcgrof@gmail.com>
L: linux-wireless@vger.kernel.org
W: http://prism54.org
S: Maintained
S: Obsolete
F: drivers/net/wireless/prism54/

PROMISE DC4030 CACHING DISK CONTROLLER DRIVER
Expand Down Expand Up @@ -4712,9 +4712,8 @@ S: Maintained
F: drivers/rapidio/

RAYLINK/WEBGEAR 802.11 WIRELESS LAN DRIVER
M: Corey Thomas <coreythomas@charter.net>
L: linux-wireless@vger.kernel.org
S: Maintained
S: Orphan
F: drivers/net/wireless/ray*

RCUTORTURE MODULE
Expand Down Expand Up @@ -6037,10 +6036,9 @@ F: Documentation/video4linux/zc0301.txt
F: drivers/media/video/zc0301/

USB ZD1201 DRIVER
M: Jeroen Vreeken <pe1rxq@amsat.org>
L: linux-usb@vger.kernel.org
L: linux-wireless@vger.kernel.org
W: http://linux-lc100020.sourceforge.net
S: Maintained
S: Orphan
F: drivers/net/wireless/zd1201.*

USB ZR364XX DRIVER
Expand Down Expand Up @@ -6226,14 +6224,6 @@ F: Documentation/watchdog/
F: drivers/watchdog/
F: include/linux/watchdog.h

WAVELAN NETWORK DRIVER & WIRELESS EXTENSIONS
M: Jean Tourrilhes <jt@hpl.hp.com>
L: linux-wireless@vger.kernel.org
W: http://www.hpl.hp.com/personal/Jean_Tourrilhes/Linux/
S: Maintained
F: Documentation/networking/wavelan.txt
F: drivers/staging/wavelan/

WD7000 SCSI DRIVER
M: Miroslav Zagorac <zaga@fly.cc.fer.hr>
L: linux-scsi@vger.kernel.org
Expand Down
24 changes: 12 additions & 12 deletions trunk/drivers/net/wireless/airo.c
Original file line number Diff line number Diff line change
Expand Up @@ -2931,8 +2931,8 @@ static struct net_device *_init_airo_card( unsigned short irq, int port,
release_region( dev->base_addr, 64 );
err_out_nets:
airo_networks_free(ai);
del_airo_dev(ai);
err_out_free:
del_airo_dev(ai);
free_netdev(dev);
return NULL;
}
Expand Down Expand Up @@ -4657,7 +4657,7 @@ static ssize_t proc_write( struct file *file,
loff_t *offset )
{
loff_t pos = *offset;
struct proc_data *priv = (struct proc_data*)file->private_data;
struct proc_data *priv = file->private_data;

if (!priv->wbuffer)
return -EINVAL;
Expand Down Expand Up @@ -4689,7 +4689,7 @@ static int proc_status_open(struct inode *inode, struct file *file)

if ((file->private_data = kzalloc(sizeof(struct proc_data ), GFP_KERNEL)) == NULL)
return -ENOMEM;
data = (struct proc_data *)file->private_data;
data = file->private_data;
if ((data->rbuffer = kmalloc( 2048, GFP_KERNEL )) == NULL) {
kfree (file->private_data);
return -ENOMEM;
Expand Down Expand Up @@ -4772,7 +4772,7 @@ static int proc_stats_rid_open( struct inode *inode,

if ((file->private_data = kzalloc(sizeof(struct proc_data ), GFP_KERNEL)) == NULL)
return -ENOMEM;
data = (struct proc_data *)file->private_data;
data = file->private_data;
if ((data->rbuffer = kmalloc( 4096, GFP_KERNEL )) == NULL) {
kfree (file->private_data);
return -ENOMEM;
Expand Down Expand Up @@ -5045,7 +5045,7 @@ static int proc_config_open(struct inode *inode, struct file *file)

if ((file->private_data = kzalloc(sizeof(struct proc_data ), GFP_KERNEL)) == NULL)
return -ENOMEM;
data = (struct proc_data *)file->private_data;
data = file->private_data;
if ((data->rbuffer = kmalloc( 2048, GFP_KERNEL )) == NULL) {
kfree (file->private_data);
return -ENOMEM;
Expand Down Expand Up @@ -5127,7 +5127,7 @@ static int proc_config_open(struct inode *inode, struct file *file)

static void proc_SSID_on_close(struct inode *inode, struct file *file)
{
struct proc_data *data = (struct proc_data *)file->private_data;
struct proc_data *data = file->private_data;
struct proc_dir_entry *dp = PDE(inode);
struct net_device *dev = dp->data;
struct airo_info *ai = dev->ml_priv;
Expand Down Expand Up @@ -5163,7 +5163,7 @@ static void proc_SSID_on_close(struct inode *inode, struct file *file)
}

static void proc_APList_on_close( struct inode *inode, struct file *file ) {
struct proc_data *data = (struct proc_data *)file->private_data;
struct proc_data *data = file->private_data;
struct proc_dir_entry *dp = PDE(inode);
struct net_device *dev = dp->data;
struct airo_info *ai = dev->ml_priv;
Expand Down Expand Up @@ -5309,7 +5309,7 @@ static void proc_wepkey_on_close( struct inode *inode, struct file *file ) {

memset(key, 0, sizeof(key));

data = (struct proc_data *)file->private_data;
data = file->private_data;
if ( !data->writelen ) return;

if (data->wbuffer[0] >= '0' && data->wbuffer[0] <= '3' &&
Expand Down Expand Up @@ -5363,7 +5363,7 @@ static int proc_wepkey_open( struct inode *inode, struct file *file )
if ((file->private_data = kzalloc(sizeof(struct proc_data ), GFP_KERNEL)) == NULL)
return -ENOMEM;
memset(&wkr, 0, sizeof(wkr));
data = (struct proc_data *)file->private_data;
data = file->private_data;
if ((data->rbuffer = kzalloc( 180, GFP_KERNEL )) == NULL) {
kfree (file->private_data);
return -ENOMEM;
Expand Down Expand Up @@ -5409,7 +5409,7 @@ static int proc_SSID_open(struct inode *inode, struct file *file)

if ((file->private_data = kzalloc(sizeof(struct proc_data ), GFP_KERNEL)) == NULL)
return -ENOMEM;
data = (struct proc_data *)file->private_data;
data = file->private_data;
if ((data->rbuffer = kmalloc( 104, GFP_KERNEL )) == NULL) {
kfree (file->private_data);
return -ENOMEM;
Expand Down Expand Up @@ -5453,7 +5453,7 @@ static int proc_APList_open( struct inode *inode, struct file *file ) {

if ((file->private_data = kzalloc(sizeof(struct proc_data ), GFP_KERNEL)) == NULL)
return -ENOMEM;
data = (struct proc_data *)file->private_data;
data = file->private_data;
if ((data->rbuffer = kmalloc( 104, GFP_KERNEL )) == NULL) {
kfree (file->private_data);
return -ENOMEM;
Expand Down Expand Up @@ -5495,7 +5495,7 @@ static int proc_BSSList_open( struct inode *inode, struct file *file ) {

if ((file->private_data = kzalloc(sizeof(struct proc_data ), GFP_KERNEL)) == NULL)
return -ENOMEM;
data = (struct proc_data *)file->private_data;
data = file->private_data;
if ((data->rbuffer = kmalloc( 1024, GFP_KERNEL )) == NULL) {
kfree (file->private_data);
return -ENOMEM;
Expand Down
65 changes: 37 additions & 28 deletions trunk/drivers/net/wireless/ath/ath5k/base.c
Original file line number Diff line number Diff line change
Expand Up @@ -388,7 +388,7 @@ static int ath5k_init(struct ath5k_softc *sc);
static int ath5k_stop_locked(struct ath5k_softc *sc);
static int ath5k_stop_hw(struct ath5k_softc *sc);
static irqreturn_t ath5k_intr(int irq, void *dev_id);
static void ath5k_tasklet_reset(unsigned long data);
static void ath5k_reset_work(struct work_struct *work);

static void ath5k_tasklet_calibrate(unsigned long data);

Expand Down Expand Up @@ -831,11 +831,12 @@ ath5k_attach(struct pci_dev *pdev, struct ieee80211_hw *hw)

tasklet_init(&sc->rxtq, ath5k_tasklet_rx, (unsigned long)sc);
tasklet_init(&sc->txtq, ath5k_tasklet_tx, (unsigned long)sc);
tasklet_init(&sc->restq, ath5k_tasklet_reset, (unsigned long)sc);
tasklet_init(&sc->calib, ath5k_tasklet_calibrate, (unsigned long)sc);
tasklet_init(&sc->beacontq, ath5k_tasklet_beacon, (unsigned long)sc);
tasklet_init(&sc->ani_tasklet, ath5k_tasklet_ani, (unsigned long)sc);

INIT_WORK(&sc->reset_work, ath5k_reset_work);

ret = ath5k_eeprom_read_mac(ah, mac);
if (ret) {
ATH5K_ERR(sc, "unable to read address from EEPROM: 0x%04x\n",
Expand Down Expand Up @@ -1727,8 +1728,6 @@ ath5k_rx_stop(struct ath5k_softc *sc)
ath5k_hw_stop_rx_dma(ah); /* disable DMA engine */

ath5k_debug_printrxbuffs(sc, ah);

sc->rxlink = NULL; /* just in case */
}

static unsigned int
Expand Down Expand Up @@ -2294,8 +2293,8 @@ ath5k_beacon_setup(struct ath5k_softc *sc, struct ath5k_buf *bf)
* frame contents are done as needed and the slot time is
* also adjusted based on current state.
*
* This is called from software irq context (beacontq or restq
* tasklets) or user context from ath5k_beacon_config.
* This is called from software irq context (beacontq tasklets)
* or user context from ath5k_beacon_config.
*/
static void
ath5k_beacon_send(struct ath5k_softc *sc)
Expand Down Expand Up @@ -2328,7 +2327,7 @@ ath5k_beacon_send(struct ath5k_softc *sc)
sc->bmisscount);
ATH5K_DBG(sc, ATH5K_DEBUG_RESET,
"stuck beacon, resetting\n");
tasklet_schedule(&sc->restq);
ieee80211_queue_work(sc->hw, &sc->reset_work);
}
return;
}
Expand Down Expand Up @@ -2632,12 +2631,20 @@ ath5k_stop_locked(struct ath5k_softc *sc)
if (!test_bit(ATH_STAT_INVALID, sc->status)) {
ath5k_rx_stop(sc);
ath5k_hw_phy_disable(ah);
} else
sc->rxlink = NULL;
}

return 0;
}

static void stop_tasklets(struct ath5k_softc *sc)
{
tasklet_kill(&sc->rxtq);
tasklet_kill(&sc->txtq);
tasklet_kill(&sc->calib);
tasklet_kill(&sc->beacontq);
tasklet_kill(&sc->ani_tasklet);
}

/*
* Stop the device, grabbing the top-level lock to protect
* against concurrent entry through ath5k_init (which can happen
Expand Down Expand Up @@ -2682,12 +2689,7 @@ ath5k_stop_hw(struct ath5k_softc *sc)
mmiowb();
mutex_unlock(&sc->lock);

tasklet_kill(&sc->rxtq);
tasklet_kill(&sc->txtq);
tasklet_kill(&sc->restq);
tasklet_kill(&sc->calib);
tasklet_kill(&sc->beacontq);
tasklet_kill(&sc->ani_tasklet);
stop_tasklets(sc);

ath5k_rfkill_hw_stop(sc->ah);

Expand Down Expand Up @@ -2737,7 +2739,7 @@ ath5k_intr(int irq, void *dev_id)
*/
ATH5K_DBG(sc, ATH5K_DEBUG_RESET,
"fatal int, resetting\n");
tasklet_schedule(&sc->restq);
ieee80211_queue_work(sc->hw, &sc->reset_work);
} else if (unlikely(status & AR5K_INT_RXORN)) {
/*
* Receive buffers are full. Either the bus is busy or
Expand All @@ -2752,7 +2754,7 @@ ath5k_intr(int irq, void *dev_id)
if (ah->ah_mac_srev < AR5K_SREV_AR5212) {
ATH5K_DBG(sc, ATH5K_DEBUG_RESET,
"rx overrun, resetting\n");
tasklet_schedule(&sc->restq);
ieee80211_queue_work(sc->hw, &sc->reset_work);
}
else
tasklet_schedule(&sc->rxtq);
Expand All @@ -2766,7 +2768,7 @@ ath5k_intr(int irq, void *dev_id)
* RXE bit is written, but it doesn't work at
* least on older hardware revs.
*/
sc->rxlink = NULL;
sc->stats.rxeol_intr++;
}
if (status & AR5K_INT_TXURN) {
/* bump tx trigger level */
Expand Down Expand Up @@ -2799,14 +2801,6 @@ ath5k_intr(int irq, void *dev_id)
return IRQ_HANDLED;
}

static void
ath5k_tasklet_reset(unsigned long data)
{
struct ath5k_softc *sc = (void *)data;

ath5k_reset(sc, sc->curchan);
}

/*
* Periodically recalibrate the PHY to account
* for temperature/environment changes.
Expand All @@ -2830,7 +2824,7 @@ ath5k_tasklet_calibrate(unsigned long data)
* to load new gain values.
*/
ATH5K_DBG(sc, ATH5K_DEBUG_RESET, "calibration, resetting\n");
ath5k_reset(sc, sc->curchan);
ieee80211_queue_work(sc->hw, &sc->reset_work);
}
if (ath5k_hw_phy_calibrate(ah, sc->curchan))
ATH5K_ERR(sc, "calibration of channel %u failed\n",
Expand Down Expand Up @@ -2934,6 +2928,8 @@ static int ath5k_tx_queue(struct ieee80211_hw *hw, struct sk_buff *skb,
/*
* Reset the hardware. If chan is not NULL, then also pause rx/tx
* and change to the given channel.
*
* This should be called with sc->lock.
*/
static int
ath5k_reset(struct ath5k_softc *sc, struct ieee80211_channel *chan)
Expand All @@ -2943,8 +2939,11 @@ ath5k_reset(struct ath5k_softc *sc, struct ieee80211_channel *chan)

ATH5K_DBG(sc, ATH5K_DEBUG_RESET, "resetting\n");

ath5k_hw_set_imr(ah, 0);
synchronize_irq(sc->pdev->irq);
stop_tasklets(sc);

if (chan) {
ath5k_hw_set_imr(ah, 0);
ath5k_txq_cleanup(sc);
ath5k_rx_stop(sc);

Expand Down Expand Up @@ -2990,6 +2989,16 @@ ath5k_reset(struct ath5k_softc *sc, struct ieee80211_channel *chan)
return ret;
}

static void ath5k_reset_work(struct work_struct *work)
{
struct ath5k_softc *sc = container_of(work, struct ath5k_softc,
reset_work);

mutex_lock(&sc->lock);
ath5k_reset(sc, sc->curchan);
mutex_unlock(&sc->lock);
}

static int ath5k_start(struct ieee80211_hw *hw)
{
return ath5k_init(hw->priv);
Expand Down
4 changes: 3 additions & 1 deletion trunk/drivers/net/wireless/ath/ath5k/base.h
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@
#include <linux/if_ether.h>
#include <linux/leds.h>
#include <linux/rfkill.h>
#include <linux/workqueue.h>

#include "ath5k.h"
#include "debug.h"
Expand Down Expand Up @@ -136,6 +137,7 @@ struct ath5k_statistics {

unsigned int mib_intr;
unsigned int rxorn_intr;
unsigned int rxeol_intr;
};

#if CHAN_DEBUG
Expand Down Expand Up @@ -189,7 +191,7 @@ struct ath5k_softc {
unsigned int led_pin, /* GPIO pin for driving LED */
led_on; /* pin setting for LED on */

struct tasklet_struct restq; /* reset tasklet */
struct work_struct reset_work; /* deferred chip reset */

unsigned int rxbufsize; /* rx size based on mtu */
struct list_head rxbuf; /* receive buffer */
Expand Down
Loading

0 comments on commit c36bfc8

Please sign in to comment.