Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/linville/wireless-next-2.6
Conflicts: drivers/net/ps3_gelic_wireless.c drivers/net/wireless/libertas/main.c
This commit is contained in:
@ -258,7 +258,7 @@ EXPORT_SYMBOL(ieee80211_generic_frame_duration);
|
||||
|
||||
__le16 ieee80211_rts_duration(struct ieee80211_hw *hw,
|
||||
struct ieee80211_vif *vif, size_t frame_len,
|
||||
const struct ieee80211_tx_control *frame_txctl)
|
||||
const struct ieee80211_tx_info *frame_txctl)
|
||||
{
|
||||
struct ieee80211_local *local = hw_to_local(hw);
|
||||
struct ieee80211_rate *rate;
|
||||
@ -266,10 +266,13 @@ __le16 ieee80211_rts_duration(struct ieee80211_hw *hw,
|
||||
bool short_preamble;
|
||||
int erp;
|
||||
u16 dur;
|
||||
struct ieee80211_supported_band *sband;
|
||||
|
||||
sband = local->hw.wiphy->bands[local->hw.conf.channel->band];
|
||||
|
||||
short_preamble = sdata->bss_conf.use_short_preamble;
|
||||
|
||||
rate = frame_txctl->rts_cts_rate;
|
||||
rate = &sband->bitrates[frame_txctl->control.rts_cts_rate_idx];
|
||||
|
||||
erp = 0;
|
||||
if (sdata->flags & IEEE80211_SDATA_OPERATING_GMODE)
|
||||
@ -292,7 +295,7 @@ EXPORT_SYMBOL(ieee80211_rts_duration);
|
||||
__le16 ieee80211_ctstoself_duration(struct ieee80211_hw *hw,
|
||||
struct ieee80211_vif *vif,
|
||||
size_t frame_len,
|
||||
const struct ieee80211_tx_control *frame_txctl)
|
||||
const struct ieee80211_tx_info *frame_txctl)
|
||||
{
|
||||
struct ieee80211_local *local = hw_to_local(hw);
|
||||
struct ieee80211_rate *rate;
|
||||
@ -300,10 +303,13 @@ __le16 ieee80211_ctstoself_duration(struct ieee80211_hw *hw,
|
||||
bool short_preamble;
|
||||
int erp;
|
||||
u16 dur;
|
||||
struct ieee80211_supported_band *sband;
|
||||
|
||||
sband = local->hw.wiphy->bands[local->hw.conf.channel->band];
|
||||
|
||||
short_preamble = sdata->bss_conf.use_short_preamble;
|
||||
|
||||
rate = frame_txctl->rts_cts_rate;
|
||||
rate = &sband->bitrates[frame_txctl->control.rts_cts_rate_idx];
|
||||
erp = 0;
|
||||
if (sdata->flags & IEEE80211_SDATA_OPERATING_GMODE)
|
||||
erp = rate->flags & IEEE80211_RATE_ERP_G;
|
||||
@ -311,7 +317,7 @@ __le16 ieee80211_ctstoself_duration(struct ieee80211_hw *hw,
|
||||
/* Data frame duration */
|
||||
dur = ieee80211_frame_duration(local, frame_len, rate->bitrate,
|
||||
erp, short_preamble);
|
||||
if (!(frame_txctl->flags & IEEE80211_TXCTL_NO_ACK)) {
|
||||
if (!(frame_txctl->flags & IEEE80211_TX_CTL_NO_ACK)) {
|
||||
/* ACK duration */
|
||||
dur += ieee80211_frame_duration(local, 10, rate->bitrate,
|
||||
erp, short_preamble);
|
||||
@ -325,17 +331,15 @@ void ieee80211_wake_queue(struct ieee80211_hw *hw, int queue)
|
||||
{
|
||||
struct ieee80211_local *local = hw_to_local(hw);
|
||||
|
||||
if (test_and_clear_bit(IEEE80211_LINK_STATE_XOFF,
|
||||
&local->state[queue])) {
|
||||
if (test_bit(IEEE80211_LINK_STATE_PENDING,
|
||||
&local->state[queue]))
|
||||
tasklet_schedule(&local->tx_pending_tasklet);
|
||||
else
|
||||
if (!ieee80211_qdisc_installed(local->mdev)) {
|
||||
if (queue == 0)
|
||||
netif_wake_queue(local->mdev);
|
||||
} else
|
||||
__netif_schedule(local->mdev);
|
||||
if (test_bit(queue, local->queues_pending)) {
|
||||
tasklet_schedule(&local->tx_pending_tasklet);
|
||||
} else {
|
||||
if (ieee80211_is_multiqueue(local)) {
|
||||
netif_wake_subqueue(local->mdev, queue);
|
||||
} else {
|
||||
WARN_ON(queue != 0);
|
||||
netif_wake_queue(local->mdev);
|
||||
}
|
||||
}
|
||||
}
|
||||
EXPORT_SYMBOL(ieee80211_wake_queue);
|
||||
@ -344,29 +348,20 @@ void ieee80211_stop_queue(struct ieee80211_hw *hw, int queue)
|
||||
{
|
||||
struct ieee80211_local *local = hw_to_local(hw);
|
||||
|
||||
if (!ieee80211_qdisc_installed(local->mdev) && queue == 0)
|
||||
if (ieee80211_is_multiqueue(local)) {
|
||||
netif_stop_subqueue(local->mdev, queue);
|
||||
} else {
|
||||
WARN_ON(queue != 0);
|
||||
netif_stop_queue(local->mdev);
|
||||
set_bit(IEEE80211_LINK_STATE_XOFF, &local->state[queue]);
|
||||
}
|
||||
}
|
||||
EXPORT_SYMBOL(ieee80211_stop_queue);
|
||||
|
||||
void ieee80211_start_queues(struct ieee80211_hw *hw)
|
||||
{
|
||||
struct ieee80211_local *local = hw_to_local(hw);
|
||||
int i;
|
||||
|
||||
for (i = 0; i < local->hw.queues; i++)
|
||||
clear_bit(IEEE80211_LINK_STATE_XOFF, &local->state[i]);
|
||||
if (!ieee80211_qdisc_installed(local->mdev))
|
||||
netif_start_queue(local->mdev);
|
||||
}
|
||||
EXPORT_SYMBOL(ieee80211_start_queues);
|
||||
|
||||
void ieee80211_stop_queues(struct ieee80211_hw *hw)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; i < hw->queues; i++)
|
||||
for (i = 0; i < ieee80211_num_queues(hw); i++)
|
||||
ieee80211_stop_queue(hw, i);
|
||||
}
|
||||
EXPORT_SYMBOL(ieee80211_stop_queues);
|
||||
@ -375,7 +370,7 @@ void ieee80211_wake_queues(struct ieee80211_hw *hw)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; i < hw->queues; i++)
|
||||
for (i = 0; i < hw->queues + hw->ampdu_queues; i++)
|
||||
ieee80211_wake_queue(hw, i);
|
||||
}
|
||||
EXPORT_SYMBOL(ieee80211_wake_queues);
|
||||
|
Reference in New Issue
Block a user