Changeset 27860


Ignore:
Timestamp:
2011-08-01T14:15:15+02:00 (5 years ago)
Author:
nbd
Message:

ath9k: fold patches that were merged upstream into 300-pending_work.patch

Location:
trunk/package/mac80211/patches
Files:
12 deleted
7 edited
8 moved

Legend:

Unmodified
Added
Removed
  • trunk/package/mac80211/patches/300-pending_work.patch

    r27783 r27860  
    4545  
    4646        if (test_sta_flags(sta, WLAN_STA_BLOCK_BA)) { 
     47@@ -809,7 +811,7 @@ void ieee80211_process_addba_resp(struct 
     48                 * of at least 1. 
     49                 */ 
     50                if (!buf_size) 
     51-                       goto out; 
     52+                       buf_size = 1; 
     53  
     54                if (test_and_set_bit(HT_AGG_STATE_RESPONSE_RECEIVED, 
     55                                     &tid_tx->state)) { 
    4756--- a/net/mac80211/debugfs_sta.c 
    4857+++ b/net/mac80211/debugfs_sta.c 
     
    11451154  
    11461155                /* At the least, we need to disable offchannel_ps, 
     1156--- a/drivers/net/wireless/ath/ath9k/ar5008_phy.c 
     1157+++ b/drivers/net/wireless/ath/ath9k/ar5008_phy.c 
     1158@@ -627,6 +627,11 @@ static void ar5008_hw_init_bb(struct ath 
     1159        else 
     1160                synthDelay /= 10; 
     1161  
     1162+       if (IS_CHAN_HALF_RATE(chan)) 
     1163+               synthDelay *= 2; 
     1164+       else if (IS_CHAN_QUARTER_RATE(chan)) 
     1165+               synthDelay *= 4; 
     1166+ 
     1167        REG_WRITE(ah, AR_PHY_ACTIVE, AR_PHY_ACTIVE_EN); 
     1168  
     1169        udelay(synthDelay + BASE_ACTIVATE_DELAY); 
     1170--- a/drivers/net/wireless/ath/ath9k/ar9002_hw.c 
     1171+++ b/drivers/net/wireless/ath/ath9k/ar9002_hw.c 
     1172@@ -499,45 +499,6 @@ void ar9002_hw_enable_async_fifo(struct  
     1173        } 
     1174 } 
     1175  
     1176-/* 
     1177- * If Async FIFO is enabled, the following counters change as MAC now runs 
     1178- * at 117 Mhz instead of 88/44MHz when async FIFO is disabled. 
     1179- * 
     1180- * The values below tested for ht40 2 chain. 
     1181- * Overwrite the delay/timeouts initialized in process ini. 
     1182- */ 
     1183-void ar9002_hw_update_async_fifo(struct ath_hw *ah) 
     1184-{ 
     1185-       if (AR_SREV_9287_13_OR_LATER(ah)) { 
     1186-               REG_WRITE(ah, AR_D_GBL_IFS_SIFS, 
     1187-                         AR_D_GBL_IFS_SIFS_ASYNC_FIFO_DUR); 
     1188-               REG_WRITE(ah, AR_D_GBL_IFS_SLOT, 
     1189-                         AR_D_GBL_IFS_SLOT_ASYNC_FIFO_DUR); 
     1190-               REG_WRITE(ah, AR_D_GBL_IFS_EIFS, 
     1191-                         AR_D_GBL_IFS_EIFS_ASYNC_FIFO_DUR); 
     1192- 
     1193-               REG_WRITE(ah, AR_TIME_OUT, AR_TIME_OUT_ACK_CTS_ASYNC_FIFO_DUR); 
     1194-               REG_WRITE(ah, AR_USEC, AR_USEC_ASYNC_FIFO_DUR); 
     1195- 
     1196-               REG_SET_BIT(ah, AR_MAC_PCU_LOGIC_ANALYZER, 
     1197-                           AR_MAC_PCU_LOGIC_ANALYZER_DISBUG20768); 
     1198-               REG_RMW_FIELD(ah, AR_AHB_MODE, AR_AHB_CUSTOM_BURST_EN, 
     1199-                             AR_AHB_CUSTOM_BURST_ASYNC_FIFO_VAL); 
     1200-       } 
     1201-} 
     1202- 
     1203-/* 
     1204- * We don't enable WEP aggregation on mac80211 but we keep this 
     1205- * around for HAL unification purposes. 
     1206- */ 
     1207-void ar9002_hw_enable_wep_aggregation(struct ath_hw *ah) 
     1208-{ 
     1209-       if (AR_SREV_9287_13_OR_LATER(ah)) { 
     1210-               REG_SET_BIT(ah, AR_PCU_MISC_MODE2, 
     1211-                           AR_PCU_MISC_MODE2_ENABLE_AGGWEP); 
     1212-       } 
     1213-} 
     1214- 
     1215 /* Sets up the AR5008/AR9001/AR9002 hardware familiy callbacks */ 
     1216 void ar9002_hw_attach_ops(struct ath_hw *ah) 
     1217 { 
     1218--- a/drivers/net/wireless/ath/ath9k/ar9002_phy.c 
     1219+++ b/drivers/net/wireless/ath/ath9k/ar9002_phy.c 
     1220@@ -111,7 +111,9 @@ static int ar9002_hw_set_channel(struct  
     1221  
     1222                switch (ah->eep_ops->get_eeprom(ah, EEP_FRAC_N_5G)) { 
     1223                case 0: 
     1224-                       if ((freq % 20) == 0) 
     1225+                       if (IS_CHAN_HALF_RATE(chan) || IS_CHAN_QUARTER_RATE(chan)) 
     1226+                               aModeRefSel = 0; 
     1227+                       else if ((freq % 20) == 0) 
     1228                                aModeRefSel = 3; 
     1229                        else if ((freq % 10) == 0) 
     1230                                aModeRefSel = 2; 
     1231@@ -129,8 +131,9 @@ static int ar9002_hw_set_channel(struct  
     1232                        channelSel = CHANSEL_5G(freq); 
     1233  
     1234                        /* RefDivA setting */ 
     1235-                       REG_RMW_FIELD(ah, AR_AN_SYNTH9, 
     1236-                                     AR_AN_SYNTH9_REFDIVA, refDivA); 
     1237+                       ath9k_hw_analog_shift_rmw(ah, AR_AN_SYNTH9, 
     1238+                                     AR_AN_SYNTH9_REFDIVA, 
     1239+                                     AR_AN_SYNTH9_REFDIVA_S, refDivA); 
     1240  
     1241                } 
     1242  
     1243@@ -447,26 +450,27 @@ static void ar9002_olc_init(struct ath_h 
     1244 static u32 ar9002_hw_compute_pll_control(struct ath_hw *ah, 
     1245                                         struct ath9k_channel *chan) 
     1246 { 
     1247+       int ref_div = 5; 
     1248+       int pll_div = 0x2c; 
     1249        u32 pll; 
     1250  
     1251-       pll = SM(0x5, AR_RTC_9160_PLL_REFDIV); 
     1252+       if (chan && IS_CHAN_5GHZ(chan) && !IS_CHAN_A_FAST_CLOCK(ah, chan)) { 
     1253+               if (AR_SREV_9280_20(ah)) { 
     1254+                       ref_div = 10; 
     1255+                       pll_div = 0x50; 
     1256+               } else { 
     1257+                       pll_div = 0x28; 
     1258+               } 
     1259+       } 
     1260+ 
     1261+       pll = SM(ref_div, AR_RTC_9160_PLL_REFDIV); 
     1262+       pll |= SM(pll_div, AR_RTC_9160_PLL_DIV); 
     1263  
     1264        if (chan && IS_CHAN_HALF_RATE(chan)) 
     1265                pll |= SM(0x1, AR_RTC_9160_PLL_CLKSEL); 
     1266        else if (chan && IS_CHAN_QUARTER_RATE(chan)) 
     1267                pll |= SM(0x2, AR_RTC_9160_PLL_CLKSEL); 
     1268  
     1269-       if (chan && IS_CHAN_5GHZ(chan)) { 
     1270-               if (IS_CHAN_A_FAST_CLOCK(ah, chan)) 
     1271-                       pll = 0x142c; 
     1272-               else if (AR_SREV_9280_20(ah)) 
     1273-                       pll = 0x2850; 
     1274-               else 
     1275-                       pll |= SM(0x28, AR_RTC_9160_PLL_DIV); 
     1276-       } else { 
     1277-               pll |= SM(0x2c, AR_RTC_9160_PLL_DIV); 
     1278-       } 
     1279- 
     1280        return pll; 
     1281 } 
     1282  
     1283--- a/drivers/net/wireless/ath/ath9k/hw.c 
     1284+++ b/drivers/net/wireless/ath/ath9k/hw.c 
     1285@@ -87,7 +87,10 @@ static void ath9k_hw_set_clockrate(struc 
     1286        struct ath_common *common = ath9k_hw_common(ah); 
     1287        unsigned int clockrate; 
     1288  
     1289-       if (!ah->curchan) /* should really check for CCK instead */ 
     1290+       /* AR9287 v1.3+ uses async FIFO and runs the MAC at 117 MHz */ 
     1291+       if (AR_SREV_9287(ah) && AR_SREV_9287_13_OR_LATER(ah)) 
     1292+               clockrate = 117; 
     1293+       else if (!ah->curchan) /* should really check for CCK instead */ 
     1294                clockrate = ATH9K_CLOCK_RATE_CCK; 
     1295        else if (conf->channel->band == IEEE80211_BAND_2GHZ) 
     1296                clockrate = ATH9K_CLOCK_RATE_2GHZ_OFDM; 
     1297@@ -99,6 +102,13 @@ static void ath9k_hw_set_clockrate(struc 
     1298        if (conf_is_ht40(conf)) 
     1299                clockrate *= 2; 
     1300  
     1301+       if (ah->curchan) { 
     1302+               if (IS_CHAN_HALF_RATE(ah->curchan)) 
     1303+                       clockrate /= 2; 
     1304+               if (IS_CHAN_QUARTER_RATE(ah->curchan)) 
     1305+                       clockrate /= 4; 
     1306+       } 
     1307+ 
     1308        common->clockrate = clockrate; 
     1309 } 
     1310  
     1311@@ -895,6 +905,13 @@ static void ath9k_hw_init_interrupt_mask 
     1312        } 
     1313 } 
     1314  
     1315+static void ath9k_hw_set_sifs_time(struct ath_hw *ah, u32 us) 
     1316+{ 
     1317+       u32 val = ath9k_hw_mac_to_clks(ah, us - 2); 
     1318+       val = min(val, (u32) 0xFFFF); 
     1319+       REG_WRITE(ah, AR_D_GBL_IFS_SIFS, val); 
     1320+} 
     1321+ 
     1322 static void ath9k_hw_setslottime(struct ath_hw *ah, u32 us) 
     1323 { 
     1324        u32 val = ath9k_hw_mac_to_clks(ah, us); 
     1325@@ -932,25 +949,60 @@ static bool ath9k_hw_set_global_txtimeou 
     1326  
     1327 void ath9k_hw_init_global_settings(struct ath_hw *ah) 
     1328 { 
     1329-       struct ieee80211_conf *conf = &ath9k_hw_common(ah)->hw->conf; 
     1330+       struct ath_common *common = ath9k_hw_common(ah); 
     1331+       struct ieee80211_conf *conf = &common->hw->conf; 
     1332+       const struct ath9k_channel *chan = ah->curchan; 
     1333        int acktimeout; 
     1334        int slottime; 
     1335        int sifstime; 
     1336+       int rx_lat = 0, tx_lat = 0, eifs = 0; 
     1337+       u32 reg; 
     1338  
     1339        ath_dbg(ath9k_hw_common(ah), ATH_DBG_RESET, "ah->misc_mode 0x%x\n", 
     1340                ah->misc_mode); 
     1341  
     1342+       if (!chan) 
     1343+               return; 
     1344+ 
     1345        if (ah->misc_mode != 0) 
     1346                REG_SET_BIT(ah, AR_PCU_MISC, ah->misc_mode); 
     1347  
     1348-       if (conf->channel && conf->channel->band == IEEE80211_BAND_5GHZ) 
     1349-               sifstime = 16; 
     1350-       else 
     1351-               sifstime = 10; 
     1352+       rx_lat = 37; 
     1353+       tx_lat = 54; 
     1354+ 
     1355+       if (IS_CHAN_HALF_RATE(chan)) { 
     1356+               eifs = 175; 
     1357+               rx_lat *= 2; 
     1358+               tx_lat *= 2; 
     1359+               if (IS_CHAN_A_FAST_CLOCK(ah, chan)) 
     1360+                   tx_lat += 11; 
     1361+ 
     1362+               slottime = 13; 
     1363+               sifstime = 32; 
     1364+       } else if (IS_CHAN_QUARTER_RATE(chan)) { 
     1365+               eifs = 340; 
     1366+               rx_lat *= 4; 
     1367+               tx_lat *= 4; 
     1368+               if (IS_CHAN_A_FAST_CLOCK(ah, chan)) 
     1369+                   tx_lat += 22; 
     1370+ 
     1371+               slottime = 21; 
     1372+               sifstime = 64; 
     1373+       } else { 
     1374+               eifs = REG_READ(ah, AR_D_GBL_IFS_EIFS); 
     1375+               reg = REG_READ(ah, AR_USEC); 
     1376+               rx_lat = MS(reg, AR_USEC_RX_LAT); 
     1377+               tx_lat = MS(reg, AR_USEC_TX_LAT); 
     1378+ 
     1379+               slottime = ah->slottime; 
     1380+               if (IS_CHAN_5GHZ(chan)) 
     1381+                       sifstime = 16; 
     1382+               else 
     1383+                       sifstime = 10; 
     1384+       } 
     1385  
     1386        /* As defined by IEEE 802.11-2007 17.3.8.6 */ 
     1387-       slottime = ah->slottime + 3 * ah->coverage_class; 
     1388-       acktimeout = slottime + sifstime; 
     1389+       acktimeout = slottime + sifstime + 3 * ah->coverage_class; 
     1390  
     1391        /* 
     1392         * Workaround for early ACK timeouts, add an offset to match the 
     1393@@ -962,11 +1014,20 @@ void ath9k_hw_init_global_settings(struc 
     1394        if (conf->channel && conf->channel->band == IEEE80211_BAND_2GHZ) 
     1395                acktimeout += 64 - sifstime - ah->slottime; 
     1396  
     1397-       ath9k_hw_setslottime(ah, ah->slottime); 
     1398+       ath9k_hw_set_sifs_time(ah, sifstime); 
     1399+       ath9k_hw_setslottime(ah, slottime); 
     1400        ath9k_hw_set_ack_timeout(ah, acktimeout); 
     1401        ath9k_hw_set_cts_timeout(ah, acktimeout); 
     1402        if (ah->globaltxtimeout != (u32) -1) 
     1403                ath9k_hw_set_global_txtimeout(ah, ah->globaltxtimeout); 
     1404+ 
     1405+       REG_WRITE(ah, AR_D_GBL_IFS_EIFS, ath9k_hw_mac_to_clks(ah, eifs)); 
     1406+       REG_RMW(ah, AR_USEC, 
     1407+               (common->clockrate - 1) | 
     1408+               SM(rx_lat, AR_USEC_RX_LAT) | 
     1409+               SM(tx_lat, AR_USEC_TX_LAT), 
     1410+               AR_USEC_TX_LAT | AR_USEC_RX_LAT | AR_USEC_USEC); 
     1411+ 
     1412 } 
     1413 EXPORT_SYMBOL(ath9k_hw_init_global_settings); 
     1414  
     1415@@ -1570,9 +1631,13 @@ int ath9k_hw_reset(struct ath_hw *ah, st 
     1416  
     1417        ath9k_hw_init_global_settings(ah); 
     1418  
     1419-       if (!AR_SREV_9300_20_OR_LATER(ah)) { 
     1420-               ar9002_hw_update_async_fifo(ah); 
     1421-               ar9002_hw_enable_wep_aggregation(ah); 
     1422+       if (AR_SREV_9287(ah) && AR_SREV_9287_13_OR_LATER(ah)) { 
     1423+               REG_SET_BIT(ah, AR_MAC_PCU_LOGIC_ANALYZER, 
     1424+                           AR_MAC_PCU_LOGIC_ANALYZER_DISBUG20768); 
     1425+               REG_RMW_FIELD(ah, AR_AHB_MODE, AR_AHB_CUSTOM_BURST_EN, 
     1426+                             AR_AHB_CUSTOM_BURST_ASYNC_FIFO_VAL); 
     1427+               REG_SET_BIT(ah, AR_PCU_MISC_MODE2, 
     1428+                           AR_PCU_MISC_MODE2_ENABLE_AGGWEP); 
     1429        } 
     1430  
     1431        REG_SET_BIT(ah, AR_STA_ID1, AR_STA_ID1_PRESERVE_SEQNUM); 
     1432@@ -1932,12 +1997,22 @@ EXPORT_SYMBOL(ath9k_hw_set_sta_beacon_ti 
     1433 /* HW Capabilities */ 
     1434 /*******************/ 
     1435  
     1436+static u8 fixup_chainmask(u8 chip_chainmask, u8 eeprom_chainmask) 
     1437+{ 
     1438+       eeprom_chainmask &= chip_chainmask; 
     1439+       if (eeprom_chainmask) 
     1440+               return eeprom_chainmask; 
     1441+       else 
     1442+               return chip_chainmask; 
     1443+} 
     1444+ 
     1445 int ath9k_hw_fill_cap_info(struct ath_hw *ah) 
     1446 { 
     1447        struct ath9k_hw_capabilities *pCap = &ah->caps; 
     1448        struct ath_regulatory *regulatory = ath9k_hw_regulatory(ah); 
     1449        struct ath_common *common = ath9k_hw_common(ah); 
     1450        struct ath_btcoex_hw *btcoex_hw = &ah->btcoex_hw; 
     1451+       unsigned int chip_chainmask; 
     1452  
     1453        u16 eeval; 
     1454        u8 ant_div_ctl1, tx_chainmask, rx_chainmask; 
     1455@@ -1974,6 +2049,15 @@ int ath9k_hw_fill_cap_info(struct ath_hw 
     1456        if (eeval & AR5416_OPFLAGS_11G) 
     1457                pCap->hw_caps |= ATH9K_HW_CAP_2GHZ; 
     1458  
     1459+       if (AR_SREV_9485(ah) || AR_SREV_9285(ah) || AR_SREV_9330(ah)) 
     1460+               chip_chainmask = 1; 
     1461+       else if (!AR_SREV_9280_20_OR_LATER(ah)) 
     1462+               chip_chainmask = 7; 
     1463+       else if (!AR_SREV_9300_20_OR_LATER(ah) || AR_SREV_9340(ah)) 
     1464+               chip_chainmask = 3; 
     1465+       else 
     1466+               chip_chainmask = 7; 
     1467+ 
     1468        pCap->tx_chainmask = ah->eep_ops->get_eeprom(ah, EEP_TX_MASK); 
     1469        /* 
     1470         * For AR9271 we will temporarilly uses the rx chainmax as read from 
     1471@@ -1990,6 +2074,9 @@ int ath9k_hw_fill_cap_info(struct ath_hw 
     1472                /* Use rx_chainmask from EEPROM. */ 
     1473                pCap->rx_chainmask = ah->eep_ops->get_eeprom(ah, EEP_RX_MASK); 
     1474  
     1475+       pCap->tx_chainmask = fixup_chainmask(chip_chainmask, pCap->tx_chainmask); 
     1476+       pCap->rx_chainmask = fixup_chainmask(chip_chainmask, pCap->rx_chainmask); 
     1477+ 
     1478        ah->misc_mode |= AR_PCU_MIC_NEW_LOC_ENA; 
     1479  
     1480        /* enable key search for every frame in an aggregate */ 
     1481@@ -2079,10 +2166,7 @@ int ath9k_hw_fill_cap_info(struct ath_hw 
     1482                        pCap->hw_caps |= ATH9K_HW_CAP_PAPRD; 
     1483        } else { 
     1484                pCap->tx_desc_len = sizeof(struct ath_desc); 
     1485-               if (AR_SREV_9280_20(ah) && 
     1486-                   ((ah->eep_ops->get_eeprom(ah, EEP_MINOR_REV) <= 
     1487-                     AR5416_EEP_MINOR_VER_16) || 
     1488-                    ah->eep_ops->get_eeprom(ah, EEP_FSTCLK_5G))) 
     1489+               if (AR_SREV_9280_20(ah)) 
     1490                        pCap->hw_caps |= ATH9K_HW_CAP_FASTCLOCK; 
     1491        } 
     1492  
     1493--- a/drivers/net/wireless/ath/ath9k/hw.h 
     1494+++ b/drivers/net/wireless/ath/ath9k/hw.h 
     1495@@ -983,8 +983,6 @@ void ath9k_hw_get_delta_slope_vals(struc 
     1496 void ar9002_hw_cck_chan14_spread(struct ath_hw *ah); 
     1497 int ar9002_hw_rf_claim(struct ath_hw *ah); 
     1498 void ar9002_hw_enable_async_fifo(struct ath_hw *ah); 
     1499-void ar9002_hw_update_async_fifo(struct ath_hw *ah); 
     1500-void ar9002_hw_enable_wep_aggregation(struct ath_hw *ah); 
     1501  
     1502 /* 
     1503  * Code specific to AR9003, we stuff these here to avoid callbacks 
     1504--- a/drivers/net/wireless/ath/ath9k/recv.c 
     1505+++ b/drivers/net/wireless/ath/ath9k/recv.c 
     1506@@ -814,16 +814,19 @@ static bool ath9k_rx_accept(struct ath_c 
     1507                            struct ath_rx_status *rx_stats, 
     1508                            bool *decrypt_error) 
     1509 { 
     1510-#define is_mc_or_valid_tkip_keyix ((is_mc ||                   \ 
     1511-               (rx_stats->rs_keyix != ATH9K_RXKEYIX_INVALID && \ 
     1512-               test_bit(rx_stats->rs_keyix, common->tkip_keymap)))) 
     1513- 
     1514+       bool is_mc, is_valid_tkip, strip_mic, mic_error = false; 
     1515        struct ath_hw *ah = common->ah; 
     1516        __le16 fc; 
     1517        u8 rx_status_len = ah->caps.rx_status_len; 
     1518  
     1519        fc = hdr->frame_control; 
     1520  
     1521+       is_mc = !!is_multicast_ether_addr(hdr->addr1); 
     1522+       is_valid_tkip = rx_stats->rs_keyix != ATH9K_RXKEYIX_INVALID && 
     1523+               test_bit(rx_stats->rs_keyix, common->tkip_keymap); 
     1524+       strip_mic = is_valid_tkip && !(rx_stats->rs_status & 
     1525+               (ATH9K_RXERR_DECRYPT | ATH9K_RXERR_CRC | ATH9K_RXERR_MIC)); 
     1526+ 
     1527        if (!rx_stats->rs_datalen) 
     1528                return false; 
     1529         /* 
     1530@@ -838,6 +841,11 @@ static bool ath9k_rx_accept(struct ath_c 
     1531        if (rx_stats->rs_more) 
     1532                return true; 
     1533  
     1534+       mic_error = is_valid_tkip && !ieee80211_is_ctl(fc) && 
     1535+               !ieee80211_has_morefrags(fc) && 
     1536+               !(le16_to_cpu(hdr->seq_ctrl) & IEEE80211_SCTL_FRAG) && 
     1537+               (rx_stats->rs_status & ATH9K_RXERR_MIC); 
     1538+ 
     1539        /* 
     1540         * The rx_stats->rs_status will not be set until the end of the 
     1541         * chained descriptors so it can be ignored if rs_more is set. The 
     1542@@ -845,30 +853,18 @@ static bool ath9k_rx_accept(struct ath_c 
     1543         * descriptors. 
     1544         */ 
     1545        if (rx_stats->rs_status != 0) { 
     1546-               if (rx_stats->rs_status & ATH9K_RXERR_CRC) 
     1547+               if (rx_stats->rs_status & ATH9K_RXERR_CRC) { 
     1548                        rxs->flag |= RX_FLAG_FAILED_FCS_CRC; 
     1549+                       mic_error = false; 
     1550+               } 
     1551                if (rx_stats->rs_status & ATH9K_RXERR_PHY) 
     1552                        return false; 
     1553  
     1554                if (rx_stats->rs_status & ATH9K_RXERR_DECRYPT) { 
     1555                        *decrypt_error = true; 
     1556-               } else if (rx_stats->rs_status & ATH9K_RXERR_MIC) { 
     1557-                       bool is_mc; 
     1558-                       /* 
     1559-                        * The MIC error bit is only valid if the frame 
     1560-                        * is not a control frame or fragment, and it was 
     1561-                        * decrypted using a valid TKIP key. 
     1562-                        */ 
     1563-                       is_mc = !!is_multicast_ether_addr(hdr->addr1); 
     1564- 
     1565-                       if (!ieee80211_is_ctl(fc) && 
     1566-                           !ieee80211_has_morefrags(fc) && 
     1567-                           !(le16_to_cpu(hdr->seq_ctrl) & IEEE80211_SCTL_FRAG) && 
     1568-                           is_mc_or_valid_tkip_keyix) 
     1569-                               rxs->flag |= RX_FLAG_MMIC_ERROR; 
     1570-                       else 
     1571-                               rx_stats->rs_status &= ~ATH9K_RXERR_MIC; 
     1572+                       mic_error = false; 
     1573                } 
     1574+ 
     1575                /* 
     1576                 * Reject error frames with the exception of 
     1577                 * decryption and MIC failures. For monitor mode, 
     1578@@ -886,6 +882,18 @@ static bool ath9k_rx_accept(struct ath_c 
     1579                        } 
     1580                } 
     1581        } 
     1582+ 
     1583+       /* 
     1584+        * For unicast frames the MIC error bit can have false positives, 
     1585+        * so all MIC error reports need to be validated in software. 
     1586+        * False negatives are not common, so skip software verification 
     1587+        * if the hardware considers the MIC valid. 
     1588+        */ 
     1589+       if (strip_mic) 
     1590+               rxs->flag |= RX_FLAG_MMIC_STRIPPED; 
     1591+       else if (is_mc && mic_error) 
     1592+               rxs->flag |= RX_FLAG_MMIC_ERROR; 
     1593+ 
     1594        return true; 
     1595 } 
     1596  
     1597@@ -1938,6 +1946,9 @@ int ath_rx_tasklet(struct ath_softc *sc, 
     1598                        sc->rx.rxotherant = 0; 
     1599                } 
     1600  
     1601+               if (rxs->flag & RX_FLAG_MMIC_STRIPPED) 
     1602+                       skb_trim(skb, skb->len - 8); 
     1603+ 
     1604                spin_lock_irqsave(&sc->sc_pm_lock, flags); 
     1605  
     1606                if ((sc->ps_flags & (PS_WAIT_FOR_BEACON | 
     1607--- a/drivers/net/wireless/ath/ath9k/reg.h 
     1608+++ b/drivers/net/wireless/ath/ath9k/reg.h 
     1609@@ -600,7 +600,6 @@ 
     1610  
     1611 #define AR_D_GBL_IFS_SIFS         0x1030 
     1612 #define AR_D_GBL_IFS_SIFS_M       0x0000FFFF 
     1613-#define AR_D_GBL_IFS_SIFS_ASYNC_FIFO_DUR 0x000003AB 
     1614 #define AR_D_GBL_IFS_SIFS_RESV0   0xFFFFFFFF 
     1615  
     1616 #define AR_D_TXBLK_BASE            0x1038 
     1617@@ -616,12 +615,10 @@ 
     1618 #define AR_D_GBL_IFS_SLOT         0x1070 
     1619 #define AR_D_GBL_IFS_SLOT_M       0x0000FFFF 
     1620 #define AR_D_GBL_IFS_SLOT_RESV0   0xFFFF0000 
     1621-#define AR_D_GBL_IFS_SLOT_ASYNC_FIFO_DUR   0x00000420 
     1622  
     1623 #define AR_D_GBL_IFS_EIFS         0x10b0 
     1624 #define AR_D_GBL_IFS_EIFS_M       0x0000FFFF 
     1625 #define AR_D_GBL_IFS_EIFS_RESV0   0xFFFF0000 
     1626-#define AR_D_GBL_IFS_EIFS_ASYNC_FIFO_DUR   0x0000A5EB 
     1627  
     1628 #define AR_D_GBL_IFS_MISC        0x10f0 
     1629 #define AR_D_GBL_IFS_MISC_LFSR_SLICE_SEL        0x00000007 
     1630@@ -1477,7 +1474,6 @@ enum { 
     1631 #define AR_TIME_OUT_ACK_S    0 
     1632 #define AR_TIME_OUT_CTS      0x3FFF0000 
     1633 #define AR_TIME_OUT_CTS_S    16 
     1634-#define AR_TIME_OUT_ACK_CTS_ASYNC_FIFO_DUR    0x16001D56 
     1635  
     1636 #define AR_RSSI_THR          0x8018 
     1637 #define AR_RSSI_THR_MASK     0x000000FF 
     1638@@ -1493,7 +1489,6 @@ enum { 
     1639 #define AR_USEC_TX_LAT_S     14 
     1640 #define AR_USEC_RX_LAT       0x1F800000 
     1641 #define AR_USEC_RX_LAT_S     23 
     1642-#define AR_USEC_ASYNC_FIFO_DUR    0x12e00074 
     1643  
     1644 #define AR_RESET_TSF        0x8020 
     1645 #define AR_RESET_TSF_ONCE   0x01000000 
  • trunk/package/mac80211/patches/403-ath9k-fix-invalid-mac-address-handling.patch

    r27275 r27860  
    99  
    1010 #include "hw.h" 
    11 @@ -443,8 +444,16 @@ static int ath9k_hw_init_macaddr(struct  
     11@@ -453,8 +454,16 @@ static int ath9k_hw_init_macaddr(struct  
    1212                common->macaddr[2 * i] = eeval >> 8; 
    1313                common->macaddr[2 * i + 1] = eeval & 0xff; 
  • trunk/package/mac80211/patches/510-ath9k_intr_mitigation_tweak.patch

    r27275 r27860  
    11--- a/drivers/net/wireless/ath/ath9k/hw.c 
    22+++ b/drivers/net/wireless/ath/ath9k/hw.c 
    3 @@ -1591,8 +1591,8 @@ int ath9k_hw_reset(struct ath_hw *ah, st 
     3@@ -1656,8 +1656,8 @@ int ath9k_hw_reset(struct ath_hw *ah, st 
    44        REG_WRITE(ah, AR_OBS, 8); 
    55  
  • trunk/package/mac80211/patches/511-ath9k_increase_bcbuf.patch

    r27275 r27860  
    1212--- a/drivers/net/wireless/ath/ath9k/hw.c 
    1313+++ b/drivers/net/wireless/ath/ath9k/hw.c 
    14 @@ -364,8 +364,8 @@ static void ath9k_hw_init_config(struct  
     14@@ -374,8 +374,8 @@ static void ath9k_hw_init_config(struct  
    1515 { 
    1616        int i; 
  • trunk/package/mac80211/patches/530-ath9k_noise_dbm_fixup.patch

    r27275 r27860  
    3939--- a/drivers/net/wireless/ath/ath9k/hw.c 
    4040+++ b/drivers/net/wireless/ath/ath9k/hw.c 
    41 @@ -1427,6 +1427,7 @@ int ath9k_hw_reset(struct ath_hw *ah, st 
     41@@ -1488,6 +1488,7 @@ int ath9k_hw_reset(struct ath_hw *ah, st 
    4242                memset(caldata, 0, sizeof(*caldata)); 
    4343                ath9k_init_nfcal_hist_buffer(ah, chan); 
     
    7070--- a/drivers/net/wireless/ath/ath9k/recv.c 
    7171+++ b/drivers/net/wireless/ath/ath9k/recv.c 
    72 @@ -986,6 +986,8 @@ static int ath9k_rx_skb_preprocess(struc 
     72@@ -994,6 +994,8 @@ static int ath9k_rx_skb_preprocess(struc 
    7373                                   struct ieee80211_rx_status *rx_status, 
    7474                                   bool *decrypt_error) 
     
    7979  
    8080        /* 
    81 @@ -1006,7 +1008,7 @@ static int ath9k_rx_skb_preprocess(struc 
     81@@ -1014,7 +1016,7 @@ static int ath9k_rx_skb_preprocess(struc 
    8282  
    8383        rx_status->band = hw->conf.channel->band; 
  • trunk/package/mac80211/patches/554-ath9k_test_txpower.patch

    r27855 r27860  
    2323 EXPORT_SYMBOL(ath9k_hw_set_txpowerlimit); 
    2424  
    25  
  • trunk/package/mac80211/patches/820-b43-backport.patch

    r27734 r27860  
    310310--- a/drivers/net/wireless/b43/dma.c 
    311311+++ b/drivers/net/wireless/b43/dma.c 
    312 @@ -174,7 +174,7 @@ static void op64_fill_descriptor(struct 
     312@@ -174,7 +174,7 @@ static void op64_fill_descriptor(struct  
    313313        addrhi = (((u64) dmaaddr >> 32) & ~SSB_DMA_TRANSLATION_MASK); 
    314314        addrext = (((u64) dmaaddr >> 32) & SSB_DMA_TRANSLATION_MASK) 
  • trunk/package/mac80211/patches/850-b43-add-core-rev-17-used-on-bcma-SoC.patch

    r27734 r27860  
    1212--- a/drivers/net/wireless/b43/main.c 
    1313+++ b/drivers/net/wireless/b43/main.c 
    14 @@ -120,6 +120,7 @@ MODULE_PARM_DESC(pio, "Use PIO accesses 
     14@@ -120,6 +120,7 @@ MODULE_PARM_DESC(pio, "Use PIO accesses  
    1515  
    1616 #ifdef CONFIG_B43_BCMA 
Note: See TracChangeset for help on using the changeset viewer.