diff --git a/sys/net80211/ieee80211.c b/sys/net80211/ieee80211.c index 9b1fa0b0fadf..69e564b63f7a 100644 --- a/sys/net80211/ieee80211.c +++ b/sys/net80211/ieee80211.c @@ -184,6 +184,8 @@ ieee80211_ifattach(struct ieee80211com *ic) if (ic->ic_caps & IEEE80211_C_WME) ic->ic_flags |= IEEE80211_F_WME; #endif + if (ic->ic_caps & IEEE80211_C_BURST) + ic->ic_flags |= IEEE80211_F_BURST; (void) ieee80211_setmode(ic, ic->ic_curmode); if (ic->ic_bintval == 0) diff --git a/sys/net80211/ieee80211_ioctl.c b/sys/net80211/ieee80211_ioctl.c index 4c1aac2cd234..0ec45c9d9f8a 100644 --- a/sys/net80211/ieee80211_ioctl.c +++ b/sys/net80211/ieee80211_ioctl.c @@ -1489,6 +1489,9 @@ ieee80211_ioctl_get80211(struct ieee80211com *ic, u_long cmd, struct ieee80211re case IEEE80211_IOC_MACCMD: error = ieee80211_ioctl_getmaccmd(ic, ireq); break; + case IEEE80211_IOC_BURST: + ireq->i_val = (ic->ic_flags & IEEE80211_F_BURST) != 0; + break; default: error = EINVAL; break; @@ -2382,6 +2385,15 @@ ieee80211_ioctl_set80211(struct ieee80211com *ic, u_long cmd, struct ieee80211re ic->ic_fragthreshold = ireq->i_val; error = IS_UP(ic) ? ic->ic_reset(ic->ic_ifp) : 0; break; + case IEEE80211_IOC_BURST: + if (ireq->i_val) { + if ((ic->ic_caps & IEEE80211_C_BURST) == 0) + return EINVAL; + ic->ic_flags |= IEEE80211_F_BURST; + } else + ic->ic_flags &= ~IEEE80211_F_BURST; + error = ENETRESET; /* XXX maybe not for station? */ + break; default: error = EINVAL; break; diff --git a/sys/net80211/ieee80211_ioctl.h b/sys/net80211/ieee80211_ioctl.h index 86da41ecf314..98fe16f3fbaa 100644 --- a/sys/net80211/ieee80211_ioctl.h +++ b/sys/net80211/ieee80211_ioctl.h @@ -444,6 +444,7 @@ struct ieee80211req { #define IEEE80211_IOC_PUREG 56 /* pure 11g (no 11b stations) */ #define IEEE80211_IOC_MCAST_RATE 72 /* tx rate for mcast frames */ #define IEEE80211_IOC_FRAGTHRESHOLD 73 /* tx fragmentation threshold */ +#define IEEE80211_IOC_BURST 75 /* packet bursting */ /* * Scan result data returned for IEEE80211_IOC_SCAN_RESULTS. diff --git a/sys/net80211/ieee80211_proto.c b/sys/net80211/ieee80211_proto.c index f7834f91d2d6..991a6c28f4d3 100644 --- a/sys/net80211/ieee80211_proto.c +++ b/sys/net80211/ieee80211_proto.c @@ -752,7 +752,7 @@ ieee80211_wme_updateparams_locked(struct ieee80211com *ic) chanp->wmep_logcwmax = bssp->wmep_logcwmax = phyParam[ic->ic_curmode].logcwmax; chanp->wmep_txopLimit = bssp->wmep_txopLimit = - (ic->ic_caps & IEEE80211_C_BURST) ? + (ic->ic_flags & IEEE80211_F_BURST) ? phyParam[ic->ic_curmode].txopLimit : 0; IEEE80211_DPRINTF(ic, IEEE80211_MSG_WME, "%s: %s [acm %u aifsn %u log2(cwmin) %u " diff --git a/sys/net80211/ieee80211_var.h b/sys/net80211/ieee80211_var.h index 3c918f504ac6..e056a3f4f7f6 100644 --- a/sys/net80211/ieee80211_var.h +++ b/sys/net80211/ieee80211_var.h @@ -212,6 +212,7 @@ struct ieee80211com { /* NB: bits 0x4c available */ #define IEEE80211_F_FF 0x00000001 /* CONF: ATH FF enabled */ #define IEEE80211_F_TURBOP 0x00000002 /* CONF: ATH Turbo enabled*/ +#define IEEE80211_F_BURST 0x00000004 /* CONF: bursting enabled */ /* NB: this is intentionally setup to be IEEE80211_CAPINFO_PRIVACY */ #define IEEE80211_F_PRIVACY 0x00000010 /* CONF: privacy enabled */ #define IEEE80211_F_PUREG 0x00000020 /* CONF: 11g w/o 11b sta's */