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: Johannes Berg <johannes.berg@intel.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
committed by
John W. Linville
parent
85ad181ea7
commit
73a72a81d2
@@ -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 @@
|
|||||||
#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,
|
||||||
|
Reference in New Issue
Block a user