+
--- a/drivers/net/wireless/ath/ath9k/Makefile
+++ b/drivers/net/wireless/ath/ath9k/Makefile
-@@ -10,6 +10,7 @@ ath9k-$(CONFIG_ATH9K_RATE_CONTROL) += rc
+@@ -9,6 +9,7 @@ ath9k-$(CONFIG_ATH9K_RATE_CONTROL) += rc
ath9k-$(CONFIG_PCI) += pci.o
ath9k-$(CONFIG_ATHEROS_AR71XX) += ahb.o
ath9k-$(CONFIG_ATH9K_DEBUGFS) += debug.o
return 0;
--- a/drivers/net/wireless/ath/ath9k/ath9k.h
+++ b/drivers/net/wireless/ath/ath9k/ath9k.h
-@@ -25,6 +25,7 @@
+@@ -24,6 +24,7 @@
#include "debug.h"
#include "common.h"
/*
* Header for the ath9k.ko driver core *only* -- hw code nor any other driver
-@@ -549,6 +550,7 @@ struct ath_ant_comb {
+@@ -550,6 +551,7 @@ struct ath_ant_comb {
#define SC_OP_BT_SCAN BIT(13)
#define SC_OP_ANI_RUN BIT(14)
#define SC_OP_ENABLE_APM BIT(15)
/* Powersave flags */
#define PS_WAIT_FOR_BEACON BIT(0)
-@@ -626,6 +628,10 @@ struct ath_softc {
- #ifdef CONFIG_ATH9K_DEBUGFS
- struct ath9k_debug debug;
+@@ -629,6 +631,10 @@ struct ath_softc {
+ struct list_head nodes; /* basically, stations */
+ unsigned int tx_complete_poll_work_seen;
#endif
+#ifdef CONFIG_ATH9K_PKTLOG
+ struct ath_pktlog_debugfs pktlog;
+ bool is_pkt_logging;
struct ath_beacon_config cur_beacon_conf;
struct delayed_work tx_complete_work;
- struct ath_btcoex btcoex;
+ struct delayed_work hw_pll_work;
--- a/drivers/net/wireless/ath/ath9k/debug.c
+++ b/drivers/net/wireless/ath/ath9k/debug.c
-@@ -908,6 +908,9 @@ static int open_file_regdump(struct inod
+@@ -1066,6 +1066,9 @@ static int open_file_regdump(struct inod
file->private_data = buf;
return 0;
}
-@@ -982,6 +985,7 @@ int ath9k_init_debug(struct ath_hw *ah)
+@@ -1148,6 +1151,7 @@ int ath9k_init_debug(struct ath_hw *ah)
sc->debug.regidx = 0;
return 0;
err:
static inline void ath9k_hw_set11n_txdesc(struct ath_hw *ah, void *ds,
--- a/drivers/net/wireless/ath/ath9k/hw.c
+++ b/drivers/net/wireless/ath/ath9k/hw.c
-@@ -2150,7 +2150,7 @@ void ath9k_hw_setrxfilter(struct ath_hw
+@@ -2192,7 +2192,7 @@ void ath9k_hw_setrxfilter(struct ath_hw
phybits |= AR_PHY_ERR_RADAR;
if (bits & ATH9K_RX_FILTER_PHYERR)
phybits |= AR_PHY_ERR_OFDM_TIMING | AR_PHY_ERR_CCK_TIMING;
REG_WRITE(ah, AR_RXCFG,
--- a/drivers/net/wireless/ath/ath9k/hw.h
+++ b/drivers/net/wireless/ath/ath9k/hw.h
-@@ -616,7 +616,7 @@ struct ath_hw_ops {
+@@ -620,7 +620,7 @@ struct ath_hw_ops {
const void *ds0, dma_addr_t buf_addr,
unsigned int qcu);
int (*proc_txdesc)(struct ath_hw *ah, void *ds,
void (*set11n_txdesc)(struct ath_hw *ah, void *ds,
u32 pktLen, enum ath9k_pkt_type type,
u32 txPower, u32 keyIx,
-@@ -852,6 +852,8 @@ struct ath_hw {
+@@ -856,6 +856,8 @@ struct ath_hw {
/* Enterprise mode cap */
u32 ent_mode;
if (conf_is_ht(&sc->hw->conf) &&
--- a/drivers/net/wireless/ath/ath9k/recv.c
+++ b/drivers/net/wireless/ath/ath9k/recv.c
-@@ -1577,6 +1577,7 @@
+@@ -1577,6 +1577,7 @@ int ath_rx_tasklet(struct ath_softc *sc,
struct ieee80211_rx_status *rxs;
struct ath_hw *ah = sc->sc_ah;
struct ath_common *common = ath9k_hw_common(ah);
/*
* The hw can technically differ from common->hw when using ath9k
* virtual wiphy so to account for that we iterate over the active
-@@ -1676,13 +1677,24 @@
+@@ -1676,13 +1677,24 @@ int ath_rx_tasklet(struct ath_softc *sc,
dma_type);
skb_put(skb, rs.rs_datalen + ah->caps.rx_status_len);
bf->bf_buf_addr = dma_map_single(sc->dev, requeue_skb->data,
--- a/drivers/net/wireless/ath/ath9k/xmit.c
+++ b/drivers/net/wireless/ath/ath9k/xmit.c
-@@ -475,6 +475,8 @@
+@@ -475,6 +475,8 @@ static void ath_tx_complete_aggr(struct
list_move_tail(&bf->list, &bf_head);
}
if (!txpending || (tid->state & AGGR_CLEANUP)) {
/*
* complete the acked-ones/xretried ones; update
-@@ -2043,7 +2045,7 @@
+@@ -2043,7 +2045,7 @@ static void ath_tx_processq(struct ath_s
ds = lastbf->bf_desc;
memset(&ts, 0, sizeof(ts));
if (status == -EINPROGRESS) {
spin_unlock_bh(&txq->axq_lock);
break;
-@@ -2085,11 +2087,15 @@
+@@ -2085,11 +2087,15 @@ static void ath_tx_processq(struct ath_s
ath_tx_rc_status(sc, bf, &ts, 1, txok ? 0 : 1, txok, true);
}
spin_lock_bh(&txq->axq_lock);
-@@ -2210,9 +2216,11 @@
+@@ -2210,9 +2216,11 @@ void ath_tx_edma_tasklet(struct ath_soft
struct list_head bf_head;
int status;
int txok;
if (status == -EINPROGRESS)
break;
if (status == -EIO) {
-@@ -2258,9 +2266,13 @@
+@@ -2258,9 +2266,13 @@ void ath_tx_edma_tasklet(struct ath_soft
if (bf_isampdu(bf))
ath_tx_complete_aggr(sc, txq, bf, &bf_head, &txs,
txok, true);
static struct usb_device_id btusb_table[] = {
/* Generic Bluetooth USB device */
{ USB_DEVICE_INFO(0xe0, 0x01, 0x01) },
-@@ -878,6 +899,7 @@ static int btusb_probe(struct usb_interf
+@@ -887,6 +908,7 @@ static int btusb_probe(struct usb_interf
struct btusb_data *data;
struct hci_dev *hdev;
int i, err;
BT_DBG("intf %p id %p", intf, id);
-@@ -937,6 +959,19 @@ static int btusb_probe(struct usb_interf
+@@ -946,6 +968,19 @@ static int btusb_probe(struct usb_interf
data->udev = interface_to_usbdev(intf);
data->intf = intf;
spin_lock_init(&data->lock);
INIT_WORK(&data->work, btusb_work);
-@@ -1047,12 +1082,26 @@ static void btusb_disconnect(struct usb_
+@@ -1054,12 +1089,26 @@ static void btusb_disconnect(struct usb_
{
struct btusb_data *data = usb_get_intfdata(intf);
struct hci_dev *hdev;
hdev = data->hdev;
__hci_dev_hold(hdev);
-@@ -1078,12 +1127,22 @@ static void btusb_disconnect(struct usb_
+@@ -1085,12 +1134,22 @@ static void btusb_disconnect(struct usb_
static int btusb_suspend(struct usb_interface *intf, pm_message_t message)
{
struct btusb_data *data = usb_get_intfdata(intf);
spin_lock_irq(&data->txlock);
if (!((message.event & PM_EVENT_AUTO) && data->tx_in_flight)) {
set_bit(BTUSB_SUSPENDING, &data->flags);
-@@ -1196,6 +1255,14 @@ static int __init btusb_init(void)
+@@ -1203,6 +1262,14 @@ static int __init btusb_init(void)
static void __exit btusb_exit(void)
{