Skip to content

Commit

Permalink
Bluetooth: advmon offload MSFT interleave scanning integration
Browse files Browse the repository at this point in the history
When MSFT extension is supported, we don't have to interleave the scan
as we could just do allowlist scan.

Signed-off-by: Archie Pusaka <[email protected]>
Reviewed-by: Miao-chen Chou <[email protected]>
Signed-off-by: Marcel Holtmann <[email protected]>
  • Loading branch information
apusaka authored and holtmann committed Jan 25, 2021
1 parent 394566b commit 58ceb1e
Showing 1 changed file with 11 additions and 9 deletions.
20 changes: 11 additions & 9 deletions net/bluetooth/hci_request.c
Original file line number Diff line number Diff line change
Expand Up @@ -404,13 +404,18 @@ static void cancel_interleave_scan(struct hci_dev *hdev)
*/
static bool __hci_update_interleaved_scan(struct hci_dev *hdev)
{
/* If there is at least one ADV monitors and one pending LE connection
* or one device to be scanned for, we should alternate between
* allowlist scan and one without any filters to save power.
/* Do interleaved scan only if all of the following are true:
* - There is at least one ADV monitor
* - At least one pending LE connection or one device to be scanned for
* - Monitor offloading is not supported
* If so, we should alternate between allowlist scan and one without
* any filters to save power.
*/
bool use_interleaving = hci_is_adv_monitoring(hdev) &&
!(list_empty(&hdev->pend_le_conns) &&
list_empty(&hdev->pend_le_reports));
list_empty(&hdev->pend_le_reports)) &&
hci_get_adv_monitor_offload_ext(hdev) ==
HCI_ADV_MONITOR_EXT_NONE;
bool is_interleaving = is_interleave_scanning(hdev);

if (use_interleaving && !is_interleaving) {
Expand Down Expand Up @@ -899,14 +904,11 @@ static u8 update_white_list(struct hci_request *req)

/* Use the allowlist unless the following conditions are all true:
* - We are not currently suspending
* - There are 1 or more ADV monitors registered
* - There are 1 or more ADV monitors registered and it's not offloaded
* - Interleaved scanning is not currently using the allowlist
*
* Once the controller offloading of advertisement monitor is in place,
* the above condition should include the support of MSFT extension
* support.
*/
if (!idr_is_empty(&hdev->adv_monitors_idr) && !hdev->suspended &&
hci_get_adv_monitor_offload_ext(hdev) == HCI_ADV_MONITOR_EXT_NONE &&
hdev->interleave_scan_state != INTERLEAVE_SCAN_ALLOWLIST)
return 0x00;

Expand Down

0 comments on commit 58ceb1e

Please sign in to comment.