| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (c) 2008-2009 Atheros Communications Inc. | 2 * Copyright (c) 2008-2009 Atheros Communications Inc. |
| 3 * | 3 * |
| 4 * Permission to use, copy, modify, and/or distribute this software for any | 4 * Permission to use, copy, modify, and/or distribute this software for any |
| 5 * purpose with or without fee is hereby granted, provided that the above | 5 * purpose with or without fee is hereby granted, provided that the above |
| 6 * copyright notice and this permission notice appear in all copies. | 6 * copyright notice and this permission notice appear in all copies. |
| 7 * | 7 * |
| 8 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES | 8 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES |
| 9 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF | 9 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF |
| 10 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR | 10 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR |
| (...skipping 10 matching lines...) Expand all Loading... |
| 21 /* | 21 /* |
| 22 * This function will modify certain transmit queue properties depending on | 22 * This function will modify certain transmit queue properties depending on |
| 23 * the operating mode of the station (AP or AdHoc). Parameters are AIFS | 23 * the operating mode of the station (AP or AdHoc). Parameters are AIFS |
| 24 * settings and channel width min/max | 24 * settings and channel width min/max |
| 25 */ | 25 */ |
| 26 int ath_beaconq_config(struct ath_softc *sc) | 26 int ath_beaconq_config(struct ath_softc *sc) |
| 27 { | 27 { |
| 28 struct ath_hw *ah = sc->sc_ah; | 28 struct ath_hw *ah = sc->sc_ah; |
| 29 struct ath_common *common = ath9k_hw_common(ah); | 29 struct ath_common *common = ath9k_hw_common(ah); |
| 30 struct ath9k_tx_queue_info qi, qi_be; | 30 struct ath9k_tx_queue_info qi, qi_be; |
| 31 » int qnum; | 31 » struct ath_txq *txq; |
| 32 | 32 |
| 33 ath9k_hw_get_txq_props(ah, sc->beacon.beaconq, &qi); | 33 ath9k_hw_get_txq_props(ah, sc->beacon.beaconq, &qi); |
| 34 if (sc->sc_ah->opmode == NL80211_IFTYPE_AP) { | 34 if (sc->sc_ah->opmode == NL80211_IFTYPE_AP) { |
| 35 /* Always burst out beacon and CAB traffic. */ | 35 /* Always burst out beacon and CAB traffic. */ |
| 36 qi.tqi_aifs = 1; | 36 qi.tqi_aifs = 1; |
| 37 qi.tqi_cwmin = 0; | 37 qi.tqi_cwmin = 0; |
| 38 qi.tqi_cwmax = 0; | 38 qi.tqi_cwmax = 0; |
| 39 } else { | 39 } else { |
| 40 /* Adhoc mode; important thing is to use 2x cwmin. */ | 40 /* Adhoc mode; important thing is to use 2x cwmin. */ |
| 41 » » qnum = sc->tx.hwq_map[WME_AC_BE]; | 41 » » txq = sc->tx.txq_map[WME_AC_BE]; |
| 42 » » ath9k_hw_get_txq_props(ah, qnum, &qi_be); | 42 » » ath9k_hw_get_txq_props(ah, txq->axq_qnum, &qi_be); |
| 43 qi.tqi_aifs = qi_be.tqi_aifs; | 43 qi.tqi_aifs = qi_be.tqi_aifs; |
| 44 qi.tqi_cwmin = 4*qi_be.tqi_cwmin; | 44 qi.tqi_cwmin = 4*qi_be.tqi_cwmin; |
| 45 qi.tqi_cwmax = qi_be.tqi_cwmax; | 45 qi.tqi_cwmax = qi_be.tqi_cwmax; |
| 46 } | 46 } |
| 47 | 47 |
| 48 if (!ath9k_hw_set_txq_props(ah, sc->beacon.beaconq, &qi)) { | 48 if (!ath9k_hw_set_txq_props(ah, sc->beacon.beaconq, &qi)) { |
| 49 ath_print(common, ATH_DBG_FATAL, | 49 ath_print(common, ATH_DBG_FATAL, |
| 50 "Unable to update h/w beacon queue parameters\n"); | 50 "Unable to update h/w beacon queue parameters\n"); |
| 51 return 0; | 51 return 0; |
| 52 } else { | 52 } else { |
| (...skipping 306 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 359 sc->beacon.bmisscnt++; | 359 sc->beacon.bmisscnt++; |
| 360 | 360 |
| 361 if (sc->beacon.bmisscnt < BSTUCK_THRESH) { | 361 if (sc->beacon.bmisscnt < BSTUCK_THRESH) { |
| 362 ath_print(common, ATH_DBG_BEACON, | 362 ath_print(common, ATH_DBG_BEACON, |
| 363 "missed %u consecutive beacons\n", | 363 "missed %u consecutive beacons\n", |
| 364 sc->beacon.bmisscnt); | 364 sc->beacon.bmisscnt); |
| 365 } else if (sc->beacon.bmisscnt >= BSTUCK_THRESH) { | 365 } else if (sc->beacon.bmisscnt >= BSTUCK_THRESH) { |
| 366 ath_print(common, ATH_DBG_BEACON, | 366 ath_print(common, ATH_DBG_BEACON, |
| 367 "beacon is officially stuck\n"); | 367 "beacon is officially stuck\n"); |
| 368 sc->sc_flags |= SC_OP_TSF_RESET; | 368 sc->sc_flags |= SC_OP_TSF_RESET; |
| 369 » » » ath_reset(sc, false); | 369 » » » ath_reset(sc, true); |
| 370 } | 370 } |
| 371 | 371 |
| 372 return; | 372 return; |
| 373 } | 373 } |
| 374 | 374 |
| 375 if (sc->beacon.bmisscnt != 0) { | 375 if (sc->beacon.bmisscnt != 0) { |
| 376 ath_print(common, ATH_DBG_BEACON, | 376 ath_print(common, ATH_DBG_BEACON, |
| 377 "resume beacon xmit after %u misses\n", | 377 "resume beacon xmit after %u misses\n", |
| 378 sc->beacon.bmisscnt); | 378 sc->beacon.bmisscnt); |
| 379 sc->beacon.bmisscnt = 0; | 379 sc->beacon.bmisscnt = 0; |
| (...skipping 351 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 731 ath_beacon_config_sta(sc, cur_conf); | 731 ath_beacon_config_sta(sc, cur_conf); |
| 732 break; | 732 break; |
| 733 default: | 733 default: |
| 734 ath_print(common, ATH_DBG_CONFIG, | 734 ath_print(common, ATH_DBG_CONFIG, |
| 735 "Unsupported beaconing mode\n"); | 735 "Unsupported beaconing mode\n"); |
| 736 return; | 736 return; |
| 737 } | 737 } |
| 738 | 738 |
| 739 sc->sc_flags |= SC_OP_BEACONS; | 739 sc->sc_flags |= SC_OP_BEACONS; |
| 740 } | 740 } |
| OLD | NEW |