Return-path: Received: from mail.net.t-labs.tu-berlin.de ([130.149.220.252]:46373 "EHLO mail.net.t-labs.tu-berlin.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751216AbaBVUga (ORCPT ); Sat, 22 Feb 2014 15:36:30 -0500 From: Thomas Huehn To: linville@tuxdriver.com Cc: linux-wireless@vger.kernel.org, johannes@sipsolutions.net, nbd@nbd.name, thomas@net.t-labs.tu-berlin.de Subject: [PATCH 3/6] mac80211: move flag IEEE80211_TX_CTL_NO_PS_BUFFER into info->control.flags Date: Sat, 22 Feb 2014 21:36:17 +0100 Message-Id: <1393101380-1646-4-git-send-email-thomas@net.t-labs.tu-berlin.de> (sfid-20140222_213705_754707_A86C3E20) In-Reply-To: <1393101380-1646-1-git-send-email-thomas@net.t-labs.tu-berlin.de> References: <1393101380-1646-1-git-send-email-thomas@net.t-labs.tu-berlin.de> Sender: linux-wireless-owner@vger.kernel.org List-ID: Flag IEEE80211_TX_CTL_NO_PS_BUFFER is only used within the tx path while ieee80211_tx_info->control is valid. Therefore this patch moves this flag from info->flags structure into the info->control.flags and renames it to IEEE80211_TX_CTRL_NO_PS_BUFFER. Signed-off-by: Benjamin Vahl Signed-off-by: Thomas Huehn --- drivers/net/wireless/iwlegacy/4965-mac.c | 2 +- drivers/net/wireless/iwlwifi/dvm/tx.c | 2 +- drivers/net/wireless/p54/txrx.c | 2 +- include/net/mac80211.h | 48 ++++++++++++++---------------- net/mac80211/mesh_ps.c | 6 ++-- net/mac80211/sta_info.c | 13 ++++---- net/mac80211/tx.c | 5 ++-- 7 files changed, 38 insertions(+), 40 deletions(-) diff --git a/drivers/net/wireless/iwlegacy/4965-mac.c b/drivers/net/wireless/iwlegacy/4965-mac.c index 43f488a..647a678 100644 --- a/drivers/net/wireless/iwlegacy/4965-mac.c +++ b/drivers/net/wireless/iwlegacy/4965-mac.c @@ -1721,7 +1721,7 @@ il4965_tx_skb(struct il_priv *il, sta_priv = (void *)sta->drv_priv; if (sta_priv && sta_priv->asleep && - (info->flags & IEEE80211_TX_CTL_NO_PS_BUFFER)) { + (info->control.flags & IEEE80211_TX_CTRL_NO_PS_BUFFER)) { /* * This sends an asynchronous command to the device, * but we can rely on it being processed before the diff --git a/drivers/net/wireless/iwlwifi/dvm/tx.c b/drivers/net/wireless/iwlwifi/dvm/tx.c index dbab1d5..4030f97 100644 --- a/drivers/net/wireless/iwlwifi/dvm/tx.c +++ b/drivers/net/wireless/iwlwifi/dvm/tx.c @@ -344,7 +344,7 @@ int iwlagn_tx_skb(struct iwl_priv *priv, sta_priv = (void *)sta->drv_priv; if (sta_priv && sta_priv->asleep && - (info->flags & IEEE80211_TX_CTL_NO_PS_BUFFER)) { + (info->control.flags & IEEE80211_TX_CTRL_NO_PS_BUFFER)) { /* * This sends an asynchronous command to the device, * but we can rely on it being processed before the diff --git a/drivers/net/wireless/p54/txrx.c b/drivers/net/wireless/p54/txrx.c index 1b1f0a2..dafed1b 100644 --- a/drivers/net/wireless/p54/txrx.c +++ b/drivers/net/wireless/p54/txrx.c @@ -694,7 +694,7 @@ static void p54_tx_80211_header(struct p54_common *priv, struct sk_buff *skb, if (!(info->control.flags & IEEE80211_TX_CTRL_ASSIGN_SEQ)) *flags |= P54_HDR_FLAG_DATA_OUT_SEQNR; - if (info->flags & IEEE80211_TX_CTL_NO_PS_BUFFER) + if (info->control.flags & IEEE80211_TX_CTRL_NO_PS_BUFFER) *flags |= P54_HDR_FLAG_DATA_OUT_NOCANCEL; if (info->flags & IEEE80211_TX_CTL_CLEAR_PS_FILT) diff --git a/include/net/mac80211.h b/include/net/mac80211.h index f5b71f2..84b9c34 100644 --- a/include/net/mac80211.h +++ b/include/net/mac80211.h @@ -413,9 +413,6 @@ struct ieee80211_bss_conf { * used to indicate that a frame was already retried due to PS * @IEEE80211_TX_INTFL_DONT_ENCRYPT: completely internal to mac80211, * used to indicate frame should not be encrypted - * @IEEE80211_TX_CTL_NO_PS_BUFFER: This frame is a response to a poll - * frame (PS-Poll or uAPSD) or a non-bufferable MMPDU and must - * be sent although the station is in powersave mode. * @IEEE80211_TX_CTL_MORE_FRAMES: More frames will be passed to the * transmit function after the current frame, this can be used * by drivers to kick the DMA queue only if unset or when the @@ -475,23 +472,22 @@ enum mac80211_tx_info_flags { IEEE80211_TX_INTFL_NEED_TXPROCESSING = BIT(12), IEEE80211_TX_INTFL_RETRIED = BIT(13), IEEE80211_TX_INTFL_DONT_ENCRYPT = BIT(14), - IEEE80211_TX_CTL_NO_PS_BUFFER = BIT(15), - IEEE80211_TX_CTL_MORE_FRAMES = BIT(16), - IEEE80211_TX_INTFL_RETRANSMISSION = BIT(17), - IEEE80211_TX_INTFL_MLME_CONN_TX = BIT(18), - IEEE80211_TX_INTFL_NL80211_FRAME_TX = BIT(19), - IEEE80211_TX_CTL_LDPC = BIT(20), - IEEE80211_TX_CTL_STBC = BIT(21) | BIT(22), - IEEE80211_TX_CTL_TX_OFFCHAN = BIT(23), - IEEE80211_TX_INTFL_TKIP_MIC_FAILURE = BIT(24), - IEEE80211_TX_CTL_NO_CCK_RATE = BIT(25), - IEEE80211_TX_STATUS_EOSP = BIT(26), - IEEE80211_TX_CTL_USE_MINRATE = BIT(27), - IEEE80211_TX_CTL_DONTFRAG = BIT(28), - IEEE80211_TX_CTL_PS_RESPONSE = BIT(29), + IEEE80211_TX_CTL_MORE_FRAMES = BIT(15), + IEEE80211_TX_INTFL_RETRANSMISSION = BIT(16), + IEEE80211_TX_INTFL_MLME_CONN_TX = BIT(17), + IEEE80211_TX_INTFL_NL80211_FRAME_TX = BIT(18), + IEEE80211_TX_CTL_LDPC = BIT(19), + IEEE80211_TX_CTL_STBC = BIT(20) | BIT(21), + IEEE80211_TX_CTL_TX_OFFCHAN = BIT(22), + IEEE80211_TX_INTFL_TKIP_MIC_FAILURE = BIT(23), + IEEE80211_TX_CTL_NO_CCK_RATE = BIT(24), + IEEE80211_TX_STATUS_EOSP = BIT(25), + IEEE80211_TX_CTL_USE_MINRATE = BIT(26), + IEEE80211_TX_CTL_DONTFRAG = BIT(27), + IEEE80211_TX_CTL_PS_RESPONSE = BIT(28), }; -#define IEEE80211_TX_CTL_STBC_SHIFT 21 +#define IEEE80211_TX_CTL_STBC_SHIFT 20 /** * enum mac80211_tx_control_flags - flags to describe transmit control @@ -517,6 +513,7 @@ enum mac80211_tx_control_flags { IEEE80211_TX_CTRL_PORT_CTRL_PROTO = BIT(0), IEEE80211_TX_CTRL_ASSIGN_SEQ = BIT(1), IEEE80211_TX_CTRL_FIRST_FRAGMENT = BIT(3), + IEEE80211_TX_CTRL_NO_PS_BUFFER = BIT(4), }; /* @@ -528,17 +525,16 @@ enum mac80211_tx_control_flags { IEEE80211_TX_CTL_SEND_AFTER_DTIM | IEEE80211_TX_CTL_AMPDU | \ IEEE80211_TX_STAT_TX_FILTERED | IEEE80211_TX_STAT_ACK | \ IEEE80211_TX_STAT_AMPDU | IEEE80211_TX_STAT_AMPDU_NO_BACK | \ - IEEE80211_TX_CTL_RATE_CTRL_PROBE | IEEE80211_TX_CTL_NO_PS_BUFFER | \ - IEEE80211_TX_CTL_MORE_FRAMES | IEEE80211_TX_CTL_LDPC | \ - IEEE80211_TX_CTL_STBC) + IEEE80211_TX_CTL_RATE_CTRL_PROBE | IEEE80211_TX_CTL_STBC | \ + IEEE80211_TX_CTL_MORE_FRAMES | IEEE80211_TX_CTL_LDPC) /* * This definition is used to clear all temporary flags, which are only used * within the tx path as long as ieee80211_tx_info control is valid and * info->control.flags is used. */ -#define IEEE80211_TX_TEMPORARY_CTRL_FLAGS (IEEE80211_TX_CTL_FIRST_FRAGMENT) - +#define IEEE80211_TX_TEMPORARY_CTRL_FLAGS (IEEE80211_TX_CTL_FIRST_FRAGMENT | \ + IEEE80211_TX_CTRL_NO_PS_BUFFER) /** * enum mac80211_rate_control_flags - per-rate flags set by the @@ -2066,7 +2062,7 @@ void ieee80211_free_txskb(struct ieee80211_hw *hw, struct sk_buff *skb); * the station sends a PS-Poll or a uAPSD trigger frame, mac80211 * will inform the driver of this with the @allow_buffered_frames * callback; this callback is optional. mac80211 will then transmit - * the frames as usual and set the %IEEE80211_TX_CTL_NO_PS_BUFFER + * the frames as usual and set the %IEEE80211_TX_CTRL_NO_PS_BUFFER * on each frame. The last frame in the service period (or the only * response to a PS-Poll) also has %IEEE80211_TX_STATUS_EOSP set to * indicate that it ends the service period; as this frame must have @@ -2075,7 +2071,7 @@ void ieee80211_free_txskb(struct ieee80211_hw *hw, struct sk_buff *skb); * marked has having ended and a new one can be started by the peer. * * Additionally, non-bufferable MMPDUs can also be transmitted by - * mac80211 with the %IEEE80211_TX_CTL_NO_PS_BUFFER set in them. + * mac80211 with the %IEEE80211_TX_CTRL_NO_PS_BUFFER set in them. * * Another race condition can happen on some devices like iwlwifi * when there are frames queued for the station and it wakes up @@ -2683,7 +2679,7 @@ enum ieee80211_roc_type { * @allow_buffered_frames: Prepare device to allow the given number of frames * to go out to the given station. The frames will be sent by mac80211 * via the usual TX path after this call. The TX information for frames - * released will also have the %IEEE80211_TX_CTL_NO_PS_BUFFER flag set + * released will also have the %IEEE80211_TX_CTRL_NO_PS_BUFFER flag set * and the last one will also have %IEEE80211_TX_STATUS_EOSP set. In case * frames from multiple TIDs are released and the driver might reorder * them between the TIDs, it must set the %IEEE80211_TX_STATUS_EOSP flag diff --git a/net/mac80211/mesh_ps.c b/net/mac80211/mesh_ps.c index 2802f9d..6bd9bef 100644 --- a/net/mac80211/mesh_ps.c +++ b/net/mac80211/mesh_ps.c @@ -391,8 +391,8 @@ static void mpsp_trigger_send(struct sta_info *sta, bool rspi, bool eosp) info = IEEE80211_SKB_CB(skb); - info->flags |= IEEE80211_TX_CTL_NO_PS_BUFFER | - IEEE80211_TX_CTL_REQ_TX_STATUS; + info->flags |= IEEE80211_TX_CTL_REQ_TX_STATUS; + info->control.flags |= IEEE80211_TX_CTRL_NO_PS_BUFFER; mps_dbg(sdata, "sending MPSP trigger%s%s to %pM\n", rspi ? " RSPI" : "", eosp ? " EOSP" : "", sta->sta.addr); @@ -499,7 +499,7 @@ static void mps_frame_deliver(struct sta_info *sta, int n_frames) * STA may still remain is PS mode after this frame * exchange. */ - info->flags |= IEEE80211_TX_CTL_NO_PS_BUFFER; + info->control.flags |= IEEE80211_TX_CTRL_NO_PS_BUFFER; if (more_data || !skb_queue_is_last(&frames, skb)) hdr->frame_control |= diff --git a/net/mac80211/sta_info.c b/net/mac80211/sta_info.c index decd30c..ca0ca1b 100644 --- a/net/mac80211/sta_info.c +++ b/net/mac80211/sta_info.c @@ -1207,10 +1207,11 @@ static void ieee80211_send_null_response(struct ieee80211_sub_if_data *sdata, * exchange. Also set EOSP to indicate this packet * ends the poll/service period. */ - info->flags |= IEEE80211_TX_CTL_NO_PS_BUFFER | - IEEE80211_TX_CTL_PS_RESPONSE | - IEEE80211_TX_STATUS_EOSP | - IEEE80211_TX_CTL_REQ_TX_STATUS; + info->flags |= IEEE80211_TX_CTL_PS_RESPONSE | + IEEE80211_TX_STATUS_EOSP | + IEEE80211_TX_CTL_REQ_TX_STATUS; + + info->control.flags |= IEEE80211_TX_CTRL_NO_PS_BUFFER; if (call_driver) drv_allow_buffered_frames(local, sta, BIT(tid), 1, @@ -1359,8 +1360,8 @@ ieee80211_sta_ps_deliver_response(struct sta_info *sta, * STA may still remain is PS mode after this frame * exchange. */ - info->flags |= IEEE80211_TX_CTL_NO_PS_BUFFER | - IEEE80211_TX_CTL_PS_RESPONSE; + info->flags |= IEEE80211_TX_CTL_PS_RESPONSE; + info->control.flags |= IEEE80211_TX_CTRL_NO_PS_BUFFER; /* * Use MoreData flag to indicate whether there are diff --git a/net/mac80211/tx.c b/net/mac80211/tx.c index 2309be9..316b8d3 100644 --- a/net/mac80211/tx.c +++ b/net/mac80211/tx.c @@ -470,7 +470,8 @@ ieee80211_tx_h_unicast_ps_buf(struct ieee80211_tx_data *tx) if (unlikely((test_sta_flag(sta, WLAN_STA_PS_STA) || test_sta_flag(sta, WLAN_STA_PS_DRIVER)) && - !(info->flags & IEEE80211_TX_CTL_NO_PS_BUFFER))) { + !(info->control.flags & + IEEE80211_TX_CTRL_NO_PS_BUFFER))) { int ac = skb_get_queue_mapping(tx->skb); ps_dbg(sta->sdata, "STA %pM aid %d: PS buffer for AC %d\n", @@ -525,7 +526,7 @@ ieee80211_tx_h_ps_buf(struct ieee80211_tx_data *tx) if (ieee80211_is_mgmt(hdr->frame_control) && !ieee80211_is_bufferable_mmpdu(hdr->frame_control)) { if (tx->flags & IEEE80211_TX_UNICAST) - info->flags |= IEEE80211_TX_CTL_NO_PS_BUFFER; + info->control.flags |= IEEE80211_TX_CTRL_NO_PS_BUFFER; return TX_CONTINUE; } -- 1.7.9.5