bluetooth: controller: Added function to support RX link quota update
Added ll_rx_link_inc_quota to allow vendor to manipulate
mem_link_rx.quota_pdu when cleaning up nodes via ull_vendor.h.
Signed-off-by: Morten Priess <mtpr@oticon.com>
diff --git a/subsys/bluetooth/controller/ll_sw/ull.c b/subsys/bluetooth/controller/ll_sw/ull.c
index 18b7fd1..faa272a 100644
--- a/subsys/bluetooth/controller/ll_sw/ull.c
+++ b/subsys/bluetooth/controller/ll_sw/ull.c
@@ -211,6 +211,7 @@
static inline int rx_demux_rx(memq_link_t *link, struct node_rx_hdr *rx);
static inline void rx_demux_event_done(memq_link_t *link,
struct node_rx_hdr *rx);
+static inline void ll_rx_link_inc_quota(int8_t delta);
static void disabled_cb(void *param);
#if defined(CONFIG_BT_CONN)
@@ -431,8 +432,7 @@
&memq_ll_rx.head, NULL);
mem_release(link, &mem_link_rx.free);
- LL_ASSERT(mem_link_rx.quota_pdu < RX_CNT);
- mem_link_rx.quota_pdu++;
+ ll_rx_link_inc_quota(1);
mem_release(rx, &mem_pdu_rx.free);
@@ -556,9 +556,7 @@
* since prio_recv_thread() peeked in memq_ll_rx via
* ll_rx_get() before.
*/
- LL_ASSERT(mem_link_rx.quota_pdu < RX_CNT);
-
- mem_link_rx.quota_pdu++;
+ ll_rx_link_inc_quota(1);
break;
#endif /* CONFIG_BT_OBSERVER ||
* CONFIG_BT_CTLR_SCAN_REQ_NOTIFY ||
@@ -820,6 +818,12 @@
rx_alloc(UINT8_MAX);
}
+static inline void ll_rx_link_inc_quota(int8_t delta)
+{
+ LL_ASSERT(delta <= 0 || mem_link_rx.quota_pdu < RX_CNT);
+ mem_link_rx.quota_pdu += delta;
+}
+
void *ll_rx_link_alloc(void)
{
return mem_acquire(&mem_link_rx.free);
@@ -1263,7 +1267,7 @@
MFIFO_BY_IDX_ENQUEUE(ll_pdu_rx_free, idx, rx);
- mem_link_rx.quota_pdu--;
+ ll_rx_link_inc_quota(-1);
}
#endif /* CONFIG_BT_CONN */
@@ -1290,7 +1294,7 @@
MFIFO_BY_IDX_ENQUEUE(pdu_rx_free, idx, rx);
- mem_link_rx.quota_pdu--;
+ ll_rx_link_inc_quota(-1);
}
}