diff options
author | David Woodhouse <David.Woodhouse@intel.com> | 2012-11-21 05:38:13 -0500 |
---|---|---|
committer | David Woodhouse <David.Woodhouse@intel.com> | 2012-11-21 05:38:13 -0500 |
commit | 851462444d421c223965b12b836bef63da61b57f (patch) | |
tree | 495baa14e638817941496c36e1443aed7dae0ea0 /drivers/net/wireless/ath | |
parent | 5a6ea4af0907f995dc06df21a9c9ef764c7cd3bc (diff) | |
parent | 6924d99fcdf1a688538a3cdebd1f135c22eec191 (diff) |
Merge branch 'for-3.7' of git://git.infradead.org/users/dedekind/l2-mtd
Conflicts:
drivers/mtd/nand/nand_base.c
Diffstat (limited to 'drivers/net/wireless/ath')
-rw-r--r-- | drivers/net/wireless/ath/ath5k/base.c | 3 | ||||
-rw-r--r-- | drivers/net/wireless/ath/ath9k/ar9003_2p2_initvals.h | 164 | ||||
-rw-r--r-- | drivers/net/wireless/ath/ath9k/beacon.c | 2 | ||||
-rw-r--r-- | drivers/net/wireless/ath/ath9k/hif_usb.c | 1 | ||||
-rw-r--r-- | drivers/net/wireless/ath/ath9k/hw.c | 5 | ||||
-rw-r--r-- | drivers/net/wireless/ath/ath9k/hw.h | 1 | ||||
-rw-r--r-- | drivers/net/wireless/ath/ath9k/main.c | 15 | ||||
-rw-r--r-- | drivers/net/wireless/ath/ath9k/pci.c | 7 | ||||
-rw-r--r-- | drivers/net/wireless/ath/ath9k/xmit.c | 63 | ||||
-rw-r--r-- | drivers/net/wireless/ath/carl9170/carl9170.h | 1 | ||||
-rw-r--r-- | drivers/net/wireless/ath/carl9170/main.c | 29 |
11 files changed, 156 insertions, 135 deletions
diff --git a/drivers/net/wireless/ath/ath5k/base.c b/drivers/net/wireless/ath/ath5k/base.c index 9fd6d9a9942e..9f31cfa56cc0 100644 --- a/drivers/net/wireless/ath/ath5k/base.c +++ b/drivers/net/wireless/ath/ath5k/base.c | |||
@@ -1804,7 +1804,7 @@ ath5k_beacon_update(struct ieee80211_hw *hw, struct ieee80211_vif *vif) | |||
1804 | { | 1804 | { |
1805 | int ret; | 1805 | int ret; |
1806 | struct ath5k_hw *ah = hw->priv; | 1806 | struct ath5k_hw *ah = hw->priv; |
1807 | struct ath5k_vif *avf = (void *)vif->drv_priv; | 1807 | struct ath5k_vif *avf; |
1808 | struct sk_buff *skb; | 1808 | struct sk_buff *skb; |
1809 | 1809 | ||
1810 | if (WARN_ON(!vif)) { | 1810 | if (WARN_ON(!vif)) { |
@@ -1819,6 +1819,7 @@ ath5k_beacon_update(struct ieee80211_hw *hw, struct ieee80211_vif *vif) | |||
1819 | goto out; | 1819 | goto out; |
1820 | } | 1820 | } |
1821 | 1821 | ||
1822 | avf = (void *)vif->drv_priv; | ||
1822 | ath5k_txbuf_free_skb(ah, avf->bbuf); | 1823 | ath5k_txbuf_free_skb(ah, avf->bbuf); |
1823 | avf->bbuf->skb = skb; | 1824 | avf->bbuf->skb = skb; |
1824 | ret = ath5k_beacon_setup(ah, avf->bbuf); | 1825 | ret = ath5k_beacon_setup(ah, avf->bbuf); |
diff --git a/drivers/net/wireless/ath/ath9k/ar9003_2p2_initvals.h b/drivers/net/wireless/ath/ath9k/ar9003_2p2_initvals.h index 89bf94d4d8a1..6f7cf49eff4d 100644 --- a/drivers/net/wireless/ath/ath9k/ar9003_2p2_initvals.h +++ b/drivers/net/wireless/ath/ath9k/ar9003_2p2_initvals.h | |||
@@ -534,107 +534,107 @@ static const u32 ar9300_2p2_baseband_core[][2] = { | |||
534 | 534 | ||
535 | static const u32 ar9300Modes_high_power_tx_gain_table_2p2[][5] = { | 535 | static const u32 ar9300Modes_high_power_tx_gain_table_2p2[][5] = { |
536 | /* Addr 5G_HT20 5G_HT40 2G_HT40 2G_HT20 */ | 536 | /* Addr 5G_HT20 5G_HT40 2G_HT40 2G_HT20 */ |
537 | {0x0000a2dc, 0x000cfff0, 0x000cfff0, 0x03aaa352, 0x03aaa352}, | 537 | {0x0000a2dc, 0x00033800, 0x00033800, 0x03aaa352, 0x03aaa352}, |
538 | {0x0000a2e0, 0x000f0000, 0x000f0000, 0x03ccc584, 0x03ccc584}, | 538 | {0x0000a2e0, 0x0003c000, 0x0003c000, 0x03ccc584, 0x03ccc584}, |
539 | {0x0000a2e4, 0x03f00000, 0x03f00000, 0x03f0f800, 0x03f0f800}, | 539 | {0x0000a2e4, 0x03fc0000, 0x03fc0000, 0x03f0f800, 0x03f0f800}, |
540 | {0x0000a2e8, 0x00000000, 0x00000000, 0x03ff0000, 0x03ff0000}, | 540 | {0x0000a2e8, 0x00000000, 0x00000000, 0x03ff0000, 0x03ff0000}, |
541 | {0x0000a410, 0x000050d9, 0x000050d9, 0x000050d9, 0x000050d9}, | 541 | {0x0000a410, 0x000050d9, 0x000050d9, 0x000050d9, 0x000050d9}, |
542 | {0x0000a500, 0x00000000, 0x00000000, 0x00000000, 0x00000000}, | 542 | {0x0000a500, 0x00000000, 0x00000000, 0x00000000, 0x00000000}, |
543 | {0x0000a504, 0x06000003, 0x06000003, 0x04000002, 0x04000002}, | 543 | {0x0000a504, 0x06000003, 0x06000003, 0x04000002, 0x04000002}, |
544 | {0x0000a508, 0x0a000020, 0x0a000020, 0x08000004, 0x08000004}, | 544 | {0x0000a508, 0x0a000020, 0x0a000020, 0x08000004, 0x08000004}, |
545 | {0x0000a50c, 0x10000023, 0x10000023, 0x0b000200, 0x0b000200}, | 545 | {0x0000a50c, 0x10000023, 0x10000023, 0x0b000200, 0x0b000200}, |
546 | {0x0000a510, 0x15000028, 0x15000028, 0x0f000202, 0x0f000202}, | 546 | {0x0000a510, 0x16000220, 0x16000220, 0x0f000202, 0x0f000202}, |
547 | {0x0000a514, 0x1b00002b, 0x1b00002b, 0x12000400, 0x12000400}, | 547 | {0x0000a514, 0x1c000223, 0x1c000223, 0x12000400, 0x12000400}, |
548 | {0x0000a518, 0x1f020028, 0x1f020028, 0x16000402, 0x16000402}, | 548 | {0x0000a518, 0x21002220, 0x21002220, 0x16000402, 0x16000402}, |
549 | {0x0000a51c, 0x2502002b, 0x2502002b, 0x19000404, 0x19000404}, | 549 | {0x0000a51c, 0x27002223, 0x27002223, 0x19000404, 0x19000404}, |
550 | {0x0000a520, 0x2a04002a, 0x2a04002a, 0x1c000603, 0x1c000603}, | 550 | {0x0000a520, 0x2b022220, 0x2b022220, 0x1c000603, 0x1c000603}, |
551 | {0x0000a524, 0x2e06002a, 0x2e06002a, 0x21000a02, 0x21000a02}, | 551 | {0x0000a524, 0x2f022222, 0x2f022222, 0x21000a02, 0x21000a02}, |
552 | {0x0000a528, 0x3302202d, 0x3302202d, 0x25000a04, 0x25000a04}, | 552 | {0x0000a528, 0x34022225, 0x34022225, 0x25000a04, 0x25000a04}, |
553 | {0x0000a52c, 0x3804202c, 0x3804202c, 0x28000a20, 0x28000a20}, | 553 | {0x0000a52c, 0x3a02222a, 0x3a02222a, 0x28000a20, 0x28000a20}, |
554 | {0x0000a530, 0x3c06202c, 0x3c06202c, 0x2c000e20, 0x2c000e20}, | 554 | {0x0000a530, 0x3e02222c, 0x3e02222c, 0x2c000e20, 0x2c000e20}, |
555 | {0x0000a534, 0x4108202d, 0x4108202d, 0x30000e22, 0x30000e22}, | 555 | {0x0000a534, 0x4202242a, 0x4202242a, 0x30000e22, 0x30000e22}, |
556 | {0x0000a538, 0x4506402d, 0x4506402d, 0x34000e24, 0x34000e24}, | 556 | {0x0000a538, 0x4702244a, 0x4702244a, 0x34000e24, 0x34000e24}, |
557 | {0x0000a53c, 0x4906222d, 0x4906222d, 0x38001640, 0x38001640}, | 557 | {0x0000a53c, 0x4b02244c, 0x4b02244c, 0x38001640, 0x38001640}, |
558 | {0x0000a540, 0x4d062231, 0x4d062231, 0x3c001660, 0x3c001660}, | 558 | {0x0000a540, 0x4e02246c, 0x4e02246c, 0x3c001660, 0x3c001660}, |
559 | {0x0000a544, 0x50082231, 0x50082231, 0x3f001861, 0x3f001861}, | 559 | {0x0000a544, 0x52022470, 0x52022470, 0x3f001861, 0x3f001861}, |
560 | {0x0000a548, 0x5608422e, 0x5608422e, 0x43001a81, 0x43001a81}, | 560 | {0x0000a548, 0x55022490, 0x55022490, 0x43001a81, 0x43001a81}, |
561 | {0x0000a54c, 0x5a08442e, 0x5a08442e, 0x47001a83, 0x47001a83}, | 561 | {0x0000a54c, 0x59022492, 0x59022492, 0x47001a83, 0x47001a83}, |
562 | {0x0000a550, 0x5e0a4431, 0x5e0a4431, 0x4a001c84, 0x4a001c84}, | 562 | {0x0000a550, 0x5d022692, 0x5d022692, 0x4a001c84, 0x4a001c84}, |
563 | {0x0000a554, 0x640a4432, 0x640a4432, 0x4e001ce3, 0x4e001ce3}, | 563 | {0x0000a554, 0x61022892, 0x61022892, 0x4e001ce3, 0x4e001ce3}, |
564 | {0x0000a558, 0x680a4434, 0x680a4434, 0x52001ce5, 0x52001ce5}, | 564 | {0x0000a558, 0x65024890, 0x65024890, 0x52001ce5, 0x52001ce5}, |
565 | {0x0000a55c, 0x6c0a6434, 0x6c0a6434, 0x56001ce9, 0x56001ce9}, | 565 | {0x0000a55c, 0x69024892, 0x69024892, 0x56001ce9, 0x56001ce9}, |
566 | {0x0000a560, 0x6f0a6633, 0x6f0a6633, 0x5a001ceb, 0x5a001ceb}, | 566 | {0x0000a560, 0x6e024c92, 0x6e024c92, 0x5a001ceb, 0x5a001ceb}, |
567 | {0x0000a564, 0x730c6634, 0x730c6634, 0x5d001eec, 0x5d001eec}, | 567 | {0x0000a564, 0x74026e92, 0x74026e92, 0x5d001eec, 0x5d001eec}, |
568 | {0x0000a568, 0x730c6634, 0x730c6634, 0x5d001eec, 0x5d001eec}, | 568 | {0x0000a568, 0x74026e92, 0x74026e92, 0x5d001eec, 0x5d001eec}, |
569 | {0x0000a56c, 0x730c6634, 0x730c6634, 0x5d001eec, 0x5d001eec}, | 569 | {0x0000a56c, 0x74026e92, 0x74026e92, 0x5d001eec, 0x5d001eec}, |
570 | {0x0000a570, 0x730c6634, 0x730c6634, 0x5d001eec, 0x5d001eec}, | 570 | {0x0000a570, 0x74026e92, 0x74026e92, 0x5d001eec, 0x5d001eec}, |
571 | {0x0000a574, 0x730c6634, 0x730c6634, 0x5d001eec, 0x5d001eec}, | 571 | {0x0000a574, 0x74026e92, 0x74026e92, 0x5d001eec, 0x5d001eec}, |
572 | {0x0000a578, 0x730c6634, 0x730c6634, 0x5d001eec, 0x5d001eec}, | 572 | {0x0000a578, 0x74026e92, 0x74026e92, 0x5d001eec, 0x5d001eec}, |
573 | {0x0000a57c, 0x730c6634, 0x730c6634, 0x5d001eec, 0x5d001eec}, | 573 | {0x0000a57c, 0x74026e92, 0x74026e92, 0x5d001eec, 0x5d001eec}, |
574 | {0x0000a580, 0x00800000, 0x00800000, 0x00800000, 0x00800000}, | 574 | {0x0000a580, 0x00800000, 0x00800000, 0x00800000, 0x00800000}, |
575 | {0x0000a584, 0x06800003, 0x06800003, 0x04800002, 0x04800002}, | 575 | {0x0000a584, 0x06800003, 0x06800003, 0x04800002, 0x04800002}, |
576 | {0x0000a588, 0x0a800020, 0x0a800020, 0x08800004, 0x08800004}, | 576 | {0x0000a588, 0x0a800020, 0x0a800020, 0x08800004, 0x08800004}, |
577 | {0x0000a58c, 0x10800023, 0x10800023, 0x0b800200, 0x0b800200}, | 577 | {0x0000a58c, 0x10800023, 0x10800023, 0x0b800200, 0x0b800200}, |
578 | {0x0000a590, 0x15800028, 0x15800028, 0x0f800202, 0x0f800202}, | 578 | {0x0000a590, 0x16800220, 0x16800220, 0x0f800202, 0x0f800202}, |
579 | {0x0000a594, 0x1b80002b, 0x1b80002b, 0x12800400, 0x12800400}, | 579 | {0x0000a594, 0x1c800223, 0x1c800223, 0x12800400, 0x12800400}, |
580 | {0x0000a598, 0x1f820028, 0x1f820028, 0x16800402, 0x16800402}, | 580 | {0x0000a598, 0x21802220, 0x21802220, 0x16800402, 0x16800402}, |
581 | {0x0000a59c, 0x2582002b, 0x2582002b, 0x19800404, 0x19800404}, | 581 | {0x0000a59c, 0x27802223, 0x27802223, 0x19800404, 0x19800404}, |
582 | {0x0000a5a0, 0x2a84002a, 0x2a84002a, 0x1c800603, 0x1c800603}, | 582 | {0x0000a5a0, 0x2b822220, 0x2b822220, 0x1c800603, 0x1c800603}, |
583 | {0x0000a5a4, 0x2e86002a, 0x2e86002a, 0x21800a02, 0x21800a02}, | 583 | {0x0000a5a4, 0x2f822222, 0x2f822222, 0x21800a02, 0x21800a02}, |
584 | {0x0000a5a8, 0x3382202d, 0x3382202d, 0x25800a04, 0x25800a04}, | 584 | {0x0000a5a8, 0x34822225, 0x34822225, 0x25800a04, 0x25800a04}, |
585 | {0x0000a5ac, 0x3884202c, 0x3884202c, 0x28800a20, 0x28800a20}, | 585 | {0x0000a5ac, 0x3a82222a, 0x3a82222a, 0x28800a20, 0x28800a20}, |
586 | {0x0000a5b0, 0x3c86202c, 0x3c86202c, 0x2c800e20, 0x2c800e20}, | 586 | {0x0000a5b0, 0x3e82222c, 0x3e82222c, 0x2c800e20, 0x2c800e20}, |
587 | {0x0000a5b4, 0x4188202d, 0x4188202d, 0x30800e22, 0x30800e22}, | 587 | {0x0000a5b4, 0x4282242a, 0x4282242a, 0x30800e22, 0x30800e22}, |
588 | {0x0000a5b8, 0x4586402d, 0x4586402d, 0x34800e24, 0x34800e24}, | 588 | {0x0000a5b8, 0x4782244a, 0x4782244a, 0x34800e24, 0x34800e24}, |
589 | {0x0000a5bc, 0x4986222d, 0x4986222d, 0x38801640, 0x38801640}, | 589 | {0x0000a5bc, 0x4b82244c, 0x4b82244c, 0x38801640, 0x38801640}, |
590 | {0x0000a5c0, 0x4d862231, 0x4d862231, 0x3c801660, 0x3c801660}, | 590 | {0x0000a5c0, 0x4e82246c, 0x4e82246c, 0x3c801660, 0x3c801660}, |
591 | {0x0000a5c4, 0x50882231, 0x50882231, 0x3f801861, 0x3f801861}, | 591 | {0x0000a5c4, 0x52822470, 0x52822470, 0x3f801861, 0x3f801861}, |
592 | {0x0000a5c8, 0x5688422e, 0x5688422e, 0x43801a81, 0x43801a81}, | 592 | {0x0000a5c8, 0x55822490, 0x55822490, 0x43801a81, 0x43801a81}, |
593 | {0x0000a5cc, 0x5a88442e, 0x5a88442e, 0x47801a83, 0x47801a83}, | 593 | {0x0000a5cc, 0x59822492, 0x59822492, 0x47801a83, 0x47801a83}, |
594 | {0x0000a5d0, 0x5e8a4431, 0x5e8a4431, 0x4a801c84, 0x4a801c84}, | 594 | {0x0000a5d0, 0x5d822692, 0x5d822692, 0x4a801c84, 0x4a801c84}, |
595 | {0x0000a5d4, 0x648a4432, 0x648a4432, 0x4e801ce3, 0x4e801ce3}, | 595 | {0x0000a5d4, 0x61822892, 0x61822892, 0x4e801ce3, 0x4e801ce3}, |
596 | {0x0000a5d8, 0x688a4434, 0x688a4434, 0x52801ce5, 0x52801ce5}, | 596 | {0x0000a5d8, 0x65824890, 0x65824890, 0x52801ce5, 0x52801ce5}, |
597 | {0x0000a5dc, 0x6c8a6434, 0x6c8a6434, 0x56801ce9, 0x56801ce9}, | 597 | {0x0000a5dc, 0x69824892, 0x69824892, 0x56801ce9, 0x56801ce9}, |
598 | {0x0000a5e0, 0x6f8a6633, 0x6f8a6633, 0x5a801ceb, 0x5a801ceb}, | 598 | {0x0000a5e0, 0x6e824c92, 0x6e824c92, 0x5a801ceb, 0x5a801ceb}, |
599 | {0x0000a5e4, 0x738c6634, 0x738c6634, 0x5d801eec, 0x5d801eec}, | 599 | {0x0000a5e4, 0x74826e92, 0x74826e92, 0x5d801eec, 0x5d801eec}, |
600 | {0x0000a5e8, 0x738c6634, 0x738c6634, 0x5d801eec, 0x5d801eec}, | 600 | {0x0000a5e8, 0x74826e92, 0x74826e92, 0x5d801eec, 0x5d801eec}, |
601 | {0x0000a5ec, 0x738c6634, 0x738c6634, 0x5d801eec, 0x5d801eec}, | 601 | {0x0000a5ec, 0x74826e92, 0x74826e92, 0x5d801eec, 0x5d801eec}, |
602 | {0x0000a5f0, 0x738c6634, 0x738c6634, 0x5d801eec, 0x5d801eec}, | 602 | {0x0000a5f0, 0x74826e92, 0x74826e92, 0x5d801eec, 0x5d801eec}, |
603 | {0x0000a5f4, 0x738c6634, 0x738c6634, 0x5d801eec, 0x5d801eec}, | 603 | {0x0000a5f4, 0x74826e92, 0x74826e92, 0x5d801eec, 0x5d801eec}, |
604 | {0x0000a5f8, 0x738c6634, 0x738c6634, 0x5d801eec, 0x5d801eec}, | 604 | {0x0000a5f8, 0x74826e92, 0x74826e92, 0x5d801eec, 0x5d801eec}, |
605 | {0x0000a5fc, 0x738c6634, 0x738c6634, 0x5d801eec, 0x5d801eec}, | 605 | {0x0000a5fc, 0x74826e92, 0x74826e92, 0x5d801eec, 0x5d801eec}, |
606 | {0x0000a600, 0x00000000, 0x00000000, 0x00000000, 0x00000000}, | 606 | {0x0000a600, 0x00000000, 0x00000000, 0x00000000, 0x00000000}, |
607 | {0x0000a604, 0x00000000, 0x00000000, 0x00000000, 0x00000000}, | 607 | {0x0000a604, 0x00000000, 0x00000000, 0x00000000, 0x00000000}, |
608 | {0x0000a608, 0x01804601, 0x01804601, 0x00000000, 0x00000000}, | 608 | {0x0000a608, 0x00000000, 0x00000000, 0x00000000, 0x00000000}, |
609 | {0x0000a60c, 0x01804601, 0x01804601, 0x00000000, 0x00000000}, | 609 | {0x0000a60c, 0x00000000, 0x00000000, 0x00000000, 0x00000000}, |
610 | {0x0000a610, 0x01804601, 0x01804601, 0x00000000, 0x00000000}, | 610 | {0x0000a610, 0x00000000, 0x00000000, 0x00000000, 0x00000000}, |
611 | {0x0000a614, 0x01804601, 0x01804601, 0x01404000, 0x01404000}, | 611 | {0x0000a614, 0x02004000, 0x02004000, 0x01404000, 0x01404000}, |
612 | {0x0000a618, 0x01804601, 0x01804601, 0x01404501, 0x01404501}, | 612 | {0x0000a618, 0x02004801, 0x02004801, 0x01404501, 0x01404501}, |
613 | {0x0000a61c, 0x01804601, 0x01804601, 0x02008501, 0x02008501}, | 613 | {0x0000a61c, 0x02808a02, 0x02808a02, 0x02008501, 0x02008501}, |
614 | {0x0000a620, 0x03408d02, 0x03408d02, 0x0280ca03, 0x0280ca03}, | 614 | {0x0000a620, 0x0380ce03, 0x0380ce03, 0x0280ca03, 0x0280ca03}, |
615 | {0x0000a624, 0x0300cc03, 0x0300cc03, 0x03010c04, 0x03010c04}, | 615 | {0x0000a624, 0x04411104, 0x04411104, 0x03010c04, 0x03010c04}, |
616 | {0x0000a628, 0x03410d04, 0x03410d04, 0x04014c04, 0x04014c04}, | 616 | {0x0000a628, 0x04411104, 0x04411104, 0x04014c04, 0x04014c04}, |
617 | {0x0000a62c, 0x03410d04, 0x03410d04, 0x04015005, 0x04015005}, | 617 | {0x0000a62c, 0x04411104, 0x04411104, 0x04015005, 0x04015005}, |
618 | {0x0000a630, 0x03410d04, 0x03410d04, 0x04015005, 0x04015005}, | 618 | {0x0000a630, 0x04411104, 0x04411104, 0x04015005, 0x04015005}, |
619 | {0x0000a634, 0x03410d04, 0x03410d04, 0x04015005, 0x04015005}, | 619 | {0x0000a634, 0x04411104, 0x04411104, 0x04015005, 0x04015005}, |
620 | {0x0000a638, 0x03410d04, 0x03410d04, 0x04015005, 0x04015005}, | 620 | {0x0000a638, 0x04411104, 0x04411104, 0x04015005, 0x04015005}, |
621 | {0x0000a63c, 0x03410d04, 0x03410d04, 0x04015005, 0x04015005}, | 621 | {0x0000a63c, 0x04411104, 0x04411104, 0x04015005, 0x04015005}, |
622 | {0x0000b2dc, 0x000cfff0, 0x000cfff0, 0x03aaa352, 0x03aaa352}, | 622 | {0x0000b2dc, 0x00033800, 0x00033800, 0x03aaa352, 0x03aaa352}, |
623 | {0x0000b2e0, 0x000f0000, 0x000f0000, 0x03ccc584, 0x03ccc584}, | 623 | {0x0000b2e0, 0x0003c000, 0x0003c000, 0x03ccc584, 0x03ccc584}, |
624 | {0x0000b2e4, 0x03f00000, 0x03f00000, 0x03f0f800, 0x03f0f800}, | 624 | {0x0000b2e4, 0x03fc0000, 0x03fc0000, 0x03f0f800, 0x03f0f800}, |
625 | {0x0000b2e8, 0x00000000, 0x00000000, 0x03ff0000, 0x03ff0000}, | 625 | {0x0000b2e8, 0x00000000, 0x00000000, 0x03ff0000, 0x03ff0000}, |
626 | {0x0000c2dc, 0x000cfff0, 0x000cfff0, 0x03aaa352, 0x03aaa352}, | 626 | {0x0000c2dc, 0x00033800, 0x00033800, 0x03aaa352, 0x03aaa352}, |
627 | {0x0000c2e0, 0x000f0000, 0x000f0000, 0x03ccc584, 0x03ccc584}, | 627 | {0x0000c2e0, 0x0003c000, 0x0003c000, 0x03ccc584, 0x03ccc584}, |
628 | {0x0000c2e4, 0x03f00000, 0x03f00000, 0x03f0f800, 0x03f0f800}, | 628 | {0x0000c2e4, 0x03fc0000, 0x03fc0000, 0x03f0f800, 0x03f0f800}, |
629 | {0x0000c2e8, 0x00000000, 0x00000000, 0x03ff0000, 0x03ff0000}, | 629 | {0x0000c2e8, 0x00000000, 0x00000000, 0x03ff0000, 0x03ff0000}, |
630 | {0x00016044, 0x012492d4, 0x012492d4, 0x012492d4, 0x012492d4}, | 630 | {0x00016044, 0x012492d4, 0x012492d4, 0x012492d4, 0x012492d4}, |
631 | {0x00016048, 0x61200001, 0x61200001, 0x66480001, 0x66480001}, | 631 | {0x00016048, 0x66480001, 0x66480001, 0x66480001, 0x66480001}, |
632 | {0x00016068, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c}, | 632 | {0x00016068, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c}, |
633 | {0x00016444, 0x012492d4, 0x012492d4, 0x012492d4, 0x012492d4}, | 633 | {0x00016444, 0x012492d4, 0x012492d4, 0x012492d4, 0x012492d4}, |
634 | {0x00016448, 0x61200001, 0x61200001, 0x66480001, 0x66480001}, | 634 | {0x00016448, 0x66480001, 0x66480001, 0x66480001, 0x66480001}, |
635 | {0x00016468, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c}, | 635 | {0x00016468, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c}, |
636 | {0x00016844, 0x012492d4, 0x012492d4, 0x012492d4, 0x012492d4}, | 636 | {0x00016844, 0x012492d4, 0x012492d4, 0x012492d4, 0x012492d4}, |
637 | {0x00016848, 0x61200001, 0x61200001, 0x66480001, 0x66480001}, | 637 | {0x00016848, 0x66480001, 0x66480001, 0x66480001, 0x66480001}, |
638 | {0x00016868, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c}, | 638 | {0x00016868, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c}, |
639 | }; | 639 | }; |
640 | 640 | ||
diff --git a/drivers/net/wireless/ath/ath9k/beacon.c b/drivers/net/wireless/ath/ath9k/beacon.c index 76f07d8c272d..1b48414dca95 100644 --- a/drivers/net/wireless/ath/ath9k/beacon.c +++ b/drivers/net/wireless/ath/ath9k/beacon.c | |||
@@ -120,7 +120,7 @@ static void ath9k_tx_cabq(struct ieee80211_hw *hw, struct sk_buff *skb) | |||
120 | 120 | ||
121 | if (ath_tx_start(hw, skb, &txctl) != 0) { | 121 | if (ath_tx_start(hw, skb, &txctl) != 0) { |
122 | ath_dbg(common, XMIT, "CABQ TX failed\n"); | 122 | ath_dbg(common, XMIT, "CABQ TX failed\n"); |
123 | dev_kfree_skb_any(skb); | 123 | ieee80211_free_txskb(hw, skb); |
124 | } | 124 | } |
125 | } | 125 | } |
126 | 126 | ||
diff --git a/drivers/net/wireless/ath/ath9k/hif_usb.c b/drivers/net/wireless/ath/ath9k/hif_usb.c index 924c4616c3d9..f5dda84176c3 100644 --- a/drivers/net/wireless/ath/ath9k/hif_usb.c +++ b/drivers/net/wireless/ath/ath9k/hif_usb.c | |||
@@ -38,6 +38,7 @@ static struct usb_device_id ath9k_hif_usb_ids[] = { | |||
38 | { USB_DEVICE(0x04CA, 0x4605) }, /* Liteon */ | 38 | { USB_DEVICE(0x04CA, 0x4605) }, /* Liteon */ |
39 | { USB_DEVICE(0x040D, 0x3801) }, /* VIA */ | 39 | { USB_DEVICE(0x040D, 0x3801) }, /* VIA */ |
40 | { USB_DEVICE(0x0cf3, 0xb003) }, /* Ubiquiti WifiStation Ext */ | 40 | { USB_DEVICE(0x0cf3, 0xb003) }, /* Ubiquiti WifiStation Ext */ |
41 | { USB_DEVICE(0x0cf3, 0xb002) }, /* Ubiquiti WifiStation */ | ||
41 | { USB_DEVICE(0x057c, 0x8403) }, /* AVM FRITZ!WLAN 11N v2 USB */ | 42 | { USB_DEVICE(0x057c, 0x8403) }, /* AVM FRITZ!WLAN 11N v2 USB */ |
42 | 43 | ||
43 | { USB_DEVICE(0x0cf3, 0x7015), | 44 | { USB_DEVICE(0x0cf3, 0x7015), |
diff --git a/drivers/net/wireless/ath/ath9k/hw.c b/drivers/net/wireless/ath/ath9k/hw.c index f9a6ec5cf470..8e1559aba495 100644 --- a/drivers/net/wireless/ath/ath9k/hw.c +++ b/drivers/net/wireless/ath/ath9k/hw.c | |||
@@ -1450,9 +1450,14 @@ static bool ath9k_hw_set_reset_reg(struct ath_hw *ah, u32 type) | |||
1450 | REG_WRITE(ah, AR_RTC_FORCE_WAKE, | 1450 | REG_WRITE(ah, AR_RTC_FORCE_WAKE, |
1451 | AR_RTC_FORCE_WAKE_EN | AR_RTC_FORCE_WAKE_ON_INT); | 1451 | AR_RTC_FORCE_WAKE_EN | AR_RTC_FORCE_WAKE_ON_INT); |
1452 | 1452 | ||
1453 | if (!ah->reset_power_on) | ||
1454 | type = ATH9K_RESET_POWER_ON; | ||
1455 | |||
1453 | switch (type) { | 1456 | switch (type) { |
1454 | case ATH9K_RESET_POWER_ON: | 1457 | case ATH9K_RESET_POWER_ON: |
1455 | ret = ath9k_hw_set_reset_power_on(ah); | 1458 | ret = ath9k_hw_set_reset_power_on(ah); |
1459 | if (!ret) | ||
1460 | ah->reset_power_on = true; | ||
1456 | break; | 1461 | break; |
1457 | case ATH9K_RESET_WARM: | 1462 | case ATH9K_RESET_WARM: |
1458 | case ATH9K_RESET_COLD: | 1463 | case ATH9K_RESET_COLD: |
diff --git a/drivers/net/wireless/ath/ath9k/hw.h b/drivers/net/wireless/ath/ath9k/hw.h index 566a4ce4f156..dbc1b7a4cbfd 100644 --- a/drivers/net/wireless/ath/ath9k/hw.h +++ b/drivers/net/wireless/ath/ath9k/hw.h | |||
@@ -741,6 +741,7 @@ struct ath_hw { | |||
741 | u32 rfkill_polarity; | 741 | u32 rfkill_polarity; |
742 | u32 ah_flags; | 742 | u32 ah_flags; |
743 | 743 | ||
744 | bool reset_power_on; | ||
744 | bool htc_reset_init; | 745 | bool htc_reset_init; |
745 | 746 | ||
746 | enum nl80211_iftype opmode; | 747 | enum nl80211_iftype opmode; |
diff --git a/drivers/net/wireless/ath/ath9k/main.c b/drivers/net/wireless/ath/ath9k/main.c index 31ab82e3ba85..dd45edfa6bae 100644 --- a/drivers/net/wireless/ath/ath9k/main.c +++ b/drivers/net/wireless/ath/ath9k/main.c | |||
@@ -639,8 +639,7 @@ static int ath9k_start(struct ieee80211_hw *hw) | |||
639 | ath_err(common, | 639 | ath_err(common, |
640 | "Unable to reset hardware; reset status %d (freq %u MHz)\n", | 640 | "Unable to reset hardware; reset status %d (freq %u MHz)\n", |
641 | r, curchan->center_freq); | 641 | r, curchan->center_freq); |
642 | spin_unlock_bh(&sc->sc_pcu_lock); | 642 | ah->reset_power_on = false; |
643 | goto mutex_unlock; | ||
644 | } | 643 | } |
645 | 644 | ||
646 | /* Setup our intr mask. */ | 645 | /* Setup our intr mask. */ |
@@ -665,11 +664,8 @@ static int ath9k_start(struct ieee80211_hw *hw) | |||
665 | clear_bit(SC_OP_INVALID, &sc->sc_flags); | 664 | clear_bit(SC_OP_INVALID, &sc->sc_flags); |
666 | sc->sc_ah->is_monitoring = false; | 665 | sc->sc_ah->is_monitoring = false; |
667 | 666 | ||
668 | if (!ath_complete_reset(sc, false)) { | 667 | if (!ath_complete_reset(sc, false)) |
669 | r = -EIO; | 668 | ah->reset_power_on = false; |
670 | spin_unlock_bh(&sc->sc_pcu_lock); | ||
671 | goto mutex_unlock; | ||
672 | } | ||
673 | 669 | ||
674 | if (ah->led_pin >= 0) { | 670 | if (ah->led_pin >= 0) { |
675 | ath9k_hw_cfg_output(ah, ah->led_pin, | 671 | ath9k_hw_cfg_output(ah, ah->led_pin, |
@@ -688,12 +684,11 @@ static int ath9k_start(struct ieee80211_hw *hw) | |||
688 | if (ah->caps.pcie_lcr_extsync_en && common->bus_ops->extn_synch_en) | 684 | if (ah->caps.pcie_lcr_extsync_en && common->bus_ops->extn_synch_en) |
689 | common->bus_ops->extn_synch_en(common); | 685 | common->bus_ops->extn_synch_en(common); |
690 | 686 | ||
691 | mutex_unlock: | ||
692 | mutex_unlock(&sc->mutex); | 687 | mutex_unlock(&sc->mutex); |
693 | 688 | ||
694 | ath9k_ps_restore(sc); | 689 | ath9k_ps_restore(sc); |
695 | 690 | ||
696 | return r; | 691 | return 0; |
697 | } | 692 | } |
698 | 693 | ||
699 | static void ath9k_tx(struct ieee80211_hw *hw, | 694 | static void ath9k_tx(struct ieee80211_hw *hw, |
@@ -770,7 +765,7 @@ static void ath9k_tx(struct ieee80211_hw *hw, | |||
770 | 765 | ||
771 | return; | 766 | return; |
772 | exit: | 767 | exit: |
773 | dev_kfree_skb_any(skb); | 768 | ieee80211_free_txskb(hw, skb); |
774 | } | 769 | } |
775 | 770 | ||
776 | static void ath9k_stop(struct ieee80211_hw *hw) | 771 | static void ath9k_stop(struct ieee80211_hw *hw) |
diff --git a/drivers/net/wireless/ath/ath9k/pci.c b/drivers/net/wireless/ath/ath9k/pci.c index 0e630a99b68b..f088f4bf9a26 100644 --- a/drivers/net/wireless/ath/ath9k/pci.c +++ b/drivers/net/wireless/ath/ath9k/pci.c | |||
@@ -324,6 +324,10 @@ static int ath_pci_suspend(struct device *device) | |||
324 | static int ath_pci_resume(struct device *device) | 324 | static int ath_pci_resume(struct device *device) |
325 | { | 325 | { |
326 | struct pci_dev *pdev = to_pci_dev(device); | 326 | struct pci_dev *pdev = to_pci_dev(device); |
327 | struct ieee80211_hw *hw = pci_get_drvdata(pdev); | ||
328 | struct ath_softc *sc = hw->priv; | ||
329 | struct ath_hw *ah = sc->sc_ah; | ||
330 | struct ath_common *common = ath9k_hw_common(ah); | ||
327 | u32 val; | 331 | u32 val; |
328 | 332 | ||
329 | /* | 333 | /* |
@@ -335,6 +339,9 @@ static int ath_pci_resume(struct device *device) | |||
335 | if ((val & 0x0000ff00) != 0) | 339 | if ((val & 0x0000ff00) != 0) |
336 | pci_write_config_dword(pdev, 0x40, val & 0xffff00ff); | 340 | pci_write_config_dword(pdev, 0x40, val & 0xffff00ff); |
337 | 341 | ||
342 | ath_pci_aspm_init(common); | ||
343 | ah->reset_power_on = false; | ||
344 | |||
338 | return 0; | 345 | return 0; |
339 | } | 346 | } |
340 | 347 | ||
diff --git a/drivers/net/wireless/ath/ath9k/xmit.c b/drivers/net/wireless/ath/ath9k/xmit.c index 36618e3a5e60..741918a2027b 100644 --- a/drivers/net/wireless/ath/ath9k/xmit.c +++ b/drivers/net/wireless/ath/ath9k/xmit.c | |||
@@ -66,8 +66,7 @@ static void ath_tx_update_baw(struct ath_softc *sc, struct ath_atx_tid *tid, | |||
66 | static struct ath_buf *ath_tx_setup_buffer(struct ath_softc *sc, | 66 | static struct ath_buf *ath_tx_setup_buffer(struct ath_softc *sc, |
67 | struct ath_txq *txq, | 67 | struct ath_txq *txq, |
68 | struct ath_atx_tid *tid, | 68 | struct ath_atx_tid *tid, |
69 | struct sk_buff *skb, | 69 | struct sk_buff *skb); |
70 | bool dequeue); | ||
71 | 70 | ||
72 | enum { | 71 | enum { |
73 | MCS_HT20, | 72 | MCS_HT20, |
@@ -176,7 +175,15 @@ static void ath_tx_flush_tid(struct ath_softc *sc, struct ath_atx_tid *tid) | |||
176 | fi = get_frame_info(skb); | 175 | fi = get_frame_info(skb); |
177 | bf = fi->bf; | 176 | bf = fi->bf; |
178 | 177 | ||
179 | if (bf && fi->retries) { | 178 | if (!bf) { |
179 | bf = ath_tx_setup_buffer(sc, txq, tid, skb); | ||
180 | if (!bf) { | ||
181 | ieee80211_free_txskb(sc->hw, skb); | ||
182 | continue; | ||
183 | } | ||
184 | } | ||
185 | |||
186 | if (fi->retries) { | ||
180 | list_add_tail(&bf->list, &bf_head); | 187 | list_add_tail(&bf->list, &bf_head); |
181 | ath_tx_update_baw(sc, tid, bf->bf_state.seqno); | 188 | ath_tx_update_baw(sc, tid, bf->bf_state.seqno); |
182 | ath_tx_complete_buf(sc, bf, txq, &bf_head, &ts, 0); | 189 | ath_tx_complete_buf(sc, bf, txq, &bf_head, &ts, 0); |
@@ -305,6 +312,7 @@ static struct ath_buf *ath_tx_get_buffer(struct ath_softc *sc) | |||
305 | } | 312 | } |
306 | 313 | ||
307 | bf = list_first_entry(&sc->tx.txbuf, struct ath_buf, list); | 314 | bf = list_first_entry(&sc->tx.txbuf, struct ath_buf, list); |
315 | bf->bf_next = NULL; | ||
308 | list_del(&bf->list); | 316 | list_del(&bf->list); |
309 | 317 | ||
310 | spin_unlock_bh(&sc->tx.txbuflock); | 318 | spin_unlock_bh(&sc->tx.txbuflock); |
@@ -386,7 +394,7 @@ static void ath_tx_complete_aggr(struct ath_softc *sc, struct ath_txq *txq, | |||
386 | u16 seq_st = 0, acked_cnt = 0, txfail_cnt = 0, seq_first; | 394 | u16 seq_st = 0, acked_cnt = 0, txfail_cnt = 0, seq_first; |
387 | u32 ba[WME_BA_BMP_SIZE >> 5]; | 395 | u32 ba[WME_BA_BMP_SIZE >> 5]; |
388 | int isaggr, txfail, txpending, sendbar = 0, needreset = 0, nbad = 0; | 396 | int isaggr, txfail, txpending, sendbar = 0, needreset = 0, nbad = 0; |
389 | bool rc_update = true; | 397 | bool rc_update = true, isba; |
390 | struct ieee80211_tx_rate rates[4]; | 398 | struct ieee80211_tx_rate rates[4]; |
391 | struct ath_frame_info *fi; | 399 | struct ath_frame_info *fi; |
392 | int nframes; | 400 | int nframes; |
@@ -430,13 +438,17 @@ static void ath_tx_complete_aggr(struct ath_softc *sc, struct ath_txq *txq, | |||
430 | tidno = ieee80211_get_qos_ctl(hdr)[0] & IEEE80211_QOS_CTL_TID_MASK; | 438 | tidno = ieee80211_get_qos_ctl(hdr)[0] & IEEE80211_QOS_CTL_TID_MASK; |
431 | tid = ATH_AN_2_TID(an, tidno); | 439 | tid = ATH_AN_2_TID(an, tidno); |
432 | seq_first = tid->seq_start; | 440 | seq_first = tid->seq_start; |
441 | isba = ts->ts_flags & ATH9K_TX_BA; | ||
433 | 442 | ||
434 | /* | 443 | /* |
435 | * The hardware occasionally sends a tx status for the wrong TID. | 444 | * The hardware occasionally sends a tx status for the wrong TID. |
436 | * In this case, the BA status cannot be considered valid and all | 445 | * In this case, the BA status cannot be considered valid and all |
437 | * subframes need to be retransmitted | 446 | * subframes need to be retransmitted |
447 | * | ||
448 | * Only BlockAcks have a TID and therefore normal Acks cannot be | ||
449 | * checked | ||
438 | */ | 450 | */ |
439 | if (tidno != ts->tid) | 451 | if (isba && tidno != ts->tid) |
440 | txok = false; | 452 | txok = false; |
441 | 453 | ||
442 | isaggr = bf_isaggr(bf); | 454 | isaggr = bf_isaggr(bf); |
@@ -785,10 +797,13 @@ static enum ATH_AGGR_STATUS ath_tx_form_aggr(struct ath_softc *sc, | |||
785 | fi = get_frame_info(skb); | 797 | fi = get_frame_info(skb); |
786 | bf = fi->bf; | 798 | bf = fi->bf; |
787 | if (!fi->bf) | 799 | if (!fi->bf) |
788 | bf = ath_tx_setup_buffer(sc, txq, tid, skb, true); | 800 | bf = ath_tx_setup_buffer(sc, txq, tid, skb); |
789 | 801 | ||
790 | if (!bf) | 802 | if (!bf) { |
803 | __skb_unlink(skb, &tid->buf_q); | ||
804 | ieee80211_free_txskb(sc->hw, skb); | ||
791 | continue; | 805 | continue; |
806 | } | ||
792 | 807 | ||
793 | bf->bf_state.bf_type = BUF_AMPDU | BUF_AGGR; | 808 | bf->bf_state.bf_type = BUF_AMPDU | BUF_AGGR; |
794 | seqno = bf->bf_state.seqno; | 809 | seqno = bf->bf_state.seqno; |
@@ -1731,9 +1746,11 @@ static void ath_tx_send_ampdu(struct ath_softc *sc, struct ath_atx_tid *tid, | |||
1731 | return; | 1746 | return; |
1732 | } | 1747 | } |
1733 | 1748 | ||
1734 | bf = ath_tx_setup_buffer(sc, txctl->txq, tid, skb, false); | 1749 | bf = ath_tx_setup_buffer(sc, txctl->txq, tid, skb); |
1735 | if (!bf) | 1750 | if (!bf) { |
1751 | ieee80211_free_txskb(sc->hw, skb); | ||
1736 | return; | 1752 | return; |
1753 | } | ||
1737 | 1754 | ||
1738 | bf->bf_state.bf_type = BUF_AMPDU; | 1755 | bf->bf_state.bf_type = BUF_AMPDU; |
1739 | INIT_LIST_HEAD(&bf_head); | 1756 | INIT_LIST_HEAD(&bf_head); |
@@ -1757,16 +1774,12 @@ static void ath_tx_send_normal(struct ath_softc *sc, struct ath_txq *txq, | |||
1757 | struct ath_buf *bf; | 1774 | struct ath_buf *bf; |
1758 | 1775 | ||
1759 | bf = fi->bf; | 1776 | bf = fi->bf; |
1760 | if (!bf) | ||
1761 | bf = ath_tx_setup_buffer(sc, txq, tid, skb, false); | ||
1762 | |||
1763 | if (!bf) | ||
1764 | return; | ||
1765 | 1777 | ||
1766 | INIT_LIST_HEAD(&bf_head); | 1778 | INIT_LIST_HEAD(&bf_head); |
1767 | list_add_tail(&bf->list, &bf_head); | 1779 | list_add_tail(&bf->list, &bf_head); |
1768 | bf->bf_state.bf_type = 0; | 1780 | bf->bf_state.bf_type = 0; |
1769 | 1781 | ||
1782 | bf->bf_next = NULL; | ||
1770 | bf->bf_lastbf = bf; | 1783 | bf->bf_lastbf = bf; |
1771 | ath_tx_fill_desc(sc, bf, txq, fi->framelen); | 1784 | ath_tx_fill_desc(sc, bf, txq, fi->framelen); |
1772 | ath_tx_txqaddbuf(sc, txq, &bf_head, false); | 1785 | ath_tx_txqaddbuf(sc, txq, &bf_head, false); |
@@ -1839,8 +1852,7 @@ u8 ath_txchainmask_reduction(struct ath_softc *sc, u8 chainmask, u32 rate) | |||
1839 | static struct ath_buf *ath_tx_setup_buffer(struct ath_softc *sc, | 1852 | static struct ath_buf *ath_tx_setup_buffer(struct ath_softc *sc, |
1840 | struct ath_txq *txq, | 1853 | struct ath_txq *txq, |
1841 | struct ath_atx_tid *tid, | 1854 | struct ath_atx_tid *tid, |
1842 | struct sk_buff *skb, | 1855 | struct sk_buff *skb) |
1843 | bool dequeue) | ||
1844 | { | 1856 | { |
1845 | struct ath_common *common = ath9k_hw_common(sc->sc_ah); | 1857 | struct ath_common *common = ath9k_hw_common(sc->sc_ah); |
1846 | struct ath_frame_info *fi = get_frame_info(skb); | 1858 | struct ath_frame_info *fi = get_frame_info(skb); |
@@ -1852,7 +1864,7 @@ static struct ath_buf *ath_tx_setup_buffer(struct ath_softc *sc, | |||
1852 | bf = ath_tx_get_buffer(sc); | 1864 | bf = ath_tx_get_buffer(sc); |
1853 | if (!bf) { | 1865 | if (!bf) { |
1854 | ath_dbg(common, XMIT, "TX buffers are full\n"); | 1866 | ath_dbg(common, XMIT, "TX buffers are full\n"); |
1855 | goto error; | 1867 | return NULL; |
1856 | } | 1868 | } |
1857 | 1869 | ||
1858 | ATH_TXBUF_RESET(bf); | 1870 | ATH_TXBUF_RESET(bf); |
@@ -1881,18 +1893,12 @@ static struct ath_buf *ath_tx_setup_buffer(struct ath_softc *sc, | |||
1881 | ath_err(ath9k_hw_common(sc->sc_ah), | 1893 | ath_err(ath9k_hw_common(sc->sc_ah), |
1882 | "dma_mapping_error() on TX\n"); | 1894 | "dma_mapping_error() on TX\n"); |
1883 | ath_tx_return_buffer(sc, bf); | 1895 | ath_tx_return_buffer(sc, bf); |
1884 | goto error; | 1896 | return NULL; |
1885 | } | 1897 | } |
1886 | 1898 | ||
1887 | fi->bf = bf; | 1899 | fi->bf = bf; |
1888 | 1900 | ||
1889 | return bf; | 1901 | return bf; |
1890 | |||
1891 | error: | ||
1892 | if (dequeue) | ||
1893 | __skb_unlink(skb, &tid->buf_q); | ||
1894 | dev_kfree_skb_any(skb); | ||
1895 | return NULL; | ||
1896 | } | 1902 | } |
1897 | 1903 | ||
1898 | /* FIXME: tx power */ | 1904 | /* FIXME: tx power */ |
@@ -1921,9 +1927,14 @@ static void ath_tx_start_dma(struct ath_softc *sc, struct sk_buff *skb, | |||
1921 | */ | 1927 | */ |
1922 | ath_tx_send_ampdu(sc, tid, skb, txctl); | 1928 | ath_tx_send_ampdu(sc, tid, skb, txctl); |
1923 | } else { | 1929 | } else { |
1924 | bf = ath_tx_setup_buffer(sc, txctl->txq, tid, skb, false); | 1930 | bf = ath_tx_setup_buffer(sc, txctl->txq, tid, skb); |
1925 | if (!bf) | 1931 | if (!bf) { |
1932 | if (txctl->paprd) | ||
1933 | dev_kfree_skb_any(skb); | ||
1934 | else | ||
1935 | ieee80211_free_txskb(sc->hw, skb); | ||
1926 | return; | 1936 | return; |
1937 | } | ||
1927 | 1938 | ||
1928 | bf->bf_state.bfs_paprd = txctl->paprd; | 1939 | bf->bf_state.bfs_paprd = txctl->paprd; |
1929 | 1940 | ||
diff --git a/drivers/net/wireless/ath/carl9170/carl9170.h b/drivers/net/wireless/ath/carl9170/carl9170.h index 2aa4a59c72c8..2df17f1e49ef 100644 --- a/drivers/net/wireless/ath/carl9170/carl9170.h +++ b/drivers/net/wireless/ath/carl9170/carl9170.h | |||
@@ -303,6 +303,7 @@ struct ar9170 { | |||
303 | unsigned long queue_stop_timeout[__AR9170_NUM_TXQ]; | 303 | unsigned long queue_stop_timeout[__AR9170_NUM_TXQ]; |
304 | unsigned long max_queue_stop_timeout[__AR9170_NUM_TXQ]; | 304 | unsigned long max_queue_stop_timeout[__AR9170_NUM_TXQ]; |
305 | bool needs_full_reset; | 305 | bool needs_full_reset; |
306 | bool force_usb_reset; | ||
306 | atomic_t pending_restarts; | 307 | atomic_t pending_restarts; |
307 | 308 | ||
308 | /* interface mode settings */ | 309 | /* interface mode settings */ |
diff --git a/drivers/net/wireless/ath/carl9170/main.c b/drivers/net/wireless/ath/carl9170/main.c index 67997b39aba7..25a1e2f4f738 100644 --- a/drivers/net/wireless/ath/carl9170/main.c +++ b/drivers/net/wireless/ath/carl9170/main.c | |||
@@ -465,27 +465,26 @@ static void carl9170_restart_work(struct work_struct *work) | |||
465 | { | 465 | { |
466 | struct ar9170 *ar = container_of(work, struct ar9170, | 466 | struct ar9170 *ar = container_of(work, struct ar9170, |
467 | restart_work); | 467 | restart_work); |
468 | int err; | 468 | int err = -EIO; |
469 | 469 | ||
470 | ar->usedkeys = 0; | 470 | ar->usedkeys = 0; |
471 | ar->filter_state = 0; | 471 | ar->filter_state = 0; |
472 | carl9170_cancel_worker(ar); | 472 | carl9170_cancel_worker(ar); |
473 | 473 | ||
474 | mutex_lock(&ar->mutex); | 474 | mutex_lock(&ar->mutex); |
475 | err = carl9170_usb_restart(ar); | 475 | if (!ar->force_usb_reset) { |
476 | if (net_ratelimit()) { | 476 | err = carl9170_usb_restart(ar); |
477 | if (err) { | 477 | if (net_ratelimit()) { |
478 | dev_err(&ar->udev->dev, "Failed to restart device " | 478 | if (err) |
479 | " (%d).\n", err); | 479 | dev_err(&ar->udev->dev, "Failed to restart device (%d).\n", err); |
480 | } else { | 480 | else |
481 | dev_info(&ar->udev->dev, "device restarted " | 481 | dev_info(&ar->udev->dev, "device restarted successfully.\n"); |
482 | "successfully.\n"); | ||
483 | } | 482 | } |
484 | } | 483 | } |
485 | |||
486 | carl9170_zap_queues(ar); | 484 | carl9170_zap_queues(ar); |
487 | mutex_unlock(&ar->mutex); | 485 | mutex_unlock(&ar->mutex); |
488 | if (!err) { | 486 | |
487 | if (!err && !ar->force_usb_reset) { | ||
489 | ar->restart_counter++; | 488 | ar->restart_counter++; |
490 | atomic_set(&ar->pending_restarts, 0); | 489 | atomic_set(&ar->pending_restarts, 0); |
491 | 490 | ||
@@ -526,10 +525,10 @@ void carl9170_restart(struct ar9170 *ar, const enum carl9170_restart_reasons r) | |||
526 | if (!ar->registered) | 525 | if (!ar->registered) |
527 | return; | 526 | return; |
528 | 527 | ||
529 | if (IS_ACCEPTING_CMD(ar) && !ar->needs_full_reset) | 528 | if (!IS_ACCEPTING_CMD(ar) || ar->needs_full_reset) |
530 | ieee80211_queue_work(ar->hw, &ar->restart_work); | 529 | ar->force_usb_reset = true; |
531 | else | 530 | |
532 | carl9170_usb_reset(ar); | 531 | ieee80211_queue_work(ar->hw, &ar->restart_work); |
533 | 532 | ||
534 | /* | 533 | /* |
535 | * At this point, the device instance might have vanished/disabled. | 534 | * At this point, the device instance might have vanished/disabled. |