1 // SPDX-License-Identifier: GPL-2.0-or-later
3 Copyright (C) 2004 - 2009 Ivo van Doorn <IvDoorn@gmail.com>
4 <http://rt2x00.serialmonkey.com>
10 Abstract: rt2x00 generic mac80211 routines.
13 #include <linux/kernel.h>
14 #include <linux/module.h>
17 #include "rt2x00lib.h"
19 static int rt2x00mac_tx_rts_cts(struct rt2x00_dev
*rt2x00dev
,
20 struct data_queue
*queue
,
21 struct sk_buff
*frag_skb
)
23 struct ieee80211_tx_info
*tx_info
= IEEE80211_SKB_CB(frag_skb
);
24 struct ieee80211_tx_info
*rts_info
;
26 unsigned int data_length
;
29 if (tx_info
->control
.rates
[0].flags
& IEEE80211_TX_RC_USE_CTS_PROTECT
)
30 data_length
= sizeof(struct ieee80211_cts
);
32 data_length
= sizeof(struct ieee80211_rts
);
34 skb
= dev_alloc_skb(data_length
+ rt2x00dev
->hw
->extra_tx_headroom
);
36 rt2x00_warn(rt2x00dev
, "Failed to create RTS/CTS frame\n");
40 skb_reserve(skb
, rt2x00dev
->hw
->extra_tx_headroom
);
41 skb_put(skb
, data_length
);
44 * Copy TX information over from original frame to
45 * RTS/CTS frame. Note that we set the no encryption flag
46 * since we don't want this frame to be encrypted.
47 * RTS frames should be acked, while CTS-to-self frames
48 * should not. The ready for TX flag is cleared to prevent
49 * it being automatically send when the descriptor is
50 * written to the hardware.
52 memcpy(skb
->cb
, frag_skb
->cb
, sizeof(skb
->cb
));
53 rts_info
= IEEE80211_SKB_CB(skb
);
54 rts_info
->control
.rates
[0].flags
&= ~IEEE80211_TX_RC_USE_RTS_CTS
;
55 rts_info
->control
.rates
[0].flags
&= ~IEEE80211_TX_RC_USE_CTS_PROTECT
;
57 if (tx_info
->control
.rates
[0].flags
& IEEE80211_TX_RC_USE_CTS_PROTECT
)
58 rts_info
->flags
|= IEEE80211_TX_CTL_NO_ACK
;
60 rts_info
->flags
&= ~IEEE80211_TX_CTL_NO_ACK
;
62 /* Disable hardware encryption */
63 rts_info
->control
.hw_key
= NULL
;
66 * RTS/CTS frame should use the length of the frame plus any
67 * encryption overhead that will be added by the hardware.
69 data_length
+= rt2x00crypto_tx_overhead(rt2x00dev
, skb
);
71 if (tx_info
->control
.rates
[0].flags
& IEEE80211_TX_RC_USE_CTS_PROTECT
)
72 ieee80211_ctstoself_get(rt2x00dev
->hw
, tx_info
->control
.vif
,
73 frag_skb
->data
, data_length
, tx_info
,
74 (struct ieee80211_cts
*)(skb
->data
));
76 ieee80211_rts_get(rt2x00dev
->hw
, tx_info
->control
.vif
,
77 frag_skb
->data
, data_length
, tx_info
,
78 (struct ieee80211_rts
*)(skb
->data
));
80 retval
= rt2x00queue_write_tx_frame(queue
, skb
, NULL
, true);
82 dev_kfree_skb_any(skb
);
83 rt2x00_warn(rt2x00dev
, "Failed to send RTS/CTS frame\n");
89 void rt2x00mac_tx(struct ieee80211_hw
*hw
,
90 struct ieee80211_tx_control
*control
,
93 struct rt2x00_dev
*rt2x00dev
= hw
->priv
;
94 struct ieee80211_tx_info
*tx_info
= IEEE80211_SKB_CB(skb
);
95 enum data_queue_qid qid
= skb_get_queue_mapping(skb
);
96 struct data_queue
*queue
= NULL
;
99 * Mac80211 might be calling this function while we are trying
100 * to remove the device or perhaps suspending it.
101 * Note that we can only stop the TX queues inside the TX path
102 * due to possible race conditions in mac80211.
104 if (!test_bit(DEVICE_STATE_PRESENT
, &rt2x00dev
->flags
))
108 * Use the ATIM queue if appropriate and present.
110 if (tx_info
->flags
& IEEE80211_TX_CTL_SEND_AFTER_DTIM
&&
111 rt2x00_has_cap_flag(rt2x00dev
, REQUIRE_ATIM_QUEUE
))
114 queue
= rt2x00queue_get_tx_queue(rt2x00dev
, qid
);
115 if (unlikely(!queue
)) {
116 rt2x00_err(rt2x00dev
,
117 "Attempt to send packet over invalid queue %d\n"
118 "Please file bug report to %s\n", qid
, DRV_PROJECT
);
123 * If CTS/RTS is required. create and queue that frame first.
124 * Make sure we have at least enough entries available to send
125 * this CTS/RTS frame as well as the data frame.
126 * Note that when the driver has set the set_rts_threshold()
127 * callback function it doesn't need software generation of
128 * either RTS or CTS-to-self frame and handles everything
129 * inside the hardware.
131 if (!rt2x00dev
->ops
->hw
->set_rts_threshold
&&
132 (tx_info
->control
.rates
[0].flags
& (IEEE80211_TX_RC_USE_RTS_CTS
|
133 IEEE80211_TX_RC_USE_CTS_PROTECT
))) {
134 if (rt2x00queue_available(queue
) <= 1) {
136 * Recheck for full queue under lock to avoid race
137 * conditions with rt2x00lib_txdone().
139 spin_lock(&queue
->tx_lock
);
140 if (rt2x00queue_threshold(queue
))
141 rt2x00queue_pause_queue(queue
);
142 spin_unlock(&queue
->tx_lock
);
147 if (rt2x00mac_tx_rts_cts(rt2x00dev
, queue
, skb
))
151 if (unlikely(rt2x00queue_write_tx_frame(queue
, skb
, control
->sta
, false)))
157 ieee80211_free_txskb(hw
, skb
);
159 EXPORT_SYMBOL_GPL(rt2x00mac_tx
);
161 int rt2x00mac_start(struct ieee80211_hw
*hw
)
163 struct rt2x00_dev
*rt2x00dev
= hw
->priv
;
165 if (!test_bit(DEVICE_STATE_PRESENT
, &rt2x00dev
->flags
))
168 if (test_bit(DEVICE_STATE_STARTED
, &rt2x00dev
->flags
)) {
170 * This is special case for ieee80211_restart_hw(), otherwise
171 * mac80211 never call start() two times in row without stop();
173 set_bit(DEVICE_STATE_RESET
, &rt2x00dev
->flags
);
174 rt2x00dev
->ops
->lib
->pre_reset_hw(rt2x00dev
);
175 rt2x00lib_stop(rt2x00dev
);
177 return rt2x00lib_start(rt2x00dev
);
179 EXPORT_SYMBOL_GPL(rt2x00mac_start
);
181 void rt2x00mac_stop(struct ieee80211_hw
*hw
)
183 struct rt2x00_dev
*rt2x00dev
= hw
->priv
;
185 if (!test_bit(DEVICE_STATE_PRESENT
, &rt2x00dev
->flags
))
188 rt2x00lib_stop(rt2x00dev
);
190 EXPORT_SYMBOL_GPL(rt2x00mac_stop
);
193 rt2x00mac_reconfig_complete(struct ieee80211_hw
*hw
,
194 enum ieee80211_reconfig_type reconfig_type
)
196 struct rt2x00_dev
*rt2x00dev
= hw
->priv
;
198 if (reconfig_type
== IEEE80211_RECONFIG_TYPE_RESTART
)
199 clear_bit(DEVICE_STATE_RESET
, &rt2x00dev
->flags
);
201 EXPORT_SYMBOL_GPL(rt2x00mac_reconfig_complete
);
203 int rt2x00mac_add_interface(struct ieee80211_hw
*hw
,
204 struct ieee80211_vif
*vif
)
206 struct rt2x00_dev
*rt2x00dev
= hw
->priv
;
207 struct rt2x00_intf
*intf
= vif_to_intf(vif
);
208 struct data_queue
*queue
= rt2x00dev
->bcn
;
209 struct queue_entry
*entry
= NULL
;
213 * Don't allow interfaces to be added
214 * the device has disappeared.
216 if (!test_bit(DEVICE_STATE_PRESENT
, &rt2x00dev
->flags
) ||
217 !test_bit(DEVICE_STATE_STARTED
, &rt2x00dev
->flags
))
221 * Loop through all beacon queues to find a free
222 * entry. Since there are as much beacon entries
223 * as the maximum interfaces, this search shouldn't
226 for (i
= 0; i
< queue
->limit
; i
++) {
227 entry
= &queue
->entries
[i
];
228 if (!test_and_set_bit(ENTRY_BCN_ASSIGNED
, &entry
->flags
))
232 if (unlikely(i
== queue
->limit
))
236 * We are now absolutely sure the interface can be created,
237 * increase interface count and start initialization.
240 if (vif
->type
== NL80211_IFTYPE_AP
)
241 rt2x00dev
->intf_ap_count
++;
243 rt2x00dev
->intf_sta_count
++;
245 mutex_init(&intf
->beacon_skb_mutex
);
246 intf
->beacon
= entry
;
249 * The MAC address must be configured after the device
250 * has been initialized. Otherwise the device can reset
252 * The BSSID address must only be configured in AP mode,
253 * however we should not send an empty BSSID address for
254 * STA interfaces at this time, since this can cause
255 * invalid behavior in the device.
257 rt2x00lib_config_intf(rt2x00dev
, intf
, vif
->type
,
261 * Some filters depend on the current working mode. We can force
262 * an update during the next configure_filter() run by mac80211 by
263 * resetting the current packet_filter state.
265 rt2x00dev
->packet_filter
= 0;
269 EXPORT_SYMBOL_GPL(rt2x00mac_add_interface
);
271 void rt2x00mac_remove_interface(struct ieee80211_hw
*hw
,
272 struct ieee80211_vif
*vif
)
274 struct rt2x00_dev
*rt2x00dev
= hw
->priv
;
275 struct rt2x00_intf
*intf
= vif_to_intf(vif
);
278 * Don't allow interfaces to be remove while
279 * either the device has disappeared or when
280 * no interface is present.
282 if (!test_bit(DEVICE_STATE_PRESENT
, &rt2x00dev
->flags
) ||
283 (vif
->type
== NL80211_IFTYPE_AP
&& !rt2x00dev
->intf_ap_count
) ||
284 (vif
->type
!= NL80211_IFTYPE_AP
&& !rt2x00dev
->intf_sta_count
))
287 if (vif
->type
== NL80211_IFTYPE_AP
)
288 rt2x00dev
->intf_ap_count
--;
290 rt2x00dev
->intf_sta_count
--;
293 * Release beacon entry so it is available for
294 * new interfaces again.
296 clear_bit(ENTRY_BCN_ASSIGNED
, &intf
->beacon
->flags
);
299 * Make sure the bssid and mac address registers
300 * are cleared to prevent false ACKing of frames.
302 rt2x00lib_config_intf(rt2x00dev
, intf
,
303 NL80211_IFTYPE_UNSPECIFIED
, NULL
, NULL
);
305 EXPORT_SYMBOL_GPL(rt2x00mac_remove_interface
);
307 int rt2x00mac_config(struct ieee80211_hw
*hw
, u32 changed
)
309 struct rt2x00_dev
*rt2x00dev
= hw
->priv
;
310 struct ieee80211_conf
*conf
= &hw
->conf
;
313 * mac80211 might be calling this function while we are trying
314 * to remove the device or perhaps suspending it.
316 if (!test_bit(DEVICE_STATE_PRESENT
, &rt2x00dev
->flags
))
320 * Some configuration parameters (e.g. channel and antenna values) can
321 * only be set when the radio is enabled, but do require the RX to
322 * be off. During this period we should keep link tuning enabled,
323 * if for any reason the link tuner must be reset, this will be
324 * handled by rt2x00lib_config().
326 rt2x00queue_stop_queue(rt2x00dev
->rx
);
328 /* Do not race with with link tuner. */
329 mutex_lock(&rt2x00dev
->conf_mutex
);
332 * When we've just turned on the radio, we want to reprogram
333 * everything to ensure a consistent state
335 rt2x00lib_config(rt2x00dev
, conf
, changed
);
338 * After the radio has been enabled we need to configure
339 * the antenna to the default settings. rt2x00lib_config_antenna()
340 * should determine if any action should be taken based on
341 * checking if diversity has been enabled or no antenna changes
342 * have been made since the last configuration change.
344 rt2x00lib_config_antenna(rt2x00dev
, rt2x00dev
->default_ant
);
346 mutex_unlock(&rt2x00dev
->conf_mutex
);
348 /* Turn RX back on */
349 rt2x00queue_start_queue(rt2x00dev
->rx
);
353 EXPORT_SYMBOL_GPL(rt2x00mac_config
);
355 void rt2x00mac_configure_filter(struct ieee80211_hw
*hw
,
356 unsigned int changed_flags
,
357 unsigned int *total_flags
,
360 struct rt2x00_dev
*rt2x00dev
= hw
->priv
;
363 * Mask off any flags we are going to ignore
364 * from the total_flags field.
375 * Apply some rules to the filters:
376 * - Some filters imply different filters to be set.
377 * - Some things we can't filter out at all.
378 * - Multicast filter seems to kill broadcast traffic so never use it.
380 *total_flags
|= FIF_ALLMULTI
;
383 * If the device has a single filter for all control frames,
384 * FIF_CONTROL and FIF_PSPOLL flags imply each other.
385 * And if the device has more than one filter for control frames
386 * of different types, but has no a separate filter for PS Poll frames,
387 * FIF_CONTROL flag implies FIF_PSPOLL.
389 if (!rt2x00_has_cap_control_filters(rt2x00dev
)) {
390 if (*total_flags
& FIF_CONTROL
|| *total_flags
& FIF_PSPOLL
)
391 *total_flags
|= FIF_CONTROL
| FIF_PSPOLL
;
393 if (!rt2x00_has_cap_control_filter_pspoll(rt2x00dev
)) {
394 if (*total_flags
& FIF_CONTROL
)
395 *total_flags
|= FIF_PSPOLL
;
398 rt2x00dev
->packet_filter
= *total_flags
;
400 rt2x00dev
->ops
->lib
->config_filter(rt2x00dev
, *total_flags
);
402 EXPORT_SYMBOL_GPL(rt2x00mac_configure_filter
);
404 static void rt2x00mac_set_tim_iter(void *data
, u8
*mac
,
405 struct ieee80211_vif
*vif
)
407 struct rt2x00_intf
*intf
= vif_to_intf(vif
);
409 if (vif
->type
!= NL80211_IFTYPE_AP
&&
410 vif
->type
!= NL80211_IFTYPE_ADHOC
&&
411 vif
->type
!= NL80211_IFTYPE_MESH_POINT
)
414 set_bit(DELAYED_UPDATE_BEACON
, &intf
->delayed_flags
);
417 int rt2x00mac_set_tim(struct ieee80211_hw
*hw
, struct ieee80211_sta
*sta
,
420 struct rt2x00_dev
*rt2x00dev
= hw
->priv
;
422 if (!test_bit(DEVICE_STATE_ENABLED_RADIO
, &rt2x00dev
->flags
))
425 ieee80211_iterate_active_interfaces_atomic(
426 rt2x00dev
->hw
, IEEE80211_IFACE_ITER_RESUME_ALL
,
427 rt2x00mac_set_tim_iter
, rt2x00dev
);
429 /* queue work to upodate the beacon template */
430 ieee80211_queue_work(rt2x00dev
->hw
, &rt2x00dev
->intf_work
);
433 EXPORT_SYMBOL_GPL(rt2x00mac_set_tim
);
435 #ifdef CONFIG_RT2X00_LIB_CRYPTO
436 static void memcpy_tkip(struct rt2x00lib_crypto
*crypto
, u8
*key
, u8 key_len
)
438 if (key_len
> NL80211_TKIP_DATA_OFFSET_ENCR_KEY
)
440 &key
[NL80211_TKIP_DATA_OFFSET_ENCR_KEY
],
441 sizeof(crypto
->key
));
443 if (key_len
> NL80211_TKIP_DATA_OFFSET_TX_MIC_KEY
)
444 memcpy(crypto
->tx_mic
,
445 &key
[NL80211_TKIP_DATA_OFFSET_TX_MIC_KEY
],
446 sizeof(crypto
->tx_mic
));
448 if (key_len
> NL80211_TKIP_DATA_OFFSET_RX_MIC_KEY
)
449 memcpy(crypto
->rx_mic
,
450 &key
[NL80211_TKIP_DATA_OFFSET_RX_MIC_KEY
],
451 sizeof(crypto
->rx_mic
));
454 int rt2x00mac_set_key(struct ieee80211_hw
*hw
, enum set_key_cmd cmd
,
455 struct ieee80211_vif
*vif
, struct ieee80211_sta
*sta
,
456 struct ieee80211_key_conf
*key
)
458 struct rt2x00_dev
*rt2x00dev
= hw
->priv
;
459 int (*set_key
) (struct rt2x00_dev
*rt2x00dev
,
460 struct rt2x00lib_crypto
*crypto
,
461 struct ieee80211_key_conf
*key
);
462 struct rt2x00lib_crypto crypto
;
463 static const u8 bcast_addr
[ETH_ALEN
] =
464 { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, };
465 struct rt2x00_sta
*sta_priv
= NULL
;
467 if (!test_bit(DEVICE_STATE_PRESENT
, &rt2x00dev
->flags
))
470 /* The hardware can't do MFP */
471 if (!rt2x00_has_cap_hw_crypto(rt2x00dev
) || (sta
&& sta
->mfp
))
475 * To support IBSS RSN, don't program group keys in IBSS, the
476 * hardware will then not attempt to decrypt the frames.
478 if (vif
->type
== NL80211_IFTYPE_ADHOC
&&
479 !(key
->flags
& IEEE80211_KEY_FLAG_PAIRWISE
))
482 if (key
->keylen
> 32)
485 memset(&crypto
, 0, sizeof(crypto
));
487 crypto
.bssidx
= rt2x00lib_get_bssidx(rt2x00dev
, vif
);
488 crypto
.cipher
= rt2x00crypto_key_to_cipher(key
);
489 if (crypto
.cipher
== CIPHER_NONE
)
491 if (crypto
.cipher
== CIPHER_TKIP
&& rt2x00_is_usb(rt2x00dev
))
497 crypto
.address
= sta
->addr
;
498 sta_priv
= sta_to_rt2x00_sta(sta
);
499 crypto
.wcid
= sta_priv
->wcid
;
501 crypto
.address
= bcast_addr
;
503 if (crypto
.cipher
== CIPHER_TKIP
)
504 memcpy_tkip(&crypto
, &key
->key
[0], key
->keylen
);
506 memcpy(crypto
.key
, &key
->key
[0], key
->keylen
);
508 * Each BSS has a maximum of 4 shared keys.
509 * Shared key index values:
517 * Both pairwise as shared key indeces are determined by
518 * driver. This is required because the hardware requires
519 * keys to be assigned in correct order (When key 1 is
520 * provided but key 0 is not, then the key is not found
521 * by the hardware during RX).
526 if (key
->flags
& IEEE80211_KEY_FLAG_PAIRWISE
)
527 set_key
= rt2x00dev
->ops
->lib
->config_pairwise_key
;
529 set_key
= rt2x00dev
->ops
->lib
->config_shared_key
;
534 return set_key(rt2x00dev
, &crypto
, key
);
536 EXPORT_SYMBOL_GPL(rt2x00mac_set_key
);
537 #endif /* CONFIG_RT2X00_LIB_CRYPTO */
539 void rt2x00mac_sw_scan_start(struct ieee80211_hw
*hw
,
540 struct ieee80211_vif
*vif
,
543 struct rt2x00_dev
*rt2x00dev
= hw
->priv
;
544 set_bit(DEVICE_STATE_SCANNING
, &rt2x00dev
->flags
);
545 rt2x00link_stop_tuner(rt2x00dev
);
547 EXPORT_SYMBOL_GPL(rt2x00mac_sw_scan_start
);
549 void rt2x00mac_sw_scan_complete(struct ieee80211_hw
*hw
,
550 struct ieee80211_vif
*vif
)
552 struct rt2x00_dev
*rt2x00dev
= hw
->priv
;
553 clear_bit(DEVICE_STATE_SCANNING
, &rt2x00dev
->flags
);
554 rt2x00link_start_tuner(rt2x00dev
);
556 EXPORT_SYMBOL_GPL(rt2x00mac_sw_scan_complete
);
558 int rt2x00mac_get_stats(struct ieee80211_hw
*hw
,
559 struct ieee80211_low_level_stats
*stats
)
561 struct rt2x00_dev
*rt2x00dev
= hw
->priv
;
564 * The dot11ACKFailureCount, dot11RTSFailureCount and
565 * dot11RTSSuccessCount are updated in interrupt time.
566 * dot11FCSErrorCount is updated in the link tuner.
568 memcpy(stats
, &rt2x00dev
->low_level_stats
, sizeof(*stats
));
572 EXPORT_SYMBOL_GPL(rt2x00mac_get_stats
);
574 void rt2x00mac_bss_info_changed(struct ieee80211_hw
*hw
,
575 struct ieee80211_vif
*vif
,
576 struct ieee80211_bss_conf
*bss_conf
,
579 struct rt2x00_dev
*rt2x00dev
= hw
->priv
;
580 struct rt2x00_intf
*intf
= vif_to_intf(vif
);
583 * mac80211 might be calling this function while we are trying
584 * to remove the device or perhaps suspending it.
586 if (!test_bit(DEVICE_STATE_PRESENT
, &rt2x00dev
->flags
))
592 if (changes
& BSS_CHANGED_BSSID
)
593 rt2x00lib_config_intf(rt2x00dev
, intf
, vif
->type
, NULL
,
597 * Start/stop beaconing.
599 if (changes
& BSS_CHANGED_BEACON_ENABLED
) {
600 mutex_lock(&intf
->beacon_skb_mutex
);
601 if (!bss_conf
->enable_beacon
&& intf
->enable_beacon
) {
602 rt2x00dev
->intf_beaconing
--;
603 intf
->enable_beacon
= false;
605 if (rt2x00dev
->intf_beaconing
== 0) {
607 * Last beaconing interface disabled
608 * -> stop beacon queue.
610 rt2x00queue_stop_queue(rt2x00dev
->bcn
);
613 * Clear beacon in the H/W for this vif. This is needed
614 * to disable beaconing on this particular interface
615 * and keep it running on other interfaces.
617 rt2x00queue_clear_beacon(rt2x00dev
, vif
);
618 } else if (bss_conf
->enable_beacon
&& !intf
->enable_beacon
) {
619 rt2x00dev
->intf_beaconing
++;
620 intf
->enable_beacon
= true;
622 * Upload beacon to the H/W. This is only required on
623 * USB devices. PCI devices fetch beacons periodically.
625 if (rt2x00_is_usb(rt2x00dev
))
626 rt2x00queue_update_beacon(rt2x00dev
, vif
);
628 if (rt2x00dev
->intf_beaconing
== 1) {
630 * First beaconing interface enabled
631 * -> start beacon queue.
633 rt2x00queue_start_queue(rt2x00dev
->bcn
);
636 mutex_unlock(&intf
->beacon_skb_mutex
);
640 * When the association status has changed we must reset the link
641 * tuner counter. This is because some drivers determine if they
642 * should perform link tuning based on the number of seconds
643 * while associated or not associated.
645 if (changes
& BSS_CHANGED_ASSOC
) {
646 rt2x00dev
->link
.count
= 0;
649 rt2x00dev
->intf_associated
++;
651 rt2x00dev
->intf_associated
--;
653 rt2x00leds_led_assoc(rt2x00dev
, !!rt2x00dev
->intf_associated
);
657 * When the erp information has changed, we should perform
658 * additional configuration steps. For all other changes we are done.
660 if (changes
& (BSS_CHANGED_ERP_CTS_PROT
| BSS_CHANGED_ERP_PREAMBLE
|
661 BSS_CHANGED_ERP_SLOT
| BSS_CHANGED_BASIC_RATES
|
662 BSS_CHANGED_BEACON_INT
| BSS_CHANGED_HT
))
663 rt2x00lib_config_erp(rt2x00dev
, intf
, bss_conf
, changes
);
665 EXPORT_SYMBOL_GPL(rt2x00mac_bss_info_changed
);
667 int rt2x00mac_conf_tx(struct ieee80211_hw
*hw
,
668 struct ieee80211_vif
*vif
, u16 queue_idx
,
669 const struct ieee80211_tx_queue_params
*params
)
671 struct rt2x00_dev
*rt2x00dev
= hw
->priv
;
672 struct data_queue
*queue
;
674 queue
= rt2x00queue_get_tx_queue(rt2x00dev
, queue_idx
);
675 if (unlikely(!queue
))
679 * The passed variables are stored as real value ((2^n)-1).
680 * Ralink registers require to know the bit number 'n'.
682 if (params
->cw_min
> 0)
683 queue
->cw_min
= fls(params
->cw_min
);
685 queue
->cw_min
= 5; /* cw_min: 2^5 = 32. */
687 if (params
->cw_max
> 0)
688 queue
->cw_max
= fls(params
->cw_max
);
690 queue
->cw_max
= 10; /* cw_min: 2^10 = 1024. */
692 queue
->aifs
= params
->aifs
;
693 queue
->txop
= params
->txop
;
695 rt2x00_dbg(rt2x00dev
,
696 "Configured TX queue %d - CWmin: %d, CWmax: %d, Aifs: %d, TXop: %d\n",
697 queue_idx
, queue
->cw_min
, queue
->cw_max
, queue
->aifs
,
702 EXPORT_SYMBOL_GPL(rt2x00mac_conf_tx
);
704 void rt2x00mac_rfkill_poll(struct ieee80211_hw
*hw
)
706 struct rt2x00_dev
*rt2x00dev
= hw
->priv
;
707 bool active
= !!rt2x00dev
->ops
->lib
->rfkill_poll(rt2x00dev
);
709 wiphy_rfkill_set_hw_state(hw
->wiphy
, !active
);
711 EXPORT_SYMBOL_GPL(rt2x00mac_rfkill_poll
);
713 void rt2x00mac_flush(struct ieee80211_hw
*hw
, struct ieee80211_vif
*vif
,
714 u32 queues
, bool drop
)
716 struct rt2x00_dev
*rt2x00dev
= hw
->priv
;
717 struct data_queue
*queue
;
719 if (!test_bit(DEVICE_STATE_PRESENT
, &rt2x00dev
->flags
))
722 set_bit(DEVICE_STATE_FLUSHING
, &rt2x00dev
->flags
);
724 tx_queue_for_each(rt2x00dev
, queue
)
725 rt2x00queue_flush_queue(queue
, drop
);
727 clear_bit(DEVICE_STATE_FLUSHING
, &rt2x00dev
->flags
);
729 EXPORT_SYMBOL_GPL(rt2x00mac_flush
);
731 int rt2x00mac_set_antenna(struct ieee80211_hw
*hw
, u32 tx_ant
, u32 rx_ant
)
733 struct rt2x00_dev
*rt2x00dev
= hw
->priv
;
734 struct link_ant
*ant
= &rt2x00dev
->link
.ant
;
735 struct antenna_setup
*def
= &rt2x00dev
->default_ant
;
736 struct antenna_setup setup
;
738 // The antenna value is not supposed to be 0,
739 // or exceed the maximum number of antenna's.
740 if (!tx_ant
|| (tx_ant
& ~3) || !rx_ant
|| (rx_ant
& ~3))
743 // When the client tried to configure the antenna to or from
744 // diversity mode, we must reset the default antenna as well
745 // as that controls the diversity switch.
746 if (ant
->flags
& ANTENNA_TX_DIVERSITY
&& tx_ant
!= 3)
747 ant
->flags
&= ~ANTENNA_TX_DIVERSITY
;
748 if (ant
->flags
& ANTENNA_RX_DIVERSITY
&& rx_ant
!= 3)
749 ant
->flags
&= ~ANTENNA_RX_DIVERSITY
;
751 // If diversity is being enabled, check if we need hardware
752 // or software diversity. In the latter case, reset the value,
753 // and make sure we update the antenna flags to have the
754 // link tuner pick up the diversity tuning.
755 if (tx_ant
== 3 && def
->tx
== ANTENNA_SW_DIVERSITY
) {
756 tx_ant
= ANTENNA_SW_DIVERSITY
;
757 ant
->flags
|= ANTENNA_TX_DIVERSITY
;
760 if (rx_ant
== 3 && def
->rx
== ANTENNA_SW_DIVERSITY
) {
761 rx_ant
= ANTENNA_SW_DIVERSITY
;
762 ant
->flags
|= ANTENNA_RX_DIVERSITY
;
767 setup
.rx_chain_num
= 0;
768 setup
.tx_chain_num
= 0;
770 rt2x00lib_config_antenna(rt2x00dev
, setup
);
774 EXPORT_SYMBOL_GPL(rt2x00mac_set_antenna
);
776 int rt2x00mac_get_antenna(struct ieee80211_hw
*hw
, u32
*tx_ant
, u32
*rx_ant
)
778 struct rt2x00_dev
*rt2x00dev
= hw
->priv
;
779 struct link_ant
*ant
= &rt2x00dev
->link
.ant
;
780 struct antenna_setup
*active
= &rt2x00dev
->link
.ant
.active
;
782 // When software diversity is active, we must report this to the
783 // client and not the current active antenna state.
784 if (ant
->flags
& ANTENNA_TX_DIVERSITY
)
785 *tx_ant
= ANTENNA_HW_DIVERSITY
;
787 *tx_ant
= active
->tx
;
789 if (ant
->flags
& ANTENNA_RX_DIVERSITY
)
790 *rx_ant
= ANTENNA_HW_DIVERSITY
;
792 *rx_ant
= active
->rx
;
796 EXPORT_SYMBOL_GPL(rt2x00mac_get_antenna
);
798 void rt2x00mac_get_ringparam(struct ieee80211_hw
*hw
,
799 u32
*tx
, u32
*tx_max
, u32
*rx
, u32
*rx_max
)
801 struct rt2x00_dev
*rt2x00dev
= hw
->priv
;
802 struct data_queue
*queue
;
804 tx_queue_for_each(rt2x00dev
, queue
) {
805 *tx
+= queue
->length
;
806 *tx_max
+= queue
->limit
;
809 *rx
= rt2x00dev
->rx
->length
;
810 *rx_max
= rt2x00dev
->rx
->limit
;
812 EXPORT_SYMBOL_GPL(rt2x00mac_get_ringparam
);
814 bool rt2x00mac_tx_frames_pending(struct ieee80211_hw
*hw
)
816 struct rt2x00_dev
*rt2x00dev
= hw
->priv
;
817 struct data_queue
*queue
;
819 tx_queue_for_each(rt2x00dev
, queue
) {
820 if (!rt2x00queue_empty(queue
))
826 EXPORT_SYMBOL_GPL(rt2x00mac_tx_frames_pending
);