aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/bluetooth
diff options
context:
space:
mode:
authorDavid S. Miller <davem@davemloft.net>2015-03-14 14:29:45 -0400
committerDavid S. Miller <davem@davemloft.net>2015-03-14 14:29:45 -0400
commit5f1764ddfeb038decfe2b2fda030d0bed43fa36a (patch)
treea42d36330758ccce3becb22b96c8c748b89a837a /drivers/bluetooth
parent2801be4a0ea4cd0965f9c12ff813a91892a8e157 (diff)
parentb6d595e3f74fe0dd9edc0d5bf30cd6e6fe29f023 (diff)
Merge branch 'for-upstream' of git://git.kernel.org/pub/scm/linux/kernel/git/bluetooth/bluetooth-next
Johan Hedberg says: ==================== Here's another set of Bluetooth & ieee802154 patches intended for 4.1: - Added support for QCA ROME chipset family in the btusb driver - at86rf230 driver fixes & cleanups - ieee802154 cleanups - Refactoring of Bluetooth mgmt API to allow new users - New setting for static Bluetooth address exposed to user space - Refactoring of hci_dev flags to remove limit of 32 - Remove unnecessary fast-connectable setting usage restrictions - Fix behavior to be consistent when trying to pair already paired device - Service discovery corner-case fixes Please let me know if there are any issues pulling. Thanks. ==================== Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/bluetooth')
-rw-r--r--drivers/bluetooth/btusb.c333
1 files changed, 301 insertions, 32 deletions
diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c
index 8c1bf6190533..6fa9338745cf 100644
--- a/drivers/bluetooth/btusb.c
+++ b/drivers/bluetooth/btusb.c
@@ -52,6 +52,7 @@ static struct usb_driver btusb_driver;
52#define BTUSB_SWAVE 0x1000 52#define BTUSB_SWAVE 0x1000
53#define BTUSB_INTEL_NEW 0x2000 53#define BTUSB_INTEL_NEW 0x2000
54#define BTUSB_AMP 0x4000 54#define BTUSB_AMP 0x4000
55#define BTUSB_QCA_ROME 0x8000
55 56
56static const struct usb_device_id btusb_table[] = { 57static const struct usb_device_id btusb_table[] = {
57 /* Generic Bluetooth USB device */ 58 /* Generic Bluetooth USB device */
@@ -213,6 +214,10 @@ static const struct usb_device_id blacklist_table[] = {
213 { USB_DEVICE(0x0489, 0xe036), .driver_info = BTUSB_ATH3012 }, 214 { USB_DEVICE(0x0489, 0xe036), .driver_info = BTUSB_ATH3012 },
214 { USB_DEVICE(0x0489, 0xe03c), .driver_info = BTUSB_ATH3012 }, 215 { USB_DEVICE(0x0489, 0xe03c), .driver_info = BTUSB_ATH3012 },
215 216
217 /* QCA ROME chipset */
218 { USB_DEVICE(0x0cf3, 0xe300), .driver_info = BTUSB_QCA_ROME},
219 { USB_DEVICE(0x0cf3, 0xe360), .driver_info = BTUSB_QCA_ROME},
220
216 /* Broadcom BCM2035 */ 221 /* Broadcom BCM2035 */
217 { USB_DEVICE(0x0a5c, 0x2009), .driver_info = BTUSB_BCM92035 }, 222 { USB_DEVICE(0x0a5c, 0x2009), .driver_info = BTUSB_BCM92035 },
218 { USB_DEVICE(0x0a5c, 0x200a), .driver_info = BTUSB_WRONG_SCO_MTU }, 223 { USB_DEVICE(0x0a5c, 0x200a), .driver_info = BTUSB_WRONG_SCO_MTU },
@@ -338,6 +343,8 @@ struct btusb_data {
338 343
339 int (*recv_event)(struct hci_dev *hdev, struct sk_buff *skb); 344 int (*recv_event)(struct hci_dev *hdev, struct sk_buff *skb);
340 int (*recv_bulk)(struct btusb_data *data, void *buffer, int count); 345 int (*recv_bulk)(struct btusb_data *data, void *buffer, int count);
346
347 int (*setup_on_usb)(struct hci_dev *hdev);
341}; 348};
342 349
343static inline void btusb_free_frags(struct btusb_data *data) 350static inline void btusb_free_frags(struct btusb_data *data)
@@ -879,6 +886,15 @@ static int btusb_open(struct hci_dev *hdev)
879 886
880 BT_DBG("%s", hdev->name); 887 BT_DBG("%s", hdev->name);
881 888
889 /* Patching USB firmware files prior to starting any URBs of HCI path
890 * It is more safe to use USB bulk channel for downloading USB patch
891 */
892 if (data->setup_on_usb) {
893 err = data->setup_on_usb(hdev);
894 if (err <0)
895 return err;
896 }
897
882 err = usb_autopm_get_interface(data->intf); 898 err = usb_autopm_get_interface(data->intf);
883 if (err < 0) 899 if (err < 0)
884 return err; 900 return err;
@@ -1254,6 +1270,28 @@ static void btusb_waker(struct work_struct *work)
1254 usb_autopm_put_interface(data->intf); 1270 usb_autopm_put_interface(data->intf);
1255} 1271}
1256 1272
1273static struct sk_buff *btusb_read_local_version(struct hci_dev *hdev)
1274{
1275 struct sk_buff *skb;
1276
1277 skb = __hci_cmd_sync(hdev, HCI_OP_READ_LOCAL_VERSION, 0, NULL,
1278 HCI_INIT_TIMEOUT);
1279 if (IS_ERR(skb)) {
1280 BT_ERR("%s: HCI_OP_READ_LOCAL_VERSION failed (%ld)",
1281 hdev->name, PTR_ERR(skb));
1282 return skb;
1283 }
1284
1285 if (skb->len != sizeof(struct hci_rp_read_local_version)) {
1286 BT_ERR("%s: HCI_OP_READ_LOCAL_VERSION event length mismatch",
1287 hdev->name);
1288 kfree_skb(skb);
1289 return ERR_PTR(-EIO);
1290 }
1291
1292 return skb;
1293}
1294
1257static int btusb_setup_bcm92035(struct hci_dev *hdev) 1295static int btusb_setup_bcm92035(struct hci_dev *hdev)
1258{ 1296{
1259 struct sk_buff *skb; 1297 struct sk_buff *skb;
@@ -1278,12 +1316,9 @@ static int btusb_setup_csr(struct hci_dev *hdev)
1278 1316
1279 BT_DBG("%s", hdev->name); 1317 BT_DBG("%s", hdev->name);
1280 1318
1281 skb = __hci_cmd_sync(hdev, HCI_OP_READ_LOCAL_VERSION, 0, NULL, 1319 skb = btusb_read_local_version(hdev);
1282 HCI_INIT_TIMEOUT); 1320 if (IS_ERR(skb))
1283 if (IS_ERR(skb)) {
1284 BT_ERR("Reading local version failed (%ld)", -PTR_ERR(skb));
1285 return -PTR_ERR(skb); 1321 return -PTR_ERR(skb);
1286 }
1287 1322
1288 rp = (struct hci_rp_read_local_version *)skb->data; 1323 rp = (struct hci_rp_read_local_version *)skb->data;
1289 1324
@@ -2414,21 +2449,9 @@ static int btusb_setup_bcm_patchram(struct hci_dev *hdev)
2414 kfree_skb(skb); 2449 kfree_skb(skb);
2415 2450
2416 /* Read Local Version Info */ 2451 /* Read Local Version Info */
2417 skb = __hci_cmd_sync(hdev, HCI_OP_READ_LOCAL_VERSION, 0, NULL, 2452 skb = btusb_read_local_version(hdev);
2418 HCI_INIT_TIMEOUT); 2453 if (IS_ERR(skb))
2419 if (IS_ERR(skb)) { 2454 return PTR_ERR(skb);
2420 ret = PTR_ERR(skb);
2421 BT_ERR("%s: HCI_OP_READ_LOCAL_VERSION failed (%ld)",
2422 hdev->name, ret);
2423 return ret;
2424 }
2425
2426 if (skb->len != sizeof(*ver)) {
2427 BT_ERR("%s: HCI_OP_READ_LOCAL_VERSION event length mismatch",
2428 hdev->name);
2429 kfree_skb(skb);
2430 return -EIO;
2431 }
2432 2455
2433 ver = (struct hci_rp_read_local_version *)skb->data; 2456 ver = (struct hci_rp_read_local_version *)skb->data;
2434 rev = le16_to_cpu(ver->hci_rev); 2457 rev = le16_to_cpu(ver->hci_rev);
@@ -2516,20 +2539,9 @@ reset_fw:
2516 kfree_skb(skb); 2539 kfree_skb(skb);
2517 2540
2518 /* Read Local Version Info */ 2541 /* Read Local Version Info */
2519 skb = __hci_cmd_sync(hdev, HCI_OP_READ_LOCAL_VERSION, 0, NULL, 2542 skb = btusb_read_local_version(hdev);
2520 HCI_INIT_TIMEOUT);
2521 if (IS_ERR(skb)) { 2543 if (IS_ERR(skb)) {
2522 ret = PTR_ERR(skb); 2544 ret = PTR_ERR(skb);
2523 BT_ERR("%s: HCI_OP_READ_LOCAL_VERSION failed (%ld)",
2524 hdev->name, ret);
2525 goto done;
2526 }
2527
2528 if (skb->len != sizeof(*ver)) {
2529 BT_ERR("%s: HCI_OP_READ_LOCAL_VERSION event length mismatch",
2530 hdev->name);
2531 kfree_skb(skb);
2532 ret = -EIO;
2533 goto done; 2545 goto done;
2534 } 2546 }
2535 2547
@@ -2628,6 +2640,258 @@ static int btusb_set_bdaddr_ath3012(struct hci_dev *hdev,
2628 return 0; 2640 return 0;
2629} 2641}
2630 2642
2643#define QCA_DFU_PACKET_LEN 4096
2644
2645#define QCA_GET_TARGET_VERSION 0x09
2646#define QCA_CHECK_STATUS 0x05
2647#define QCA_DFU_DOWNLOAD 0x01
2648
2649#define QCA_SYSCFG_UPDATED 0x40
2650#define QCA_PATCH_UPDATED 0x80
2651#define QCA_DFU_TIMEOUT 3000
2652
2653struct qca_version {
2654 __le32 rom_version;
2655 __le32 patch_version;
2656 __le32 ram_version;
2657 __le32 ref_clock;
2658 __u8 reserved[4];
2659} __packed;
2660
2661struct qca_rampatch_version {
2662 __le16 rom_version;
2663 __le16 patch_version;
2664} __packed;
2665
2666struct qca_device_info {
2667 u32 rom_version;
2668 u8 rampatch_hdr; /* length of header in rampatch */
2669 u8 nvm_hdr; /* length of header in NVM */
2670 u8 ver_offset; /* offset of version structure in rampatch */
2671};
2672
2673static const struct qca_device_info qca_devices_table[] = {
2674 { 0x00000100, 20, 4, 10 }, /* Rome 1.0 */
2675 { 0x00000101, 20, 4, 10 }, /* Rome 1.1 */
2676 { 0x00000201, 28, 4, 18 }, /* Rome 2.1 */
2677 { 0x00000300, 28, 4, 18 }, /* Rome 3.0 */
2678 { 0x00000302, 28, 4, 18 }, /* Rome 3.2 */
2679};
2680
2681static int btusb_qca_send_vendor_req(struct hci_dev *hdev, u8 request,
2682 void *data, u16 size)
2683{
2684 struct btusb_data *btdata = hci_get_drvdata(hdev);
2685 struct usb_device *udev = btdata->udev;
2686 int pipe, err;
2687 u8 *buf;
2688
2689 buf = kmalloc(size, GFP_KERNEL);
2690 if (!buf)
2691 return -ENOMEM;
2692
2693 /* Found some of USB hosts have IOT issues with ours so that we should
2694 * not wait until HCI layer is ready.
2695 */
2696 pipe = usb_rcvctrlpipe(udev, 0);
2697 err = usb_control_msg(udev, pipe, request, USB_TYPE_VENDOR | USB_DIR_IN,
2698 0, 0, buf, size, USB_CTRL_SET_TIMEOUT);
2699 if (err < 0) {
2700 BT_ERR("%s: Failed to access otp area (%d)", hdev->name, err);
2701 goto done;
2702 }
2703
2704 memcpy(data, buf, size);
2705
2706done:
2707 kfree(buf);
2708
2709 return err;
2710}
2711
2712static int btusb_setup_qca_download_fw(struct hci_dev *hdev,
2713 const struct firmware *firmware,
2714 size_t hdr_size)
2715{
2716 struct btusb_data *btdata = hci_get_drvdata(hdev);
2717 struct usb_device *udev = btdata->udev;
2718 size_t count, size, sent = 0;
2719 int pipe, len, err;
2720 u8 *buf;
2721
2722 buf = kmalloc(QCA_DFU_PACKET_LEN, GFP_KERNEL);
2723 if (!buf)
2724 return -ENOMEM;
2725
2726 count = firmware->size;
2727
2728 size = min_t(size_t, count, hdr_size);
2729 memcpy(buf, firmware->data, size);
2730
2731 /* USB patches should go down to controller through USB path
2732 * because binary format fits to go down through USB channel.
2733 * USB control path is for patching headers and USB bulk is for
2734 * patch body.
2735 */
2736 pipe = usb_sndctrlpipe(udev, 0);
2737 err = usb_control_msg(udev, pipe, QCA_DFU_DOWNLOAD, USB_TYPE_VENDOR,
2738 0, 0, buf, size, USB_CTRL_SET_TIMEOUT);
2739 if (err < 0) {
2740 BT_ERR("%s: Failed to send headers (%d)", hdev->name, err);
2741 goto done;
2742 }
2743
2744 sent += size;
2745 count -= size;
2746
2747 while (count) {
2748 size = min_t(size_t, count, QCA_DFU_PACKET_LEN);
2749
2750 memcpy(buf, firmware->data + sent, size);
2751
2752 pipe = usb_sndbulkpipe(udev, 0x02);
2753 err = usb_bulk_msg(udev, pipe, buf, size, &len,
2754 QCA_DFU_TIMEOUT);
2755 if (err < 0) {
2756 BT_ERR("%s: Failed to send body at %zd of %zd (%d)",
2757 hdev->name, sent, firmware->size, err);
2758 break;
2759 }
2760
2761 if (size != len) {
2762 BT_ERR("%s: Failed to get bulk buffer", hdev->name);
2763 err = -EILSEQ;
2764 break;
2765 }
2766
2767 sent += size;
2768 count -= size;
2769 }
2770
2771done:
2772 kfree(buf);
2773 return err;
2774}
2775
2776static int btusb_setup_qca_load_rampatch(struct hci_dev *hdev,
2777 struct qca_version *ver,
2778 const struct qca_device_info *info)
2779{
2780 struct qca_rampatch_version *rver;
2781 const struct firmware *fw;
2782 u32 ver_rom, ver_patch;
2783 u16 rver_rom, rver_patch;
2784 char fwname[64];
2785 int err;
2786
2787 ver_rom = le32_to_cpu(ver->rom_version);
2788 ver_patch = le32_to_cpu(ver->patch_version);
2789
2790 snprintf(fwname, sizeof(fwname), "qca/rampatch_usb_%08x.bin", ver_rom);
2791
2792 err = request_firmware(&fw, fwname, &hdev->dev);
2793 if (err) {
2794 BT_ERR("%s: failed to request rampatch file: %s (%d)",
2795 hdev->name, fwname, err);
2796 return err;
2797 }
2798
2799 BT_INFO("%s: using rampatch file: %s", hdev->name, fwname);
2800
2801 rver = (struct qca_rampatch_version *)(fw->data + info->ver_offset);
2802 rver_rom = le16_to_cpu(rver->rom_version);
2803 rver_patch = le16_to_cpu(rver->patch_version);
2804
2805 BT_INFO("%s: QCA: patch rome 0x%x build 0x%x, firmware rome 0x%x "
2806 "build 0x%x", hdev->name, rver_rom, rver_patch, ver_rom,
2807 ver_patch);
2808
2809 if (rver_rom != ver_rom || rver_patch <= ver_patch) {
2810 BT_ERR("%s: rampatch file version did not match with firmware",
2811 hdev->name);
2812 err = -EINVAL;
2813 goto done;
2814 }
2815
2816 err = btusb_setup_qca_download_fw(hdev, fw, info->rampatch_hdr);
2817
2818done:
2819 release_firmware(fw);
2820
2821 return err;
2822}
2823
2824static int btusb_setup_qca_load_nvm(struct hci_dev *hdev,
2825 struct qca_version *ver,
2826 const struct qca_device_info *info)
2827{
2828 const struct firmware *fw;
2829 char fwname[64];
2830 int err;
2831
2832 snprintf(fwname, sizeof(fwname), "qca/nvm_usb_%08x.bin",
2833 le32_to_cpu(ver->rom_version));
2834
2835 err = request_firmware(&fw, fwname, &hdev->dev);
2836 if (err) {
2837 BT_ERR("%s: failed to request NVM file: %s (%d)",
2838 hdev->name, fwname, err);
2839 return err;
2840 }
2841
2842 BT_INFO("%s: using NVM file: %s", hdev->name, fwname);
2843
2844 err = btusb_setup_qca_download_fw(hdev, fw, info->nvm_hdr);
2845
2846 release_firmware(fw);
2847
2848 return err;
2849}
2850
2851static int btusb_setup_qca(struct hci_dev *hdev)
2852{
2853 const struct qca_device_info *info = NULL;
2854 struct qca_version ver;
2855 u32 ver_rom;
2856 u8 status;
2857 int i, err;
2858
2859 err = btusb_qca_send_vendor_req(hdev, QCA_GET_TARGET_VERSION, &ver,
2860 sizeof(ver));
2861 if (err < 0)
2862 return err;
2863
2864 ver_rom = le32_to_cpu(ver.rom_version);
2865 for (i = 0; i < ARRAY_SIZE(qca_devices_table); i++) {
2866 if (ver_rom == qca_devices_table[i].rom_version)
2867 info = &qca_devices_table[i];
2868 }
2869 if (!info) {
2870 BT_ERR("%s: don't support firmware rome 0x%x", hdev->name,
2871 ver_rom);
2872 return -ENODEV;
2873 }
2874
2875 err = btusb_qca_send_vendor_req(hdev, QCA_CHECK_STATUS, &status,
2876 sizeof(status));
2877 if (err < 0)
2878 return err;
2879
2880 if (!(status & QCA_PATCH_UPDATED)) {
2881 err = btusb_setup_qca_load_rampatch(hdev, &ver, info);
2882 if (err < 0)
2883 return err;
2884 }
2885
2886 if (!(status & QCA_SYSCFG_UPDATED)) {
2887 err = btusb_setup_qca_load_nvm(hdev, &ver, info);
2888 if (err < 0)
2889 return err;
2890 }
2891
2892 return 0;
2893}
2894
2631static int btusb_probe(struct usb_interface *intf, 2895static int btusb_probe(struct usb_interface *intf,
2632 const struct usb_device_id *id) 2896 const struct usb_device_id *id)
2633{ 2897{
@@ -2781,6 +3045,11 @@ static int btusb_probe(struct usb_interface *intf,
2781 set_bit(HCI_QUIRK_STRICT_DUPLICATE_FILTER, &hdev->quirks); 3045 set_bit(HCI_QUIRK_STRICT_DUPLICATE_FILTER, &hdev->quirks);
2782 } 3046 }
2783 3047
3048 if (id->driver_info & BTUSB_QCA_ROME) {
3049 data->setup_on_usb = btusb_setup_qca;
3050 hdev->set_bdaddr = btusb_set_bdaddr_ath3012;
3051 }
3052
2784 if (id->driver_info & BTUSB_AMP) { 3053 if (id->driver_info & BTUSB_AMP) {
2785 /* AMP controllers do not support SCO packets */ 3054 /* AMP controllers do not support SCO packets */
2786 data->isoc = NULL; 3055 data->isoc = NULL;