Loading drivers/net/wireless/airo.c +12 −12 Original line number Diff line number Diff line Loading @@ -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; } Loading Loading @@ -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; Loading Loading @@ -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; Loading Loading @@ -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; Loading Loading @@ -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; Loading Loading @@ -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; Loading Loading @@ -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; Loading Loading @@ -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' && Loading Loading @@ -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; Loading Loading @@ -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; Loading Loading @@ -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; Loading Loading @@ -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; Loading drivers/net/wireless/ath/ath5k/base.c +37 −28 Original line number Diff line number Diff line Loading @@ -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); Loading Loading @@ -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", Loading Loading @@ -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 Loading Loading @@ -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) Loading Loading @@ -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; } Loading Loading @@ -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 Loading Loading @@ -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); Loading Loading @@ -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 Loading @@ -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); Loading @@ -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 */ Loading Loading @@ -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. Loading @@ -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", Loading Loading @@ -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) Loading @@ -2943,8 +2939,11 @@ ath5k_reset(struct ath5k_softc *sc, struct ieee80211_channel *chan) ATH5K_DBG(sc, ATH5K_DEBUG_RESET, "resetting\n"); if (chan) { ath5k_hw_set_imr(ah, 0); synchronize_irq(sc->pdev->irq); stop_tasklets(sc); if (chan) { ath5k_txq_cleanup(sc); ath5k_rx_stop(sc); Loading Loading @@ -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); Loading drivers/net/wireless/ath/ath5k/base.h +3 −1 Original line number Diff line number Diff line Loading @@ -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" Loading Loading @@ -136,6 +137,7 @@ struct ath5k_statistics { unsigned int mib_intr; unsigned int rxorn_intr; unsigned int rxeol_intr; }; #if CHAN_DEBUG Loading Loading @@ -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 */ Loading drivers/net/wireless/ath/ath5k/debug.c +1 −1 Original line number Diff line number Diff line Loading @@ -279,7 +279,7 @@ static ssize_t write_file_reset(struct file *file, { struct ath5k_softc *sc = file->private_data; ATH5K_DBG(sc, ATH5K_DEBUG_RESET, "debug file triggered reset\n"); tasklet_schedule(&sc->restq); ieee80211_queue_work(sc->hw, &sc->reset_work); return count; } Loading drivers/net/wireless/ath/ath9k/ar9002_hw.c +0 −66 Original line number Diff line number Diff line Loading @@ -85,21 +85,6 @@ static void ar9002_hw_init_mode_regs(struct ath_hw *ah) ar9287PciePhy_clkreq_always_on_L1_9287_1_1, ARRAY_SIZE(ar9287PciePhy_clkreq_always_on_L1_9287_1_1), 2); } else if (AR_SREV_9287_10_OR_LATER(ah)) { INIT_INI_ARRAY(&ah->iniModes, ar9287Modes_9287_1_0, ARRAY_SIZE(ar9287Modes_9287_1_0), 6); INIT_INI_ARRAY(&ah->iniCommon, ar9287Common_9287_1_0, ARRAY_SIZE(ar9287Common_9287_1_0), 2); if (ah->config.pcie_clock_req) INIT_INI_ARRAY(&ah->iniPcieSerdes, ar9287PciePhy_clkreq_off_L1_9287_1_0, ARRAY_SIZE(ar9287PciePhy_clkreq_off_L1_9287_1_0), 2); else INIT_INI_ARRAY(&ah->iniPcieSerdes, ar9287PciePhy_clkreq_always_on_L1_9287_1_0, ARRAY_SIZE(ar9287PciePhy_clkreq_always_on_L1_9287_1_0), 2); } else if (AR_SREV_9285_12_OR_LATER(ah)) { Loading @@ -118,21 +103,6 @@ static void ar9002_hw_init_mode_regs(struct ath_hw *ah) ARRAY_SIZE(ar9285PciePhy_clkreq_always_on_L1_9285_1_2), 2); } } else if (AR_SREV_9285_10_OR_LATER(ah)) { INIT_INI_ARRAY(&ah->iniModes, ar9285Modes_9285, ARRAY_SIZE(ar9285Modes_9285), 6); INIT_INI_ARRAY(&ah->iniCommon, ar9285Common_9285, ARRAY_SIZE(ar9285Common_9285), 2); if (ah->config.pcie_clock_req) { INIT_INI_ARRAY(&ah->iniPcieSerdes, ar9285PciePhy_clkreq_off_L1_9285, ARRAY_SIZE(ar9285PciePhy_clkreq_off_L1_9285), 2); } else { INIT_INI_ARRAY(&ah->iniPcieSerdes, ar9285PciePhy_clkreq_always_on_L1_9285, ARRAY_SIZE(ar9285PciePhy_clkreq_always_on_L1_9285), 2); } } else if (AR_SREV_9280_20_OR_LATER(ah)) { INIT_INI_ARRAY(&ah->iniModes, ar9280Modes_9280_2, ARRAY_SIZE(ar9280Modes_9280_2), 6); Loading @@ -151,11 +121,6 @@ static void ar9002_hw_init_mode_regs(struct ath_hw *ah) INIT_INI_ARRAY(&ah->iniModesAdditional, ar9280Modes_fast_clock_9280_2, ARRAY_SIZE(ar9280Modes_fast_clock_9280_2), 3); } else if (AR_SREV_9280_10_OR_LATER(ah)) { INIT_INI_ARRAY(&ah->iniModes, ar9280Modes_9280, ARRAY_SIZE(ar9280Modes_9280), 6); INIT_INI_ARRAY(&ah->iniCommon, ar9280Common_9280, ARRAY_SIZE(ar9280Common_9280), 2); } else if (AR_SREV_9160_10_OR_LATER(ah)) { INIT_INI_ARRAY(&ah->iniModes, ar5416Modes_9160, ARRAY_SIZE(ar5416Modes_9160), 6); Loading Loading @@ -305,10 +270,6 @@ static void ar9002_hw_init_mode_gain_regs(struct ath_hw *ah) INIT_INI_ARRAY(&ah->iniModesRxGain, ar9287Modes_rx_gain_9287_1_1, ARRAY_SIZE(ar9287Modes_rx_gain_9287_1_1), 6); else if (AR_SREV_9287_10(ah)) INIT_INI_ARRAY(&ah->iniModesRxGain, ar9287Modes_rx_gain_9287_1_0, ARRAY_SIZE(ar9287Modes_rx_gain_9287_1_0), 6); else if (AR_SREV_9280_20(ah)) ar9280_20_hw_init_rxgain_ini(ah); Loading @@ -316,10 +277,6 @@ static void ar9002_hw_init_mode_gain_regs(struct ath_hw *ah) INIT_INI_ARRAY(&ah->iniModesTxGain, ar9287Modes_tx_gain_9287_1_1, ARRAY_SIZE(ar9287Modes_tx_gain_9287_1_1), 6); } else if (AR_SREV_9287_10(ah)) { INIT_INI_ARRAY(&ah->iniModesTxGain, ar9287Modes_tx_gain_9287_1_0, ARRAY_SIZE(ar9287Modes_tx_gain_9287_1_0), 6); } else if (AR_SREV_9280_20(ah)) { ar9280_20_hw_init_txgain_ini(ah); } else if (AR_SREV_9285_12_OR_LATER(ah)) { Loading Loading @@ -389,29 +346,6 @@ static void ar9002_hw_configpcipowersave(struct ath_hw *ah, REG_WRITE(ah, INI_RA(&ah->iniPcieSerdes, i, 0), INI_RA(&ah->iniPcieSerdes, i, 1)); } } else if (AR_SREV_9280(ah) && (ah->hw_version.macRev == AR_SREV_REVISION_9280_10)) { REG_WRITE(ah, AR_PCIE_SERDES, 0x9248fd00); REG_WRITE(ah, AR_PCIE_SERDES, 0x24924924); /* RX shut off when elecidle is asserted */ REG_WRITE(ah, AR_PCIE_SERDES, 0xa8000019); REG_WRITE(ah, AR_PCIE_SERDES, 0x13160820); REG_WRITE(ah, AR_PCIE_SERDES, 0xe5980560); /* Shut off CLKREQ active in L1 */ if (ah->config.pcie_clock_req) REG_WRITE(ah, AR_PCIE_SERDES, 0x401deffc); else REG_WRITE(ah, AR_PCIE_SERDES, 0x401deffd); REG_WRITE(ah, AR_PCIE_SERDES, 0x1aaabe40); REG_WRITE(ah, AR_PCIE_SERDES, 0xbe105554); REG_WRITE(ah, AR_PCIE_SERDES, 0x00043007); /* Load the new settings */ REG_WRITE(ah, AR_PCIE_SERDES2, 0x00000000); } else { ENABLE_REGWRITE_BUFFER(ah); Loading Loading
drivers/net/wireless/airo.c +12 −12 Original line number Diff line number Diff line Loading @@ -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; } Loading Loading @@ -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; Loading Loading @@ -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; Loading Loading @@ -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; Loading Loading @@ -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; Loading Loading @@ -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; Loading Loading @@ -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; Loading Loading @@ -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' && Loading Loading @@ -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; Loading Loading @@ -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; Loading Loading @@ -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; Loading Loading @@ -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; Loading
drivers/net/wireless/ath/ath5k/base.c +37 −28 Original line number Diff line number Diff line Loading @@ -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); Loading Loading @@ -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", Loading Loading @@ -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 Loading Loading @@ -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) Loading Loading @@ -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; } Loading Loading @@ -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 Loading Loading @@ -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); Loading Loading @@ -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 Loading @@ -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); Loading @@ -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 */ Loading Loading @@ -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. Loading @@ -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", Loading Loading @@ -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) Loading @@ -2943,8 +2939,11 @@ ath5k_reset(struct ath5k_softc *sc, struct ieee80211_channel *chan) ATH5K_DBG(sc, ATH5K_DEBUG_RESET, "resetting\n"); if (chan) { ath5k_hw_set_imr(ah, 0); synchronize_irq(sc->pdev->irq); stop_tasklets(sc); if (chan) { ath5k_txq_cleanup(sc); ath5k_rx_stop(sc); Loading Loading @@ -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); Loading
drivers/net/wireless/ath/ath5k/base.h +3 −1 Original line number Diff line number Diff line Loading @@ -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" Loading Loading @@ -136,6 +137,7 @@ struct ath5k_statistics { unsigned int mib_intr; unsigned int rxorn_intr; unsigned int rxeol_intr; }; #if CHAN_DEBUG Loading Loading @@ -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 */ Loading
drivers/net/wireless/ath/ath5k/debug.c +1 −1 Original line number Diff line number Diff line Loading @@ -279,7 +279,7 @@ static ssize_t write_file_reset(struct file *file, { struct ath5k_softc *sc = file->private_data; ATH5K_DBG(sc, ATH5K_DEBUG_RESET, "debug file triggered reset\n"); tasklet_schedule(&sc->restq); ieee80211_queue_work(sc->hw, &sc->reset_work); return count; } Loading
drivers/net/wireless/ath/ath9k/ar9002_hw.c +0 −66 Original line number Diff line number Diff line Loading @@ -85,21 +85,6 @@ static void ar9002_hw_init_mode_regs(struct ath_hw *ah) ar9287PciePhy_clkreq_always_on_L1_9287_1_1, ARRAY_SIZE(ar9287PciePhy_clkreq_always_on_L1_9287_1_1), 2); } else if (AR_SREV_9287_10_OR_LATER(ah)) { INIT_INI_ARRAY(&ah->iniModes, ar9287Modes_9287_1_0, ARRAY_SIZE(ar9287Modes_9287_1_0), 6); INIT_INI_ARRAY(&ah->iniCommon, ar9287Common_9287_1_0, ARRAY_SIZE(ar9287Common_9287_1_0), 2); if (ah->config.pcie_clock_req) INIT_INI_ARRAY(&ah->iniPcieSerdes, ar9287PciePhy_clkreq_off_L1_9287_1_0, ARRAY_SIZE(ar9287PciePhy_clkreq_off_L1_9287_1_0), 2); else INIT_INI_ARRAY(&ah->iniPcieSerdes, ar9287PciePhy_clkreq_always_on_L1_9287_1_0, ARRAY_SIZE(ar9287PciePhy_clkreq_always_on_L1_9287_1_0), 2); } else if (AR_SREV_9285_12_OR_LATER(ah)) { Loading @@ -118,21 +103,6 @@ static void ar9002_hw_init_mode_regs(struct ath_hw *ah) ARRAY_SIZE(ar9285PciePhy_clkreq_always_on_L1_9285_1_2), 2); } } else if (AR_SREV_9285_10_OR_LATER(ah)) { INIT_INI_ARRAY(&ah->iniModes, ar9285Modes_9285, ARRAY_SIZE(ar9285Modes_9285), 6); INIT_INI_ARRAY(&ah->iniCommon, ar9285Common_9285, ARRAY_SIZE(ar9285Common_9285), 2); if (ah->config.pcie_clock_req) { INIT_INI_ARRAY(&ah->iniPcieSerdes, ar9285PciePhy_clkreq_off_L1_9285, ARRAY_SIZE(ar9285PciePhy_clkreq_off_L1_9285), 2); } else { INIT_INI_ARRAY(&ah->iniPcieSerdes, ar9285PciePhy_clkreq_always_on_L1_9285, ARRAY_SIZE(ar9285PciePhy_clkreq_always_on_L1_9285), 2); } } else if (AR_SREV_9280_20_OR_LATER(ah)) { INIT_INI_ARRAY(&ah->iniModes, ar9280Modes_9280_2, ARRAY_SIZE(ar9280Modes_9280_2), 6); Loading @@ -151,11 +121,6 @@ static void ar9002_hw_init_mode_regs(struct ath_hw *ah) INIT_INI_ARRAY(&ah->iniModesAdditional, ar9280Modes_fast_clock_9280_2, ARRAY_SIZE(ar9280Modes_fast_clock_9280_2), 3); } else if (AR_SREV_9280_10_OR_LATER(ah)) { INIT_INI_ARRAY(&ah->iniModes, ar9280Modes_9280, ARRAY_SIZE(ar9280Modes_9280), 6); INIT_INI_ARRAY(&ah->iniCommon, ar9280Common_9280, ARRAY_SIZE(ar9280Common_9280), 2); } else if (AR_SREV_9160_10_OR_LATER(ah)) { INIT_INI_ARRAY(&ah->iniModes, ar5416Modes_9160, ARRAY_SIZE(ar5416Modes_9160), 6); Loading Loading @@ -305,10 +270,6 @@ static void ar9002_hw_init_mode_gain_regs(struct ath_hw *ah) INIT_INI_ARRAY(&ah->iniModesRxGain, ar9287Modes_rx_gain_9287_1_1, ARRAY_SIZE(ar9287Modes_rx_gain_9287_1_1), 6); else if (AR_SREV_9287_10(ah)) INIT_INI_ARRAY(&ah->iniModesRxGain, ar9287Modes_rx_gain_9287_1_0, ARRAY_SIZE(ar9287Modes_rx_gain_9287_1_0), 6); else if (AR_SREV_9280_20(ah)) ar9280_20_hw_init_rxgain_ini(ah); Loading @@ -316,10 +277,6 @@ static void ar9002_hw_init_mode_gain_regs(struct ath_hw *ah) INIT_INI_ARRAY(&ah->iniModesTxGain, ar9287Modes_tx_gain_9287_1_1, ARRAY_SIZE(ar9287Modes_tx_gain_9287_1_1), 6); } else if (AR_SREV_9287_10(ah)) { INIT_INI_ARRAY(&ah->iniModesTxGain, ar9287Modes_tx_gain_9287_1_0, ARRAY_SIZE(ar9287Modes_tx_gain_9287_1_0), 6); } else if (AR_SREV_9280_20(ah)) { ar9280_20_hw_init_txgain_ini(ah); } else if (AR_SREV_9285_12_OR_LATER(ah)) { Loading Loading @@ -389,29 +346,6 @@ static void ar9002_hw_configpcipowersave(struct ath_hw *ah, REG_WRITE(ah, INI_RA(&ah->iniPcieSerdes, i, 0), INI_RA(&ah->iniPcieSerdes, i, 1)); } } else if (AR_SREV_9280(ah) && (ah->hw_version.macRev == AR_SREV_REVISION_9280_10)) { REG_WRITE(ah, AR_PCIE_SERDES, 0x9248fd00); REG_WRITE(ah, AR_PCIE_SERDES, 0x24924924); /* RX shut off when elecidle is asserted */ REG_WRITE(ah, AR_PCIE_SERDES, 0xa8000019); REG_WRITE(ah, AR_PCIE_SERDES, 0x13160820); REG_WRITE(ah, AR_PCIE_SERDES, 0xe5980560); /* Shut off CLKREQ active in L1 */ if (ah->config.pcie_clock_req) REG_WRITE(ah, AR_PCIE_SERDES, 0x401deffc); else REG_WRITE(ah, AR_PCIE_SERDES, 0x401deffd); REG_WRITE(ah, AR_PCIE_SERDES, 0x1aaabe40); REG_WRITE(ah, AR_PCIE_SERDES, 0xbe105554); REG_WRITE(ah, AR_PCIE_SERDES, 0x00043007); /* Load the new settings */ REG_WRITE(ah, AR_PCIE_SERDES2, 0x00000000); } else { ENABLE_REGWRITE_BUFFER(ah); Loading