summaryrefslogtreecommitdiff
path: root/drivers/staging/cw1200/queue.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/queue.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/queue.c')
-rw-r--r--drivers/staging/cw1200/queue.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/drivers/staging/cw1200/queue.c b/drivers/staging/cw1200/queue.c
index e09984583f6..2ba26f32178 100644
--- a/drivers/staging/cw1200/queue.c
+++ b/drivers/staging/cw1200/queue.c
@@ -28,7 +28,8 @@
*/
u8 generation;
u8 link_id;
- u8 reserved[2];
+ u8 raw_link_id;
+ u8 reserved[1];
};
static inline void __cw1200_queue_lock(struct cw1200_queue *queue,
@@ -199,7 +200,7 @@ size_t cw1200_queue_get_num_queued(struct cw1200_queue *queue,
}
int cw1200_queue_put(struct cw1200_queue *queue, struct cw1200_common *priv,
- struct sk_buff *skb, struct tx_info *txinfo)
+ struct sk_buff *skb, struct tx_info *txinfo, u8 raw_link_id)
{
int ret;
struct wsm_tx *wsm;
@@ -228,6 +229,7 @@ int cw1200_queue_put(struct cw1200_queue *queue, struct cw1200_common *priv,
item->generation, item - queue->pool);
wsm->packetID = __cpu_to_le32(item->packetID);
item->link_id = link_id;
+ item->raw_link_id = raw_link_id;
++queue->num_queued;
++queue->link_map_cache[link_id];
@@ -270,7 +272,7 @@ int cw1200_queue_get(struct cw1200_queue *queue,
if (!WARN_ON(ret)) {
*tx = (struct wsm_tx *)item->skb->data;
*tx_info = IEEE80211_SKB_CB(item->skb);
- *link_id = item->link_id;
+ *link_id = item->raw_link_id;
list_move_tail(&item->head, &queue->pending);
++queue->num_pending;
--queue->link_map_cache[item->link_id];