summaryrefslogtreecommitdiff
path: root/drivers/staging/cw1200/wsm.c
diff options
context:
space:
mode:
authorBartosz Markowski <bartosz.markowski@tieto.com>2011-09-27 08:27:19 +0200
committerPhilippe LANGLAIS <philippe.langlais@stericsson.com>2011-10-13 10:18:53 +0200
commit4716cbebb6bb0f839605f68bdec0f1558d69a728 (patch)
treeb4fe9fbcbc6bee841726acf0b3ab066c0d363873 /drivers/staging/cw1200/wsm.c
parentafa3d7b12a74b0583e5c46f8a4d889a2086691ff (diff)
cw1200: UAPSD in AP mode is implemented.
U-APSD in SoftAP is fully offloaded to the mac80211 wireless stack. Driver provides a transparent virtual link (with link_id = CW1200_LINK_ID_UAPSD) which bypases powersave buffering. Mac80211 stack takes care to provide UAPSD data when it is needed. ST-Ericsson ID: 355584 Change-Id: Iabd65e7effcecc5564e76e05e081b8f6a98b4ddb Signed-off-by: Dmitry Tarnyagin <dmitry.tarnyagin@stericsson.com> Reviewed-on: http://gerrit.lud.stericsson.com/gerrit/30661 Reviewed-by: Bartosz MARKOWSKI <bartosz.markowski@tieto.com> Tested-by: Bartosz MARKOWSKI <bartosz.markowski@tieto.com> Reviewed-on: http://gerrit.lud.stericsson.com/gerrit/33529 Reviewed-by: Philippe LANGLAIS <philippe.langlais@stericsson.com>
Diffstat (limited to 'drivers/staging/cw1200/wsm.c')
-rw-r--r--drivers/staging/cw1200/wsm.c9
1 files changed, 4 insertions, 5 deletions
diff --git a/drivers/staging/cw1200/wsm.c b/drivers/staging/cw1200/wsm.c
index 6514b9227a7..b05548f34a8 100644
--- a/drivers/staging/cw1200/wsm.c
+++ b/drivers/staging/cw1200/wsm.c
@@ -1313,7 +1313,7 @@ out:
static bool wsm_handle_tx_data(struct cw1200_common *priv,
const struct wsm_tx *wsm,
const struct ieee80211_tx_info *tx_info,
- int *link_id)
+ int link_id)
{
bool handled = false;
const struct ieee80211_hdr *frame =
@@ -1348,9 +1348,7 @@ static bool wsm_handle_tx_data(struct cw1200_common *priv,
case NL80211_IFTYPE_AP:
if (unlikely(!priv->join_status))
action = doDrop;
- if (*link_id == CW1200_LINK_ID_AFTER_DTIM)
- *link_id = 0;
- else if (WARN_ON(!(BIT(*link_id) &
+ else if (WARN_ON(!(BIT(link_id) &
(BIT(0) | priv->link_id_map))))
action = doDrop;
if (cw1200_queue_get_generation(wsm->packetID) >
@@ -1546,6 +1544,7 @@ static int wsm_get_tx_queue_and_mask(struct cw1200_common *priv,
for (i = 0; i < 4; ++i) {
queue = &priv->tx_queue[i];
tx_allowed_mask = ~priv->sta_asleep_mask;
+ tx_allowed_mask |= BIT(CW1200_LINK_ID_UAPSD);
if (priv->sta_asleep_mask) {
tx_allowed_mask |= ~priv->tx_suspend_mask[i];
tx_allowed_mask |= priv->pspoll_mask;
@@ -1625,7 +1624,7 @@ int wsm_get_tx(struct cw1200_common *priv, u8 **data,
&wsm, &tx_info, &link_id))
continue;
- if (wsm_handle_tx_data(priv, wsm, tx_info, &link_id))
+ if (wsm_handle_tx_data(priv, wsm, tx_info, link_id))
continue; /* Handled by WSM */
wsm->hdr.id &= __cpu_to_le16(