* [PATCH v3 2/2] Bluetooth: hci_sync: Use QoS to determine which PHY to scan
2024-02-26 21:15 [PATCH v3 1/2] Bluetooth: hci_sync: Use address filtering when HCI_PA_SYNC is set Luiz Augusto von Dentz
@ 2024-02-26 21:15 ` Luiz Augusto von Dentz
2024-02-26 21:57 ` [v3,1/2] Bluetooth: hci_sync: Use address filtering when HCI_PA_SYNC is set bluez.test.bot
1 sibling, 0 replies; 3+ messages in thread
From: Luiz Augusto von Dentz @ 2024-02-26 21:15 UTC (permalink / raw)
To: linux-bluetooth
From: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
This used the hci_conn QoS to determine which PHY to scan when creating
a PA Sync.
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
---
net/bluetooth/hci_request.c | 2 +-
net/bluetooth/hci_sync.c | 65 ++++++++++++++++++++++++++++++-------
2 files changed, 55 insertions(+), 12 deletions(-)
diff --git a/net/bluetooth/hci_request.c b/net/bluetooth/hci_request.c
index 00e02138003e..42f2477026bd 100644
--- a/net/bluetooth/hci_request.c
+++ b/net/bluetooth/hci_request.c
@@ -34,9 +34,9 @@
void hci_req_init(struct hci_request *req, struct hci_dev *hdev)
{
+ memset(req, 0, sizeof(*req));
skb_queue_head_init(&req->cmd_q);
req->hdev = hdev;
- req->err = 0;
}
void hci_req_purge(struct hci_request *req)
diff --git a/net/bluetooth/hci_sync.c b/net/bluetooth/hci_sync.c
index ab609089ac4c..2bd9b6b050e0 100644
--- a/net/bluetooth/hci_sync.c
+++ b/net/bluetooth/hci_sync.c
@@ -2758,6 +2758,14 @@ static u8 hci_update_accept_list_sync(struct hci_dev *hdev)
return filter_policy;
}
+static void hci_le_scan_phy_params(struct hci_cp_le_scan_phy_params *cp,
+ u8 type, u16 interval, u16 window)
+{
+ cp->type = type;
+ cp->interval = cpu_to_le16(interval);
+ cp->window = cpu_to_le16(window);
+}
+
static int hci_le_set_ext_scan_param_sync(struct hci_dev *hdev, u8 type,
u16 interval, u16 window,
u8 own_addr_type, u8 filter_policy)
@@ -2765,7 +2773,7 @@ static int hci_le_set_ext_scan_param_sync(struct hci_dev *hdev, u8 type,
struct hci_cp_le_set_ext_scan_params *cp;
struct hci_cp_le_scan_phy_params *phy;
u8 data[sizeof(*cp) + sizeof(*phy) * 2];
- u8 num_phy = 0;
+ u8 num_phy = 0x00;
cp = (void *)data;
phy = (void *)cp->data;
@@ -2775,28 +2783,63 @@ static int hci_le_set_ext_scan_param_sync(struct hci_dev *hdev, u8 type,
cp->own_addr_type = own_addr_type;
cp->filter_policy = filter_policy;
+ /* Check if PA Sync is in progress then select the PHY based on the
+ * hci_conn.iso_qos.
+ */
+ if (hci_dev_test_flag(hdev, HCI_PA_SYNC)) {
+ struct hci_cp_le_add_to_accept_list *sent;
+
+ sent = hci_sent_cmd_data(hdev, HCI_OP_LE_ADD_TO_ACCEPT_LIST);
+ if (sent) {
+ struct hci_conn *conn;
+
+ conn = hci_conn_hash_lookup_ba(hdev, ISO_LINK,
+ &sent->bdaddr);
+ if (conn) {
+ struct bt_iso_qos *qos = &conn->iso_qos;
+
+ if (qos->bcast.in.phy & BT_ISO_PHY_1M ||
+ qos->bcast.in.phy & BT_ISO_PHY_2M) {
+ cp->scanning_phys |= LE_SCAN_PHY_1M;
+ hci_le_scan_phy_params(phy, type,
+ interval,
+ window);
+ num_phy++;
+ phy++;
+ }
+
+ if (qos->bcast.in.phy & BT_ISO_PHY_CODED) {
+ cp->scanning_phys |= LE_SCAN_PHY_CODED;
+ hci_le_scan_phy_params(phy, type,
+ interval,
+ window);
+ num_phy++;
+ phy++;
+ }
+
+ goto done;
+ }
+ }
+ }
+
if (scan_1m(hdev) || scan_2m(hdev)) {
cp->scanning_phys |= LE_SCAN_PHY_1M;
-
- phy->type = type;
- phy->interval = cpu_to_le16(interval);
- phy->window = cpu_to_le16(window);
-
+ hci_le_scan_phy_params(phy, type, interval, window);
num_phy++;
phy++;
}
if (scan_coded(hdev)) {
cp->scanning_phys |= LE_SCAN_PHY_CODED;
-
- phy->type = type;
- phy->interval = cpu_to_le16(interval);
- phy->window = cpu_to_le16(window);
-
+ hci_le_scan_phy_params(phy, type, interval, window);
num_phy++;
phy++;
}
+done:
+ if (!num_phy)
+ return -EINVAL;
+
return __hci_cmd_sync_status(hdev, HCI_OP_LE_SET_EXT_SCAN_PARAMS,
sizeof(*cp) + sizeof(*phy) * num_phy,
data, HCI_CMD_TIMEOUT);
--
2.43.0
^ permalink raw reply related [flat|nested] 3+ messages in thread* RE: [v3,1/2] Bluetooth: hci_sync: Use address filtering when HCI_PA_SYNC is set
2024-02-26 21:15 [PATCH v3 1/2] Bluetooth: hci_sync: Use address filtering when HCI_PA_SYNC is set Luiz Augusto von Dentz
2024-02-26 21:15 ` [PATCH v3 2/2] Bluetooth: hci_sync: Use QoS to determine which PHY to scan Luiz Augusto von Dentz
@ 2024-02-26 21:57 ` bluez.test.bot
1 sibling, 0 replies; 3+ messages in thread
From: bluez.test.bot @ 2024-02-26 21:57 UTC (permalink / raw)
To: linux-bluetooth, luiz.dentz
[-- Attachment #1: Type: text/plain, Size: 1964 bytes --]
This is automated email and please do not reply to this email!
Dear submitter,
Thank you for submitting the patches to the linux bluetooth mailing list.
This is a CI test results with your patch series:
PW Link:https://patchwork.kernel.org/project/bluetooth/list/?series=830031
---Test result---
Test Summary:
CheckPatch PASS 1.49 seconds
GitLint PASS 0.60 seconds
SubjectPrefix PASS 0.23 seconds
BuildKernel PASS 27.86 seconds
CheckAllWarning PASS 30.56 seconds
CheckSparse PASS 35.93 seconds
CheckSmatch PASS 99.20 seconds
BuildKernel32 PASS 27.59 seconds
TestRunnerSetup PASS 505.56 seconds
TestRunner_l2cap-tester FAIL 24.47 seconds
TestRunner_iso-tester PASS 34.75 seconds
TestRunner_bnep-tester PASS 4.82 seconds
TestRunner_mgmt-tester FAIL 118.77 seconds
TestRunner_rfcomm-tester PASS 7.51 seconds
TestRunner_sco-tester PASS 15.04 seconds
TestRunner_ioctl-tester PASS 7.96 seconds
TestRunner_mesh-tester PASS 6.01 seconds
TestRunner_smp-tester PASS 6.95 seconds
TestRunner_userchan-tester PASS 5.06 seconds
IncrementalBuild PASS 32.27 seconds
Details
##############################
Test: TestRunner_l2cap-tester - FAIL
Desc: Run l2cap-tester with test-runner
Output:
Total: 51, Passed: 50 (98.0%), Failed: 1, Not Run: 0
Failed Test Cases
L2CAP LE Client - Close socket 2 Timed out 2.076 seconds
##############################
Test: TestRunner_mgmt-tester - FAIL
Desc: Run mgmt-tester with test-runner
Output:
Total: 492, Passed: 489 (99.4%), Failed: 1, Not Run: 2
Failed Test Cases
LL Privacy - Set Device Flag 1 (Device Privacy) Failed 0.142 seconds
---
Regards,
Linux Bluetooth
^ permalink raw reply [flat|nested] 3+ messages in thread