Bluetooth: mgmt: multi adv for enable_advertising()
authorFlorian Grandel <fgrandel@gmail.com>
Thu, 18 Jun 2015 01:16:42 +0000 (03:16 +0200)
committerMarcel Holtmann <marcel@holtmann.org>
Thu, 18 Jun 2015 16:11:52 +0000 (18:11 +0200)
Previously enable_advertising() would rely on
get_adv_instance_scan_rsp_len() which checked for a hard coded instance
identifier. This is being changed to check for the current advertising
instance's scan response length instead. The function is renamed
accordingly.

Signed-off-by: Florian Grandel <fgrandel@gmail.com>
Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
net/bluetooth/mgmt.c

index 47fa16bffbe2ecd6128483f7aa910dbbcc47b3bd..76aee8a3acf0263276f43f3f770eaaead9bcd310 100644 (file)
@@ -986,16 +986,23 @@ static u32 get_adv_instance_flags(struct hci_dev *hdev, u8 instance)
        return adv_instance->flags;
 }
 
-static u8 get_adv_instance_scan_rsp_len(struct hci_dev *hdev, u8 instance)
+static u8 get_cur_adv_instance_scan_rsp_len(struct hci_dev *hdev)
 {
-       /* Ignore instance 0 and other unsupported instances */
-       if (instance != 0x01)
+       u8 instance = get_current_adv_instance(hdev);
+       struct adv_info *adv_instance;
+
+       /* Ignore instance 0 */
+       if (instance == 0x00)
+               return 0;
+
+       adv_instance = hci_find_adv_instance(hdev, instance);
+       if (!adv_instance)
                return 0;
 
        /* TODO: Take into account the "appearance" and "local-name" flags here.
         * These are currently being ignored as they are not supported.
         */
-       return hdev->adv_instance.scan_rsp_len;
+       return adv_instance->scan_rsp_len;
 }
 
 static u8 create_instance_adv_data(struct hci_dev *hdev, u8 instance, u8 *ptr)
@@ -1266,7 +1273,7 @@ static void enable_advertising(struct hci_request *req)
 
        if (connectable)
                cp.type = LE_ADV_IND;
-       else if (get_adv_instance_scan_rsp_len(hdev, instance))
+       else if (get_cur_adv_instance_scan_rsp_len(hdev))
                cp.type = LE_ADV_SCAN_IND;
        else
                cp.type = LE_ADV_NONCONN_IND;