166 lines
		
	
	
		
			5.6 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			166 lines
		
	
	
		
			5.6 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
| From: Rajkumar Manoharan <rmanohar@qti.qualcomm.com>
 | |
| 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 <rmanohar@qti.qualcomm.com>
 | |
| Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
 | |
| ---
 | |
| 
 | |
| --- 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;
 |