1 // SPDX-License-Identifier: GPL-2.0-or-later 2 /* 3 * 4 * Generic Bluetooth USB driver 5 * 6 * Copyright (C) 2005-2008 Marcel Holtmann <marcel@holtmann.org> 7 */ 8 9 #include <linux/dmi.h> 10 #include <linux/module.h> 11 #include <linux/usb.h> 12 #include <linux/usb/quirks.h> 13 #include <linux/firmware.h> 14 #include <linux/iopoll.h> 15 #include <linux/of_device.h> 16 #include <linux/of_irq.h> 17 #include <linux/suspend.h> 18 #include <linux/gpio/consumer.h> 19 #include <asm/unaligned.h> 20 21 #include <net/bluetooth/bluetooth.h> 22 #include <net/bluetooth/hci_core.h> 23 24 #include "btintel.h" 25 #include "btbcm.h" 26 #include "btrtl.h" 27 28 #define VERSION "0.8" 29 30 static bool disable_scofix; 31 static bool force_scofix; 32 static bool enable_autosuspend = IS_ENABLED(CONFIG_BT_HCIBTUSB_AUTOSUSPEND); 33 34 static bool reset = true; 35 36 static struct usb_driver btusb_driver; 37 38 #define BTUSB_IGNORE 0x01 39 #define BTUSB_DIGIANSWER 0x02 40 #define BTUSB_CSR 0x04 41 #define BTUSB_SNIFFER 0x08 42 #define BTUSB_BCM92035 0x10 43 #define BTUSB_BROKEN_ISOC 0x20 44 #define BTUSB_WRONG_SCO_MTU 0x40 45 #define BTUSB_ATH3012 0x80 46 #define BTUSB_INTEL 0x100 47 #define BTUSB_INTEL_BOOT 0x200 48 #define BTUSB_BCM_PATCHRAM 0x400 49 #define BTUSB_MARVELL 0x800 50 #define BTUSB_SWAVE 0x1000 51 #define BTUSB_INTEL_NEW 0x2000 52 #define BTUSB_AMP 0x4000 53 #define BTUSB_QCA_ROME 0x8000 54 #define BTUSB_BCM_APPLE 0x10000 55 #define BTUSB_REALTEK 0x20000 56 #define BTUSB_BCM2045 0x40000 57 #define BTUSB_IFNUM_2 0x80000 58 #define BTUSB_CW6622 0x100000 59 #define BTUSB_MEDIATEK 0x200000 60 #define BTUSB_WIDEBAND_SPEECH 0x400000 61 62 static const struct usb_device_id btusb_table[] = { 63 /* Generic Bluetooth USB device */ 64 { USB_DEVICE_INFO(0xe0, 0x01, 0x01) }, 65 66 /* Generic Bluetooth AMP device */ 67 { USB_DEVICE_INFO(0xe0, 0x01, 0x04), .driver_info = BTUSB_AMP }, 68 69 /* Generic Bluetooth USB interface */ 70 { USB_INTERFACE_INFO(0xe0, 0x01, 0x01) }, 71 72 /* Apple-specific (Broadcom) devices */ 73 { USB_VENDOR_AND_INTERFACE_INFO(0x05ac, 0xff, 0x01, 0x01), 74 .driver_info = BTUSB_BCM_APPLE | BTUSB_IFNUM_2 }, 75 76 /* MediaTek MT76x0E */ 77 { USB_DEVICE(0x0e8d, 0x763f) }, 78 79 /* Broadcom SoftSailing reporting vendor specific */ 80 { USB_DEVICE(0x0a5c, 0x21e1) }, 81 82 /* Apple MacBookPro 7,1 */ 83 { USB_DEVICE(0x05ac, 0x8213) }, 84 85 /* Apple iMac11,1 */ 86 { USB_DEVICE(0x05ac, 0x8215) }, 87 88 /* Apple MacBookPro6,2 */ 89 { USB_DEVICE(0x05ac, 0x8218) }, 90 91 /* Apple MacBookAir3,1, MacBookAir3,2 */ 92 { USB_DEVICE(0x05ac, 0x821b) }, 93 94 /* Apple MacBookAir4,1 */ 95 { USB_DEVICE(0x05ac, 0x821f) }, 96 97 /* Apple MacBookPro8,2 */ 98 { USB_DEVICE(0x05ac, 0x821a) }, 99 100 /* Apple MacMini5,1 */ 101 { USB_DEVICE(0x05ac, 0x8281) }, 102 103 /* AVM BlueFRITZ! USB v2.0 */ 104 { USB_DEVICE(0x057c, 0x3800), .driver_info = BTUSB_SWAVE }, 105 106 /* Bluetooth Ultraport Module from IBM */ 107 { USB_DEVICE(0x04bf, 0x030a) }, 108 109 /* ALPS Modules with non-standard id */ 110 { USB_DEVICE(0x044e, 0x3001) }, 111 { USB_DEVICE(0x044e, 0x3002) }, 112 113 /* Ericsson with non-standard id */ 114 { USB_DEVICE(0x0bdb, 0x1002) }, 115 116 /* Canyon CN-BTU1 with HID interfaces */ 117 { USB_DEVICE(0x0c10, 0x0000) }, 118 119 /* Broadcom BCM20702A0 */ 120 { USB_DEVICE(0x413c, 0x8197) }, 121 122 /* Broadcom BCM20702B0 (Dynex/Insignia) */ 123 { USB_DEVICE(0x19ff, 0x0239), .driver_info = BTUSB_BCM_PATCHRAM }, 124 125 /* Broadcom BCM43142A0 (Foxconn/Lenovo) */ 126 { USB_VENDOR_AND_INTERFACE_INFO(0x105b, 0xff, 0x01, 0x01), 127 .driver_info = BTUSB_BCM_PATCHRAM }, 128 129 /* Broadcom BCM920703 (HTC Vive) */ 130 { USB_VENDOR_AND_INTERFACE_INFO(0x0bb4, 0xff, 0x01, 0x01), 131 .driver_info = BTUSB_BCM_PATCHRAM }, 132 133 /* Foxconn - Hon Hai */ 134 { USB_VENDOR_AND_INTERFACE_INFO(0x0489, 0xff, 0x01, 0x01), 135 .driver_info = BTUSB_BCM_PATCHRAM }, 136 137 /* Lite-On Technology - Broadcom based */ 138 { USB_VENDOR_AND_INTERFACE_INFO(0x04ca, 0xff, 0x01, 0x01), 139 .driver_info = BTUSB_BCM_PATCHRAM }, 140 141 /* Broadcom devices with vendor specific id */ 142 { USB_VENDOR_AND_INTERFACE_INFO(0x0a5c, 0xff, 0x01, 0x01), 143 .driver_info = BTUSB_BCM_PATCHRAM }, 144 145 /* ASUSTek Computer - Broadcom based */ 146 { USB_VENDOR_AND_INTERFACE_INFO(0x0b05, 0xff, 0x01, 0x01), 147 .driver_info = BTUSB_BCM_PATCHRAM }, 148 149 /* Belkin F8065bf - Broadcom based */ 150 { USB_VENDOR_AND_INTERFACE_INFO(0x050d, 0xff, 0x01, 0x01), 151 .driver_info = BTUSB_BCM_PATCHRAM }, 152 153 /* IMC Networks - Broadcom based */ 154 { USB_VENDOR_AND_INTERFACE_INFO(0x13d3, 0xff, 0x01, 0x01), 155 .driver_info = BTUSB_BCM_PATCHRAM }, 156 157 /* Dell Computer - Broadcom based */ 158 { USB_VENDOR_AND_INTERFACE_INFO(0x413c, 0xff, 0x01, 0x01), 159 .driver_info = BTUSB_BCM_PATCHRAM }, 160 161 /* Toshiba Corp - Broadcom based */ 162 { USB_VENDOR_AND_INTERFACE_INFO(0x0930, 0xff, 0x01, 0x01), 163 .driver_info = BTUSB_BCM_PATCHRAM }, 164 165 /* Intel Bluetooth USB Bootloader (RAM module) */ 166 { USB_DEVICE(0x8087, 0x0a5a), 167 .driver_info = BTUSB_INTEL_BOOT | BTUSB_BROKEN_ISOC }, 168 169 { } /* Terminating entry */ 170 }; 171 172 MODULE_DEVICE_TABLE(usb, btusb_table); 173 174 static const struct usb_device_id blacklist_table[] = { 175 /* CSR BlueCore devices */ 176 { USB_DEVICE(0x0a12, 0x0001), .driver_info = BTUSB_CSR }, 177 178 /* Broadcom BCM2033 without firmware */ 179 { USB_DEVICE(0x0a5c, 0x2033), .driver_info = BTUSB_IGNORE }, 180 181 /* Broadcom BCM2045 devices */ 182 { USB_DEVICE(0x0a5c, 0x2045), .driver_info = BTUSB_BCM2045 }, 183 184 /* Atheros 3011 with sflash firmware */ 185 { USB_DEVICE(0x0489, 0xe027), .driver_info = BTUSB_IGNORE }, 186 { USB_DEVICE(0x0489, 0xe03d), .driver_info = BTUSB_IGNORE }, 187 { USB_DEVICE(0x04f2, 0xaff1), .driver_info = BTUSB_IGNORE }, 188 { USB_DEVICE(0x0930, 0x0215), .driver_info = BTUSB_IGNORE }, 189 { USB_DEVICE(0x0cf3, 0x3002), .driver_info = BTUSB_IGNORE }, 190 { USB_DEVICE(0x0cf3, 0xe019), .driver_info = BTUSB_IGNORE }, 191 { USB_DEVICE(0x13d3, 0x3304), .driver_info = BTUSB_IGNORE }, 192 193 /* Atheros AR9285 Malbec with sflash firmware */ 194 { USB_DEVICE(0x03f0, 0x311d), .driver_info = BTUSB_IGNORE }, 195 196 /* Atheros 3012 with sflash firmware */ 197 { USB_DEVICE(0x0489, 0xe04d), .driver_info = BTUSB_ATH3012 }, 198 { USB_DEVICE(0x0489, 0xe04e), .driver_info = BTUSB_ATH3012 }, 199 { USB_DEVICE(0x0489, 0xe056), .driver_info = BTUSB_ATH3012 }, 200 { USB_DEVICE(0x0489, 0xe057), .driver_info = BTUSB_ATH3012 }, 201 { USB_DEVICE(0x0489, 0xe05f), .driver_info = BTUSB_ATH3012 }, 202 { USB_DEVICE(0x0489, 0xe076), .driver_info = BTUSB_ATH3012 }, 203 { USB_DEVICE(0x0489, 0xe078), .driver_info = BTUSB_ATH3012 }, 204 { USB_DEVICE(0x0489, 0xe095), .driver_info = BTUSB_ATH3012 }, 205 { USB_DEVICE(0x04c5, 0x1330), .driver_info = BTUSB_ATH3012 }, 206 { USB_DEVICE(0x04ca, 0x3004), .driver_info = BTUSB_ATH3012 }, 207 { USB_DEVICE(0x04ca, 0x3005), .driver_info = BTUSB_ATH3012 }, 208 { USB_DEVICE(0x04ca, 0x3006), .driver_info = BTUSB_ATH3012 }, 209 { USB_DEVICE(0x04ca, 0x3007), .driver_info = BTUSB_ATH3012 }, 210 { USB_DEVICE(0x04ca, 0x3008), .driver_info = BTUSB_ATH3012 }, 211 { USB_DEVICE(0x04ca, 0x300b), .driver_info = BTUSB_ATH3012 }, 212 { USB_DEVICE(0x04ca, 0x300d), .driver_info = BTUSB_ATH3012 }, 213 { USB_DEVICE(0x04ca, 0x300f), .driver_info = BTUSB_ATH3012 }, 214 { USB_DEVICE(0x04ca, 0x3010), .driver_info = BTUSB_ATH3012 }, 215 { USB_DEVICE(0x04ca, 0x3014), .driver_info = BTUSB_ATH3012 }, 216 { USB_DEVICE(0x04ca, 0x3018), .driver_info = BTUSB_ATH3012 }, 217 { USB_DEVICE(0x0930, 0x0219), .driver_info = BTUSB_ATH3012 }, 218 { USB_DEVICE(0x0930, 0x021c), .driver_info = BTUSB_ATH3012 }, 219 { USB_DEVICE(0x0930, 0x0220), .driver_info = BTUSB_ATH3012 }, 220 { USB_DEVICE(0x0930, 0x0227), .driver_info = BTUSB_ATH3012 }, 221 { USB_DEVICE(0x0b05, 0x17d0), .driver_info = BTUSB_ATH3012 }, 222 { USB_DEVICE(0x0cf3, 0x0036), .driver_info = BTUSB_ATH3012 }, 223 { USB_DEVICE(0x0cf3, 0x3004), .driver_info = BTUSB_ATH3012 }, 224 { USB_DEVICE(0x0cf3, 0x3008), .driver_info = BTUSB_ATH3012 }, 225 { USB_DEVICE(0x0cf3, 0x311d), .driver_info = BTUSB_ATH3012 }, 226 { USB_DEVICE(0x0cf3, 0x311e), .driver_info = BTUSB_ATH3012 }, 227 { USB_DEVICE(0x0cf3, 0x311f), .driver_info = BTUSB_ATH3012 }, 228 { USB_DEVICE(0x0cf3, 0x3121), .driver_info = BTUSB_ATH3012 }, 229 { USB_DEVICE(0x0cf3, 0x817a), .driver_info = BTUSB_ATH3012 }, 230 { USB_DEVICE(0x0cf3, 0x817b), .driver_info = BTUSB_ATH3012 }, 231 { USB_DEVICE(0x0cf3, 0xe003), .driver_info = BTUSB_ATH3012 }, 232 { USB_DEVICE(0x0cf3, 0xe004), .driver_info = BTUSB_ATH3012 }, 233 { USB_DEVICE(0x0cf3, 0xe005), .driver_info = BTUSB_ATH3012 }, 234 { USB_DEVICE(0x0cf3, 0xe006), .driver_info = BTUSB_ATH3012 }, 235 { USB_DEVICE(0x13d3, 0x3362), .driver_info = BTUSB_ATH3012 }, 236 { USB_DEVICE(0x13d3, 0x3375), .driver_info = BTUSB_ATH3012 }, 237 { USB_DEVICE(0x13d3, 0x3393), .driver_info = BTUSB_ATH3012 }, 238 { USB_DEVICE(0x13d3, 0x3395), .driver_info = BTUSB_ATH3012 }, 239 { USB_DEVICE(0x13d3, 0x3402), .driver_info = BTUSB_ATH3012 }, 240 { USB_DEVICE(0x13d3, 0x3408), .driver_info = BTUSB_ATH3012 }, 241 { USB_DEVICE(0x13d3, 0x3423), .driver_info = BTUSB_ATH3012 }, 242 { USB_DEVICE(0x13d3, 0x3432), .driver_info = BTUSB_ATH3012 }, 243 { USB_DEVICE(0x13d3, 0x3472), .driver_info = BTUSB_ATH3012 }, 244 { USB_DEVICE(0x13d3, 0x3474), .driver_info = BTUSB_ATH3012 }, 245 { USB_DEVICE(0x13d3, 0x3487), .driver_info = BTUSB_ATH3012 }, 246 { USB_DEVICE(0x13d3, 0x3490), .driver_info = BTUSB_ATH3012 }, 247 248 /* Atheros AR5BBU12 with sflash firmware */ 249 { USB_DEVICE(0x0489, 0xe02c), .driver_info = BTUSB_IGNORE }, 250 251 /* Atheros AR5BBU12 with sflash firmware */ 252 { USB_DEVICE(0x0489, 0xe036), .driver_info = BTUSB_ATH3012 }, 253 { USB_DEVICE(0x0489, 0xe03c), .driver_info = BTUSB_ATH3012 }, 254 255 /* QCA ROME chipset */ 256 { USB_DEVICE(0x0cf3, 0x535b), .driver_info = BTUSB_QCA_ROME }, 257 { USB_DEVICE(0x0cf3, 0xe007), .driver_info = BTUSB_QCA_ROME }, 258 { USB_DEVICE(0x0cf3, 0xe009), .driver_info = BTUSB_QCA_ROME }, 259 { USB_DEVICE(0x0cf3, 0xe010), .driver_info = BTUSB_QCA_ROME }, 260 { USB_DEVICE(0x0cf3, 0xe300), .driver_info = BTUSB_QCA_ROME }, 261 { USB_DEVICE(0x0cf3, 0xe301), .driver_info = BTUSB_QCA_ROME }, 262 { USB_DEVICE(0x0cf3, 0xe360), .driver_info = BTUSB_QCA_ROME }, 263 { USB_DEVICE(0x0489, 0xe092), .driver_info = BTUSB_QCA_ROME }, 264 { USB_DEVICE(0x0489, 0xe09f), .driver_info = BTUSB_QCA_ROME }, 265 { USB_DEVICE(0x0489, 0xe0a2), .driver_info = BTUSB_QCA_ROME }, 266 { USB_DEVICE(0x04ca, 0x3011), .driver_info = BTUSB_QCA_ROME }, 267 { USB_DEVICE(0x04ca, 0x3015), .driver_info = BTUSB_QCA_ROME }, 268 { USB_DEVICE(0x04ca, 0x3016), .driver_info = BTUSB_QCA_ROME }, 269 { USB_DEVICE(0x04ca, 0x301a), .driver_info = BTUSB_QCA_ROME }, 270 { USB_DEVICE(0x04ca, 0x3021), .driver_info = BTUSB_QCA_ROME }, 271 { USB_DEVICE(0x13d3, 0x3491), .driver_info = BTUSB_QCA_ROME }, 272 { USB_DEVICE(0x13d3, 0x3496), .driver_info = BTUSB_QCA_ROME }, 273 { USB_DEVICE(0x13d3, 0x3501), .driver_info = BTUSB_QCA_ROME }, 274 275 /* Broadcom BCM2035 */ 276 { USB_DEVICE(0x0a5c, 0x2009), .driver_info = BTUSB_BCM92035 }, 277 { USB_DEVICE(0x0a5c, 0x200a), .driver_info = BTUSB_WRONG_SCO_MTU }, 278 { USB_DEVICE(0x0a5c, 0x2035), .driver_info = BTUSB_WRONG_SCO_MTU }, 279 280 /* Broadcom BCM2045 */ 281 { USB_DEVICE(0x0a5c, 0x2039), .driver_info = BTUSB_WRONG_SCO_MTU }, 282 { USB_DEVICE(0x0a5c, 0x2101), .driver_info = BTUSB_WRONG_SCO_MTU }, 283 284 /* IBM/Lenovo ThinkPad with Broadcom chip */ 285 { USB_DEVICE(0x0a5c, 0x201e), .driver_info = BTUSB_WRONG_SCO_MTU }, 286 { USB_DEVICE(0x0a5c, 0x2110), .driver_info = BTUSB_WRONG_SCO_MTU }, 287 288 /* HP laptop with Broadcom chip */ 289 { USB_DEVICE(0x03f0, 0x171d), .driver_info = BTUSB_WRONG_SCO_MTU }, 290 291 /* Dell laptop with Broadcom chip */ 292 { USB_DEVICE(0x413c, 0x8126), .driver_info = BTUSB_WRONG_SCO_MTU }, 293 294 /* Dell Wireless 370 and 410 devices */ 295 { USB_DEVICE(0x413c, 0x8152), .driver_info = BTUSB_WRONG_SCO_MTU }, 296 { USB_DEVICE(0x413c, 0x8156), .driver_info = BTUSB_WRONG_SCO_MTU }, 297 298 /* Belkin F8T012 and F8T013 devices */ 299 { USB_DEVICE(0x050d, 0x0012), .driver_info = BTUSB_WRONG_SCO_MTU }, 300 { USB_DEVICE(0x050d, 0x0013), .driver_info = BTUSB_WRONG_SCO_MTU }, 301 302 /* Asus WL-BTD202 device */ 303 { USB_DEVICE(0x0b05, 0x1715), .driver_info = BTUSB_WRONG_SCO_MTU }, 304 305 /* Kensington Bluetooth USB adapter */ 306 { USB_DEVICE(0x047d, 0x105e), .driver_info = BTUSB_WRONG_SCO_MTU }, 307 308 /* RTX Telecom based adapters with buggy SCO support */ 309 { USB_DEVICE(0x0400, 0x0807), .driver_info = BTUSB_BROKEN_ISOC }, 310 { USB_DEVICE(0x0400, 0x080a), .driver_info = BTUSB_BROKEN_ISOC }, 311 312 /* CONWISE Technology based adapters with buggy SCO support */ 313 { USB_DEVICE(0x0e5e, 0x6622), 314 .driver_info = BTUSB_BROKEN_ISOC | BTUSB_CW6622}, 315 316 /* Roper Class 1 Bluetooth Dongle (Silicon Wave based) */ 317 { USB_DEVICE(0x1310, 0x0001), .driver_info = BTUSB_SWAVE }, 318 319 /* Digianswer devices */ 320 { USB_DEVICE(0x08fd, 0x0001), .driver_info = BTUSB_DIGIANSWER }, 321 { USB_DEVICE(0x08fd, 0x0002), .driver_info = BTUSB_IGNORE }, 322 323 /* CSR BlueCore Bluetooth Sniffer */ 324 { USB_DEVICE(0x0a12, 0x0002), 325 .driver_info = BTUSB_SNIFFER | BTUSB_BROKEN_ISOC }, 326 327 /* Frontline ComProbe Bluetooth Sniffer */ 328 { USB_DEVICE(0x16d3, 0x0002), 329 .driver_info = BTUSB_SNIFFER | BTUSB_BROKEN_ISOC }, 330 331 /* Marvell Bluetooth devices */ 332 { USB_DEVICE(0x1286, 0x2044), .driver_info = BTUSB_MARVELL }, 333 { USB_DEVICE(0x1286, 0x2046), .driver_info = BTUSB_MARVELL }, 334 { USB_DEVICE(0x1286, 0x204e), .driver_info = BTUSB_MARVELL }, 335 336 /* Intel Bluetooth devices */ 337 { USB_DEVICE(0x8087, 0x0025), .driver_info = BTUSB_INTEL_NEW | 338 BTUSB_WIDEBAND_SPEECH }, 339 { USB_DEVICE(0x8087, 0x0026), .driver_info = BTUSB_INTEL_NEW | 340 BTUSB_WIDEBAND_SPEECH }, 341 { USB_DEVICE(0x8087, 0x0029), .driver_info = BTUSB_INTEL_NEW | 342 BTUSB_WIDEBAND_SPEECH }, 343 { USB_DEVICE(0x8087, 0x07da), .driver_info = BTUSB_CSR }, 344 { USB_DEVICE(0x8087, 0x07dc), .driver_info = BTUSB_INTEL }, 345 { USB_DEVICE(0x8087, 0x0a2a), .driver_info = BTUSB_INTEL }, 346 { USB_DEVICE(0x8087, 0x0a2b), .driver_info = BTUSB_INTEL_NEW | 347 BTUSB_WIDEBAND_SPEECH }, 348 { USB_DEVICE(0x8087, 0x0aa7), .driver_info = BTUSB_INTEL | 349 BTUSB_WIDEBAND_SPEECH }, 350 { USB_DEVICE(0x8087, 0x0aaa), .driver_info = BTUSB_INTEL_NEW | 351 BTUSB_WIDEBAND_SPEECH }, 352 353 /* Other Intel Bluetooth devices */ 354 { USB_VENDOR_AND_INTERFACE_INFO(0x8087, 0xe0, 0x01, 0x01), 355 .driver_info = BTUSB_IGNORE }, 356 357 /* Realtek Bluetooth devices */ 358 { USB_VENDOR_AND_INTERFACE_INFO(0x0bda, 0xe0, 0x01, 0x01), 359 .driver_info = BTUSB_REALTEK }, 360 361 /* MediaTek Bluetooth devices */ 362 { USB_VENDOR_AND_INTERFACE_INFO(0x0e8d, 0xe0, 0x01, 0x01), 363 .driver_info = BTUSB_MEDIATEK }, 364 365 /* Additional Realtek 8723AE Bluetooth devices */ 366 { USB_DEVICE(0x0930, 0x021d), .driver_info = BTUSB_REALTEK }, 367 { USB_DEVICE(0x13d3, 0x3394), .driver_info = BTUSB_REALTEK }, 368 369 /* Additional Realtek 8723BE Bluetooth devices */ 370 { USB_DEVICE(0x0489, 0xe085), .driver_info = BTUSB_REALTEK }, 371 { USB_DEVICE(0x0489, 0xe08b), .driver_info = BTUSB_REALTEK }, 372 { USB_DEVICE(0x13d3, 0x3410), .driver_info = BTUSB_REALTEK }, 373 { USB_DEVICE(0x13d3, 0x3416), .driver_info = BTUSB_REALTEK }, 374 { USB_DEVICE(0x13d3, 0x3459), .driver_info = BTUSB_REALTEK }, 375 { USB_DEVICE(0x13d3, 0x3494), .driver_info = BTUSB_REALTEK }, 376 377 /* Additional Realtek 8723BU Bluetooth devices */ 378 { USB_DEVICE(0x7392, 0xa611), .driver_info = BTUSB_REALTEK }, 379 380 /* Additional Realtek 8723DE Bluetooth devices */ 381 { USB_DEVICE(0x0bda, 0xb009), .driver_info = BTUSB_REALTEK }, 382 { USB_DEVICE(0x2ff8, 0xb011), .driver_info = BTUSB_REALTEK }, 383 384 /* Additional Realtek 8821AE Bluetooth devices */ 385 { USB_DEVICE(0x0b05, 0x17dc), .driver_info = BTUSB_REALTEK }, 386 { USB_DEVICE(0x13d3, 0x3414), .driver_info = BTUSB_REALTEK }, 387 { USB_DEVICE(0x13d3, 0x3458), .driver_info = BTUSB_REALTEK }, 388 { USB_DEVICE(0x13d3, 0x3461), .driver_info = BTUSB_REALTEK }, 389 { USB_DEVICE(0x13d3, 0x3462), .driver_info = BTUSB_REALTEK }, 390 391 /* Additional Realtek 8822BE Bluetooth devices */ 392 { USB_DEVICE(0x13d3, 0x3526), .driver_info = BTUSB_REALTEK }, 393 { USB_DEVICE(0x0b05, 0x185c), .driver_info = BTUSB_REALTEK }, 394 395 /* Additional Realtek 8822CE Bluetooth devices */ 396 { USB_DEVICE(0x04ca, 0x4005), .driver_info = BTUSB_REALTEK }, 397 { USB_DEVICE(0x13d3, 0x3548), .driver_info = BTUSB_REALTEK }, 398 399 /* Silicon Wave based devices */ 400 { USB_DEVICE(0x0c10, 0x0000), .driver_info = BTUSB_SWAVE }, 401 402 { } /* Terminating entry */ 403 }; 404 405 /* The Bluetooth USB module build into some devices needs to be reset on resume, 406 * this is a problem with the platform (likely shutting off all power) not with 407 * the module itself. So we use a DMI list to match known broken platforms. 408 */ 409 static const struct dmi_system_id btusb_needs_reset_resume_table[] = { 410 { 411 /* Dell OptiPlex 3060 (QCA ROME device 0cf3:e007) */ 412 .matches = { 413 DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), 414 DMI_MATCH(DMI_PRODUCT_NAME, "OptiPlex 3060"), 415 }, 416 }, 417 { 418 /* Dell XPS 9360 (QCA ROME device 0cf3:e300) */ 419 .matches = { 420 DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), 421 DMI_MATCH(DMI_PRODUCT_NAME, "XPS 13 9360"), 422 }, 423 }, 424 { 425 /* Dell Inspiron 5565 (QCA ROME device 0cf3:e009) */ 426 .matches = { 427 DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), 428 DMI_MATCH(DMI_PRODUCT_NAME, "Inspiron 5565"), 429 }, 430 }, 431 {} 432 }; 433 434 #define BTUSB_MAX_ISOC_FRAMES 10 435 436 #define BTUSB_INTR_RUNNING 0 437 #define BTUSB_BULK_RUNNING 1 438 #define BTUSB_ISOC_RUNNING 2 439 #define BTUSB_SUSPENDING 3 440 #define BTUSB_DID_ISO_RESUME 4 441 #define BTUSB_BOOTLOADER 5 442 #define BTUSB_DOWNLOADING 6 443 #define BTUSB_FIRMWARE_LOADED 7 444 #define BTUSB_FIRMWARE_FAILED 8 445 #define BTUSB_BOOTING 9 446 #define BTUSB_DIAG_RUNNING 10 447 #define BTUSB_OOB_WAKE_ENABLED 11 448 #define BTUSB_HW_RESET_ACTIVE 12 449 #define BTUSB_TX_WAIT_VND_EVT 13 450 #define BTUSB_WAKEUP_DISABLE 14 451 452 struct btusb_data { 453 struct hci_dev *hdev; 454 struct usb_device *udev; 455 struct usb_interface *intf; 456 struct usb_interface *isoc; 457 struct usb_interface *diag; 458 unsigned isoc_ifnum; 459 460 unsigned long flags; 461 462 struct work_struct work; 463 struct work_struct waker; 464 465 struct usb_anchor deferred; 466 struct usb_anchor tx_anchor; 467 int tx_in_flight; 468 spinlock_t txlock; 469 470 struct usb_anchor intr_anchor; 471 struct usb_anchor bulk_anchor; 472 struct usb_anchor isoc_anchor; 473 struct usb_anchor diag_anchor; 474 struct usb_anchor ctrl_anchor; 475 spinlock_t rxlock; 476 477 struct sk_buff *evt_skb; 478 struct sk_buff *acl_skb; 479 struct sk_buff *sco_skb; 480 481 struct usb_endpoint_descriptor *intr_ep; 482 struct usb_endpoint_descriptor *bulk_tx_ep; 483 struct usb_endpoint_descriptor *bulk_rx_ep; 484 struct usb_endpoint_descriptor *isoc_tx_ep; 485 struct usb_endpoint_descriptor *isoc_rx_ep; 486 struct usb_endpoint_descriptor *diag_tx_ep; 487 struct usb_endpoint_descriptor *diag_rx_ep; 488 489 struct gpio_desc *reset_gpio; 490 491 __u8 cmdreq_type; 492 __u8 cmdreq; 493 494 unsigned int sco_num; 495 unsigned int air_mode; 496 bool usb_alt6_packet_flow; 497 int isoc_altsetting; 498 int suspend_count; 499 500 int (*recv_event)(struct hci_dev *hdev, struct sk_buff *skb); 501 int (*recv_bulk)(struct btusb_data *data, void *buffer, int count); 502 503 int (*setup_on_usb)(struct hci_dev *hdev); 504 505 int oob_wake_irq; /* irq for out-of-band wake-on-bt */ 506 unsigned cmd_timeout_cnt; 507 }; 508 509 510 static void btusb_intel_cmd_timeout(struct hci_dev *hdev) 511 { 512 struct btusb_data *data = hci_get_drvdata(hdev); 513 struct gpio_desc *reset_gpio = data->reset_gpio; 514 515 if (++data->cmd_timeout_cnt < 5) 516 return; 517 518 if (!reset_gpio) { 519 bt_dev_err(hdev, "No way to reset. Ignoring and continuing"); 520 return; 521 } 522 523 /* 524 * Toggle the hard reset line if the platform provides one. The reset 525 * is going to yank the device off the USB and then replug. So doing 526 * once is enough. The cleanup is handled correctly on the way out 527 * (standard USB disconnect), and the new device is detected cleanly 528 * and bound to the driver again like it should be. 529 */ 530 if (test_and_set_bit(BTUSB_HW_RESET_ACTIVE, &data->flags)) { 531 bt_dev_err(hdev, "last reset failed? Not resetting again"); 532 return; 533 } 534 535 bt_dev_err(hdev, "Initiating HW reset via gpio"); 536 gpiod_set_value_cansleep(reset_gpio, 1); 537 msleep(100); 538 gpiod_set_value_cansleep(reset_gpio, 0); 539 } 540 541 static void btusb_rtl_cmd_timeout(struct hci_dev *hdev) 542 { 543 struct btusb_data *data = hci_get_drvdata(hdev); 544 struct gpio_desc *reset_gpio = data->reset_gpio; 545 546 if (++data->cmd_timeout_cnt < 5) 547 return; 548 549 if (!reset_gpio) { 550 bt_dev_err(hdev, "No gpio to reset Realtek device, ignoring"); 551 return; 552 } 553 554 /* Toggle the hard reset line. The Realtek device is going to 555 * yank itself off the USB and then replug. The cleanup is handled 556 * correctly on the way out (standard USB disconnect), and the new 557 * device is detected cleanly and bound to the driver again like 558 * it should be. 559 */ 560 if (test_and_set_bit(BTUSB_HW_RESET_ACTIVE, &data->flags)) { 561 bt_dev_err(hdev, "last reset failed? Not resetting again"); 562 return; 563 } 564 565 bt_dev_err(hdev, "Reset Realtek device via gpio"); 566 gpiod_set_value_cansleep(reset_gpio, 1); 567 msleep(200); 568 gpiod_set_value_cansleep(reset_gpio, 0); 569 } 570 571 static inline void btusb_free_frags(struct btusb_data *data) 572 { 573 unsigned long flags; 574 575 spin_lock_irqsave(&data->rxlock, flags); 576 577 kfree_skb(data->evt_skb); 578 data->evt_skb = NULL; 579 580 kfree_skb(data->acl_skb); 581 data->acl_skb = NULL; 582 583 kfree_skb(data->sco_skb); 584 data->sco_skb = NULL; 585 586 spin_unlock_irqrestore(&data->rxlock, flags); 587 } 588 589 static int btusb_recv_intr(struct btusb_data *data, void *buffer, int count) 590 { 591 struct sk_buff *skb; 592 unsigned long flags; 593 int err = 0; 594 595 spin_lock_irqsave(&data->rxlock, flags); 596 skb = data->evt_skb; 597 598 while (count) { 599 int len; 600 601 if (!skb) { 602 skb = bt_skb_alloc(HCI_MAX_EVENT_SIZE, GFP_ATOMIC); 603 if (!skb) { 604 err = -ENOMEM; 605 break; 606 } 607 608 hci_skb_pkt_type(skb) = HCI_EVENT_PKT; 609 hci_skb_expect(skb) = HCI_EVENT_HDR_SIZE; 610 } 611 612 len = min_t(uint, hci_skb_expect(skb), count); 613 skb_put_data(skb, buffer, len); 614 615 count -= len; 616 buffer += len; 617 hci_skb_expect(skb) -= len; 618 619 if (skb->len == HCI_EVENT_HDR_SIZE) { 620 /* Complete event header */ 621 hci_skb_expect(skb) = hci_event_hdr(skb)->plen; 622 623 if (skb_tailroom(skb) < hci_skb_expect(skb)) { 624 kfree_skb(skb); 625 skb = NULL; 626 627 err = -EILSEQ; 628 break; 629 } 630 } 631 632 if (!hci_skb_expect(skb)) { 633 /* Complete frame */ 634 data->recv_event(data->hdev, skb); 635 skb = NULL; 636 } 637 } 638 639 data->evt_skb = skb; 640 spin_unlock_irqrestore(&data->rxlock, flags); 641 642 return err; 643 } 644 645 static int btusb_recv_bulk(struct btusb_data *data, void *buffer, int count) 646 { 647 struct sk_buff *skb; 648 unsigned long flags; 649 int err = 0; 650 651 spin_lock_irqsave(&data->rxlock, flags); 652 skb = data->acl_skb; 653 654 while (count) { 655 int len; 656 657 if (!skb) { 658 skb = bt_skb_alloc(HCI_MAX_FRAME_SIZE, GFP_ATOMIC); 659 if (!skb) { 660 err = -ENOMEM; 661 break; 662 } 663 664 hci_skb_pkt_type(skb) = HCI_ACLDATA_PKT; 665 hci_skb_expect(skb) = HCI_ACL_HDR_SIZE; 666 } 667 668 len = min_t(uint, hci_skb_expect(skb), count); 669 skb_put_data(skb, buffer, len); 670 671 count -= len; 672 buffer += len; 673 hci_skb_expect(skb) -= len; 674 675 if (skb->len == HCI_ACL_HDR_SIZE) { 676 __le16 dlen = hci_acl_hdr(skb)->dlen; 677 678 /* Complete ACL header */ 679 hci_skb_expect(skb) = __le16_to_cpu(dlen); 680 681 if (skb_tailroom(skb) < hci_skb_expect(skb)) { 682 kfree_skb(skb); 683 skb = NULL; 684 685 err = -EILSEQ; 686 break; 687 } 688 } 689 690 if (!hci_skb_expect(skb)) { 691 /* Complete frame */ 692 hci_recv_frame(data->hdev, skb); 693 skb = NULL; 694 } 695 } 696 697 data->acl_skb = skb; 698 spin_unlock_irqrestore(&data->rxlock, flags); 699 700 return err; 701 } 702 703 static int btusb_recv_isoc(struct btusb_data *data, void *buffer, int count) 704 { 705 struct sk_buff *skb; 706 unsigned long flags; 707 int err = 0; 708 709 spin_lock_irqsave(&data->rxlock, flags); 710 skb = data->sco_skb; 711 712 while (count) { 713 int len; 714 715 if (!skb) { 716 skb = bt_skb_alloc(HCI_MAX_SCO_SIZE, GFP_ATOMIC); 717 if (!skb) { 718 err = -ENOMEM; 719 break; 720 } 721 722 hci_skb_pkt_type(skb) = HCI_SCODATA_PKT; 723 hci_skb_expect(skb) = HCI_SCO_HDR_SIZE; 724 } 725 726 len = min_t(uint, hci_skb_expect(skb), count); 727 skb_put_data(skb, buffer, len); 728 729 count -= len; 730 buffer += len; 731 hci_skb_expect(skb) -= len; 732 733 if (skb->len == HCI_SCO_HDR_SIZE) { 734 /* Complete SCO header */ 735 hci_skb_expect(skb) = hci_sco_hdr(skb)->dlen; 736 737 if (skb_tailroom(skb) < hci_skb_expect(skb)) { 738 kfree_skb(skb); 739 skb = NULL; 740 741 err = -EILSEQ; 742 break; 743 } 744 } 745 746 if (!hci_skb_expect(skb)) { 747 /* Complete frame */ 748 hci_recv_frame(data->hdev, skb); 749 skb = NULL; 750 } 751 } 752 753 data->sco_skb = skb; 754 spin_unlock_irqrestore(&data->rxlock, flags); 755 756 return err; 757 } 758 759 static void btusb_intr_complete(struct urb *urb) 760 { 761 struct hci_dev *hdev = urb->context; 762 struct btusb_data *data = hci_get_drvdata(hdev); 763 int err; 764 765 BT_DBG("%s urb %p status %d count %d", hdev->name, urb, urb->status, 766 urb->actual_length); 767 768 if (!test_bit(HCI_RUNNING, &hdev->flags)) 769 return; 770 771 if (urb->status == 0) { 772 hdev->stat.byte_rx += urb->actual_length; 773 774 if (btusb_recv_intr(data, urb->transfer_buffer, 775 urb->actual_length) < 0) { 776 bt_dev_err(hdev, "corrupted event packet"); 777 hdev->stat.err_rx++; 778 } 779 } else if (urb->status == -ENOENT) { 780 /* Avoid suspend failed when usb_kill_urb */ 781 return; 782 } 783 784 if (!test_bit(BTUSB_INTR_RUNNING, &data->flags)) 785 return; 786 787 usb_mark_last_busy(data->udev); 788 usb_anchor_urb(urb, &data->intr_anchor); 789 790 err = usb_submit_urb(urb, GFP_ATOMIC); 791 if (err < 0) { 792 /* -EPERM: urb is being killed; 793 * -ENODEV: device got disconnected 794 */ 795 if (err != -EPERM && err != -ENODEV) 796 bt_dev_err(hdev, "urb %p failed to resubmit (%d)", 797 urb, -err); 798 usb_unanchor_urb(urb); 799 } 800 } 801 802 static int btusb_submit_intr_urb(struct hci_dev *hdev, gfp_t mem_flags) 803 { 804 struct btusb_data *data = hci_get_drvdata(hdev); 805 struct urb *urb; 806 unsigned char *buf; 807 unsigned int pipe; 808 int err, size; 809 810 BT_DBG("%s", hdev->name); 811 812 if (!data->intr_ep) 813 return -ENODEV; 814 815 urb = usb_alloc_urb(0, mem_flags); 816 if (!urb) 817 return -ENOMEM; 818 819 size = le16_to_cpu(data->intr_ep->wMaxPacketSize); 820 821 buf = kmalloc(size, mem_flags); 822 if (!buf) { 823 usb_free_urb(urb); 824 return -ENOMEM; 825 } 826 827 pipe = usb_rcvintpipe(data->udev, data->intr_ep->bEndpointAddress); 828 829 usb_fill_int_urb(urb, data->udev, pipe, buf, size, 830 btusb_intr_complete, hdev, data->intr_ep->bInterval); 831 832 urb->transfer_flags |= URB_FREE_BUFFER; 833 834 usb_anchor_urb(urb, &data->intr_anchor); 835 836 err = usb_submit_urb(urb, mem_flags); 837 if (err < 0) { 838 if (err != -EPERM && err != -ENODEV) 839 bt_dev_err(hdev, "urb %p submission failed (%d)", 840 urb, -err); 841 usb_unanchor_urb(urb); 842 } 843 844 usb_free_urb(urb); 845 846 return err; 847 } 848 849 static void btusb_bulk_complete(struct urb *urb) 850 { 851 struct hci_dev *hdev = urb->context; 852 struct btusb_data *data = hci_get_drvdata(hdev); 853 int err; 854 855 BT_DBG("%s urb %p status %d count %d", hdev->name, urb, urb->status, 856 urb->actual_length); 857 858 if (!test_bit(HCI_RUNNING, &hdev->flags)) 859 return; 860 861 if (urb->status == 0) { 862 hdev->stat.byte_rx += urb->actual_length; 863 864 if (data->recv_bulk(data, urb->transfer_buffer, 865 urb->actual_length) < 0) { 866 bt_dev_err(hdev, "corrupted ACL packet"); 867 hdev->stat.err_rx++; 868 } 869 } else if (urb->status == -ENOENT) { 870 /* Avoid suspend failed when usb_kill_urb */ 871 return; 872 } 873 874 if (!test_bit(BTUSB_BULK_RUNNING, &data->flags)) 875 return; 876 877 usb_anchor_urb(urb, &data->bulk_anchor); 878 usb_mark_last_busy(data->udev); 879 880 err = usb_submit_urb(urb, GFP_ATOMIC); 881 if (err < 0) { 882 /* -EPERM: urb is being killed; 883 * -ENODEV: device got disconnected 884 */ 885 if (err != -EPERM && err != -ENODEV) 886 bt_dev_err(hdev, "urb %p failed to resubmit (%d)", 887 urb, -err); 888 usb_unanchor_urb(urb); 889 } 890 } 891 892 static int btusb_submit_bulk_urb(struct hci_dev *hdev, gfp_t mem_flags) 893 { 894 struct btusb_data *data = hci_get_drvdata(hdev); 895 struct urb *urb; 896 unsigned char *buf; 897 unsigned int pipe; 898 int err, size = HCI_MAX_FRAME_SIZE; 899 900 BT_DBG("%s", hdev->name); 901 902 if (!data->bulk_rx_ep) 903 return -ENODEV; 904 905 urb = usb_alloc_urb(0, mem_flags); 906 if (!urb) 907 return -ENOMEM; 908 909 buf = kmalloc(size, mem_flags); 910 if (!buf) { 911 usb_free_urb(urb); 912 return -ENOMEM; 913 } 914 915 pipe = usb_rcvbulkpipe(data->udev, data->bulk_rx_ep->bEndpointAddress); 916 917 usb_fill_bulk_urb(urb, data->udev, pipe, buf, size, 918 btusb_bulk_complete, hdev); 919 920 urb->transfer_flags |= URB_FREE_BUFFER; 921 922 usb_mark_last_busy(data->udev); 923 usb_anchor_urb(urb, &data->bulk_anchor); 924 925 err = usb_submit_urb(urb, mem_flags); 926 if (err < 0) { 927 if (err != -EPERM && err != -ENODEV) 928 bt_dev_err(hdev, "urb %p submission failed (%d)", 929 urb, -err); 930 usb_unanchor_urb(urb); 931 } 932 933 usb_free_urb(urb); 934 935 return err; 936 } 937 938 static void btusb_isoc_complete(struct urb *urb) 939 { 940 struct hci_dev *hdev = urb->context; 941 struct btusb_data *data = hci_get_drvdata(hdev); 942 int i, err; 943 944 BT_DBG("%s urb %p status %d count %d", hdev->name, urb, urb->status, 945 urb->actual_length); 946 947 if (!test_bit(HCI_RUNNING, &hdev->flags)) 948 return; 949 950 if (urb->status == 0) { 951 for (i = 0; i < urb->number_of_packets; i++) { 952 unsigned int offset = urb->iso_frame_desc[i].offset; 953 unsigned int length = urb->iso_frame_desc[i].actual_length; 954 955 if (urb->iso_frame_desc[i].status) 956 continue; 957 958 hdev->stat.byte_rx += length; 959 960 if (btusb_recv_isoc(data, urb->transfer_buffer + offset, 961 length) < 0) { 962 bt_dev_err(hdev, "corrupted SCO packet"); 963 hdev->stat.err_rx++; 964 } 965 } 966 } else if (urb->status == -ENOENT) { 967 /* Avoid suspend failed when usb_kill_urb */ 968 return; 969 } 970 971 if (!test_bit(BTUSB_ISOC_RUNNING, &data->flags)) 972 return; 973 974 usb_anchor_urb(urb, &data->isoc_anchor); 975 976 err = usb_submit_urb(urb, GFP_ATOMIC); 977 if (err < 0) { 978 /* -EPERM: urb is being killed; 979 * -ENODEV: device got disconnected 980 */ 981 if (err != -EPERM && err != -ENODEV) 982 bt_dev_err(hdev, "urb %p failed to resubmit (%d)", 983 urb, -err); 984 usb_unanchor_urb(urb); 985 } 986 } 987 988 static inline void __fill_isoc_descriptor_msbc(struct urb *urb, int len, 989 int mtu, struct btusb_data *data) 990 { 991 int i, offset = 0; 992 unsigned int interval; 993 994 BT_DBG("len %d mtu %d", len, mtu); 995 996 /* For mSBC ALT 6 setting the host will send the packet at continuous 997 * flow. As per core spec 5, vol 4, part B, table 2.1. For ALT setting 998 * 6 the HCI PACKET INTERVAL should be 7.5ms for every usb packets. 999 * To maintain the rate we send 63bytes of usb packets alternatively for 1000 * 7ms and 8ms to maintain the rate as 7.5ms. 1001 */ 1002 if (data->usb_alt6_packet_flow) { 1003 interval = 7; 1004 data->usb_alt6_packet_flow = false; 1005 } else { 1006 interval = 6; 1007 data->usb_alt6_packet_flow = true; 1008 } 1009 1010 for (i = 0; i < interval; i++) { 1011 urb->iso_frame_desc[i].offset = offset; 1012 urb->iso_frame_desc[i].length = offset; 1013 } 1014 1015 if (len && i < BTUSB_MAX_ISOC_FRAMES) { 1016 urb->iso_frame_desc[i].offset = offset; 1017 urb->iso_frame_desc[i].length = len; 1018 i++; 1019 } 1020 1021 urb->number_of_packets = i; 1022 } 1023 1024 static inline void __fill_isoc_descriptor(struct urb *urb, int len, int mtu) 1025 { 1026 int i, offset = 0; 1027 1028 BT_DBG("len %d mtu %d", len, mtu); 1029 1030 for (i = 0; i < BTUSB_MAX_ISOC_FRAMES && len >= mtu; 1031 i++, offset += mtu, len -= mtu) { 1032 urb->iso_frame_desc[i].offset = offset; 1033 urb->iso_frame_desc[i].length = mtu; 1034 } 1035 1036 if (len && i < BTUSB_MAX_ISOC_FRAMES) { 1037 urb->iso_frame_desc[i].offset = offset; 1038 urb->iso_frame_desc[i].length = len; 1039 i++; 1040 } 1041 1042 urb->number_of_packets = i; 1043 } 1044 1045 static int btusb_submit_isoc_urb(struct hci_dev *hdev, gfp_t mem_flags) 1046 { 1047 struct btusb_data *data = hci_get_drvdata(hdev); 1048 struct urb *urb; 1049 unsigned char *buf; 1050 unsigned int pipe; 1051 int err, size; 1052 1053 BT_DBG("%s", hdev->name); 1054 1055 if (!data->isoc_rx_ep) 1056 return -ENODEV; 1057 1058 urb = usb_alloc_urb(BTUSB_MAX_ISOC_FRAMES, mem_flags); 1059 if (!urb) 1060 return -ENOMEM; 1061 1062 size = le16_to_cpu(data->isoc_rx_ep->wMaxPacketSize) * 1063 BTUSB_MAX_ISOC_FRAMES; 1064 1065 buf = kmalloc(size, mem_flags); 1066 if (!buf) { 1067 usb_free_urb(urb); 1068 return -ENOMEM; 1069 } 1070 1071 pipe = usb_rcvisocpipe(data->udev, data->isoc_rx_ep->bEndpointAddress); 1072 1073 usb_fill_int_urb(urb, data->udev, pipe, buf, size, btusb_isoc_complete, 1074 hdev, data->isoc_rx_ep->bInterval); 1075 1076 urb->transfer_flags = URB_FREE_BUFFER | URB_ISO_ASAP; 1077 1078 __fill_isoc_descriptor(urb, size, 1079 le16_to_cpu(data->isoc_rx_ep->wMaxPacketSize)); 1080 1081 usb_anchor_urb(urb, &data->isoc_anchor); 1082 1083 err = usb_submit_urb(urb, mem_flags); 1084 if (err < 0) { 1085 if (err != -EPERM && err != -ENODEV) 1086 bt_dev_err(hdev, "urb %p submission failed (%d)", 1087 urb, -err); 1088 usb_unanchor_urb(urb); 1089 } 1090 1091 usb_free_urb(urb); 1092 1093 return err; 1094 } 1095 1096 static void btusb_diag_complete(struct urb *urb) 1097 { 1098 struct hci_dev *hdev = urb->context; 1099 struct btusb_data *data = hci_get_drvdata(hdev); 1100 int err; 1101 1102 BT_DBG("%s urb %p status %d count %d", hdev->name, urb, urb->status, 1103 urb->actual_length); 1104 1105 if (urb->status == 0) { 1106 struct sk_buff *skb; 1107 1108 skb = bt_skb_alloc(urb->actual_length, GFP_ATOMIC); 1109 if (skb) { 1110 skb_put_data(skb, urb->transfer_buffer, 1111 urb->actual_length); 1112 hci_recv_diag(hdev, skb); 1113 } 1114 } else if (urb->status == -ENOENT) { 1115 /* Avoid suspend failed when usb_kill_urb */ 1116 return; 1117 } 1118 1119 if (!test_bit(BTUSB_DIAG_RUNNING, &data->flags)) 1120 return; 1121 1122 usb_anchor_urb(urb, &data->diag_anchor); 1123 usb_mark_last_busy(data->udev); 1124 1125 err = usb_submit_urb(urb, GFP_ATOMIC); 1126 if (err < 0) { 1127 /* -EPERM: urb is being killed; 1128 * -ENODEV: device got disconnected 1129 */ 1130 if (err != -EPERM && err != -ENODEV) 1131 bt_dev_err(hdev, "urb %p failed to resubmit (%d)", 1132 urb, -err); 1133 usb_unanchor_urb(urb); 1134 } 1135 } 1136 1137 static int btusb_submit_diag_urb(struct hci_dev *hdev, gfp_t mem_flags) 1138 { 1139 struct btusb_data *data = hci_get_drvdata(hdev); 1140 struct urb *urb; 1141 unsigned char *buf; 1142 unsigned int pipe; 1143 int err, size = HCI_MAX_FRAME_SIZE; 1144 1145 BT_DBG("%s", hdev->name); 1146 1147 if (!data->diag_rx_ep) 1148 return -ENODEV; 1149 1150 urb = usb_alloc_urb(0, mem_flags); 1151 if (!urb) 1152 return -ENOMEM; 1153 1154 buf = kmalloc(size, mem_flags); 1155 if (!buf) { 1156 usb_free_urb(urb); 1157 return -ENOMEM; 1158 } 1159 1160 pipe = usb_rcvbulkpipe(data->udev, data->diag_rx_ep->bEndpointAddress); 1161 1162 usb_fill_bulk_urb(urb, data->udev, pipe, buf, size, 1163 btusb_diag_complete, hdev); 1164 1165 urb->transfer_flags |= URB_FREE_BUFFER; 1166 1167 usb_mark_last_busy(data->udev); 1168 usb_anchor_urb(urb, &data->diag_anchor); 1169 1170 err = usb_submit_urb(urb, mem_flags); 1171 if (err < 0) { 1172 if (err != -EPERM && err != -ENODEV) 1173 bt_dev_err(hdev, "urb %p submission failed (%d)", 1174 urb, -err); 1175 usb_unanchor_urb(urb); 1176 } 1177 1178 usb_free_urb(urb); 1179 1180 return err; 1181 } 1182 1183 static void btusb_tx_complete(struct urb *urb) 1184 { 1185 struct sk_buff *skb = urb->context; 1186 struct hci_dev *hdev = (struct hci_dev *)skb->dev; 1187 struct btusb_data *data = hci_get_drvdata(hdev); 1188 unsigned long flags; 1189 1190 BT_DBG("%s urb %p status %d count %d", hdev->name, urb, urb->status, 1191 urb->actual_length); 1192 1193 if (!test_bit(HCI_RUNNING, &hdev->flags)) 1194 goto done; 1195 1196 if (!urb->status) 1197 hdev->stat.byte_tx += urb->transfer_buffer_length; 1198 else 1199 hdev->stat.err_tx++; 1200 1201 done: 1202 spin_lock_irqsave(&data->txlock, flags); 1203 data->tx_in_flight--; 1204 spin_unlock_irqrestore(&data->txlock, flags); 1205 1206 kfree(urb->setup_packet); 1207 1208 kfree_skb(skb); 1209 } 1210 1211 static void btusb_isoc_tx_complete(struct urb *urb) 1212 { 1213 struct sk_buff *skb = urb->context; 1214 struct hci_dev *hdev = (struct hci_dev *)skb->dev; 1215 1216 BT_DBG("%s urb %p status %d count %d", hdev->name, urb, urb->status, 1217 urb->actual_length); 1218 1219 if (!test_bit(HCI_RUNNING, &hdev->flags)) 1220 goto done; 1221 1222 if (!urb->status) 1223 hdev->stat.byte_tx += urb->transfer_buffer_length; 1224 else 1225 hdev->stat.err_tx++; 1226 1227 done: 1228 kfree(urb->setup_packet); 1229 1230 kfree_skb(skb); 1231 } 1232 1233 static int btusb_open(struct hci_dev *hdev) 1234 { 1235 struct btusb_data *data = hci_get_drvdata(hdev); 1236 int err; 1237 1238 BT_DBG("%s", hdev->name); 1239 1240 err = usb_autopm_get_interface(data->intf); 1241 if (err < 0) 1242 return err; 1243 1244 /* Patching USB firmware files prior to starting any URBs of HCI path 1245 * It is more safe to use USB bulk channel for downloading USB patch 1246 */ 1247 if (data->setup_on_usb) { 1248 err = data->setup_on_usb(hdev); 1249 if (err < 0) 1250 goto setup_fail; 1251 } 1252 1253 data->intf->needs_remote_wakeup = 1; 1254 1255 /* Disable device remote wakeup when host is suspended 1256 * For Realtek chips, global suspend without 1257 * SET_FEATURE (DEVICE_REMOTE_WAKEUP) can save more power in device. 1258 */ 1259 if (test_bit(BTUSB_WAKEUP_DISABLE, &data->flags)) 1260 device_wakeup_disable(&data->udev->dev); 1261 1262 if (test_and_set_bit(BTUSB_INTR_RUNNING, &data->flags)) 1263 goto done; 1264 1265 err = btusb_submit_intr_urb(hdev, GFP_KERNEL); 1266 if (err < 0) 1267 goto failed; 1268 1269 err = btusb_submit_bulk_urb(hdev, GFP_KERNEL); 1270 if (err < 0) { 1271 usb_kill_anchored_urbs(&data->intr_anchor); 1272 goto failed; 1273 } 1274 1275 set_bit(BTUSB_BULK_RUNNING, &data->flags); 1276 btusb_submit_bulk_urb(hdev, GFP_KERNEL); 1277 1278 if (data->diag) { 1279 if (!btusb_submit_diag_urb(hdev, GFP_KERNEL)) 1280 set_bit(BTUSB_DIAG_RUNNING, &data->flags); 1281 } 1282 1283 done: 1284 usb_autopm_put_interface(data->intf); 1285 return 0; 1286 1287 failed: 1288 clear_bit(BTUSB_INTR_RUNNING, &data->flags); 1289 setup_fail: 1290 usb_autopm_put_interface(data->intf); 1291 return err; 1292 } 1293 1294 static void btusb_stop_traffic(struct btusb_data *data) 1295 { 1296 usb_kill_anchored_urbs(&data->intr_anchor); 1297 usb_kill_anchored_urbs(&data->bulk_anchor); 1298 usb_kill_anchored_urbs(&data->isoc_anchor); 1299 usb_kill_anchored_urbs(&data->diag_anchor); 1300 usb_kill_anchored_urbs(&data->ctrl_anchor); 1301 } 1302 1303 static int btusb_close(struct hci_dev *hdev) 1304 { 1305 struct btusb_data *data = hci_get_drvdata(hdev); 1306 int err; 1307 1308 BT_DBG("%s", hdev->name); 1309 1310 cancel_work_sync(&data->work); 1311 cancel_work_sync(&data->waker); 1312 1313 clear_bit(BTUSB_ISOC_RUNNING, &data->flags); 1314 clear_bit(BTUSB_BULK_RUNNING, &data->flags); 1315 clear_bit(BTUSB_INTR_RUNNING, &data->flags); 1316 clear_bit(BTUSB_DIAG_RUNNING, &data->flags); 1317 1318 btusb_stop_traffic(data); 1319 btusb_free_frags(data); 1320 1321 err = usb_autopm_get_interface(data->intf); 1322 if (err < 0) 1323 goto failed; 1324 1325 data->intf->needs_remote_wakeup = 0; 1326 1327 /* Enable remote wake up for auto-suspend */ 1328 if (test_bit(BTUSB_WAKEUP_DISABLE, &data->flags)) 1329 data->intf->needs_remote_wakeup = 1; 1330 1331 usb_autopm_put_interface(data->intf); 1332 1333 failed: 1334 usb_scuttle_anchored_urbs(&data->deferred); 1335 return 0; 1336 } 1337 1338 static int btusb_flush(struct hci_dev *hdev) 1339 { 1340 struct btusb_data *data = hci_get_drvdata(hdev); 1341 1342 BT_DBG("%s", hdev->name); 1343 1344 usb_kill_anchored_urbs(&data->tx_anchor); 1345 btusb_free_frags(data); 1346 1347 return 0; 1348 } 1349 1350 static struct urb *alloc_ctrl_urb(struct hci_dev *hdev, struct sk_buff *skb) 1351 { 1352 struct btusb_data *data = hci_get_drvdata(hdev); 1353 struct usb_ctrlrequest *dr; 1354 struct urb *urb; 1355 unsigned int pipe; 1356 1357 urb = usb_alloc_urb(0, GFP_KERNEL); 1358 if (!urb) 1359 return ERR_PTR(-ENOMEM); 1360 1361 dr = kmalloc(sizeof(*dr), GFP_KERNEL); 1362 if (!dr) { 1363 usb_free_urb(urb); 1364 return ERR_PTR(-ENOMEM); 1365 } 1366 1367 dr->bRequestType = data->cmdreq_type; 1368 dr->bRequest = data->cmdreq; 1369 dr->wIndex = 0; 1370 dr->wValue = 0; 1371 dr->wLength = __cpu_to_le16(skb->len); 1372 1373 pipe = usb_sndctrlpipe(data->udev, 0x00); 1374 1375 usb_fill_control_urb(urb, data->udev, pipe, (void *)dr, 1376 skb->data, skb->len, btusb_tx_complete, skb); 1377 1378 skb->dev = (void *)hdev; 1379 1380 return urb; 1381 } 1382 1383 static struct urb *alloc_bulk_urb(struct hci_dev *hdev, struct sk_buff *skb) 1384 { 1385 struct btusb_data *data = hci_get_drvdata(hdev); 1386 struct urb *urb; 1387 unsigned int pipe; 1388 1389 if (!data->bulk_tx_ep) 1390 return ERR_PTR(-ENODEV); 1391 1392 urb = usb_alloc_urb(0, GFP_KERNEL); 1393 if (!urb) 1394 return ERR_PTR(-ENOMEM); 1395 1396 pipe = usb_sndbulkpipe(data->udev, data->bulk_tx_ep->bEndpointAddress); 1397 1398 usb_fill_bulk_urb(urb, data->udev, pipe, 1399 skb->data, skb->len, btusb_tx_complete, skb); 1400 1401 skb->dev = (void *)hdev; 1402 1403 return urb; 1404 } 1405 1406 static struct urb *alloc_isoc_urb(struct hci_dev *hdev, struct sk_buff *skb) 1407 { 1408 struct btusb_data *data = hci_get_drvdata(hdev); 1409 struct urb *urb; 1410 unsigned int pipe; 1411 1412 if (!data->isoc_tx_ep) 1413 return ERR_PTR(-ENODEV); 1414 1415 urb = usb_alloc_urb(BTUSB_MAX_ISOC_FRAMES, GFP_KERNEL); 1416 if (!urb) 1417 return ERR_PTR(-ENOMEM); 1418 1419 pipe = usb_sndisocpipe(data->udev, data->isoc_tx_ep->bEndpointAddress); 1420 1421 usb_fill_int_urb(urb, data->udev, pipe, 1422 skb->data, skb->len, btusb_isoc_tx_complete, 1423 skb, data->isoc_tx_ep->bInterval); 1424 1425 urb->transfer_flags = URB_ISO_ASAP; 1426 1427 if (data->isoc_altsetting == 6) 1428 __fill_isoc_descriptor_msbc(urb, skb->len, 1429 le16_to_cpu(data->isoc_tx_ep->wMaxPacketSize), 1430 data); 1431 else 1432 __fill_isoc_descriptor(urb, skb->len, 1433 le16_to_cpu(data->isoc_tx_ep->wMaxPacketSize)); 1434 skb->dev = (void *)hdev; 1435 1436 return urb; 1437 } 1438 1439 static int submit_tx_urb(struct hci_dev *hdev, struct urb *urb) 1440 { 1441 struct btusb_data *data = hci_get_drvdata(hdev); 1442 int err; 1443 1444 usb_anchor_urb(urb, &data->tx_anchor); 1445 1446 err = usb_submit_urb(urb, GFP_KERNEL); 1447 if (err < 0) { 1448 if (err != -EPERM && err != -ENODEV) 1449 bt_dev_err(hdev, "urb %p submission failed (%d)", 1450 urb, -err); 1451 kfree(urb->setup_packet); 1452 usb_unanchor_urb(urb); 1453 } else { 1454 usb_mark_last_busy(data->udev); 1455 } 1456 1457 usb_free_urb(urb); 1458 return err; 1459 } 1460 1461 static int submit_or_queue_tx_urb(struct hci_dev *hdev, struct urb *urb) 1462 { 1463 struct btusb_data *data = hci_get_drvdata(hdev); 1464 unsigned long flags; 1465 bool suspending; 1466 1467 spin_lock_irqsave(&data->txlock, flags); 1468 suspending = test_bit(BTUSB_SUSPENDING, &data->flags); 1469 if (!suspending) 1470 data->tx_in_flight++; 1471 spin_unlock_irqrestore(&data->txlock, flags); 1472 1473 if (!suspending) 1474 return submit_tx_urb(hdev, urb); 1475 1476 usb_anchor_urb(urb, &data->deferred); 1477 schedule_work(&data->waker); 1478 1479 usb_free_urb(urb); 1480 return 0; 1481 } 1482 1483 static int btusb_send_frame(struct hci_dev *hdev, struct sk_buff *skb) 1484 { 1485 struct urb *urb; 1486 1487 BT_DBG("%s", hdev->name); 1488 1489 switch (hci_skb_pkt_type(skb)) { 1490 case HCI_COMMAND_PKT: 1491 urb = alloc_ctrl_urb(hdev, skb); 1492 if (IS_ERR(urb)) 1493 return PTR_ERR(urb); 1494 1495 hdev->stat.cmd_tx++; 1496 return submit_or_queue_tx_urb(hdev, urb); 1497 1498 case HCI_ACLDATA_PKT: 1499 urb = alloc_bulk_urb(hdev, skb); 1500 if (IS_ERR(urb)) 1501 return PTR_ERR(urb); 1502 1503 hdev->stat.acl_tx++; 1504 return submit_or_queue_tx_urb(hdev, urb); 1505 1506 case HCI_SCODATA_PKT: 1507 if (hci_conn_num(hdev, SCO_LINK) < 1) 1508 return -ENODEV; 1509 1510 urb = alloc_isoc_urb(hdev, skb); 1511 if (IS_ERR(urb)) 1512 return PTR_ERR(urb); 1513 1514 hdev->stat.sco_tx++; 1515 return submit_tx_urb(hdev, urb); 1516 } 1517 1518 return -EILSEQ; 1519 } 1520 1521 static void btusb_notify(struct hci_dev *hdev, unsigned int evt) 1522 { 1523 struct btusb_data *data = hci_get_drvdata(hdev); 1524 1525 BT_DBG("%s evt %d", hdev->name, evt); 1526 1527 if (hci_conn_num(hdev, SCO_LINK) != data->sco_num) { 1528 data->sco_num = hci_conn_num(hdev, SCO_LINK); 1529 data->air_mode = evt; 1530 schedule_work(&data->work); 1531 } 1532 } 1533 1534 static inline int __set_isoc_interface(struct hci_dev *hdev, int altsetting) 1535 { 1536 struct btusb_data *data = hci_get_drvdata(hdev); 1537 struct usb_interface *intf = data->isoc; 1538 struct usb_endpoint_descriptor *ep_desc; 1539 int i, err; 1540 1541 if (!data->isoc) 1542 return -ENODEV; 1543 1544 err = usb_set_interface(data->udev, data->isoc_ifnum, altsetting); 1545 if (err < 0) { 1546 bt_dev_err(hdev, "setting interface failed (%d)", -err); 1547 return err; 1548 } 1549 1550 data->isoc_altsetting = altsetting; 1551 1552 data->isoc_tx_ep = NULL; 1553 data->isoc_rx_ep = NULL; 1554 1555 for (i = 0; i < intf->cur_altsetting->desc.bNumEndpoints; i++) { 1556 ep_desc = &intf->cur_altsetting->endpoint[i].desc; 1557 1558 if (!data->isoc_tx_ep && usb_endpoint_is_isoc_out(ep_desc)) { 1559 data->isoc_tx_ep = ep_desc; 1560 continue; 1561 } 1562 1563 if (!data->isoc_rx_ep && usb_endpoint_is_isoc_in(ep_desc)) { 1564 data->isoc_rx_ep = ep_desc; 1565 continue; 1566 } 1567 } 1568 1569 if (!data->isoc_tx_ep || !data->isoc_rx_ep) { 1570 bt_dev_err(hdev, "invalid SCO descriptors"); 1571 return -ENODEV; 1572 } 1573 1574 return 0; 1575 } 1576 1577 static int btusb_switch_alt_setting(struct hci_dev *hdev, int new_alts) 1578 { 1579 struct btusb_data *data = hci_get_drvdata(hdev); 1580 int err; 1581 1582 if (data->isoc_altsetting != new_alts) { 1583 unsigned long flags; 1584 1585 clear_bit(BTUSB_ISOC_RUNNING, &data->flags); 1586 usb_kill_anchored_urbs(&data->isoc_anchor); 1587 1588 /* When isochronous alternate setting needs to be 1589 * changed, because SCO connection has been added 1590 * or removed, a packet fragment may be left in the 1591 * reassembling state. This could lead to wrongly 1592 * assembled fragments. 1593 * 1594 * Clear outstanding fragment when selecting a new 1595 * alternate setting. 1596 */ 1597 spin_lock_irqsave(&data->rxlock, flags); 1598 kfree_skb(data->sco_skb); 1599 data->sco_skb = NULL; 1600 spin_unlock_irqrestore(&data->rxlock, flags); 1601 1602 err = __set_isoc_interface(hdev, new_alts); 1603 if (err < 0) 1604 return err; 1605 } 1606 1607 if (!test_and_set_bit(BTUSB_ISOC_RUNNING, &data->flags)) { 1608 if (btusb_submit_isoc_urb(hdev, GFP_KERNEL) < 0) 1609 clear_bit(BTUSB_ISOC_RUNNING, &data->flags); 1610 else 1611 btusb_submit_isoc_urb(hdev, GFP_KERNEL); 1612 } 1613 1614 return 0; 1615 } 1616 1617 static struct usb_host_interface *btusb_find_altsetting(struct btusb_data *data, 1618 int alt) 1619 { 1620 struct usb_interface *intf = data->isoc; 1621 int i; 1622 1623 BT_DBG("Looking for Alt no :%d", alt); 1624 1625 if (!intf) 1626 return NULL; 1627 1628 for (i = 0; i < intf->num_altsetting; i++) { 1629 if (intf->altsetting[i].desc.bAlternateSetting == alt) 1630 return &intf->altsetting[i]; 1631 } 1632 1633 return NULL; 1634 } 1635 1636 static void btusb_work(struct work_struct *work) 1637 { 1638 struct btusb_data *data = container_of(work, struct btusb_data, work); 1639 struct hci_dev *hdev = data->hdev; 1640 int new_alts = 0; 1641 int err; 1642 1643 if (data->sco_num > 0) { 1644 if (!test_bit(BTUSB_DID_ISO_RESUME, &data->flags)) { 1645 err = usb_autopm_get_interface(data->isoc ? data->isoc : data->intf); 1646 if (err < 0) { 1647 clear_bit(BTUSB_ISOC_RUNNING, &data->flags); 1648 usb_kill_anchored_urbs(&data->isoc_anchor); 1649 return; 1650 } 1651 1652 set_bit(BTUSB_DID_ISO_RESUME, &data->flags); 1653 } 1654 1655 if (data->air_mode == HCI_NOTIFY_ENABLE_SCO_CVSD) { 1656 if (hdev->voice_setting & 0x0020) { 1657 static const int alts[3] = { 2, 4, 5 }; 1658 1659 new_alts = alts[data->sco_num - 1]; 1660 } else { 1661 new_alts = data->sco_num; 1662 } 1663 } else if (data->air_mode == HCI_NOTIFY_ENABLE_SCO_TRANSP) { 1664 1665 data->usb_alt6_packet_flow = true; 1666 1667 /* Check if Alt 6 is supported for Transparent audio */ 1668 if (btusb_find_altsetting(data, 6)) 1669 new_alts = 6; 1670 else 1671 bt_dev_err(hdev, "Device does not support ALT setting 6"); 1672 } 1673 1674 if (btusb_switch_alt_setting(hdev, new_alts) < 0) 1675 bt_dev_err(hdev, "set USB alt:(%d) failed!", new_alts); 1676 } else { 1677 clear_bit(BTUSB_ISOC_RUNNING, &data->flags); 1678 usb_kill_anchored_urbs(&data->isoc_anchor); 1679 1680 __set_isoc_interface(hdev, 0); 1681 if (test_and_clear_bit(BTUSB_DID_ISO_RESUME, &data->flags)) 1682 usb_autopm_put_interface(data->isoc ? data->isoc : data->intf); 1683 } 1684 } 1685 1686 static void btusb_waker(struct work_struct *work) 1687 { 1688 struct btusb_data *data = container_of(work, struct btusb_data, waker); 1689 int err; 1690 1691 err = usb_autopm_get_interface(data->intf); 1692 if (err < 0) 1693 return; 1694 1695 usb_autopm_put_interface(data->intf); 1696 } 1697 1698 static int btusb_setup_bcm92035(struct hci_dev *hdev) 1699 { 1700 struct sk_buff *skb; 1701 u8 val = 0x00; 1702 1703 BT_DBG("%s", hdev->name); 1704 1705 skb = __hci_cmd_sync(hdev, 0xfc3b, 1, &val, HCI_INIT_TIMEOUT); 1706 if (IS_ERR(skb)) 1707 bt_dev_err(hdev, "BCM92035 command failed (%ld)", PTR_ERR(skb)); 1708 else 1709 kfree_skb(skb); 1710 1711 return 0; 1712 } 1713 1714 static int btusb_setup_csr(struct hci_dev *hdev) 1715 { 1716 struct hci_rp_read_local_version *rp; 1717 struct sk_buff *skb; 1718 1719 BT_DBG("%s", hdev->name); 1720 1721 skb = __hci_cmd_sync(hdev, HCI_OP_READ_LOCAL_VERSION, 0, NULL, 1722 HCI_INIT_TIMEOUT); 1723 if (IS_ERR(skb)) { 1724 int err = PTR_ERR(skb); 1725 bt_dev_err(hdev, "CSR: Local version failed (%d)", err); 1726 return err; 1727 } 1728 1729 if (skb->len != sizeof(struct hci_rp_read_local_version)) { 1730 bt_dev_err(hdev, "CSR: Local version length mismatch"); 1731 kfree_skb(skb); 1732 return -EIO; 1733 } 1734 1735 rp = (struct hci_rp_read_local_version *)skb->data; 1736 1737 /* Detect controllers which aren't real CSR ones. */ 1738 if (le16_to_cpu(rp->manufacturer) != 10 || 1739 le16_to_cpu(rp->lmp_subver) == 0x0c5c) { 1740 /* Clear the reset quirk since this is not an actual 1741 * early Bluetooth 1.1 device from CSR. 1742 */ 1743 clear_bit(HCI_QUIRK_RESET_ON_CLOSE, &hdev->quirks); 1744 1745 /* These fake CSR controllers have all a broken 1746 * stored link key handling and so just disable it. 1747 */ 1748 set_bit(HCI_QUIRK_BROKEN_STORED_LINK_KEY, &hdev->quirks); 1749 } 1750 1751 kfree_skb(skb); 1752 1753 return 0; 1754 } 1755 1756 static const struct firmware *btusb_setup_intel_get_fw(struct hci_dev *hdev, 1757 struct intel_version *ver) 1758 { 1759 const struct firmware *fw; 1760 char fwname[64]; 1761 int ret; 1762 1763 snprintf(fwname, sizeof(fwname), 1764 "intel/ibt-hw-%x.%x.%x-fw-%x.%x.%x.%x.%x.bseq", 1765 ver->hw_platform, ver->hw_variant, ver->hw_revision, 1766 ver->fw_variant, ver->fw_revision, ver->fw_build_num, 1767 ver->fw_build_ww, ver->fw_build_yy); 1768 1769 ret = request_firmware(&fw, fwname, &hdev->dev); 1770 if (ret < 0) { 1771 if (ret == -EINVAL) { 1772 bt_dev_err(hdev, "Intel firmware file request failed (%d)", 1773 ret); 1774 return NULL; 1775 } 1776 1777 bt_dev_err(hdev, "failed to open Intel firmware file: %s (%d)", 1778 fwname, ret); 1779 1780 /* If the correct firmware patch file is not found, use the 1781 * default firmware patch file instead 1782 */ 1783 snprintf(fwname, sizeof(fwname), "intel/ibt-hw-%x.%x.bseq", 1784 ver->hw_platform, ver->hw_variant); 1785 if (request_firmware(&fw, fwname, &hdev->dev) < 0) { 1786 bt_dev_err(hdev, "failed to open default fw file: %s", 1787 fwname); 1788 return NULL; 1789 } 1790 } 1791 1792 bt_dev_info(hdev, "Intel Bluetooth firmware file: %s", fwname); 1793 1794 return fw; 1795 } 1796 1797 static int btusb_setup_intel_patching(struct hci_dev *hdev, 1798 const struct firmware *fw, 1799 const u8 **fw_ptr, int *disable_patch) 1800 { 1801 struct sk_buff *skb; 1802 struct hci_command_hdr *cmd; 1803 const u8 *cmd_param; 1804 struct hci_event_hdr *evt = NULL; 1805 const u8 *evt_param = NULL; 1806 int remain = fw->size - (*fw_ptr - fw->data); 1807 1808 /* The first byte indicates the types of the patch command or event. 1809 * 0x01 means HCI command and 0x02 is HCI event. If the first bytes 1810 * in the current firmware buffer doesn't start with 0x01 or 1811 * the size of remain buffer is smaller than HCI command header, 1812 * the firmware file is corrupted and it should stop the patching 1813 * process. 1814 */ 1815 if (remain > HCI_COMMAND_HDR_SIZE && *fw_ptr[0] != 0x01) { 1816 bt_dev_err(hdev, "Intel fw corrupted: invalid cmd read"); 1817 return -EINVAL; 1818 } 1819 (*fw_ptr)++; 1820 remain--; 1821 1822 cmd = (struct hci_command_hdr *)(*fw_ptr); 1823 *fw_ptr += sizeof(*cmd); 1824 remain -= sizeof(*cmd); 1825 1826 /* Ensure that the remain firmware data is long enough than the length 1827 * of command parameter. If not, the firmware file is corrupted. 1828 */ 1829 if (remain < cmd->plen) { 1830 bt_dev_err(hdev, "Intel fw corrupted: invalid cmd len"); 1831 return -EFAULT; 1832 } 1833 1834 /* If there is a command that loads a patch in the firmware 1835 * file, then enable the patch upon success, otherwise just 1836 * disable the manufacturer mode, for example patch activation 1837 * is not required when the default firmware patch file is used 1838 * because there are no patch data to load. 1839 */ 1840 if (*disable_patch && le16_to_cpu(cmd->opcode) == 0xfc8e) 1841 *disable_patch = 0; 1842 1843 cmd_param = *fw_ptr; 1844 *fw_ptr += cmd->plen; 1845 remain -= cmd->plen; 1846 1847 /* This reads the expected events when the above command is sent to the 1848 * device. Some vendor commands expects more than one events, for 1849 * example command status event followed by vendor specific event. 1850 * For this case, it only keeps the last expected event. so the command 1851 * can be sent with __hci_cmd_sync_ev() which returns the sk_buff of 1852 * last expected event. 1853 */ 1854 while (remain > HCI_EVENT_HDR_SIZE && *fw_ptr[0] == 0x02) { 1855 (*fw_ptr)++; 1856 remain--; 1857 1858 evt = (struct hci_event_hdr *)(*fw_ptr); 1859 *fw_ptr += sizeof(*evt); 1860 remain -= sizeof(*evt); 1861 1862 if (remain < evt->plen) { 1863 bt_dev_err(hdev, "Intel fw corrupted: invalid evt len"); 1864 return -EFAULT; 1865 } 1866 1867 evt_param = *fw_ptr; 1868 *fw_ptr += evt->plen; 1869 remain -= evt->plen; 1870 } 1871 1872 /* Every HCI commands in the firmware file has its correspond event. 1873 * If event is not found or remain is smaller than zero, the firmware 1874 * file is corrupted. 1875 */ 1876 if (!evt || !evt_param || remain < 0) { 1877 bt_dev_err(hdev, "Intel fw corrupted: invalid evt read"); 1878 return -EFAULT; 1879 } 1880 1881 skb = __hci_cmd_sync_ev(hdev, le16_to_cpu(cmd->opcode), cmd->plen, 1882 cmd_param, evt->evt, HCI_INIT_TIMEOUT); 1883 if (IS_ERR(skb)) { 1884 bt_dev_err(hdev, "sending Intel patch command (0x%4.4x) failed (%ld)", 1885 cmd->opcode, PTR_ERR(skb)); 1886 return PTR_ERR(skb); 1887 } 1888 1889 /* It ensures that the returned event matches the event data read from 1890 * the firmware file. At fist, it checks the length and then 1891 * the contents of the event. 1892 */ 1893 if (skb->len != evt->plen) { 1894 bt_dev_err(hdev, "mismatch event length (opcode 0x%4.4x)", 1895 le16_to_cpu(cmd->opcode)); 1896 kfree_skb(skb); 1897 return -EFAULT; 1898 } 1899 1900 if (memcmp(skb->data, evt_param, evt->plen)) { 1901 bt_dev_err(hdev, "mismatch event parameter (opcode 0x%4.4x)", 1902 le16_to_cpu(cmd->opcode)); 1903 kfree_skb(skb); 1904 return -EFAULT; 1905 } 1906 kfree_skb(skb); 1907 1908 return 0; 1909 } 1910 1911 static int btusb_setup_intel(struct hci_dev *hdev) 1912 { 1913 struct sk_buff *skb; 1914 const struct firmware *fw; 1915 const u8 *fw_ptr; 1916 int disable_patch, err; 1917 struct intel_version ver; 1918 1919 BT_DBG("%s", hdev->name); 1920 1921 /* The controller has a bug with the first HCI command sent to it 1922 * returning number of completed commands as zero. This would stall the 1923 * command processing in the Bluetooth core. 1924 * 1925 * As a workaround, send HCI Reset command first which will reset the 1926 * number of completed commands and allow normal command processing 1927 * from now on. 1928 */ 1929 skb = __hci_cmd_sync(hdev, HCI_OP_RESET, 0, NULL, HCI_INIT_TIMEOUT); 1930 if (IS_ERR(skb)) { 1931 bt_dev_err(hdev, "sending initial HCI reset command failed (%ld)", 1932 PTR_ERR(skb)); 1933 return PTR_ERR(skb); 1934 } 1935 kfree_skb(skb); 1936 1937 /* Read Intel specific controller version first to allow selection of 1938 * which firmware file to load. 1939 * 1940 * The returned information are hardware variant and revision plus 1941 * firmware variant, revision and build number. 1942 */ 1943 err = btintel_read_version(hdev, &ver); 1944 if (err) 1945 return err; 1946 1947 bt_dev_info(hdev, "read Intel version: %02x%02x%02x%02x%02x%02x%02x%02x%02x", 1948 ver.hw_platform, ver.hw_variant, ver.hw_revision, 1949 ver.fw_variant, ver.fw_revision, ver.fw_build_num, 1950 ver.fw_build_ww, ver.fw_build_yy, ver.fw_patch_num); 1951 1952 /* fw_patch_num indicates the version of patch the device currently 1953 * have. If there is no patch data in the device, it is always 0x00. 1954 * So, if it is other than 0x00, no need to patch the device again. 1955 */ 1956 if (ver.fw_patch_num) { 1957 bt_dev_info(hdev, "Intel device is already patched. " 1958 "patch num: %02x", ver.fw_patch_num); 1959 goto complete; 1960 } 1961 1962 /* Opens the firmware patch file based on the firmware version read 1963 * from the controller. If it fails to open the matching firmware 1964 * patch file, it tries to open the default firmware patch file. 1965 * If no patch file is found, allow the device to operate without 1966 * a patch. 1967 */ 1968 fw = btusb_setup_intel_get_fw(hdev, &ver); 1969 if (!fw) 1970 goto complete; 1971 fw_ptr = fw->data; 1972 1973 /* Enable the manufacturer mode of the controller. 1974 * Only while this mode is enabled, the driver can download the 1975 * firmware patch data and configuration parameters. 1976 */ 1977 err = btintel_enter_mfg(hdev); 1978 if (err) { 1979 release_firmware(fw); 1980 return err; 1981 } 1982 1983 disable_patch = 1; 1984 1985 /* The firmware data file consists of list of Intel specific HCI 1986 * commands and its expected events. The first byte indicates the 1987 * type of the message, either HCI command or HCI event. 1988 * 1989 * It reads the command and its expected event from the firmware file, 1990 * and send to the controller. Once __hci_cmd_sync_ev() returns, 1991 * the returned event is compared with the event read from the firmware 1992 * file and it will continue until all the messages are downloaded to 1993 * the controller. 1994 * 1995 * Once the firmware patching is completed successfully, 1996 * the manufacturer mode is disabled with reset and activating the 1997 * downloaded patch. 1998 * 1999 * If the firmware patching fails, the manufacturer mode is 2000 * disabled with reset and deactivating the patch. 2001 * 2002 * If the default patch file is used, no reset is done when disabling 2003 * the manufacturer. 2004 */ 2005 while (fw->size > fw_ptr - fw->data) { 2006 int ret; 2007 2008 ret = btusb_setup_intel_patching(hdev, fw, &fw_ptr, 2009 &disable_patch); 2010 if (ret < 0) 2011 goto exit_mfg_deactivate; 2012 } 2013 2014 release_firmware(fw); 2015 2016 if (disable_patch) 2017 goto exit_mfg_disable; 2018 2019 /* Patching completed successfully and disable the manufacturer mode 2020 * with reset and activate the downloaded firmware patches. 2021 */ 2022 err = btintel_exit_mfg(hdev, true, true); 2023 if (err) 2024 return err; 2025 2026 /* Need build number for downloaded fw patches in 2027 * every power-on boot 2028 */ 2029 err = btintel_read_version(hdev, &ver); 2030 if (err) 2031 return err; 2032 bt_dev_info(hdev, "Intel BT fw patch 0x%02x completed & activated", 2033 ver.fw_patch_num); 2034 2035 goto complete; 2036 2037 exit_mfg_disable: 2038 /* Disable the manufacturer mode without reset */ 2039 err = btintel_exit_mfg(hdev, false, false); 2040 if (err) 2041 return err; 2042 2043 bt_dev_info(hdev, "Intel firmware patch completed"); 2044 2045 goto complete; 2046 2047 exit_mfg_deactivate: 2048 release_firmware(fw); 2049 2050 /* Patching failed. Disable the manufacturer mode with reset and 2051 * deactivate the downloaded firmware patches. 2052 */ 2053 err = btintel_exit_mfg(hdev, true, false); 2054 if (err) 2055 return err; 2056 2057 bt_dev_info(hdev, "Intel firmware patch completed and deactivated"); 2058 2059 complete: 2060 /* Set the event mask for Intel specific vendor events. This enables 2061 * a few extra events that are useful during general operation. 2062 */ 2063 btintel_set_event_mask_mfg(hdev, false); 2064 2065 btintel_check_bdaddr(hdev); 2066 return 0; 2067 } 2068 2069 static int inject_cmd_complete(struct hci_dev *hdev, __u16 opcode) 2070 { 2071 struct sk_buff *skb; 2072 struct hci_event_hdr *hdr; 2073 struct hci_ev_cmd_complete *evt; 2074 2075 skb = bt_skb_alloc(sizeof(*hdr) + sizeof(*evt) + 1, GFP_KERNEL); 2076 if (!skb) 2077 return -ENOMEM; 2078 2079 hdr = skb_put(skb, sizeof(*hdr)); 2080 hdr->evt = HCI_EV_CMD_COMPLETE; 2081 hdr->plen = sizeof(*evt) + 1; 2082 2083 evt = skb_put(skb, sizeof(*evt)); 2084 evt->ncmd = 0x01; 2085 evt->opcode = cpu_to_le16(opcode); 2086 2087 skb_put_u8(skb, 0x00); 2088 2089 hci_skb_pkt_type(skb) = HCI_EVENT_PKT; 2090 2091 return hci_recv_frame(hdev, skb); 2092 } 2093 2094 static int btusb_recv_bulk_intel(struct btusb_data *data, void *buffer, 2095 int count) 2096 { 2097 /* When the device is in bootloader mode, then it can send 2098 * events via the bulk endpoint. These events are treated the 2099 * same way as the ones received from the interrupt endpoint. 2100 */ 2101 if (test_bit(BTUSB_BOOTLOADER, &data->flags)) 2102 return btusb_recv_intr(data, buffer, count); 2103 2104 return btusb_recv_bulk(data, buffer, count); 2105 } 2106 2107 static void btusb_intel_bootup(struct btusb_data *data, const void *ptr, 2108 unsigned int len) 2109 { 2110 const struct intel_bootup *evt = ptr; 2111 2112 if (len != sizeof(*evt)) 2113 return; 2114 2115 if (test_and_clear_bit(BTUSB_BOOTING, &data->flags)) 2116 wake_up_bit(&data->flags, BTUSB_BOOTING); 2117 } 2118 2119 static void btusb_intel_secure_send_result(struct btusb_data *data, 2120 const void *ptr, unsigned int len) 2121 { 2122 const struct intel_secure_send_result *evt = ptr; 2123 2124 if (len != sizeof(*evt)) 2125 return; 2126 2127 if (evt->result) 2128 set_bit(BTUSB_FIRMWARE_FAILED, &data->flags); 2129 2130 if (test_and_clear_bit(BTUSB_DOWNLOADING, &data->flags) && 2131 test_bit(BTUSB_FIRMWARE_LOADED, &data->flags)) 2132 wake_up_bit(&data->flags, BTUSB_DOWNLOADING); 2133 } 2134 2135 static int btusb_recv_event_intel(struct hci_dev *hdev, struct sk_buff *skb) 2136 { 2137 struct btusb_data *data = hci_get_drvdata(hdev); 2138 2139 if (test_bit(BTUSB_BOOTLOADER, &data->flags)) { 2140 struct hci_event_hdr *hdr = (void *)skb->data; 2141 2142 if (skb->len > HCI_EVENT_HDR_SIZE && hdr->evt == 0xff && 2143 hdr->plen > 0) { 2144 const void *ptr = skb->data + HCI_EVENT_HDR_SIZE + 1; 2145 unsigned int len = skb->len - HCI_EVENT_HDR_SIZE - 1; 2146 2147 switch (skb->data[2]) { 2148 case 0x02: 2149 /* When switching to the operational firmware 2150 * the device sends a vendor specific event 2151 * indicating that the bootup completed. 2152 */ 2153 btusb_intel_bootup(data, ptr, len); 2154 break; 2155 case 0x06: 2156 /* When the firmware loading completes the 2157 * device sends out a vendor specific event 2158 * indicating the result of the firmware 2159 * loading. 2160 */ 2161 btusb_intel_secure_send_result(data, ptr, len); 2162 break; 2163 } 2164 } 2165 } 2166 2167 return hci_recv_frame(hdev, skb); 2168 } 2169 2170 static int btusb_send_frame_intel(struct hci_dev *hdev, struct sk_buff *skb) 2171 { 2172 struct btusb_data *data = hci_get_drvdata(hdev); 2173 struct urb *urb; 2174 2175 BT_DBG("%s", hdev->name); 2176 2177 switch (hci_skb_pkt_type(skb)) { 2178 case HCI_COMMAND_PKT: 2179 if (test_bit(BTUSB_BOOTLOADER, &data->flags)) { 2180 struct hci_command_hdr *cmd = (void *)skb->data; 2181 __u16 opcode = le16_to_cpu(cmd->opcode); 2182 2183 /* When in bootloader mode and the command 0xfc09 2184 * is received, it needs to be send down the 2185 * bulk endpoint. So allocate a bulk URB instead. 2186 */ 2187 if (opcode == 0xfc09) 2188 urb = alloc_bulk_urb(hdev, skb); 2189 else 2190 urb = alloc_ctrl_urb(hdev, skb); 2191 2192 /* When the 0xfc01 command is issued to boot into 2193 * the operational firmware, it will actually not 2194 * send a command complete event. To keep the flow 2195 * control working inject that event here. 2196 */ 2197 if (opcode == 0xfc01) 2198 inject_cmd_complete(hdev, opcode); 2199 } else { 2200 urb = alloc_ctrl_urb(hdev, skb); 2201 } 2202 if (IS_ERR(urb)) 2203 return PTR_ERR(urb); 2204 2205 hdev->stat.cmd_tx++; 2206 return submit_or_queue_tx_urb(hdev, urb); 2207 2208 case HCI_ACLDATA_PKT: 2209 urb = alloc_bulk_urb(hdev, skb); 2210 if (IS_ERR(urb)) 2211 return PTR_ERR(urb); 2212 2213 hdev->stat.acl_tx++; 2214 return submit_or_queue_tx_urb(hdev, urb); 2215 2216 case HCI_SCODATA_PKT: 2217 if (hci_conn_num(hdev, SCO_LINK) < 1) 2218 return -ENODEV; 2219 2220 urb = alloc_isoc_urb(hdev, skb); 2221 if (IS_ERR(urb)) 2222 return PTR_ERR(urb); 2223 2224 hdev->stat.sco_tx++; 2225 return submit_tx_urb(hdev, urb); 2226 } 2227 2228 return -EILSEQ; 2229 } 2230 2231 static bool btusb_setup_intel_new_get_fw_name(struct intel_version *ver, 2232 struct intel_boot_params *params, 2233 char *fw_name, size_t len, 2234 const char *suffix) 2235 { 2236 switch (ver->hw_variant) { 2237 case 0x0b: /* SfP */ 2238 case 0x0c: /* WsP */ 2239 snprintf(fw_name, len, "intel/ibt-%u-%u.%s", 2240 le16_to_cpu(ver->hw_variant), 2241 le16_to_cpu(params->dev_revid), 2242 suffix); 2243 break; 2244 case 0x11: /* JfP */ 2245 case 0x12: /* ThP */ 2246 case 0x13: /* HrP */ 2247 case 0x14: /* CcP */ 2248 snprintf(fw_name, len, "intel/ibt-%u-%u-%u.%s", 2249 le16_to_cpu(ver->hw_variant), 2250 le16_to_cpu(ver->hw_revision), 2251 le16_to_cpu(ver->fw_revision), 2252 suffix); 2253 break; 2254 default: 2255 return false; 2256 } 2257 return true; 2258 } 2259 2260 static int btusb_setup_intel_new(struct hci_dev *hdev) 2261 { 2262 struct btusb_data *data = hci_get_drvdata(hdev); 2263 struct intel_version ver; 2264 struct intel_boot_params params; 2265 const struct firmware *fw; 2266 u32 boot_param; 2267 char fwname[64]; 2268 ktime_t calltime, delta, rettime; 2269 unsigned long long duration; 2270 int err; 2271 2272 BT_DBG("%s", hdev->name); 2273 2274 /* Set the default boot parameter to 0x0 and it is updated to 2275 * SKU specific boot parameter after reading Intel_Write_Boot_Params 2276 * command while downloading the firmware. 2277 */ 2278 boot_param = 0x00000000; 2279 2280 calltime = ktime_get(); 2281 2282 /* Read the Intel version information to determine if the device 2283 * is in bootloader mode or if it already has operational firmware 2284 * loaded. 2285 */ 2286 err = btintel_read_version(hdev, &ver); 2287 if (err) { 2288 bt_dev_err(hdev, "Intel Read version failed (%d)", err); 2289 btintel_reset_to_bootloader(hdev); 2290 return err; 2291 } 2292 2293 /* The hardware platform number has a fixed value of 0x37 and 2294 * for now only accept this single value. 2295 */ 2296 if (ver.hw_platform != 0x37) { 2297 bt_dev_err(hdev, "Unsupported Intel hardware platform (%u)", 2298 ver.hw_platform); 2299 return -EINVAL; 2300 } 2301 2302 /* Check for supported iBT hardware variants of this firmware 2303 * loading method. 2304 * 2305 * This check has been put in place to ensure correct forward 2306 * compatibility options when newer hardware variants come along. 2307 */ 2308 switch (ver.hw_variant) { 2309 case 0x0b: /* SfP */ 2310 case 0x0c: /* WsP */ 2311 case 0x11: /* JfP */ 2312 case 0x12: /* ThP */ 2313 case 0x13: /* HrP */ 2314 case 0x14: /* CcP */ 2315 break; 2316 default: 2317 bt_dev_err(hdev, "Unsupported Intel hardware variant (%u)", 2318 ver.hw_variant); 2319 return -EINVAL; 2320 } 2321 2322 btintel_version_info(hdev, &ver); 2323 2324 /* The firmware variant determines if the device is in bootloader 2325 * mode or is running operational firmware. The value 0x06 identifies 2326 * the bootloader and the value 0x23 identifies the operational 2327 * firmware. 2328 * 2329 * When the operational firmware is already present, then only 2330 * the check for valid Bluetooth device address is needed. This 2331 * determines if the device will be added as configured or 2332 * unconfigured controller. 2333 * 2334 * It is not possible to use the Secure Boot Parameters in this 2335 * case since that command is only available in bootloader mode. 2336 */ 2337 if (ver.fw_variant == 0x23) { 2338 clear_bit(BTUSB_BOOTLOADER, &data->flags); 2339 btintel_check_bdaddr(hdev); 2340 goto finish; 2341 } 2342 2343 /* If the device is not in bootloader mode, then the only possible 2344 * choice is to return an error and abort the device initialization. 2345 */ 2346 if (ver.fw_variant != 0x06) { 2347 bt_dev_err(hdev, "Unsupported Intel firmware variant (%u)", 2348 ver.fw_variant); 2349 return -ENODEV; 2350 } 2351 2352 /* Read the secure boot parameters to identify the operating 2353 * details of the bootloader. 2354 */ 2355 err = btintel_read_boot_params(hdev, ¶ms); 2356 if (err) 2357 return err; 2358 2359 /* It is required that every single firmware fragment is acknowledged 2360 * with a command complete event. If the boot parameters indicate 2361 * that this bootloader does not send them, then abort the setup. 2362 */ 2363 if (params.limited_cce != 0x00) { 2364 bt_dev_err(hdev, "Unsupported Intel firmware loading method (%u)", 2365 params.limited_cce); 2366 return -EINVAL; 2367 } 2368 2369 /* If the OTP has no valid Bluetooth device address, then there will 2370 * also be no valid address for the operational firmware. 2371 */ 2372 if (!bacmp(¶ms.otp_bdaddr, BDADDR_ANY)) { 2373 bt_dev_info(hdev, "No device address configured"); 2374 set_bit(HCI_QUIRK_INVALID_BDADDR, &hdev->quirks); 2375 } 2376 2377 /* With this Intel bootloader only the hardware variant and device 2378 * revision information are used to select the right firmware for SfP 2379 * and WsP. 2380 * 2381 * The firmware filename is ibt-<hw_variant>-<dev_revid>.sfi. 2382 * 2383 * Currently the supported hardware variants are: 2384 * 11 (0x0b) for iBT3.0 (LnP/SfP) 2385 * 12 (0x0c) for iBT3.5 (WsP) 2386 * 2387 * For ThP/JfP and for future SKU's, the FW name varies based on HW 2388 * variant, HW revision and FW revision, as these are dependent on CNVi 2389 * and RF Combination. 2390 * 2391 * 17 (0x11) for iBT3.5 (JfP) 2392 * 18 (0x12) for iBT3.5 (ThP) 2393 * 2394 * The firmware file name for these will be 2395 * ibt-<hw_variant>-<hw_revision>-<fw_revision>.sfi. 2396 * 2397 */ 2398 err = btusb_setup_intel_new_get_fw_name(&ver, ¶ms, fwname, 2399 sizeof(fwname), "sfi"); 2400 if (!err) { 2401 bt_dev_err(hdev, "Unsupported Intel firmware naming"); 2402 return -EINVAL; 2403 } 2404 2405 err = request_firmware(&fw, fwname, &hdev->dev); 2406 if (err < 0) { 2407 bt_dev_err(hdev, "Failed to load Intel firmware file (%d)", err); 2408 return err; 2409 } 2410 2411 bt_dev_info(hdev, "Found device firmware: %s", fwname); 2412 2413 /* Save the DDC file name for later use to apply once the firmware 2414 * downloading is done. 2415 */ 2416 err = btusb_setup_intel_new_get_fw_name(&ver, ¶ms, fwname, 2417 sizeof(fwname), "ddc"); 2418 if (!err) { 2419 bt_dev_err(hdev, "Unsupported Intel firmware naming"); 2420 return -EINVAL; 2421 } 2422 2423 if (fw->size < 644) { 2424 bt_dev_err(hdev, "Invalid size of firmware file (%zu)", 2425 fw->size); 2426 err = -EBADF; 2427 goto done; 2428 } 2429 2430 set_bit(BTUSB_DOWNLOADING, &data->flags); 2431 2432 /* Start firmware downloading and get boot parameter */ 2433 err = btintel_download_firmware(hdev, fw, &boot_param); 2434 if (err < 0) { 2435 /* When FW download fails, send Intel Reset to retry 2436 * FW download. 2437 */ 2438 btintel_reset_to_bootloader(hdev); 2439 goto done; 2440 } 2441 set_bit(BTUSB_FIRMWARE_LOADED, &data->flags); 2442 2443 bt_dev_info(hdev, "Waiting for firmware download to complete"); 2444 2445 /* Before switching the device into operational mode and with that 2446 * booting the loaded firmware, wait for the bootloader notification 2447 * that all fragments have been successfully received. 2448 * 2449 * When the event processing receives the notification, then the 2450 * BTUSB_DOWNLOADING flag will be cleared. 2451 * 2452 * The firmware loading should not take longer than 5 seconds 2453 * and thus just timeout if that happens and fail the setup 2454 * of this device. 2455 */ 2456 err = wait_on_bit_timeout(&data->flags, BTUSB_DOWNLOADING, 2457 TASK_INTERRUPTIBLE, 2458 msecs_to_jiffies(5000)); 2459 if (err == -EINTR) { 2460 bt_dev_err(hdev, "Firmware loading interrupted"); 2461 goto done; 2462 } 2463 2464 if (err) { 2465 bt_dev_err(hdev, "Firmware loading timeout"); 2466 err = -ETIMEDOUT; 2467 btintel_reset_to_bootloader(hdev); 2468 goto done; 2469 } 2470 2471 if (test_bit(BTUSB_FIRMWARE_FAILED, &data->flags)) { 2472 bt_dev_err(hdev, "Firmware loading failed"); 2473 err = -ENOEXEC; 2474 goto done; 2475 } 2476 2477 rettime = ktime_get(); 2478 delta = ktime_sub(rettime, calltime); 2479 duration = (unsigned long long) ktime_to_ns(delta) >> 10; 2480 2481 bt_dev_info(hdev, "Firmware loaded in %llu usecs", duration); 2482 2483 done: 2484 release_firmware(fw); 2485 2486 if (err < 0) 2487 return err; 2488 2489 calltime = ktime_get(); 2490 2491 set_bit(BTUSB_BOOTING, &data->flags); 2492 2493 err = btintel_send_intel_reset(hdev, boot_param); 2494 if (err) { 2495 bt_dev_err(hdev, "Intel Soft Reset failed (%d)", err); 2496 btintel_reset_to_bootloader(hdev); 2497 return err; 2498 } 2499 2500 /* The bootloader will not indicate when the device is ready. This 2501 * is done by the operational firmware sending bootup notification. 2502 * 2503 * Booting into operational firmware should not take longer than 2504 * 1 second. However if that happens, then just fail the setup 2505 * since something went wrong. 2506 */ 2507 bt_dev_info(hdev, "Waiting for device to boot"); 2508 2509 err = wait_on_bit_timeout(&data->flags, BTUSB_BOOTING, 2510 TASK_INTERRUPTIBLE, 2511 msecs_to_jiffies(1000)); 2512 2513 if (err == -EINTR) { 2514 bt_dev_err(hdev, "Device boot interrupted"); 2515 return -EINTR; 2516 } 2517 2518 if (err) { 2519 bt_dev_err(hdev, "Device boot timeout"); 2520 btintel_reset_to_bootloader(hdev); 2521 return -ETIMEDOUT; 2522 } 2523 2524 rettime = ktime_get(); 2525 delta = ktime_sub(rettime, calltime); 2526 duration = (unsigned long long) ktime_to_ns(delta) >> 10; 2527 2528 bt_dev_info(hdev, "Device booted in %llu usecs", duration); 2529 2530 clear_bit(BTUSB_BOOTLOADER, &data->flags); 2531 2532 /* Once the device is running in operational mode, it needs to apply 2533 * the device configuration (DDC) parameters. 2534 * 2535 * The device can work without DDC parameters, so even if it fails 2536 * to load the file, no need to fail the setup. 2537 */ 2538 btintel_load_ddc_config(hdev, fwname); 2539 2540 /* Read the Intel version information after loading the FW */ 2541 err = btintel_read_version(hdev, &ver); 2542 if (err) 2543 return err; 2544 2545 btintel_version_info(hdev, &ver); 2546 2547 finish: 2548 /* All Intel controllers that support the Microsoft vendor 2549 * extension are using 0xFC1E for VsMsftOpCode. 2550 */ 2551 switch (ver.hw_variant) { 2552 case 0x12: /* ThP */ 2553 hci_set_msft_opcode(hdev, 0xFC1E); 2554 break; 2555 } 2556 2557 /* Set the event mask for Intel specific vendor events. This enables 2558 * a few extra events that are useful during general operation. It 2559 * does not enable any debugging related events. 2560 * 2561 * The device will function correctly without these events enabled 2562 * and thus no need to fail the setup. 2563 */ 2564 btintel_set_event_mask(hdev, false); 2565 2566 return 0; 2567 } 2568 2569 static int btusb_shutdown_intel(struct hci_dev *hdev) 2570 { 2571 struct sk_buff *skb; 2572 long ret; 2573 2574 /* In the shutdown sequence where Bluetooth is turned off followed 2575 * by WiFi being turned off, turning WiFi back on causes issue with 2576 * the RF calibration. 2577 * 2578 * To ensure that any RF activity has been stopped, issue HCI Reset 2579 * command to clear all ongoing activity including advertising, 2580 * scanning etc. 2581 */ 2582 skb = __hci_cmd_sync(hdev, HCI_OP_RESET, 0, NULL, HCI_INIT_TIMEOUT); 2583 if (IS_ERR(skb)) { 2584 ret = PTR_ERR(skb); 2585 bt_dev_err(hdev, "HCI reset during shutdown failed"); 2586 return ret; 2587 } 2588 kfree_skb(skb); 2589 2590 /* Some platforms have an issue with BT LED when the interface is 2591 * down or BT radio is turned off, which takes 5 seconds to BT LED 2592 * goes off. This command turns off the BT LED immediately. 2593 */ 2594 skb = __hci_cmd_sync(hdev, 0xfc3f, 0, NULL, HCI_INIT_TIMEOUT); 2595 if (IS_ERR(skb)) { 2596 ret = PTR_ERR(skb); 2597 bt_dev_err(hdev, "turning off Intel device LED failed"); 2598 return ret; 2599 } 2600 kfree_skb(skb); 2601 2602 return 0; 2603 } 2604 2605 static int btusb_shutdown_intel_new(struct hci_dev *hdev) 2606 { 2607 struct sk_buff *skb; 2608 2609 /* Send HCI Reset to the controller to stop any BT activity which 2610 * were triggered. This will help to save power and maintain the 2611 * sync b/w Host and controller 2612 */ 2613 skb = __hci_cmd_sync(hdev, HCI_OP_RESET, 0, NULL, HCI_INIT_TIMEOUT); 2614 if (IS_ERR(skb)) { 2615 bt_dev_err(hdev, "HCI reset during shutdown failed"); 2616 return PTR_ERR(skb); 2617 } 2618 kfree_skb(skb); 2619 2620 return 0; 2621 } 2622 2623 #define FIRMWARE_MT7663 "mediatek/mt7663pr2h.bin" 2624 #define FIRMWARE_MT7668 "mediatek/mt7668pr2h.bin" 2625 2626 #define HCI_WMT_MAX_EVENT_SIZE 64 2627 2628 enum { 2629 BTMTK_WMT_PATCH_DWNLD = 0x1, 2630 BTMTK_WMT_FUNC_CTRL = 0x6, 2631 BTMTK_WMT_RST = 0x7, 2632 BTMTK_WMT_SEMAPHORE = 0x17, 2633 }; 2634 2635 enum { 2636 BTMTK_WMT_INVALID, 2637 BTMTK_WMT_PATCH_UNDONE, 2638 BTMTK_WMT_PATCH_DONE, 2639 BTMTK_WMT_ON_UNDONE, 2640 BTMTK_WMT_ON_DONE, 2641 BTMTK_WMT_ON_PROGRESS, 2642 }; 2643 2644 struct btmtk_wmt_hdr { 2645 u8 dir; 2646 u8 op; 2647 __le16 dlen; 2648 u8 flag; 2649 } __packed; 2650 2651 struct btmtk_hci_wmt_cmd { 2652 struct btmtk_wmt_hdr hdr; 2653 u8 data[256]; 2654 } __packed; 2655 2656 struct btmtk_hci_wmt_evt { 2657 struct hci_event_hdr hhdr; 2658 struct btmtk_wmt_hdr whdr; 2659 } __packed; 2660 2661 struct btmtk_hci_wmt_evt_funcc { 2662 struct btmtk_hci_wmt_evt hwhdr; 2663 __be16 status; 2664 } __packed; 2665 2666 struct btmtk_tci_sleep { 2667 u8 mode; 2668 __le16 duration; 2669 __le16 host_duration; 2670 u8 host_wakeup_pin; 2671 u8 time_compensation; 2672 } __packed; 2673 2674 struct btmtk_hci_wmt_params { 2675 u8 op; 2676 u8 flag; 2677 u16 dlen; 2678 const void *data; 2679 u32 *status; 2680 }; 2681 2682 static void btusb_mtk_wmt_recv(struct urb *urb) 2683 { 2684 struct hci_dev *hdev = urb->context; 2685 struct btusb_data *data = hci_get_drvdata(hdev); 2686 struct hci_event_hdr *hdr; 2687 struct sk_buff *skb; 2688 int err; 2689 2690 if (urb->status == 0 && urb->actual_length > 0) { 2691 hdev->stat.byte_rx += urb->actual_length; 2692 2693 /* WMT event shouldn't be fragmented and the size should be 2694 * less than HCI_WMT_MAX_EVENT_SIZE. 2695 */ 2696 skb = bt_skb_alloc(HCI_WMT_MAX_EVENT_SIZE, GFP_ATOMIC); 2697 if (!skb) { 2698 hdev->stat.err_rx++; 2699 goto err_out; 2700 } 2701 2702 hci_skb_pkt_type(skb) = HCI_EVENT_PKT; 2703 skb_put_data(skb, urb->transfer_buffer, urb->actual_length); 2704 2705 hdr = (void *)skb->data; 2706 /* Fix up the vendor event id with 0xff for vendor specific 2707 * instead of 0xe4 so that event send via monitoring socket can 2708 * be parsed properly. 2709 */ 2710 hdr->evt = 0xff; 2711 2712 /* When someone waits for the WMT event, the skb is being cloned 2713 * and being processed the events from there then. 2714 */ 2715 if (test_bit(BTUSB_TX_WAIT_VND_EVT, &data->flags)) { 2716 data->evt_skb = skb_clone(skb, GFP_ATOMIC); 2717 if (!data->evt_skb) 2718 goto err_out; 2719 } 2720 2721 err = hci_recv_frame(hdev, skb); 2722 if (err < 0) 2723 goto err_free_skb; 2724 2725 if (test_and_clear_bit(BTUSB_TX_WAIT_VND_EVT, 2726 &data->flags)) { 2727 /* Barrier to sync with other CPUs */ 2728 smp_mb__after_atomic(); 2729 wake_up_bit(&data->flags, 2730 BTUSB_TX_WAIT_VND_EVT); 2731 } 2732 err_out: 2733 return; 2734 err_free_skb: 2735 kfree_skb(data->evt_skb); 2736 data->evt_skb = NULL; 2737 return; 2738 } else if (urb->status == -ENOENT) { 2739 /* Avoid suspend failed when usb_kill_urb */ 2740 return; 2741 } 2742 2743 usb_mark_last_busy(data->udev); 2744 2745 /* The URB complete handler is still called with urb->actual_length = 0 2746 * when the event is not available, so we should keep re-submitting 2747 * URB until WMT event returns, Also, It's necessary to wait some time 2748 * between the two consecutive control URBs to relax the target device 2749 * to generate the event. Otherwise, the WMT event cannot return from 2750 * the device successfully. 2751 */ 2752 udelay(100); 2753 2754 usb_anchor_urb(urb, &data->ctrl_anchor); 2755 err = usb_submit_urb(urb, GFP_ATOMIC); 2756 if (err < 0) { 2757 /* -EPERM: urb is being killed; 2758 * -ENODEV: device got disconnected 2759 */ 2760 if (err != -EPERM && err != -ENODEV) 2761 bt_dev_err(hdev, "urb %p failed to resubmit (%d)", 2762 urb, -err); 2763 usb_unanchor_urb(urb); 2764 } 2765 } 2766 2767 static int btusb_mtk_submit_wmt_recv_urb(struct hci_dev *hdev) 2768 { 2769 struct btusb_data *data = hci_get_drvdata(hdev); 2770 struct usb_ctrlrequest *dr; 2771 unsigned char *buf; 2772 int err, size = 64; 2773 unsigned int pipe; 2774 struct urb *urb; 2775 2776 urb = usb_alloc_urb(0, GFP_KERNEL); 2777 if (!urb) 2778 return -ENOMEM; 2779 2780 dr = kmalloc(sizeof(*dr), GFP_KERNEL); 2781 if (!dr) { 2782 usb_free_urb(urb); 2783 return -ENOMEM; 2784 } 2785 2786 dr->bRequestType = USB_TYPE_VENDOR | USB_DIR_IN; 2787 dr->bRequest = 1; 2788 dr->wIndex = cpu_to_le16(0); 2789 dr->wValue = cpu_to_le16(48); 2790 dr->wLength = cpu_to_le16(size); 2791 2792 buf = kmalloc(size, GFP_KERNEL); 2793 if (!buf) { 2794 kfree(dr); 2795 return -ENOMEM; 2796 } 2797 2798 pipe = usb_rcvctrlpipe(data->udev, 0); 2799 2800 usb_fill_control_urb(urb, data->udev, pipe, (void *)dr, 2801 buf, size, btusb_mtk_wmt_recv, hdev); 2802 2803 urb->transfer_flags |= URB_FREE_BUFFER; 2804 2805 usb_anchor_urb(urb, &data->ctrl_anchor); 2806 err = usb_submit_urb(urb, GFP_KERNEL); 2807 if (err < 0) { 2808 if (err != -EPERM && err != -ENODEV) 2809 bt_dev_err(hdev, "urb %p submission failed (%d)", 2810 urb, -err); 2811 usb_unanchor_urb(urb); 2812 } 2813 2814 usb_free_urb(urb); 2815 2816 return err; 2817 } 2818 2819 static int btusb_mtk_hci_wmt_sync(struct hci_dev *hdev, 2820 struct btmtk_hci_wmt_params *wmt_params) 2821 { 2822 struct btusb_data *data = hci_get_drvdata(hdev); 2823 struct btmtk_hci_wmt_evt_funcc *wmt_evt_funcc; 2824 u32 hlen, status = BTMTK_WMT_INVALID; 2825 struct btmtk_hci_wmt_evt *wmt_evt; 2826 struct btmtk_hci_wmt_cmd wc; 2827 struct btmtk_wmt_hdr *hdr; 2828 int err; 2829 2830 /* Submit control IN URB on demand to process the WMT event */ 2831 err = btusb_mtk_submit_wmt_recv_urb(hdev); 2832 if (err < 0) 2833 return err; 2834 2835 /* Send the WMT command and wait until the WMT event returns */ 2836 hlen = sizeof(*hdr) + wmt_params->dlen; 2837 if (hlen > 255) 2838 return -EINVAL; 2839 2840 hdr = (struct btmtk_wmt_hdr *)&wc; 2841 hdr->dir = 1; 2842 hdr->op = wmt_params->op; 2843 hdr->dlen = cpu_to_le16(wmt_params->dlen + 1); 2844 hdr->flag = wmt_params->flag; 2845 memcpy(wc.data, wmt_params->data, wmt_params->dlen); 2846 2847 set_bit(BTUSB_TX_WAIT_VND_EVT, &data->flags); 2848 2849 err = __hci_cmd_send(hdev, 0xfc6f, hlen, &wc); 2850 2851 if (err < 0) { 2852 clear_bit(BTUSB_TX_WAIT_VND_EVT, &data->flags); 2853 return err; 2854 } 2855 2856 /* The vendor specific WMT commands are all answered by a vendor 2857 * specific event and will have the Command Status or Command 2858 * Complete as with usual HCI command flow control. 2859 * 2860 * After sending the command, wait for BTUSB_TX_WAIT_VND_EVT 2861 * state to be cleared. The driver specific event receive routine 2862 * will clear that state and with that indicate completion of the 2863 * WMT command. 2864 */ 2865 err = wait_on_bit_timeout(&data->flags, BTUSB_TX_WAIT_VND_EVT, 2866 TASK_INTERRUPTIBLE, HCI_INIT_TIMEOUT); 2867 if (err == -EINTR) { 2868 bt_dev_err(hdev, "Execution of wmt command interrupted"); 2869 clear_bit(BTUSB_TX_WAIT_VND_EVT, &data->flags); 2870 return err; 2871 } 2872 2873 if (err) { 2874 bt_dev_err(hdev, "Execution of wmt command timed out"); 2875 clear_bit(BTUSB_TX_WAIT_VND_EVT, &data->flags); 2876 return -ETIMEDOUT; 2877 } 2878 2879 /* Parse and handle the return WMT event */ 2880 wmt_evt = (struct btmtk_hci_wmt_evt *)data->evt_skb->data; 2881 if (wmt_evt->whdr.op != hdr->op) { 2882 bt_dev_err(hdev, "Wrong op received %d expected %d", 2883 wmt_evt->whdr.op, hdr->op); 2884 err = -EIO; 2885 goto err_free_skb; 2886 } 2887 2888 switch (wmt_evt->whdr.op) { 2889 case BTMTK_WMT_SEMAPHORE: 2890 if (wmt_evt->whdr.flag == 2) 2891 status = BTMTK_WMT_PATCH_UNDONE; 2892 else 2893 status = BTMTK_WMT_PATCH_DONE; 2894 break; 2895 case BTMTK_WMT_FUNC_CTRL: 2896 wmt_evt_funcc = (struct btmtk_hci_wmt_evt_funcc *)wmt_evt; 2897 if (be16_to_cpu(wmt_evt_funcc->status) == 0x404) 2898 status = BTMTK_WMT_ON_DONE; 2899 else if (be16_to_cpu(wmt_evt_funcc->status) == 0x420) 2900 status = BTMTK_WMT_ON_PROGRESS; 2901 else 2902 status = BTMTK_WMT_ON_UNDONE; 2903 break; 2904 } 2905 2906 if (wmt_params->status) 2907 *wmt_params->status = status; 2908 2909 err_free_skb: 2910 kfree_skb(data->evt_skb); 2911 data->evt_skb = NULL; 2912 2913 return err; 2914 } 2915 2916 static int btusb_mtk_setup_firmware(struct hci_dev *hdev, const char *fwname) 2917 { 2918 struct btmtk_hci_wmt_params wmt_params; 2919 const struct firmware *fw; 2920 const u8 *fw_ptr; 2921 size_t fw_size; 2922 int err, dlen; 2923 u8 flag; 2924 2925 err = request_firmware(&fw, fwname, &hdev->dev); 2926 if (err < 0) { 2927 bt_dev_err(hdev, "Failed to load firmware file (%d)", err); 2928 return err; 2929 } 2930 2931 fw_ptr = fw->data; 2932 fw_size = fw->size; 2933 2934 /* The size of patch header is 30 bytes, should be skip */ 2935 if (fw_size < 30) { 2936 err = -EINVAL; 2937 goto err_release_fw; 2938 } 2939 2940 fw_size -= 30; 2941 fw_ptr += 30; 2942 flag = 1; 2943 2944 wmt_params.op = BTMTK_WMT_PATCH_DWNLD; 2945 wmt_params.status = NULL; 2946 2947 while (fw_size > 0) { 2948 dlen = min_t(int, 250, fw_size); 2949 2950 /* Tell deivice the position in sequence */ 2951 if (fw_size - dlen <= 0) 2952 flag = 3; 2953 else if (fw_size < fw->size - 30) 2954 flag = 2; 2955 2956 wmt_params.flag = flag; 2957 wmt_params.dlen = dlen; 2958 wmt_params.data = fw_ptr; 2959 2960 err = btusb_mtk_hci_wmt_sync(hdev, &wmt_params); 2961 if (err < 0) { 2962 bt_dev_err(hdev, "Failed to send wmt patch dwnld (%d)", 2963 err); 2964 goto err_release_fw; 2965 } 2966 2967 fw_size -= dlen; 2968 fw_ptr += dlen; 2969 } 2970 2971 wmt_params.op = BTMTK_WMT_RST; 2972 wmt_params.flag = 4; 2973 wmt_params.dlen = 0; 2974 wmt_params.data = NULL; 2975 wmt_params.status = NULL; 2976 2977 /* Activate funciton the firmware providing to */ 2978 err = btusb_mtk_hci_wmt_sync(hdev, &wmt_params); 2979 if (err < 0) { 2980 bt_dev_err(hdev, "Failed to send wmt rst (%d)", err); 2981 goto err_release_fw; 2982 } 2983 2984 /* Wait a few moments for firmware activation done */ 2985 usleep_range(10000, 12000); 2986 2987 err_release_fw: 2988 release_firmware(fw); 2989 2990 return err; 2991 } 2992 2993 static int btusb_mtk_func_query(struct hci_dev *hdev) 2994 { 2995 struct btmtk_hci_wmt_params wmt_params; 2996 int status, err; 2997 u8 param = 0; 2998 2999 /* Query whether the function is enabled */ 3000 wmt_params.op = BTMTK_WMT_FUNC_CTRL; 3001 wmt_params.flag = 4; 3002 wmt_params.dlen = sizeof(param); 3003 wmt_params.data = ¶m; 3004 wmt_params.status = &status; 3005 3006 err = btusb_mtk_hci_wmt_sync(hdev, &wmt_params); 3007 if (err < 0) { 3008 bt_dev_err(hdev, "Failed to query function status (%d)", err); 3009 return err; 3010 } 3011 3012 return status; 3013 } 3014 3015 static int btusb_mtk_reg_read(struct btusb_data *data, u32 reg, u32 *val) 3016 { 3017 int pipe, err, size = sizeof(u32); 3018 void *buf; 3019 3020 buf = kzalloc(size, GFP_KERNEL); 3021 if (!buf) 3022 return -ENOMEM; 3023 3024 pipe = usb_rcvctrlpipe(data->udev, 0); 3025 err = usb_control_msg(data->udev, pipe, 0x63, 3026 USB_TYPE_VENDOR | USB_DIR_IN, 3027 reg >> 16, reg & 0xffff, 3028 buf, size, USB_CTRL_SET_TIMEOUT); 3029 if (err < 0) 3030 goto err_free_buf; 3031 3032 *val = get_unaligned_le32(buf); 3033 3034 err_free_buf: 3035 kfree(buf); 3036 3037 return err; 3038 } 3039 3040 static int btusb_mtk_id_get(struct btusb_data *data, u32 *id) 3041 { 3042 return btusb_mtk_reg_read(data, 0x80000008, id); 3043 } 3044 3045 static int btusb_mtk_setup(struct hci_dev *hdev) 3046 { 3047 struct btusb_data *data = hci_get_drvdata(hdev); 3048 struct btmtk_hci_wmt_params wmt_params; 3049 ktime_t calltime, delta, rettime; 3050 struct btmtk_tci_sleep tci_sleep; 3051 unsigned long long duration; 3052 struct sk_buff *skb; 3053 const char *fwname; 3054 int err, status; 3055 u32 dev_id; 3056 u8 param; 3057 3058 calltime = ktime_get(); 3059 3060 err = btusb_mtk_id_get(data, &dev_id); 3061 if (err < 0) { 3062 bt_dev_err(hdev, "Failed to get device id (%d)", err); 3063 return err; 3064 } 3065 3066 switch (dev_id) { 3067 case 0x7663: 3068 fwname = FIRMWARE_MT7663; 3069 break; 3070 case 0x7668: 3071 fwname = FIRMWARE_MT7668; 3072 break; 3073 default: 3074 bt_dev_err(hdev, "Unsupported support hardware variant (%08x)", 3075 dev_id); 3076 return -ENODEV; 3077 } 3078 3079 /* Query whether the firmware is already download */ 3080 wmt_params.op = BTMTK_WMT_SEMAPHORE; 3081 wmt_params.flag = 1; 3082 wmt_params.dlen = 0; 3083 wmt_params.data = NULL; 3084 wmt_params.status = &status; 3085 3086 err = btusb_mtk_hci_wmt_sync(hdev, &wmt_params); 3087 if (err < 0) { 3088 bt_dev_err(hdev, "Failed to query firmware status (%d)", err); 3089 return err; 3090 } 3091 3092 if (status == BTMTK_WMT_PATCH_DONE) { 3093 bt_dev_info(hdev, "firmware already downloaded"); 3094 goto ignore_setup_fw; 3095 } 3096 3097 /* Setup a firmware which the device definitely requires */ 3098 err = btusb_mtk_setup_firmware(hdev, fwname); 3099 if (err < 0) 3100 return err; 3101 3102 ignore_setup_fw: 3103 err = readx_poll_timeout(btusb_mtk_func_query, hdev, status, 3104 status < 0 || status != BTMTK_WMT_ON_PROGRESS, 3105 2000, 5000000); 3106 /* -ETIMEDOUT happens */ 3107 if (err < 0) 3108 return err; 3109 3110 /* The other errors happen in btusb_mtk_func_query */ 3111 if (status < 0) 3112 return status; 3113 3114 if (status == BTMTK_WMT_ON_DONE) { 3115 bt_dev_info(hdev, "function already on"); 3116 goto ignore_func_on; 3117 } 3118 3119 /* Enable Bluetooth protocol */ 3120 param = 1; 3121 wmt_params.op = BTMTK_WMT_FUNC_CTRL; 3122 wmt_params.flag = 0; 3123 wmt_params.dlen = sizeof(param); 3124 wmt_params.data = ¶m; 3125 wmt_params.status = NULL; 3126 3127 err = btusb_mtk_hci_wmt_sync(hdev, &wmt_params); 3128 if (err < 0) { 3129 bt_dev_err(hdev, "Failed to send wmt func ctrl (%d)", err); 3130 return err; 3131 } 3132 3133 ignore_func_on: 3134 /* Apply the low power environment setup */ 3135 tci_sleep.mode = 0x5; 3136 tci_sleep.duration = cpu_to_le16(0x640); 3137 tci_sleep.host_duration = cpu_to_le16(0x640); 3138 tci_sleep.host_wakeup_pin = 0; 3139 tci_sleep.time_compensation = 0; 3140 3141 skb = __hci_cmd_sync(hdev, 0xfc7a, sizeof(tci_sleep), &tci_sleep, 3142 HCI_INIT_TIMEOUT); 3143 if (IS_ERR(skb)) { 3144 err = PTR_ERR(skb); 3145 bt_dev_err(hdev, "Failed to apply low power setting (%d)", err); 3146 return err; 3147 } 3148 kfree_skb(skb); 3149 3150 rettime = ktime_get(); 3151 delta = ktime_sub(rettime, calltime); 3152 duration = (unsigned long long)ktime_to_ns(delta) >> 10; 3153 3154 bt_dev_info(hdev, "Device setup in %llu usecs", duration); 3155 3156 return 0; 3157 } 3158 3159 static int btusb_mtk_shutdown(struct hci_dev *hdev) 3160 { 3161 struct btmtk_hci_wmt_params wmt_params; 3162 u8 param = 0; 3163 int err; 3164 3165 /* Disable the device */ 3166 wmt_params.op = BTMTK_WMT_FUNC_CTRL; 3167 wmt_params.flag = 0; 3168 wmt_params.dlen = sizeof(param); 3169 wmt_params.data = ¶m; 3170 wmt_params.status = NULL; 3171 3172 err = btusb_mtk_hci_wmt_sync(hdev, &wmt_params); 3173 if (err < 0) { 3174 bt_dev_err(hdev, "Failed to send wmt func ctrl (%d)", err); 3175 return err; 3176 } 3177 3178 return 0; 3179 } 3180 3181 MODULE_FIRMWARE(FIRMWARE_MT7663); 3182 MODULE_FIRMWARE(FIRMWARE_MT7668); 3183 3184 #ifdef CONFIG_PM 3185 /* Configure an out-of-band gpio as wake-up pin, if specified in device tree */ 3186 static int marvell_config_oob_wake(struct hci_dev *hdev) 3187 { 3188 struct sk_buff *skb; 3189 struct btusb_data *data = hci_get_drvdata(hdev); 3190 struct device *dev = &data->udev->dev; 3191 u16 pin, gap, opcode; 3192 int ret; 3193 u8 cmd[5]; 3194 3195 /* Move on if no wakeup pin specified */ 3196 if (of_property_read_u16(dev->of_node, "marvell,wakeup-pin", &pin) || 3197 of_property_read_u16(dev->of_node, "marvell,wakeup-gap-ms", &gap)) 3198 return 0; 3199 3200 /* Vendor specific command to configure a GPIO as wake-up pin */ 3201 opcode = hci_opcode_pack(0x3F, 0x59); 3202 cmd[0] = opcode & 0xFF; 3203 cmd[1] = opcode >> 8; 3204 cmd[2] = 2; /* length of parameters that follow */ 3205 cmd[3] = pin; 3206 cmd[4] = gap; /* time in ms, for which wakeup pin should be asserted */ 3207 3208 skb = bt_skb_alloc(sizeof(cmd), GFP_KERNEL); 3209 if (!skb) { 3210 bt_dev_err(hdev, "%s: No memory\n", __func__); 3211 return -ENOMEM; 3212 } 3213 3214 skb_put_data(skb, cmd, sizeof(cmd)); 3215 hci_skb_pkt_type(skb) = HCI_COMMAND_PKT; 3216 3217 ret = btusb_send_frame(hdev, skb); 3218 if (ret) { 3219 bt_dev_err(hdev, "%s: configuration failed\n", __func__); 3220 kfree_skb(skb); 3221 return ret; 3222 } 3223 3224 return 0; 3225 } 3226 #endif 3227 3228 static int btusb_set_bdaddr_marvell(struct hci_dev *hdev, 3229 const bdaddr_t *bdaddr) 3230 { 3231 struct sk_buff *skb; 3232 u8 buf[8]; 3233 long ret; 3234 3235 buf[0] = 0xfe; 3236 buf[1] = sizeof(bdaddr_t); 3237 memcpy(buf + 2, bdaddr, sizeof(bdaddr_t)); 3238 3239 skb = __hci_cmd_sync(hdev, 0xfc22, sizeof(buf), buf, HCI_INIT_TIMEOUT); 3240 if (IS_ERR(skb)) { 3241 ret = PTR_ERR(skb); 3242 bt_dev_err(hdev, "changing Marvell device address failed (%ld)", 3243 ret); 3244 return ret; 3245 } 3246 kfree_skb(skb); 3247 3248 return 0; 3249 } 3250 3251 static int btusb_set_bdaddr_ath3012(struct hci_dev *hdev, 3252 const bdaddr_t *bdaddr) 3253 { 3254 struct sk_buff *skb; 3255 u8 buf[10]; 3256 long ret; 3257 3258 buf[0] = 0x01; 3259 buf[1] = 0x01; 3260 buf[2] = 0x00; 3261 buf[3] = sizeof(bdaddr_t); 3262 memcpy(buf + 4, bdaddr, sizeof(bdaddr_t)); 3263 3264 skb = __hci_cmd_sync(hdev, 0xfc0b, sizeof(buf), buf, HCI_INIT_TIMEOUT); 3265 if (IS_ERR(skb)) { 3266 ret = PTR_ERR(skb); 3267 bt_dev_err(hdev, "Change address command failed (%ld)", ret); 3268 return ret; 3269 } 3270 kfree_skb(skb); 3271 3272 return 0; 3273 } 3274 3275 #define QCA_DFU_PACKET_LEN 4096 3276 3277 #define QCA_GET_TARGET_VERSION 0x09 3278 #define QCA_CHECK_STATUS 0x05 3279 #define QCA_DFU_DOWNLOAD 0x01 3280 3281 #define QCA_SYSCFG_UPDATED 0x40 3282 #define QCA_PATCH_UPDATED 0x80 3283 #define QCA_DFU_TIMEOUT 3000 3284 3285 struct qca_version { 3286 __le32 rom_version; 3287 __le32 patch_version; 3288 __le32 ram_version; 3289 __le32 ref_clock; 3290 __u8 reserved[4]; 3291 } __packed; 3292 3293 struct qca_rampatch_version { 3294 __le16 rom_version; 3295 __le16 patch_version; 3296 } __packed; 3297 3298 struct qca_device_info { 3299 u32 rom_version; 3300 u8 rampatch_hdr; /* length of header in rampatch */ 3301 u8 nvm_hdr; /* length of header in NVM */ 3302 u8 ver_offset; /* offset of version structure in rampatch */ 3303 }; 3304 3305 static const struct qca_device_info qca_devices_table[] = { 3306 { 0x00000100, 20, 4, 10 }, /* Rome 1.0 */ 3307 { 0x00000101, 20, 4, 10 }, /* Rome 1.1 */ 3308 { 0x00000200, 28, 4, 18 }, /* Rome 2.0 */ 3309 { 0x00000201, 28, 4, 18 }, /* Rome 2.1 */ 3310 { 0x00000300, 28, 4, 18 }, /* Rome 3.0 */ 3311 { 0x00000302, 28, 4, 18 }, /* Rome 3.2 */ 3312 }; 3313 3314 static int btusb_qca_send_vendor_req(struct usb_device *udev, u8 request, 3315 void *data, u16 size) 3316 { 3317 int pipe, err; 3318 u8 *buf; 3319 3320 buf = kmalloc(size, GFP_KERNEL); 3321 if (!buf) 3322 return -ENOMEM; 3323 3324 /* Found some of USB hosts have IOT issues with ours so that we should 3325 * not wait until HCI layer is ready. 3326 */ 3327 pipe = usb_rcvctrlpipe(udev, 0); 3328 err = usb_control_msg(udev, pipe, request, USB_TYPE_VENDOR | USB_DIR_IN, 3329 0, 0, buf, size, USB_CTRL_SET_TIMEOUT); 3330 if (err < 0) { 3331 dev_err(&udev->dev, "Failed to access otp area (%d)", err); 3332 goto done; 3333 } 3334 3335 memcpy(data, buf, size); 3336 3337 done: 3338 kfree(buf); 3339 3340 return err; 3341 } 3342 3343 static int btusb_setup_qca_download_fw(struct hci_dev *hdev, 3344 const struct firmware *firmware, 3345 size_t hdr_size) 3346 { 3347 struct btusb_data *btdata = hci_get_drvdata(hdev); 3348 struct usb_device *udev = btdata->udev; 3349 size_t count, size, sent = 0; 3350 int pipe, len, err; 3351 u8 *buf; 3352 3353 buf = kmalloc(QCA_DFU_PACKET_LEN, GFP_KERNEL); 3354 if (!buf) 3355 return -ENOMEM; 3356 3357 count = firmware->size; 3358 3359 size = min_t(size_t, count, hdr_size); 3360 memcpy(buf, firmware->data, size); 3361 3362 /* USB patches should go down to controller through USB path 3363 * because binary format fits to go down through USB channel. 3364 * USB control path is for patching headers and USB bulk is for 3365 * patch body. 3366 */ 3367 pipe = usb_sndctrlpipe(udev, 0); 3368 err = usb_control_msg(udev, pipe, QCA_DFU_DOWNLOAD, USB_TYPE_VENDOR, 3369 0, 0, buf, size, USB_CTRL_SET_TIMEOUT); 3370 if (err < 0) { 3371 bt_dev_err(hdev, "Failed to send headers (%d)", err); 3372 goto done; 3373 } 3374 3375 sent += size; 3376 count -= size; 3377 3378 while (count) { 3379 size = min_t(size_t, count, QCA_DFU_PACKET_LEN); 3380 3381 memcpy(buf, firmware->data + sent, size); 3382 3383 pipe = usb_sndbulkpipe(udev, 0x02); 3384 err = usb_bulk_msg(udev, pipe, buf, size, &len, 3385 QCA_DFU_TIMEOUT); 3386 if (err < 0) { 3387 bt_dev_err(hdev, "Failed to send body at %zd of %zd (%d)", 3388 sent, firmware->size, err); 3389 break; 3390 } 3391 3392 if (size != len) { 3393 bt_dev_err(hdev, "Failed to get bulk buffer"); 3394 err = -EILSEQ; 3395 break; 3396 } 3397 3398 sent += size; 3399 count -= size; 3400 } 3401 3402 done: 3403 kfree(buf); 3404 return err; 3405 } 3406 3407 static int btusb_setup_qca_load_rampatch(struct hci_dev *hdev, 3408 struct qca_version *ver, 3409 const struct qca_device_info *info) 3410 { 3411 struct qca_rampatch_version *rver; 3412 const struct firmware *fw; 3413 u32 ver_rom, ver_patch; 3414 u16 rver_rom, rver_patch; 3415 char fwname[64]; 3416 int err; 3417 3418 ver_rom = le32_to_cpu(ver->rom_version); 3419 ver_patch = le32_to_cpu(ver->patch_version); 3420 3421 snprintf(fwname, sizeof(fwname), "qca/rampatch_usb_%08x.bin", ver_rom); 3422 3423 err = request_firmware(&fw, fwname, &hdev->dev); 3424 if (err) { 3425 bt_dev_err(hdev, "failed to request rampatch file: %s (%d)", 3426 fwname, err); 3427 return err; 3428 } 3429 3430 bt_dev_info(hdev, "using rampatch file: %s", fwname); 3431 3432 rver = (struct qca_rampatch_version *)(fw->data + info->ver_offset); 3433 rver_rom = le16_to_cpu(rver->rom_version); 3434 rver_patch = le16_to_cpu(rver->patch_version); 3435 3436 bt_dev_info(hdev, "QCA: patch rome 0x%x build 0x%x, " 3437 "firmware rome 0x%x build 0x%x", 3438 rver_rom, rver_patch, ver_rom, ver_patch); 3439 3440 if (rver_rom != ver_rom || rver_patch <= ver_patch) { 3441 bt_dev_err(hdev, "rampatch file version did not match with firmware"); 3442 err = -EINVAL; 3443 goto done; 3444 } 3445 3446 err = btusb_setup_qca_download_fw(hdev, fw, info->rampatch_hdr); 3447 3448 done: 3449 release_firmware(fw); 3450 3451 return err; 3452 } 3453 3454 static int btusb_setup_qca_load_nvm(struct hci_dev *hdev, 3455 struct qca_version *ver, 3456 const struct qca_device_info *info) 3457 { 3458 const struct firmware *fw; 3459 char fwname[64]; 3460 int err; 3461 3462 snprintf(fwname, sizeof(fwname), "qca/nvm_usb_%08x.bin", 3463 le32_to_cpu(ver->rom_version)); 3464 3465 err = request_firmware(&fw, fwname, &hdev->dev); 3466 if (err) { 3467 bt_dev_err(hdev, "failed to request NVM file: %s (%d)", 3468 fwname, err); 3469 return err; 3470 } 3471 3472 bt_dev_info(hdev, "using NVM file: %s", fwname); 3473 3474 err = btusb_setup_qca_download_fw(hdev, fw, info->nvm_hdr); 3475 3476 release_firmware(fw); 3477 3478 return err; 3479 } 3480 3481 /* identify the ROM version and check whether patches are needed */ 3482 static bool btusb_qca_need_patch(struct usb_device *udev) 3483 { 3484 struct qca_version ver; 3485 3486 if (btusb_qca_send_vendor_req(udev, QCA_GET_TARGET_VERSION, &ver, 3487 sizeof(ver)) < 0) 3488 return false; 3489 /* only low ROM versions need patches */ 3490 return !(le32_to_cpu(ver.rom_version) & ~0xffffU); 3491 } 3492 3493 static int btusb_setup_qca(struct hci_dev *hdev) 3494 { 3495 struct btusb_data *btdata = hci_get_drvdata(hdev); 3496 struct usb_device *udev = btdata->udev; 3497 const struct qca_device_info *info = NULL; 3498 struct qca_version ver; 3499 u32 ver_rom; 3500 u8 status; 3501 int i, err; 3502 3503 err = btusb_qca_send_vendor_req(udev, QCA_GET_TARGET_VERSION, &ver, 3504 sizeof(ver)); 3505 if (err < 0) 3506 return err; 3507 3508 ver_rom = le32_to_cpu(ver.rom_version); 3509 /* Don't care about high ROM versions */ 3510 if (ver_rom & ~0xffffU) 3511 return 0; 3512 3513 for (i = 0; i < ARRAY_SIZE(qca_devices_table); i++) { 3514 if (ver_rom == qca_devices_table[i].rom_version) 3515 info = &qca_devices_table[i]; 3516 } 3517 if (!info) { 3518 bt_dev_err(hdev, "don't support firmware rome 0x%x", ver_rom); 3519 return -ENODEV; 3520 } 3521 3522 err = btusb_qca_send_vendor_req(udev, QCA_CHECK_STATUS, &status, 3523 sizeof(status)); 3524 if (err < 0) 3525 return err; 3526 3527 if (!(status & QCA_PATCH_UPDATED)) { 3528 err = btusb_setup_qca_load_rampatch(hdev, &ver, info); 3529 if (err < 0) 3530 return err; 3531 } 3532 3533 if (!(status & QCA_SYSCFG_UPDATED)) { 3534 err = btusb_setup_qca_load_nvm(hdev, &ver, info); 3535 if (err < 0) 3536 return err; 3537 } 3538 3539 return 0; 3540 } 3541 3542 static inline int __set_diag_interface(struct hci_dev *hdev) 3543 { 3544 struct btusb_data *data = hci_get_drvdata(hdev); 3545 struct usb_interface *intf = data->diag; 3546 int i; 3547 3548 if (!data->diag) 3549 return -ENODEV; 3550 3551 data->diag_tx_ep = NULL; 3552 data->diag_rx_ep = NULL; 3553 3554 for (i = 0; i < intf->cur_altsetting->desc.bNumEndpoints; i++) { 3555 struct usb_endpoint_descriptor *ep_desc; 3556 3557 ep_desc = &intf->cur_altsetting->endpoint[i].desc; 3558 3559 if (!data->diag_tx_ep && usb_endpoint_is_bulk_out(ep_desc)) { 3560 data->diag_tx_ep = ep_desc; 3561 continue; 3562 } 3563 3564 if (!data->diag_rx_ep && usb_endpoint_is_bulk_in(ep_desc)) { 3565 data->diag_rx_ep = ep_desc; 3566 continue; 3567 } 3568 } 3569 3570 if (!data->diag_tx_ep || !data->diag_rx_ep) { 3571 bt_dev_err(hdev, "invalid diagnostic descriptors"); 3572 return -ENODEV; 3573 } 3574 3575 return 0; 3576 } 3577 3578 static struct urb *alloc_diag_urb(struct hci_dev *hdev, bool enable) 3579 { 3580 struct btusb_data *data = hci_get_drvdata(hdev); 3581 struct sk_buff *skb; 3582 struct urb *urb; 3583 unsigned int pipe; 3584 3585 if (!data->diag_tx_ep) 3586 return ERR_PTR(-ENODEV); 3587 3588 urb = usb_alloc_urb(0, GFP_KERNEL); 3589 if (!urb) 3590 return ERR_PTR(-ENOMEM); 3591 3592 skb = bt_skb_alloc(2, GFP_KERNEL); 3593 if (!skb) { 3594 usb_free_urb(urb); 3595 return ERR_PTR(-ENOMEM); 3596 } 3597 3598 skb_put_u8(skb, 0xf0); 3599 skb_put_u8(skb, enable); 3600 3601 pipe = usb_sndbulkpipe(data->udev, data->diag_tx_ep->bEndpointAddress); 3602 3603 usb_fill_bulk_urb(urb, data->udev, pipe, 3604 skb->data, skb->len, btusb_tx_complete, skb); 3605 3606 skb->dev = (void *)hdev; 3607 3608 return urb; 3609 } 3610 3611 static int btusb_bcm_set_diag(struct hci_dev *hdev, bool enable) 3612 { 3613 struct btusb_data *data = hci_get_drvdata(hdev); 3614 struct urb *urb; 3615 3616 if (!data->diag) 3617 return -ENODEV; 3618 3619 if (!test_bit(HCI_RUNNING, &hdev->flags)) 3620 return -ENETDOWN; 3621 3622 urb = alloc_diag_urb(hdev, enable); 3623 if (IS_ERR(urb)) 3624 return PTR_ERR(urb); 3625 3626 return submit_or_queue_tx_urb(hdev, urb); 3627 } 3628 3629 #ifdef CONFIG_PM 3630 static irqreturn_t btusb_oob_wake_handler(int irq, void *priv) 3631 { 3632 struct btusb_data *data = priv; 3633 3634 pm_wakeup_event(&data->udev->dev, 0); 3635 pm_system_wakeup(); 3636 3637 /* Disable only if not already disabled (keep it balanced) */ 3638 if (test_and_clear_bit(BTUSB_OOB_WAKE_ENABLED, &data->flags)) { 3639 disable_irq_nosync(irq); 3640 disable_irq_wake(irq); 3641 } 3642 return IRQ_HANDLED; 3643 } 3644 3645 static const struct of_device_id btusb_match_table[] = { 3646 { .compatible = "usb1286,204e" }, 3647 { .compatible = "usbcf3,e300" }, /* QCA6174A */ 3648 { .compatible = "usb4ca,301a" }, /* QCA6174A (Lite-On) */ 3649 { } 3650 }; 3651 MODULE_DEVICE_TABLE(of, btusb_match_table); 3652 3653 /* Use an oob wakeup pin? */ 3654 static int btusb_config_oob_wake(struct hci_dev *hdev) 3655 { 3656 struct btusb_data *data = hci_get_drvdata(hdev); 3657 struct device *dev = &data->udev->dev; 3658 int irq, ret; 3659 3660 clear_bit(BTUSB_OOB_WAKE_ENABLED, &data->flags); 3661 3662 if (!of_match_device(btusb_match_table, dev)) 3663 return 0; 3664 3665 /* Move on if no IRQ specified */ 3666 irq = of_irq_get_byname(dev->of_node, "wakeup"); 3667 if (irq <= 0) { 3668 bt_dev_dbg(hdev, "%s: no OOB Wakeup IRQ in DT", __func__); 3669 return 0; 3670 } 3671 3672 irq_set_status_flags(irq, IRQ_NOAUTOEN); 3673 ret = devm_request_irq(&hdev->dev, irq, btusb_oob_wake_handler, 3674 0, "OOB Wake-on-BT", data); 3675 if (ret) { 3676 bt_dev_err(hdev, "%s: IRQ request failed", __func__); 3677 return ret; 3678 } 3679 3680 ret = device_init_wakeup(dev, true); 3681 if (ret) { 3682 bt_dev_err(hdev, "%s: failed to init_wakeup", __func__); 3683 return ret; 3684 } 3685 3686 data->oob_wake_irq = irq; 3687 bt_dev_info(hdev, "OOB Wake-on-BT configured at IRQ %u", irq); 3688 return 0; 3689 } 3690 #endif 3691 3692 static void btusb_check_needs_reset_resume(struct usb_interface *intf) 3693 { 3694 if (dmi_check_system(btusb_needs_reset_resume_table)) 3695 interface_to_usbdev(intf)->quirks |= USB_QUIRK_RESET_RESUME; 3696 } 3697 3698 static int btusb_probe(struct usb_interface *intf, 3699 const struct usb_device_id *id) 3700 { 3701 struct usb_endpoint_descriptor *ep_desc; 3702 struct gpio_desc *reset_gpio; 3703 struct btusb_data *data; 3704 struct hci_dev *hdev; 3705 unsigned ifnum_base; 3706 int i, err; 3707 3708 BT_DBG("intf %p id %p", intf, id); 3709 3710 /* interface numbers are hardcoded in the spec */ 3711 if (intf->cur_altsetting->desc.bInterfaceNumber != 0) { 3712 if (!(id->driver_info & BTUSB_IFNUM_2)) 3713 return -ENODEV; 3714 if (intf->cur_altsetting->desc.bInterfaceNumber != 2) 3715 return -ENODEV; 3716 } 3717 3718 ifnum_base = intf->cur_altsetting->desc.bInterfaceNumber; 3719 3720 if (!id->driver_info) { 3721 const struct usb_device_id *match; 3722 3723 match = usb_match_id(intf, blacklist_table); 3724 if (match) 3725 id = match; 3726 } 3727 3728 if (id->driver_info == BTUSB_IGNORE) 3729 return -ENODEV; 3730 3731 if (id->driver_info & BTUSB_ATH3012) { 3732 struct usb_device *udev = interface_to_usbdev(intf); 3733 3734 /* Old firmware would otherwise let ath3k driver load 3735 * patch and sysconfig files 3736 */ 3737 if (le16_to_cpu(udev->descriptor.bcdDevice) <= 0x0001 && 3738 !btusb_qca_need_patch(udev)) 3739 return -ENODEV; 3740 } 3741 3742 data = devm_kzalloc(&intf->dev, sizeof(*data), GFP_KERNEL); 3743 if (!data) 3744 return -ENOMEM; 3745 3746 for (i = 0; i < intf->cur_altsetting->desc.bNumEndpoints; i++) { 3747 ep_desc = &intf->cur_altsetting->endpoint[i].desc; 3748 3749 if (!data->intr_ep && usb_endpoint_is_int_in(ep_desc)) { 3750 data->intr_ep = ep_desc; 3751 continue; 3752 } 3753 3754 if (!data->bulk_tx_ep && usb_endpoint_is_bulk_out(ep_desc)) { 3755 data->bulk_tx_ep = ep_desc; 3756 continue; 3757 } 3758 3759 if (!data->bulk_rx_ep && usb_endpoint_is_bulk_in(ep_desc)) { 3760 data->bulk_rx_ep = ep_desc; 3761 continue; 3762 } 3763 } 3764 3765 if (!data->intr_ep || !data->bulk_tx_ep || !data->bulk_rx_ep) 3766 return -ENODEV; 3767 3768 if (id->driver_info & BTUSB_AMP) { 3769 data->cmdreq_type = USB_TYPE_CLASS | 0x01; 3770 data->cmdreq = 0x2b; 3771 } else { 3772 data->cmdreq_type = USB_TYPE_CLASS; 3773 data->cmdreq = 0x00; 3774 } 3775 3776 data->udev = interface_to_usbdev(intf); 3777 data->intf = intf; 3778 3779 INIT_WORK(&data->work, btusb_work); 3780 INIT_WORK(&data->waker, btusb_waker); 3781 init_usb_anchor(&data->deferred); 3782 init_usb_anchor(&data->tx_anchor); 3783 spin_lock_init(&data->txlock); 3784 3785 init_usb_anchor(&data->intr_anchor); 3786 init_usb_anchor(&data->bulk_anchor); 3787 init_usb_anchor(&data->isoc_anchor); 3788 init_usb_anchor(&data->diag_anchor); 3789 init_usb_anchor(&data->ctrl_anchor); 3790 spin_lock_init(&data->rxlock); 3791 3792 if (id->driver_info & BTUSB_INTEL_NEW) { 3793 data->recv_event = btusb_recv_event_intel; 3794 data->recv_bulk = btusb_recv_bulk_intel; 3795 set_bit(BTUSB_BOOTLOADER, &data->flags); 3796 } else { 3797 data->recv_event = hci_recv_frame; 3798 data->recv_bulk = btusb_recv_bulk; 3799 } 3800 3801 hdev = hci_alloc_dev(); 3802 if (!hdev) 3803 return -ENOMEM; 3804 3805 hdev->bus = HCI_USB; 3806 hci_set_drvdata(hdev, data); 3807 3808 if (id->driver_info & BTUSB_AMP) 3809 hdev->dev_type = HCI_AMP; 3810 else 3811 hdev->dev_type = HCI_PRIMARY; 3812 3813 data->hdev = hdev; 3814 3815 SET_HCIDEV_DEV(hdev, &intf->dev); 3816 3817 reset_gpio = gpiod_get_optional(&data->udev->dev, "reset", 3818 GPIOD_OUT_LOW); 3819 if (IS_ERR(reset_gpio)) { 3820 err = PTR_ERR(reset_gpio); 3821 goto out_free_dev; 3822 } else if (reset_gpio) { 3823 data->reset_gpio = reset_gpio; 3824 } 3825 3826 hdev->open = btusb_open; 3827 hdev->close = btusb_close; 3828 hdev->flush = btusb_flush; 3829 hdev->send = btusb_send_frame; 3830 hdev->notify = btusb_notify; 3831 3832 #ifdef CONFIG_PM 3833 err = btusb_config_oob_wake(hdev); 3834 if (err) 3835 goto out_free_dev; 3836 3837 /* Marvell devices may need a specific chip configuration */ 3838 if (id->driver_info & BTUSB_MARVELL && data->oob_wake_irq) { 3839 err = marvell_config_oob_wake(hdev); 3840 if (err) 3841 goto out_free_dev; 3842 } 3843 #endif 3844 if (id->driver_info & BTUSB_CW6622) 3845 set_bit(HCI_QUIRK_BROKEN_STORED_LINK_KEY, &hdev->quirks); 3846 3847 if (id->driver_info & BTUSB_BCM2045) 3848 set_bit(HCI_QUIRK_BROKEN_STORED_LINK_KEY, &hdev->quirks); 3849 3850 if (id->driver_info & BTUSB_BCM92035) 3851 hdev->setup = btusb_setup_bcm92035; 3852 3853 if (IS_ENABLED(CONFIG_BT_HCIBTUSB_BCM) && 3854 (id->driver_info & BTUSB_BCM_PATCHRAM)) { 3855 hdev->manufacturer = 15; 3856 hdev->setup = btbcm_setup_patchram; 3857 hdev->set_diag = btusb_bcm_set_diag; 3858 hdev->set_bdaddr = btbcm_set_bdaddr; 3859 3860 /* Broadcom LM_DIAG Interface numbers are hardcoded */ 3861 data->diag = usb_ifnum_to_if(data->udev, ifnum_base + 2); 3862 } 3863 3864 if (IS_ENABLED(CONFIG_BT_HCIBTUSB_BCM) && 3865 (id->driver_info & BTUSB_BCM_APPLE)) { 3866 hdev->manufacturer = 15; 3867 hdev->setup = btbcm_setup_apple; 3868 hdev->set_diag = btusb_bcm_set_diag; 3869 3870 /* Broadcom LM_DIAG Interface numbers are hardcoded */ 3871 data->diag = usb_ifnum_to_if(data->udev, ifnum_base + 2); 3872 } 3873 3874 if (id->driver_info & BTUSB_INTEL) { 3875 hdev->manufacturer = 2; 3876 hdev->setup = btusb_setup_intel; 3877 hdev->shutdown = btusb_shutdown_intel; 3878 hdev->set_diag = btintel_set_diag_mfg; 3879 hdev->set_bdaddr = btintel_set_bdaddr; 3880 hdev->cmd_timeout = btusb_intel_cmd_timeout; 3881 set_bit(HCI_QUIRK_STRICT_DUPLICATE_FILTER, &hdev->quirks); 3882 set_bit(HCI_QUIRK_SIMULTANEOUS_DISCOVERY, &hdev->quirks); 3883 set_bit(HCI_QUIRK_NON_PERSISTENT_DIAG, &hdev->quirks); 3884 } 3885 3886 if (id->driver_info & BTUSB_INTEL_NEW) { 3887 hdev->manufacturer = 2; 3888 hdev->send = btusb_send_frame_intel; 3889 hdev->setup = btusb_setup_intel_new; 3890 hdev->shutdown = btusb_shutdown_intel_new; 3891 hdev->hw_error = btintel_hw_error; 3892 hdev->set_diag = btintel_set_diag; 3893 hdev->set_bdaddr = btintel_set_bdaddr; 3894 hdev->cmd_timeout = btusb_intel_cmd_timeout; 3895 set_bit(HCI_QUIRK_STRICT_DUPLICATE_FILTER, &hdev->quirks); 3896 set_bit(HCI_QUIRK_SIMULTANEOUS_DISCOVERY, &hdev->quirks); 3897 set_bit(HCI_QUIRK_NON_PERSISTENT_DIAG, &hdev->quirks); 3898 } 3899 3900 if (id->driver_info & BTUSB_MARVELL) 3901 hdev->set_bdaddr = btusb_set_bdaddr_marvell; 3902 3903 if (IS_ENABLED(CONFIG_BT_HCIBTUSB_MTK) && 3904 (id->driver_info & BTUSB_MEDIATEK)) { 3905 hdev->setup = btusb_mtk_setup; 3906 hdev->shutdown = btusb_mtk_shutdown; 3907 hdev->manufacturer = 70; 3908 set_bit(HCI_QUIRK_NON_PERSISTENT_SETUP, &hdev->quirks); 3909 } 3910 3911 if (id->driver_info & BTUSB_SWAVE) { 3912 set_bit(HCI_QUIRK_FIXUP_INQUIRY_MODE, &hdev->quirks); 3913 set_bit(HCI_QUIRK_BROKEN_LOCAL_COMMANDS, &hdev->quirks); 3914 } 3915 3916 if (id->driver_info & BTUSB_INTEL_BOOT) { 3917 hdev->manufacturer = 2; 3918 set_bit(HCI_QUIRK_RAW_DEVICE, &hdev->quirks); 3919 } 3920 3921 if (id->driver_info & BTUSB_ATH3012) { 3922 data->setup_on_usb = btusb_setup_qca; 3923 hdev->set_bdaddr = btusb_set_bdaddr_ath3012; 3924 set_bit(HCI_QUIRK_SIMULTANEOUS_DISCOVERY, &hdev->quirks); 3925 set_bit(HCI_QUIRK_STRICT_DUPLICATE_FILTER, &hdev->quirks); 3926 } 3927 3928 if (id->driver_info & BTUSB_QCA_ROME) { 3929 data->setup_on_usb = btusb_setup_qca; 3930 hdev->set_bdaddr = btusb_set_bdaddr_ath3012; 3931 set_bit(HCI_QUIRK_SIMULTANEOUS_DISCOVERY, &hdev->quirks); 3932 btusb_check_needs_reset_resume(intf); 3933 } 3934 3935 if (IS_ENABLED(CONFIG_BT_HCIBTUSB_RTL) && 3936 (id->driver_info & BTUSB_REALTEK)) { 3937 hdev->setup = btrtl_setup_realtek; 3938 hdev->shutdown = btrtl_shutdown_realtek; 3939 hdev->cmd_timeout = btusb_rtl_cmd_timeout; 3940 3941 /* Realtek devices lose their updated firmware over global 3942 * suspend that means host doesn't send SET_FEATURE 3943 * (DEVICE_REMOTE_WAKEUP) 3944 */ 3945 set_bit(BTUSB_WAKEUP_DISABLE, &data->flags); 3946 3947 err = usb_autopm_get_interface(intf); 3948 if (err < 0) 3949 goto out_free_dev; 3950 } 3951 3952 if (id->driver_info & BTUSB_AMP) { 3953 /* AMP controllers do not support SCO packets */ 3954 data->isoc = NULL; 3955 } else { 3956 /* Interface orders are hardcoded in the specification */ 3957 data->isoc = usb_ifnum_to_if(data->udev, ifnum_base + 1); 3958 data->isoc_ifnum = ifnum_base + 1; 3959 } 3960 3961 if (!reset) 3962 set_bit(HCI_QUIRK_RESET_ON_CLOSE, &hdev->quirks); 3963 3964 if (force_scofix || id->driver_info & BTUSB_WRONG_SCO_MTU) { 3965 if (!disable_scofix) 3966 set_bit(HCI_QUIRK_FIXUP_BUFFER_SIZE, &hdev->quirks); 3967 } 3968 3969 if (id->driver_info & BTUSB_BROKEN_ISOC) 3970 data->isoc = NULL; 3971 3972 if (id->driver_info & BTUSB_WIDEBAND_SPEECH) 3973 set_bit(HCI_QUIRK_WIDEBAND_SPEECH_SUPPORTED, &hdev->quirks); 3974 3975 if (id->driver_info & BTUSB_DIGIANSWER) { 3976 data->cmdreq_type = USB_TYPE_VENDOR; 3977 set_bit(HCI_QUIRK_RESET_ON_CLOSE, &hdev->quirks); 3978 } 3979 3980 if (id->driver_info & BTUSB_CSR) { 3981 struct usb_device *udev = data->udev; 3982 u16 bcdDevice = le16_to_cpu(udev->descriptor.bcdDevice); 3983 3984 /* Old firmware would otherwise execute USB reset */ 3985 if (bcdDevice < 0x117) 3986 set_bit(HCI_QUIRK_RESET_ON_CLOSE, &hdev->quirks); 3987 3988 /* Fake CSR devices with broken commands */ 3989 if (bcdDevice <= 0x100 || bcdDevice == 0x134) 3990 hdev->setup = btusb_setup_csr; 3991 3992 set_bit(HCI_QUIRK_SIMULTANEOUS_DISCOVERY, &hdev->quirks); 3993 } 3994 3995 if (id->driver_info & BTUSB_SNIFFER) { 3996 struct usb_device *udev = data->udev; 3997 3998 /* New sniffer firmware has crippled HCI interface */ 3999 if (le16_to_cpu(udev->descriptor.bcdDevice) > 0x997) 4000 set_bit(HCI_QUIRK_RAW_DEVICE, &hdev->quirks); 4001 } 4002 4003 if (id->driver_info & BTUSB_INTEL_BOOT) { 4004 /* A bug in the bootloader causes that interrupt interface is 4005 * only enabled after receiving SetInterface(0, AltSetting=0). 4006 */ 4007 err = usb_set_interface(data->udev, 0, 0); 4008 if (err < 0) { 4009 BT_ERR("failed to set interface 0, alt 0 %d", err); 4010 goto out_free_dev; 4011 } 4012 } 4013 4014 if (data->isoc) { 4015 err = usb_driver_claim_interface(&btusb_driver, 4016 data->isoc, data); 4017 if (err < 0) 4018 goto out_free_dev; 4019 } 4020 4021 if (IS_ENABLED(CONFIG_BT_HCIBTUSB_BCM) && data->diag) { 4022 if (!usb_driver_claim_interface(&btusb_driver, 4023 data->diag, data)) 4024 __set_diag_interface(hdev); 4025 else 4026 data->diag = NULL; 4027 } 4028 4029 if (enable_autosuspend) 4030 usb_enable_autosuspend(data->udev); 4031 4032 err = hci_register_dev(hdev); 4033 if (err < 0) 4034 goto out_free_dev; 4035 4036 usb_set_intfdata(intf, data); 4037 4038 return 0; 4039 4040 out_free_dev: 4041 if (data->reset_gpio) 4042 gpiod_put(data->reset_gpio); 4043 hci_free_dev(hdev); 4044 return err; 4045 } 4046 4047 static void btusb_disconnect(struct usb_interface *intf) 4048 { 4049 struct btusb_data *data = usb_get_intfdata(intf); 4050 struct hci_dev *hdev; 4051 4052 BT_DBG("intf %p", intf); 4053 4054 if (!data) 4055 return; 4056 4057 hdev = data->hdev; 4058 usb_set_intfdata(data->intf, NULL); 4059 4060 if (data->isoc) 4061 usb_set_intfdata(data->isoc, NULL); 4062 4063 if (data->diag) 4064 usb_set_intfdata(data->diag, NULL); 4065 4066 hci_unregister_dev(hdev); 4067 4068 if (intf == data->intf) { 4069 if (data->isoc) 4070 usb_driver_release_interface(&btusb_driver, data->isoc); 4071 if (data->diag) 4072 usb_driver_release_interface(&btusb_driver, data->diag); 4073 } else if (intf == data->isoc) { 4074 if (data->diag) 4075 usb_driver_release_interface(&btusb_driver, data->diag); 4076 usb_driver_release_interface(&btusb_driver, data->intf); 4077 } else if (intf == data->diag) { 4078 usb_driver_release_interface(&btusb_driver, data->intf); 4079 if (data->isoc) 4080 usb_driver_release_interface(&btusb_driver, data->isoc); 4081 } 4082 4083 if (data->oob_wake_irq) 4084 device_init_wakeup(&data->udev->dev, false); 4085 4086 if (data->reset_gpio) 4087 gpiod_put(data->reset_gpio); 4088 4089 hci_free_dev(hdev); 4090 } 4091 4092 #ifdef CONFIG_PM 4093 static int btusb_suspend(struct usb_interface *intf, pm_message_t message) 4094 { 4095 struct btusb_data *data = usb_get_intfdata(intf); 4096 4097 BT_DBG("intf %p", intf); 4098 4099 if (data->suspend_count++) 4100 return 0; 4101 4102 spin_lock_irq(&data->txlock); 4103 if (!(PMSG_IS_AUTO(message) && data->tx_in_flight)) { 4104 set_bit(BTUSB_SUSPENDING, &data->flags); 4105 spin_unlock_irq(&data->txlock); 4106 } else { 4107 spin_unlock_irq(&data->txlock); 4108 data->suspend_count--; 4109 return -EBUSY; 4110 } 4111 4112 cancel_work_sync(&data->work); 4113 4114 btusb_stop_traffic(data); 4115 usb_kill_anchored_urbs(&data->tx_anchor); 4116 4117 if (data->oob_wake_irq && device_may_wakeup(&data->udev->dev)) { 4118 set_bit(BTUSB_OOB_WAKE_ENABLED, &data->flags); 4119 enable_irq_wake(data->oob_wake_irq); 4120 enable_irq(data->oob_wake_irq); 4121 } 4122 4123 /* For global suspend, Realtek devices lose the loaded fw 4124 * in them. But for autosuspend, firmware should remain. 4125 * Actually, it depends on whether the usb host sends 4126 * set feature (enable wakeup) or not. 4127 */ 4128 if (test_bit(BTUSB_WAKEUP_DISABLE, &data->flags)) { 4129 if (PMSG_IS_AUTO(message) && 4130 device_can_wakeup(&data->udev->dev)) 4131 data->udev->do_remote_wakeup = 1; 4132 else if (!PMSG_IS_AUTO(message)) 4133 data->udev->reset_resume = 1; 4134 } 4135 4136 return 0; 4137 } 4138 4139 static void play_deferred(struct btusb_data *data) 4140 { 4141 struct urb *urb; 4142 int err; 4143 4144 while ((urb = usb_get_from_anchor(&data->deferred))) { 4145 usb_anchor_urb(urb, &data->tx_anchor); 4146 4147 err = usb_submit_urb(urb, GFP_ATOMIC); 4148 if (err < 0) { 4149 if (err != -EPERM && err != -ENODEV) 4150 BT_ERR("%s urb %p submission failed (%d)", 4151 data->hdev->name, urb, -err); 4152 kfree(urb->setup_packet); 4153 usb_unanchor_urb(urb); 4154 usb_free_urb(urb); 4155 break; 4156 } 4157 4158 data->tx_in_flight++; 4159 usb_free_urb(urb); 4160 } 4161 4162 /* Cleanup the rest deferred urbs. */ 4163 while ((urb = usb_get_from_anchor(&data->deferred))) { 4164 kfree(urb->setup_packet); 4165 usb_free_urb(urb); 4166 } 4167 } 4168 4169 static int btusb_resume(struct usb_interface *intf) 4170 { 4171 struct btusb_data *data = usb_get_intfdata(intf); 4172 struct hci_dev *hdev = data->hdev; 4173 int err = 0; 4174 4175 BT_DBG("intf %p", intf); 4176 4177 if (--data->suspend_count) 4178 return 0; 4179 4180 /* Disable only if not already disabled (keep it balanced) */ 4181 if (test_and_clear_bit(BTUSB_OOB_WAKE_ENABLED, &data->flags)) { 4182 disable_irq(data->oob_wake_irq); 4183 disable_irq_wake(data->oob_wake_irq); 4184 } 4185 4186 if (!test_bit(HCI_RUNNING, &hdev->flags)) 4187 goto done; 4188 4189 if (test_bit(BTUSB_INTR_RUNNING, &data->flags)) { 4190 err = btusb_submit_intr_urb(hdev, GFP_NOIO); 4191 if (err < 0) { 4192 clear_bit(BTUSB_INTR_RUNNING, &data->flags); 4193 goto failed; 4194 } 4195 } 4196 4197 if (test_bit(BTUSB_BULK_RUNNING, &data->flags)) { 4198 err = btusb_submit_bulk_urb(hdev, GFP_NOIO); 4199 if (err < 0) { 4200 clear_bit(BTUSB_BULK_RUNNING, &data->flags); 4201 goto failed; 4202 } 4203 4204 btusb_submit_bulk_urb(hdev, GFP_NOIO); 4205 } 4206 4207 if (test_bit(BTUSB_ISOC_RUNNING, &data->flags)) { 4208 if (btusb_submit_isoc_urb(hdev, GFP_NOIO) < 0) 4209 clear_bit(BTUSB_ISOC_RUNNING, &data->flags); 4210 else 4211 btusb_submit_isoc_urb(hdev, GFP_NOIO); 4212 } 4213 4214 spin_lock_irq(&data->txlock); 4215 play_deferred(data); 4216 clear_bit(BTUSB_SUSPENDING, &data->flags); 4217 spin_unlock_irq(&data->txlock); 4218 schedule_work(&data->work); 4219 4220 return 0; 4221 4222 failed: 4223 usb_scuttle_anchored_urbs(&data->deferred); 4224 done: 4225 spin_lock_irq(&data->txlock); 4226 clear_bit(BTUSB_SUSPENDING, &data->flags); 4227 spin_unlock_irq(&data->txlock); 4228 4229 return err; 4230 } 4231 #endif 4232 4233 static struct usb_driver btusb_driver = { 4234 .name = "btusb", 4235 .probe = btusb_probe, 4236 .disconnect = btusb_disconnect, 4237 #ifdef CONFIG_PM 4238 .suspend = btusb_suspend, 4239 .resume = btusb_resume, 4240 #endif 4241 .id_table = btusb_table, 4242 .supports_autosuspend = 1, 4243 .disable_hub_initiated_lpm = 1, 4244 }; 4245 4246 module_usb_driver(btusb_driver); 4247 4248 module_param(disable_scofix, bool, 0644); 4249 MODULE_PARM_DESC(disable_scofix, "Disable fixup of wrong SCO buffer size"); 4250 4251 module_param(force_scofix, bool, 0644); 4252 MODULE_PARM_DESC(force_scofix, "Force fixup of wrong SCO buffers size"); 4253 4254 module_param(enable_autosuspend, bool, 0644); 4255 MODULE_PARM_DESC(enable_autosuspend, "Enable USB autosuspend by default"); 4256 4257 module_param(reset, bool, 0644); 4258 MODULE_PARM_DESC(reset, "Send HCI reset command on initialization"); 4259 4260 MODULE_AUTHOR("Marcel Holtmann <marcel@holtmann.org>"); 4261 MODULE_DESCRIPTION("Generic Bluetooth USB driver ver " VERSION); 4262 MODULE_VERSION(VERSION); 4263 MODULE_LICENSE("GPL"); 4264