forked from Minki/linux
Bluetooth: advmon offload MSFT interleave scanning integration
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 <apusaka@chromium.org> Reviewed-by: Miao-chen Chou <mcchou@chromium.org> Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
This commit is contained in:
parent
394566bf1e
commit
58ceb1e6d6
@ -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) {
|
||||
@ -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;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user