iwlwifi: report A-MPDU status
Since the firmware will give us an A-MPDU bit and only a single PHY information packet for all the subframes in an A-MPDU, we can easily report the minimal A-MPDU information for radiotap. Reviewed-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com> Signed-off-by: Johannes Berg <johannes.berg@intel.com>
This commit is contained in:
		
					parent
					
						
							
								188ce5abeb
							
						
					
				
			
			
				commit
				
					
						12bf6f45d1
					
				
			
		
					 3 changed files with 13 additions and 0 deletions
				
			
		|  | @ -1057,6 +1057,7 @@ struct iwl_wep_cmd { | ||||||
| #define RX_RES_PHY_FLAGS_NARROW_BAND_MSK	cpu_to_le16(1 << 3) | #define RX_RES_PHY_FLAGS_NARROW_BAND_MSK	cpu_to_le16(1 << 3) | ||||||
| #define RX_RES_PHY_FLAGS_ANTENNA_MSK		0x70 | #define RX_RES_PHY_FLAGS_ANTENNA_MSK		0x70 | ||||||
| #define RX_RES_PHY_FLAGS_ANTENNA_POS		4 | #define RX_RES_PHY_FLAGS_ANTENNA_POS		4 | ||||||
|  | #define RX_RES_PHY_FLAGS_AGG_MSK		cpu_to_le16(1 << 7) | ||||||
| 
 | 
 | ||||||
| #define RX_RES_STATUS_SEC_TYPE_MSK	(0x7 << 8) | #define RX_RES_STATUS_SEC_TYPE_MSK	(0x7 << 8) | ||||||
| #define RX_RES_STATUS_SEC_TYPE_NONE	(0x0 << 8) | #define RX_RES_STATUS_SEC_TYPE_NONE	(0x0 << 8) | ||||||
|  |  | ||||||
|  | @ -771,6 +771,7 @@ struct iwl_priv { | ||||||
| 	u8 agg_tids_count; | 	u8 agg_tids_count; | ||||||
| 
 | 
 | ||||||
| 	struct iwl_rx_phy_res last_phy_res; | 	struct iwl_rx_phy_res last_phy_res; | ||||||
|  | 	u32 ampdu_ref; | ||||||
| 	bool last_phy_res_valid; | 	bool last_phy_res_valid; | ||||||
| 
 | 
 | ||||||
| 	/*
 | 	/*
 | ||||||
|  |  | ||||||
|  | @ -667,6 +667,7 @@ static int iwlagn_rx_reply_rx_phy(struct iwl_priv *priv, | ||||||
| 	struct iwl_rx_packet *pkt = rxb_addr(rxb); | 	struct iwl_rx_packet *pkt = rxb_addr(rxb); | ||||||
| 
 | 
 | ||||||
| 	priv->last_phy_res_valid = true; | 	priv->last_phy_res_valid = true; | ||||||
|  | 	priv->ampdu_ref++; | ||||||
| 	memcpy(&priv->last_phy_res, pkt->data, | 	memcpy(&priv->last_phy_res, pkt->data, | ||||||
| 	       sizeof(struct iwl_rx_phy_res)); | 	       sizeof(struct iwl_rx_phy_res)); | ||||||
| 	return 0; | 	return 0; | ||||||
|  | @ -981,6 +982,16 @@ static int iwlagn_rx_reply_rx(struct iwl_priv *priv, | ||||||
| 	if (phy_res->phy_flags & RX_RES_PHY_FLAGS_SHORT_PREAMBLE_MSK) | 	if (phy_res->phy_flags & RX_RES_PHY_FLAGS_SHORT_PREAMBLE_MSK) | ||||||
| 		rx_status.flag |= RX_FLAG_SHORTPRE; | 		rx_status.flag |= RX_FLAG_SHORTPRE; | ||||||
| 
 | 
 | ||||||
|  | 	if (phy_res->phy_flags & RX_RES_PHY_FLAGS_AGG_MSK) { | ||||||
|  | 		/*
 | ||||||
|  | 		 * We know which subframes of an A-MPDU belong | ||||||
|  | 		 * together since we get a single PHY response | ||||||
|  | 		 * from the firmware for all of them | ||||||
|  | 		 */ | ||||||
|  | 		rx_status.flag |= RX_FLAG_AMPDU_DETAILS; | ||||||
|  | 		rx_status.ampdu_reference = priv->ampdu_ref; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
| 	/* Set up the HT phy flags */ | 	/* Set up the HT phy flags */ | ||||||
| 	if (rate_n_flags & RATE_MCS_HT_MSK) | 	if (rate_n_flags & RATE_MCS_HT_MSK) | ||||||
| 		rx_status.flag |= RX_FLAG_HT; | 		rx_status.flag |= RX_FLAG_HT; | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Johannes Berg
				Johannes Berg