aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
Diffstat (limited to 'include')
-rw-r--r--include/net/mac80211.h197
-rw-r--r--include/net/wireless.h168
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 */
83struct 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. */
107struct 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 */
132enum 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 */
153struct 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 */
191struct 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
321struct ieee80211_tx_control { 208struct 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 */
428struct ieee80211_rx_status { 308struct 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 */
529struct ieee80211_conf { 402struct 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 */
771enum ieee80211_hw_flags { 642enum 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. */
1288int 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 */
24enum 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 */
43enum 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 */
67struct 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 */
99enum 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 */
121struct 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 */
139struct 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 */
162struct 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 */
137extern void wiphy_free(struct wiphy *wiphy); 295extern void wiphy_free(struct wiphy *wiphy);
138 296
297/**
298 * ieee80211_channel_to_frequency - convert channel number to frequency
299 */
300extern int ieee80211_channel_to_frequency(int chan);
301
302/**
303 * ieee80211_frequency_to_channel - convert frequency to channel number
304 */
305extern int ieee80211_frequency_to_channel(int freq);
306
139#endif /* __NET_WIRELESS_H */ 307#endif /* __NET_WIRELESS_H */