diff options
author | Bartosz Markowski <bartosz.markowski@tieto.com> | 2011-09-27 08:27:19 +0200 |
---|---|---|
committer | Philippe LANGLAIS <philippe.langlais@stericsson.com> | 2011-10-13 10:18:53 +0200 |
commit | 4716cbebb6bb0f839605f68bdec0f1558d69a728 (patch) | |
tree | b4fe9fbcbc6bee841726acf0b3ab066c0d363873 /drivers/staging/cw1200/wsm.c | |
parent | afa3d7b12a74b0583e5c46f8a4d889a2086691ff (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.c | 9 |
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( |