Lines Matching refs:queue

25 	struct data_queue *queue = entry->queue;  in rt2x00queue_alloc_rxskb()  local
26 struct rt2x00_dev *rt2x00dev = queue->rt2x00dev; in rt2x00queue_alloc_rxskb()
37 frame_size = queue->data_size + queue->desc_size + queue->winfo_size; in rt2x00queue_alloc_rxskb()
95 struct device *dev = entry->queue->rt2x00dev->dev; in rt2x00queue_map_txskb()
112 struct device *dev = entry->queue->rt2x00dev->dev; in rt2x00queue_unmap_skb()
491 struct rt2x00_dev *rt2x00dev = entry->queue->rt2x00dev; in rt2x00queue_write_tx_data()
503 entry->queue->qid, DRV_PROJECT); in rt2x00queue_write_tx_data()
532 struct data_queue *queue = entry->queue; in rt2x00queue_write_tx_descriptor() local
534 queue->rt2x00dev->ops->lib->write_tx_desc(entry, txdesc); in rt2x00queue_write_tx_descriptor()
540 rt2x00debug_dump_frame(queue->rt2x00dev, DUMP_FRAME_TX, entry); in rt2x00queue_write_tx_descriptor()
543 static void rt2x00queue_kick_tx_queue(struct data_queue *queue, in rt2x00queue_kick_tx_queue() argument
555 if (rt2x00queue_threshold(queue) || in rt2x00queue_kick_tx_queue()
557 queue->rt2x00dev->ops->lib->kick_queue(queue); in rt2x00queue_kick_tx_queue()
562 struct rt2x00_dev *rt2x00dev = entry->queue->rt2x00dev; in rt2x00queue_bar_check()
602 int rt2x00queue_write_tx_frame(struct data_queue *queue, struct sk_buff *skb, in rt2x00queue_write_tx_frame() argument
617 rt2x00queue_create_tx_descriptor(queue->rt2x00dev, skb, &txdesc, sta); in rt2x00queue_write_tx_frame()
642 if (rt2x00_has_cap_flag(queue->rt2x00dev, REQUIRE_COPY_IV)) in rt2x00queue_write_tx_frame()
656 if (rt2x00_has_cap_flag(queue->rt2x00dev, REQUIRE_L2PAD)) in rt2x00queue_write_tx_frame()
658 else if (rt2x00_has_cap_flag(queue->rt2x00dev, REQUIRE_DMA)) in rt2x00queue_write_tx_frame()
664 spin_lock(&queue->tx_lock); in rt2x00queue_write_tx_frame()
666 if (unlikely(rt2x00queue_full(queue))) { in rt2x00queue_write_tx_frame()
667 rt2x00_dbg(queue->rt2x00dev, "Dropping frame due to full tx queue %d\n", in rt2x00queue_write_tx_frame()
668 queue->qid); in rt2x00queue_write_tx_frame()
673 entry = rt2x00queue_get_entry(queue, Q_INDEX); in rt2x00queue_write_tx_frame()
677 rt2x00_err(queue->rt2x00dev, in rt2x00queue_write_tx_frame()
680 queue->qid, DRV_PROJECT); in rt2x00queue_write_tx_frame()
708 rt2x00queue_kick_tx_queue(queue, &txdesc); in rt2x00queue_write_tx_frame()
716 if (rt2x00queue_threshold(queue)) in rt2x00queue_write_tx_frame()
717 rt2x00queue_pause_queue(queue); in rt2x00queue_write_tx_frame()
719 spin_unlock(&queue->tx_lock); in rt2x00queue_write_tx_frame()
787 bool rt2x00queue_for_each_entry(struct data_queue *queue, in rt2x00queue_for_each_entry() argument
800 rt2x00_err(queue->rt2x00dev, in rt2x00queue_for_each_entry()
812 spin_lock_irqsave(&queue->index_lock, irqflags); in rt2x00queue_for_each_entry()
813 index_start = queue->index[start]; in rt2x00queue_for_each_entry()
814 index_end = queue->index[end]; in rt2x00queue_for_each_entry()
815 spin_unlock_irqrestore(&queue->index_lock, irqflags); in rt2x00queue_for_each_entry()
823 if (fn(&queue->entries[i], data)) in rt2x00queue_for_each_entry()
827 for (i = index_start; i < queue->limit; i++) { in rt2x00queue_for_each_entry()
828 if (fn(&queue->entries[i], data)) in rt2x00queue_for_each_entry()
833 if (fn(&queue->entries[i], data)) in rt2x00queue_for_each_entry()
842 struct queue_entry *rt2x00queue_get_entry(struct data_queue *queue, in rt2x00queue_get_entry() argument
849 rt2x00_err(queue->rt2x00dev, "Entry requested from invalid index type (%d)\n", in rt2x00queue_get_entry()
854 spin_lock_irqsave(&queue->index_lock, irqflags); in rt2x00queue_get_entry()
856 entry = &queue->entries[queue->index[index]]; in rt2x00queue_get_entry()
858 spin_unlock_irqrestore(&queue->index_lock, irqflags); in rt2x00queue_get_entry()
866 struct data_queue *queue = entry->queue; in rt2x00queue_index_inc() local
870 rt2x00_err(queue->rt2x00dev, in rt2x00queue_index_inc()
875 spin_lock_irqsave(&queue->index_lock, irqflags); in rt2x00queue_index_inc()
877 queue->index[index]++; in rt2x00queue_index_inc()
878 if (queue->index[index] >= queue->limit) in rt2x00queue_index_inc()
879 queue->index[index] = 0; in rt2x00queue_index_inc()
884 queue->length++; in rt2x00queue_index_inc()
886 queue->length--; in rt2x00queue_index_inc()
887 queue->count++; in rt2x00queue_index_inc()
890 spin_unlock_irqrestore(&queue->index_lock, irqflags); in rt2x00queue_index_inc()
893 static void rt2x00queue_pause_queue_nocheck(struct data_queue *queue) in rt2x00queue_pause_queue_nocheck() argument
895 switch (queue->qid) { in rt2x00queue_pause_queue_nocheck()
904 ieee80211_stop_queue(queue->rt2x00dev->hw, queue->qid); in rt2x00queue_pause_queue_nocheck()
910 void rt2x00queue_pause_queue(struct data_queue *queue) in rt2x00queue_pause_queue() argument
912 if (!test_bit(DEVICE_STATE_PRESENT, &queue->rt2x00dev->flags) || in rt2x00queue_pause_queue()
913 !test_bit(QUEUE_STARTED, &queue->flags) || in rt2x00queue_pause_queue()
914 test_and_set_bit(QUEUE_PAUSED, &queue->flags)) in rt2x00queue_pause_queue()
917 rt2x00queue_pause_queue_nocheck(queue); in rt2x00queue_pause_queue()
921 void rt2x00queue_unpause_queue(struct data_queue *queue) in rt2x00queue_unpause_queue() argument
923 if (!test_bit(DEVICE_STATE_PRESENT, &queue->rt2x00dev->flags) || in rt2x00queue_unpause_queue()
924 !test_bit(QUEUE_STARTED, &queue->flags) || in rt2x00queue_unpause_queue()
925 !test_and_clear_bit(QUEUE_PAUSED, &queue->flags)) in rt2x00queue_unpause_queue()
928 switch (queue->qid) { in rt2x00queue_unpause_queue()
937 ieee80211_wake_queue(queue->rt2x00dev->hw, queue->qid); in rt2x00queue_unpause_queue()
944 queue->rt2x00dev->ops->lib->kick_queue(queue); in rt2x00queue_unpause_queue()
952 void rt2x00queue_start_queue(struct data_queue *queue) in rt2x00queue_start_queue() argument
954 mutex_lock(&queue->status_lock); in rt2x00queue_start_queue()
956 if (!test_bit(DEVICE_STATE_PRESENT, &queue->rt2x00dev->flags) || in rt2x00queue_start_queue()
957 test_and_set_bit(QUEUE_STARTED, &queue->flags)) { in rt2x00queue_start_queue()
958 mutex_unlock(&queue->status_lock); in rt2x00queue_start_queue()
962 set_bit(QUEUE_PAUSED, &queue->flags); in rt2x00queue_start_queue()
964 queue->rt2x00dev->ops->lib->start_queue(queue); in rt2x00queue_start_queue()
966 rt2x00queue_unpause_queue(queue); in rt2x00queue_start_queue()
968 mutex_unlock(&queue->status_lock); in rt2x00queue_start_queue()
972 void rt2x00queue_stop_queue(struct data_queue *queue) in rt2x00queue_stop_queue() argument
974 mutex_lock(&queue->status_lock); in rt2x00queue_stop_queue()
976 if (!test_and_clear_bit(QUEUE_STARTED, &queue->flags)) { in rt2x00queue_stop_queue()
977 mutex_unlock(&queue->status_lock); in rt2x00queue_stop_queue()
981 rt2x00queue_pause_queue_nocheck(queue); in rt2x00queue_stop_queue()
983 queue->rt2x00dev->ops->lib->stop_queue(queue); in rt2x00queue_stop_queue()
985 mutex_unlock(&queue->status_lock); in rt2x00queue_stop_queue()
989 void rt2x00queue_flush_queue(struct data_queue *queue, bool drop) in rt2x00queue_flush_queue() argument
992 (queue->qid == QID_AC_VO) || in rt2x00queue_flush_queue()
993 (queue->qid == QID_AC_VI) || in rt2x00queue_flush_queue()
994 (queue->qid == QID_AC_BE) || in rt2x00queue_flush_queue()
995 (queue->qid == QID_AC_BK); in rt2x00queue_flush_queue()
997 if (rt2x00queue_empty(queue)) in rt2x00queue_flush_queue()
1007 queue->rt2x00dev->ops->lib->kick_queue(queue); in rt2x00queue_flush_queue()
1014 if (likely(queue->rt2x00dev->ops->lib->flush_queue)) in rt2x00queue_flush_queue()
1015 queue->rt2x00dev->ops->lib->flush_queue(queue, drop); in rt2x00queue_flush_queue()
1020 if (unlikely(!rt2x00queue_empty(queue))) in rt2x00queue_flush_queue()
1021 rt2x00_warn(queue->rt2x00dev, "Queue %d failed to flush\n", in rt2x00queue_flush_queue()
1022 queue->qid); in rt2x00queue_flush_queue()
1028 struct data_queue *queue; in rt2x00queue_start_queues() local
1034 tx_queue_for_each(rt2x00dev, queue) in rt2x00queue_start_queues()
1035 rt2x00queue_start_queue(queue); in rt2x00queue_start_queues()
1043 struct data_queue *queue; in rt2x00queue_stop_queues() local
1053 tx_queue_for_each(rt2x00dev, queue) in rt2x00queue_stop_queues()
1054 rt2x00queue_stop_queue(queue); in rt2x00queue_stop_queues()
1062 struct data_queue *queue; in rt2x00queue_flush_queues() local
1064 tx_queue_for_each(rt2x00dev, queue) in rt2x00queue_flush_queues()
1065 rt2x00queue_flush_queue(queue, drop); in rt2x00queue_flush_queues()
1071 static void rt2x00queue_reset(struct data_queue *queue) in rt2x00queue_reset() argument
1076 spin_lock_irqsave(&queue->index_lock, irqflags); in rt2x00queue_reset()
1078 queue->count = 0; in rt2x00queue_reset()
1079 queue->length = 0; in rt2x00queue_reset()
1082 queue->index[i] = 0; in rt2x00queue_reset()
1084 spin_unlock_irqrestore(&queue->index_lock, irqflags); in rt2x00queue_reset()
1089 struct data_queue *queue; in rt2x00queue_init_queues() local
1092 queue_for_each(rt2x00dev, queue) { in rt2x00queue_init_queues()
1093 rt2x00queue_reset(queue); in rt2x00queue_init_queues()
1095 for (i = 0; i < queue->limit; i++) in rt2x00queue_init_queues()
1096 rt2x00dev->ops->lib->clear_entry(&queue->entries[i]); in rt2x00queue_init_queues()
1100 static int rt2x00queue_alloc_entries(struct data_queue *queue) in rt2x00queue_alloc_entries() argument
1106 rt2x00queue_reset(queue); in rt2x00queue_alloc_entries()
1111 entry_size = sizeof(*entries) + queue->priv_size; in rt2x00queue_alloc_entries()
1112 entries = kcalloc(queue->limit, entry_size, GFP_KERNEL); in rt2x00queue_alloc_entries()
1120 for (i = 0; i < queue->limit; i++) { in rt2x00queue_alloc_entries()
1122 entries[i].queue = queue; in rt2x00queue_alloc_entries()
1126 QUEUE_ENTRY_PRIV_OFFSET(entries, i, queue->limit, in rt2x00queue_alloc_entries()
1127 sizeof(*entries), queue->priv_size); in rt2x00queue_alloc_entries()
1132 queue->entries = entries; in rt2x00queue_alloc_entries()
1137 static void rt2x00queue_free_skbs(struct data_queue *queue) in rt2x00queue_free_skbs() argument
1141 if (!queue->entries) in rt2x00queue_free_skbs()
1144 for (i = 0; i < queue->limit; i++) { in rt2x00queue_free_skbs()
1145 rt2x00queue_free_skb(&queue->entries[i]); in rt2x00queue_free_skbs()
1149 static int rt2x00queue_alloc_rxskbs(struct data_queue *queue) in rt2x00queue_alloc_rxskbs() argument
1154 for (i = 0; i < queue->limit; i++) { in rt2x00queue_alloc_rxskbs()
1155 skb = rt2x00queue_alloc_rxskb(&queue->entries[i], GFP_KERNEL); in rt2x00queue_alloc_rxskbs()
1158 queue->entries[i].skb = skb; in rt2x00queue_alloc_rxskbs()
1166 struct data_queue *queue; in rt2x00queue_initialize() local
1173 tx_queue_for_each(rt2x00dev, queue) { in rt2x00queue_initialize()
1174 status = rt2x00queue_alloc_entries(queue); in rt2x00queue_initialize()
1205 struct data_queue *queue; in rt2x00queue_uninitialize() local
1209 queue_for_each(rt2x00dev, queue) { in rt2x00queue_uninitialize()
1210 kfree(queue->entries); in rt2x00queue_uninitialize()
1211 queue->entries = NULL; in rt2x00queue_uninitialize()
1216 struct data_queue *queue, enum data_queue_qid qid) in rt2x00queue_init() argument
1218 mutex_init(&queue->status_lock); in rt2x00queue_init()
1219 spin_lock_init(&queue->tx_lock); in rt2x00queue_init()
1220 spin_lock_init(&queue->index_lock); in rt2x00queue_init()
1222 queue->rt2x00dev = rt2x00dev; in rt2x00queue_init()
1223 queue->qid = qid; in rt2x00queue_init()
1224 queue->txop = 0; in rt2x00queue_init()
1225 queue->aifs = 2; in rt2x00queue_init()
1226 queue->cw_min = 5; in rt2x00queue_init()
1227 queue->cw_max = 10; in rt2x00queue_init()
1229 rt2x00dev->ops->queue_init(queue); in rt2x00queue_init()
1231 queue->threshold = DIV_ROUND_UP(queue->limit, 10); in rt2x00queue_init()
1236 struct data_queue *queue; in rt2x00queue_allocate() local
1250 queue = kcalloc(rt2x00dev->data_queues, sizeof(*queue), GFP_KERNEL); in rt2x00queue_allocate()
1251 if (!queue) in rt2x00queue_allocate()
1257 rt2x00dev->rx = queue; in rt2x00queue_allocate()
1258 rt2x00dev->tx = &queue[1]; in rt2x00queue_allocate()
1259 rt2x00dev->bcn = &queue[1 + rt2x00dev->ops->tx_queues]; in rt2x00queue_allocate()
1260 rt2x00dev->atim = req_atim ? &queue[2 + rt2x00dev->ops->tx_queues] : NULL; in rt2x00queue_allocate()
1274 tx_queue_for_each(rt2x00dev, queue) in rt2x00queue_allocate()
1275 rt2x00queue_init(rt2x00dev, queue, qid++); in rt2x00queue_allocate()