Lines 1095-1100
static void iwlagn_mac_flush(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
Link Here
|
1095 |
u32 queues, bool drop) |
1095 |
u32 queues, bool drop) |
1096 |
{ |
1096 |
{ |
1097 |
struct iwl_priv *priv = IWL_MAC80211_GET_DVM(hw); |
1097 |
struct iwl_priv *priv = IWL_MAC80211_GET_DVM(hw); |
|
|
1098 |
u32 scd_queues; |
1098 |
|
1099 |
|
1099 |
mutex_lock(&priv->mutex); |
1100 |
mutex_lock(&priv->mutex); |
1100 |
IWL_DEBUG_MAC80211(priv, "enter\n"); |
1101 |
IWL_DEBUG_MAC80211(priv, "enter\n"); |
Lines 1108-1125
static void iwlagn_mac_flush(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
Link Here
|
1108 |
goto done; |
1109 |
goto done; |
1109 |
} |
1110 |
} |
1110 |
|
1111 |
|
1111 |
/* |
1112 |
scd_queues = BIT(priv->cfg->base_params->num_of_queues) - 1; |
1112 |
* mac80211 will not push any more frames for transmit |
1113 |
scd_queues &= ~(BIT(IWL_IPAN_CMD_QUEUE_NUM) | |
1113 |
* until the flush is completed |
1114 |
BIT(IWL_DEFAULT_CMD_QUEUE_NUM)); |
1114 |
*/ |
1115 |
|
1115 |
if (drop) { |
1116 |
if (vif) |
1116 |
IWL_DEBUG_MAC80211(priv, "send flush command\n"); |
1117 |
scd_queues &= ~BIT(vif->hw_queue[IEEE80211_AC_VO]); |
1117 |
if (iwlagn_txfifo_flush(priv, 0)) { |
1118 |
|
1118 |
IWL_ERR(priv, "flush request fail\n"); |
1119 |
IWL_DEBUG_TX_QUEUES(priv, "Flushing SCD queues: 0x%x\n", scd_queues); |
1119 |
goto done; |
1120 |
if (iwlagn_txfifo_flush(priv, scd_queues)) { |
1120 |
} |
1121 |
IWL_ERR(priv, "flush request fail\n"); |
|
|
1122 |
goto done; |
1121 |
} |
1123 |
} |
1122 |
IWL_DEBUG_MAC80211(priv, "wait transmit/flush all frames\n"); |
1124 |
IWL_DEBUG_TX_QUEUES(priv, "wait transmit/flush all frames\n"); |
1123 |
iwl_trans_wait_tx_queue_empty(priv->trans, 0xffffffff); |
1125 |
iwl_trans_wait_tx_queue_empty(priv->trans, 0xffffffff); |
1124 |
done: |
1126 |
done: |
1125 |
mutex_unlock(&priv->mutex); |
1127 |
mutex_unlock(&priv->mutex); |
1126 |
- |
|
|