usb_buf: count number of elements in queue
This is in preparation for limiting the maximum queue length
Change-Id: I7cb184d7a1ccb519010a2f3e3295cc3a5fbf8052
Related: OS#4251
diff --git a/firmware/libcommon/source/card_emu.c b/firmware/libcommon/source/card_emu.c
index 923226a..f95f5d1 100644
--- a/firmware/libcommon/source/card_emu.c
+++ b/firmware/libcommon/source/card_emu.c
@@ -260,18 +260,18 @@
while (!msg) {
msg = usb_buf_alloc(ep); // try to allocate some memory
if (!msg) { // allocation failed, we might be out of memory
- struct llist_head *queue = usb_get_queue(ep);
- if (!queue) {
+ struct usb_buffered_ep *bep = usb_get_buf_ep(ep);
+ if (!bep) {
TRACE_ERROR("ep %u: %s queue does not exist\n\r",
ep, __func__);
return NULL;
}
- if (llist_empty(queue)) {
+ if (llist_empty(&bep->queue)) {
TRACE_ERROR("ep %u: %s EOMEM (queue already empty)\n\r",
ep, __func__);
return NULL;
}
- msg = msgb_dequeue(queue);
+ msg = msgb_dequeue_count(&bep->queue, &bep->queue_len);
if (!msg) {
TRACE_ERROR("ep %u: %s no msg in non-empty queue\n\r",
ep, __func__);
diff --git a/firmware/libcommon/source/host_communication.c b/firmware/libcommon/source/host_communication.c
index 1e15ada..0e496c5 100644
--- a/firmware/libcommon/source/host_communication.c
+++ b/firmware/libcommon/source/host_communication.c
@@ -76,7 +76,7 @@
bep->in_progress++;
- msg = msgb_dequeue(&bep->queue);
+ msg = msgb_dequeue_count(&bep->queue, &bep->queue_len);
local_irq_restore(x);
@@ -180,7 +180,7 @@
}
/* free all queued msgbs */
- while ((msg = msgb_dequeue(&bep->queue))) {
+ while ((msg = msgb_dequeue_count(&bep->queue, &bep->queue_len))) {
usb_buf_free(msg);
ret++;
}
diff --git a/firmware/libcommon/source/usb_buf.c b/firmware/libcommon/source/usb_buf.c
index 418569e..8ad5a0e 100644
--- a/firmware/libcommon/source/usb_buf.c
+++ b/firmware/libcommon/source/usb_buf.c
@@ -78,7 +78,7 @@
/* no need for irqsafe operation, as the usb_tx_queue is
* processed only by the main loop context */
- msgb_enqueue(&ep->queue, msg);
+ msgb_enqueue_count(&ep->queue, msg, &ep->queue_len);
return 0;
}