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>master
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)
|
static bool __hci_update_interleaved_scan(struct hci_dev *hdev)
|
||||||
{
|
{
|
||||||
/* If there is at least one ADV monitors and one pending LE connection
|
/* Do interleaved scan only if all of the following are true:
|
||||||
* or one device to be scanned for, we should alternate between
|
* - There is at least one ADV monitor
|
||||||
* allowlist scan and one without any filters to save power.
|
* - 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) &&
|
bool use_interleaving = hci_is_adv_monitoring(hdev) &&
|
||||||
!(list_empty(&hdev->pend_le_conns) &&
|
!(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);
|
bool is_interleaving = is_interleave_scanning(hdev);
|
||||||
|
|
||||||
if (use_interleaving && !is_interleaving) {
|
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:
|
/* Use the allowlist unless the following conditions are all true:
|
||||||
* - We are not currently suspending
|
* - 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
|
* - 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 &&
|
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)
|
hdev->interleave_scan_state != INTERLEAVE_SCAN_ALLOWLIST)
|
||||||
return 0x00;
|
return 0x00;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue