summaryrefslogtreecommitdiff
path: root/drivers/staging/cw1200/queue.h
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/staging/cw1200/queue.h')
-rw-r--r--drivers/staging/cw1200/queue.h40
1 files changed, 25 insertions, 15 deletions
diff --git a/drivers/staging/cw1200/queue.h b/drivers/staging/cw1200/queue.h
index 502496b142b..bff33625c8a 100644
--- a/drivers/staging/cw1200/queue.h
+++ b/drivers/staging/cw1200/queue.h
@@ -22,6 +22,10 @@
/* forward */ struct cw1200_queue_stats;
+typedef void (*cw1200_queue_skb_dtor_t)(struct cw1200_common *priv,
+ struct sk_buff *skb,
+ const struct cw1200_txpriv *txpriv);
+
struct cw1200_queue {
struct cw1200_queue_stats *stats;
size_t capacity;
@@ -38,6 +42,8 @@ struct cw1200_queue {
spinlock_t lock;
u8 queue_id;
u8 generation;
+ struct timer_list gc;
+ unsigned long ttl;
};
struct cw1200_queue_stats {
@@ -46,29 +52,36 @@ struct cw1200_queue_stats {
int num_queued;
size_t map_capacity;
wait_queue_head_t wait_link_id_empty;
+ cw1200_queue_skb_dtor_t skb_dtor;
+ struct cw1200_common *priv;
};
struct cw1200_txpriv {
u8 link_id;
u8 raw_link_id;
u8 tid;
+ u8 rate_id;
+ u8 offset;
};
int cw1200_queue_stats_init(struct cw1200_queue_stats *stats,
- size_t map_capacity);
+ size_t map_capacity,
+ cw1200_queue_skb_dtor_t skb_dtor,
+ struct cw1200_common *priv);
int cw1200_queue_init(struct cw1200_queue *queue,
struct cw1200_queue_stats *stats,
u8 queue_id,
- size_t capacity);
-int cw1200_queue_clear(struct cw1200_queue *queue, struct cw1200_common *priv);
+ size_t capacity,
+ unsigned long ttl);
+int cw1200_queue_clear(struct cw1200_queue *queue);
void cw1200_queue_stats_deinit(struct cw1200_queue_stats *stats);
-void cw1200_queue_deinit(struct cw1200_queue *queue,
- struct cw1200_common *priv);
+void cw1200_queue_deinit(struct cw1200_queue *queue);
size_t cw1200_queue_get_num_queued(struct cw1200_queue *queue,
u32 link_id_map);
-int cw1200_queue_put(struct cw1200_queue *queue, struct cw1200_common *cw1200,
- struct sk_buff *skb, struct cw1200_txpriv *txpriv);
+int cw1200_queue_put(struct cw1200_queue *queue,
+ struct sk_buff *skb,
+ struct cw1200_txpriv *txpriv);
int cw1200_queue_get(struct cw1200_queue *queue,
u32 link_id_map,
struct wsm_tx **tx,
@@ -76,15 +89,12 @@ int cw1200_queue_get(struct cw1200_queue *queue,
const struct cw1200_txpriv **txpriv);
int cw1200_queue_requeue(struct cw1200_queue *queue, u32 packetID);
int cw1200_queue_requeue_all(struct cw1200_queue *queue);
-int cw1200_queue_remove(struct cw1200_queue *queue, struct cw1200_common *priv,
- u32 packetID);
+int cw1200_queue_remove(struct cw1200_queue *queue,
+ u32 packetID);
int cw1200_queue_get_skb(struct cw1200_queue *queue, u32 packetID,
- struct sk_buff **skb,
- const struct cw1200_txpriv **txpriv);
-void cw1200_queue_lock(struct cw1200_queue *queue,
- struct cw1200_common *cw1200);
-void cw1200_queue_unlock(struct cw1200_queue *queue,
- struct cw1200_common *cw1200);
+ struct sk_buff **skb);
+void cw1200_queue_lock(struct cw1200_queue *queue);
+void cw1200_queue_unlock(struct cw1200_queue *queue);
bool cw1200_queue_stats_is_empty(struct cw1200_queue_stats *stats,
u32 link_id_map);