Lines Matching +full:c +full:- +full:phy
1 /*-
2 * SPDX-License-Identifier: BSD-2-Clause
4 * Copyright (c) 2007-2008 Sam Leffler, Errno Consulting
30 * IEEE 802.11 PHY-related support.
79 [0] = { .phy = CCK, 1000, 0x00, B(2), 0 },/* 1 Mb */
80 [1] = { .phy = CCK, 2000, 0x04, B(4), 1 },/* 2 Mb */
81 [2] = { .phy = CCK, 5500, 0x04, B(11), 1 },/* 5.5 Mb */
82 [3] = { .phy = CCK, 11000, 0x04, B(22), 1 },/* 11 Mb */
83 [4] = { .phy = PBCC, 22000, 0x04, 44, 3 } /* 22 Mb */
92 [0] = { .phy = CCK, 1000, 0x00, B(2), 0 },
93 [1] = { .phy = CCK, 2000, 0x04, B(4), 1 },
94 [2] = { .phy = CCK, 5500, 0x04, B(11), 2 },
95 [3] = { .phy = CCK, 11000, 0x04, B(22), 3 },
96 [4] = { .phy = OFDM, 6000, 0x00, 12, 4 },
97 [5] = { .phy = OFDM, 9000, 0x00, 18, 4 },
98 [6] = { .phy = OFDM, 12000, 0x00, 24, 6 },
99 [7] = { .phy = OFDM, 18000, 0x00, 36, 6 },
100 [8] = { .phy = OFDM, 24000, 0x00, 48, 8 },
101 [9] = { .phy = OFDM, 36000, 0x00, 72, 8 },
102 [10] = { .phy = OFDM, 48000, 0x00, 96, 8 },
103 [11] = { .phy = OFDM, 54000, 0x00, 108, 8 }
112 [0] = { .phy = OFDM, 6000, 0x00, B(12), 0 },
113 [1] = { .phy = OFDM, 9000, 0x00, 18, 0 },
114 [2] = { .phy = OFDM, 12000, 0x00, B(24), 2 },
115 [3] = { .phy = OFDM, 18000, 0x00, 36, 2 },
116 [4] = { .phy = OFDM, 24000, 0x00, B(48), 4 },
117 [5] = { .phy = OFDM, 36000, 0x00, 72, 4 },
118 [6] = { .phy = OFDM, 48000, 0x00, 96, 4 },
119 [7] = { .phy = OFDM, 54000, 0x00, 108, 4 }
128 [0] = { .phy = HALF, 3000, 0x00, B(6), 0 },
129 [1] = { .phy = HALF, 4500, 0x00, 9, 0 },
130 [2] = { .phy = HALF, 6000, 0x00, B(12), 2 },
131 [3] = { .phy = HALF, 9000, 0x00, 18, 2 },
132 [4] = { .phy = HALF, 12000, 0x00, B(24), 4 },
133 [5] = { .phy = HALF, 18000, 0x00, 36, 4 },
134 [6] = { .phy = HALF, 24000, 0x00, 48, 4 },
135 [7] = { .phy = HALF, 27000, 0x00, 54, 4 }
144 [0] = { .phy = QUART, 1500, 0x00, B(3), 0 },
145 [1] = { .phy = QUART, 2250, 0x00, 4, 0 },
146 [2] = { .phy = QUART, 3000, 0x00, B(9), 2 },
147 [3] = { .phy = QUART, 4500, 0x00, 9, 2 },
148 [4] = { .phy = QUART, 6000, 0x00, B(12), 4 },
149 [5] = { .phy = QUART, 9000, 0x00, 18, 4 },
150 [6] = { .phy = QUART, 12000, 0x00, 24, 4 },
151 [7] = { .phy = QUART, 13500, 0x00, 27, 4 }
160 [0] = { .phy = TURBO, 12000, 0x00, B(12), 0 },
161 [1] = { .phy = TURBO, 24000, 0x00, B(24), 1 },
162 [2] = { .phy = TURBO, 36000, 0x00, 36, 1 },
163 [3] = { .phy = TURBO, 48000, 0x00, B(48), 3 },
164 [4] = { .phy = TURBO, 72000, 0x00, 72, 3 },
165 [5] = { .phy = TURBO, 96000, 0x00, 96, 3 },
166 [6] = { .phy = TURBO, 108000, 0x00, 108, 3 }
175 [0] = { .phy = TURBO, 12000, 0x00, B(12), 0 },
176 [1] = { .phy = TURBO, 18000, 0x00, 18, 0 },
177 [2] = { .phy = TURBO, 24000, 0x00, B(24), 2 },
178 [3] = { .phy = TURBO, 36000, 0x00, 36, 2 },
179 [4] = { .phy = TURBO, 48000, 0x00, B(48), 4 },
180 [5] = { .phy = TURBO, 72000, 0x00, 72, 4 },
181 [6] = { .phy = TURBO, 96000, 0x00, 96, 4 },
182 [7] = { .phy = TURBO, 108000, 0x00, 108, 4 }
191 [0] = { .phy = CCK, 1000, 0x00, B(2), 0 },
192 [1] = { .phy = CCK, 2000, 0x04, B(4), 1 },
193 [2] = { .phy = CCK, 5500, 0x04, B(11), 2 },
194 [3] = { .phy = CCK, 11000, 0x04, B(22), 3 },
195 [4] = { .phy = OFDM, 6000, 0x00, 12, 4 },
196 [5] = { .phy = OFDM, 9000, 0x00, 18, 4 },
197 [6] = { .phy = OFDM, 12000, 0x00, 24, 6 },
198 [7] = { .phy = OFDM, 18000, 0x00, 36, 6 },
199 [8] = { .phy = OFDM, 24000, 0x00, 48, 8 },
200 [9] = { .phy = OFDM, 36000, 0x00, 72, 8 },
201 [10] = { .phy = OFDM, 48000, 0x00, 96, 8 },
202 [11] = { .phy = OFDM, 54000, 0x00, 108, 8 },
204 [12] = { .phy = HT, 6500, 0x00, N(0), 4 },
205 [13] = { .phy = HT, 13000, 0x00, N(1), 6 },
206 [14] = { .phy = HT, 19500, 0x00, N(2), 6 },
207 [15] = { .phy = HT, 26000, 0x00, N(3), 8 },
208 [16] = { .phy = HT, 39000, 0x00, N(4), 8 },
209 [17] = { .phy = HT, 52000, 0x00, N(5), 8 },
210 [18] = { .phy = HT, 58500, 0x00, N(6), 8 },
211 [19] = { .phy = HT, 65000, 0x00, N(7), 8 },
213 [20] = { .phy = HT, 13000, 0x00, N(8), 4 },
214 [21] = { .phy = HT, 26000, 0x00, N(9), 6 },
215 [22] = { .phy = HT, 39000, 0x00, N(10), 6 },
216 [23] = { .phy = HT, 52000, 0x00, N(11), 8 },
217 [24] = { .phy = HT, 78000, 0x00, N(12), 8 },
218 [25] = { .phy = HT, 104000, 0x00, N(13), 8 },
219 [26] = { .phy = HT, 117000, 0x00, N(14), 8 },
220 [27] = { .phy = HT, 130000, 0x00, N(15), 8 },
222 [28] = { .phy = HT, 19500, 0x00, N(16), 4 },
223 [29] = { .phy = HT, 39000, 0x00, N(17), 6 },
224 [30] = { .phy = HT, 58500, 0x00, N(18), 6 },
225 [31] = { .phy = HT, 78000, 0x00, N(19), 8 },
226 [32] = { .phy = HT, 117000, 0x00, N(20), 8 },
227 [33] = { .phy = HT, 156000, 0x00, N(21), 8 },
228 [34] = { .phy = HT, 175500, 0x00, N(22), 8 },
229 [35] = { .phy = HT, 195000, 0x00, N(23), 8 },
239 [0] = { .phy = OFDM, 6000, 0x00, B(12), 0 },
240 [1] = { .phy = OFDM, 9000, 0x00, 18, 0 },
241 [2] = { .phy = OFDM, 12000, 0x00, B(24), 2 },
242 [3] = { .phy = OFDM, 18000, 0x00, 36, 2 },
243 [4] = { .phy = OFDM, 24000, 0x00, B(48), 4 },
244 [5] = { .phy = OFDM, 36000, 0x00, 72, 4 },
245 [6] = { .phy = OFDM, 48000, 0x00, 96, 4 },
246 [7] = { .phy = OFDM, 54000, 0x00, 108, 4 },
248 [8] = { .phy = HT, 6500, 0x00, N(0), 0 },
249 [9] = { .phy = HT, 13000, 0x00, N(1), 2 },
250 [10] = { .phy = HT, 19500, 0x00, N(2), 2 },
251 [11] = { .phy = HT, 26000, 0x00, N(3), 4 },
252 [12] = { .phy = HT, 39000, 0x00, N(4), 4 },
253 [13] = { .phy = HT, 52000, 0x00, N(5), 4 },
254 [14] = { .phy = HT, 58500, 0x00, N(6), 4 },
255 [15] = { .phy = HT, 65000, 0x00, N(7), 4 },
257 [16] = { .phy = HT, 13000, 0x00, N(8), 0 },
258 [17] = { .phy = HT, 26000, 0x00, N(9), 2 },
259 [18] = { .phy = HT, 39000, 0x00, N(10), 2 },
260 [19] = { .phy = HT, 52000, 0x00, N(11), 4 },
261 [20] = { .phy = HT, 78000, 0x00, N(12), 4 },
262 [21] = { .phy = HT, 104000, 0x00, N(13), 4 },
263 [22] = { .phy = HT, 117000, 0x00, N(14), 4 },
264 [23] = { .phy = HT, 130000, 0x00, N(15), 4 },
266 [24] = { .phy = HT, 19500, 0x00, N(16), 0 },
267 [25] = { .phy = HT, 39000, 0x00, N(17), 2 },
268 [26] = { .phy = HT, 58500, 0x00, N(18), 2 },
269 [27] = { .phy = HT, 78000, 0x00, N(19), 4 },
270 [28] = { .phy = HT, 117000, 0x00, N(20), 4 },
271 [29] = { .phy = HT, 156000, 0x00, N(21), 4 },
272 [30] = { .phy = HT, 175500, 0x00, N(22), 4 },
273 [31] = { .phy = HT, 195000, 0x00, N(23), 4 },
306 for (i = 0; i < nitems(rt->rateCodeToIndex); i++) in ieee80211_setup_ratetable()
307 rt->rateCodeToIndex[i] = (uint8_t) -1; in ieee80211_setup_ratetable()
308 for (i = 0; i < rt->rateCount; i++) { in ieee80211_setup_ratetable()
309 uint8_t code = rt->info[i].dot11Rate; in ieee80211_setup_ratetable()
310 uint8_t cix = rt->info[i].ctlRateIndex; in ieee80211_setup_ratetable()
311 uint8_t ctl_rate = rt->info[cix].dot11Rate; in ieee80211_setup_ratetable()
322 if (rt->info[i].phy == IEEE80211_T_HT) { in ieee80211_setup_ratetable()
326 /* XXX assume the control rate is non-MCS? */ in ieee80211_setup_ratetable()
328 rt->rateCodeToIndex[code] = i; in ieee80211_setup_ratetable()
333 * the static tables are setup with an 11b-compatible in ieee80211_setup_ratetable()
340 rt->info[i].lpAckDuration = ieee80211_compute_duration(rt, in ieee80211_setup_ratetable()
342 rt->info[i].spAckDuration = ieee80211_compute_duration(rt, in ieee80211_setup_ratetable()
373 ieee80211_get_ratetable(struct ieee80211_channel *c) in ieee80211_get_ratetable() argument
378 if (IEEE80211_IS_CHAN_HALF(c)) in ieee80211_get_ratetable()
380 else if (IEEE80211_IS_CHAN_QUARTER(c)) in ieee80211_get_ratetable()
382 else if (IEEE80211_IS_CHAN_HTA(c)) in ieee80211_get_ratetable()
384 else if (IEEE80211_IS_CHAN_HTG(c)) in ieee80211_get_ratetable()
386 else if (IEEE80211_IS_CHAN_108G(c)) in ieee80211_get_ratetable()
388 else if (IEEE80211_IS_CHAN_ST(c)) in ieee80211_get_ratetable()
390 else if (IEEE80211_IS_CHAN_TURBO(c)) in ieee80211_get_ratetable()
392 else if (IEEE80211_IS_CHAN_A(c)) in ieee80211_get_ratetable()
394 else if (IEEE80211_IS_CHAN_ANYG(c)) in ieee80211_get_ratetable()
396 else if (IEEE80211_IS_CHAN_B(c)) in ieee80211_get_ratetable()
401 __func__, c->ic_freq, c->ic_flags); in ieee80211_get_ratetable()
452 /* OFDM rates (cf IEEE Std 802.11a-1999, pp. 14 Table 80) */ in ieee80211_rate2plcp()
461 /* CCK rates (IEEE Std 802.11b-1999 page 15, subclause 18.2.3.3) */ in ieee80211_rate2plcp()
466 /* IEEE Std 802.11g-2003 page 19, subclause 19.3.2.1 */ in ieee80211_rate2plcp()
498 * using the specified rate, phy, and short preamble setting.
505 uint8_t rix = rt->rateCodeToIndex[rate]; in ieee80211_compute_duration()
509 KASSERT(rix != (uint8_t)-1, ("rate %d has no info", rate)); in ieee80211_compute_duration()
510 kbps = rt->info[rix].rateKbps; in ieee80211_compute_duration()
514 switch (rt->info[rix].phy) { in ieee80211_compute_duration()
517 if (isShortPreamble && rt->info[rix].shortPreamble) in ieee80211_compute_duration()
554 /* we still save OFDM rates in kbps - so double them */ in ieee80211_compute_duration()
564 panic("%s: unknown phy %u (rate %u)\n", __func__, in ieee80211_compute_duration()
565 rt->info[rix].phy, rate); in ieee80211_compute_duration()
630 * This is based on 802.11-2020 21.5 (Parameters for VHT-MCSs.)
659 * See 802.11-2020 21.5 (Parameters for VHT-MCSs) for more details.
673 return (ieee80211_vht_mcs_allowed_list_20[nss - 1]); in ieee80211_phy_vht_get_mcs_mask()
675 return (ieee80211_vht_mcs_allowed_list_40[nss - 1]); in ieee80211_phy_vht_get_mcs_mask()
677 return (ieee80211_vht_mcs_allowed_list_80[nss - 1]); in ieee80211_phy_vht_get_mcs_mask()
679 return (ieee80211_vht_mcs_allowed_list_160[nss - 1]); in ieee80211_phy_vht_get_mcs_mask()
690 * See 802.11-2020 21.5 (Parameters for VHT-MCSs) for more details.
718 * These parameters are taken from 802.11-2020 Table 21-29
719 * (VHT-MCSs for Mandatory 20 MHZ, Nss=1).
743 * @param is_shortgi True if short guard-interval (400nS)
761 * Short-GI - 3.6uS symbol time, long-GI - 4.0uS symbol time in ieee80211_phy_vht_get_mcs_kbit()
763 * See 802.11-2020 Table 21-5 (Timing-related constraints.) in ieee80211_phy_vht_get_mcs_kbit()
773 * See 802.11-2020 Table 21-5 (Timing-related constraints.) in ieee80211_phy_vht_get_mcs_kbit()