Commit e5e5cf4c authored by David S. Miller's avatar David S. Miller
parents 045de01a da1fdb02
...@@ -739,17 +739,27 @@ static int ar9170_usb_init_device(struct ar9170_usb *aru) ...@@ -739,17 +739,27 @@ static int ar9170_usb_init_device(struct ar9170_usb *aru)
static void ar9170_usb_firmware_failed(struct ar9170_usb *aru) static void ar9170_usb_firmware_failed(struct ar9170_usb *aru)
{ {
struct device *parent = aru->udev->dev.parent; struct device *parent = aru->udev->dev.parent;
struct usb_device *udev;
/*
* Store a copy of the usb_device pointer locally.
* This is because device_release_driver initiates
* ar9170_usb_disconnect, which in turn frees our
* driver context (aru).
*/
udev = aru->udev;
complete(&aru->firmware_loading_complete); complete(&aru->firmware_loading_complete);
/* unbind anything failed */ /* unbind anything failed */
if (parent) if (parent)
device_lock(parent); device_lock(parent);
device_release_driver(&aru->udev->dev);
device_release_driver(&udev->dev);
if (parent) if (parent)
device_unlock(parent); device_unlock(parent);
usb_put_dev(aru->udev); usb_put_dev(udev);
} }
static void ar9170_usb_firmware_finish(const struct firmware *fw, void *context) static void ar9170_usb_firmware_finish(const struct firmware *fw, void *context)
......
...@@ -1198,7 +1198,7 @@ void ath_drain_all_txq(struct ath_softc *sc, bool retry_tx) ...@@ -1198,7 +1198,7 @@ void ath_drain_all_txq(struct ath_softc *sc, bool retry_tx)
int r; int r;
ath_print(common, ATH_DBG_FATAL, ath_print(common, ATH_DBG_FATAL,
"Unable to stop TxDMA. Reset HAL!\n"); "Failed to stop TX DMA. Resetting hardware!\n");
spin_lock_bh(&sc->sc_resetlock); spin_lock_bh(&sc->sc_resetlock);
r = ath9k_hw_reset(ah, sc->sc_ah->curchan, false); r = ath9k_hw_reset(ah, sc->sc_ah->curchan, false);
...@@ -1728,6 +1728,8 @@ static int ath_tx_setup_buffer(struct ieee80211_hw *hw, struct ath_buf *bf, ...@@ -1728,6 +1728,8 @@ static int ath_tx_setup_buffer(struct ieee80211_hw *hw, struct ath_buf *bf,
} else } else
bf->bf_isnullfunc = false; bf->bf_isnullfunc = false;
bf->bf_tx_aborted = false;
return 0; return 0;
} }
...@@ -1989,7 +1991,7 @@ static int ath_tx_num_badfrms(struct ath_softc *sc, struct ath_buf *bf, ...@@ -1989,7 +1991,7 @@ static int ath_tx_num_badfrms(struct ath_softc *sc, struct ath_buf *bf,
int nbad = 0; int nbad = 0;
int isaggr = 0; int isaggr = 0;
if (bf->bf_tx_aborted) if (bf->bf_lastbf->bf_tx_aborted)
return 0; return 0;
isaggr = bf_isaggr(bf); isaggr = bf_isaggr(bf);
......
...@@ -329,9 +329,8 @@ static int process_rxed_802_11_packet(struct lbs_private *priv, ...@@ -329,9 +329,8 @@ static int process_rxed_802_11_packet(struct lbs_private *priv,
/* create the exported radio header */ /* create the exported radio header */
/* radiotap header */ /* radiotap header */
radiotap_hdr.hdr.it_version = 0; memset(&radiotap_hdr, 0, sizeof(radiotap_hdr));
/* XXX must check this value for pad */ /* XXX must check radiotap_hdr.hdr.it_pad for pad */
radiotap_hdr.hdr.it_pad = 0;
radiotap_hdr.hdr.it_len = cpu_to_le16 (sizeof(struct rx_radiotap_hdr)); radiotap_hdr.hdr.it_len = cpu_to_le16 (sizeof(struct rx_radiotap_hdr));
radiotap_hdr.hdr.it_present = cpu_to_le32 (RX_RADIOTAP_PRESENT); radiotap_hdr.hdr.it_present = cpu_to_le32 (RX_RADIOTAP_PRESENT);
radiotap_hdr.rate = convert_mv_rate_to_radiotap(prxpd->rx_rate); radiotap_hdr.rate = convert_mv_rate_to_radiotap(prxpd->rx_rate);
......
...@@ -413,7 +413,7 @@ static void rt2800usb_write_tx_desc(struct rt2x00_dev *rt2x00dev, ...@@ -413,7 +413,7 @@ static void rt2800usb_write_tx_desc(struct rt2x00_dev *rt2x00dev,
*/ */
rt2x00_desc_read(txi, 0, &word); rt2x00_desc_read(txi, 0, &word);
rt2x00_set_field32(&word, TXINFO_W0_USB_DMA_TX_PKT_LEN, rt2x00_set_field32(&word, TXINFO_W0_USB_DMA_TX_PKT_LEN,
skb->len - TXINFO_DESC_SIZE); skb->len + TXWI_DESC_SIZE);
rt2x00_set_field32(&word, TXINFO_W0_WIV, rt2x00_set_field32(&word, TXINFO_W0_WIV,
!test_bit(ENTRY_TXD_ENCRYPT_IV, &txdesc->flags)); !test_bit(ENTRY_TXD_ENCRYPT_IV, &txdesc->flags));
rt2x00_set_field32(&word, TXINFO_W0_QSEL, 2); rt2x00_set_field32(&word, TXINFO_W0_QSEL, 2);
......
...@@ -625,9 +625,12 @@ static int ssb_pci_sprom_get(struct ssb_bus *bus, ...@@ -625,9 +625,12 @@ static int ssb_pci_sprom_get(struct ssb_bus *bus,
ssb_printk(KERN_ERR PFX "No SPROM available!\n"); ssb_printk(KERN_ERR PFX "No SPROM available!\n");
return -ENODEV; return -ENODEV;
} }
if (bus->chipco.dev) { /* can be unavailible! */
bus->sprom_offset = (bus->chipco.dev->id.revision < 31) ? bus->sprom_offset = (bus->chipco.dev->id.revision < 31) ?
SSB_SPROM_BASE1 : SSB_SPROM_BASE31; SSB_SPROM_BASE1 : SSB_SPROM_BASE31;
} else {
bus->sprom_offset = SSB_SPROM_BASE1;
}
buf = kcalloc(SSB_SPROMSIZE_WORDS_R123, sizeof(u16), GFP_KERNEL); buf = kcalloc(SSB_SPROMSIZE_WORDS_R123, sizeof(u16), GFP_KERNEL);
if (!buf) if (!buf)
......
...@@ -185,6 +185,7 @@ bool ssb_is_sprom_available(struct ssb_bus *bus) ...@@ -185,6 +185,7 @@ bool ssb_is_sprom_available(struct ssb_bus *bus)
/* this routine differs from specs as we do not access SPROM directly /* this routine differs from specs as we do not access SPROM directly
on PCMCIA */ on PCMCIA */
if (bus->bustype == SSB_BUSTYPE_PCI && if (bus->bustype == SSB_BUSTYPE_PCI &&
bus->chipco.dev && /* can be unavailible! */
bus->chipco.dev->id.revision >= 31) bus->chipco.dev->id.revision >= 31)
return bus->chipco.capabilities & SSB_CHIPCO_CAP_SPROM; return bus->chipco.capabilities & SSB_CHIPCO_CAP_SPROM;
......
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
#include <linux/nl80211.h> #include <linux/nl80211.h>
#include "ieee80211_i.h" #include "ieee80211_i.h"
enum ieee80211_chan_mode static enum ieee80211_chan_mode
__ieee80211_get_channel_mode(struct ieee80211_local *local, __ieee80211_get_channel_mode(struct ieee80211_local *local,
struct ieee80211_sub_if_data *ignore) struct ieee80211_sub_if_data *ignore)
{ {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment