summaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/mwifiex/uap_event.c
diff options
context:
space:
mode:
authorAvinash Patil2012-08-04 03:06:10 +0200
committerJohn W. Linville2012-08-06 21:12:55 +0200
commit5a009adf32d28bacc02da2ddeb69765848266ce1 (patch)
treeed1b97a0f917c0de4e394e46edfb5f01ddf6bf1f /drivers/net/wireless/mwifiex/uap_event.c
parentmwifiex: support RX AMSDU aggregation for uAP (diff)
downloadkernel-qcow2-linux-5a009adf32d28bacc02da2ddeb69765848266ce1.tar.gz
kernel-qcow2-linux-5a009adf32d28bacc02da2ddeb69765848266ce1.tar.xz
kernel-qcow2-linux-5a009adf32d28bacc02da2ddeb69765848266ce1.zip
mwifiex: add 11n Block Ack support for uAP
This patch adds support for handling BA request and BA setup events for AP interface. RA list is marked as either 11n enabled or disabled from station's capabilities in association request. BA setup is initiated only after some specific number of packets for particular RA list are transmitted. Signed-off-by: Avinash Patil <patila@marvell.com> Signed-off-by: Kiran Divekar <dkiran@marvell.com> Signed-off-by: Bing Zhao <bzhao@marvell.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net/wireless/mwifiex/uap_event.c')
-rw-r--r--drivers/net/wireless/mwifiex/uap_event.c21
1 files changed, 21 insertions, 0 deletions
diff --git a/drivers/net/wireless/mwifiex/uap_event.c b/drivers/net/wireless/mwifiex/uap_event.c
index 6270c809130a..a10bd95aec12 100644
--- a/drivers/net/wireless/mwifiex/uap_event.c
+++ b/drivers/net/wireless/mwifiex/uap_event.c
@@ -19,6 +19,7 @@
#include "decl.h"
#include "main.h"
+#include "11n.h"
/*
* This function will return the pointer to station entry in station list
@@ -168,6 +169,7 @@ int mwifiex_process_uap_event(struct mwifiex_private *priv)
struct mwifiex_assoc_event *event;
struct mwifiex_sta_node *node;
u8 *deauth_mac;
+ struct host_cmd_ds_11n_batimeout *ba_timeout;
switch (eventcause) {
case EVENT_UAP_STA_ASSOC:
@@ -255,6 +257,25 @@ int mwifiex_process_uap_event(struct mwifiex_private *priv)
adapter->tx_buf_size);
}
break;
+ case EVENT_ADDBA:
+ dev_dbg(adapter->dev, "event: ADDBA Request\n");
+ if (priv->media_connected)
+ mwifiex_send_cmd_async(priv, HostCmd_CMD_11N_ADDBA_RSP,
+ HostCmd_ACT_GEN_SET, 0,
+ adapter->event_body);
+ break;
+ case EVENT_DELBA:
+ dev_dbg(adapter->dev, "event: DELBA Request\n");
+ if (priv->media_connected)
+ mwifiex_11n_delete_ba_stream(priv, adapter->event_body);
+ break;
+ case EVENT_BA_STREAM_TIEMOUT:
+ dev_dbg(adapter->dev, "event: BA Stream timeout\n");
+ if (priv->media_connected) {
+ ba_timeout = (void *)adapter->event_body;
+ mwifiex_11n_ba_stream_timeout(priv, ba_timeout);
+ }
+ break;
default:
dev_dbg(adapter->dev, "event: unknown event id: %#x\n",
eventcause);