forked from Minki/linux
mwifiex: handle AMPDU supported check for AP interface
This patch fixes a bug where we were checking for AP's AMPDU param setting even when transmitting traffic to associated station. Patch adds provision to pass additional parameter ra_list pointer to function which checks if AMPDU is allowed. If current BSS type is AP, we check station's AMPDU params else we check AP's AMPDU params. Signed-off-by: Avinash Patil <patila@marvell.com> Signed-off-by: Bing Zhao <bzhao@marvell.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
parent
79d9a54cf0
commit
eac4322729
@ -64,14 +64,28 @@ int mwifiex_cmd_amsdu_aggr_ctrl(struct host_cmd_ds_command *cmd,
|
|||||||
struct mwifiex_ds_11n_amsdu_aggr_ctrl *aa_ctrl);
|
struct mwifiex_ds_11n_amsdu_aggr_ctrl *aa_ctrl);
|
||||||
void mwifiex_del_tx_ba_stream_tbl_by_ra(struct mwifiex_private *priv, u8 *ra);
|
void mwifiex_del_tx_ba_stream_tbl_by_ra(struct mwifiex_private *priv, u8 *ra);
|
||||||
|
|
||||||
/*
|
|
||||||
* This function checks whether AMPDU is allowed or not for a particular TID.
|
|
||||||
*/
|
|
||||||
static inline u8
|
static inline u8
|
||||||
mwifiex_is_ampdu_allowed(struct mwifiex_private *priv, int tid)
|
mwifiex_is_station_ampdu_allowed(struct mwifiex_private *priv,
|
||||||
|
struct mwifiex_ra_list_tbl *ptr, int tid)
|
||||||
{
|
{
|
||||||
return ((priv->aggr_prio_tbl[tid].ampdu_ap != BA_STREAM_NOT_ALLOWED)
|
struct mwifiex_sta_node *node = mwifiex_get_sta_entry(priv, ptr->ra);
|
||||||
? true : false);
|
|
||||||
|
if (unlikely(!node))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
return (node->ampdu_sta[tid] != BA_STREAM_NOT_ALLOWED) ? true : false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* This function checks whether AMPDU is allowed or not for a particular TID. */
|
||||||
|
static inline u8
|
||||||
|
mwifiex_is_ampdu_allowed(struct mwifiex_private *priv,
|
||||||
|
struct mwifiex_ra_list_tbl *ptr, int tid)
|
||||||
|
{
|
||||||
|
if (GET_BSS_ROLE(priv) == MWIFIEX_BSS_ROLE_UAP)
|
||||||
|
return mwifiex_is_station_ampdu_allowed(priv, ptr, tid);
|
||||||
|
else
|
||||||
|
return (priv->aggr_prio_tbl[tid].ampdu_ap !=
|
||||||
|
BA_STREAM_NOT_ALLOWED) ? true : false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -1226,7 +1226,7 @@ mwifiex_dequeue_tx_packet(struct mwifiex_adapter *adapter)
|
|||||||
/* ra_list_spinlock has been freed in
|
/* ra_list_spinlock has been freed in
|
||||||
mwifiex_send_single_packet() */
|
mwifiex_send_single_packet() */
|
||||||
} else {
|
} else {
|
||||||
if (mwifiex_is_ampdu_allowed(priv, tid) &&
|
if (mwifiex_is_ampdu_allowed(priv, ptr, tid) &&
|
||||||
ptr->ba_pkt_count > ptr->ba_packet_thr) {
|
ptr->ba_pkt_count > ptr->ba_packet_thr) {
|
||||||
if (mwifiex_space_avail_for_new_ba_stream(adapter)) {
|
if (mwifiex_space_avail_for_new_ba_stream(adapter)) {
|
||||||
mwifiex_create_ba_tbl(priv, ptr->ra, tid,
|
mwifiex_create_ba_tbl(priv, ptr->ra, tid,
|
||||||
|
Loading…
Reference in New Issue
Block a user