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;