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