Lines Matching refs:txq
73 struct iwl_txq *txq) in iwl_pcie_txq_inc_wr_ptr() argument
76 int txq_id = txq->id; in iwl_pcie_txq_inc_wr_ptr()
78 lockdep_assert_held(&txq->lock); in iwl_pcie_txq_inc_wr_ptr()
101 txq->need_update = true; in iwl_pcie_txq_inc_wr_ptr()
110 IWL_DEBUG_TX(trans, "Q:%d WR: 0x%x\n", txq_id, txq->write_ptr); in iwl_pcie_txq_inc_wr_ptr()
111 if (!txq->block) in iwl_pcie_txq_inc_wr_ptr()
113 txq->write_ptr | (txq_id << 8)); in iwl_pcie_txq_inc_wr_ptr()
121 struct iwl_txq *txq = trans->txqs.txq[i]; in iwl_pcie_txq_check_wrptrs() local
126 spin_lock_bh(&txq->lock); in iwl_pcie_txq_check_wrptrs()
127 if (txq->need_update) { in iwl_pcie_txq_check_wrptrs()
128 iwl_pcie_txq_inc_wr_ptr(trans, txq); in iwl_pcie_txq_check_wrptrs()
129 txq->need_update = false; in iwl_pcie_txq_check_wrptrs()
131 spin_unlock_bh(&txq->lock); in iwl_pcie_txq_check_wrptrs()
151 static int iwl_pcie_txq_build_tfd(struct iwl_trans *trans, struct iwl_txq *txq, in iwl_pcie_txq_build_tfd() argument
157 tfd = (u8 *)txq->tfds + trans->txqs.tfd.size * txq->write_ptr; in iwl_pcie_txq_build_tfd()
205 struct iwl_txq *txq = trans->txqs.txq[txq_id]; in iwl_pcie_txq_unmap() local
207 if (!txq) { in iwl_pcie_txq_unmap()
212 spin_lock_bh(&txq->lock); in iwl_pcie_txq_unmap()
213 while (txq->write_ptr != txq->read_ptr) { in iwl_pcie_txq_unmap()
215 txq_id, txq->read_ptr); in iwl_pcie_txq_unmap()
218 struct sk_buff *skb = txq->entries[txq->read_ptr].skb; in iwl_pcie_txq_unmap()
225 iwl_txq_free_tfd(trans, txq); in iwl_pcie_txq_unmap()
226 txq->read_ptr = iwl_txq_inc_wrap(trans, txq->read_ptr); in iwl_pcie_txq_unmap()
228 if (txq->read_ptr == txq->write_ptr && in iwl_pcie_txq_unmap()
233 while (!skb_queue_empty(&txq->overflow_q)) { in iwl_pcie_txq_unmap()
234 struct sk_buff *skb = __skb_dequeue(&txq->overflow_q); in iwl_pcie_txq_unmap()
239 spin_unlock_bh(&txq->lock); in iwl_pcie_txq_unmap()
242 iwl_wake_queue(trans, txq); in iwl_pcie_txq_unmap()
255 struct iwl_txq *txq = trans->txqs.txq[txq_id]; in iwl_pcie_txq_free() local
259 if (WARN_ON(!txq)) in iwl_pcie_txq_free()
266 for (i = 0; i < txq->n_window; i++) { in iwl_pcie_txq_free()
267 kfree_sensitive(txq->entries[i].cmd); in iwl_pcie_txq_free()
268 kfree_sensitive(txq->entries[i].free_buf); in iwl_pcie_txq_free()
272 if (txq->tfds) { in iwl_pcie_txq_free()
276 txq->tfds, txq->dma_addr); in iwl_pcie_txq_free()
277 txq->dma_addr = 0; in iwl_pcie_txq_free()
278 txq->tfds = NULL; in iwl_pcie_txq_free()
281 sizeof(*txq->first_tb_bufs) * txq->n_window, in iwl_pcie_txq_free()
282 txq->first_tb_bufs, txq->first_tb_dma); in iwl_pcie_txq_free()
285 kfree(txq->entries); in iwl_pcie_txq_free()
286 txq->entries = NULL; in iwl_pcie_txq_free()
288 del_timer_sync(&txq->stuck_timer); in iwl_pcie_txq_free()
291 memset(txq, 0, sizeof(*txq)); in iwl_pcie_txq_free()
366 struct iwl_txq *txq = trans->txqs.txq[txq_id]; in iwl_trans_pcie_tx_reset() local
370 txq->dma_addr); in iwl_trans_pcie_tx_reset()
374 txq->dma_addr >> 8); in iwl_trans_pcie_tx_reset()
376 txq->read_ptr = 0; in iwl_trans_pcie_tx_reset()
377 txq->write_ptr = 0; in iwl_trans_pcie_tx_reset()
475 trans->txqs.txq[txq_id] = NULL; in iwl_pcie_tx_free()
544 trans->txqs.txq[txq_id] = &trans_pcie->txq_memory[txq_id]; in iwl_pcie_tx_alloc()
545 ret = iwl_txq_alloc(trans, trans->txqs.txq[txq_id], slots_num, in iwl_pcie_tx_alloc()
551 trans->txqs.txq[txq_id]->id = txq_id; in iwl_pcie_tx_alloc()
598 ret = iwl_txq_init(trans, trans->txqs.txq[txq_id], slots_num, in iwl_pcie_tx_init()
612 trans->txqs.txq[txq_id]->dma_addr >> 8); in iwl_pcie_tx_init()
669 struct iwl_txq *txq = trans->txqs.txq[txq_id]; in iwl_pcie_cmdq_reclaim() local
673 lockdep_assert_held(&txq->lock); in iwl_pcie_cmdq_reclaim()
675 idx = iwl_txq_get_cmd_index(txq, idx); in iwl_pcie_cmdq_reclaim()
676 r = iwl_txq_get_cmd_index(txq, txq->read_ptr); in iwl_pcie_cmdq_reclaim()
679 (!iwl_txq_used(txq, idx))) { in iwl_pcie_cmdq_reclaim()
684 txq->write_ptr, txq->read_ptr); in iwl_pcie_cmdq_reclaim()
690 txq->read_ptr = iwl_txq_inc_wrap(trans, txq->read_ptr); in iwl_pcie_cmdq_reclaim()
694 idx, txq->write_ptr, r); in iwl_pcie_cmdq_reclaim()
699 if (txq->read_ptr == txq->write_ptr) in iwl_pcie_cmdq_reclaim()
702 iwl_txq_progress(txq); in iwl_pcie_cmdq_reclaim()
739 struct iwl_txq *txq = trans->txqs.txq[txq_id]; in iwl_trans_pcie_txq_enable() local
746 txq->wd_timeout = msecs_to_jiffies(wdg_timeout); in iwl_trans_pcie_txq_enable()
771 txq->ampdu = true; in iwl_trans_pcie_txq_enable()
780 ssn = txq->read_ptr; in iwl_trans_pcie_txq_enable()
795 !((ssn - txq->write_ptr) & 0x3f) && in iwl_trans_pcie_txq_enable()
796 (ssn != txq->write_ptr); in iwl_trans_pcie_txq_enable()
803 txq->read_ptr = (ssn & 0xff); in iwl_trans_pcie_txq_enable()
804 txq->write_ptr = (ssn & 0xff); in iwl_trans_pcie_txq_enable()
849 struct iwl_txq *txq = trans->txqs.txq[txq_id]; in iwl_trans_pcie_txq_set_shared_mode() local
851 txq->ampdu = !shared_mode; in iwl_trans_pcie_txq_set_shared_mode()
862 trans->txqs.txq[txq_id]->frozen_expiry_remainder = 0; in iwl_trans_pcie_txq_disable()
863 trans->txqs.txq[txq_id]->frozen = false; in iwl_trans_pcie_txq_disable()
885 trans->txqs.txq[txq_id]->ampdu = false; in iwl_trans_pcie_txq_disable()
904 struct iwl_txq *txq = trans->txqs.txq[trans->txqs.cmd.q_id]; in iwl_pcie_enqueue_hcmd() local
1001 spin_lock_irqsave(&txq->lock, flags); in iwl_pcie_enqueue_hcmd()
1003 if (iwl_txq_space(trans, txq) < ((cmd->flags & CMD_ASYNC) ? 2 : 1)) { in iwl_pcie_enqueue_hcmd()
1004 spin_unlock_irqrestore(&txq->lock, flags); in iwl_pcie_enqueue_hcmd()
1012 idx = iwl_txq_get_cmd_index(txq, txq->write_ptr); in iwl_pcie_enqueue_hcmd()
1013 out_cmd = txq->entries[idx].cmd; in iwl_pcie_enqueue_hcmd()
1014 out_meta = &txq->entries[idx].meta; in iwl_pcie_enqueue_hcmd()
1031 INDEX_TO_SEQ(txq->write_ptr)); in iwl_pcie_enqueue_hcmd()
1039 INDEX_TO_SEQ(txq->write_ptr)); in iwl_pcie_enqueue_hcmd()
1089 cmd_size, txq->write_ptr, idx, trans->txqs.cmd.q_id); in iwl_pcie_enqueue_hcmd()
1093 memcpy(&txq->first_tb_bufs[idx], &out_cmd->hdr, tb0_size); in iwl_pcie_enqueue_hcmd()
1094 iwl_pcie_txq_build_tfd(trans, txq, in iwl_pcie_enqueue_hcmd()
1095 iwl_txq_get_first_tb_dma(txq, idx), in iwl_pcie_enqueue_hcmd()
1105 iwl_txq_gen1_tfd_unmap(trans, out_meta, txq, in iwl_pcie_enqueue_hcmd()
1106 txq->write_ptr); in iwl_pcie_enqueue_hcmd()
1111 iwl_pcie_txq_build_tfd(trans, txq, phys_addr, in iwl_pcie_enqueue_hcmd()
1129 iwl_txq_gen1_tfd_unmap(trans, out_meta, txq, in iwl_pcie_enqueue_hcmd()
1130 txq->write_ptr); in iwl_pcie_enqueue_hcmd()
1135 iwl_pcie_txq_build_tfd(trans, txq, phys_addr, cmdlen[i], false); in iwl_pcie_enqueue_hcmd()
1140 if (WARN_ON_ONCE(txq->entries[idx].free_buf)) in iwl_pcie_enqueue_hcmd()
1141 kfree_sensitive(txq->entries[idx].free_buf); in iwl_pcie_enqueue_hcmd()
1142 txq->entries[idx].free_buf = dup_buf; in iwl_pcie_enqueue_hcmd()
1147 if (txq->read_ptr == txq->write_ptr && txq->wd_timeout) in iwl_pcie_enqueue_hcmd()
1148 mod_timer(&txq->stuck_timer, jiffies + txq->wd_timeout); in iwl_pcie_enqueue_hcmd()
1157 txq->write_ptr = iwl_txq_inc_wrap(trans, txq->write_ptr); in iwl_pcie_enqueue_hcmd()
1158 iwl_pcie_txq_inc_wr_ptr(trans, txq); in iwl_pcie_enqueue_hcmd()
1161 spin_unlock_irqrestore(&txq->lock, flags); in iwl_pcie_enqueue_hcmd()
1185 struct iwl_txq *txq = trans->txqs.txq[trans->txqs.cmd.q_id]; in iwl_pcie_hcmd_complete() local
1192 txq_id, trans->txqs.cmd.q_id, sequence, txq->read_ptr, in iwl_pcie_hcmd_complete()
1193 txq->write_ptr)) { in iwl_pcie_hcmd_complete()
1198 spin_lock_bh(&txq->lock); in iwl_pcie_hcmd_complete()
1200 cmd_index = iwl_txq_get_cmd_index(txq, index); in iwl_pcie_hcmd_complete()
1201 cmd = txq->entries[cmd_index].cmd; in iwl_pcie_hcmd_complete()
1202 meta = &txq->entries[cmd_index].meta; in iwl_pcie_hcmd_complete()
1206 iwl_txq_gen1_tfd_unmap(trans, meta, txq, index); in iwl_pcie_hcmd_complete()
1236 spin_unlock_bh(&txq->lock); in iwl_pcie_hcmd_complete()
1240 struct iwl_txq *txq, u8 hdr_len, in iwl_fill_data_tbs() argument
1260 iwl_pcie_txq_build_tfd(trans, txq, tb_phys, head_tb_len, false); in iwl_fill_data_tbs()
1279 tb_idx = iwl_pcie_txq_build_tfd(trans, txq, tb_phys, in iwl_fill_data_tbs()
1292 struct iwl_txq *txq, u8 hdr_len, in iwl_fill_data_tbs_amsdu() argument
1312 iwl_txq_get_tfd(trans, txq, txq->write_ptr), in iwl_fill_data_tbs_amsdu()
1385 iwl_pcie_txq_build_tfd(trans, txq, hdr_tb_phys, in iwl_fill_data_tbs_amsdu()
1406 iwl_pcie_txq_build_tfd(trans, txq, tb_phys, in iwl_fill_data_tbs_amsdu()
1423 struct iwl_txq *txq, u8 hdr_len, in iwl_fill_data_tbs_amsdu() argument
1441 struct iwl_txq *txq; in iwl_trans_pcie_tx() local
1452 txq = trans->txqs.txq[txq_id]; in iwl_trans_pcie_tx()
1470 spin_lock(&txq->lock); in iwl_trans_pcie_tx()
1472 if (iwl_txq_space(trans, txq) < txq->high_mark) { in iwl_trans_pcie_tx()
1473 iwl_txq_stop(trans, txq); in iwl_trans_pcie_tx()
1476 if (unlikely(iwl_txq_space(trans, txq) < 3)) { in iwl_trans_pcie_tx()
1483 __skb_queue_tail(&txq->overflow_q, skb); in iwl_trans_pcie_tx()
1485 spin_unlock(&txq->lock); in iwl_trans_pcie_tx()
1496 WARN_ONCE(txq->ampdu && in iwl_trans_pcie_tx()
1497 (wifi_seq & 0xff) != txq->write_ptr, in iwl_trans_pcie_tx()
1499 txq_id, wifi_seq, txq->write_ptr); in iwl_trans_pcie_tx()
1502 txq->entries[txq->write_ptr].skb = skb; in iwl_trans_pcie_tx()
1503 txq->entries[txq->write_ptr].cmd = dev_cmd; in iwl_trans_pcie_tx()
1507 INDEX_TO_SEQ(txq->write_ptr))); in iwl_trans_pcie_tx()
1509 tb0_phys = iwl_txq_get_first_tb_dma(txq, txq->write_ptr); in iwl_trans_pcie_tx()
1517 out_meta = &txq->entries[txq->write_ptr].meta; in iwl_trans_pcie_tx()
1545 iwl_pcie_txq_build_tfd(trans, txq, tb0_phys, in iwl_trans_pcie_tx()
1556 iwl_pcie_txq_build_tfd(trans, txq, tb1_phys, tb1_len, false); in iwl_trans_pcie_tx()
1559 iwl_txq_get_tfd(trans, txq, txq->write_ptr), in iwl_trans_pcie_tx()
1571 if (unlikely(iwl_fill_data_tbs_amsdu(trans, skb, txq, hdr_len, in iwl_trans_pcie_tx()
1578 if (unlikely(iwl_fill_data_tbs(trans, skb, txq, hdr_len, in iwl_trans_pcie_tx()
1583 if (unlikely(iwl_fill_data_tbs(trans, frag, txq, 0, in iwl_trans_pcie_tx()
1590 memcpy(&txq->first_tb_bufs[txq->write_ptr], dev_cmd, IWL_FIRST_TB_SIZE); in iwl_trans_pcie_tx()
1592 tfd = iwl_txq_get_tfd(trans, txq, txq->write_ptr); in iwl_trans_pcie_tx()
1594 iwl_txq_gen1_update_byte_cnt_tbl(trans, txq, le16_to_cpu(tx_cmd->len), in iwl_trans_pcie_tx()
1601 if (txq->read_ptr == txq->write_ptr && txq->wd_timeout) { in iwl_trans_pcie_tx()
1608 if (!txq->frozen) in iwl_trans_pcie_tx()
1609 mod_timer(&txq->stuck_timer, in iwl_trans_pcie_tx()
1610 jiffies + txq->wd_timeout); in iwl_trans_pcie_tx()
1612 txq->frozen_expiry_remainder = txq->wd_timeout; in iwl_trans_pcie_tx()
1616 txq->write_ptr = iwl_txq_inc_wrap(trans, txq->write_ptr); in iwl_trans_pcie_tx()
1618 iwl_pcie_txq_inc_wr_ptr(trans, txq); in iwl_trans_pcie_tx()
1624 spin_unlock(&txq->lock); in iwl_trans_pcie_tx()
1627 iwl_txq_gen1_tfd_unmap(trans, out_meta, txq, txq->write_ptr); in iwl_trans_pcie_tx()
1628 spin_unlock(&txq->lock); in iwl_trans_pcie_tx()