@@ -1295,8 +1295,8 @@ static bool carl9170_tx_ps_drop(struct ar9170 *ar, struct sk_buff *skb)
tx_info = IEEE80211_SKB_CB(skb);
if (unlikely(sta_info->sleeping) &&
- !(tx_info->flags & (IEEE80211_TX_CTL_NO_PS_BUFFER |
- IEEE80211_TX_CTL_CLEAR_PS_FILT))) {
+ !(tx_info->flags & IEEE80211_TX_CTL_CLEAR_PS_FILT) &&
+ !(tx_info->control.flags & IEEE80211_TX_CTRL_NO_PS_BUFFER)) {
rcu_read_unlock();
if (tx_info->flags & IEEE80211_TX_CTL_AMPDU)
@@ -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
@@ -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
@@ -439,7 +439,7 @@ static void iwl_mvm_mac_tx(struct ieee80211_hw *hw,
goto drop;
/* treat non-bufferable MMPDUs as broadcast if sta is sleeping */
- if (unlikely(info->flags & IEEE80211_TX_CTL_NO_PS_BUFFER &&
+ if (unlikely(info->control.flags & IEEE80211_TX_CTRL_NO_PS_BUFFER &&
ieee80211_is_mgmt(hdr->frame_control) &&
!ieee80211_is_deauth(hdr->frame_control) &&
!ieee80211_is_disassoc(hdr->frame_control) &&
@@ -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)
@@ -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_CTRL_FIRST_FRAGMENT)
-
+#define IEEE80211_TX_TEMPORARY_CTRL_FLAGS (IEEE80211_TX_CTRL_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
@@ -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 |=
@@ -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
@@ -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;
}