Bluetooth: controller: Add Max. AD data buffers Kconfig option
Add Kconfig option to configure maximum number of buffered AD data PDUs across enabled advertising sets. Signed-off-by: Vinayak Kariappa Chettimada <vich@nordicsemi.no>
This commit is contained in:
parent
c2fc629dd2
commit
2be0d07543
5 changed files with 49 additions and 13 deletions
|
@ -157,6 +157,16 @@ config BT_CTLR_ADV_SYNC_SET
|
|||
help
|
||||
Maximum supported periodic advertising sets.
|
||||
|
||||
config BT_CTLR_ADV_DATA_BUF_MAX
|
||||
int "Advertising Data Maximum Buffers"
|
||||
depends on BT_BROADCASTER
|
||||
range 1 64 if BT_CTLR_ADV_EXT
|
||||
range 1 1 if !BT_CTLR_ADV_EXT
|
||||
default 1
|
||||
help
|
||||
Maximum number of buffered Advertising Data payload across enabled
|
||||
advertising sets.
|
||||
|
||||
config BT_CTRL_ADV_ADI_IN_SCAN_RSP
|
||||
bool "Include ADI in AUX_SCAN_RSP PDU"
|
||||
depends on BT_BROADCASTER && BT_CTLR_ADV_EXT
|
||||
|
|
|
@ -73,16 +73,34 @@ static inline bool isr_rx_ci_adva_check(struct pdu_adv *adv,
|
|||
struct pdu_adv *ci);
|
||||
|
||||
#if defined(CONFIG_BT_CTLR_ADV_EXT)
|
||||
#define PAYLOAD_SIZE_MAX MAX(MIN(CONFIG_BT_CTLR_ADV_DATA_LEN_MAX, \
|
||||
PDU_AC_EXT_PAYLOAD_SIZE_MAX), \
|
||||
PDU_AC_PAYLOAD_SIZE_MAX)
|
||||
#define PAYLOAD_FRAG_COUNT ((CONFIG_BT_CTLR_ADV_DATA_LEN_MAX + \
|
||||
PDU_AC_PAYLOAD_SIZE_MAX - 1) / \
|
||||
PDU_AC_PAYLOAD_SIZE_MAX)
|
||||
#define BT_CTLR_ADV_AUX_SET CONFIG_BT_CTLR_ADV_AUX_SET
|
||||
#if defined(CONFIG_BT_CTLR_ADV_PERIODIC)
|
||||
#define BT_CTLR_ADV_SYNC_SET CONFIG_BT_CTLR_ADV_SYNC_SET
|
||||
#else /* !CONFIG_BT_CTLR_ADV_PERIODIC */
|
||||
#define BT_CTLR_ADV_SYNC_SET 0
|
||||
#endif /* !CONFIG_BT_CTLR_ADV_PERIODIC */
|
||||
#else
|
||||
#define PAYLOAD_SIZE_MAX PDU_AC_PAYLOAD_SIZE_MAX
|
||||
#define PAYLOAD_FRAG_COUNT 1
|
||||
#define BT_CTLR_ADV_AUX_SET 0
|
||||
#define BT_CTLR_ADV_SYNC_SET 0
|
||||
#endif
|
||||
|
||||
#define PDU_MEM_SIZE MROUND(PDU_AC_LL_HEADER_SIZE + PAYLOAD_SIZE_MAX)
|
||||
#define PDU_POOL_SIZE (PDU_MEM_SIZE * 7)
|
||||
#define PDU_MEM_SIZE MROUND(PDU_AC_LL_HEADER_SIZE + \
|
||||
PDU_AC_PAYLOAD_SIZE_MAX)
|
||||
#define PDU_MEM_COUNT_MIN (BT_CTLR_ADV_SET + \
|
||||
(BT_CTLR_ADV_SET * PAYLOAD_FRAG_COUNT) + \
|
||||
(BT_CTLR_ADV_AUX_SET * PAYLOAD_FRAG_COUNT) + \
|
||||
(BT_CTLR_ADV_SYNC_SET * PAYLOAD_FRAG_COUNT))
|
||||
#define PDU_MEM_FIFO_COUNT ((BT_CTLR_ADV_SET * PAYLOAD_FRAG_COUNT * 2) + \
|
||||
(CONFIG_BT_CTLR_ADV_DATA_BUF_MAX * \
|
||||
PAYLOAD_FRAG_COUNT))
|
||||
#define PDU_MEM_COUNT (PDU_MEM_COUNT_MIN + PDU_MEM_FIFO_COUNT)
|
||||
#define PDU_POOL_SIZE (PDU_MEM_SIZE * PDU_MEM_COUNT)
|
||||
|
||||
/* Free AD data PDU buffer pool */
|
||||
static struct {
|
||||
void *free;
|
||||
uint8_t pool[PDU_POOL_SIZE];
|
||||
|
|
|
@ -4,6 +4,12 @@
|
|||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
|
||||
#if defined(CONFIG_BT_CTLR_ADV_SET)
|
||||
#define BT_CTLR_ADV_SET CONFIG_BT_CTLR_ADV_SET
|
||||
#else /* CONFIG_BT_CTLR_ADV_SET */
|
||||
#define BT_CTLR_ADV_SET 1
|
||||
#endif /* CONFIG_BT_CTLR_ADV_SET */
|
||||
|
||||
struct lll_adv_pdu {
|
||||
uint8_t volatile first;
|
||||
uint8_t last;
|
||||
|
|
|
@ -34,7 +34,7 @@
|
|||
#define BYTES2US(bytes, phy) (((bytes)<<3)/BIT((phy&0x3)>>1))
|
||||
|
||||
/* Advertisement channel maximum legacy payload size */
|
||||
#define PDU_AC_PAYLOAD_SIZE_MAX 37
|
||||
#define PDU_AC_LEG_PAYLOAD_SIZE_MAX 37
|
||||
/* Advertisement channel maximum extended payload size */
|
||||
#define PDU_AC_EXT_PAYLOAD_SIZE_MAX 251
|
||||
/* Advertisement channel minimum extended payload size */
|
||||
|
@ -48,6 +48,14 @@
|
|||
sizeof(struct pdu_adv_sync_info) + \
|
||||
TX_PWR_SIZE + \
|
||||
ACAD_SIZE)
|
||||
/* Advertisement channel maximum payload size */
|
||||
#if defined(CONFIG_BT_CTLR_ADV_EXT)
|
||||
#define PDU_AC_PAYLOAD_SIZE_MAX MAX(MIN(CONFIG_BT_CTLR_ADV_DATA_LEN_MAX, \
|
||||
PDU_AC_EXT_PAYLOAD_SIZE_MAX), \
|
||||
PDU_AC_LEG_PAYLOAD_SIZE_MAX)
|
||||
#else
|
||||
#define PDU_AC_PAYLOAD_SIZE_MAX PDU_AC_LEG_PAYLOAD_SIZE_MAX
|
||||
#endif
|
||||
|
||||
/* Link Layer header size of Adv PDU. Assumes pdu_adv is packed */
|
||||
#define PDU_AC_LL_HEADER_SIZE (offsetof(struct pdu_adv, payload))
|
||||
|
|
|
@ -9,12 +9,6 @@
|
|||
/* Bitmask value returned by ull_adv_is_enabled() */
|
||||
#define ULL_ADV_ENABLED_BITMASK_ENABLED BIT(0)
|
||||
|
||||
#if defined(CONFIG_BT_CTLR_ADV_SET)
|
||||
#define BT_CTLR_ADV_SET CONFIG_BT_CTLR_ADV_SET
|
||||
#else /* CONFIG_BT_CTLR_ADV_SET */
|
||||
#define BT_CTLR_ADV_SET 1
|
||||
#endif /* CONFIG_BT_CTLR_ADV_SET */
|
||||
|
||||
/* Helper functions to initialise and reset ull_adv module */
|
||||
int ull_adv_init(void);
|
||||
int ull_adv_reset(void);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue