diff options
Diffstat (limited to 'drivers/net/wireless/iwlwifi/iwl-trans-pcie.c')
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-trans-pcie.c | 23 |
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 | ||
1420 | static void iwl_trans_pcie_wake_any_queue(struct iwl_trans *trans, | 1421 | static 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 | ||
1456 | static void iwl_trans_pcie_stop_queue(struct iwl_trans *trans, int txq_id) | 1458 | static 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 |