Bluetooth: centralize default value initialization.
authorAlain Michaud <alainm@chromium.org>
Thu, 11 Jun 2020 02:01:56 +0000 (02:01 +0000)
committerMarcel Holtmann <marcel@holtmann.org>
Fri, 12 Jun 2020 13:42:53 +0000 (15:42 +0200)
This patch centralized the initialization of default parameters.  This
is required to allow clients to more easily customize the default
system parameters.

Signed-off-by: Alain Michaud <alainm@chromium.org>
Reviewed-by: Abhishek Pandit-Subedi <abhishekpandit@chromium.org>
Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
include/net/bluetooth/hci_core.h
net/bluetooth/hci_conn.c
net/bluetooth/hci_core.c
net/bluetooth/hci_request.c

index cdd4f1d..0d5dbb6 100644 (file)
@@ -295,6 +295,14 @@ struct hci_dev {
        __u8            le_scan_type;
        __u16           le_scan_interval;
        __u16           le_scan_window;
+       __u16           le_scan_int_suspend;
+       __u16           le_scan_window_suspend;
+       __u16           le_scan_int_discovery;
+       __u16           le_scan_window_discovery;
+       __u16           le_scan_int_adv_monitor;
+       __u16           le_scan_window_adv_monitor;
+       __u16           le_scan_int_connect;
+       __u16           le_scan_window_connect;
        __u16           le_conn_min_interval;
        __u16           le_conn_max_interval;
        __u16           le_conn_latency;
@@ -323,6 +331,16 @@ struct hci_dev {
        __u16           devid_product;
        __u16           devid_version;
 
+       __u8            def_page_scan_type;
+       __u16           def_page_scan_int;
+       __u16           def_page_scan_window;
+       __u8            def_inq_scan_type;
+       __u16           def_inq_scan_int;
+       __u16           def_inq_scan_window;
+       __u16           def_br_lsto;
+       __u16           def_page_timeout;
+       __u16           def_multi_adv_rotation_duration;
+
        __u16           pkt_type;
        __u16           esco_type;
        __u16           link_policy;
index 307800f..9bdffc4 100644 (file)
@@ -789,11 +789,8 @@ static void set_ext_conn_params(struct hci_conn *conn,
 
        memset(p, 0, sizeof(*p));
 
-       /* Set window to be the same value as the interval to
-        * enable continuous scanning.
-        */
-       p->scan_interval = cpu_to_le16(hdev->le_scan_interval);
-       p->scan_window = p->scan_interval;
+       p->scan_interval = cpu_to_le16(hdev->le_scan_int_connect);
+       p->scan_window = cpu_to_le16(hdev->le_scan_window_connect);
        p->conn_interval_min = cpu_to_le16(conn->le_conn_min_interval);
        p->conn_interval_max = cpu_to_le16(conn->le_conn_max_interval);
        p->conn_latency = cpu_to_le16(conn->le_conn_latency);
@@ -875,11 +872,8 @@ static void hci_req_add_le_create_conn(struct hci_request *req,
 
                memset(&cp, 0, sizeof(cp));
 
-               /* Set window to be the same value as the interval to enable
-                * continuous scanning.
-                */
-               cp.scan_interval = cpu_to_le16(hdev->le_scan_interval);
-               cp.scan_window = cp.scan_interval;
+               cp.scan_interval = cpu_to_le16(hdev->le_scan_int_connect);
+               cp.scan_window = cpu_to_le16(hdev->le_scan_window_connect);
 
                bacpy(&cp.peer_addr, &conn->dst);
                cp.peer_addr_type = conn->dst_type;
index 00458a8..4f1052a 100644 (file)
@@ -2982,7 +2982,7 @@ int hci_add_adv_instance(struct hci_dev *hdev, u8 instance, u32 flags,
        adv_instance->remaining_time = timeout;
 
        if (duration == 0)
-               adv_instance->duration = HCI_DEFAULT_ADV_DURATION;
+               adv_instance->duration = hdev->def_multi_adv_rotation_duration;
        else
                adv_instance->duration = duration;
 
@@ -3400,6 +3400,12 @@ struct hci_dev *hci_alloc_dev(void)
        hdev->le_adv_max_interval = 0x0800;
        hdev->le_scan_interval = 0x0060;
        hdev->le_scan_window = 0x0030;
+       hdev->le_scan_int_suspend = 0x0400;
+       hdev->le_scan_window_suspend = 0x0012;
+       hdev->le_scan_int_discovery = DISCOV_LE_SCAN_INT;
+       hdev->le_scan_window_discovery = DISCOV_LE_SCAN_WIN;
+       hdev->le_scan_int_connect = 0x0060;
+       hdev->le_scan_window_connect = 0x0060;
        hdev->le_conn_min_interval = 0x0018;
        hdev->le_conn_max_interval = 0x0028;
        hdev->le_conn_latency = 0x0000;
@@ -3415,6 +3421,7 @@ struct hci_dev *hci_alloc_dev(void)
        hdev->le_tx_def_phys = HCI_LE_SET_PHY_1M;
        hdev->le_rx_def_phys = HCI_LE_SET_PHY_1M;
        hdev->le_num_of_adv_sets = HCI_MAX_ADV_INSTANCES;
+       hdev->def_multi_adv_rotation_duration = HCI_DEFAULT_ADV_DURATION;
 
        hdev->rpa_timeout = HCI_DEFAULT_RPA_TIMEOUT;
        hdev->discov_interleaved_timeout = DISCOV_INTERLEAVED_TIMEOUT;
@@ -3423,6 +3430,11 @@ struct hci_dev *hci_alloc_dev(void)
        hdev->auth_payload_timeout = DEFAULT_AUTH_PAYLOAD_TIMEOUT;
        hdev->min_enc_key_size = HCI_MIN_ENC_KEY_SIZE;
 
+       /* default 1.28 sec page scan */
+       hdev->def_page_scan_type = PAGE_SCAN_TYPE_STANDARD;
+       hdev->def_page_scan_int = 0x0800;
+       hdev->def_page_scan_window = 0x0012;
+
        mutex_init(&hdev->lock);
        mutex_init(&hdev->req_lock);
 
index 1acf5b8..a7f572a 100644 (file)
@@ -34,9 +34,6 @@
 #define HCI_REQ_PEND     1
 #define HCI_REQ_CANCELED  2
 
-#define LE_SUSPEND_SCAN_WINDOW         0x0012
-#define LE_SUSPEND_SCAN_INTERVAL       0x0400
-
 void hci_req_init(struct hci_request *req, struct hci_dev *hdev)
 {
        skb_queue_head_init(&req->cmd_q);
@@ -366,13 +363,11 @@ void __hci_req_write_fast_connectable(struct hci_request *req, bool enable)
                /* 160 msec page scan interval */
                acp.interval = cpu_to_le16(0x0100);
        } else {
-               type = PAGE_SCAN_TYPE_STANDARD; /* default */
-
-               /* default 1.28 sec page scan */
-               acp.interval = cpu_to_le16(0x0800);
+               type = hdev->def_page_scan_type;
+               acp.interval = cpu_to_le16(hdev->def_page_scan_int);
        }
 
-       acp.window = cpu_to_le16(0x0012);
+       acp.window = cpu_to_le16(hdev->def_page_scan_window);
 
        if (__cpu_to_le16(hdev->page_scan_interval) != acp.interval ||
            __cpu_to_le16(hdev->page_scan_window) != acp.window)
@@ -927,8 +922,8 @@ void hci_req_add_le_passive_scan(struct hci_request *req)
                filter_policy |= 0x02;
 
        if (hdev->suspended) {
-               window = LE_SUSPEND_SCAN_WINDOW;
-               interval = LE_SUSPEND_SCAN_INTERVAL;
+               window = hdev->le_scan_window_suspend;
+               interval = hdev->le_scan_int_suspend;
        } else {
                window = hdev->le_scan_window;
                interval = hdev->le_scan_interval;