summaryrefslogtreecommitdiff
path: root/drivers/staging/cw1200/queue.c
diff options
context:
space:
mode:
authorDmitry Tarnyagin <dmitry.tarnyagin@stericsson.com>2011-10-04 22:48:03 +0200
committerPhilippe LANGLAIS <philippe.langlais@stericsson.com>2011-10-13 10:22:55 +0200
commit868040fa7b15aa1adf7af925f89dfa6c3b0b7a3c (patch)
treeb3cfbfec2113e0e788a5270c44cce8507bd24a8b /drivers/staging/cw1200/queue.c
parent981db2f065cbba810c39290ac8906c2ae68f3b6b (diff)
cw1200: queue dependency refactoring.
According to the driver design queue should know as less as possible about other components. Last commits violate this "rule" by transpatent arguments like tid. This patch is fixing these violations. No functional changes in this commit. Change-Id: I078835dc0263ef71fa2d50a1d9bfae2c04bab440 Signed-off-by: Dmitry Tarnyagin <dmitry.tarnyagin@stericsson.com> Reviewed-on: http://gerrit.lud.stericsson.com/gerrit/33540 Reviewed-by: Bartosz MARKOWSKI <bartosz.markowski@tieto.com> Reviewed-by: Philippe LANGLAIS <philippe.langlais@stericsson.com>
Diffstat (limited to 'drivers/staging/cw1200/queue.c')
-rw-r--r--drivers/staging/cw1200/queue.c49
1 files changed, 19 insertions, 30 deletions
diff --git a/drivers/staging/cw1200/queue.c b/drivers/staging/cw1200/queue.c
index ef7d48488bd..c667c433766 100644
--- a/drivers/staging/cw1200/queue.c
+++ b/drivers/staging/cw1200/queue.c
@@ -20,16 +20,8 @@
struct list_head head;
struct sk_buff *skb;
u32 packetID;
- /* For safety purposes only. I do not trust device too much.
- * It was observed (last time quite long time ago) that it
- * indicates TX for a packet several times, so it was not enough
- * to use offset or address as an uniquie ID in a
- * queue.
- */
+ struct cw1200_txpriv txpriv;
u8 generation;
- u8 link_id;
- u8 raw_link_id;
- u8 tid;
};
static inline void __cw1200_queue_lock(struct cw1200_queue *queue,
@@ -200,20 +192,18 @@ 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,
- u8 raw_link_id, u8 tid)
+ struct sk_buff *skb, struct cw1200_txpriv *txpriv)
{
int ret;
struct wsm_tx *wsm;
struct cw1200_queue_stats *stats = queue->stats;
- u8 link_id = txinfo->link_id;
wsm = (struct wsm_tx *)skb_push(skb, sizeof(struct wsm_tx));
- ret = cw1200_skb_to_wsm(priv, skb, wsm, txinfo);
+ ret = cw1200_skb_to_wsm(priv, skb, wsm, txpriv);
if (ret)
return ret;
- if (link_id >= queue->stats->map_capacity)
+ if (txpriv->link_id >= queue->stats->map_capacity)
return -EINVAL;
spin_lock_bh(&queue->lock);
@@ -224,21 +214,19 @@ int cw1200_queue_put(struct cw1200_queue *queue, struct cw1200_common *priv,
list_move_tail(&item->head, &queue->queue);
item->skb = skb;
+ item->txpriv = *txpriv;
item->generation = 0;
item->packetID = cw1200_queue_make_packet_id(
queue->generation, queue->queue_id,
item->generation, item - queue->pool);
wsm->packetID = __cpu_to_le32(item->packetID);
- item->link_id = link_id;
- item->raw_link_id = raw_link_id;
- item->tid = tid;
++queue->num_queued;
- ++queue->link_map_cache[link_id];
+ ++queue->link_map_cache[txpriv->link_id];
spin_lock_bh(&stats->lock);
++stats->num_queued;
- ++stats->link_map_cache[link_id];
+ ++stats->link_map_cache[txpriv->link_id];
spin_unlock_bh(&stats->lock);
if (queue->num_queued >= queue->capacity) {
@@ -256,7 +244,7 @@ int cw1200_queue_get(struct cw1200_queue *queue,
u32 link_id_map,
struct wsm_tx **tx,
struct ieee80211_tx_info **tx_info,
- int *link_id)
+ const struct cw1200_txpriv **txpriv)
{
int ret = -ENOENT;
struct cw1200_queue_item *item;
@@ -265,7 +253,7 @@ int cw1200_queue_get(struct cw1200_queue *queue,
spin_lock_bh(&queue->lock);
list_for_each_entry(item, &queue->queue, head) {
- if (link_id_map & BIT(item->link_id)) {
+ if (link_id_map & BIT(item->txpriv.link_id)) {
ret = 0;
break;
}
@@ -274,14 +262,14 @@ 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->raw_link_id;
+ *txpriv = &item->txpriv;
list_move_tail(&item->head, &queue->pending);
++queue->num_pending;
- --queue->link_map_cache[item->link_id];
+ --queue->link_map_cache[item->txpriv.link_id];
spin_lock_bh(&stats->lock);
--stats->num_queued;
- if (!--stats->link_map_cache[item->link_id])
+ if (!--stats->link_map_cache[item->txpriv.link_id])
wakeup_stats = true;
spin_unlock_bh(&stats->lock);
}
@@ -316,11 +304,11 @@ int cw1200_queue_requeue(struct cw1200_queue *queue, u32 packetID)
} else {
struct wsm_tx *wsm = (struct wsm_tx *)item->skb->data;
--queue->num_pending;
- ++queue->link_map_cache[item->link_id];
+ ++queue->link_map_cache[item->txpriv.link_id];
spin_lock_bh(&stats->lock);
++stats->num_queued;
- ++stats->link_map_cache[item->link_id];
+ ++stats->link_map_cache[item->txpriv.link_id];
spin_unlock_bh(&stats->lock);
item->generation = ++item_generation;
@@ -343,11 +331,11 @@ int cw1200_queue_requeue_all(struct cw1200_queue *queue)
struct wsm_tx *wsm = (struct wsm_tx *)item->skb->data;
--queue->num_pending;
- ++queue->link_map_cache[item->link_id];
+ ++queue->link_map_cache[item->txpriv.link_id];
spin_lock_bh(&stats->lock);
++stats->num_queued;
- ++stats->link_map_cache[item->link_id];
+ ++stats->link_map_cache[item->txpriv.link_id];
spin_unlock_bh(&stats->lock);
++item->generation;
@@ -411,7 +399,8 @@ int cw1200_queue_remove(struct cw1200_queue *queue, struct cw1200_common *priv,
}
int cw1200_queue_get_skb(struct cw1200_queue *queue, u32 packetID,
- struct sk_buff **skb, int *tid)
+ struct sk_buff **skb,
+ const struct cw1200_txpriv **txpriv)
{
int ret = 0;
u8 queue_generation, queue_id, item_generation, item_id;
@@ -433,7 +422,7 @@ int cw1200_queue_get_skb(struct cw1200_queue *queue, u32 packetID,
ret = -ENOENT;
} else {
*skb = item->skb;
- *tid = item->tid;
+ *txpriv = &item->txpriv;
item->skb = NULL;
}
spin_unlock_bh(&queue->lock);