change ic_modecaps to a bit vector and use setbit, et. al.

This commit is contained in:
Sam Leffler 2007-03-11 22:37:32 +00:00
parent 4905cea5f2
commit 6dbd16f1cc
5 changed files with 35 additions and 40 deletions

View File

@ -687,7 +687,7 @@ ndis_attach(dev)
ic->ic_opmode = IEEE80211_M_STA;
ic->ic_caps = IEEE80211_C_IBSS;
ic->ic_state = IEEE80211_S_ASSOC;
ic->ic_modecaps = (1<<IEEE80211_MODE_AUTO);
setbit(ic->ic_modecaps, IEEE80211_MODE_AUTO);
len = 0;
r = ndis_get_info(sc, OID_802_11_NETWORK_TYPES_SUPPORTED,
NULL, &len);
@ -705,13 +705,13 @@ ndis_attach(dev)
switch (ntl->ntl_type[i]) {
case NDIS_80211_NETTYPE_11FH:
case NDIS_80211_NETTYPE_11DS:
ic->ic_modecaps |= (1<<IEEE80211_MODE_11B);
setbit(ic->ic_modecaps, IEEE80211_MODE_11B);
break;
case NDIS_80211_NETTYPE_11OFDM5:
ic->ic_modecaps |= (1<<IEEE80211_MODE_11A);
setbit(ic->ic_modecaps, IEEE80211_MODE_11A);
break;
case NDIS_80211_NETTYPE_11OFDM24:
ic->ic_modecaps |= (1<<IEEE80211_MODE_11G);
setbit(ic->ic_modecaps, IEEE80211_MODE_11G);
break;
default:
break;
@ -750,11 +750,11 @@ ndis_attach(dev)
ic->ic_sup_rates[x].rs_nrates++
ic->ic_curmode = IEEE80211_MODE_AUTO;
if (ic->ic_modecaps & (1<<IEEE80211_MODE_11A))
if (isset(ic->ic_modecaps, IEEE80211_MODE_11A))
ic->ic_sup_rates[IEEE80211_MODE_11A].rs_nrates = 0;
if (ic->ic_modecaps & (1<<IEEE80211_MODE_11B))
if (isset(ic->ic_modecaps, IEEE80211_MODE_11B))
ic->ic_sup_rates[IEEE80211_MODE_11B].rs_nrates = 0;
if (ic->ic_modecaps & (1<<IEEE80211_MODE_11G))
if (isset(ic->ic_modecaps, IEEE80211_MODE_11G))
ic->ic_sup_rates[IEEE80211_MODE_11G].rs_nrates = 0;
for (i = 0; i < len; i++) {
switch (rates[i] & IEEE80211_RATE_VAL) {
@ -763,11 +763,10 @@ ndis_attach(dev)
case 11:
case 10:
case 22:
if (!(ic->ic_modecaps &
(1<<IEEE80211_MODE_11B))) {
if (isclr(ic->ic_modecaps, IEEE80211_MODE_11B)) {
/* Lazy-init 802.11b. */
ic->ic_modecaps |=
(1<<IEEE80211_MODE_11B);
setbit(ic->ic_modecaps,
IEEE80211_MODE_11B);
ic->ic_sup_rates[IEEE80211_MODE_11B].
rs_nrates = 0;
}
@ -775,11 +774,11 @@ ndis_attach(dev)
INCRATE(IEEE80211_MODE_11B);
break;
default:
if (ic->ic_modecaps & (1<<IEEE80211_MODE_11A)) {
if (isset(ic->ic_modecaps, IEEE80211_MODE_11A)) {
SETRATE(IEEE80211_MODE_11A, rates[i]);
INCRATE(IEEE80211_MODE_11A);
}
if (ic->ic_modecaps & (1<<IEEE80211_MODE_11G)) {
if (isset(ic->ic_modecaps, IEEE80211_MODE_11G)) {
SETRATE(IEEE80211_MODE_11G, rates[i]);
INCRATE(IEEE80211_MODE_11G);
}
@ -794,7 +793,7 @@ ndis_attach(dev)
* just cheat here. Just how in the heck do
* we detect turbo modes, though?
*/
if (ic->ic_modecaps & (1<<IEEE80211_MODE_11B)) {
if (isset(ic->ic_modecaps, IEEE80211_MODE_11B)) {
TESTSETRATE(IEEE80211_MODE_11B,
IEEE80211_RATE_BASIC|2);
TESTSETRATE(IEEE80211_MODE_11B,
@ -804,13 +803,13 @@ ndis_attach(dev)
TESTSETRATE(IEEE80211_MODE_11B,
IEEE80211_RATE_BASIC|22);
}
if (ic->ic_modecaps & (1<<IEEE80211_MODE_11G)) {
if (isset(ic->ic_modecaps, IEEE80211_MODE_11G)) {
TESTSETRATE(IEEE80211_MODE_11G, 47);
TESTSETRATE(IEEE80211_MODE_11G, 72);
TESTSETRATE(IEEE80211_MODE_11G, 96);
TESTSETRATE(IEEE80211_MODE_11G, 108);
}
if (ic->ic_modecaps & (1<<IEEE80211_MODE_11A)) {
if (isset(ic->ic_modecaps, IEEE80211_MODE_11A)) {
TESTSETRATE(IEEE80211_MODE_11A, 47);
TESTSETRATE(IEEE80211_MODE_11A, 72);
TESTSETRATE(IEEE80211_MODE_11A, 96);
@ -2629,7 +2628,7 @@ ndis_getstate_80211(sc)
device_printf (sc->ndis_dev, "get link speed failed: %d\n",
rval);
if (ic->ic_modecaps & (1<<IEEE80211_MODE_11B)) {
if (isset(ic->ic_modecaps, IEEE80211_MODE_11B)) {
ic->ic_bss->ni_rates = ic->ic_sup_rates[IEEE80211_MODE_11B];
for (i = 0; i < ic->ic_bss->ni_rates.rs_nrates; i++) {
if ((ic->ic_bss->ni_rates.rs_rates[i] &
@ -2639,7 +2638,7 @@ ndis_getstate_80211(sc)
}
if (i == ic->ic_bss->ni_rates.rs_nrates &&
ic->ic_modecaps & (1<<IEEE80211_MODE_11G)) {
isset(ic->ic_modecaps, IEEE80211_MODE_11G)) {
ic->ic_bss->ni_rates = ic->ic_sup_rates[IEEE80211_MODE_11G];
for (i = 0; i < ic->ic_bss->ni_rates.rs_nrates; i++) {
if ((ic->ic_bss->ni_rates.rs_rates[i] &

View File

@ -2707,8 +2707,6 @@ set_scan_type(struct iwi_scan_ext *scan, int ix, int scan_type)
static int
iwi_scan(struct iwi_softc *sc)
{
#define IEEE80211_MODE_5GHZ (1<<IEEE80211_MODE_11A)
#define IEEE80211_MODE_2GHZ ((1<<IEEE80211_MODE_11B)|1<<IEEE80211_MODE_11G)
struct ieee80211com *ic = &sc->sc_ic;
const struct ieee80211_channel *c;
struct iwi_scan_ext scan;
@ -2743,7 +2741,7 @@ iwi_scan(struct iwi_softc *sc)
scan_type = IWI_SCAN_TYPE_BROADCAST;
ix = 0;
if (ic->ic_modecaps & IEEE80211_MODE_5GHZ) {
if (isset(ic->ic_modecaps, IEEE80211_MODE_11A)) {
start = ix;
for (i = 0; i <= IEEE80211_CHAN_MAX; i++) {
c = &ic->ic_channels[i];
@ -2767,7 +2765,7 @@ iwi_scan(struct iwi_softc *sc)
ix++;
}
}
if (ic->ic_modecaps & IEEE80211_MODE_2GHZ) {
if (isset(ic->ic_modecaps, IEEE80211_MODE_11B)) {
start = ix;
for (i = 0; i <= IEEE80211_CHAN_MAX; i++) {
c = &ic->ic_channels[i];
@ -2795,8 +2793,6 @@ iwi_scan(struct iwi_softc *sc)
sc->sc_ifp->if_timer = 1;
sc->flags |= IWI_FLAG_SCANNING;
return iwi_cmd(sc, IWI_CMD_SCAN_EXT, &scan, sizeof scan);
#undef IEEE80211_MODE_5GHZ
#undef IEEE80211_MODE_2GHZ
}
static void

View File

@ -144,7 +144,7 @@ static void
ieee80211_chan_init(struct ieee80211com *ic)
{
#define DEFAULTRATES(m, def) do { \
if ((ic->ic_modecaps & (1<<m)) && ic->ic_sup_rates[m].rs_nrates == 0) \
if (isset(ic->ic_modecaps, m) && ic->ic_sup_rates[m].rs_nrates == 0) \
ic->ic_sup_rates[m] = def; \
} while (0)
struct ifnet *ifp = ic->ic_ifp;
@ -152,7 +152,7 @@ ieee80211_chan_init(struct ieee80211com *ic)
int i;
memset(ic->ic_chan_avail, 0, sizeof(ic->ic_chan_avail));
ic->ic_modecaps = 1<<IEEE80211_MODE_AUTO;
setbit(ic->ic_modecaps, IEEE80211_MODE_AUTO);
for (i = 0; i <= IEEE80211_CHAN_MAX; i++) {
c = &ic->ic_channels[i];
if (c->ic_flags) {
@ -171,17 +171,17 @@ ieee80211_chan_init(struct ieee80211com *ic)
* Identify mode capabilities.
*/
if (IEEE80211_IS_CHAN_A(c))
ic->ic_modecaps |= 1<<IEEE80211_MODE_11A;
setbit(ic->ic_modecaps, IEEE80211_MODE_11A);
if (IEEE80211_IS_CHAN_B(c))
ic->ic_modecaps |= 1<<IEEE80211_MODE_11B;
setbit(ic->ic_modecaps, IEEE80211_MODE_11B);
if (IEEE80211_IS_CHAN_ANYG(c))
ic->ic_modecaps |= 1<<IEEE80211_MODE_11G;
setbit(ic->ic_modecaps, IEEE80211_MODE_11G);
if (IEEE80211_IS_CHAN_FHSS(c))
ic->ic_modecaps |= 1<<IEEE80211_MODE_FH;
setbit(ic->ic_modecaps, IEEE80211_MODE_FH);
if (IEEE80211_IS_CHAN_T(c))
ic->ic_modecaps |= 1<<IEEE80211_MODE_TURBO_A;
setbit(ic->ic_modecaps, IEEE80211_MODE_TURBO_A);
if (IEEE80211_IS_CHAN_108G(c))
ic->ic_modecaps |= 1<<IEEE80211_MODE_TURBO_G;
setbit(ic->ic_modecaps, IEEE80211_MODE_TURBO_G);
if (ic->ic_curchan == NULL) {
/* arbitrarily pick the first channel */
ic->ic_curchan = &ic->ic_channels[i];
@ -447,7 +447,7 @@ ieee80211_media_init(struct ieee80211com *ic,
IFM_IEEE80211_11A | IFM_IEEE80211_TURBO,
IFM_IEEE80211_11G | IFM_IEEE80211_TURBO,
};
if ((ic->ic_modecaps & (1<<mode)) == 0)
if (isclr(ic->ic_modecaps, mode))
continue;
mopt = mopts[mode];
ADD(ic, IFM_AUTO, mopt); /* e.g. 11a auto */
@ -537,7 +537,7 @@ ieee80211_announce(struct ieee80211com *ic)
struct ieee80211_rateset *rs;
for (mode = IEEE80211_MODE_11A; mode < IEEE80211_MODE_MAX; mode++) {
if ((ic->ic_modecaps & (1<<mode)) == 0)
if (isclr(ic->ic_modecaps, mode))
continue;
if_printf(ifp, "%s rates: ", ieee80211_phymode_name[mode]);
rs = &ic->ic_sup_rates[mode];
@ -650,7 +650,7 @@ ieee80211_media_change(struct ifnet *ifp)
/*
* Validate requested mode is available.
*/
if ((ic->ic_modecaps & (1<<newphymode)) == 0)
if (isclr(ic->ic_modecaps, newphymode))
return EINVAL;
/*
@ -673,7 +673,7 @@ ieee80211_media_change(struct ifnet *ifp)
*/
for (j = IEEE80211_MODE_11A;
j < IEEE80211_MODE_MAX; j++) {
if ((ic->ic_modecaps & (1<<j)) == 0)
if (isclr(ic->ic_modecaps, j))
continue;
i = findrate(ic, j, newrate);
if (i != -1) {
@ -714,7 +714,7 @@ ieee80211_media_change(struct ifnet *ifp)
if (newopmode == IEEE80211_M_HOSTAP &&
newphymode == IEEE80211_MODE_AUTO) {
for (j = IEEE80211_MODE_11A; j < IEEE80211_MODE_MAX; j++)
if (ic->ic_modecaps & (1<<j)) {
if (isset(ic->ic_modecaps, j)) {
newphymode = j;
break;
}
@ -894,7 +894,7 @@ ieee80211_setmode(struct ieee80211com *ic, enum ieee80211_phymode mode)
int i;
/* validate new mode */
if ((ic->ic_modecaps & (1<<mode)) == 0) {
if (isclr(ic->ic_modecaps, mode)) {
IEEE80211_DPRINTF(ic, IEEE80211_MSG_ANY,
"%s: mode %u not supported (caps 0x%x)\n",
__func__, mode, ic->ic_modecaps);

View File

@ -595,7 +595,7 @@ ieee80211_cfgset(struct ieee80211com *ic, u_long cmd, caddr_t data)
*/
for (j = IEEE80211_MODE_11A;
j < IEEE80211_MODE_MAX; j++) {
if ((ic->ic_modecaps & (1<<j)) == 0)
if (isclr(ic->ic_modecaps, j))
continue;
i = findrate(ic, j, rate);
if (i != -1) {

View File

@ -117,7 +117,7 @@ struct ieee80211com {
u_int32_t ic_flags; /* state flags */
u_int32_t ic_flags_ext; /* extended state flags */
u_int32_t ic_caps; /* capabilities */
u_int16_t ic_modecaps; /* set of mode capabilities */
u_int8_t ic_modecaps[2]; /* set of mode capabilities */
u_int16_t ic_curmode; /* current mode */
enum ieee80211_phytype ic_phytype; /* XXX wrong for multi-mode */
enum ieee80211_opmode ic_opmode; /* operation mode */