aboutsummaryrefslogtreecommitdiffstats
path: root/include/net/mac80211.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/net/mac80211.h')
-rw-r--r--include/net/mac80211.h482
1 files changed, 262 insertions, 220 deletions
diff --git a/include/net/mac80211.h b/include/net/mac80211.h
index 9083bafb63ca..5ab6a350ee6d 100644
--- a/include/net/mac80211.h
+++ b/include/net/mac80211.h
@@ -38,7 +38,11 @@
38 * called in hardware interrupt context. The low-level driver must not call any 38 * called in hardware interrupt context. The low-level driver must not call any
39 * other functions in hardware interrupt context. If there is a need for such 39 * other functions in hardware interrupt context. If there is a need for such
40 * call, the low-level driver should first ACK the interrupt and perform the 40 * call, the low-level driver should first ACK the interrupt and perform the
41 * IEEE 802.11 code call after this, e.g. from a scheduled workqueue function. 41 * IEEE 802.11 code call after this, e.g. from a scheduled workqueue or even
42 * tasklet function.
43 *
44 * NOTE: If the driver opts to use the _irqsafe() functions, it may not also
45 * use the non-irqsafe functions!
42 */ 46 */
43 47
44/** 48/**
@@ -69,95 +73,6 @@
69 * not do so then mac80211 may add this under certain circumstances. 73 * not do so then mac80211 may add this under certain circumstances.
70 */ 74 */
71 75
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/** 76/**
162 * struct ieee80211_ht_bss_info - describing BSS's HT characteristics 77 * struct ieee80211_ht_bss_info - describing BSS's HT characteristics
163 * 78 *
@@ -175,46 +90,22 @@ struct ieee80211_ht_bss_info {
175}; 90};
176 91
177/** 92/**
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 93 * struct ieee80211_tx_queue_params - transmit queue configuration
203 * 94 *
204 * The information provided in this structure is required for QoS 95 * The information provided in this structure is required for QoS
205 * transmit queue configuration. 96 * transmit queue configuration. Cf. IEEE 802.11 7.3.2.29.
206 * 97 *
207 * @aifs: arbitration interface space [0..255, -1: use default] 98 * @aifs: arbitration interface space [0..255, -1: use default]
208 * @cw_min: minimum contention window [will be a value of the form 99 * @cw_min: minimum contention window [will be a value of the form
209 * 2^n-1 in the range 1..1023; 0: use default] 100 * 2^n-1 in the range 1..1023; 0: use default]
210 * @cw_max: maximum contention window [like @cw_min] 101 * @cw_max: maximum contention window [like @cw_min]
211 * @burst_time: maximum burst time in units of 0.1ms, 0 meaning disabled 102 * @txop: maximum burst time in units of 32 usecs, 0 meaning disabled
212 */ 103 */
213struct ieee80211_tx_queue_params { 104struct ieee80211_tx_queue_params {
214 int aifs; 105 s16 aifs;
215 int cw_min; 106 u16 cw_min;
216 int cw_max; 107 u16 cw_max;
217 int burst_time; 108 u16 txop;
218}; 109};
219 110
220/** 111/**
@@ -246,6 +137,7 @@ struct ieee80211_tx_queue_stats_data {
246 * @IEEE80211_TX_QUEUE_AFTER_BEACON: transmit queue for frames to be 137 * @IEEE80211_TX_QUEUE_AFTER_BEACON: transmit queue for frames to be
247 * sent after a beacon 138 * sent after a beacon
248 * @IEEE80211_TX_QUEUE_BEACON: transmit queue for beacon frames 139 * @IEEE80211_TX_QUEUE_BEACON: transmit queue for beacon frames
140 * @NUM_TX_DATA_QUEUES_AMPDU: adding more queues for A-MPDU
249 */ 141 */
250enum ieee80211_tx_queue { 142enum ieee80211_tx_queue {
251 IEEE80211_TX_QUEUE_DATA0, 143 IEEE80211_TX_QUEUE_DATA0,
@@ -261,11 +153,12 @@ enum ieee80211_tx_queue {
261 * this struct need to have fixed values. As soon as it is removed, we can 153 * this struct need to have fixed values. As soon as it is removed, we can
262 * fix these entries. */ 154 * fix these entries. */
263 IEEE80211_TX_QUEUE_AFTER_BEACON = 6, 155 IEEE80211_TX_QUEUE_AFTER_BEACON = 6,
264 IEEE80211_TX_QUEUE_BEACON = 7 156 IEEE80211_TX_QUEUE_BEACON = 7,
157 NUM_TX_DATA_QUEUES_AMPDU = 16
265}; 158};
266 159
267struct ieee80211_tx_queue_stats { 160struct ieee80211_tx_queue_stats {
268 struct ieee80211_tx_queue_stats_data data[NUM_TX_DATA_QUEUES]; 161 struct ieee80211_tx_queue_stats_data data[NUM_TX_DATA_QUEUES_AMPDU];
269}; 162};
270 163
271struct ieee80211_low_level_stats { 164struct ieee80211_low_level_stats {
@@ -312,63 +205,88 @@ struct ieee80211_bss_conf {
312 bool use_short_preamble; 205 bool use_short_preamble;
313}; 206};
314 207
208/**
209 * enum mac80211_tx_control_flags - flags to describe Tx configuration for
210 * the Tx frame
211 *
212 * These flags are used with the @flags member of &ieee80211_tx_control
213 *
214 * @IEEE80211_TXCTL_REQ_TX_STATUS: request TX status callback for this frame.
215 * @IEEE80211_TXCTL_DO_NOT_ENCRYPT: send this frame without encryption;
216 * e.g., for EAPOL frame
217 * @IEEE80211_TXCTL_USE_RTS_CTS: use RTS-CTS before sending frame
218 * @IEEE80211_TXCTL_USE_CTS_PROTECT: use CTS protection for the frame (e.g.,
219 * for combined 802.11g / 802.11b networks)
220 * @IEEE80211_TXCTL_NO_ACK: tell the low level not to wait for an ack
221 * @IEEE80211_TXCTL_RATE_CTRL_PROBE
222 * @EEE80211_TXCTL_CLEAR_PS_FILT: clear powersave filter
223 * for destination station
224 * @IEEE80211_TXCTL_REQUEUE:
225 * @IEEE80211_TXCTL_FIRST_FRAGMENT: this is a first fragment of the frame
226 * @IEEE80211_TXCTL_LONG_RETRY_LIMIT: this frame should be send using the
227 * through set_retry_limit configured long
228 * retry value
229 * @IEEE80211_TXCTL_EAPOL_FRAME: internal to mac80211
230 * @IEEE80211_TXCTL_SEND_AFTER_DTIM: send this frame after DTIM beacon
231 * @IEEE80211_TXCTL_AMPDU: this frame should be sent as part of an A-MPDU
232 * @IEEE80211_TXCTL_OFDM_HT: this frame can be sent in HT OFDM rates. number
233 * of streams when this flag is on can be extracted
234 * from antenna_sel_tx, so if 1 antenna is marked
235 * use SISO, 2 antennas marked use MIMO, n antennas
236 * marked use MIMO_n.
237 * @IEEE80211_TXCTL_GREEN_FIELD: use green field protection for this frame
238 * @IEEE80211_TXCTL_40_MHZ_WIDTH: send this frame using 40 Mhz channel width
239 * @IEEE80211_TXCTL_DUP_DATA: duplicate data frame on both 20 Mhz channels
240 * @IEEE80211_TXCTL_SHORT_GI: send this frame using short guard interval
241 */
242enum mac80211_tx_control_flags {
243 IEEE80211_TXCTL_REQ_TX_STATUS = (1<<0),
244 IEEE80211_TXCTL_DO_NOT_ENCRYPT = (1<<1),
245 IEEE80211_TXCTL_USE_RTS_CTS = (1<<2),
246 IEEE80211_TXCTL_USE_CTS_PROTECT = (1<<3),
247 IEEE80211_TXCTL_NO_ACK = (1<<4),
248 IEEE80211_TXCTL_RATE_CTRL_PROBE = (1<<5),
249 IEEE80211_TXCTL_CLEAR_PS_FILT = (1<<6),
250 IEEE80211_TXCTL_REQUEUE = (1<<7),
251 IEEE80211_TXCTL_FIRST_FRAGMENT = (1<<8),
252 IEEE80211_TXCTL_SHORT_PREAMBLE = (1<<9),
253 IEEE80211_TXCTL_LONG_RETRY_LIMIT = (1<<10),
254 IEEE80211_TXCTL_EAPOL_FRAME = (1<<11),
255 IEEE80211_TXCTL_SEND_AFTER_DTIM = (1<<12),
256 IEEE80211_TXCTL_AMPDU = (1<<13),
257 IEEE80211_TXCTL_OFDM_HT = (1<<14),
258 IEEE80211_TXCTL_GREEN_FIELD = (1<<15),
259 IEEE80211_TXCTL_40_MHZ_WIDTH = (1<<16),
260 IEEE80211_TXCTL_DUP_DATA = (1<<17),
261 IEEE80211_TXCTL_SHORT_GI = (1<<18),
262};
263
315/* Transmit control fields. This data structure is passed to low-level driver 264/* Transmit control fields. This data structure is passed to low-level driver
316 * with each TX frame. The low-level driver is responsible for configuring 265 * with each TX frame. The low-level driver is responsible for configuring
317 * the hardware to use given values (depending on what is supported). */ 266 * the hardware to use given values (depending on what is supported). */
318 267
319struct ieee80211_tx_control { 268struct ieee80211_tx_control {
320 struct ieee80211_vif *vif; 269 struct ieee80211_vif *vif;
321 int tx_rate; /* Transmit rate, given as the hw specific value for the 270 struct ieee80211_rate *tx_rate;
322 * rate (from struct ieee80211_rate) */ 271
323 int rts_cts_rate; /* Transmit rate for RTS/CTS frame, given as the hw 272 /* Transmit rate for RTS/CTS frame */
324 * specific value for the rate (from 273 struct ieee80211_rate *rts_cts_rate;
325 * struct ieee80211_rate) */ 274
326 275 /* retry rate for the last retries */
327#define IEEE80211_TXCTL_REQ_TX_STATUS (1<<0)/* request TX status callback for 276 struct ieee80211_rate *alt_retry_rate;
328 * this frame */ 277
329#define IEEE80211_TXCTL_DO_NOT_ENCRYPT (1<<1) /* send this frame without 278 u32 flags; /* tx control flags defined above */
330 * encryption; e.g., for EAPOL
331 * frames */
332#define IEEE80211_TXCTL_USE_RTS_CTS (1<<2) /* use RTS-CTS before sending
333 * frame */
334#define IEEE80211_TXCTL_USE_CTS_PROTECT (1<<3) /* use CTS protection for the
335 * frame (e.g., for combined
336 * 802.11g / 802.11b networks) */
337#define IEEE80211_TXCTL_NO_ACK (1<<4) /* tell the low level not to
338 * wait for an ack */
339#define IEEE80211_TXCTL_RATE_CTRL_PROBE (1<<5)
340#define IEEE80211_TXCTL_CLEAR_DST_MASK (1<<6)
341#define IEEE80211_TXCTL_REQUEUE (1<<7)
342#define IEEE80211_TXCTL_FIRST_FRAGMENT (1<<8) /* this is a first fragment of
343 * the frame */
344#define IEEE80211_TXCTL_LONG_RETRY_LIMIT (1<<10) /* this frame should be send
345 * using the through
346 * set_retry_limit configured
347 * long retry value */
348#define IEEE80211_TXCTL_EAPOL_FRAME (1<<11) /* internal to mac80211 */
349#define IEEE80211_TXCTL_SEND_AFTER_DTIM (1<<12) /* send this frame after DTIM
350 * beacon */
351 u32 flags; /* tx control flags defined
352 * above */
353 u8 key_idx; /* keyidx from hw->set_key(), undefined if 279 u8 key_idx; /* keyidx from hw->set_key(), undefined if
354 * IEEE80211_TXCTL_DO_NOT_ENCRYPT is set */ 280 * IEEE80211_TXCTL_DO_NOT_ENCRYPT is set */
355 u8 retry_limit; /* 1 = only first attempt, 2 = one retry, .. 281 u8 retry_limit; /* 1 = only first attempt, 2 = one retry, ..
356 * This could be used when set_retry_limit 282 * This could be used when set_retry_limit
357 * is not implemented by the driver */ 283 * is not implemented by the driver */
358 u8 power_level; /* per-packet transmit power level, in dBm */ 284 u8 antenna_sel_tx; /* 0 = default/diversity, otherwise bit
359 u8 antenna_sel_tx; /* 0 = default/diversity, 1 = Ant0, 2 = Ant1 */ 285 * position represents antenna number used */
360 u8 icv_len; /* length of the ICV/MIC field in octets */ 286 u8 icv_len; /* length of the ICV/MIC field in octets */
361 u8 iv_len; /* length of the IV field in octets */ 287 u8 iv_len; /* length of the IV field in octets */
362 u8 queue; /* hardware queue to use for this frame; 288 u8 queue; /* hardware queue to use for this frame;
363 * 0 = highest, hw->queues-1 = lowest */ 289 * 0 = highest, hw->queues-1 = lowest */
364 struct ieee80211_rate *rate; /* internal 80211.o rate */
365 struct ieee80211_rate *rts_rate; /* internal 80211.o rate
366 * for RTS/CTS */
367 int alt_retry_rate; /* retry rate for the last retries, given as the
368 * hw specific value for the rate (from
369 * struct ieee80211_rate). To be used to limit
370 * packet dropping when probing higher rates, if hw
371 * supports multiple retry rates. -1 = not used */
372 int type; /* internal */ 290 int type; /* internal */
373}; 291};
374 292
@@ -391,7 +309,8 @@ struct ieee80211_tx_control {
391 * @RX_FLAG_FAILED_PLCP_CRC: Set this flag if the PCLP check failed on 309 * @RX_FLAG_FAILED_PLCP_CRC: Set this flag if the PCLP check failed on
392 * the frame. 310 * the frame.
393 * @RX_FLAG_TSFT: The timestamp passed in the RX status (@mactime field) 311 * @RX_FLAG_TSFT: The timestamp passed in the RX status (@mactime field)
394 * is valid. 312 * is valid. This is useful in monitor mode and necessary for beacon frames
313 * to enable IBSS merging.
395 */ 314 */
396enum mac80211_rx_flags { 315enum mac80211_rx_flags {
397 RX_FLAG_MMIC_ERROR = 1<<0, 316 RX_FLAG_MMIC_ERROR = 1<<0,
@@ -410,27 +329,26 @@ enum mac80211_rx_flags {
410 * The low-level driver should provide this information (the subset 329 * The low-level driver should provide this information (the subset
411 * supported by hardware) to the 802.11 code with each received 330 * supported by hardware) to the 802.11 code with each received
412 * frame. 331 * frame.
413 * @mactime: MAC timestamp as defined by 802.11 332 * @mactime: value in microseconds of the 64-bit Time Synchronization Function
333 * (TSF) timer when the first data symbol (MPDU) arrived at the hardware.
334 * @band: the active band when this frame was received
414 * @freq: frequency the radio was tuned to when receiving this frame, in MHz 335 * @freq: frequency the radio was tuned to when receiving this frame, in MHz
415 * @channel: channel the radio was tuned to
416 * @phymode: active PHY mode
417 * @ssi: signal strength when receiving this frame 336 * @ssi: signal strength when receiving this frame
418 * @signal: used as 'qual' in statistics reporting 337 * @signal: used as 'qual' in statistics reporting
419 * @noise: PHY noise when receiving this frame 338 * @noise: PHY noise when receiving this frame
420 * @antenna: antenna used 339 * @antenna: antenna used
421 * @rate: data rate 340 * @rate_idx: index of data rate into band's supported rates
422 * @flag: %RX_FLAG_* 341 * @flag: %RX_FLAG_*
423 */ 342 */
424struct ieee80211_rx_status { 343struct ieee80211_rx_status {
425 u64 mactime; 344 u64 mactime;
345 enum ieee80211_band band;
426 int freq; 346 int freq;
427 int channel;
428 enum ieee80211_phymode phymode;
429 int ssi; 347 int ssi;
430 int signal; 348 int signal;
431 int noise; 349 int noise;
432 int antenna; 350 int antenna;
433 int rate; 351 int rate_idx;
434 int flag; 352 int flag;
435}; 353};
436 354
@@ -441,12 +359,14 @@ struct ieee80211_rx_status {
441 * 359 *
442 * @IEEE80211_TX_STATUS_TX_FILTERED: The frame was not transmitted 360 * @IEEE80211_TX_STATUS_TX_FILTERED: The frame was not transmitted
443 * because the destination STA was in powersave mode. 361 * because the destination STA was in powersave mode.
444 *
445 * @IEEE80211_TX_STATUS_ACK: Frame was acknowledged 362 * @IEEE80211_TX_STATUS_ACK: Frame was acknowledged
363 * @IEEE80211_TX_STATUS_AMPDU: The frame was aggregated, so status
364 * is for the whole aggregation.
446 */ 365 */
447enum ieee80211_tx_status_flags { 366enum ieee80211_tx_status_flags {
448 IEEE80211_TX_STATUS_TX_FILTERED = 1<<0, 367 IEEE80211_TX_STATUS_TX_FILTERED = 1<<0,
449 IEEE80211_TX_STATUS_ACK = 1<<1, 368 IEEE80211_TX_STATUS_ACK = 1<<1,
369 IEEE80211_TX_STATUS_AMPDU = 1<<2,
450}; 370};
451 371
452/** 372/**
@@ -457,24 +377,25 @@ enum ieee80211_tx_status_flags {
457 * 377 *
458 * @control: a copy of the &struct ieee80211_tx_control passed to the driver 378 * @control: a copy of the &struct ieee80211_tx_control passed to the driver
459 * in the tx() callback. 379 * in the tx() callback.
460 *
461 * @flags: transmit status flags, defined above 380 * @flags: transmit status flags, defined above
462 * 381 * @retry_count: number of retries
463 * @ack_signal: signal strength of the ACK frame
464 *
465 * @excessive_retries: set to 1 if the frame was retried many times 382 * @excessive_retries: set to 1 if the frame was retried many times
466 * but not acknowledged 383 * but not acknowledged
467 * 384 * @ampdu_ack_len: number of aggregated frames.
468 * @retry_count: number of retries 385 * relevant only if IEEE80211_TX_STATUS_AMPDU was set.
469 * 386 * @ampdu_ack_map: block ack bit map for the aggregation.
387 * relevant only if IEEE80211_TX_STATUS_AMPDU was set.
388 * @ack_signal: signal strength of the ACK frame
470 * @queue_length: ?? REMOVE 389 * @queue_length: ?? REMOVE
471 * @queue_number: ?? REMOVE 390 * @queue_number: ?? REMOVE
472 */ 391 */
473struct ieee80211_tx_status { 392struct ieee80211_tx_status {
474 struct ieee80211_tx_control control; 393 struct ieee80211_tx_control control;
475 u8 flags; 394 u8 flags;
476 bool excessive_retries;
477 u8 retry_count; 395 u8 retry_count;
396 bool excessive_retries;
397 u8 ampdu_ack_len;
398 u64 ampdu_ack_map;
478 int ack_signal; 399 int ack_signal;
479 int queue_length; 400 int queue_length;
480 int queue_number; 401 int queue_number;
@@ -502,41 +423,29 @@ enum ieee80211_conf_flags {
502 * 423 *
503 * @radio_enabled: when zero, driver is required to switch off the radio. 424 * @radio_enabled: when zero, driver is required to switch off the radio.
504 * TODO make a flag 425 * TODO make a flag
505 * @channel: IEEE 802.11 channel number
506 * @freq: frequency in MHz
507 * @channel_val: hardware specific channel value for the channel
508 * @phymode: PHY mode to activate (REMOVE)
509 * @chan: channel to switch to, pointer to the channel information
510 * @mode: pointer to mode definition
511 * @regulatory_domain: ??
512 * @beacon_int: beacon interval (TODO make interface config) 426 * @beacon_int: beacon interval (TODO make interface config)
513 * @flags: configuration flags defined above 427 * @flags: configuration flags defined above
514 * @power_level: transmit power limit for current regulatory domain in dBm 428 * @power_level: requested transmit power (in dBm)
515 * @antenna_max: maximum antenna gain 429 * @max_antenna_gain: maximum antenna gain (in dBi)
516 * @antenna_sel_tx: transmit antenna selection, 0: default/diversity, 430 * @antenna_sel_tx: transmit antenna selection, 0: default/diversity,
517 * 1/2: antenna 0/1 431 * 1/2: antenna 0/1
518 * @antenna_sel_rx: receive antenna selection, like @antenna_sel_tx 432 * @antenna_sel_rx: receive antenna selection, like @antenna_sel_tx
519 * @ht_conf: describes current self configuration of 802.11n HT capabilies 433 * @ht_conf: describes current self configuration of 802.11n HT capabilies
520 * @ht_bss_conf: describes current BSS configuration of 802.11n HT parameters 434 * @ht_bss_conf: describes current BSS configuration of 802.11n HT parameters
435 * @channel: the channel to tune to
521 */ 436 */
522struct ieee80211_conf { 437struct ieee80211_conf {
523 int channel; /* IEEE 802.11 channel number */
524 int freq; /* MHz */
525 int channel_val; /* hw specific value for the channel */
526
527 enum ieee80211_phymode phymode;
528 struct ieee80211_channel *chan;
529 struct ieee80211_hw_mode *mode;
530 unsigned int regulatory_domain;
531 int radio_enabled; 438 int radio_enabled;
532 439
533 int beacon_int; 440 int beacon_int;
534 u32 flags; 441 u32 flags;
535 u8 power_level; 442 int power_level;
536 u8 antenna_max; 443 int max_antenna_gain;
537 u8 antenna_sel_tx; 444 u8 antenna_sel_tx;
538 u8 antenna_sel_rx; 445 u8 antenna_sel_rx;
539 446
447 struct ieee80211_channel *channel;
448
540 struct ieee80211_ht_info ht_conf; 449 struct ieee80211_ht_info ht_conf;
541 struct ieee80211_ht_bss_info ht_bss_conf; 450 struct ieee80211_ht_bss_info ht_bss_conf;
542}; 451};
@@ -555,12 +464,14 @@ struct ieee80211_conf {
555 * @IEEE80211_IF_TYPE_WDS: interface in WDS mode. 464 * @IEEE80211_IF_TYPE_WDS: interface in WDS mode.
556 * @IEEE80211_IF_TYPE_VLAN: VLAN interface bound to an AP, drivers 465 * @IEEE80211_IF_TYPE_VLAN: VLAN interface bound to an AP, drivers
557 * will never see this type. 466 * will never see this type.
467 * @IEEE80211_IF_TYPE_MESH_POINT: 802.11s mesh point
558 */ 468 */
559enum ieee80211_if_types { 469enum ieee80211_if_types {
560 IEEE80211_IF_TYPE_INVALID, 470 IEEE80211_IF_TYPE_INVALID,
561 IEEE80211_IF_TYPE_AP, 471 IEEE80211_IF_TYPE_AP,
562 IEEE80211_IF_TYPE_STA, 472 IEEE80211_IF_TYPE_STA,
563 IEEE80211_IF_TYPE_IBSS, 473 IEEE80211_IF_TYPE_IBSS,
474 IEEE80211_IF_TYPE_MESH_POINT,
564 IEEE80211_IF_TYPE_MNTR, 475 IEEE80211_IF_TYPE_MNTR,
565 IEEE80211_IF_TYPE_WDS, 476 IEEE80211_IF_TYPE_WDS,
566 IEEE80211_IF_TYPE_VLAN, 477 IEEE80211_IF_TYPE_VLAN,
@@ -582,6 +493,14 @@ struct ieee80211_vif {
582 u8 drv_priv[0] __attribute__((__aligned__(sizeof(void *)))); 493 u8 drv_priv[0] __attribute__((__aligned__(sizeof(void *))));
583}; 494};
584 495
496static inline bool ieee80211_vif_is_mesh(struct ieee80211_vif *vif)
497{
498#ifdef CONFIG_MAC80211_MESH
499 return vif->type == IEEE80211_IF_TYPE_MESH_POINT;
500#endif
501 return false;
502}
503
585/** 504/**
586 * struct ieee80211_if_init_conf - initial configuration of an interface 505 * struct ieee80211_if_init_conf - initial configuration of an interface
587 * 506 *
@@ -757,15 +676,19 @@ enum sta_notify_cmd {
757 * %IEEE80211_HW_HOST_GEN_BEACON_TEMPLATE is also not set because 676 * %IEEE80211_HW_HOST_GEN_BEACON_TEMPLATE is also not set because
758 * otherwise the stack will not know when the DTIM beacon was sent. 677 * otherwise the stack will not know when the DTIM beacon was sent.
759 * 678 *
760 * @IEEE80211_HW_DEFAULT_REG_DOMAIN_CONFIGURED: 679 * @IEEE80211_HW_2GHZ_SHORT_SLOT_INCAPABLE:
761 * Channels are already configured to the default regulatory domain 680 * Hardware is not capable of short slot operation on the 2.4 GHz band.
762 * specified in the device's EEPROM 681 *
682 * @IEEE80211_HW_2GHZ_SHORT_PREAMBLE_INCAPABLE:
683 * Hardware is not capable of receiving frames with short preamble on
684 * the 2.4 GHz band.
763 */ 685 */
764enum ieee80211_hw_flags { 686enum ieee80211_hw_flags {
765 IEEE80211_HW_HOST_GEN_BEACON_TEMPLATE = 1<<0, 687 IEEE80211_HW_HOST_GEN_BEACON_TEMPLATE = 1<<0,
766 IEEE80211_HW_RX_INCLUDES_FCS = 1<<1, 688 IEEE80211_HW_RX_INCLUDES_FCS = 1<<1,
767 IEEE80211_HW_HOST_BROADCAST_PS_BUFFERING = 1<<2, 689 IEEE80211_HW_HOST_BROADCAST_PS_BUFFERING = 1<<2,
768 IEEE80211_HW_DEFAULT_REG_DOMAIN_CONFIGURED = 1<<3, 690 IEEE80211_HW_2GHZ_SHORT_SLOT_INCAPABLE = 1<<3,
691 IEEE80211_HW_2GHZ_SHORT_PREAMBLE_INCAPABLE = 1<<4,
769}; 692};
770 693
771/** 694/**
@@ -777,7 +700,8 @@ enum ieee80211_hw_flags {
777 * @wiphy: This points to the &struct wiphy allocated for this 700 * @wiphy: This points to the &struct wiphy allocated for this
778 * 802.11 PHY. You must fill in the @perm_addr and @dev 701 * 802.11 PHY. You must fill in the @perm_addr and @dev
779 * members of this structure using SET_IEEE80211_DEV() 702 * members of this structure using SET_IEEE80211_DEV()
780 * and SET_IEEE80211_PERM_ADDR(). 703 * and SET_IEEE80211_PERM_ADDR(). Additionally, all supported
704 * bands (with channels, bitrates) are registered here.
781 * 705 *
782 * @conf: &struct ieee80211_conf, device configuration, don't use. 706 * @conf: &struct ieee80211_conf, device configuration, don't use.
783 * 707 *
@@ -913,8 +837,18 @@ static inline void SET_IEEE80211_PERM_ADDR(struct ieee80211_hw *hw, u8 *addr)
913 * parameter to see whether multicast frames should be accepted 837 * parameter to see whether multicast frames should be accepted
914 * or dropped. 838 * or dropped.
915 * 839 *
916 * All unsupported flags in @total_flags must be cleared, i.e. you 840 * All unsupported flags in @total_flags must be cleared.
917 * should clear all bits except those you honoured. 841 * Hardware does not support a flag if it is incapable of _passing_
842 * the frame to the stack. Otherwise the driver must ignore
843 * the flag, but not clear it.
844 * You must _only_ clear the flag (announce no support for the
845 * flag to mac80211) if you are not able to pass the packet type
846 * to the stack (so the hardware always filters it).
847 * So for example, you should clear @FIF_CONTROL, if your hardware
848 * always filters control frames. If your hardware always passes
849 * control frames to the kernel and is incapable of filtering them,
850 * you do _not_ clear the @FIF_CONTROL flag.
851 * This rule applies to all other FIF flags as well.
918 */ 852 */
919 853
920/** 854/**
@@ -967,10 +901,14 @@ enum ieee80211_filter_flags {
967 * &struct ieee80211_ops to indicate which action is needed. 901 * &struct ieee80211_ops to indicate which action is needed.
968 * @IEEE80211_AMPDU_RX_START: start Rx aggregation 902 * @IEEE80211_AMPDU_RX_START: start Rx aggregation
969 * @IEEE80211_AMPDU_RX_STOP: stop Rx aggregation 903 * @IEEE80211_AMPDU_RX_STOP: stop Rx aggregation
904 * @IEEE80211_AMPDU_TX_START: start Tx aggregation
905 * @IEEE80211_AMPDU_TX_STOP: stop Tx aggregation
970 */ 906 */
971enum ieee80211_ampdu_mlme_action { 907enum ieee80211_ampdu_mlme_action {
972 IEEE80211_AMPDU_RX_START, 908 IEEE80211_AMPDU_RX_START,
973 IEEE80211_AMPDU_RX_STOP, 909 IEEE80211_AMPDU_RX_STOP,
910 IEEE80211_AMPDU_TX_START,
911 IEEE80211_AMPDU_TX_STOP,
974}; 912};
975 913
976/** 914/**
@@ -1051,7 +989,9 @@ enum ieee80211_ampdu_mlme_action {
1051 * given local_address is enabled. 989 * given local_address is enabled.
1052 * 990 *
1053 * @hw_scan: Ask the hardware to service the scan request, no need to start 991 * @hw_scan: Ask the hardware to service the scan request, no need to start
1054 * the scan state machine in stack. 992 * the scan state machine in stack. The scan must honour the channel
993 * configuration done by the regulatory agent in the wiphy's registered
994 * bands.
1055 * 995 *
1056 * @get_stats: return low-level statistics 996 * @get_stats: return low-level statistics
1057 * 997 *
@@ -1111,7 +1051,8 @@ enum ieee80211_ampdu_mlme_action {
1111 * The RA/TID combination determines the destination and TID we want 1051 * The RA/TID combination determines the destination and TID we want
1112 * the ampdu action to be performed for. The action is defined through 1052 * the ampdu action to be performed for. The action is defined through
1113 * ieee80211_ampdu_mlme_action. Starting sequence number (@ssn) 1053 * ieee80211_ampdu_mlme_action. Starting sequence number (@ssn)
1114 * is the first frame we expect to perform the action on. 1054 * is the first frame we expect to perform the action on. notice
1055 * that TX/RX_STOP can pass NULL for this parameter.
1115 */ 1056 */
1116struct ieee80211_ops { 1057struct ieee80211_ops {
1117 int (*tx)(struct ieee80211_hw *hw, struct sk_buff *skb, 1058 int (*tx)(struct ieee80211_hw *hw, struct sk_buff *skb,
@@ -1162,7 +1103,7 @@ struct ieee80211_ops {
1162 int (*conf_ht)(struct ieee80211_hw *hw, struct ieee80211_conf *conf); 1103 int (*conf_ht)(struct ieee80211_hw *hw, struct ieee80211_conf *conf);
1163 int (*ampdu_action)(struct ieee80211_hw *hw, 1104 int (*ampdu_action)(struct ieee80211_hw *hw,
1164 enum ieee80211_ampdu_mlme_action action, 1105 enum ieee80211_ampdu_mlme_action action,
1165 const u8 *ra, u16 tid, u16 ssn); 1106 const u8 *addr, u16 tid, u16 *ssn);
1166}; 1107};
1167 1108
1168/** 1109/**
@@ -1183,8 +1124,9 @@ struct ieee80211_hw *ieee80211_alloc_hw(size_t priv_data_len,
1183/** 1124/**
1184 * ieee80211_register_hw - Register hardware device 1125 * ieee80211_register_hw - Register hardware device
1185 * 1126 *
1186 * You must call this function before any other functions 1127 * You must call this function before any other functions in
1187 * except ieee80211_register_hwmode. 1128 * mac80211. Note that before a hardware can be registered, you
1129 * need to fill the contained wiphy's information.
1188 * 1130 *
1189 * @hw: the device to register as returned by ieee80211_alloc_hw() 1131 * @hw: the device to register as returned by ieee80211_alloc_hw()
1190 */ 1132 */
@@ -1272,10 +1214,6 @@ static inline char *ieee80211_get_radio_led_name(struct ieee80211_hw *hw)
1272#endif 1214#endif
1273} 1215}
1274 1216
1275/* Register a new hardware PHYMODE capability to the stack. */
1276int ieee80211_register_hwmode(struct ieee80211_hw *hw,
1277 struct ieee80211_hw_mode *mode);
1278
1279/** 1217/**
1280 * ieee80211_unregister_hw - Unregister a hardware device 1218 * ieee80211_unregister_hw - Unregister a hardware device
1281 * 1219 *
@@ -1308,7 +1246,10 @@ void __ieee80211_rx(struct ieee80211_hw *hw, struct sk_buff *skb,
1308 * buffer in @skb must start with an IEEE 802.11 header or a radiotap 1246 * buffer in @skb must start with an IEEE 802.11 header or a radiotap
1309 * header if %RX_FLAG_RADIOTAP is set in the @status flags. 1247 * header if %RX_FLAG_RADIOTAP is set in the @status flags.
1310 * 1248 *
1311 * This function may not be called in IRQ context. 1249 * This function may not be called in IRQ context. Calls to this function
1250 * for a single hardware must be synchronized against each other. Calls
1251 * to this function and ieee80211_rx_irqsafe() may not be mixed for a
1252 * single hardware.
1312 * 1253 *
1313 * @hw: the hardware this frame came in on 1254 * @hw: the hardware this frame came in on
1314 * @skb: the buffer to receive, owned by mac80211 after this call 1255 * @skb: the buffer to receive, owned by mac80211 after this call
@@ -1325,7 +1266,10 @@ static inline void ieee80211_rx(struct ieee80211_hw *hw, struct sk_buff *skb,
1325 * ieee80211_rx_irqsafe - receive frame 1266 * ieee80211_rx_irqsafe - receive frame
1326 * 1267 *
1327 * Like ieee80211_rx() but can be called in IRQ context 1268 * Like ieee80211_rx() but can be called in IRQ context
1328 * (internally defers to a workqueue.) 1269 * (internally defers to a tasklet.)
1270 *
1271 * Calls to this function and ieee80211_rx() may not be mixed for a
1272 * single hardware.
1329 * 1273 *
1330 * @hw: the hardware this frame came in on 1274 * @hw: the hardware this frame came in on
1331 * @skb: the buffer to receive, owned by mac80211 after this call 1275 * @skb: the buffer to receive, owned by mac80211 after this call
@@ -1344,6 +1288,11 @@ void ieee80211_rx_irqsafe(struct ieee80211_hw *hw,
1344 * transmitted. It is permissible to not call this function for 1288 * transmitted. It is permissible to not call this function for
1345 * multicast frames but this can affect statistics. 1289 * multicast frames but this can affect statistics.
1346 * 1290 *
1291 * This function may not be called in IRQ context. Calls to this function
1292 * for a single hardware must be synchronized against each other. Calls
1293 * to this function and ieee80211_tx_status_irqsafe() may not be mixed
1294 * for a single hardware.
1295 *
1347 * @hw: the hardware the frame was transmitted by 1296 * @hw: the hardware the frame was transmitted by
1348 * @skb: the frame that was transmitted, owned by mac80211 after this call 1297 * @skb: the frame that was transmitted, owned by mac80211 after this call
1349 * @status: status information for this frame; the status pointer need not 1298 * @status: status information for this frame; the status pointer need not
@@ -1353,6 +1302,22 @@ void ieee80211_rx_irqsafe(struct ieee80211_hw *hw,
1353void ieee80211_tx_status(struct ieee80211_hw *hw, 1302void ieee80211_tx_status(struct ieee80211_hw *hw,
1354 struct sk_buff *skb, 1303 struct sk_buff *skb,
1355 struct ieee80211_tx_status *status); 1304 struct ieee80211_tx_status *status);
1305
1306/**
1307 * ieee80211_tx_status_irqsafe - irq-safe transmit status callback
1308 *
1309 * Like ieee80211_tx_status() but can be called in IRQ context
1310 * (internally defers to a tasklet.)
1311 *
1312 * Calls to this function and ieee80211_tx_status() may not be mixed for a
1313 * single hardware.
1314 *
1315 * @hw: the hardware the frame was transmitted by
1316 * @skb: the frame that was transmitted, owned by mac80211 after this call
1317 * @status: status information for this frame; the status pointer need not
1318 * be valid after this function returns and is not freed by mac80211,
1319 * it is recommended that it points to a stack area
1320 */
1356void ieee80211_tx_status_irqsafe(struct ieee80211_hw *hw, 1321void ieee80211_tx_status_irqsafe(struct ieee80211_hw *hw,
1357 struct sk_buff *skb, 1322 struct sk_buff *skb,
1358 struct ieee80211_tx_status *status); 1323 struct ieee80211_tx_status *status);
@@ -1449,7 +1414,7 @@ __le16 ieee80211_ctstoself_duration(struct ieee80211_hw *hw,
1449 * @hw: pointer obtained from ieee80211_alloc_hw(). 1414 * @hw: pointer obtained from ieee80211_alloc_hw().
1450 * @vif: &struct ieee80211_vif pointer from &struct ieee80211_if_init_conf. 1415 * @vif: &struct ieee80211_vif pointer from &struct ieee80211_if_init_conf.
1451 * @frame_len: the length of the frame. 1416 * @frame_len: the length of the frame.
1452 * @rate: the rate (in 100kbps) at which the frame is going to be transmitted. 1417 * @rate: the rate at which the frame is going to be transmitted.
1453 * 1418 *
1454 * Calculate the duration field of some generic frame, given its 1419 * Calculate the duration field of some generic frame, given its
1455 * length and transmission rate (in 100kbps). 1420 * length and transmission rate (in 100kbps).
@@ -1457,7 +1422,7 @@ __le16 ieee80211_ctstoself_duration(struct ieee80211_hw *hw,
1457__le16 ieee80211_generic_frame_duration(struct ieee80211_hw *hw, 1422__le16 ieee80211_generic_frame_duration(struct ieee80211_hw *hw,
1458 struct ieee80211_vif *vif, 1423 struct ieee80211_vif *vif,
1459 size_t frame_len, 1424 size_t frame_len,
1460 int rate); 1425 struct ieee80211_rate *rate);
1461 1426
1462/** 1427/**
1463 * ieee80211_get_buffered_bc - accessing buffered broadcast and multicast frames 1428 * ieee80211_get_buffered_bc - accessing buffered broadcast and multicast frames
@@ -1574,4 +1539,81 @@ void ieee80211_iterate_active_interfaces(struct ieee80211_hw *hw,
1574 struct ieee80211_vif *vif), 1539 struct ieee80211_vif *vif),
1575 void *data); 1540 void *data);
1576 1541
1542/**
1543 * ieee80211_start_tx_ba_session - Start a tx Block Ack session.
1544 * @hw: pointer as obtained from ieee80211_alloc_hw().
1545 * @ra: receiver address of the BA session recipient
1546 * @tid: the TID to BA on.
1547 * @return: success if addBA request was sent, failure otherwise
1548 *
1549 * Although mac80211/low level driver/user space application can estimate
1550 * the need to start aggregation on a certain RA/TID, the session level
1551 * will be managed by the mac80211.
1552 */
1553int ieee80211_start_tx_ba_session(struct ieee80211_hw *hw, u8 *ra, u16 tid);
1554
1555/**
1556 * ieee80211_start_tx_ba_cb - low level driver ready to aggregate.
1557 * @hw: pointer as obtained from ieee80211_alloc_hw().
1558 * @ra: receiver address of the BA session recipient.
1559 * @tid: the TID to BA on.
1560 *
1561 * This function must be called by low level driver once it has
1562 * finished with preparations for the BA session.
1563 */
1564void ieee80211_start_tx_ba_cb(struct ieee80211_hw *hw, u8 *ra, u16 tid);
1565
1566/**
1567 * ieee80211_start_tx_ba_cb_irqsafe - low level driver ready to aggregate.
1568 * @hw: pointer as obtained from ieee80211_alloc_hw().
1569 * @ra: receiver address of the BA session recipient.
1570 * @tid: the TID to BA on.
1571 *
1572 * This function must be called by low level driver once it has
1573 * finished with preparations for the BA session.
1574 * This version of the function is irq safe.
1575 */
1576void ieee80211_start_tx_ba_cb_irqsafe(struct ieee80211_hw *hw, const u8 *ra,
1577 u16 tid);
1578
1579/**
1580 * ieee80211_stop_tx_ba_session - Stop a Block Ack session.
1581 * @hw: pointer as obtained from ieee80211_alloc_hw().
1582 * @ra: receiver address of the BA session recipient
1583 * @tid: the TID to stop BA.
1584 * @initiator: if indicates initiator DELBA frame will be sent.
1585 * @return: error if no sta with matching da found, success otherwise
1586 *
1587 * Although mac80211/low level driver/user space application can estimate
1588 * the need to stop aggregation on a certain RA/TID, the session level
1589 * will be managed by the mac80211.
1590 */
1591int ieee80211_stop_tx_ba_session(struct ieee80211_hw *hw,
1592 u8 *ra, u16 tid,
1593 enum ieee80211_back_parties initiator);
1594
1595/**
1596 * ieee80211_stop_tx_ba_cb - low level driver ready to stop aggregate.
1597 * @hw: pointer as obtained from ieee80211_alloc_hw().
1598 * @ra: receiver address of the BA session recipient.
1599 * @tid: the desired TID to BA on.
1600 *
1601 * This function must be called by low level driver once it has
1602 * finished with preparations for the BA session tear down.
1603 */
1604void ieee80211_stop_tx_ba_cb(struct ieee80211_hw *hw, u8 *ra, u8 tid);
1605
1606/**
1607 * ieee80211_stop_tx_ba_cb_irqsafe - low level driver ready to stop aggregate.
1608 * @hw: pointer as obtained from ieee80211_alloc_hw().
1609 * @ra: receiver address of the BA session recipient.
1610 * @tid: the desired TID to BA on.
1611 *
1612 * This function must be called by low level driver once it has
1613 * finished with preparations for the BA session tear down.
1614 * This version of the function is irq safe.
1615 */
1616void ieee80211_stop_tx_ba_cb_irqsafe(struct ieee80211_hw *hw, const u8 *ra,
1617 u16 tid);
1618
1577#endif /* MAC80211_H */ 1619#endif /* MAC80211_H */