diff options
author | Johannes Berg <johannes.berg@intel.com> | 2013-02-15 15:38:08 -0500 |
---|---|---|
committer | Johannes Berg <johannes.berg@intel.com> | 2013-03-07 08:33:21 -0500 |
commit | e943789edbb1f9de71b129d9992489eb79ed341f (patch) | |
tree | 68fa313de6316ee270dc7fbc08b3596bf3483497 /include/net | |
parent | 560d268220d3416a2d473bcc906ea2ccbf51e4ec (diff) |
mac80211: provide ieee80211_sta_eosp()
The irqsafe version ieee80211_sta_eosp_irqsafe() exists, but
drivers must not mix calls to any irqsafe/non-irqsafe function.
Both ath9k and iwlwifi, the likely first users of this interface,
use non-irqsafe RX/TX/TX status so must also use a non-irqsafe
version of this function. Since no driver uses the _irqsafe()
version, remove that.
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Diffstat (limited to 'include/net')
-rw-r--r-- | include/net/mac80211.h | 25 |
1 files changed, 14 insertions, 11 deletions
diff --git a/include/net/mac80211.h b/include/net/mac80211.h index cdd7cea1fd4c..8c0ca11a39c4 100644 --- a/include/net/mac80211.h +++ b/include/net/mac80211.h | |||
@@ -1946,14 +1946,14 @@ void ieee80211_free_txskb(struct ieee80211_hw *hw, struct sk_buff *skb); | |||
1946 | * filter those response frames except in the case of frames that | 1946 | * filter those response frames except in the case of frames that |
1947 | * are buffered in the driver -- those must remain buffered to avoid | 1947 | * are buffered in the driver -- those must remain buffered to avoid |
1948 | * reordering. Because it is possible that no frames are released | 1948 | * reordering. Because it is possible that no frames are released |
1949 | * in this case, the driver must call ieee80211_sta_eosp_irqsafe() | 1949 | * in this case, the driver must call ieee80211_sta_eosp() |
1950 | * to indicate to mac80211 that the service period ended anyway. | 1950 | * to indicate to mac80211 that the service period ended anyway. |
1951 | * | 1951 | * |
1952 | * Finally, if frames from multiple TIDs are released from mac80211 | 1952 | * Finally, if frames from multiple TIDs are released from mac80211 |
1953 | * but the driver might reorder them, it must clear & set the flags | 1953 | * but the driver might reorder them, it must clear & set the flags |
1954 | * appropriately (only the last frame may have %IEEE80211_TX_STATUS_EOSP) | 1954 | * appropriately (only the last frame may have %IEEE80211_TX_STATUS_EOSP) |
1955 | * and also take care of the EOSP and MORE_DATA bits in the frame. | 1955 | * and also take care of the EOSP and MORE_DATA bits in the frame. |
1956 | * The driver may also use ieee80211_sta_eosp_irqsafe() in this case. | 1956 | * The driver may also use ieee80211_sta_eosp() in this case. |
1957 | */ | 1957 | */ |
1958 | 1958 | ||
1959 | /** | 1959 | /** |
@@ -2506,7 +2506,7 @@ enum ieee80211_roc_type { | |||
2506 | * setting the EOSP flag in the QoS header of the frames. Also, when the | 2506 | * setting the EOSP flag in the QoS header of the frames. Also, when the |
2507 | * service period ends, the driver must set %IEEE80211_TX_STATUS_EOSP | 2507 | * service period ends, the driver must set %IEEE80211_TX_STATUS_EOSP |
2508 | * on the last frame in the SP. Alternatively, it may call the function | 2508 | * on the last frame in the SP. Alternatively, it may call the function |
2509 | * ieee80211_sta_eosp_irqsafe() to inform mac80211 of the end of the SP. | 2509 | * ieee80211_sta_eosp() to inform mac80211 of the end of the SP. |
2510 | * This callback must be atomic. | 2510 | * This callback must be atomic. |
2511 | * @allow_buffered_frames: Prepare device to allow the given number of frames | 2511 | * @allow_buffered_frames: Prepare device to allow the given number of frames |
2512 | * to go out to the given station. The frames will be sent by mac80211 | 2512 | * to go out to the given station. The frames will be sent by mac80211 |
@@ -2517,7 +2517,7 @@ enum ieee80211_roc_type { | |||
2517 | * them between the TIDs, it must set the %IEEE80211_TX_STATUS_EOSP flag | 2517 | * them between the TIDs, it must set the %IEEE80211_TX_STATUS_EOSP flag |
2518 | * on the last frame and clear it on all others and also handle the EOSP | 2518 | * on the last frame and clear it on all others and also handle the EOSP |
2519 | * bit in the QoS header correctly. Alternatively, it can also call the | 2519 | * bit in the QoS header correctly. Alternatively, it can also call the |
2520 | * ieee80211_sta_eosp_irqsafe() function. | 2520 | * ieee80211_sta_eosp() function. |
2521 | * The @tids parameter is a bitmap and tells the driver which TIDs the | 2521 | * The @tids parameter is a bitmap and tells the driver which TIDs the |
2522 | * frames will be on; it will at most have two bits set. | 2522 | * frames will be on; it will at most have two bits set. |
2523 | * This callback must be atomic. | 2523 | * This callback must be atomic. |
@@ -3857,14 +3857,17 @@ void ieee80211_sta_block_awake(struct ieee80211_hw *hw, | |||
3857 | * %IEEE80211_TX_STATUS_EOSP bit and call this function instead. | 3857 | * %IEEE80211_TX_STATUS_EOSP bit and call this function instead. |
3858 | * This applies for PS-Poll as well as uAPSD. | 3858 | * This applies for PS-Poll as well as uAPSD. |
3859 | * | 3859 | * |
3860 | * Note that there is no non-_irqsafe version right now as | 3860 | * Note that just like with _tx_status() and _rx() drivers must |
3861 | * it wasn't needed, but just like _tx_status() and _rx() | 3861 | * not mix calls to irqsafe/non-irqsafe versions, this function |
3862 | * must not be mixed in irqsafe/non-irqsafe versions, this | 3862 | * must not be mixed with those either. Use the all irqsafe, or |
3863 | * function must not be mixed with those either. Use the | 3863 | * all non-irqsafe, don't mix! |
3864 | * all irqsafe, or all non-irqsafe, don't mix! If you need | 3864 | * |
3865 | * the non-irqsafe version of this, you need to add it. | 3865 | * NB: the _irqsafe version of this function doesn't exist, no |
3866 | * driver needs it right now. Don't call this function if | ||
3867 | * you'd need the _irqsafe version, look at the git history | ||
3868 | * and restore the _irqsafe version! | ||
3866 | */ | 3869 | */ |
3867 | void ieee80211_sta_eosp_irqsafe(struct ieee80211_sta *pubsta); | 3870 | void ieee80211_sta_eosp(struct ieee80211_sta *pubsta); |
3868 | 3871 | ||
3869 | /** | 3872 | /** |
3870 | * ieee80211_iter_keys - iterate keys programmed into the device | 3873 | * ieee80211_iter_keys - iterate keys programmed into the device |