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
|
help
|
||||||
Maximum supported periodic advertising sets.
|
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
|
config BT_CTRL_ADV_ADI_IN_SCAN_RSP
|
||||||
bool "Include ADI in AUX_SCAN_RSP PDU"
|
bool "Include ADI in AUX_SCAN_RSP PDU"
|
||||||
depends on BT_BROADCASTER && BT_CTLR_ADV_EXT
|
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);
|
struct pdu_adv *ci);
|
||||||
|
|
||||||
#if defined(CONFIG_BT_CTLR_ADV_EXT)
|
#if defined(CONFIG_BT_CTLR_ADV_EXT)
|
||||||
#define PAYLOAD_SIZE_MAX MAX(MIN(CONFIG_BT_CTLR_ADV_DATA_LEN_MAX, \
|
#define PAYLOAD_FRAG_COUNT ((CONFIG_BT_CTLR_ADV_DATA_LEN_MAX + \
|
||||||
PDU_AC_EXT_PAYLOAD_SIZE_MAX), \
|
PDU_AC_PAYLOAD_SIZE_MAX - 1) / \
|
||||||
PDU_AC_PAYLOAD_SIZE_MAX)
|
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
|
#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
|
#endif
|
||||||
|
|
||||||
#define PDU_MEM_SIZE MROUND(PDU_AC_LL_HEADER_SIZE + PAYLOAD_SIZE_MAX)
|
#define PDU_MEM_SIZE MROUND(PDU_AC_LL_HEADER_SIZE + \
|
||||||
#define PDU_POOL_SIZE (PDU_MEM_SIZE * 7)
|
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 {
|
static struct {
|
||||||
void *free;
|
void *free;
|
||||||
uint8_t pool[PDU_POOL_SIZE];
|
uint8_t pool[PDU_POOL_SIZE];
|
||||||
|
|
|
@ -4,6 +4,12 @@
|
||||||
* SPDX-License-Identifier: Apache-2.0
|
* 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 {
|
struct lll_adv_pdu {
|
||||||
uint8_t volatile first;
|
uint8_t volatile first;
|
||||||
uint8_t last;
|
uint8_t last;
|
||||||
|
|
|
@ -34,7 +34,7 @@
|
||||||
#define BYTES2US(bytes, phy) (((bytes)<<3)/BIT((phy&0x3)>>1))
|
#define BYTES2US(bytes, phy) (((bytes)<<3)/BIT((phy&0x3)>>1))
|
||||||
|
|
||||||
/* Advertisement channel maximum legacy payload size */
|
/* 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 */
|
/* Advertisement channel maximum extended payload size */
|
||||||
#define PDU_AC_EXT_PAYLOAD_SIZE_MAX 251
|
#define PDU_AC_EXT_PAYLOAD_SIZE_MAX 251
|
||||||
/* Advertisement channel minimum extended payload size */
|
/* Advertisement channel minimum extended payload size */
|
||||||
|
@ -48,6 +48,14 @@
|
||||||
sizeof(struct pdu_adv_sync_info) + \
|
sizeof(struct pdu_adv_sync_info) + \
|
||||||
TX_PWR_SIZE + \
|
TX_PWR_SIZE + \
|
||||||
ACAD_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 */
|
/* Link Layer header size of Adv PDU. Assumes pdu_adv is packed */
|
||||||
#define PDU_AC_LL_HEADER_SIZE (offsetof(struct pdu_adv, payload))
|
#define PDU_AC_LL_HEADER_SIZE (offsetof(struct pdu_adv, payload))
|
||||||
|
|
|
@ -9,12 +9,6 @@
|
||||||
/* Bitmask value returned by ull_adv_is_enabled() */
|
/* Bitmask value returned by ull_adv_is_enabled() */
|
||||||
#define ULL_ADV_ENABLED_BITMASK_ENABLED BIT(0)
|
#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 */
|
/* Helper functions to initialise and reset ull_adv module */
|
||||||
int ull_adv_init(void);
|
int ull_adv_init(void);
|
||||||
int ull_adv_reset(void);
|
int ull_adv_reset(void);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue