ath9k: report A-MPDU status
The ath9k hardware reports whenever an frame was part of an A-MPDU. MAC80211 already provides the necessary API to pass this additional information along to whomever needs it. Signed-off-by: Christian Lamparter <chunkeey@googlemail.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
		
					parent
					
						
							
								cd435d561a
							
						
					
				
			
			
				commit
				
					
						21fbbca337
					
				
			
		
					 2 changed files with 22 additions and 0 deletions
				
			
		| 
						 | 
					@ -319,6 +319,8 @@ struct ath_rx {
 | 
				
			||||||
	struct ath_rx_edma rx_edma[ATH9K_RX_QUEUE_MAX];
 | 
						struct ath_rx_edma rx_edma[ATH9K_RX_QUEUE_MAX];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	struct sk_buff *frag;
 | 
						struct sk_buff *frag;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						u32 ampdu_ref;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int ath_startrecv(struct ath_softc *sc);
 | 
					int ath_startrecv(struct ath_softc *sc);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1123,6 +1123,24 @@ static int ath_process_fft(struct ath_softc *sc, struct ieee80211_hdr *hdr,
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static void ath9k_apply_ampdu_details(struct ath_softc *sc,
 | 
				
			||||||
 | 
						struct ath_rx_status *rs, struct ieee80211_rx_status *rxs)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						if (rs->rs_isaggr) {
 | 
				
			||||||
 | 
							rxs->flag |= RX_FLAG_AMPDU_DETAILS | RX_FLAG_AMPDU_LAST_KNOWN;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							rxs->ampdu_reference = sc->rx.ampdu_ref;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							if (!rs->rs_moreaggr) {
 | 
				
			||||||
 | 
								rxs->flag |= RX_FLAG_AMPDU_IS_LAST;
 | 
				
			||||||
 | 
								sc->rx.ampdu_ref++;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							if (rs->rs_flags & ATH9K_RX_DELIM_CRC_PRE)
 | 
				
			||||||
 | 
								rxs->flag |= RX_FLAG_AMPDU_DELIM_CRC_ERROR;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int ath_rx_tasklet(struct ath_softc *sc, int flush, bool hp)
 | 
					int ath_rx_tasklet(struct ath_softc *sc, int flush, bool hp)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	struct ath_buf *bf;
 | 
						struct ath_buf *bf;
 | 
				
			||||||
| 
						 | 
					@ -1329,6 +1347,8 @@ int ath_rx_tasklet(struct ath_softc *sc, int flush, bool hp)
 | 
				
			||||||
		if ((ah->caps.hw_caps & ATH9K_HW_CAP_ANT_DIV_COMB) && sc->ant_rx == 3)
 | 
							if ((ah->caps.hw_caps & ATH9K_HW_CAP_ANT_DIV_COMB) && sc->ant_rx == 3)
 | 
				
			||||||
			ath_ant_comb_scan(sc, &rs);
 | 
								ath_ant_comb_scan(sc, &rs);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							ath9k_apply_ampdu_details(sc, &rs, rxs);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		ieee80211_rx(hw, skb);
 | 
							ieee80211_rx(hw, skb);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
requeue_drop_frag:
 | 
					requeue_drop_frag:
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue