diff options
Diffstat (limited to 'include')
-rw-r--r-- | include/net/mac80211.h | 197 | ||||
-rw-r--r-- | include/net/wireless.h | 168 |
2 files changed, 202 insertions, 163 deletions
diff --git a/include/net/mac80211.h b/include/net/mac80211.h index 277488176a44..460da54a0019 100644 --- a/include/net/mac80211.h +++ b/include/net/mac80211.h | |||
@@ -69,95 +69,6 @@ | |||
69 | * not do so then mac80211 may add this under certain circumstances. | 69 | * not do so then mac80211 may add this under certain circumstances. |
70 | */ | 70 | */ |
71 | 71 | ||
72 | #define IEEE80211_CHAN_W_SCAN 0x00000001 | ||
73 | #define IEEE80211_CHAN_W_ACTIVE_SCAN 0x00000002 | ||
74 | #define IEEE80211_CHAN_W_IBSS 0x00000004 | ||
75 | |||
76 | /* Channel information structure. Low-level driver is expected to fill in chan, | ||
77 | * freq, and val fields. Other fields will be filled in by 80211.o based on | ||
78 | * hostapd information and low-level driver does not need to use them. The | ||
79 | * limits for each channel will be provided in 'struct ieee80211_conf' when | ||
80 | * configuring the low-level driver with hw->config callback. If a device has | ||
81 | * a default regulatory domain, IEEE80211_HW_DEFAULT_REG_DOMAIN_CONFIGURED | ||
82 | * can be set to let the driver configure all fields */ | ||
83 | struct ieee80211_channel { | ||
84 | short chan; /* channel number (IEEE 802.11) */ | ||
85 | short freq; /* frequency in MHz */ | ||
86 | int val; /* hw specific value for the channel */ | ||
87 | int flag; /* flag for hostapd use (IEEE80211_CHAN_*) */ | ||
88 | unsigned char power_level; | ||
89 | unsigned char antenna_max; | ||
90 | }; | ||
91 | |||
92 | #define IEEE80211_RATE_ERP 0x00000001 | ||
93 | #define IEEE80211_RATE_BASIC 0x00000002 | ||
94 | #define IEEE80211_RATE_PREAMBLE2 0x00000004 | ||
95 | #define IEEE80211_RATE_SUPPORTED 0x00000010 | ||
96 | #define IEEE80211_RATE_OFDM 0x00000020 | ||
97 | #define IEEE80211_RATE_CCK 0x00000040 | ||
98 | #define IEEE80211_RATE_MANDATORY 0x00000100 | ||
99 | |||
100 | #define IEEE80211_RATE_CCK_2 (IEEE80211_RATE_CCK | IEEE80211_RATE_PREAMBLE2) | ||
101 | #define IEEE80211_RATE_MODULATION(f) \ | ||
102 | (f & (IEEE80211_RATE_CCK | IEEE80211_RATE_OFDM)) | ||
103 | |||
104 | /* Low-level driver should set PREAMBLE2, OFDM and CCK flags. | ||
105 | * BASIC, SUPPORTED, ERP, and MANDATORY flags are set in 80211.o based on the | ||
106 | * configuration. */ | ||
107 | struct ieee80211_rate { | ||
108 | int rate; /* rate in 100 kbps */ | ||
109 | int val; /* hw specific value for the rate */ | ||
110 | int flags; /* IEEE80211_RATE_ flags */ | ||
111 | int val2; /* hw specific value for the rate when using short preamble | ||
112 | * (only when IEEE80211_RATE_PREAMBLE2 flag is set, i.e., for | ||
113 | * 2, 5.5, and 11 Mbps) */ | ||
114 | signed char min_rssi_ack; | ||
115 | unsigned char min_rssi_ack_delta; | ||
116 | |||
117 | /* following fields are set by 80211.o and need not be filled by the | ||
118 | * low-level driver */ | ||
119 | int rate_inv; /* inverse of the rate (LCM(all rates) / rate) for | ||
120 | * optimizing channel utilization estimates */ | ||
121 | }; | ||
122 | |||
123 | /** | ||
124 | * enum ieee80211_phymode - PHY modes | ||
125 | * | ||
126 | * @MODE_IEEE80211A: 5GHz as defined by 802.11a/802.11h | ||
127 | * @MODE_IEEE80211B: 2.4 GHz as defined by 802.11b | ||
128 | * @MODE_IEEE80211G: 2.4 GHz as defined by 802.11g (with OFDM), | ||
129 | * backwards compatible with 11b mode | ||
130 | * @NUM_IEEE80211_MODES: internal | ||
131 | */ | ||
132 | enum ieee80211_phymode { | ||
133 | MODE_IEEE80211A, | ||
134 | MODE_IEEE80211B, | ||
135 | MODE_IEEE80211G, | ||
136 | |||
137 | /* keep last */ | ||
138 | NUM_IEEE80211_MODES | ||
139 | }; | ||
140 | |||
141 | /** | ||
142 | * struct ieee80211_ht_info - describing STA's HT capabilities | ||
143 | * | ||
144 | * This structure describes most essential parameters needed | ||
145 | * to describe 802.11n HT capabilities for an STA. | ||
146 | * | ||
147 | * @ht_supported: is HT supported by STA, 0: no, 1: yes | ||
148 | * @cap: HT capabilities map as described in 802.11n spec | ||
149 | * @ampdu_factor: Maximum A-MPDU length factor | ||
150 | * @ampdu_density: Minimum A-MPDU spacing | ||
151 | * @supp_mcs_set: Supported MCS set as described in 802.11n spec | ||
152 | */ | ||
153 | struct ieee80211_ht_info { | ||
154 | u8 ht_supported; | ||
155 | u16 cap; /* use IEEE80211_HT_CAP_ */ | ||
156 | u8 ampdu_factor; | ||
157 | u8 ampdu_density; | ||
158 | u8 supp_mcs_set[16]; | ||
159 | }; | ||
160 | |||
161 | /** | 72 | /** |
162 | * struct ieee80211_ht_bss_info - describing BSS's HT characteristics | 73 | * struct ieee80211_ht_bss_info - describing BSS's HT characteristics |
163 | * | 74 | * |
@@ -175,30 +86,6 @@ struct ieee80211_ht_bss_info { | |||
175 | }; | 86 | }; |
176 | 87 | ||
177 | /** | 88 | /** |
178 | * struct ieee80211_hw_mode - PHY mode definition | ||
179 | * | ||
180 | * This structure describes the capabilities supported by the device | ||
181 | * in a single PHY mode. | ||
182 | * | ||
183 | * @list: internal | ||
184 | * @channels: pointer to array of supported channels | ||
185 | * @rates: pointer to array of supported bitrates | ||
186 | * @mode: the PHY mode for this definition | ||
187 | * @num_channels: number of supported channels | ||
188 | * @num_rates: number of supported bitrates | ||
189 | * @ht_info: PHY's 802.11n HT abilities for this mode | ||
190 | */ | ||
191 | struct ieee80211_hw_mode { | ||
192 | struct list_head list; | ||
193 | struct ieee80211_channel *channels; | ||
194 | struct ieee80211_rate *rates; | ||
195 | enum ieee80211_phymode mode; | ||
196 | int num_channels; | ||
197 | int num_rates; | ||
198 | struct ieee80211_ht_info ht_info; | ||
199 | }; | ||
200 | |||
201 | /** | ||
202 | * struct ieee80211_tx_queue_params - transmit queue configuration | 89 | * struct ieee80211_tx_queue_params - transmit queue configuration |
203 | * | 90 | * |
204 | * The information provided in this structure is required for QoS | 91 | * The information provided in this structure is required for QoS |
@@ -320,11 +207,13 @@ struct ieee80211_bss_conf { | |||
320 | 207 | ||
321 | struct ieee80211_tx_control { | 208 | struct ieee80211_tx_control { |
322 | struct ieee80211_vif *vif; | 209 | struct ieee80211_vif *vif; |
323 | int tx_rate; /* Transmit rate, given as the hw specific value for the | 210 | struct ieee80211_rate *tx_rate; |
324 | * rate (from struct ieee80211_rate) */ | 211 | |
325 | int rts_cts_rate; /* Transmit rate for RTS/CTS frame, given as the hw | 212 | /* Transmit rate for RTS/CTS frame */ |
326 | * specific value for the rate (from | 213 | struct ieee80211_rate *rts_cts_rate; |
327 | * struct ieee80211_rate) */ | 214 | |
215 | /* retry rate for the last retries */ | ||
216 | struct ieee80211_rate *alt_retry_rate; | ||
328 | 217 | ||
329 | #define IEEE80211_TXCTL_REQ_TX_STATUS (1<<0)/* request TX status callback for | 218 | #define IEEE80211_TXCTL_REQ_TX_STATUS (1<<0)/* request TX status callback for |
330 | * this frame */ | 219 | * this frame */ |
@@ -343,6 +232,7 @@ struct ieee80211_tx_control { | |||
343 | #define IEEE80211_TXCTL_REQUEUE (1<<7) | 232 | #define IEEE80211_TXCTL_REQUEUE (1<<7) |
344 | #define IEEE80211_TXCTL_FIRST_FRAGMENT (1<<8) /* this is a first fragment of | 233 | #define IEEE80211_TXCTL_FIRST_FRAGMENT (1<<8) /* this is a first fragment of |
345 | * the frame */ | 234 | * the frame */ |
235 | #define IEEE80211_TXCTL_SHORT_PREAMBLE (1<<9) | ||
346 | #define IEEE80211_TXCTL_LONG_RETRY_LIMIT (1<<10) /* this frame should be send | 236 | #define IEEE80211_TXCTL_LONG_RETRY_LIMIT (1<<10) /* this frame should be send |
347 | * using the through | 237 | * using the through |
348 | * set_retry_limit configured | 238 | * set_retry_limit configured |
@@ -359,20 +249,11 @@ struct ieee80211_tx_control { | |||
359 | u8 retry_limit; /* 1 = only first attempt, 2 = one retry, .. | 249 | u8 retry_limit; /* 1 = only first attempt, 2 = one retry, .. |
360 | * This could be used when set_retry_limit | 250 | * This could be used when set_retry_limit |
361 | * is not implemented by the driver */ | 251 | * is not implemented by the driver */ |
362 | u8 power_level; /* per-packet transmit power level, in dBm */ | ||
363 | u8 antenna_sel_tx; /* 0 = default/diversity, 1 = Ant0, 2 = Ant1 */ | 252 | u8 antenna_sel_tx; /* 0 = default/diversity, 1 = Ant0, 2 = Ant1 */ |
364 | u8 icv_len; /* length of the ICV/MIC field in octets */ | 253 | u8 icv_len; /* length of the ICV/MIC field in octets */ |
365 | u8 iv_len; /* length of the IV field in octets */ | 254 | u8 iv_len; /* length of the IV field in octets */ |
366 | u8 queue; /* hardware queue to use for this frame; | 255 | u8 queue; /* hardware queue to use for this frame; |
367 | * 0 = highest, hw->queues-1 = lowest */ | 256 | * 0 = highest, hw->queues-1 = lowest */ |
368 | struct ieee80211_rate *rate; /* internal 80211.o rate */ | ||
369 | struct ieee80211_rate *rts_rate; /* internal 80211.o rate | ||
370 | * for RTS/CTS */ | ||
371 | int alt_retry_rate; /* retry rate for the last retries, given as the | ||
372 | * hw specific value for the rate (from | ||
373 | * struct ieee80211_rate). To be used to limit | ||
374 | * packet dropping when probing higher rates, if hw | ||
375 | * supports multiple retry rates. -1 = not used */ | ||
376 | int type; /* internal */ | 257 | int type; /* internal */ |
377 | }; | 258 | }; |
378 | 259 | ||
@@ -415,26 +296,24 @@ enum mac80211_rx_flags { | |||
415 | * supported by hardware) to the 802.11 code with each received | 296 | * supported by hardware) to the 802.11 code with each received |
416 | * frame. | 297 | * frame. |
417 | * @mactime: MAC timestamp as defined by 802.11 | 298 | * @mactime: MAC timestamp as defined by 802.11 |
299 | * @band: the active band when this frame was received | ||
418 | * @freq: frequency the radio was tuned to when receiving this frame, in MHz | 300 | * @freq: frequency the radio was tuned to when receiving this frame, in MHz |
419 | * @channel: channel the radio was tuned to | ||
420 | * @phymode: active PHY mode | ||
421 | * @ssi: signal strength when receiving this frame | 301 | * @ssi: signal strength when receiving this frame |
422 | * @signal: used as 'qual' in statistics reporting | 302 | * @signal: used as 'qual' in statistics reporting |
423 | * @noise: PHY noise when receiving this frame | 303 | * @noise: PHY noise when receiving this frame |
424 | * @antenna: antenna used | 304 | * @antenna: antenna used |
425 | * @rate: data rate | 305 | * @rate_idx: index of data rate into band's supported rates |
426 | * @flag: %RX_FLAG_* | 306 | * @flag: %RX_FLAG_* |
427 | */ | 307 | */ |
428 | struct ieee80211_rx_status { | 308 | struct ieee80211_rx_status { |
429 | u64 mactime; | 309 | u64 mactime; |
310 | enum ieee80211_band band; | ||
430 | int freq; | 311 | int freq; |
431 | int channel; | ||
432 | enum ieee80211_phymode phymode; | ||
433 | int ssi; | 312 | int ssi; |
434 | int signal; | 313 | int signal; |
435 | int noise; | 314 | int noise; |
436 | int antenna; | 315 | int antenna; |
437 | int rate; | 316 | int rate_idx; |
438 | int flag; | 317 | int flag; |
439 | }; | 318 | }; |
440 | 319 | ||
@@ -509,41 +388,30 @@ enum ieee80211_conf_flags { | |||
509 | * | 388 | * |
510 | * @radio_enabled: when zero, driver is required to switch off the radio. | 389 | * @radio_enabled: when zero, driver is required to switch off the radio. |
511 | * TODO make a flag | 390 | * TODO make a flag |
512 | * @channel: IEEE 802.11 channel number | ||
513 | * @freq: frequency in MHz | ||
514 | * @channel_val: hardware specific channel value for the channel | ||
515 | * @phymode: PHY mode to activate (REMOVE) | ||
516 | * @chan: channel to switch to, pointer to the channel information | ||
517 | * @mode: pointer to mode definition | ||
518 | * @regulatory_domain: ?? | ||
519 | * @beacon_int: beacon interval (TODO make interface config) | 391 | * @beacon_int: beacon interval (TODO make interface config) |
520 | * @flags: configuration flags defined above | 392 | * @flags: configuration flags defined above |
521 | * @power_level: transmit power limit for current regulatory domain in dBm | 393 | * @power_level: requested transmit power (in dBm) |
522 | * @antenna_max: maximum antenna gain | 394 | * @max_antenna_gain: maximum antenna gain (in dBi) |
523 | * @antenna_sel_tx: transmit antenna selection, 0: default/diversity, | 395 | * @antenna_sel_tx: transmit antenna selection, 0: default/diversity, |
524 | * 1/2: antenna 0/1 | 396 | * 1/2: antenna 0/1 |
525 | * @antenna_sel_rx: receive antenna selection, like @antenna_sel_tx | 397 | * @antenna_sel_rx: receive antenna selection, like @antenna_sel_tx |
526 | * @ht_conf: describes current self configuration of 802.11n HT capabilies | 398 | * @ht_conf: describes current self configuration of 802.11n HT capabilies |
527 | * @ht_bss_conf: describes current BSS configuration of 802.11n HT parameters | 399 | * @ht_bss_conf: describes current BSS configuration of 802.11n HT parameters |
400 | * @channel: the channel to tune to | ||
528 | */ | 401 | */ |
529 | struct ieee80211_conf { | 402 | struct ieee80211_conf { |
530 | int channel; /* IEEE 802.11 channel number */ | ||
531 | int freq; /* MHz */ | ||
532 | int channel_val; /* hw specific value for the channel */ | ||
533 | |||
534 | enum ieee80211_phymode phymode; | ||
535 | struct ieee80211_channel *chan; | ||
536 | struct ieee80211_hw_mode *mode; | ||
537 | unsigned int regulatory_domain; | 403 | unsigned int regulatory_domain; |
538 | int radio_enabled; | 404 | int radio_enabled; |
539 | 405 | ||
540 | int beacon_int; | 406 | int beacon_int; |
541 | u32 flags; | 407 | u32 flags; |
542 | u8 power_level; | 408 | int power_level; |
543 | u8 antenna_max; | 409 | int max_antenna_gain; |
544 | u8 antenna_sel_tx; | 410 | u8 antenna_sel_tx; |
545 | u8 antenna_sel_rx; | 411 | u8 antenna_sel_rx; |
546 | 412 | ||
413 | struct ieee80211_channel *channel; | ||
414 | |||
547 | struct ieee80211_ht_info ht_conf; | 415 | struct ieee80211_ht_info ht_conf; |
548 | struct ieee80211_ht_bss_info ht_bss_conf; | 416 | struct ieee80211_ht_bss_info ht_bss_conf; |
549 | }; | 417 | }; |
@@ -764,15 +632,19 @@ enum sta_notify_cmd { | |||
764 | * %IEEE80211_HW_HOST_GEN_BEACON_TEMPLATE is also not set because | 632 | * %IEEE80211_HW_HOST_GEN_BEACON_TEMPLATE is also not set because |
765 | * otherwise the stack will not know when the DTIM beacon was sent. | 633 | * otherwise the stack will not know when the DTIM beacon was sent. |
766 | * | 634 | * |
767 | * @IEEE80211_HW_DEFAULT_REG_DOMAIN_CONFIGURED: | 635 | * @IEEE80211_HW_2GHZ_SHORT_SLOT_INCAPABLE: |
768 | * Channels are already configured to the default regulatory domain | 636 | * Hardware is not capable of short slot operation on the 2.4 GHz band. |
769 | * specified in the device's EEPROM | 637 | * |
638 | * @IEEE80211_HW_2GHZ_SHORT_PREAMBLE_INCAPABLE: | ||
639 | * Hardware is not capable of receiving frames with short preamble on | ||
640 | * the 2.4 GHz band. | ||
770 | */ | 641 | */ |
771 | enum ieee80211_hw_flags { | 642 | enum ieee80211_hw_flags { |
772 | IEEE80211_HW_HOST_GEN_BEACON_TEMPLATE = 1<<0, | 643 | IEEE80211_HW_HOST_GEN_BEACON_TEMPLATE = 1<<0, |
773 | IEEE80211_HW_RX_INCLUDES_FCS = 1<<1, | 644 | IEEE80211_HW_RX_INCLUDES_FCS = 1<<1, |
774 | IEEE80211_HW_HOST_BROADCAST_PS_BUFFERING = 1<<2, | 645 | IEEE80211_HW_HOST_BROADCAST_PS_BUFFERING = 1<<2, |
775 | IEEE80211_HW_DEFAULT_REG_DOMAIN_CONFIGURED = 1<<3, | 646 | IEEE80211_HW_2GHZ_SHORT_SLOT_INCAPABLE = 1<<3, |
647 | IEEE80211_HW_2GHZ_SHORT_PREAMBLE_INCAPABLE = 1<<4, | ||
776 | }; | 648 | }; |
777 | 649 | ||
778 | /** | 650 | /** |
@@ -784,7 +656,8 @@ enum ieee80211_hw_flags { | |||
784 | * @wiphy: This points to the &struct wiphy allocated for this | 656 | * @wiphy: This points to the &struct wiphy allocated for this |
785 | * 802.11 PHY. You must fill in the @perm_addr and @dev | 657 | * 802.11 PHY. You must fill in the @perm_addr and @dev |
786 | * members of this structure using SET_IEEE80211_DEV() | 658 | * members of this structure using SET_IEEE80211_DEV() |
787 | * and SET_IEEE80211_PERM_ADDR(). | 659 | * and SET_IEEE80211_PERM_ADDR(). Additionally, all supported |
660 | * bands (with channels, bitrates) are registered here. | ||
788 | * | 661 | * |
789 | * @conf: &struct ieee80211_conf, device configuration, don't use. | 662 | * @conf: &struct ieee80211_conf, device configuration, don't use. |
790 | * | 663 | * |
@@ -1062,7 +935,9 @@ enum ieee80211_ampdu_mlme_action { | |||
1062 | * given local_address is enabled. | 935 | * given local_address is enabled. |
1063 | * | 936 | * |
1064 | * @hw_scan: Ask the hardware to service the scan request, no need to start | 937 | * @hw_scan: Ask the hardware to service the scan request, no need to start |
1065 | * the scan state machine in stack. | 938 | * the scan state machine in stack. The scan must honour the channel |
939 | * configuration done by the regulatory agent in the wiphy's registered | ||
940 | * bands. | ||
1066 | * | 941 | * |
1067 | * @get_stats: return low-level statistics | 942 | * @get_stats: return low-level statistics |
1068 | * | 943 | * |
@@ -1284,10 +1159,6 @@ static inline char *ieee80211_get_radio_led_name(struct ieee80211_hw *hw) | |||
1284 | #endif | 1159 | #endif |
1285 | } | 1160 | } |
1286 | 1161 | ||
1287 | /* Register a new hardware PHYMODE capability to the stack. */ | ||
1288 | int ieee80211_register_hwmode(struct ieee80211_hw *hw, | ||
1289 | struct ieee80211_hw_mode *mode); | ||
1290 | |||
1291 | /** | 1162 | /** |
1292 | * ieee80211_unregister_hw - Unregister a hardware device | 1163 | * ieee80211_unregister_hw - Unregister a hardware device |
1293 | * | 1164 | * |
@@ -1461,7 +1332,7 @@ __le16 ieee80211_ctstoself_duration(struct ieee80211_hw *hw, | |||
1461 | * @hw: pointer obtained from ieee80211_alloc_hw(). | 1332 | * @hw: pointer obtained from ieee80211_alloc_hw(). |
1462 | * @vif: &struct ieee80211_vif pointer from &struct ieee80211_if_init_conf. | 1333 | * @vif: &struct ieee80211_vif pointer from &struct ieee80211_if_init_conf. |
1463 | * @frame_len: the length of the frame. | 1334 | * @frame_len: the length of the frame. |
1464 | * @rate: the rate (in 100kbps) at which the frame is going to be transmitted. | 1335 | * @rate: the rate at which the frame is going to be transmitted. |
1465 | * | 1336 | * |
1466 | * Calculate the duration field of some generic frame, given its | 1337 | * Calculate the duration field of some generic frame, given its |
1467 | * length and transmission rate (in 100kbps). | 1338 | * length and transmission rate (in 100kbps). |
@@ -1469,7 +1340,7 @@ __le16 ieee80211_ctstoself_duration(struct ieee80211_hw *hw, | |||
1469 | __le16 ieee80211_generic_frame_duration(struct ieee80211_hw *hw, | 1340 | __le16 ieee80211_generic_frame_duration(struct ieee80211_hw *hw, |
1470 | struct ieee80211_vif *vif, | 1341 | struct ieee80211_vif *vif, |
1471 | size_t frame_len, | 1342 | size_t frame_len, |
1472 | int rate); | 1343 | struct ieee80211_rate *rate); |
1473 | 1344 | ||
1474 | /** | 1345 | /** |
1475 | * ieee80211_get_buffered_bc - accessing buffered broadcast and multicast frames | 1346 | * ieee80211_get_buffered_bc - accessing buffered broadcast and multicast frames |
diff --git a/include/net/wireless.h b/include/net/wireless.h index d30c4ba8fd99..c7f805ee5545 100644 --- a/include/net/wireless.h +++ b/include/net/wireless.h | |||
@@ -13,6 +13,162 @@ | |||
13 | #include <net/cfg80211.h> | 13 | #include <net/cfg80211.h> |
14 | 14 | ||
15 | /** | 15 | /** |
16 | * enum ieee80211_band - supported frequency bands | ||
17 | * | ||
18 | * The bands are assigned this way because the supported | ||
19 | * bitrates differ in these bands. | ||
20 | * | ||
21 | * @IEEE80211_BAND_2GHZ: 2.4GHz ISM band | ||
22 | * @IEEE80211_BAND_5GHZ: around 5GHz band (4.9-5.7) | ||
23 | */ | ||
24 | enum ieee80211_band { | ||
25 | IEEE80211_BAND_2GHZ, | ||
26 | IEEE80211_BAND_5GHZ, | ||
27 | |||
28 | /* keep last */ | ||
29 | IEEE80211_NUM_BANDS | ||
30 | }; | ||
31 | |||
32 | /** | ||
33 | * enum ieee80211_channel_flags - channel flags | ||
34 | * | ||
35 | * Channel flags set by the regulatory control code. | ||
36 | * | ||
37 | * @IEEE80211_CHAN_DISABLED: This channel is disabled. | ||
38 | * @IEEE80211_CHAN_PASSIVE_SCAN: Only passive scanning is permitted | ||
39 | * on this channel. | ||
40 | * @IEEE80211_CHAN_NO_IBSS: IBSS is not allowed on this channel. | ||
41 | * @IEEE80211_CHAN_RADAR: Radar detection is required on this channel. | ||
42 | */ | ||
43 | enum ieee80211_channel_flags { | ||
44 | IEEE80211_CHAN_DISABLED = 1<<0, | ||
45 | IEEE80211_CHAN_PASSIVE_SCAN = 1<<1, | ||
46 | IEEE80211_CHAN_NO_IBSS = 1<<2, | ||
47 | IEEE80211_CHAN_RADAR = 1<<3, | ||
48 | }; | ||
49 | |||
50 | /** | ||
51 | * struct ieee80211_channel - channel definition | ||
52 | * | ||
53 | * This structure describes a single channel for use | ||
54 | * with cfg80211. | ||
55 | * | ||
56 | * @center_freq: center frequency in MHz | ||
57 | * @hw_value: hardware-specific value for the channel | ||
58 | * @flags: channel flags from &enum ieee80211_channel_flags. | ||
59 | * @orig_flags: channel flags at registration time, used by regulatory | ||
60 | * code to support devices with additional restrictions | ||
61 | * @band: band this channel belongs to. | ||
62 | * @max_antenna_gain: maximum antenna gain in dBi | ||
63 | * @max_power: maximum transmission power (in dBm) | ||
64 | * @orig_mag: internal use | ||
65 | * @orig_mpwr: internal use | ||
66 | */ | ||
67 | struct ieee80211_channel { | ||
68 | enum ieee80211_band band; | ||
69 | u16 center_freq; | ||
70 | u16 hw_value; | ||
71 | u32 flags; | ||
72 | int max_antenna_gain; | ||
73 | int max_power; | ||
74 | u32 orig_flags; | ||
75 | int orig_mag, orig_mpwr; | ||
76 | }; | ||
77 | |||
78 | /** | ||
79 | * enum ieee80211_rate_flags - rate flags | ||
80 | * | ||
81 | * Hardware/specification flags for rates. These are structured | ||
82 | * in a way that allows using the same bitrate structure for | ||
83 | * different bands/PHY modes. | ||
84 | * | ||
85 | * @IEEE80211_RATE_SHORT_PREAMBLE: Hardware can send with short | ||
86 | * preamble on this bitrate; only relevant in 2.4GHz band and | ||
87 | * with CCK rates. | ||
88 | * @IEEE80211_RATE_MANDATORY_A: This bitrate is a mandatory rate | ||
89 | * when used with 802.11a (on the 5 GHz band); filled by the | ||
90 | * core code when registering the wiphy. | ||
91 | * @IEEE80211_RATE_MANDATORY_B: This bitrate is a mandatory rate | ||
92 | * when used with 802.11b (on the 2.4 GHz band); filled by the | ||
93 | * core code when registering the wiphy. | ||
94 | * @IEEE80211_RATE_MANDATORY_G: This bitrate is a mandatory rate | ||
95 | * when used with 802.11g (on the 2.4 GHz band); filled by the | ||
96 | * core code when registering the wiphy. | ||
97 | * @IEEE80211_RATE_ERP_G: This is an ERP rate in 802.11g mode. | ||
98 | */ | ||
99 | enum ieee80211_rate_flags { | ||
100 | IEEE80211_RATE_SHORT_PREAMBLE = 1<<0, | ||
101 | IEEE80211_RATE_MANDATORY_A = 1<<1, | ||
102 | IEEE80211_RATE_MANDATORY_B = 1<<2, | ||
103 | IEEE80211_RATE_MANDATORY_G = 1<<3, | ||
104 | IEEE80211_RATE_ERP_G = 1<<4, | ||
105 | }; | ||
106 | |||
107 | /** | ||
108 | * struct ieee80211_rate - bitrate definition | ||
109 | * | ||
110 | * This structure describes a bitrate that an 802.11 PHY can | ||
111 | * operate with. The two values @hw_value and @hw_value_short | ||
112 | * are only for driver use when pointers to this structure are | ||
113 | * passed around. | ||
114 | * | ||
115 | * @flags: rate-specific flags | ||
116 | * @bitrate: bitrate in units of 100 Kbps | ||
117 | * @hw_value: driver/hardware value for this rate | ||
118 | * @hw_value_short: driver/hardware value for this rate when | ||
119 | * short preamble is used | ||
120 | */ | ||
121 | struct ieee80211_rate { | ||
122 | u32 flags; | ||
123 | u16 bitrate; | ||
124 | u16 hw_value, hw_value_short; | ||
125 | }; | ||
126 | |||
127 | /** | ||
128 | * struct ieee80211_ht_info - describing STA's HT capabilities | ||
129 | * | ||
130 | * This structure describes most essential parameters needed | ||
131 | * to describe 802.11n HT capabilities for an STA. | ||
132 | * | ||
133 | * @ht_supported: is HT supported by STA, 0: no, 1: yes | ||
134 | * @cap: HT capabilities map as described in 802.11n spec | ||
135 | * @ampdu_factor: Maximum A-MPDU length factor | ||
136 | * @ampdu_density: Minimum A-MPDU spacing | ||
137 | * @supp_mcs_set: Supported MCS set as described in 802.11n spec | ||
138 | */ | ||
139 | struct ieee80211_ht_info { | ||
140 | u16 cap; /* use IEEE80211_HT_CAP_ */ | ||
141 | u8 ht_supported; | ||
142 | u8 ampdu_factor; | ||
143 | u8 ampdu_density; | ||
144 | u8 supp_mcs_set[16]; | ||
145 | }; | ||
146 | |||
147 | /** | ||
148 | * struct ieee80211_supported_band - frequency band definition | ||
149 | * | ||
150 | * This structure describes a frequency band a wiphy | ||
151 | * is able to operate in. | ||
152 | * | ||
153 | * @channels: Array of channels the hardware can operate in | ||
154 | * in this band. | ||
155 | * @band: the band this structure represents | ||
156 | * @n_channels: Number of channels in @channels | ||
157 | * @bitrates: Array of bitrates the hardware can operate with | ||
158 | * in this band. Must be sorted to give a valid "supported | ||
159 | * rates" IE, i.e. CCK rates first, then OFDM. | ||
160 | * @n_bitrates: Number of bitrates in @bitrates | ||
161 | */ | ||
162 | struct ieee80211_supported_band { | ||
163 | struct ieee80211_channel *channels; | ||
164 | struct ieee80211_rate *bitrates; | ||
165 | enum ieee80211_band band; | ||
166 | int n_channels; | ||
167 | int n_bitrates; | ||
168 | struct ieee80211_ht_info ht_info; | ||
169 | }; | ||
170 | |||
171 | /** | ||
16 | * struct wiphy - wireless hardware description | 172 | * struct wiphy - wireless hardware description |
17 | * @idx: the wiphy index assigned to this item | 173 | * @idx: the wiphy index assigned to this item |
18 | * @class_dev: the class device representing /sys/class/ieee80211/<wiphy-name> | 174 | * @class_dev: the class device representing /sys/class/ieee80211/<wiphy-name> |
@@ -30,6 +186,8 @@ struct wiphy { | |||
30 | * help determine whether you own this wiphy or not. */ | 186 | * help determine whether you own this wiphy or not. */ |
31 | void *privid; | 187 | void *privid; |
32 | 188 | ||
189 | struct ieee80211_supported_band *bands[IEEE80211_NUM_BANDS]; | ||
190 | |||
33 | /* fields below are read-only, assigned by cfg80211 */ | 191 | /* fields below are read-only, assigned by cfg80211 */ |
34 | 192 | ||
35 | /* the item in /sys/class/ieee80211/ points to this, | 193 | /* the item in /sys/class/ieee80211/ points to this, |
@@ -136,4 +294,14 @@ extern void wiphy_unregister(struct wiphy *wiphy); | |||
136 | */ | 294 | */ |
137 | extern void wiphy_free(struct wiphy *wiphy); | 295 | extern void wiphy_free(struct wiphy *wiphy); |
138 | 296 | ||
297 | /** | ||
298 | * ieee80211_channel_to_frequency - convert channel number to frequency | ||
299 | */ | ||
300 | extern int ieee80211_channel_to_frequency(int chan); | ||
301 | |||
302 | /** | ||
303 | * ieee80211_frequency_to_channel - convert frequency to channel number | ||
304 | */ | ||
305 | extern int ieee80211_frequency_to_channel(int freq); | ||
306 | |||
139 | #endif /* __NET_WIRELESS_H */ | 307 | #endif /* __NET_WIRELESS_H */ |