Commit 73a72a81 authored by Johannes Berg's avatar Johannes Berg Committed by John W. Linville

mac80211: update aggregation documentation

Even before the recent changes, the documentation
for TX aggregation was somewhat out of date. Update
it and also add documentation for the RX side.
Signed-off-by: default avatarJohannes Berg <johannes.berg@intel.com>
Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
parent 85ad181e
...@@ -13,6 +13,29 @@ ...@@ -13,6 +13,29 @@
* published by the Free Software Foundation. * published by the Free Software Foundation.
*/ */
/**
* DOC: RX A-MPDU aggregation
*
* Aggregation on the RX side requires only implementing the
* @ampdu_action callback that is invoked to start/stop any
* block-ack sessions for RX aggregation.
*
* When RX aggregation is started by the peer, the driver is
* notified via @ampdu_action function, with the
* %IEEE80211_AMPDU_RX_START action, and may reject the request
* in which case a negative response is sent to the peer, if it
* accepts it a positive response is sent.
*
* While the session is active, the device/driver are required
* to de-aggregate frames and pass them up one by one to mac80211,
* which will handle the reorder buffer.
*
* When the aggregation session is stopped again by the peer or
* ourselves, the driver's @ampdu_action function will be called
* with the action %IEEE80211_AMPDU_RX_STOP. In this case, the
* call must not fail.
*/
#include <linux/ieee80211.h> #include <linux/ieee80211.h>
#include <linux/slab.h> #include <linux/slab.h>
#include <net/mac80211.h> #include <net/mac80211.h>
......
...@@ -21,28 +21,39 @@ ...@@ -21,28 +21,39 @@
#include "wme.h" #include "wme.h"
/** /**
* DOC: TX aggregation * DOC: TX A-MPDU aggregation
* *
* Aggregation on the TX side requires setting the hardware flag * Aggregation on the TX side requires setting the hardware flag
* %IEEE80211_HW_AMPDU_AGGREGATION as well as, if present, the @ampdu_queues * %IEEE80211_HW_AMPDU_AGGREGATION. The driver will then be handed
* hardware parameter to the number of hardware AMPDU queues. If there are no * packets with a flag indicating A-MPDU aggregation. The driver
* hardware queues then the driver will (currently) have to do all frame * or device is responsible for actually aggregating the frames,
* buffering. * as well as deciding how many and which to aggregate.
* *
* When TX aggregation is started by some subsystem (usually the rate control * When TX aggregation is started by some subsystem (usually the rate
* algorithm would be appropriate) by calling the * control algorithm would be appropriate) by calling the
* ieee80211_start_tx_ba_session() function, the driver will be notified via * ieee80211_start_tx_ba_session() function, the driver will be
* its @ampdu_action function, with the %IEEE80211_AMPDU_TX_START action. * notified via its @ampdu_action function, with the
* %IEEE80211_AMPDU_TX_START action.
* *
* In response to that, the driver is later required to call the * In response to that, the driver is later required to call the
* ieee80211_start_tx_ba_cb() (or ieee80211_start_tx_ba_cb_irqsafe()) * ieee80211_start_tx_ba_cb_irqsafe() function, which will really
* function, which will start the aggregation session. * start the aggregation session after the peer has also responded.
* If the peer responds negatively, the session will be stopped
* again right away. Note that it is possible for the aggregation
* session to be stopped before the driver has indicated that it
* is done setting it up, in which case it must not indicate the
* setup completion.
* *
* Similarly, when the aggregation session is stopped by * Also note that, since we also need to wait for a response from
* ieee80211_stop_tx_ba_session(), the driver's @ampdu_action function will * the peer, the driver is notified of the completion of the
* be called with the action %IEEE80211_AMPDU_TX_STOP. In this case, the * handshake by the %IEEE80211_AMPDU_TX_OPERATIONAL action to the
* call must not fail, and the driver must later call ieee80211_stop_tx_ba_cb() * @ampdu_action callback.
* (or ieee80211_stop_tx_ba_cb_irqsafe()). *
* Similarly, when the aggregation session is stopped by the peer
* or something calling ieee80211_stop_tx_ba_session(), the driver's
* @ampdu_action function will be called with the action
* %IEEE80211_AMPDU_TX_STOP. In this case, the call must not fail,
* and the driver must later call ieee80211_stop_tx_ba_cb_irqsafe().
*/ */
static void ieee80211_send_addba_request(struct ieee80211_sub_if_data *sdata, static void ieee80211_send_addba_request(struct ieee80211_sub_if_data *sdata,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment