Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 203016
b: refs/heads/master
c: 73a72a8
h: refs/heads/master
v: v3
  • Loading branch information
Johannes Berg authored and John W. Linville committed Jun 14, 2010
1 parent acda5c5 commit 7d9532b
Show file tree
Hide file tree
Showing 3 changed files with 51 additions and 17 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 85ad181ea78861f69b007599cec9e6ba33fcdf8a
refs/heads/master: 73a72a81d27b71f9ace31668d2dd7f3ac1c8228e
23 changes: 23 additions & 0 deletions trunk/net/mac80211/agg-rx.c
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,29 @@
* 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/slab.h>
#include <net/mac80211.h>
Expand Down
43 changes: 27 additions & 16 deletions trunk/net/mac80211/agg-tx.c
Original file line number Diff line number Diff line change
Expand Up @@ -21,28 +21,39 @@
#include "wme.h"

/**
* DOC: TX aggregation
* DOC: TX A-MPDU aggregation
*
* Aggregation on the TX side requires setting the hardware flag
* %IEEE80211_HW_AMPDU_AGGREGATION as well as, if present, the @ampdu_queues
* hardware parameter to the number of hardware AMPDU queues. If there are no
* hardware queues then the driver will (currently) have to do all frame
* buffering.
* %IEEE80211_HW_AMPDU_AGGREGATION. The driver will then be handed
* packets with a flag indicating A-MPDU aggregation. The driver
* or device is responsible for actually aggregating the frames,
* as well as deciding how many and which to aggregate.
*
* When TX aggregation is started by some subsystem (usually the rate control
* algorithm would be appropriate) by calling the
* ieee80211_start_tx_ba_session() function, the driver will be notified via
* its @ampdu_action function, with the %IEEE80211_AMPDU_TX_START action.
* When TX aggregation is started by some subsystem (usually the rate
* control algorithm would be appropriate) by calling the
* ieee80211_start_tx_ba_session() function, the driver will be
* 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
* ieee80211_start_tx_ba_cb() (or ieee80211_start_tx_ba_cb_irqsafe())
* function, which will start the aggregation session.
* ieee80211_start_tx_ba_cb_irqsafe() function, which will really
* 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
* 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()
* (or ieee80211_stop_tx_ba_cb_irqsafe()).
* Also note that, since we also need to wait for a response from
* the peer, the driver is notified of the completion of the
* handshake by the %IEEE80211_AMPDU_TX_OPERATIONAL action to the
* @ampdu_action callback.
*
* 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,
Expand Down

0 comments on commit 7d9532b

Please sign in to comment.