In some cases UART drivers might have too high init priorities
so HCI must be initialized even later if used with those.
One example is zephyr,native-tty-uart.
Signed-off-by: Dmitrii Sharshakov <d3dx12.xx@gmail.com>
Fix radio IRQ priorities. With the Controller update from SiSDK,
its behavior changed so that it overwrites the IRQ priorities.
Reconfigure the priorities after the Controller is initialized.
Source interrupt numbers and priorities from devicetree.
Also set the SYNTH IRQ priority on all HW, and set either the
RDMAILBOX or HOSTMAILBOX IRQ depending on which one exists.
Signed-off-by: Jori Rintahaka <jori.rintahaka@silabs.com>
Signed-off-by: Aksel Skauge Mellbye <aksel.mellbye@silabs.com>
Refactor the controller init to use the new init routines the
controller now provides. Instead of using a hardcoded set of
features, the features are now initialized based on Kconfig
values that the application selects.
Add config files under modules/hal_silabs, used by the controller
init routines in the external module hal_silabs to determine which
features to enable based on Kconfig options. This brings the
controller feature configurability to roughly parity with the
Simplicity SDK.
Signed-off-by: Jori Rintahaka <jori.rintahaka@silabs.com>
Signed-off-by: Aksel Skauge Mellbye <aksel.mellbye@silabs.com>
- Add support for default Annex-55 Bluetooth calibration data load
for both IW612 and IW416 SoC.
- Add support for default Annex-100 Bluetooth calibration data load
for both IW612 and IW416 SoC.
Signed-off-by: Nirav Agrawal <nirav.agrawal@nxp.com>
Call entropy APIs to use TRNG peripheral on STM32WB0x devices for BLE
purposes.
Enable RNG node on Nucleo-WB0x boards.
Remove RNG initialization as it's done in the entropy driver.
Signed-off-by: Ali Hozhabri <ali.hozhabri@st.com>
The CYW43xxx for Infineon Controllers stops after the first LauncRAM
command. Newer Controllers like the CYW5557x update the firmware in
multiple stages, which is supported by this commit.
Signed-off-by: Matthias Ringwald <matthias@ringwald.ch>
Newer AIROC controllers like the CYW55573 don't support changing the
baudrate in Download Mode. However, a higher baud rate can be used
directly to sent HCI Reset.
This commit adds the KConfig flag CONFIG_AIROC_DOWNLOAD_MODE to enable
the new behaviour.
Signed-off-by: Matthias Ringwald <matthias@ringwald.ch>
In case of extended advertising, advertising data can be reported in
parts, so we shouldn't discard them.
Instead, only discard the legacy advertising reports.
Signed-off-by: Axel Le Bourhis <axel.lebourhis@nxp.com>
There is an issue that the buffer cannot be allocated by the function
`read_payload()` in UART ISR context. Then the UART RX will be
disabled. The H4 driver hopes to get the receive buffer in the HCI RX
thread and then open the UART RX again. However, there is a situation
where the HCI RX thread is blocked in getting the received data
buffer. However, since the UARt RX has been disabled, the HCI RX
thread cannot get the received data buffer. Therefore, the RX thread
is always blocked here, causing the Bluetooth host to not work
properly.
Add a semaphore `rx.ready` to notify new received data buffer has
been added to H4 RX queue.
Wait for the semaphore `rx.ready` instead of H4 RX queue in HCI RX
thread.
Wake up the HCI RX thread when failing to allocate the RX buffer.
Fixes#89879.
Signed-off-by: Lyle Zhu <lyle.zhu@nxp.com>
Update all HCI drivers to use the new H:4 encoding for buffers passing
to/from drivers.
One behavioral change that's done in favor of simplicity, is that where
there's previously been switch statements that could return an error for
unsupported packet types now simply pass any received packet unchanged to
lower layers of the controller (or the HCI transport). Handling this is
now the responsibility of the lower layers, however in practice hitting
such scenarios means that there's a mismatch between configured host and
controller features.
Signed-off-by: Johan Hedberg <johan.hedberg@silabs.com>
Added IW416 SoC support to enable Bluetooth HCI driver perform
firmware load, and works with blueooth HCI interface.
Removed cmake file from bt_controller/, added support in hal_nxp
module to fetch firmware blobs for iW416/nw612 BT Only FW.
Signed-off-by: Nirav Agrawal <nirav.agrawal@nxp.com>
Even though through code-inspection there isn't a clear path where the
guard wouldn't act upon the length reaching the limit, this check is
moved up to unconditially validate it on every read.
Fixes#84731.
Signed-off-by: Luis Ubieda <luisf@croxel.com>
Add a timeout to the SPI boot process to ensure that `bt_enable` does
not block forever but instead returns an error after an appropriately
large delay. While 1 second would be sufficient under normal operation,
we also want to give the controller time to perform any application
upgrades via a bootloader.
Signed-off-by: Jordan Yates <jordan@embeint.com>
Sending an HCI message requires to wake up the controller
core if it's asleep. Platform controllers may send responses using
non wakeable interrupts and those can be lost during standby usage.
Blocking standby usage until the HCI message is sent.
Signed-off-by: Yassine El Aissaoui <yassine.elaissaoui@nxp.com>
There are cases where reset_rx() is called when rx.buf is set (e.g. when
the buffer was too small to receive the incoming packet). Be sure to free
the buffer, so that it wont get reused for the next packet (which might
require a buffer from a different pool).
Signed-off-by: Johan Hedberg <johan.hedberg@silabs.com>
- added flag in nxp setup driver to perform HCI controller firmware-
load and configuration only once. This avoid loading/setting-up
controller fw on successive bt_init() after bt_disable() call.
Signed-off-by: Nirav Agrawal <nirav.agrawal@nxp.com>
- added HCI command to send hci-reset in bt_disable() func, and
remove its call from the driver close() call.
- remove rsp buf pass to 'hci_reset_complete()' func as status is
already checked under 'bt_hci_cmd_send_sync()'.
Signed-off-by: Nirav Agrawal <nirav.agrawal@nxp.com>
Add a choice `BT_NXP_MODULE` to make sure only one controller can be
selected if the multiple controllers are supported.
All NXP Bluetooth module similar with BT_NXP_NW612 should be added
to the section.
And set the BT_NXP_NW612 as the default controller.
Signed-off-by: Lyle Zhu <lyle.zhu@nxp.com>
native_posix has been removed, so let's remove its support from
kconfig for this driver.
Also let's replace its mention in the help message.
Signed-off-by: Alberto Escolar Piedras <alberto.escolar.piedras@nordicsemi.no>
The HCI IPC endpoint bound timeout value was hardcoded and set
to 1000 ms. This value may be differ between platforms, for
exampel due to extended boot time.
The default value used was a bit short for multicore SoCs
that usually may wait for some other service reposnes for
similar time. That may lead to timeout error while other
end of an endpoint was slightly late. Change the default
duration to 2000 ms to give more room for possible delays.
Signed-off-by: Piotr Pryga <piotr.pryga@nordicsemi.no>
Refactor the userchan driver into a top and a bottom part.
The bottom is the one which interacts with the host and is built
with the host libC, while the top is built with the embedded code
and whatever libC that is built with.
Errors (errno) is converted between the top and bottom to ensure they
are coherent with the local libC.
Signed-off-by: Alberto Escolar Piedras <alberto.escolar.piedras@nordicsemi.no>
The HCI IPC driver is not reliable and can lead to lost ACL data if
built without Controller-to-Host ACL flow control.
This commit prevents building HCI IPC driver and hci_ipc sample without
CONFIG_BT_HCI_ACL_FLOW_CONTROL.
Signed-off-by: Pavel Vasilyev <pavel.vasilyev@nordicsemi.no>
remove the power off BLE controller function since the hci_reset cmd
is enough, also for wifi-ble coex scenario, need to maintain BLE controller
for some info in SMU region
Signed-off-by: Ying Zhang <ying.zhang_2@nxp.com>
Inside the hci driver API in h4.c, there were no
API function allowing to close the bluetooth
interface, as there were close function defined
for other bluetooth hci driver.
The function disables Bluetooth reception and
sending, and calls a weak function allowing
to implement user specific behaviors
while shutting down bluetooth interface
Signed-off-by: FILLIOT Louis <l.filliot@lacroix.group>
Add HCI IPC retry handling in case of full IPC
queue. This mechanism improves reliability.
The ipc_service_send can return -ENOMEM in case
of full queue. If this happens the retries are
executed in order to wait for queue to empty
and not drop messages.
If the retry mechanism reaches maximum then
the error code is passed back to the host.
The change should improve the handling of
passing messages to full ipc and reduce
dropping of packets.
Signed-off-by: Dominik Chat <dominik.chat@nordicsemi.no>
Added CONFIG_AMBIQ_COMPONENT_USE_BT and CONFIG_SOC_AMBIQ_BT_SUPPORTED
to fix empty zephyr_library() warning when BLE is not needed for compile.
Added CMake message if BT related Ambiq specific Kconfig is overriden for
not supported SoC.
Signed-off-by: Swift Tian <swift.tian@ambiq.com>
Add logging of the values that cause LOG_ERR statements.
This makes it easier to debug any issues that occur.
Signed-off-by: Emil Gydesen <emil.gydesen@nordicsemi.no>
As the previous version of the MCXW71 BLE Controller wasn't sending a
command complete event after setting the BD address, we used a
workaround to directly send the HCI command without using zephyr's API.
Now, on the latest version of MCXW72 and MCXW71, this issue is fixed,
so we need to use `bt_hci_cmd_send_sync` to properly expect the
command complete event.
Signed-off-by: Axel Le Bourhis <axel.lebourhis@nxp.com>
When allocation fails in `hci_rx_cb`, we should return immediately
instead of continuing the execution of the function.
Also, we need to free the allocated buffer from the heap when sending
to the message queue fails to avoid memory leak.
Signed-off-by: Axel Le Bourhis <axel.lebourhis@nxp.com>
The SiWx917 BLE controller currently does not support
HCI Command 0x0C35 i.e. Host Number of Completed Packets Command
Disabling the ACL Flow Control avoids sending this command during
SMP Pairing process and therefore avoiding an ASSERT
Signed-off-by: Ramana Gudipudi <ragudipu@silabs.com>
Added new Kconfig option set that allows the user to control the
presence of the following optional characteristics:
- Manufacturer Name String
- Model Number String
Depreacted the old configuration that can be deleted in the future
Zephyr releases.
Signed-off-by: Kamil Piszczek <Kamil.Piszczek@nordicsemi.no>
Honor Kconfig option `BT_CTLR_TX_PWR_ANTENNA` for limiting the maximum TX
power. The default value for this option is 0 dBm, which means that after
this change the actual TX power is likely lower than before, unless
increased by this option.
Signed-off-by: Kalle Kietäväinen <kalle.kietavainen@silabs.com>
The BLE acronym is not an official description of Bluetooth
LE, and the Bluetooth SIG only ever refers to it as Bluetooth
Low Energy or Bluetooth LE, so Zephyr should as well.
This commit does not change any board or vendor specific
documentation, and the term BLE may still be used in those.
It will be up to the vendors to update it if they want,
since many of them are using the term BLE in their
products.
Signed-off-by: Emil Gydesen <emil.gydesen@nordicsemi.no>
Driver was tested with a custom application which enabled the BT_SHELL.
Basic functionalities were verified:
- Scanning
- Advertising
- Connecting
Configuration needed for the test:
- CONFIG_BT=y
- CONFIG_BT_PERIPHERAL=y
- CONFIG_BT_CENTRAL=y
- CONFIG_BT_SHELL=y
- CONFIG_SHELL=y
Co-authored-by: Tibor Laczko <tibor.laczko@silabs.com>
Signed-off-by: Tibor Laczko <tibor.laczko@silabs.com>
Signed-off-by: Jérôme Pouiller <jerome.pouiller@silabs.com>
Remove ESP heap from the sources. System heap is default heap.
Use heap adapter layer to configure used heap.
Use MEM_POOL memory request config to Wi-Fi and Bluetooth drivers.
Update the Wi-Fi and BLE memory needs.
Signed-off-by: Marek Matej <marek.matej@espressif.com>
Add a Kconfig option which can be used to enable vendor HCI extensions for
Silicon Labs EFR32 devices.
Signed-off-by: Johan Hedberg <johan.hedberg@silabs.com>
Add missing bluetooth/hci.h and hci_types.h include to fix the build
error and warnings of the infineon h4 ble driver.
The driver is using bt_hci_cmd_create() and bt_hci_cmd_send_sync()
from bluetooth/hci.h, and BT_HCI_OP_RESET from bluetooth/hci_types.h
Signed-off-by: Thomas Stranger <thomas.stranger@outlook.com>
The `BT_DRV_RX_STACK_SIZE` config is used by HCI drivers to determine a
suitable stack size for their RX thread. These threads handle the HCI
transport and pass HCI messages to the Bluetooth host via `bt_hci_recv()`.
Previously, the default stack size was 256 bytes, but it seems to be too
small currently.
Measuring the peak stack usage of `bt_hci_recv()` in different scenarios
indicates that the function needs over 300 bytes of stack. Thus, an RX
thread stack size of 512 should cover that and leave some margin.
Signed-off-by: Kalle Kietäväinen <kalle.kietavainen@silabs.com>
Certain HCI events, like advertising reports, are of less importance than
others. This takes the discardable buffer pool into use for such events.
When the system is flooded with advertising reports, discarding some of
them ensures that the system can still handle other events.
Signed-off-by: Kalle Kietäväinen <kalle.kietavainen@silabs.com>
The BT Link Layer needs to get runtime in a timely manner to keep
connections alive and handle other time-critical tasks. This is achieved by
adding a separate thread for it with a meta-IRQ priority, which means it
can preempt other threads. The driver also has an RX thread that passes HCI
messages from the controller to the host stack. This can be a lower
priority cooperative thread, as it doesn't have strict timing requirements.
Signed-off-by: Kalle Kietäväinen <kalle.kietavainen@silabs.com>