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>
This commit is contained in:
Morten Priess 2019-08-16 15:40:31 +02:00 committed by Carles Cufí
commit d62ad4117c

View file

@ -211,6 +211,7 @@ static void rx_demux(void *param);
static inline int rx_demux_rx(memq_link_t *link, struct node_rx_hdr *rx); 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, static inline void rx_demux_event_done(memq_link_t *link,
struct node_rx_hdr *rx); struct node_rx_hdr *rx);
static inline void ll_rx_link_inc_quota(int8_t delta);
static void disabled_cb(void *param); static void disabled_cb(void *param);
#if defined(CONFIG_BT_CONN) #if defined(CONFIG_BT_CONN)
@ -431,8 +432,7 @@ ll_rx_get_again:
&memq_ll_rx.head, NULL); &memq_ll_rx.head, NULL);
mem_release(link, &mem_link_rx.free); mem_release(link, &mem_link_rx.free);
LL_ASSERT(mem_link_rx.quota_pdu < RX_CNT); ll_rx_link_inc_quota(1);
mem_link_rx.quota_pdu++;
mem_release(rx, &mem_pdu_rx.free); mem_release(rx, &mem_pdu_rx.free);
@ -556,9 +556,7 @@ void ll_rx_dequeue(void)
* since prio_recv_thread() peeked in memq_ll_rx via * since prio_recv_thread() peeked in memq_ll_rx via
* ll_rx_get() before. * ll_rx_get() before.
*/ */
LL_ASSERT(mem_link_rx.quota_pdu < RX_CNT); ll_rx_link_inc_quota(1);
mem_link_rx.quota_pdu++;
break; break;
#endif /* CONFIG_BT_OBSERVER || #endif /* CONFIG_BT_OBSERVER ||
* CONFIG_BT_CTLR_SCAN_REQ_NOTIFY || * CONFIG_BT_CTLR_SCAN_REQ_NOTIFY ||
@ -820,6 +818,12 @@ void ll_rx_mem_release(void **node_rx)
rx_alloc(UINT8_MAX); 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) void *ll_rx_link_alloc(void)
{ {
return mem_acquire(&mem_link_rx.free); return mem_acquire(&mem_link_rx.free);
@ -1263,7 +1267,7 @@ static inline void rx_alloc(u8_t max)
MFIFO_BY_IDX_ENQUEUE(ll_pdu_rx_free, idx, rx); 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 */ #endif /* CONFIG_BT_CONN */
@ -1290,7 +1294,7 @@ static inline void rx_alloc(u8_t max)
MFIFO_BY_IDX_ENQUEUE(pdu_rx_free, idx, rx); MFIFO_BY_IDX_ENQUEUE(pdu_rx_free, idx, rx);
mem_link_rx.quota_pdu--; ll_rx_link_inc_quota(-1);
} }
} }