diff options
Diffstat (limited to 'drivers/net/wireless/ath/ath9k/beacon.c')
| -rw-r--r-- | drivers/net/wireless/ath/ath9k/beacon.c | 28 | 
1 files changed, 16 insertions, 12 deletions
diff --git a/drivers/net/wireless/ath/ath9k/beacon.c b/drivers/net/wireless/ath/ath9k/beacon.c index 4d4b22d52df..4ed010d4ef9 100644 --- a/drivers/net/wireless/ath/ath9k/beacon.c +++ b/drivers/net/wireless/ath/ath9k/beacon.c @@ -136,9 +136,10 @@ static struct ath_buf *ath_beacon_generate(struct ieee80211_hw *hw,  	bf = avp->av_bcbuf;  	skb = bf->bf_mpdu;  	if (skb) { -		dma_unmap_single(sc->dev, bf->bf_dmacontext, +		dma_unmap_single(sc->dev, bf->bf_buf_addr,  				 skb->len, DMA_TO_DEVICE);  		dev_kfree_skb_any(skb); +		bf->bf_buf_addr = 0;  	}  	/* Get a new beacon from mac80211 */ @@ -162,12 +163,12 @@ static struct ath_buf *ath_beacon_generate(struct ieee80211_hw *hw,  		hdr->seq_ctrl |= cpu_to_le16(sc->tx.seq_no);  	} -	bf->bf_buf_addr = bf->bf_dmacontext = -		dma_map_single(sc->dev, skb->data, -			       skb->len, DMA_TO_DEVICE); +	bf->bf_buf_addr = dma_map_single(sc->dev, skb->data, +					 skb->len, DMA_TO_DEVICE);  	if (unlikely(dma_mapping_error(sc->dev, bf->bf_buf_addr))) {  		dev_kfree_skb_any(skb);  		bf->bf_mpdu = NULL; +		bf->bf_buf_addr = 0;  		ath_print(common, ATH_DBG_FATAL,  			  "dma_mapping_error on beaconing\n");  		return NULL; @@ -252,10 +253,11 @@ int ath_beacon_alloc(struct ath_wiphy *aphy, struct ieee80211_vif *vif)  	bf = avp->av_bcbuf;  	if (bf->bf_mpdu != NULL) {  		skb = bf->bf_mpdu; -		dma_unmap_single(sc->dev, bf->bf_dmacontext, +		dma_unmap_single(sc->dev, bf->bf_buf_addr,  				 skb->len, DMA_TO_DEVICE);  		dev_kfree_skb_any(skb);  		bf->bf_mpdu = NULL; +		bf->bf_buf_addr = 0;  	}  	/* NB: the beacon data buffer must be 32-bit aligned. */ @@ -296,12 +298,12 @@ int ath_beacon_alloc(struct ath_wiphy *aphy, struct ieee80211_vif *vif)  		avp->tsf_adjust = cpu_to_le64(0);  	bf->bf_mpdu = skb; -	bf->bf_buf_addr = bf->bf_dmacontext = -		dma_map_single(sc->dev, skb->data, -			       skb->len, DMA_TO_DEVICE); +	bf->bf_buf_addr = dma_map_single(sc->dev, skb->data, +					 skb->len, DMA_TO_DEVICE);  	if (unlikely(dma_mapping_error(sc->dev, bf->bf_buf_addr))) {  		dev_kfree_skb_any(skb);  		bf->bf_mpdu = NULL; +		bf->bf_buf_addr = 0;  		ath_print(common, ATH_DBG_FATAL,  			  "dma_mapping_error on beacon alloc\n");  		return -ENOMEM; @@ -324,10 +326,11 @@ void ath_beacon_return(struct ath_softc *sc, struct ath_vif *avp)  		bf = avp->av_bcbuf;  		if (bf->bf_mpdu != NULL) {  			struct sk_buff *skb = bf->bf_mpdu; -			dma_unmap_single(sc->dev, bf->bf_dmacontext, +			dma_unmap_single(sc->dev, bf->bf_buf_addr,  					 skb->len, DMA_TO_DEVICE);  			dev_kfree_skb_any(skb);  			bf->bf_mpdu = NULL; +			bf->bf_buf_addr = 0;  		}  		list_add_tail(&bf->list, &sc->beacon.bbuf); @@ -359,11 +362,12 @@ void ath_beacon_tasklet(unsigned long data)  		sc->beacon.bmisscnt++;  		if (sc->beacon.bmisscnt < BSTUCK_THRESH) { -			ath_print(common, ATH_DBG_BEACON, +			ath_print(common, ATH_DBG_BSTUCK,  				  "missed %u consecutive beacons\n",  				  sc->beacon.bmisscnt); +			ath9k_hw_bstuck_nfcal(ah);  		} else if (sc->beacon.bmisscnt >= BSTUCK_THRESH) { -			ath_print(common, ATH_DBG_BEACON, +			ath_print(common, ATH_DBG_BSTUCK,  				  "beacon is officially stuck\n");  			sc->sc_flags |= SC_OP_TSF_RESET;  			ath_reset(sc, false); @@ -373,7 +377,7 @@ void ath_beacon_tasklet(unsigned long data)  	}  	if (sc->beacon.bmisscnt != 0) { -		ath_print(common, ATH_DBG_BEACON, +		ath_print(common, ATH_DBG_BSTUCK,  			  "resume beacon xmit after %u misses\n",  			  sc->beacon.bmisscnt);  		sc->beacon.bmisscnt = 0;  |