Mercurial > illumos > illumos-gate
changeset 9948:5ece0f7c6e83
6839271 iwh doesn't drop AP that is out of range
author | fei feng - Sun Microsystems - Beijing China <Fei.Feng@Sun.COM> |
---|---|
date | Tue, 23 Jun 2009 09:40:11 +0800 |
parents | 56695b51ca83 |
children | 0b51f50e7928 |
files | usr/src/uts/common/io/iwh/iwh.c usr/src/uts/common/io/iwh/iwh_var.h |
diffstat | 2 files changed, 24 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/usr/src/uts/common/io/iwh/iwh.c Tue Jun 23 09:19:30 2009 +0800 +++ b/usr/src/uts/common/io/iwh/iwh.c Tue Jun 23 09:40:11 2009 +0800 @@ -2601,6 +2601,23 @@ sc->sc_flags |= IWH_F_FW_INIT; cv_signal(&sc->sc_ucode_cv); break; + + case MISSED_BEACONS_NOTIFICATION: + { + struct iwh_beacon_missed *miss = + (struct iwh_beacon_missed *)(desc + 1); + + if ((ic->ic_state == IEEE80211_S_RUN) && + (LE_32(miss->consecutive) > 10)) { + cmn_err(CE_NOTE, "iwh: iwh_rx_softintr(): " + "beacon missed %d/%d\n", + LE_32(miss->consecutive), + LE_32(miss->total)); + (void) ieee80211_new_state(ic, + IEEE80211_S_INIT, -1); + } + break; + } } sc->sc_rxq.cur = (sc->sc_rxq.cur + 1) % RX_QUEUE_SIZE;
--- a/usr/src/uts/common/io/iwh/iwh_var.h Tue Jun 23 09:19:30 2009 +0800 +++ b/usr/src/uts/common/io/iwh/iwh_var.h Tue Jun 23 09:40:11 2009 +0800 @@ -101,6 +101,13 @@ uint8_t buf[128]; }; +struct iwh_beacon_missed { + uint32_t consecutive; + uint32_t total; + uint32_t expected; + uint32_t received; +}; + typedef struct iwh_softc { struct ieee80211com sc_ic; dev_info_t *sc_dip;