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_ANTENNA_MSK		0x70 | ||||
| #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_NONE	(0x0 << 8) | ||||
|  |  | |||
|  | @ -771,6 +771,7 @@ struct iwl_priv { | |||
| 	u8 agg_tids_count; | ||||
| 
 | ||||
| 	struct iwl_rx_phy_res last_phy_res; | ||||
| 	u32 ampdu_ref; | ||||
| 	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); | ||||
| 
 | ||||
| 	priv->last_phy_res_valid = true; | ||||
| 	priv->ampdu_ref++; | ||||
| 	memcpy(&priv->last_phy_res, pkt->data, | ||||
| 	       sizeof(struct iwl_rx_phy_res)); | ||||
| 	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) | ||||
| 		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 */ | ||||
| 	if (rate_n_flags & RATE_MCS_HT_MSK) | ||||
| 		rx_status.flag |= RX_FLAG_HT; | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Johannes Berg
				Johannes Berg