| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165 |
- From: Rajkumar Manoharan <[email protected]>
- Date: Fri, 23 Oct 2015 18:01:05 +0530
- Subject: [PATCH] ath10k: cleanup copy engine send completion
- The physical address necessary to unmap DMA ('bufferp') is stored
- in ath10k_skb_cb as 'paddr'. ath10k doesn't rely on the meta/transfer_id
- when handling send completion (htc ep id is stored in sk_buff control
- buffer). So the unused output arguments {bufferp, nbytesp and transfer_idp}
- are removed from CE send completion. This change is needed before removing
- the shadow copy of copy engine (CE) descriptors in follow up patch.
- Signed-off-by: Rajkumar Manoharan <[email protected]>
- Signed-off-by: Kalle Valo <[email protected]>
- ---
- --- a/drivers/net/wireless/ath/ath10k/ce.c
- +++ b/drivers/net/wireless/ath/ath10k/ce.c
- @@ -578,17 +578,13 @@ int ath10k_ce_revoke_recv_next(struct at
- * The caller takes responsibility for any necessary locking.
- */
- int ath10k_ce_completed_send_next_nolock(struct ath10k_ce_pipe *ce_state,
- - void **per_transfer_contextp,
- - u32 *bufferp,
- - unsigned int *nbytesp,
- - unsigned int *transfer_idp)
- + void **per_transfer_contextp)
- {
- struct ath10k_ce_ring *src_ring = ce_state->src_ring;
- u32 ctrl_addr = ce_state->ctrl_addr;
- struct ath10k *ar = ce_state->ar;
- unsigned int nentries_mask = src_ring->nentries_mask;
- unsigned int sw_index = src_ring->sw_index;
- - struct ce_desc *sdesc, *sbase;
- unsigned int read_index;
-
- if (src_ring->hw_index == sw_index) {
- @@ -613,15 +609,6 @@ int ath10k_ce_completed_send_next_nolock
- if (read_index == sw_index)
- return -EIO;
-
- - sbase = src_ring->base_addr_owner_space;
- - sdesc = CE_SRC_RING_TO_DESC(sbase, sw_index);
- -
- - /* Return data from completed source descriptor */
- - *bufferp = __le32_to_cpu(sdesc->addr);
- - *nbytesp = __le16_to_cpu(sdesc->nbytes);
- - *transfer_idp = MS(__le16_to_cpu(sdesc->flags),
- - CE_DESC_FLAGS_META_DATA);
- -
- if (per_transfer_contextp)
- *per_transfer_contextp =
- src_ring->per_transfer_context[sw_index];
- @@ -696,10 +683,7 @@ int ath10k_ce_cancel_send_next(struct at
- }
-
- int ath10k_ce_completed_send_next(struct ath10k_ce_pipe *ce_state,
- - void **per_transfer_contextp,
- - u32 *bufferp,
- - unsigned int *nbytesp,
- - unsigned int *transfer_idp)
- + void **per_transfer_contextp)
- {
- struct ath10k *ar = ce_state->ar;
- struct ath10k_pci *ar_pci = ath10k_pci_priv(ar);
- @@ -707,9 +691,7 @@ int ath10k_ce_completed_send_next(struct
-
- spin_lock_bh(&ar_pci->ce_lock);
- ret = ath10k_ce_completed_send_next_nolock(ce_state,
- - per_transfer_contextp,
- - bufferp, nbytesp,
- - transfer_idp);
- + per_transfer_contextp);
- spin_unlock_bh(&ar_pci->ce_lock);
-
- return ret;
- --- a/drivers/net/wireless/ath/ath10k/ce.h
- +++ b/drivers/net/wireless/ath/ath10k/ce.h
- @@ -192,16 +192,10 @@ int ath10k_ce_completed_recv_next(struct
- * Pops 1 completed send buffer from Source ring.
- */
- int ath10k_ce_completed_send_next(struct ath10k_ce_pipe *ce_state,
- - void **per_transfer_contextp,
- - u32 *bufferp,
- - unsigned int *nbytesp,
- - unsigned int *transfer_idp);
- + void **per_transfer_contextp);
-
- int ath10k_ce_completed_send_next_nolock(struct ath10k_ce_pipe *ce_state,
- - void **per_transfer_contextp,
- - u32 *bufferp,
- - unsigned int *nbytesp,
- - unsigned int *transfer_idp);
- + void **per_transfer_contextp);
-
- /*==================CE Engine Initialization=======================*/
-
- --- a/drivers/net/wireless/ath/ath10k/pci.c
- +++ b/drivers/net/wireless/ath/ath10k/pci.c
- @@ -910,9 +910,8 @@ static int ath10k_pci_diag_read_mem(stru
- goto done;
-
- i = 0;
- - while (ath10k_ce_completed_send_next_nolock(ce_diag, NULL, &buf,
- - &completed_nbytes,
- - &id) != 0) {
- + while (ath10k_ce_completed_send_next_nolock(ce_diag,
- + NULL) != 0) {
- mdelay(1);
- if (i++ > DIAG_ACCESS_CE_TIMEOUT_MS) {
- ret = -EBUSY;
- @@ -1073,9 +1072,8 @@ static int ath10k_pci_diag_write_mem(str
- goto done;
-
- i = 0;
- - while (ath10k_ce_completed_send_next_nolock(ce_diag, NULL, &buf,
- - &completed_nbytes,
- - &id) != 0) {
- + while (ath10k_ce_completed_send_next_nolock(ce_diag,
- + NULL) != 0) {
- mdelay(1);
-
- if (i++ > DIAG_ACCESS_CE_TIMEOUT_MS) {
- @@ -1139,13 +1137,9 @@ static void ath10k_pci_htc_tx_cb(struct
- struct ath10k *ar = ce_state->ar;
- struct sk_buff_head list;
- struct sk_buff *skb;
- - u32 ce_data;
- - unsigned int nbytes;
- - unsigned int transfer_id;
-
- __skb_queue_head_init(&list);
- - while (ath10k_ce_completed_send_next(ce_state, (void **)&skb, &ce_data,
- - &nbytes, &transfer_id) == 0) {
- + while (ath10k_ce_completed_send_next(ce_state, (void **)&skb) == 0) {
- /* no need to call tx completion for NULL pointers */
- if (skb == NULL)
- continue;
- @@ -1215,12 +1209,8 @@ static void ath10k_pci_htt_tx_cb(struct
- {
- struct ath10k *ar = ce_state->ar;
- struct sk_buff *skb;
- - u32 ce_data;
- - unsigned int nbytes;
- - unsigned int transfer_id;
-
- - while (ath10k_ce_completed_send_next(ce_state, (void **)&skb, &ce_data,
- - &nbytes, &transfer_id) == 0) {
- + while (ath10k_ce_completed_send_next(ce_state, (void **)&skb) == 0) {
- /* no need to call tx completion for NULL pointers */
- if (!skb)
- continue;
- @@ -1796,12 +1786,8 @@ err_dma:
- static void ath10k_pci_bmi_send_done(struct ath10k_ce_pipe *ce_state)
- {
- struct bmi_xfer *xfer;
- - u32 ce_data;
- - unsigned int nbytes;
- - unsigned int transfer_id;
-
- - if (ath10k_ce_completed_send_next(ce_state, (void **)&xfer, &ce_data,
- - &nbytes, &transfer_id))
- + if (ath10k_ce_completed_send_next(ce_state, (void **)&xfer))
- return;
-
- xfer->tx_done = true;
|