5151
5252static int init_reset (void );
5353
54- static struct pdu_adv * adv_pdu_allocate (struct lll_adv_pdu * pdu , uint8_t last );
5554#if defined(CONFIG_BT_CTLR_ADV_EXT_PDU_EXTRA_DATA_MEMORY )
5655static inline void adv_extra_data_release (struct lll_adv_pdu * pdu , int idx );
5756static void * adv_extra_data_allocate (struct lll_adv_pdu * pdu , uint8_t last );
@@ -257,6 +256,7 @@ int lll_adv_data_release(struct lll_adv_pdu *pdu)
257256struct pdu_adv * lll_adv_pdu_alloc (struct lll_adv_pdu * pdu , uint8_t * idx )
258257{
259258 uint8_t first , last ;
259+ void * p ;
260260
261261 first = pdu -> first ;
262262 last = pdu -> last ;
@@ -281,7 +281,45 @@ struct pdu_adv *lll_adv_pdu_alloc(struct lll_adv_pdu *pdu, uint8_t *idx)
281281
282282 * idx = last ;
283283
284- return adv_pdu_allocate (pdu , last );
284+ p = (void * )pdu -> pdu [last ];
285+ if (p ) {
286+ return p ;
287+ }
288+
289+ p = lll_adv_pdu_alloc_pdu_adv ();
290+
291+ pdu -> pdu [last ] = (void * )p ;
292+
293+ return p ;
294+ }
295+
296+ struct pdu_adv * lll_adv_pdu_alloc_pdu_adv (void )
297+ {
298+ struct pdu_adv * p ;
299+ int err ;
300+
301+ p = MFIFO_DEQUEUE_PEEK (pdu_free );
302+ if (p ) {
303+ err = k_sem_take (& sem_pdu_free , K_NO_WAIT );
304+ LL_ASSERT (!err );
305+
306+ MFIFO_DEQUEUE (pdu_free );
307+
308+ return p ;
309+ }
310+
311+ p = mem_acquire (& mem_pdu .free );
312+ if (p ) {
313+ return p ;
314+ }
315+
316+ err = k_sem_take (& sem_pdu_free , K_FOREVER );
317+ LL_ASSERT (!err );
318+
319+ p = MFIFO_DEQUEUE (pdu_free );
320+ LL_ASSERT (p );
321+
322+ return p ;
285323}
286324
287325struct pdu_adv * lll_adv_pdu_latest_get (struct lll_adv_pdu * pdu ,
@@ -607,49 +645,6 @@ static int init_reset(void)
607645 return 0 ;
608646}
609647
610- static struct pdu_adv * adv_pdu_allocate (struct lll_adv_pdu * pdu , uint8_t last )
611- {
612- void * p ;
613- int err ;
614-
615- p = (void * )pdu -> pdu [last ];
616- if (p ) {
617- return p ;
618- }
619-
620- p = MFIFO_DEQUEUE_PEEK (pdu_free );
621- if (p ) {
622- err = k_sem_take (& sem_pdu_free , K_NO_WAIT );
623- LL_ASSERT (!err );
624-
625- MFIFO_DEQUEUE (pdu_free );
626- pdu -> pdu [last ] = (void * )p ;
627-
628- return p ;
629- }
630-
631- p = mem_acquire (& mem_pdu .free );
632- if (p ) {
633- pdu -> pdu [last ] = (void * )p ;
634-
635- return p ;
636- }
637-
638- err = k_sem_take (& sem_pdu_free , K_FOREVER );
639- LL_ASSERT (!err );
640-
641- p = MFIFO_DEQUEUE (pdu_free );
642- LL_ASSERT (p );
643- /* If !p then check initial value of sem_pdu_free. It must be the same
644- * as number of elements in pdu_free store. This may not happen in
645- * runtime.
646- */
647-
648- pdu -> pdu [last ] = (void * )p ;
649-
650- return p ;
651- }
652-
653648#if defined(CONFIG_BT_CTLR_ADV_EXT_PDU_EXTRA_DATA_MEMORY )
654649static void * adv_extra_data_allocate (struct lll_adv_pdu * pdu , uint8_t last )
655650{
0 commit comments