Commit Graph

1688 Commits

Author SHA1 Message Date
Wolfgang Puffitsch
feb9943e84 Bluetooth: controller: Fix overflow with preferred periodicity
Avoid possibly overflowing maximum interval when calculating interval
with preferred periodicity.

Changed calculation to round down from maximum interval and reset to
maximum in case of underflowing minimum interval.

Signed-off-by: Wolfgang Puffitsch <wopu@demant.com>
2021-04-26 13:38:34 +02:00
Asger Munk Nielsen
19650299fb Bluetooth: controller: Moved sdu_interval field members
Moved sdu_interval struct members from llcp_cis to cis group,
to match spec and enable access by ULL

Signed-off-by: Asger Munk Nielsen <asmk@oticon.com>
2021-04-23 15:00:45 +02:00
Vinayak Kariappa Chettimada
a379196b48 Bluetooth: controller: nRF5: Back-to-Back Radio Tx interface
Add Radio interface to perform back-to-back transmit of PDU
with a configurable inter frame spacing.

Signed-off-by: Vinayak Kariappa Chettimada <vich@nordicsemi.no>
2021-04-22 16:00:10 +02:00
Vinayak Kariappa Chettimada
377d168c51 Bluetooth: controller: nRF53 sw_switch always required Radio End
nRF53 implementation of sw_switch always requires Radio End
event, hence optimize out redundant code due to explicit use
of radio_tmr_end_capture.

Signed-off-by: Vinayak Kariappa Chettimada <vich@nordicsemi.no>
2021-04-22 16:00:10 +02:00
Vinayak Kariappa Chettimada
0426b1dd68 Bluetooth: controller: Minor indentation and HAL code change
Minor indentation change and replaced if-then-else-if clause
with toggle implementation.

Signed-off-by: Vinayak Kariappa Chettimada <vich@nordicsemi.no>
2021-04-22 16:00:10 +02:00
Vinayak Kariappa Chettimada
72504c8a58 Bluetooth: controller: Enclose macro parameters in paranthesis
Enclose macro parameters in paranthesis to avoid ambiguous
macro expansions.

Signed-off-by: Vinayak Kariappa Chettimada <vich@nordicsemi.no>
2021-04-22 16:00:10 +02:00
Bjørn Spockeli
9c871fb0b6 Bluetooth: controller: nRF21540 FEM support for nRF52x Series
Added nRF21540 FEM support for nRF52x Series.

Signed-off-by: Bjørn Spockeli <bjorn.spockeli@nordicsemi.no>
Signed-off-by: Vinayak Kariappa Chettimada <vich@nordicsemi.no>
2021-04-21 15:04:12 +02:00
Bjørn Spockeli
9930e22322 Bluetooth: controller: Add GPIO control for nRF21540 CSN and PDN lines
Added GPIO control for nRF21540 CSN and PDN lines.

Signed-off-by: Bjørn Spockeli <bjorn.spockeli@nordicsemi.no>
Signed-off-by: Vinayak Kariappa Chettimada <vich@nordicsemi.no>
2021-04-21 15:04:12 +02:00
Bjørn Spockeli
568113c0a9 Bluetooth: controller: Add Kconfig options for nRF21540 PDN and CSN pins
Added Kconfig options for nRF21540 PDN and CSN pins.

Signed-off-by: Bjørn Spockeli <bjorn.spockeli@nordicsemi.no>
Signed-off-by: Vinayak Kariappa Chettimada <vich@nordicsemi.no>
2021-04-21 15:04:12 +02:00
Bjørn Spockeli
207b393fff Bluetooth: controller: Add PA/LNA pin range for nRF5340 SoC
Added correct SOC_NRF5340_CPUNET pin range for
BT_CTLR_GPIO_PA_PIN and BT_CTLR_GPIO_LNA_PIN.

Signed-off-by: Bjørn Spockeli <bjorn.spockeli@nordicsemi.no>
Signed-off-by: Vinayak Kariappa Chettimada <vich@nordicsemi.no>
2021-04-21 15:04:12 +02:00
Vinayak Kariappa Chettimada
35122d4be5 Bluetooth: controller: GPIO PA/LNA support for nRF53x
Ported the GPIO PA/LNA support for nRF53x by using a DPPI
channel.

Fixes #24142.

Signed-off-by: Vinayak Kariappa Chettimada <vich@nordicsemi.no>
2021-04-21 15:04:12 +02:00
Vinayak Kariappa Chettimada
0772890992 Bluetooth: controller: Adjust DPPI used for nRF53x
Adjust the PPI used by nRF53x so that DPPI 0-4 available
for application's use.

Signed-off-by: Vinayak Kariappa Chettimada <vich@nordicsemi.no>
2021-04-21 15:04:12 +02:00
Vinayak Kariappa Chettimada
41e9493ae1 Bluetooth: controller: Fix missing encryption procedure state check
Fix a missing encryption procedure state check which allowed
out of order receive of START_ENC_RSP PDU, which made the
controller to believe its already in an encryption procedure
in progress state.

Signed-off-by: Vinayak Kariappa Chettimada <vich@nordicsemi.no>
2021-04-19 10:59:01 -04:00
Vinayak Kariappa Chettimada
82925a8c99 Bluetooth: controller: Avoid sizeof to access ULL/LLL struct member
Avoid using sizeof to access ULL and LLL struct members.
Based on the alignment requirements of structures, due to
padding between structure members, use of sizeof of previous
struct member to access next struct member is incorrect.

Continue to use explicitly stored parent pointer to access
ULL context. Combine event header and ULL header so that
the parent pointer point directly to the combined ULL
struct.

Signed-off-by: Vinayak Kariappa Chettimada <vich@nordicsemi.no>
2021-04-19 10:26:38 +02:00
Vinayak Kariappa Chettimada
e395c6ce2c Bluetooth: controller: Fix uninitialized ULL reference count
Fix missing initialization of reference count in
ull_hdr_init function.

This has not caused issues so far, but when the ref member
of the struct ull_hdr if placed in the beginning of a
context that is allocated using mem_acquire function then
first few bytes used would make the ref member to have
uninitialized value when such context is allocated by
mem_acquire. First few bytes are the next pointer and free
count stored by the mem module.

The issue was discovered in subsequent commits that
restructure the ULL context structures.

Signed-off-by: Vinayak Kariappa Chettimada <vich@nordicsemi.no>
2021-04-19 10:26:38 +02:00
Vinayak Kariappa Chettimada
624e003064 Bluetooth: controller: Fix auxiliary scan context release
Fix the auxiliary scan context release to be performed in
the disabled_cb callback after the ULL reference count is
decremented.

Signed-off-by: Vinayak Kariappa Chettimada <vich@nordicsemi.no>
2021-04-19 10:26:38 +02:00
Vinayak Kariappa Chettimada
3a80785947 Bluetooth: controller: Fix connection terminate to happen on event done
Fix conn_cleanup to be performed in the event done. The
regression was introduced in
commit 5412f61ac6 ("Bluetooth: controller: Introduce
separate done memq").

Now that done event is handled asynchronously outside the
handling of the terminate node rx type, it is necessary that
terminate node rx type is generated after the done event.

Signed-off-by: Vinayak Kariappa Chettimada <vich@nordicsemi.no>
2021-04-19 10:26:38 +02:00
Wolfgang Puffitsch
13b4d441b3 Bluetooth: controller: Fix dependency of ISO TX buffer Kconfig
Synchronized Receiver does not require TX buffers.

Signed-off-by: Wolfgang Puffitsch <wopu@demant.com>
2021-04-19 10:22:59 +02:00
Wolfgang Puffitsch
88db0d4b45 Bluetooth: controller: Consolidate ISO role Kconfigs
Consolidate Kconfigs for ISO roles to make compilation guards more
concise. Just introduces aliases, does not change functionality.

Signed-off-by: Wolfgang Puffitsch <wopu@demant.com>
2021-04-19 10:22:59 +02:00
Asger Munk Nielsen
b9b1c7e19b Bluetooth: controller: ISO adaptation layer, Rx unframed
First design towards ISO adaptation layer, this PR introduces
data-structures and framework for Rx unframed PDUs (BT RX ingress).
Two callbacks are defined for the SDU production (BT RX egress), one for
SDU allocation as well as a callback for emitting a reassembled SDU.

Signed-off-by: Asger Munk Nielsen <asmk@oticon.com>
2021-04-14 18:17:09 +02:00
Vinayak Kariappa Chettimada
94cd9dd207 Bluetooth: controller: Remove unused code in auxiliary advertising
Remove unused early prototyping code experimenting with
piggyback of auxiliary PDUs.

Signed-off-by: Vinayak Kariappa Chettimada <vich@nordicsemi.no>
2021-04-13 13:02:35 -04:00
Morten Priess
07278fc98f Bluetooth: controller: Guard against race in conn. establishment
In the time between a NODE_RX_TYPE_CONNECTION node is sent from LLL and
demuxed in ULL, an ADV role disable may be executed.
This makes the LLL data referenced in the node NULL/invald, and
ull_conn_setup would operate on invalid data.

This commit introduces a check in ADV disable to disallow the operation
(including conn invalidation), if a connection has been initiated.

To prevent pipeline-queued prepares from advertising after disable has
been initiated, set 'cancelled' flag for immediate signalling to LLL.

Signed-off-by: Morten Priess <mtpr@oticon.com>
Signed-off-by: Vinayak Kariappa Chettimada <vich@nordicsemi.no>
2021-04-13 13:02:35 -04:00
Morten Priess
cc46dee7d0 Bluetooth: controller: LLL refactoring of openisa for API changes
Update openisa LLL to match common LLL changes and make CI pass.

Signed-off-by: Morten Priess <mtpr@oticon.com>
2021-04-13 12:15:12 +02:00
Morten Priess
772a77718e Bluetooth: controller: Framework for new feature BT_CTLR_JIT_SCHEDULING
This option enables BT_TICKER_SLOT_AGNOSTIC which eliminates
priorities and collision resolving in the ticker.

Event scheduling states are stored in the lll_hdr, and event priority
is passed from LLL implementation, and runtime priority calculated.

LLL implementation decides whether to program radio, start preemption
timer, and/or queue prepare in the prepare pipeline.

Event arbitration is made possible via the common LLL, but not yet
implemented in Nordic LLL.

Signed-off-by: Morten Priess <mtpr@oticon.com>
2021-04-13 12:15:12 +02:00
Morten Priess
9aaa120abd Bluetooth: controller: Clean up LLL priority
Priority in the legacy stack has been unused and "work in progress" for
some time. With this commit, the priority passing/handling is cleaned
up, preparing for the new JIT scheduling priority handling.

Signed-off-by: Morten Priess <mtpr@oticon.com>
2021-04-13 12:15:12 +02:00
Morten Priess
7dd5820920 Bluetooth: controller: Move common LLL from vendor file
Split lll_prepare and lll_resume from Nordic LLL to common file for
reuse by all vendors. The split also supports new JIT Scheduling by
defining a common place to calculate event prepare priority.

The module may also house other common parts of the LLL currently
re-implemented identically by vendors.

Signed-off-by: Morten Priess <mtpr@oticon.com>
2021-04-13 12:15:12 +02:00
Morten Priess
385f232ae2 Bluetooth: controller: Propagate ticker force to ULL
The ticker 'force' flag is propagated via the ticker elapsed callback,
in order to provide necessary information for collision resolving in the
link layer.

Signed-off-by: Morten Priess <mtpr@oticon.com>
2021-04-13 12:15:12 +02:00
Morten Priess
9f82034245 Bluetooth: controller: Introducing slot agnostic ticker
Added config BT_TICKER_SLOT_AGNOSTIC which configures the ticker in
a "slot agnostic" mode, in which no collision resolving or slot
reservation is possible or used. In this mode, the ticker acts as a
simple timer.

Signed-off-by: Morten Priess <mtpr@oticon.com>
2021-04-13 12:15:12 +02:00
Morten Priess
4277af8f55 Bluetooth: controller: Rename BT_TICKER_COMPATIBILITY_MODE
Renamed to BT_TICKER_LOW_LAT in ticker, and changed selected
conditionally compiled code to use IS_DEFINED macro.

Signed-off-by: Morten Priess <mtpr@oticon.com>
2021-04-13 12:15:12 +02:00
Vinayak Kariappa Chettimada
661991405b Bluetooth: controller: Move LLL done handling from ULL to LLL
Move the LLL done event handling from ULL to LLL, this
reduces CPU utilization and reduces overhead between radio
events.

Fixes #21993.

Signed-off-by: Vinayak Kariappa Chettimada <vich@nordicsemi.no>
2021-04-09 11:55:29 -04:00
Vinayak Kariappa Chettimada
5be2149c48 Bluetooth: controller: Defer event early abort
Defer the event early abort so that lll_done does not get
recursively invoked when called inside prepare callback.

Signed-off-by: Vinayak Kariappa Chettimada <vich@nordicsemi.no>
2021-04-09 11:55:29 -04:00
Vinayak Kariappa Chettimada
27c26eb1e7 Bluetooth: controller: Fix LLL done and pipeline enqueue race
There is a race between the pipeline enqueue by the ULL
context when processing the LLL done event, and the
pipeline queue by the ticker timeout for a new radio
event. This caused an already enqueued event prepare to be
placed after the newly arrived request to enqueue a prepare
by ticker timeout.

Fix this race by placing the new prepare in the pipeline
instead of starting the event, when ULL is still processing
the LLL done event.

As ticker timeout and ULL processing of LLL done event are
in the same ULL_HIGH context, the pipeline handling is safe
with the order of prepares maintained correctly.

Signed-off-by: Vinayak Kariappa Chettimada <vich@nordicsemi.no>
2021-04-09 11:55:29 -04:00
Vinayak Kariappa Chettimada
470e9fdd5c Bluetooth: controller: Fix minor typo in Periodic Sync PHY
Fix minor typo in Periodic Advertising Sync implementation
when PA/LNA is enabled.

Signed-off-by: Vinayak Kariappa Chettimada <vich@nordicsemi.no>
2021-04-06 13:52:14 +02:00
Vinayak Kariappa Chettimada
6ae93e62f0 Bluetooth: controller: Trivial peripheral ISO code cleanup
Trivial peripheral ISO code cleanup.

Signed-off-by: Vinayak Kariappa Chettimada <vich@nordicsemi.no>
2021-04-06 13:51:56 +02:00
Morten Priess
07d4ba5917 Bluetooth: controller: Fix ISO CI tests
Make bluetooth.init tests for nRF platform pass again by adding ULL/LLL
stub functions, and fixing minor compile issues.

Signed-off-by: Morten Priess <mtpr@oticon.com>
2021-04-06 13:51:56 +02:00
Vinayak Kariappa Chettimada
a0c255f23e Bluetooth: controller: openisa: Fix missing conditional compile
Fix missing conditional compile regression introduced by
the commit 34451a9970 ("Bluetooth: controller: Conditional
compile adv addr used by initiator").

Signed-off-by: Vinayak Kariappa Chettimada <vich@nordicsemi.no>
2021-04-06 13:51:45 +02:00
Vinayak Kariappa Chettimada
6d78016858 Bluetooth: controller: Fix event abort on delayed start
Fix the calculation of event delay when starting a radio
event. The calculation and check was incorrect causing
event abort when radio event was setup before the preempt
timeout by the lll_done when the next prepare was already
in the pipeline.

Signed-off-by: Vinayak Kariappa Chettimada <vich@nordicsemi.no>
2021-03-31 11:18:42 +02:00
Morten Priess
7a79f1a73c Bluetooth: controller: Support for multiple CISes in a CIG
When a CIS indication is received and CIG ticker is already started,
calculate the absolute time of the first subevent of the new CIS,
and validate the handle. This will allow the LLL prepare to see a new
valid CIS, and calculate the offset within the CIG event, where the new
CIS should start. This offset is then valid for all following events for
the duration of the CIS.

Signed-off-by: Morten Priess <mtpr@oticon.com>
2021-03-31 11:18:27 +02:00
Piotr Pryga
060d34d4a7 Bluetooth: controller: ULL: Fix DF build error if CTE Tx is disabled
Add missing #if defined(CONFIG_BT_CTLR_DF_ADV_CTE_TX) statements
to fix build errors of Direction Finding code when
the CONFIG_BT_CTLR_DF_ADV_CTE_TX Kconfig entry is not set.

Signed-off-by: Piotr Pryga <piotr.pryga@nordicsemi.no>
2021-03-31 11:18:13 +02:00
Piotr Pryga
b4e188653e Bluetooth: controller: Enable GPIO debug pins for nrf52833 DK
Enable possiblity to use debug pins for controller debugging
purposes with nrf52833dk_nrf52833 board.

Signed-off-by: Piotr Pryga <piotr.pryga@nordicsemi.no>
2021-03-31 11:17:58 +02:00
Rubin Gerritsen
1cd97a8a74 bluetooth: controller: radio: Fail if PPI/DPPI header not present
The hal requires one of these to be present.

Signed-off-by: Rubin Gerritsen <rubin.gerritsen@nordicsemi.no>
2021-03-31 11:15:14 +02:00
Aurora Sletnes Bjørlo
4600fadf2b bluetooth: controller: radio: Split radio_nrf5_ppi.h
Splits the file into radio_nrf5_ppi.h and radio_nrf5_dppi.h
and moves the nRF53 DPPI to radio_nrf5_dppi.h.

Signed-off-by: Aurora Sletnes Bjørlo <aurora.sletnes@nordicsemi.no>
2021-03-31 11:15:14 +02:00
Aurora Sletnes Bjørlo
dfe8d32aec bluetooth: controller: radio: Use HAL API in radio_nrf5_ppi
Rewrite to use subscribe and publish functions for the
different peripherals. This will make it possible to test
the controller in a simulator.

Signed-off-by: Aurora Sletnes Bjørlo <aurora.sletnes@nordicsemi.no>
2021-03-31 11:15:14 +02:00
Vinayak Kariappa Chettimada
ab5d8432d3 Bluetooth: controller: Fix PHY Update procedure checks
Fix PHY update procedure to check transaction violations.

Signed-off-by: Vinayak Kariappa Chettimada <vich@nordicsemi.no>
2021-03-30 19:42:46 +02:00
Vinayak Kariappa Chettimada
03fa38aa7e Bluetooth: controller: Fix ping procedure checks
Fix ping procedure to check transaction violations.

Signed-off-by: Vinayak Kariappa Chettimada <vich@nordicsemi.no>
2021-03-30 19:42:46 +02:00
Vinayak Kariappa Chettimada
f8cec621d2 Bluetooth: controller: Fix data length update procedure checks
Fix data legnth update procedure to check transaction
violations.

Signed-off-by: Vinayak Kariappa Chettimada <vich@nordicsemi.no>
2021-03-30 19:42:46 +02:00
Vinayak Kariappa Chettimada
fa95660b63 Bluetooth: controller: Fix reject extended indication checks
Fix reject extended indication PDU dispatch to check
transaction violations.

Signed-off-by: Vinayak Kariappa Chettimada <vich@nordicsemi.no>
2021-03-30 19:42:46 +02:00
Vinayak Kariappa Chettimada
ef9e429228 Bluetooth: controller: Fix unknown control PDU checks
Fix unknown control procedure handling to check transaction
violations.

Signed-off-by: Vinayak Kariappa Chettimada <vich@nordicsemi.no>
2021-03-30 19:42:46 +02:00
Vinayak Kariappa Chettimada
9cb8b0af89 Bluetooth: controller: Fix Feature Exchange checks
Fix Feature Exchange procedure to check transaction
violations.

Signed-off-by: Vinayak Kariappa Chettimada <vich@nordicsemi.no>
2021-03-30 19:42:46 +02:00
Vinayak Kariappa Chettimada
fb5b5b7069 Bluetooth: controller: Add control procedure lock
Add control procedure lock flag to detection procedure
transaction violations.

Signed-off-by: Vinayak Kariappa Chettimada <vich@nordicsemi.no>
2021-03-30 19:42:46 +02:00