diff options
author | Christian Lamparter <chunkeey@googlemail.com> | 2013-01-18 23:47:19 +0100 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2013-02-01 14:27:21 -0500 |
commit | 0255beda59d3b46c06429699d139ad683b33e5f1 (patch) | |
tree | 8d2f441ed91bf72a33d55f925d558d796ada74ba /drivers/net/wireless/iwlegacy/4965-mac.c | |
parent | 5d38745fa896804ce83cb975ba6bf184d0e85ba0 (diff) | |
download | linux-0255beda59d3b46c06429699d139ad683b33e5f1.tar.gz linux-0255beda59d3b46c06429699d139ad683b33e5f1.tar.bz2 linux-0255beda59d3b46c06429699d139ad683b33e5f1.zip |
iwl4965: report A-MPDU status
This patch is based on "iwlwifi: report A-MPDU status".
(12bf6f45d1703858)
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.
Cc: Stanislaw Gruszka <sgruszka@redhat.com>
Signed-off-by: Christian Lamparter <chunkeey@googlemail.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net/wireless/iwlegacy/4965-mac.c')
-rw-r--r-- | drivers/net/wireless/iwlegacy/4965-mac.c | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/drivers/net/wireless/iwlegacy/4965-mac.c b/drivers/net/wireless/iwlegacy/4965-mac.c index d665a3d9f08f..d2d5aae21d38 100644 --- a/drivers/net/wireless/iwlegacy/4965-mac.c +++ b/drivers/net/wireless/iwlegacy/4965-mac.c @@ -725,6 +725,16 @@ il4965_hdl_rx(struct il_priv *il, struct il_rx_buf *rxb) if (rate_n_flags & RATE_MCS_SGI_MSK) rx_status.flag |= RX_FLAG_SHORT_GI; + 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 = il->_4965.ampdu_ref; + } + il4965_pass_packet_to_mac80211(il, header, len, ampdu_status, rxb, &rx_status); } @@ -736,6 +746,7 @@ il4965_hdl_rx_phy(struct il_priv *il, struct il_rx_buf *rxb) { struct il_rx_pkt *pkt = rxb_addr(rxb); il->_4965.last_phy_res_valid = true; + il->_4965.ampdu_ref++; memcpy(&il->_4965.last_phy_res, pkt->u.raw, sizeof(struct il_rx_phy_res)); } |