#include <linux/ieee80211.h>
#include <linux/slab.h>
#include <linux/export.h>
#include <net/mac80211.h>
#include "ieee80211_i.h"
#include "driver-ops.h"
#include "wme.h"
Go to the source code of this file.
Functions | |
int | ___ieee80211_stop_tx_ba_session (struct sta_info *sta, u16 tid, enum ieee80211_back_parties initiator, bool tx) |
static void | __acquires (agg_queue) |
int | __ieee80211_stop_tx_ba_session (struct sta_info *sta, u16 tid, enum ieee80211_back_parties initiator, bool tx) |
static void | __releases (agg_queue) |
EXPORT_SYMBOL (ieee80211_send_bar) | |
EXPORT_SYMBOL (ieee80211_start_tx_ba_session) | |
EXPORT_SYMBOL (ieee80211_start_tx_ba_cb_irqsafe) | |
EXPORT_SYMBOL (ieee80211_stop_tx_ba_session) | |
EXPORT_SYMBOL (ieee80211_stop_tx_ba_cb_irqsafe) | |
static int | ieee80211_ac_from_tid (int tid) |
static void | ieee80211_agg_tx_operational (struct ieee80211_local *local, struct sta_info *sta, u16 tid) |
void | ieee80211_assign_tid_tx (struct sta_info *sta, int tid, struct tid_ampdu_tx *tid_tx) |
void | ieee80211_process_addba_resp (struct ieee80211_local *local, struct sta_info *sta, struct ieee80211_mgmt *mgmt, size_t len) |
static void | ieee80211_send_addba_request (struct ieee80211_sub_if_data *sdata, const u8 *da, u16 tid, u8 dialog_token, u16 start_seq_num, u16 agg_size, u16 timeout) |
void | ieee80211_send_bar (struct ieee80211_vif *vif, u8 *ra, u16 tid, u16 ssn) |
void | ieee80211_start_tx_ba_cb (struct ieee80211_vif *vif, u8 *ra, u16 tid) |
void | ieee80211_start_tx_ba_cb_irqsafe (struct ieee80211_vif *vif, const u8 *ra, u16 tid) |
int | ieee80211_start_tx_ba_session (struct ieee80211_sta *pubsta, u16 tid, u16 timeout) |
void | ieee80211_stop_tx_ba_cb (struct ieee80211_vif *vif, u8 *ra, u8 tid) |
void | ieee80211_stop_tx_ba_cb_irqsafe (struct ieee80211_vif *vif, const u8 *ra, u16 tid) |
int | ieee80211_stop_tx_ba_session (struct ieee80211_sta *pubsta, u16 tid) |
void | ieee80211_tx_ba_session_handle_start (struct sta_info *sta, int tid) |
static void | sta_addba_resp_timer_expired (unsigned long data) |
int ___ieee80211_stop_tx_ba_session | ( | struct sta_info * | sta, |
u16 | tid, | ||
enum ieee80211_back_parties | initiator, | ||
bool | tx | ||
) |
Definition at line 146 of file kernel-3.2/agg-tx.c.
static void __acquires | ( | agg_queue | ) | [static] |
Definition at line 282 of file kernel-3.2/agg-tx.c.
int __ieee80211_stop_tx_ba_session | ( | struct sta_info * | sta, |
u16 | tid, | ||
enum ieee80211_back_parties | initiator, | ||
bool | tx | ||
) |
Definition at line 601 of file kernel-3.2/agg-tx.c.
static void __releases | ( | agg_queue | ) | [static] |
Definition at line 294 of file kernel-3.2/agg-tx.c.
static int ieee80211_ac_from_tid | ( | int | tid | ) | [inline, static] |
Definition at line 266 of file kernel-3.2/agg-tx.c.
static void ieee80211_agg_tx_operational | ( | struct ieee80211_local * | local, |
struct sta_info * | sta, | ||
u16 | tid | ||
) | [static] |
Definition at line 497 of file kernel-3.2/agg-tx.c.
void ieee80211_assign_tid_tx | ( | struct sta_info * | sta, |
int | tid, | ||
struct tid_ampdu_tx * | tid_tx | ||
) |
Definition at line 138 of file kernel-3.2/agg-tx.c.
void ieee80211_process_addba_resp | ( | struct ieee80211_local * | local, |
struct sta_info * | sta, | ||
struct ieee80211_mgmt * | mgmt, | ||
size_t | len | ||
) |
Definition at line 750 of file kernel-3.2/agg-tx.c.
static void ieee80211_send_addba_request | ( | struct ieee80211_sub_if_data * | sdata, |
const u8 * | da, | ||
u16 | tid, | ||
u8 | dialog_token, | ||
u16 | start_seq_num, | ||
u16 | agg_size, | ||
u16 | timeout | ||
) | [static] |
DOC: TX A-MPDU aggregation
Aggregation on the TX side requires setting the hardware flag 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 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_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.
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 callback.
Similarly, when the aggregation session is stopped by the peer or something calling ieee80211_stop_tx_ba_session(), the driver's 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().
Definition at line 60 of file kernel-3.2/agg-tx.c.
void ieee80211_send_bar | ( | struct ieee80211_vif * | vif, |
u8 * | ra, | ||
u16 | tid, | ||
u16 | ssn | ||
) |
Definition at line 108 of file kernel-3.2/agg-tx.c.
void ieee80211_start_tx_ba_cb | ( | struct ieee80211_vif * | vif, |
u8 * | ra, | ||
u16 | tid | ||
) |
Definition at line 532 of file kernel-3.2/agg-tx.c.
void ieee80211_start_tx_ba_cb_irqsafe | ( | struct ieee80211_vif * | vif, |
const u8 * | ra, | ||
u16 | tid | ||
) |
Definition at line 580 of file kernel-3.2/agg-tx.c.
int ieee80211_start_tx_ba_session | ( | struct ieee80211_sta * | pubsta, |
u16 | tid, | ||
u16 | timeout | ||
) |
Definition at line 399 of file kernel-3.2/agg-tx.c.
void ieee80211_stop_tx_ba_cb | ( | struct ieee80211_vif * | vif, |
u8 * | ra, | ||
u8 | tid | ||
) |
Definition at line 655 of file kernel-3.2/agg-tx.c.
void ieee80211_stop_tx_ba_cb_irqsafe | ( | struct ieee80211_vif * | vif, |
const u8 * | ra, | ||
u16 | tid | ||
) |
Definition at line 728 of file kernel-3.2/agg-tx.c.
int ieee80211_stop_tx_ba_session | ( | struct ieee80211_sta * | pubsta, |
u16 | tid | ||
) |
Definition at line 616 of file kernel-3.2/agg-tx.c.
void ieee80211_tx_ba_session_handle_start | ( | struct sta_info * | sta, |
int | tid | ||
) |
Definition at line 338 of file kernel-3.2/agg-tx.c.
static void sta_addba_resp_timer_expired | ( | unsigned long | data | ) | [static] |
Definition at line 233 of file kernel-3.2/agg-tx.c.