aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/iwlwifi/iwl-trans-pcie.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/wireless/iwlwifi/iwl-trans-pcie.c')
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-trans-pcie.c23
1 files changed, 13 insertions, 10 deletions
diff --git a/drivers/net/wireless/iwlwifi/iwl-trans-pcie.c b/drivers/net/wireless/iwlwifi/iwl-trans-pcie.c
index da3411057afc..a1a58330273f 100644
--- a/drivers/net/wireless/iwlwifi/iwl-trans-pcie.c
+++ b/drivers/net/wireless/iwlwifi/iwl-trans-pcie.c
@@ -1231,7 +1231,7 @@ static int iwl_trans_pcie_tx(struct iwl_trans *trans, struct sk_buff *skb,
1231 txq->need_update = 1; 1231 txq->need_update = 1;
1232 iwl_txq_update_write_ptr(trans, txq); 1232 iwl_txq_update_write_ptr(trans, txq);
1233 } else { 1233 } else {
1234 iwl_stop_queue(trans, txq); 1234 iwl_stop_queue(trans, txq, "Queue is full");
1235 } 1235 }
1236 } 1236 }
1237 return 0; 1237 return 0;
@@ -1283,20 +1283,21 @@ static int iwlagn_txq_check_empty(struct iwl_trans *trans,
1283 /* aggregated HW queue */ 1283 /* aggregated HW queue */
1284 if ((txq_id == tid_data->agg.txq_id) && 1284 if ((txq_id == tid_data->agg.txq_id) &&
1285 (q->read_ptr == q->write_ptr)) { 1285 (q->read_ptr == q->write_ptr)) {
1286 IWL_DEBUG_HT(trans, 1286 IWL_DEBUG_TX_QUEUES(trans,
1287 "HW queue empty: continue DELBA flow\n"); 1287 "HW queue empty: continue DELBA flow\n");
1288 iwl_trans_pcie_txq_agg_disable(trans, txq_id); 1288 iwl_trans_pcie_txq_agg_disable(trans, txq_id);
1289 tid_data->agg.state = IWL_AGG_OFF; 1289 tid_data->agg.state = IWL_AGG_OFF;
1290 iwl_stop_tx_ba_trans_ready(priv(trans), 1290 iwl_stop_tx_ba_trans_ready(priv(trans),
1291 NUM_IWL_RXON_CTX, 1291 NUM_IWL_RXON_CTX,
1292 sta_id, tid); 1292 sta_id, tid);
1293 iwl_wake_queue(trans, &trans_pcie->txq[txq_id]); 1293 iwl_wake_queue(trans, &trans_pcie->txq[txq_id],
1294 "DELBA flow complete");
1294 } 1295 }
1295 break; 1296 break;
1296 case IWL_EMPTYING_HW_QUEUE_ADDBA: 1297 case IWL_EMPTYING_HW_QUEUE_ADDBA:
1297 /* We are reclaiming the last packet of the queue */ 1298 /* We are reclaiming the last packet of the queue */
1298 if (tid_data->tfds_in_queue == 0) { 1299 if (tid_data->tfds_in_queue == 0) {
1299 IWL_DEBUG_HT(trans, 1300 IWL_DEBUG_TX_QUEUES(trans,
1300 "HW queue empty: continue ADDBA flow\n"); 1301 "HW queue empty: continue ADDBA flow\n");
1301 tid_data->agg.state = IWL_AGG_ON; 1302 tid_data->agg.state = IWL_AGG_ON;
1302 iwl_start_tx_ba_trans_ready(priv(trans), 1303 iwl_start_tx_ba_trans_ready(priv(trans),
@@ -1354,7 +1355,7 @@ static void iwl_trans_pcie_reclaim(struct iwl_trans *trans, int sta_id, int tid,
1354 ssn , tfd_num, txq_id, txq->swq_id); 1355 ssn , tfd_num, txq_id, txq->swq_id);
1355 freed = iwl_tx_queue_reclaim(trans, txq_id, tfd_num, skbs); 1356 freed = iwl_tx_queue_reclaim(trans, txq_id, tfd_num, skbs);
1356 if (iwl_queue_space(&txq->q) > txq->q.low_mark && cond) 1357 if (iwl_queue_space(&txq->q) > txq->q.low_mark && cond)
1357 iwl_wake_queue(trans, txq); 1358 iwl_wake_queue(trans, txq, "Packets reclaimed");
1358 } 1359 }
1359 1360
1360 iwl_free_tfds_in_queue(trans, sta_id, tid, freed); 1361 iwl_free_tfds_in_queue(trans, sta_id, tid, freed);
@@ -1418,7 +1419,8 @@ static int iwl_trans_pcie_resume(struct iwl_trans *trans)
1418#endif /* CONFIG_PM_SLEEP */ 1419#endif /* CONFIG_PM_SLEEP */
1419 1420
1420static void iwl_trans_pcie_wake_any_queue(struct iwl_trans *trans, 1421static void iwl_trans_pcie_wake_any_queue(struct iwl_trans *trans,
1421 enum iwl_rxon_context_id ctx) 1422 enum iwl_rxon_context_id ctx,
1423 const char *msg)
1422{ 1424{
1423 u8 ac, txq_id; 1425 u8 ac, txq_id;
1424 struct iwl_trans_pcie *trans_pcie = 1426 struct iwl_trans_pcie *trans_pcie =
@@ -1426,11 +1428,11 @@ static void iwl_trans_pcie_wake_any_queue(struct iwl_trans *trans,
1426 1428
1427 for (ac = 0; ac < AC_NUM; ac++) { 1429 for (ac = 0; ac < AC_NUM; ac++) {
1428 txq_id = trans_pcie->ac_to_queue[ctx][ac]; 1430 txq_id = trans_pcie->ac_to_queue[ctx][ac];
1429 IWL_DEBUG_INFO(trans, "Queue Status: Q[%d] %s\n", 1431 IWL_DEBUG_TX_QUEUES(trans, "Queue Status: Q[%d] %s\n",
1430 ac, 1432 ac,
1431 (atomic_read(&trans_pcie->queue_stop_count[ac]) > 0) 1433 (atomic_read(&trans_pcie->queue_stop_count[ac]) > 0)
1432 ? "stopped" : "awake"); 1434 ? "stopped" : "awake");
1433 iwl_wake_queue(trans, &trans_pcie->txq[txq_id]); 1435 iwl_wake_queue(trans, &trans_pcie->txq[txq_id], msg);
1434 } 1436 }
1435} 1437}
1436 1438
@@ -1453,11 +1455,12 @@ static struct iwl_trans *iwl_trans_pcie_alloc(struct iwl_shared *shrd)
1453 return iwl_trans; 1455 return iwl_trans;
1454} 1456}
1455 1457
1456static void iwl_trans_pcie_stop_queue(struct iwl_trans *trans, int txq_id) 1458static void iwl_trans_pcie_stop_queue(struct iwl_trans *trans, int txq_id,
1459 const char *msg)
1457{ 1460{
1458 struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans); 1461 struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans);
1459 1462
1460 iwl_stop_queue(trans, &trans_pcie->txq[txq_id]); 1463 iwl_stop_queue(trans, &trans_pcie->txq[txq_id], msg);
1461} 1464}
1462 1465
1463#define IWL_FLUSH_WAIT_MS 2000 1466#define IWL_FLUSH_WAIT_MS 2000