Lines Matching +defs:c +defs:mode
4 * Copyright (c) 2001 Atsushi Onoe
5 * Copyright (c) 2002-2009 Sam Leffler, Errno Consulting
119 /* NB: OFDM rates are handled specially based on mode */
124 static int set_vht_extchan(struct ieee80211_channel *c);
138 struct ieee80211_channel *c;
147 c = &ic->ic_channels[i];
148 KASSERT(c->ic_flags != 0, ("channel with no flags"));
155 if (c->ic_ieee == 0)
156 c->ic_ieee = ieee80211_mhz2ieee(c->ic_freq,c->ic_flags);
162 if (IEEE80211_IS_CHAN_HT40(c) && c->ic_extieee == 0)
163 c->ic_extieee = ieee80211_mhz2ieee(c->ic_freq +
164 (IEEE80211_IS_CHAN_HT40U(c) ? 20 : -20),
165 c->ic_flags);
172 set_vht_extchan(c);
175 if (c->ic_maxpower == 0)
176 c->ic_maxpower = 2*c->ic_maxregpower;
177 setbit(ic->ic_chan_avail, c->ic_ieee);
179 * Identify mode capabilities.
181 if (IEEE80211_IS_CHAN_A(c))
183 if (IEEE80211_IS_CHAN_B(c))
185 if (IEEE80211_IS_CHAN_ANYG(c))
187 if (IEEE80211_IS_CHAN_FHSS(c))
189 if (IEEE80211_IS_CHAN_108A(c))
191 if (IEEE80211_IS_CHAN_108G(c))
193 if (IEEE80211_IS_CHAN_ST(c))
195 if (IEEE80211_IS_CHAN_HALF(c))
197 if (IEEE80211_IS_CHAN_QUARTER(c))
199 if (IEEE80211_IS_CHAN_HTA(c))
201 if (IEEE80211_IS_CHAN_HTG(c))
203 if (IEEE80211_IS_CHAN_VHTA(c))
205 if (IEEE80211_IS_CHAN_VHTG(c))
249 * Set auto mode to reset active channel state and any desired channel.
266 ic_printf(ic, "need promiscuous mode update callback\n");
639 /* NB: bg scanning only makes sense for station mode right now */
644 /* NB: DFS support only makes sense for ap mode right now */
718 /* NB: strip explicit mode; we're actually in autoselect */
1112 ieee80211_chan2ieee(struct ieee80211com *ic, const struct ieee80211_channel *c)
1114 if (c == NULL) {
1118 return (c == IEEE80211_CHAN_ANYC ? IEEE80211_CHAN_ANY : c->ic_ieee);
1155 set_extchan(struct ieee80211_channel *c)
1162 if (c->ic_flags & IEEE80211_CHAN_HT40U)
1163 c->ic_extieee = c->ic_ieee + 4;
1164 else if (c->ic_flags & IEEE80211_CHAN_HT40D)
1165 c->ic_extieee = c->ic_ieee - 4;
1167 c->ic_extieee = 0;
1211 set_vht_extchan(struct ieee80211_channel *c)
1215 if (! IEEE80211_IS_CHAN_VHT(c))
1218 if (IEEE80211_IS_CHAN_VHT80P80(c)) {
1220 __func__, c->ic_ieee, c->ic_flags);
1223 if (IEEE80211_IS_CHAN_VHT160(c)) {
1225 if (c->ic_freq >= vht160_chan_ranges[i].freq_start &&
1226 c->ic_freq < vht160_chan_ranges[i].freq_end) {
1230 c->ic_vht_ch_freq1 =
1231 ieee80211_mhz2ieee(midpoint, c->ic_flags);
1232 c->ic_vht_ch_freq2 = 0;
1235 __func__, c->ic_ieee, c->ic_freq, midpoint,
1236 c->ic_vht_ch_freq1, c->ic_vht_ch_freq2);
1244 if (IEEE80211_IS_CHAN_VHT80(c)) {
1246 if (c->ic_freq >= vht80_chan_ranges[i].freq_start &&
1247 c->ic_freq < vht80_chan_ranges[i].freq_end) {
1251 c->ic_vht_ch_freq1 =
1252 ieee80211_mhz2ieee(midpoint, c->ic_flags);
1253 c->ic_vht_ch_freq2 = 0;
1256 __func__, c->ic_ieee, c->ic_freq, midpoint,
1257 c->ic_vht_ch_freq1, c->ic_vht_ch_freq2);
1265 if (IEEE80211_IS_CHAN_VHT40(c)) {
1266 if (IEEE80211_IS_CHAN_HT40U(c))
1267 c->ic_vht_ch_freq1 = c->ic_ieee + 2;
1268 else if (IEEE80211_IS_CHAN_HT40D(c))
1269 c->ic_vht_ch_freq1 = c->ic_ieee - 2;
1275 if (IEEE80211_IS_CHAN_VHT20(c)) {
1276 c->ic_vht_ch_freq1 = c->ic_ieee;
1281 __func__, c->ic_ieee, c->ic_flags);
1322 struct ieee80211_channel *c;
1332 c = &chans[(*nchans)++];
1333 c->ic_ieee = ieee;
1334 c->ic_freq = freq != 0 ? freq : ieee80211_ieee2mhz(ieee, flags);
1335 c->ic_maxregpower = maxregpower;
1336 c->ic_maxpower = 2 * maxregpower;
1337 c->ic_flags = flags;
1338 c->ic_vht_ch_freq1 = 0;
1339 c->ic_vht_ch_freq2 = 0;
1340 set_extchan(c);
1341 set_vht_extchan(c);
1350 struct ieee80211_channel *c;
1362 c = &chans[(*nchans)++];
1363 c[0] = c[-1];
1364 c->ic_flags = flags;
1365 c->ic_vht_ch_freq1 = 0;
1366 c->ic_vht_ch_freq2 = 0;
1367 set_extchan(c);
1368 set_vht_extchan(c);
1497 KASSERT(flags[0] != 0, ("%s: no correct mode provided\n", __func__));
1523 struct ieee80211_channel *c;
1529 c = &chans[i];
1530 if (c->ic_freq == freq &&
1531 (c->ic_flags & IEEE80211_CHAN_ALLTURBO) == flags)
1532 return c;
1580 ieee80211_get_channel_center_freq(const struct ieee80211_channel *c)
1583 return (c->ic_freq);
1599 ieee80211_get_channel_center_freq1(const struct ieee80211_channel *c)
1606 if (IEEE80211_IS_CHAN_VHT(c))
1607 return (ieee80211_ieee2mhz(c->ic_vht_ch_freq1, c->ic_flags));
1609 if (IEEE80211_IS_CHAN_HT40U(c)) {
1610 return (c->ic_freq + 10);
1612 if (IEEE80211_IS_CHAN_HT40D(c)) {
1613 return (c->ic_freq - 10);
1616 return (c->ic_freq);
1623 ieee80211_get_channel_center_freq2(const struct ieee80211_channel *c)
1626 if (IEEE80211_IS_CHAN_VHT(c) && (c->ic_vht_ch_freq2 != 0))
1627 return (ieee80211_ieee2mhz(c->ic_vht_ch_freq2, c->ic_flags));
1743 KASSERT(flags[0] != 0, ("%s: no correct mode provided\n", __func__));
1771 KASSERT(flags[0] != 0, ("%s: no correct mode provided\n", __func__));
1784 struct ieee80211_channel *c;
1787 c = ic->ic_prevchan;
1788 if (c != NULL && c->ic_freq == freq &&
1789 (c->ic_flags & IEEE80211_CHAN_ALLTURBO) == flags)
1790 return c;
1803 struct ieee80211_channel *c;
1807 c = ic->ic_prevchan;
1808 if (c != NULL && c->ic_ieee == ieee &&
1809 (c->ic_flags & IEEE80211_CHAN_ALLTURBO) == flags)
1810 return c;
1813 c = &ic->ic_channels[i];
1814 if (c->ic_ieee == ieee &&
1815 (c->ic_flags & IEEE80211_CHAN_ALLTURBO) == flags)
1816 return c;
1845 struct ieee80211_channel *c;
1888 c = ieee80211_find_channel(ic, rxs->c_freq, flags);
1891 "%s: freq=%d, ieee=%d, flags=0x%08x; c=%p\n",
1892 __func__, (int) rxs->c_freq, (int) rxs->c_ieee, flags, c);
1894 return (c);
1898 addmedia(struct ifmedia *media, int caps, int addsta, int mode, int mword)
1921 mopt = mopts[mode];
1923 ADD(ic, mword, mopt); /* STA mode has no cap */
1949 enum ieee80211_phymode mode;
1962 for (mode = IEEE80211_MODE_AUTO; mode < IEEE80211_MODE_11NA; mode++) {
1963 if (isclr(ic->ic_modecaps, mode))
1965 addmedia(media, caps, addsta, mode, IFM_AUTO);
1966 if (mode == IEEE80211_MODE_AUTO)
1968 rs = &ic->ic_sup_rates[mode];
1971 mword = ieee80211_rate2media(ic, rate, mode);
1974 addmedia(media, caps, addsta, mode, mword);
2007 for (; mode <= IEEE80211_MODE_11NG; mode++) {
2008 if (isclr(ic->ic_modecaps, mode))
2010 addmedia(media, caps, addsta, mode, IFM_AUTO);
2011 addmedia(media, caps, addsta, mode, IFM_IEEE80211_MCS);
2035 for (mode = IEEE80211_MODE_VHT_5GHZ; mode <= IEEE80211_MODE_VHT_5GHZ;
2036 mode++) {
2037 if (isclr(ic->ic_modecaps, mode))
2039 addmedia(media, caps, addsta, mode, IFM_AUTO);
2040 addmedia(media, caps, addsta, mode, IFM_IEEE80211_VHT);
2054 ieee80211_get_suprates(struct ieee80211com *ic, const struct ieee80211_channel *c)
2057 return &ic->ic_sup_rates[ieee80211_chan2mode(c)];
2063 const struct ieee80211_channel *c)
2072 enum ieee80211_phymode mode;
2076 for (mode = IEEE80211_MODE_AUTO+1; mode < IEEE80211_MODE_11NA; mode++) {
2077 if (isclr(ic->ic_modecaps, mode))
2079 ic_printf(ic, "%s rates: ", ieee80211_phymode_name[mode]);
2080 rs = &ic->ic_sup_rates[mode];
2082 mword = ieee80211_rate2media(ic, rs->rs_rates[i], mode);
2098 const struct ieee80211_channel *c;
2104 c = &ic->ic_channels[i];
2105 if (IEEE80211_IS_CHAN_ST(c))
2107 else if (IEEE80211_IS_CHAN_108A(c))
2109 else if (IEEE80211_IS_CHAN_108G(c))
2111 else if (IEEE80211_IS_CHAN_HT(c))
2113 else if (IEEE80211_IS_CHAN_A(c))
2115 else if (IEEE80211_IS_CHAN_ANYG(c))
2117 else if (IEEE80211_IS_CHAN_B(c))
2121 if (IEEE80211_IS_CHAN_HT40(c) || IEEE80211_IS_CHAN_TURBO(c))
2123 else if (IEEE80211_IS_CHAN_HALF(c))
2125 else if (IEEE80211_IS_CHAN_QUARTER(c))
2129 printf("%4d %4d%c %2d%c %6d %4d.%d %4d.%d\n"
2130 , c->ic_ieee, c->ic_freq, type
2132 , IEEE80211_IS_CHAN_HT40U(c) ? '+' :
2133 IEEE80211_IS_CHAN_HT40D(c) ? '-' : ' '
2134 , c->ic_maxregpower
2135 , c->ic_minpower / 2, c->ic_minpower & 1 ? 5 : 0
2136 , c->ic_maxpower / 2, c->ic_maxpower & 1 ? 5 : 0
2142 media2mode(const struct ifmedia_entry *ime, uint32_t flags, uint16_t *mode)
2146 *mode = IEEE80211_MODE_11A;
2149 *mode = IEEE80211_MODE_11B;
2152 *mode = IEEE80211_MODE_11G;
2155 *mode = IEEE80211_MODE_FH;
2158 *mode = IEEE80211_MODE_11NA;
2161 *mode = IEEE80211_MODE_11NG;
2164 *mode = IEEE80211_MODE_VHT_2GHZ;
2167 *mode = IEEE80211_MODE_VHT_5GHZ;
2170 *mode = IEEE80211_MODE_AUTO;
2176 * Turbo mode is an ``option''.
2180 if (*mode == IEEE80211_MODE_11A) {
2182 *mode = IEEE80211_MODE_TURBO_A;
2184 *mode = IEEE80211_MODE_STURBO_A;
2185 } else if (*mode == IEEE80211_MODE_11G)
2186 *mode = IEEE80211_MODE_TURBO_G;
2215 * from the operating mode and channel state.
2280 enum ieee80211_phymode mode;
2284 * NB: use the current channel's mode to lock down a xmit
2291 mode = ieee80211_chan2mode(ic->ic_curchan);
2293 mode = IEEE80211_MODE_AUTO;
2298 if (vap->iv_txparms[mode].ucastrate != IEEE80211_FIXED_RATE_NONE) {
2303 vap->iv_txparms[mode].ucastrate, mode);
2306 * In station mode report the current transmit rate.
2309 vap->iv_bss->ni_txrate, mode);
2317 * Set the current phy mode and recalculate the active channel
2318 * set based on the available channels for this mode. Also
2320 * inappropriate for this mode.
2323 ieee80211_setmode(struct ieee80211com *ic, enum ieee80211_phymode mode)
2331 if (mode == IEEE80211_MODE_11G || mode == IEEE80211_MODE_11B)
2332 ieee80211_setbasicrates(&ic->ic_sup_rates[mode], mode);
2334 ic->ic_curmode = mode;
2341 * Return the phy mode for with the specified channel.
2375 printf("%s: cannot map channel to mode; freq %u flags 0x%x\n",
2381 u_int match; /* rate + mode */
2402 ieee80211_rate2media(struct ieee80211com *ic, int rate, enum ieee80211_phymode mode)
2538 if (mode == IEEE80211_MODE_VHT_5GHZ) {
2545 } else if (mode == IEEE80211_MODE_11NA) {
2552 } else if (mode == IEEE80211_MODE_11NG) {
2562 switch (mode) {
2635 #define mix(a, b, c) \
2637 a -= b; a -= c; a ^= (c >> 13); \
2638 b -= c; b -= a; b ^= (a << 8); \
2639 c -= a; c -= b; c ^= (b >> 13); \
2640 a -= b; a -= c; a ^= (c >> 12); \
2641 b -= c; b -= a; b ^= (a << 16); \
2642 c -= a; c -= b; c ^= (b >> 5); \
2643 a -= b; a -= c; a ^= (c >> 3); \
2644 b -= c; b -= a; b ^= (a << 10); \
2645 c -= a; c -= b; c ^= (b >> 15); \
2652 uint32_t a = 0x9e3779b9, b = 0x9e3779b9, c = ic->ic_hash_key;
2661 mix(a, b, c);
2663 return c;
2668 ieee80211_channel_type_char(const struct ieee80211_channel *c)
2670 if (IEEE80211_IS_CHAN_ST(c))
2672 if (IEEE80211_IS_CHAN_108A(c))
2674 if (IEEE80211_IS_CHAN_108G(c))
2676 if (IEEE80211_IS_CHAN_VHT(c))
2678 if (IEEE80211_IS_CHAN_HT(c))
2680 if (IEEE80211_IS_CHAN_A(c))
2682 if (IEEE80211_IS_CHAN_ANYG(c))
2684 if (IEEE80211_IS_CHAN_B(c))