mirror of
				git://git.openwrt.org/openwrt/openwrt.git
				synced 2025-10-31 05:54:26 -04:00 
			
		
		
		
	This updates mac80211 to backprots-4.14-rc2. This was compile and runtime tested with ath9k, ath10k and b43 with multiple stations and ieee80211w and in different scenarios by many other people. To create the backports-4.14-rc2-1.tar.xz use this repository: https://git.kernel.org/pub/scm/linux/kernel/git/backports/backports.git from tag v4.14-rc2-1 Then run this: ./gentree.py --git-revision v4.14-rc2 --clean <path to linux repo> ../backports-4.14-rc2-1 This also adapts the ath10k-ct and mt76 driver to the changed cfg80211 APIs and syncs the nl80211.h file in iw with the new version from backports-4.14-rc2. Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
		
			
				
	
	
		
			51 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			51 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
| From: Felix Fietkau <nbd@nbd.name>
 | |
| Date: Sun, 28 Aug 2016 13:13:01 +0200
 | |
| Subject: [PATCH] ath9k: fix moredata bit in PS buffered frame release
 | |
| 
 | |
| Signed-off-by: Felix Fietkau <nbd@nbd.name>
 | |
| ---
 | |
| 
 | |
| --- a/drivers/net/wireless/ath/ath9k/xmit.c
 | |
| +++ b/drivers/net/wireless/ath/ath9k/xmit.c
 | |
| @@ -1674,6 +1674,22 @@ void ath_tx_aggr_wakeup(struct ath_softc
 | |
|  	}
 | |
|  }
 | |
|  
 | |
| +
 | |
| +static void
 | |
| +ath9k_set_moredata(struct ath_softc *sc, struct ath_buf *bf, bool val)
 | |
| +{
 | |
| +	struct ieee80211_hdr *hdr;
 | |
| +	u16 mask = cpu_to_le16(IEEE80211_FCTL_MOREDATA);
 | |
| +	u16 mask_val = mask * val;
 | |
| +
 | |
| +	hdr = (struct ieee80211_hdr *) bf->bf_mpdu->data;
 | |
| +	if ((hdr->frame_control & mask) != mask_val) {
 | |
| +		hdr->frame_control = (hdr->frame_control & ~mask) | mask_val;
 | |
| +		dma_sync_single_for_device(sc->dev, bf->bf_buf_addr,
 | |
| +			sizeof(*hdr), DMA_TO_DEVICE);
 | |
| +	}
 | |
| +}
 | |
| +
 | |
|  void ath9k_release_buffered_frames(struct ieee80211_hw *hw,
 | |
|  				   struct ieee80211_sta *sta,
 | |
|  				   u16 tids, int nframes,
 | |
| @@ -1704,6 +1720,7 @@ void ath9k_release_buffered_frames(struc
 | |
|  			if (!bf)
 | |
|  				break;
 | |
|  
 | |
| +			ath9k_set_moredata(sc, bf, true);
 | |
|  			list_add_tail(&bf->list, &bf_q);
 | |
|  			ath_set_rates(tid->an->vif, tid->an->sta, bf, true);
 | |
|  			if (bf_isampdu(bf)) {
 | |
| @@ -1727,6 +1744,9 @@ void ath9k_release_buffered_frames(struc
 | |
|  	if (list_empty(&bf_q))
 | |
|  		return;
 | |
|  
 | |
| +	if (!more_data)
 | |
| +		ath9k_set_moredata(sc, bf_tail, false);
 | |
| +
 | |
|  	info = IEEE80211_SKB_CB(bf_tail->bf_mpdu);
 | |
|  	info->flags |= IEEE80211_TX_STATUS_EOSP;
 | |
|  
 |