diff options
Diffstat (limited to 'drivers/net/wireless/ath/ath9k/ar9003_mac.c')
| -rw-r--r-- | drivers/net/wireless/ath/ath9k/ar9003_mac.c | 19 | 
1 files changed, 7 insertions, 12 deletions
| diff --git a/drivers/net/wireless/ath/ath9k/ar9003_mac.c b/drivers/net/wireless/ath/ath9k/ar9003_mac.c index 10d71f7d3fc2..8ff0b88a29b9 100644 --- a/drivers/net/wireless/ath/ath9k/ar9003_mac.c +++ b/drivers/net/wireless/ath/ath9k/ar9003_mac.c @@ -43,13 +43,6 @@ static void ar9003_hw_set_desc_link(void *ds, u32 ds_link)  	ads->ctl10 |= ar9003_calc_ptr_chksum(ads);  } -static void ar9003_hw_get_desc_link(void *ds, u32 **ds_link) -{ -	struct ar9003_txc *ads = ds; - -	*ds_link = &ads->link; -} -  static bool ar9003_hw_get_isr(struct ath_hw *ah, enum ath9k_int *masked)  {  	u32 isr = 0; @@ -236,6 +229,7 @@ static void ar9003_hw_fill_txdesc(struct ath_hw *ah, void *ds, u32 seglen,  static int ar9003_hw_proc_txdesc(struct ath_hw *ah, void *ds,  				 struct ath_tx_status *ts)  { +	struct ar9003_txc *txc = (struct ar9003_txc *) ds;  	struct ar9003_txs *ads;  	u32 status; @@ -245,7 +239,11 @@ static int ar9003_hw_proc_txdesc(struct ath_hw *ah, void *ds,  	if ((status & AR_TxDone) == 0)  		return -EINPROGRESS; -	ah->ts_tail = (ah->ts_tail + 1) % ah->ts_size; +	ts->qid = MS(ads->ds_info, AR_TxQcuNum); +	if (!txc || (MS(txc->info, AR_TxQcuNum) == ts->qid)) +		ah->ts_tail = (ah->ts_tail + 1) % ah->ts_size; +	else +		return -ENOENT;  	if ((MS(ads->ds_info, AR_DescId) != ATHEROS_VENDOR_ID) ||  	    (MS(ads->ds_info, AR_TxRxDesc) != 1)) { @@ -261,7 +259,6 @@ static int ar9003_hw_proc_txdesc(struct ath_hw *ah, void *ds,  	ts->ts_seqnum = MS(status, AR_SeqNum);  	ts->tid = MS(status, AR_TxTid); -	ts->qid = MS(ads->ds_info, AR_TxQcuNum);  	ts->desc_id = MS(ads->status1, AR_TxDescId);  	ts->ts_tstamp = ads->status4;  	ts->ts_status = 0; @@ -498,7 +495,6 @@ void ar9003_hw_attach_mac_ops(struct ath_hw *hw)  	ops->rx_enable = ar9003_hw_rx_enable;  	ops->set_desc_link = ar9003_hw_set_desc_link; -	ops->get_desc_link = ar9003_hw_get_desc_link;  	ops->get_isr = ar9003_hw_get_isr;  	ops->fill_txdesc = ar9003_hw_fill_txdesc;  	ops->proc_txdesc = ar9003_hw_proc_txdesc; @@ -629,8 +625,7 @@ int ath9k_hw_process_rxdesc_edma(struct ath_hw *ah, struct ath_rx_status *rxs,  			rxs->rs_status |= ATH9K_RXERR_DECRYPT;  		else if (rxsp->status11 & AR_MichaelErr)  			rxs->rs_status |= ATH9K_RXERR_MIC; - -		if (rxsp->status11 & AR_KeyMiss) +		else if (rxsp->status11 & AR_KeyMiss)  			rxs->rs_status |= ATH9K_RXERR_DECRYPT;  	} | 
