xref: /linux/drivers/bluetooth/btintel.c (revision 9f2c9170934eace462499ba0bfe042cc72900173)
1 // SPDX-License-Identifier: GPL-2.0-or-later
2 /*
3  *
4  *  Bluetooth support for Intel devices
5  *
6  *  Copyright (C) 2015  Intel Corporation
7  */
8 
9 #include <linux/module.h>
10 #include <linux/firmware.h>
11 #include <linux/regmap.h>
12 #include <asm/unaligned.h>
13 
14 #include <net/bluetooth/bluetooth.h>
15 #include <net/bluetooth/hci_core.h>
16 
17 #include "btintel.h"
18 
19 #define VERSION "0.1"
20 
21 #define BDADDR_INTEL		(&(bdaddr_t){{0x00, 0x8b, 0x9e, 0x19, 0x03, 0x00}})
22 #define RSA_HEADER_LEN		644
23 #define CSS_HEADER_OFFSET	8
24 #define ECDSA_OFFSET		644
25 #define ECDSA_HEADER_LEN	320
26 
27 #define CMD_WRITE_BOOT_PARAMS	0xfc0e
28 struct cmd_write_boot_params {
29 	__le32 boot_addr;
30 	u8  fw_build_num;
31 	u8  fw_build_ww;
32 	u8  fw_build_yy;
33 } __packed;
34 
35 int btintel_check_bdaddr(struct hci_dev *hdev)
36 {
37 	struct hci_rp_read_bd_addr *bda;
38 	struct sk_buff *skb;
39 
40 	skb = __hci_cmd_sync(hdev, HCI_OP_READ_BD_ADDR, 0, NULL,
41 			     HCI_INIT_TIMEOUT);
42 	if (IS_ERR(skb)) {
43 		int err = PTR_ERR(skb);
44 		bt_dev_err(hdev, "Reading Intel device address failed (%d)",
45 			   err);
46 		return err;
47 	}
48 
49 	if (skb->len != sizeof(*bda)) {
50 		bt_dev_err(hdev, "Intel device address length mismatch");
51 		kfree_skb(skb);
52 		return -EIO;
53 	}
54 
55 	bda = (struct hci_rp_read_bd_addr *)skb->data;
56 
57 	/* For some Intel based controllers, the default Bluetooth device
58 	 * address 00:03:19:9E:8B:00 can be found. These controllers are
59 	 * fully operational, but have the danger of duplicate addresses
60 	 * and that in turn can cause problems with Bluetooth operation.
61 	 */
62 	if (!bacmp(&bda->bdaddr, BDADDR_INTEL)) {
63 		bt_dev_err(hdev, "Found Intel default device address (%pMR)",
64 			   &bda->bdaddr);
65 		set_bit(HCI_QUIRK_INVALID_BDADDR, &hdev->quirks);
66 	}
67 
68 	kfree_skb(skb);
69 
70 	return 0;
71 }
72 EXPORT_SYMBOL_GPL(btintel_check_bdaddr);
73 
74 int btintel_enter_mfg(struct hci_dev *hdev)
75 {
76 	static const u8 param[] = { 0x01, 0x00 };
77 	struct sk_buff *skb;
78 
79 	skb = __hci_cmd_sync(hdev, 0xfc11, 2, param, HCI_CMD_TIMEOUT);
80 	if (IS_ERR(skb)) {
81 		bt_dev_err(hdev, "Entering manufacturer mode failed (%ld)",
82 			   PTR_ERR(skb));
83 		return PTR_ERR(skb);
84 	}
85 	kfree_skb(skb);
86 
87 	return 0;
88 }
89 EXPORT_SYMBOL_GPL(btintel_enter_mfg);
90 
91 int btintel_exit_mfg(struct hci_dev *hdev, bool reset, bool patched)
92 {
93 	u8 param[] = { 0x00, 0x00 };
94 	struct sk_buff *skb;
95 
96 	/* The 2nd command parameter specifies the manufacturing exit method:
97 	 * 0x00: Just disable the manufacturing mode (0x00).
98 	 * 0x01: Disable manufacturing mode and reset with patches deactivated.
99 	 * 0x02: Disable manufacturing mode and reset with patches activated.
100 	 */
101 	if (reset)
102 		param[1] |= patched ? 0x02 : 0x01;
103 
104 	skb = __hci_cmd_sync(hdev, 0xfc11, 2, param, HCI_CMD_TIMEOUT);
105 	if (IS_ERR(skb)) {
106 		bt_dev_err(hdev, "Exiting manufacturer mode failed (%ld)",
107 			   PTR_ERR(skb));
108 		return PTR_ERR(skb);
109 	}
110 	kfree_skb(skb);
111 
112 	return 0;
113 }
114 EXPORT_SYMBOL_GPL(btintel_exit_mfg);
115 
116 int btintel_set_bdaddr(struct hci_dev *hdev, const bdaddr_t *bdaddr)
117 {
118 	struct sk_buff *skb;
119 	int err;
120 
121 	skb = __hci_cmd_sync(hdev, 0xfc31, 6, bdaddr, HCI_INIT_TIMEOUT);
122 	if (IS_ERR(skb)) {
123 		err = PTR_ERR(skb);
124 		bt_dev_err(hdev, "Changing Intel device address failed (%d)",
125 			   err);
126 		return err;
127 	}
128 	kfree_skb(skb);
129 
130 	return 0;
131 }
132 EXPORT_SYMBOL_GPL(btintel_set_bdaddr);
133 
134 static int btintel_set_event_mask(struct hci_dev *hdev, bool debug)
135 {
136 	u8 mask[8] = { 0x87, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
137 	struct sk_buff *skb;
138 	int err;
139 
140 	if (debug)
141 		mask[1] |= 0x62;
142 
143 	skb = __hci_cmd_sync(hdev, 0xfc52, 8, mask, HCI_INIT_TIMEOUT);
144 	if (IS_ERR(skb)) {
145 		err = PTR_ERR(skb);
146 		bt_dev_err(hdev, "Setting Intel event mask failed (%d)", err);
147 		return err;
148 	}
149 	kfree_skb(skb);
150 
151 	return 0;
152 }
153 
154 int btintel_set_diag(struct hci_dev *hdev, bool enable)
155 {
156 	struct sk_buff *skb;
157 	u8 param[3];
158 	int err;
159 
160 	if (enable) {
161 		param[0] = 0x03;
162 		param[1] = 0x03;
163 		param[2] = 0x03;
164 	} else {
165 		param[0] = 0x00;
166 		param[1] = 0x00;
167 		param[2] = 0x00;
168 	}
169 
170 	skb = __hci_cmd_sync(hdev, 0xfc43, 3, param, HCI_INIT_TIMEOUT);
171 	if (IS_ERR(skb)) {
172 		err = PTR_ERR(skb);
173 		if (err == -ENODATA)
174 			goto done;
175 		bt_dev_err(hdev, "Changing Intel diagnostic mode failed (%d)",
176 			   err);
177 		return err;
178 	}
179 	kfree_skb(skb);
180 
181 done:
182 	btintel_set_event_mask(hdev, enable);
183 	return 0;
184 }
185 EXPORT_SYMBOL_GPL(btintel_set_diag);
186 
187 static int btintel_set_diag_mfg(struct hci_dev *hdev, bool enable)
188 {
189 	int err, ret;
190 
191 	err = btintel_enter_mfg(hdev);
192 	if (err)
193 		return err;
194 
195 	ret = btintel_set_diag(hdev, enable);
196 
197 	err = btintel_exit_mfg(hdev, false, false);
198 	if (err)
199 		return err;
200 
201 	return ret;
202 }
203 
204 static int btintel_set_diag_combined(struct hci_dev *hdev, bool enable)
205 {
206 	int ret;
207 
208 	/* Legacy ROM device needs to be in the manufacturer mode to apply
209 	 * diagnostic setting
210 	 *
211 	 * This flag is set after reading the Intel version.
212 	 */
213 	if (btintel_test_flag(hdev, INTEL_ROM_LEGACY))
214 		ret = btintel_set_diag_mfg(hdev, enable);
215 	else
216 		ret = btintel_set_diag(hdev, enable);
217 
218 	return ret;
219 }
220 
221 static void btintel_hw_error(struct hci_dev *hdev, u8 code)
222 {
223 	struct sk_buff *skb;
224 	u8 type = 0x00;
225 
226 	bt_dev_err(hdev, "Hardware error 0x%2.2x", code);
227 
228 	skb = __hci_cmd_sync(hdev, HCI_OP_RESET, 0, NULL, HCI_INIT_TIMEOUT);
229 	if (IS_ERR(skb)) {
230 		bt_dev_err(hdev, "Reset after hardware error failed (%ld)",
231 			   PTR_ERR(skb));
232 		return;
233 	}
234 	kfree_skb(skb);
235 
236 	skb = __hci_cmd_sync(hdev, 0xfc22, 1, &type, HCI_INIT_TIMEOUT);
237 	if (IS_ERR(skb)) {
238 		bt_dev_err(hdev, "Retrieving Intel exception info failed (%ld)",
239 			   PTR_ERR(skb));
240 		return;
241 	}
242 
243 	if (skb->len != 13) {
244 		bt_dev_err(hdev, "Exception info size mismatch");
245 		kfree_skb(skb);
246 		return;
247 	}
248 
249 	bt_dev_err(hdev, "Exception info %s", (char *)(skb->data + 1));
250 
251 	kfree_skb(skb);
252 }
253 
254 int btintel_version_info(struct hci_dev *hdev, struct intel_version *ver)
255 {
256 	const char *variant;
257 
258 	/* The hardware platform number has a fixed value of 0x37 and
259 	 * for now only accept this single value.
260 	 */
261 	if (ver->hw_platform != 0x37) {
262 		bt_dev_err(hdev, "Unsupported Intel hardware platform (%u)",
263 			   ver->hw_platform);
264 		return -EINVAL;
265 	}
266 
267 	/* Check for supported iBT hardware variants of this firmware
268 	 * loading method.
269 	 *
270 	 * This check has been put in place to ensure correct forward
271 	 * compatibility options when newer hardware variants come along.
272 	 */
273 	switch (ver->hw_variant) {
274 	case 0x07:	/* WP - Legacy ROM */
275 	case 0x08:	/* StP - Legacy ROM */
276 	case 0x0b:      /* SfP */
277 	case 0x0c:      /* WsP */
278 	case 0x11:      /* JfP */
279 	case 0x12:      /* ThP */
280 	case 0x13:      /* HrP */
281 	case 0x14:      /* CcP */
282 		break;
283 	default:
284 		bt_dev_err(hdev, "Unsupported Intel hardware variant (%u)",
285 			   ver->hw_variant);
286 		return -EINVAL;
287 	}
288 
289 	switch (ver->fw_variant) {
290 	case 0x01:
291 		variant = "Legacy ROM 2.5";
292 		break;
293 	case 0x06:
294 		variant = "Bootloader";
295 		break;
296 	case 0x22:
297 		variant = "Legacy ROM 2.x";
298 		break;
299 	case 0x23:
300 		variant = "Firmware";
301 		break;
302 	default:
303 		bt_dev_err(hdev, "Unsupported firmware variant(%02x)", ver->fw_variant);
304 		return -EINVAL;
305 	}
306 
307 	bt_dev_info(hdev, "%s revision %u.%u build %u week %u %u",
308 		    variant, ver->fw_revision >> 4, ver->fw_revision & 0x0f,
309 		    ver->fw_build_num, ver->fw_build_ww,
310 		    2000 + ver->fw_build_yy);
311 
312 	return 0;
313 }
314 EXPORT_SYMBOL_GPL(btintel_version_info);
315 
316 static int btintel_secure_send(struct hci_dev *hdev, u8 fragment_type, u32 plen,
317 			       const void *param)
318 {
319 	while (plen > 0) {
320 		struct sk_buff *skb;
321 		u8 cmd_param[253], fragment_len = (plen > 252) ? 252 : plen;
322 
323 		cmd_param[0] = fragment_type;
324 		memcpy(cmd_param + 1, param, fragment_len);
325 
326 		skb = __hci_cmd_sync(hdev, 0xfc09, fragment_len + 1,
327 				     cmd_param, HCI_INIT_TIMEOUT);
328 		if (IS_ERR(skb))
329 			return PTR_ERR(skb);
330 
331 		kfree_skb(skb);
332 
333 		plen -= fragment_len;
334 		param += fragment_len;
335 	}
336 
337 	return 0;
338 }
339 
340 int btintel_load_ddc_config(struct hci_dev *hdev, const char *ddc_name)
341 {
342 	const struct firmware *fw;
343 	struct sk_buff *skb;
344 	const u8 *fw_ptr;
345 	int err;
346 
347 	err = request_firmware_direct(&fw, ddc_name, &hdev->dev);
348 	if (err < 0) {
349 		bt_dev_err(hdev, "Failed to load Intel DDC file %s (%d)",
350 			   ddc_name, err);
351 		return err;
352 	}
353 
354 	bt_dev_info(hdev, "Found Intel DDC parameters: %s", ddc_name);
355 
356 	fw_ptr = fw->data;
357 
358 	/* DDC file contains one or more DDC structure which has
359 	 * Length (1 byte), DDC ID (2 bytes), and DDC value (Length - 2).
360 	 */
361 	while (fw->size > fw_ptr - fw->data) {
362 		u8 cmd_plen = fw_ptr[0] + sizeof(u8);
363 
364 		skb = __hci_cmd_sync(hdev, 0xfc8b, cmd_plen, fw_ptr,
365 				     HCI_INIT_TIMEOUT);
366 		if (IS_ERR(skb)) {
367 			bt_dev_err(hdev, "Failed to send Intel_Write_DDC (%ld)",
368 				   PTR_ERR(skb));
369 			release_firmware(fw);
370 			return PTR_ERR(skb);
371 		}
372 
373 		fw_ptr += cmd_plen;
374 		kfree_skb(skb);
375 	}
376 
377 	release_firmware(fw);
378 
379 	bt_dev_info(hdev, "Applying Intel DDC parameters completed");
380 
381 	return 0;
382 }
383 EXPORT_SYMBOL_GPL(btintel_load_ddc_config);
384 
385 int btintel_set_event_mask_mfg(struct hci_dev *hdev, bool debug)
386 {
387 	int err, ret;
388 
389 	err = btintel_enter_mfg(hdev);
390 	if (err)
391 		return err;
392 
393 	ret = btintel_set_event_mask(hdev, debug);
394 
395 	err = btintel_exit_mfg(hdev, false, false);
396 	if (err)
397 		return err;
398 
399 	return ret;
400 }
401 EXPORT_SYMBOL_GPL(btintel_set_event_mask_mfg);
402 
403 int btintel_read_version(struct hci_dev *hdev, struct intel_version *ver)
404 {
405 	struct sk_buff *skb;
406 
407 	skb = __hci_cmd_sync(hdev, 0xfc05, 0, NULL, HCI_CMD_TIMEOUT);
408 	if (IS_ERR(skb)) {
409 		bt_dev_err(hdev, "Reading Intel version information failed (%ld)",
410 			   PTR_ERR(skb));
411 		return PTR_ERR(skb);
412 	}
413 
414 	if (skb->len != sizeof(*ver)) {
415 		bt_dev_err(hdev, "Intel version event size mismatch");
416 		kfree_skb(skb);
417 		return -EILSEQ;
418 	}
419 
420 	memcpy(ver, skb->data, sizeof(*ver));
421 
422 	kfree_skb(skb);
423 
424 	return 0;
425 }
426 EXPORT_SYMBOL_GPL(btintel_read_version);
427 
428 static int btintel_version_info_tlv(struct hci_dev *hdev,
429 				    struct intel_version_tlv *version)
430 {
431 	const char *variant;
432 
433 	/* The hardware platform number has a fixed value of 0x37 and
434 	 * for now only accept this single value.
435 	 */
436 	if (INTEL_HW_PLATFORM(version->cnvi_bt) != 0x37) {
437 		bt_dev_err(hdev, "Unsupported Intel hardware platform (0x%2x)",
438 			   INTEL_HW_PLATFORM(version->cnvi_bt));
439 		return -EINVAL;
440 	}
441 
442 	/* Check for supported iBT hardware variants of this firmware
443 	 * loading method.
444 	 *
445 	 * This check has been put in place to ensure correct forward
446 	 * compatibility options when newer hardware variants come along.
447 	 */
448 	switch (INTEL_HW_VARIANT(version->cnvi_bt)) {
449 	case 0x17:	/* TyP */
450 	case 0x18:	/* Slr */
451 	case 0x19:	/* Slr-F */
452 	case 0x1b:      /* Mgr */
453 		break;
454 	default:
455 		bt_dev_err(hdev, "Unsupported Intel hardware variant (0x%x)",
456 			   INTEL_HW_VARIANT(version->cnvi_bt));
457 		return -EINVAL;
458 	}
459 
460 	switch (version->img_type) {
461 	case 0x01:
462 		variant = "Bootloader";
463 		/* It is required that every single firmware fragment is acknowledged
464 		 * with a command complete event. If the boot parameters indicate
465 		 * that this bootloader does not send them, then abort the setup.
466 		 */
467 		if (version->limited_cce != 0x00) {
468 			bt_dev_err(hdev, "Unsupported Intel firmware loading method (0x%x)",
469 				   version->limited_cce);
470 			return -EINVAL;
471 		}
472 
473 		/* Secure boot engine type should be either 1 (ECDSA) or 0 (RSA) */
474 		if (version->sbe_type > 0x01) {
475 			bt_dev_err(hdev, "Unsupported Intel secure boot engine type (0x%x)",
476 				   version->sbe_type);
477 			return -EINVAL;
478 		}
479 
480 		bt_dev_info(hdev, "Device revision is %u", version->dev_rev_id);
481 		bt_dev_info(hdev, "Secure boot is %s",
482 			    version->secure_boot ? "enabled" : "disabled");
483 		bt_dev_info(hdev, "OTP lock is %s",
484 			    version->otp_lock ? "enabled" : "disabled");
485 		bt_dev_info(hdev, "API lock is %s",
486 			    version->api_lock ? "enabled" : "disabled");
487 		bt_dev_info(hdev, "Debug lock is %s",
488 			    version->debug_lock ? "enabled" : "disabled");
489 		bt_dev_info(hdev, "Minimum firmware build %u week %u %u",
490 			    version->min_fw_build_nn, version->min_fw_build_cw,
491 			    2000 + version->min_fw_build_yy);
492 		break;
493 	case 0x03:
494 		variant = "Firmware";
495 		break;
496 	default:
497 		bt_dev_err(hdev, "Unsupported image type(%02x)", version->img_type);
498 		return -EINVAL;
499 	}
500 
501 	bt_dev_info(hdev, "%s timestamp %u.%u buildtype %u build %u", variant,
502 		    2000 + (version->timestamp >> 8), version->timestamp & 0xff,
503 		    version->build_type, version->build_num);
504 
505 	return 0;
506 }
507 
508 static int btintel_parse_version_tlv(struct hci_dev *hdev,
509 				     struct intel_version_tlv *version,
510 				     struct sk_buff *skb)
511 {
512 	/* Consume Command Complete Status field */
513 	skb_pull(skb, 1);
514 
515 	/* Event parameters contatin multiple TLVs. Read each of them
516 	 * and only keep the required data. Also, it use existing legacy
517 	 * version field like hw_platform, hw_variant, and fw_variant
518 	 * to keep the existing setup flow
519 	 */
520 	while (skb->len) {
521 		struct intel_tlv *tlv;
522 
523 		/* Make sure skb has a minimum length of the header */
524 		if (skb->len < sizeof(*tlv))
525 			return -EINVAL;
526 
527 		tlv = (struct intel_tlv *)skb->data;
528 
529 		/* Make sure skb has a enough data */
530 		if (skb->len < tlv->len + sizeof(*tlv))
531 			return -EINVAL;
532 
533 		switch (tlv->type) {
534 		case INTEL_TLV_CNVI_TOP:
535 			version->cnvi_top = get_unaligned_le32(tlv->val);
536 			break;
537 		case INTEL_TLV_CNVR_TOP:
538 			version->cnvr_top = get_unaligned_le32(tlv->val);
539 			break;
540 		case INTEL_TLV_CNVI_BT:
541 			version->cnvi_bt = get_unaligned_le32(tlv->val);
542 			break;
543 		case INTEL_TLV_CNVR_BT:
544 			version->cnvr_bt = get_unaligned_le32(tlv->val);
545 			break;
546 		case INTEL_TLV_DEV_REV_ID:
547 			version->dev_rev_id = get_unaligned_le16(tlv->val);
548 			break;
549 		case INTEL_TLV_IMAGE_TYPE:
550 			version->img_type = tlv->val[0];
551 			break;
552 		case INTEL_TLV_TIME_STAMP:
553 			/* If image type is Operational firmware (0x03), then
554 			 * running FW Calendar Week and Year information can
555 			 * be extracted from Timestamp information
556 			 */
557 			version->min_fw_build_cw = tlv->val[0];
558 			version->min_fw_build_yy = tlv->val[1];
559 			version->timestamp = get_unaligned_le16(tlv->val);
560 			break;
561 		case INTEL_TLV_BUILD_TYPE:
562 			version->build_type = tlv->val[0];
563 			break;
564 		case INTEL_TLV_BUILD_NUM:
565 			/* If image type is Operational firmware (0x03), then
566 			 * running FW build number can be extracted from the
567 			 * Build information
568 			 */
569 			version->min_fw_build_nn = tlv->val[0];
570 			version->build_num = get_unaligned_le32(tlv->val);
571 			break;
572 		case INTEL_TLV_SECURE_BOOT:
573 			version->secure_boot = tlv->val[0];
574 			break;
575 		case INTEL_TLV_OTP_LOCK:
576 			version->otp_lock = tlv->val[0];
577 			break;
578 		case INTEL_TLV_API_LOCK:
579 			version->api_lock = tlv->val[0];
580 			break;
581 		case INTEL_TLV_DEBUG_LOCK:
582 			version->debug_lock = tlv->val[0];
583 			break;
584 		case INTEL_TLV_MIN_FW:
585 			version->min_fw_build_nn = tlv->val[0];
586 			version->min_fw_build_cw = tlv->val[1];
587 			version->min_fw_build_yy = tlv->val[2];
588 			break;
589 		case INTEL_TLV_LIMITED_CCE:
590 			version->limited_cce = tlv->val[0];
591 			break;
592 		case INTEL_TLV_SBE_TYPE:
593 			version->sbe_type = tlv->val[0];
594 			break;
595 		case INTEL_TLV_OTP_BDADDR:
596 			memcpy(&version->otp_bd_addr, tlv->val,
597 							sizeof(bdaddr_t));
598 			break;
599 		default:
600 			/* Ignore rest of information */
601 			break;
602 		}
603 		/* consume the current tlv and move to next*/
604 		skb_pull(skb, tlv->len + sizeof(*tlv));
605 	}
606 
607 	return 0;
608 }
609 
610 static int btintel_read_version_tlv(struct hci_dev *hdev,
611 				    struct intel_version_tlv *version)
612 {
613 	struct sk_buff *skb;
614 	const u8 param[1] = { 0xFF };
615 
616 	if (!version)
617 		return -EINVAL;
618 
619 	skb = __hci_cmd_sync(hdev, 0xfc05, 1, param, HCI_CMD_TIMEOUT);
620 	if (IS_ERR(skb)) {
621 		bt_dev_err(hdev, "Reading Intel version information failed (%ld)",
622 			   PTR_ERR(skb));
623 		return PTR_ERR(skb);
624 	}
625 
626 	if (skb->data[0]) {
627 		bt_dev_err(hdev, "Intel Read Version command failed (%02x)",
628 			   skb->data[0]);
629 		kfree_skb(skb);
630 		return -EIO;
631 	}
632 
633 	btintel_parse_version_tlv(hdev, version, skb);
634 
635 	kfree_skb(skb);
636 	return 0;
637 }
638 
639 /* ------- REGMAP IBT SUPPORT ------- */
640 
641 #define IBT_REG_MODE_8BIT  0x00
642 #define IBT_REG_MODE_16BIT 0x01
643 #define IBT_REG_MODE_32BIT 0x02
644 
645 struct regmap_ibt_context {
646 	struct hci_dev *hdev;
647 	__u16 op_write;
648 	__u16 op_read;
649 };
650 
651 struct ibt_cp_reg_access {
652 	__le32  addr;
653 	__u8    mode;
654 	__u8    len;
655 	__u8    data[];
656 } __packed;
657 
658 struct ibt_rp_reg_access {
659 	__u8    status;
660 	__le32  addr;
661 	__u8    data[];
662 } __packed;
663 
664 static int regmap_ibt_read(void *context, const void *addr, size_t reg_size,
665 			   void *val, size_t val_size)
666 {
667 	struct regmap_ibt_context *ctx = context;
668 	struct ibt_cp_reg_access cp;
669 	struct ibt_rp_reg_access *rp;
670 	struct sk_buff *skb;
671 	int err = 0;
672 
673 	if (reg_size != sizeof(__le32))
674 		return -EINVAL;
675 
676 	switch (val_size) {
677 	case 1:
678 		cp.mode = IBT_REG_MODE_8BIT;
679 		break;
680 	case 2:
681 		cp.mode = IBT_REG_MODE_16BIT;
682 		break;
683 	case 4:
684 		cp.mode = IBT_REG_MODE_32BIT;
685 		break;
686 	default:
687 		return -EINVAL;
688 	}
689 
690 	/* regmap provides a little-endian formatted addr */
691 	cp.addr = *(__le32 *)addr;
692 	cp.len = val_size;
693 
694 	bt_dev_dbg(ctx->hdev, "Register (0x%x) read", le32_to_cpu(cp.addr));
695 
696 	skb = hci_cmd_sync(ctx->hdev, ctx->op_read, sizeof(cp), &cp,
697 			   HCI_CMD_TIMEOUT);
698 	if (IS_ERR(skb)) {
699 		err = PTR_ERR(skb);
700 		bt_dev_err(ctx->hdev, "regmap: Register (0x%x) read error (%d)",
701 			   le32_to_cpu(cp.addr), err);
702 		return err;
703 	}
704 
705 	if (skb->len != sizeof(*rp) + val_size) {
706 		bt_dev_err(ctx->hdev, "regmap: Register (0x%x) read error, bad len",
707 			   le32_to_cpu(cp.addr));
708 		err = -EINVAL;
709 		goto done;
710 	}
711 
712 	rp = (struct ibt_rp_reg_access *)skb->data;
713 
714 	if (rp->addr != cp.addr) {
715 		bt_dev_err(ctx->hdev, "regmap: Register (0x%x) read error, bad addr",
716 			   le32_to_cpu(rp->addr));
717 		err = -EINVAL;
718 		goto done;
719 	}
720 
721 	memcpy(val, rp->data, val_size);
722 
723 done:
724 	kfree_skb(skb);
725 	return err;
726 }
727 
728 static int regmap_ibt_gather_write(void *context,
729 				   const void *addr, size_t reg_size,
730 				   const void *val, size_t val_size)
731 {
732 	struct regmap_ibt_context *ctx = context;
733 	struct ibt_cp_reg_access *cp;
734 	struct sk_buff *skb;
735 	int plen = sizeof(*cp) + val_size;
736 	u8 mode;
737 	int err = 0;
738 
739 	if (reg_size != sizeof(__le32))
740 		return -EINVAL;
741 
742 	switch (val_size) {
743 	case 1:
744 		mode = IBT_REG_MODE_8BIT;
745 		break;
746 	case 2:
747 		mode = IBT_REG_MODE_16BIT;
748 		break;
749 	case 4:
750 		mode = IBT_REG_MODE_32BIT;
751 		break;
752 	default:
753 		return -EINVAL;
754 	}
755 
756 	cp = kmalloc(plen, GFP_KERNEL);
757 	if (!cp)
758 		return -ENOMEM;
759 
760 	/* regmap provides a little-endian formatted addr/value */
761 	cp->addr = *(__le32 *)addr;
762 	cp->mode = mode;
763 	cp->len = val_size;
764 	memcpy(&cp->data, val, val_size);
765 
766 	bt_dev_dbg(ctx->hdev, "Register (0x%x) write", le32_to_cpu(cp->addr));
767 
768 	skb = hci_cmd_sync(ctx->hdev, ctx->op_write, plen, cp, HCI_CMD_TIMEOUT);
769 	if (IS_ERR(skb)) {
770 		err = PTR_ERR(skb);
771 		bt_dev_err(ctx->hdev, "regmap: Register (0x%x) write error (%d)",
772 			   le32_to_cpu(cp->addr), err);
773 		goto done;
774 	}
775 	kfree_skb(skb);
776 
777 done:
778 	kfree(cp);
779 	return err;
780 }
781 
782 static int regmap_ibt_write(void *context, const void *data, size_t count)
783 {
784 	/* data contains register+value, since we only support 32bit addr,
785 	 * minimum data size is 4 bytes.
786 	 */
787 	if (WARN_ONCE(count < 4, "Invalid register access"))
788 		return -EINVAL;
789 
790 	return regmap_ibt_gather_write(context, data, 4, data + 4, count - 4);
791 }
792 
793 static void regmap_ibt_free_context(void *context)
794 {
795 	kfree(context);
796 }
797 
798 static const struct regmap_bus regmap_ibt = {
799 	.read = regmap_ibt_read,
800 	.write = regmap_ibt_write,
801 	.gather_write = regmap_ibt_gather_write,
802 	.free_context = regmap_ibt_free_context,
803 	.reg_format_endian_default = REGMAP_ENDIAN_LITTLE,
804 	.val_format_endian_default = REGMAP_ENDIAN_LITTLE,
805 };
806 
807 /* Config is the same for all register regions */
808 static const struct regmap_config regmap_ibt_cfg = {
809 	.name      = "btintel_regmap",
810 	.reg_bits  = 32,
811 	.val_bits  = 32,
812 };
813 
814 struct regmap *btintel_regmap_init(struct hci_dev *hdev, u16 opcode_read,
815 				   u16 opcode_write)
816 {
817 	struct regmap_ibt_context *ctx;
818 
819 	bt_dev_info(hdev, "regmap: Init R%x-W%x region", opcode_read,
820 		    opcode_write);
821 
822 	ctx = kzalloc(sizeof(*ctx), GFP_KERNEL);
823 	if (!ctx)
824 		return ERR_PTR(-ENOMEM);
825 
826 	ctx->op_read = opcode_read;
827 	ctx->op_write = opcode_write;
828 	ctx->hdev = hdev;
829 
830 	return regmap_init(&hdev->dev, &regmap_ibt, ctx, &regmap_ibt_cfg);
831 }
832 EXPORT_SYMBOL_GPL(btintel_regmap_init);
833 
834 int btintel_send_intel_reset(struct hci_dev *hdev, u32 boot_param)
835 {
836 	struct intel_reset params = { 0x00, 0x01, 0x00, 0x01, 0x00000000 };
837 	struct sk_buff *skb;
838 
839 	params.boot_param = cpu_to_le32(boot_param);
840 
841 	skb = __hci_cmd_sync(hdev, 0xfc01, sizeof(params), &params,
842 			     HCI_INIT_TIMEOUT);
843 	if (IS_ERR(skb)) {
844 		bt_dev_err(hdev, "Failed to send Intel Reset command");
845 		return PTR_ERR(skb);
846 	}
847 
848 	kfree_skb(skb);
849 
850 	return 0;
851 }
852 EXPORT_SYMBOL_GPL(btintel_send_intel_reset);
853 
854 int btintel_read_boot_params(struct hci_dev *hdev,
855 			     struct intel_boot_params *params)
856 {
857 	struct sk_buff *skb;
858 
859 	skb = __hci_cmd_sync(hdev, 0xfc0d, 0, NULL, HCI_INIT_TIMEOUT);
860 	if (IS_ERR(skb)) {
861 		bt_dev_err(hdev, "Reading Intel boot parameters failed (%ld)",
862 			   PTR_ERR(skb));
863 		return PTR_ERR(skb);
864 	}
865 
866 	if (skb->len != sizeof(*params)) {
867 		bt_dev_err(hdev, "Intel boot parameters size mismatch");
868 		kfree_skb(skb);
869 		return -EILSEQ;
870 	}
871 
872 	memcpy(params, skb->data, sizeof(*params));
873 
874 	kfree_skb(skb);
875 
876 	if (params->status) {
877 		bt_dev_err(hdev, "Intel boot parameters command failed (%02x)",
878 			   params->status);
879 		return -bt_to_errno(params->status);
880 	}
881 
882 	bt_dev_info(hdev, "Device revision is %u",
883 		    le16_to_cpu(params->dev_revid));
884 
885 	bt_dev_info(hdev, "Secure boot is %s",
886 		    params->secure_boot ? "enabled" : "disabled");
887 
888 	bt_dev_info(hdev, "OTP lock is %s",
889 		    params->otp_lock ? "enabled" : "disabled");
890 
891 	bt_dev_info(hdev, "API lock is %s",
892 		    params->api_lock ? "enabled" : "disabled");
893 
894 	bt_dev_info(hdev, "Debug lock is %s",
895 		    params->debug_lock ? "enabled" : "disabled");
896 
897 	bt_dev_info(hdev, "Minimum firmware build %u week %u %u",
898 		    params->min_fw_build_nn, params->min_fw_build_cw,
899 		    2000 + params->min_fw_build_yy);
900 
901 	return 0;
902 }
903 EXPORT_SYMBOL_GPL(btintel_read_boot_params);
904 
905 static int btintel_sfi_rsa_header_secure_send(struct hci_dev *hdev,
906 					      const struct firmware *fw)
907 {
908 	int err;
909 
910 	/* Start the firmware download transaction with the Init fragment
911 	 * represented by the 128 bytes of CSS header.
912 	 */
913 	err = btintel_secure_send(hdev, 0x00, 128, fw->data);
914 	if (err < 0) {
915 		bt_dev_err(hdev, "Failed to send firmware header (%d)", err);
916 		goto done;
917 	}
918 
919 	/* Send the 256 bytes of public key information from the firmware
920 	 * as the PKey fragment.
921 	 */
922 	err = btintel_secure_send(hdev, 0x03, 256, fw->data + 128);
923 	if (err < 0) {
924 		bt_dev_err(hdev, "Failed to send firmware pkey (%d)", err);
925 		goto done;
926 	}
927 
928 	/* Send the 256 bytes of signature information from the firmware
929 	 * as the Sign fragment.
930 	 */
931 	err = btintel_secure_send(hdev, 0x02, 256, fw->data + 388);
932 	if (err < 0) {
933 		bt_dev_err(hdev, "Failed to send firmware signature (%d)", err);
934 		goto done;
935 	}
936 
937 done:
938 	return err;
939 }
940 
941 static int btintel_sfi_ecdsa_header_secure_send(struct hci_dev *hdev,
942 						const struct firmware *fw)
943 {
944 	int err;
945 
946 	/* Start the firmware download transaction with the Init fragment
947 	 * represented by the 128 bytes of CSS header.
948 	 */
949 	err = btintel_secure_send(hdev, 0x00, 128, fw->data + 644);
950 	if (err < 0) {
951 		bt_dev_err(hdev, "Failed to send firmware header (%d)", err);
952 		return err;
953 	}
954 
955 	/* Send the 96 bytes of public key information from the firmware
956 	 * as the PKey fragment.
957 	 */
958 	err = btintel_secure_send(hdev, 0x03, 96, fw->data + 644 + 128);
959 	if (err < 0) {
960 		bt_dev_err(hdev, "Failed to send firmware pkey (%d)", err);
961 		return err;
962 	}
963 
964 	/* Send the 96 bytes of signature information from the firmware
965 	 * as the Sign fragment
966 	 */
967 	err = btintel_secure_send(hdev, 0x02, 96, fw->data + 644 + 224);
968 	if (err < 0) {
969 		bt_dev_err(hdev, "Failed to send firmware signature (%d)",
970 			   err);
971 		return err;
972 	}
973 	return 0;
974 }
975 
976 static int btintel_download_firmware_payload(struct hci_dev *hdev,
977 					     const struct firmware *fw,
978 					     size_t offset)
979 {
980 	int err;
981 	const u8 *fw_ptr;
982 	u32 frag_len;
983 
984 	fw_ptr = fw->data + offset;
985 	frag_len = 0;
986 	err = -EINVAL;
987 
988 	while (fw_ptr - fw->data < fw->size) {
989 		struct hci_command_hdr *cmd = (void *)(fw_ptr + frag_len);
990 
991 		frag_len += sizeof(*cmd) + cmd->plen;
992 
993 		/* The parameter length of the secure send command requires
994 		 * a 4 byte alignment. It happens so that the firmware file
995 		 * contains proper Intel_NOP commands to align the fragments
996 		 * as needed.
997 		 *
998 		 * Send set of commands with 4 byte alignment from the
999 		 * firmware data buffer as a single Data fragement.
1000 		 */
1001 		if (!(frag_len % 4)) {
1002 			err = btintel_secure_send(hdev, 0x01, frag_len, fw_ptr);
1003 			if (err < 0) {
1004 				bt_dev_err(hdev,
1005 					   "Failed to send firmware data (%d)",
1006 					   err);
1007 				goto done;
1008 			}
1009 
1010 			fw_ptr += frag_len;
1011 			frag_len = 0;
1012 		}
1013 	}
1014 
1015 done:
1016 	return err;
1017 }
1018 
1019 static bool btintel_firmware_version(struct hci_dev *hdev,
1020 				     u8 num, u8 ww, u8 yy,
1021 				     const struct firmware *fw,
1022 				     u32 *boot_addr)
1023 {
1024 	const u8 *fw_ptr;
1025 
1026 	fw_ptr = fw->data;
1027 
1028 	while (fw_ptr - fw->data < fw->size) {
1029 		struct hci_command_hdr *cmd = (void *)(fw_ptr);
1030 
1031 		/* Each SKU has a different reset parameter to use in the
1032 		 * HCI_Intel_Reset command and it is embedded in the firmware
1033 		 * data. So, instead of using static value per SKU, check
1034 		 * the firmware data and save it for later use.
1035 		 */
1036 		if (le16_to_cpu(cmd->opcode) == CMD_WRITE_BOOT_PARAMS) {
1037 			struct cmd_write_boot_params *params;
1038 
1039 			params = (void *)(fw_ptr + sizeof(*cmd));
1040 
1041 			*boot_addr = le32_to_cpu(params->boot_addr);
1042 
1043 			bt_dev_info(hdev, "Boot Address: 0x%x", *boot_addr);
1044 
1045 			bt_dev_info(hdev, "Firmware Version: %u-%u.%u",
1046 				    params->fw_build_num, params->fw_build_ww,
1047 				    params->fw_build_yy);
1048 
1049 			return (num == params->fw_build_num &&
1050 				ww == params->fw_build_ww &&
1051 				yy == params->fw_build_yy);
1052 		}
1053 
1054 		fw_ptr += sizeof(*cmd) + cmd->plen;
1055 	}
1056 
1057 	return false;
1058 }
1059 
1060 int btintel_download_firmware(struct hci_dev *hdev,
1061 			      struct intel_version *ver,
1062 			      const struct firmware *fw,
1063 			      u32 *boot_param)
1064 {
1065 	int err;
1066 
1067 	/* SfP and WsP don't seem to update the firmware version on file
1068 	 * so version checking is currently not possible.
1069 	 */
1070 	switch (ver->hw_variant) {
1071 	case 0x0b:	/* SfP */
1072 	case 0x0c:	/* WsP */
1073 		/* Skip version checking */
1074 		break;
1075 	default:
1076 
1077 		/* Skip download if firmware has the same version */
1078 		if (btintel_firmware_version(hdev, ver->fw_build_num,
1079 					     ver->fw_build_ww, ver->fw_build_yy,
1080 					     fw, boot_param)) {
1081 			bt_dev_info(hdev, "Firmware already loaded");
1082 			/* Return -EALREADY to indicate that the firmware has
1083 			 * already been loaded.
1084 			 */
1085 			return -EALREADY;
1086 		}
1087 	}
1088 
1089 	/* The firmware variant determines if the device is in bootloader
1090 	 * mode or is running operational firmware. The value 0x06 identifies
1091 	 * the bootloader and the value 0x23 identifies the operational
1092 	 * firmware.
1093 	 *
1094 	 * If the firmware version has changed that means it needs to be reset
1095 	 * to bootloader when operational so the new firmware can be loaded.
1096 	 */
1097 	if (ver->fw_variant == 0x23)
1098 		return -EINVAL;
1099 
1100 	err = btintel_sfi_rsa_header_secure_send(hdev, fw);
1101 	if (err)
1102 		return err;
1103 
1104 	return btintel_download_firmware_payload(hdev, fw, RSA_HEADER_LEN);
1105 }
1106 EXPORT_SYMBOL_GPL(btintel_download_firmware);
1107 
1108 static int btintel_download_fw_tlv(struct hci_dev *hdev,
1109 				   struct intel_version_tlv *ver,
1110 				   const struct firmware *fw, u32 *boot_param,
1111 				   u8 hw_variant, u8 sbe_type)
1112 {
1113 	int err;
1114 	u32 css_header_ver;
1115 
1116 	/* Skip download if firmware has the same version */
1117 	if (btintel_firmware_version(hdev, ver->min_fw_build_nn,
1118 				     ver->min_fw_build_cw,
1119 				     ver->min_fw_build_yy,
1120 				     fw, boot_param)) {
1121 		bt_dev_info(hdev, "Firmware already loaded");
1122 		/* Return -EALREADY to indicate that firmware has
1123 		 * already been loaded.
1124 		 */
1125 		return -EALREADY;
1126 	}
1127 
1128 	/* The firmware variant determines if the device is in bootloader
1129 	 * mode or is running operational firmware. The value 0x01 identifies
1130 	 * the bootloader and the value 0x03 identifies the operational
1131 	 * firmware.
1132 	 *
1133 	 * If the firmware version has changed that means it needs to be reset
1134 	 * to bootloader when operational so the new firmware can be loaded.
1135 	 */
1136 	if (ver->img_type == 0x03)
1137 		return -EINVAL;
1138 
1139 	/* iBT hardware variants 0x0b, 0x0c, 0x11, 0x12, 0x13, 0x14 support
1140 	 * only RSA secure boot engine. Hence, the corresponding sfi file will
1141 	 * have RSA header of 644 bytes followed by Command Buffer.
1142 	 *
1143 	 * iBT hardware variants 0x17, 0x18 onwards support both RSA and ECDSA
1144 	 * secure boot engine. As a result, the corresponding sfi file will
1145 	 * have RSA header of 644, ECDSA header of 320 bytes followed by
1146 	 * Command Buffer.
1147 	 *
1148 	 * CSS Header byte positions 0x08 to 0x0B represent the CSS Header
1149 	 * version: RSA(0x00010000) , ECDSA (0x00020000)
1150 	 */
1151 	css_header_ver = get_unaligned_le32(fw->data + CSS_HEADER_OFFSET);
1152 	if (css_header_ver != 0x00010000) {
1153 		bt_dev_err(hdev, "Invalid CSS Header version");
1154 		return -EINVAL;
1155 	}
1156 
1157 	if (hw_variant <= 0x14) {
1158 		if (sbe_type != 0x00) {
1159 			bt_dev_err(hdev, "Invalid SBE type for hardware variant (%d)",
1160 				   hw_variant);
1161 			return -EINVAL;
1162 		}
1163 
1164 		err = btintel_sfi_rsa_header_secure_send(hdev, fw);
1165 		if (err)
1166 			return err;
1167 
1168 		err = btintel_download_firmware_payload(hdev, fw, RSA_HEADER_LEN);
1169 		if (err)
1170 			return err;
1171 	} else if (hw_variant >= 0x17) {
1172 		/* Check if CSS header for ECDSA follows the RSA header */
1173 		if (fw->data[ECDSA_OFFSET] != 0x06)
1174 			return -EINVAL;
1175 
1176 		/* Check if the CSS Header version is ECDSA(0x00020000) */
1177 		css_header_ver = get_unaligned_le32(fw->data + ECDSA_OFFSET + CSS_HEADER_OFFSET);
1178 		if (css_header_ver != 0x00020000) {
1179 			bt_dev_err(hdev, "Invalid CSS Header version");
1180 			return -EINVAL;
1181 		}
1182 
1183 		if (sbe_type == 0x00) {
1184 			err = btintel_sfi_rsa_header_secure_send(hdev, fw);
1185 			if (err)
1186 				return err;
1187 
1188 			err = btintel_download_firmware_payload(hdev, fw,
1189 								RSA_HEADER_LEN + ECDSA_HEADER_LEN);
1190 			if (err)
1191 				return err;
1192 		} else if (sbe_type == 0x01) {
1193 			err = btintel_sfi_ecdsa_header_secure_send(hdev, fw);
1194 			if (err)
1195 				return err;
1196 
1197 			err = btintel_download_firmware_payload(hdev, fw,
1198 								RSA_HEADER_LEN + ECDSA_HEADER_LEN);
1199 			if (err)
1200 				return err;
1201 		}
1202 	}
1203 	return 0;
1204 }
1205 
1206 static void btintel_reset_to_bootloader(struct hci_dev *hdev)
1207 {
1208 	struct intel_reset params;
1209 	struct sk_buff *skb;
1210 
1211 	/* Send Intel Reset command. This will result in
1212 	 * re-enumeration of BT controller.
1213 	 *
1214 	 * Intel Reset parameter description:
1215 	 * reset_type :   0x00 (Soft reset),
1216 	 *		  0x01 (Hard reset)
1217 	 * patch_enable : 0x00 (Do not enable),
1218 	 *		  0x01 (Enable)
1219 	 * ddc_reload :   0x00 (Do not reload),
1220 	 *		  0x01 (Reload)
1221 	 * boot_option:   0x00 (Current image),
1222 	 *                0x01 (Specified boot address)
1223 	 * boot_param:    Boot address
1224 	 *
1225 	 */
1226 	params.reset_type = 0x01;
1227 	params.patch_enable = 0x01;
1228 	params.ddc_reload = 0x01;
1229 	params.boot_option = 0x00;
1230 	params.boot_param = cpu_to_le32(0x00000000);
1231 
1232 	skb = __hci_cmd_sync(hdev, 0xfc01, sizeof(params),
1233 			     &params, HCI_INIT_TIMEOUT);
1234 	if (IS_ERR(skb)) {
1235 		bt_dev_err(hdev, "FW download error recovery failed (%ld)",
1236 			   PTR_ERR(skb));
1237 		return;
1238 	}
1239 	bt_dev_info(hdev, "Intel reset sent to retry FW download");
1240 	kfree_skb(skb);
1241 
1242 	/* Current Intel BT controllers(ThP/JfP) hold the USB reset
1243 	 * lines for 2ms when it receives Intel Reset in bootloader mode.
1244 	 * Whereas, the upcoming Intel BT controllers will hold USB reset
1245 	 * for 150ms. To keep the delay generic, 150ms is chosen here.
1246 	 */
1247 	msleep(150);
1248 }
1249 
1250 static int btintel_read_debug_features(struct hci_dev *hdev,
1251 				       struct intel_debug_features *features)
1252 {
1253 	struct sk_buff *skb;
1254 	u8 page_no = 1;
1255 
1256 	/* Intel controller supports two pages, each page is of 128-bit
1257 	 * feature bit mask. And each bit defines specific feature support
1258 	 */
1259 	skb = __hci_cmd_sync(hdev, 0xfca6, sizeof(page_no), &page_no,
1260 			     HCI_INIT_TIMEOUT);
1261 	if (IS_ERR(skb)) {
1262 		bt_dev_err(hdev, "Reading supported features failed (%ld)",
1263 			   PTR_ERR(skb));
1264 		return PTR_ERR(skb);
1265 	}
1266 
1267 	if (skb->len != (sizeof(features->page1) + 3)) {
1268 		bt_dev_err(hdev, "Supported features event size mismatch");
1269 		kfree_skb(skb);
1270 		return -EILSEQ;
1271 	}
1272 
1273 	memcpy(features->page1, skb->data + 3, sizeof(features->page1));
1274 
1275 	/* Read the supported features page2 if required in future.
1276 	 */
1277 	kfree_skb(skb);
1278 	return 0;
1279 }
1280 
1281 static int btintel_set_debug_features(struct hci_dev *hdev,
1282 			       const struct intel_debug_features *features)
1283 {
1284 	u8 mask[11] = { 0x0a, 0x92, 0x02, 0x7f, 0x00, 0x00, 0x00, 0x00,
1285 			0x00, 0x00, 0x00 };
1286 	u8 period[5] = { 0x04, 0x91, 0x02, 0x05, 0x00 };
1287 	u8 trace_enable = 0x02;
1288 	struct sk_buff *skb;
1289 
1290 	if (!features) {
1291 		bt_dev_warn(hdev, "Debug features not read");
1292 		return -EINVAL;
1293 	}
1294 
1295 	if (!(features->page1[0] & 0x3f)) {
1296 		bt_dev_info(hdev, "Telemetry exception format not supported");
1297 		return 0;
1298 	}
1299 
1300 	skb = __hci_cmd_sync(hdev, 0xfc8b, 11, mask, HCI_INIT_TIMEOUT);
1301 	if (IS_ERR(skb)) {
1302 		bt_dev_err(hdev, "Setting Intel telemetry ddc write event mask failed (%ld)",
1303 			   PTR_ERR(skb));
1304 		return PTR_ERR(skb);
1305 	}
1306 	kfree_skb(skb);
1307 
1308 	skb = __hci_cmd_sync(hdev, 0xfc8b, 5, period, HCI_INIT_TIMEOUT);
1309 	if (IS_ERR(skb)) {
1310 		bt_dev_err(hdev, "Setting periodicity for link statistics traces failed (%ld)",
1311 			   PTR_ERR(skb));
1312 		return PTR_ERR(skb);
1313 	}
1314 	kfree_skb(skb);
1315 
1316 	skb = __hci_cmd_sync(hdev, 0xfca1, 1, &trace_enable, HCI_INIT_TIMEOUT);
1317 	if (IS_ERR(skb)) {
1318 		bt_dev_err(hdev, "Enable tracing of link statistics events failed (%ld)",
1319 			   PTR_ERR(skb));
1320 		return PTR_ERR(skb);
1321 	}
1322 	kfree_skb(skb);
1323 
1324 	bt_dev_info(hdev, "set debug features: trace_enable 0x%02x mask 0x%02x",
1325 		    trace_enable, mask[3]);
1326 
1327 	return 0;
1328 }
1329 
1330 static int btintel_reset_debug_features(struct hci_dev *hdev,
1331 				 const struct intel_debug_features *features)
1332 {
1333 	u8 mask[11] = { 0x0a, 0x92, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,
1334 			0x00, 0x00, 0x00 };
1335 	u8 trace_enable = 0x00;
1336 	struct sk_buff *skb;
1337 
1338 	if (!features) {
1339 		bt_dev_warn(hdev, "Debug features not read");
1340 		return -EINVAL;
1341 	}
1342 
1343 	if (!(features->page1[0] & 0x3f)) {
1344 		bt_dev_info(hdev, "Telemetry exception format not supported");
1345 		return 0;
1346 	}
1347 
1348 	/* Should stop the trace before writing ddc event mask. */
1349 	skb = __hci_cmd_sync(hdev, 0xfca1, 1, &trace_enable, HCI_INIT_TIMEOUT);
1350 	if (IS_ERR(skb)) {
1351 		bt_dev_err(hdev, "Stop tracing of link statistics events failed (%ld)",
1352 			   PTR_ERR(skb));
1353 		return PTR_ERR(skb);
1354 	}
1355 	kfree_skb(skb);
1356 
1357 	skb = __hci_cmd_sync(hdev, 0xfc8b, 11, mask, HCI_INIT_TIMEOUT);
1358 	if (IS_ERR(skb)) {
1359 		bt_dev_err(hdev, "Setting Intel telemetry ddc write event mask failed (%ld)",
1360 			   PTR_ERR(skb));
1361 		return PTR_ERR(skb);
1362 	}
1363 	kfree_skb(skb);
1364 
1365 	bt_dev_info(hdev, "reset debug features: trace_enable 0x%02x mask 0x%02x",
1366 		    trace_enable, mask[3]);
1367 
1368 	return 0;
1369 }
1370 
1371 int btintel_set_quality_report(struct hci_dev *hdev, bool enable)
1372 {
1373 	struct intel_debug_features features;
1374 	int err;
1375 
1376 	bt_dev_dbg(hdev, "enable %d", enable);
1377 
1378 	/* Read the Intel supported features and if new exception formats
1379 	 * supported, need to load the additional DDC config to enable.
1380 	 */
1381 	err = btintel_read_debug_features(hdev, &features);
1382 	if (err)
1383 		return err;
1384 
1385 	/* Set or reset the debug features. */
1386 	if (enable)
1387 		err = btintel_set_debug_features(hdev, &features);
1388 	else
1389 		err = btintel_reset_debug_features(hdev, &features);
1390 
1391 	return err;
1392 }
1393 EXPORT_SYMBOL_GPL(btintel_set_quality_report);
1394 
1395 static const struct firmware *btintel_legacy_rom_get_fw(struct hci_dev *hdev,
1396 					       struct intel_version *ver)
1397 {
1398 	const struct firmware *fw;
1399 	char fwname[64];
1400 	int ret;
1401 
1402 	snprintf(fwname, sizeof(fwname),
1403 		 "intel/ibt-hw-%x.%x.%x-fw-%x.%x.%x.%x.%x.bseq",
1404 		 ver->hw_platform, ver->hw_variant, ver->hw_revision,
1405 		 ver->fw_variant,  ver->fw_revision, ver->fw_build_num,
1406 		 ver->fw_build_ww, ver->fw_build_yy);
1407 
1408 	ret = request_firmware(&fw, fwname, &hdev->dev);
1409 	if (ret < 0) {
1410 		if (ret == -EINVAL) {
1411 			bt_dev_err(hdev, "Intel firmware file request failed (%d)",
1412 				   ret);
1413 			return NULL;
1414 		}
1415 
1416 		bt_dev_err(hdev, "failed to open Intel firmware file: %s (%d)",
1417 			   fwname, ret);
1418 
1419 		/* If the correct firmware patch file is not found, use the
1420 		 * default firmware patch file instead
1421 		 */
1422 		snprintf(fwname, sizeof(fwname), "intel/ibt-hw-%x.%x.bseq",
1423 			 ver->hw_platform, ver->hw_variant);
1424 		if (request_firmware(&fw, fwname, &hdev->dev) < 0) {
1425 			bt_dev_err(hdev, "failed to open default fw file: %s",
1426 				   fwname);
1427 			return NULL;
1428 		}
1429 	}
1430 
1431 	bt_dev_info(hdev, "Intel Bluetooth firmware file: %s", fwname);
1432 
1433 	return fw;
1434 }
1435 
1436 static int btintel_legacy_rom_patching(struct hci_dev *hdev,
1437 				      const struct firmware *fw,
1438 				      const u8 **fw_ptr, int *disable_patch)
1439 {
1440 	struct sk_buff *skb;
1441 	struct hci_command_hdr *cmd;
1442 	const u8 *cmd_param;
1443 	struct hci_event_hdr *evt = NULL;
1444 	const u8 *evt_param = NULL;
1445 	int remain = fw->size - (*fw_ptr - fw->data);
1446 
1447 	/* The first byte indicates the types of the patch command or event.
1448 	 * 0x01 means HCI command and 0x02 is HCI event. If the first bytes
1449 	 * in the current firmware buffer doesn't start with 0x01 or
1450 	 * the size of remain buffer is smaller than HCI command header,
1451 	 * the firmware file is corrupted and it should stop the patching
1452 	 * process.
1453 	 */
1454 	if (remain > HCI_COMMAND_HDR_SIZE && *fw_ptr[0] != 0x01) {
1455 		bt_dev_err(hdev, "Intel fw corrupted: invalid cmd read");
1456 		return -EINVAL;
1457 	}
1458 	(*fw_ptr)++;
1459 	remain--;
1460 
1461 	cmd = (struct hci_command_hdr *)(*fw_ptr);
1462 	*fw_ptr += sizeof(*cmd);
1463 	remain -= sizeof(*cmd);
1464 
1465 	/* Ensure that the remain firmware data is long enough than the length
1466 	 * of command parameter. If not, the firmware file is corrupted.
1467 	 */
1468 	if (remain < cmd->plen) {
1469 		bt_dev_err(hdev, "Intel fw corrupted: invalid cmd len");
1470 		return -EFAULT;
1471 	}
1472 
1473 	/* If there is a command that loads a patch in the firmware
1474 	 * file, then enable the patch upon success, otherwise just
1475 	 * disable the manufacturer mode, for example patch activation
1476 	 * is not required when the default firmware patch file is used
1477 	 * because there are no patch data to load.
1478 	 */
1479 	if (*disable_patch && le16_to_cpu(cmd->opcode) == 0xfc8e)
1480 		*disable_patch = 0;
1481 
1482 	cmd_param = *fw_ptr;
1483 	*fw_ptr += cmd->plen;
1484 	remain -= cmd->plen;
1485 
1486 	/* This reads the expected events when the above command is sent to the
1487 	 * device. Some vendor commands expects more than one events, for
1488 	 * example command status event followed by vendor specific event.
1489 	 * For this case, it only keeps the last expected event. so the command
1490 	 * can be sent with __hci_cmd_sync_ev() which returns the sk_buff of
1491 	 * last expected event.
1492 	 */
1493 	while (remain > HCI_EVENT_HDR_SIZE && *fw_ptr[0] == 0x02) {
1494 		(*fw_ptr)++;
1495 		remain--;
1496 
1497 		evt = (struct hci_event_hdr *)(*fw_ptr);
1498 		*fw_ptr += sizeof(*evt);
1499 		remain -= sizeof(*evt);
1500 
1501 		if (remain < evt->plen) {
1502 			bt_dev_err(hdev, "Intel fw corrupted: invalid evt len");
1503 			return -EFAULT;
1504 		}
1505 
1506 		evt_param = *fw_ptr;
1507 		*fw_ptr += evt->plen;
1508 		remain -= evt->plen;
1509 	}
1510 
1511 	/* Every HCI commands in the firmware file has its correspond event.
1512 	 * If event is not found or remain is smaller than zero, the firmware
1513 	 * file is corrupted.
1514 	 */
1515 	if (!evt || !evt_param || remain < 0) {
1516 		bt_dev_err(hdev, "Intel fw corrupted: invalid evt read");
1517 		return -EFAULT;
1518 	}
1519 
1520 	skb = __hci_cmd_sync_ev(hdev, le16_to_cpu(cmd->opcode), cmd->plen,
1521 				cmd_param, evt->evt, HCI_INIT_TIMEOUT);
1522 	if (IS_ERR(skb)) {
1523 		bt_dev_err(hdev, "sending Intel patch command (0x%4.4x) failed (%ld)",
1524 			   cmd->opcode, PTR_ERR(skb));
1525 		return PTR_ERR(skb);
1526 	}
1527 
1528 	/* It ensures that the returned event matches the event data read from
1529 	 * the firmware file. At fist, it checks the length and then
1530 	 * the contents of the event.
1531 	 */
1532 	if (skb->len != evt->plen) {
1533 		bt_dev_err(hdev, "mismatch event length (opcode 0x%4.4x)",
1534 			   le16_to_cpu(cmd->opcode));
1535 		kfree_skb(skb);
1536 		return -EFAULT;
1537 	}
1538 
1539 	if (memcmp(skb->data, evt_param, evt->plen)) {
1540 		bt_dev_err(hdev, "mismatch event parameter (opcode 0x%4.4x)",
1541 			   le16_to_cpu(cmd->opcode));
1542 		kfree_skb(skb);
1543 		return -EFAULT;
1544 	}
1545 	kfree_skb(skb);
1546 
1547 	return 0;
1548 }
1549 
1550 static int btintel_legacy_rom_setup(struct hci_dev *hdev,
1551 				    struct intel_version *ver)
1552 {
1553 	const struct firmware *fw;
1554 	const u8 *fw_ptr;
1555 	int disable_patch, err;
1556 	struct intel_version new_ver;
1557 
1558 	BT_DBG("%s", hdev->name);
1559 
1560 	/* fw_patch_num indicates the version of patch the device currently
1561 	 * have. If there is no patch data in the device, it is always 0x00.
1562 	 * So, if it is other than 0x00, no need to patch the device again.
1563 	 */
1564 	if (ver->fw_patch_num) {
1565 		bt_dev_info(hdev,
1566 			    "Intel device is already patched. patch num: %02x",
1567 			    ver->fw_patch_num);
1568 		goto complete;
1569 	}
1570 
1571 	/* Opens the firmware patch file based on the firmware version read
1572 	 * from the controller. If it fails to open the matching firmware
1573 	 * patch file, it tries to open the default firmware patch file.
1574 	 * If no patch file is found, allow the device to operate without
1575 	 * a patch.
1576 	 */
1577 	fw = btintel_legacy_rom_get_fw(hdev, ver);
1578 	if (!fw)
1579 		goto complete;
1580 	fw_ptr = fw->data;
1581 
1582 	/* Enable the manufacturer mode of the controller.
1583 	 * Only while this mode is enabled, the driver can download the
1584 	 * firmware patch data and configuration parameters.
1585 	 */
1586 	err = btintel_enter_mfg(hdev);
1587 	if (err) {
1588 		release_firmware(fw);
1589 		return err;
1590 	}
1591 
1592 	disable_patch = 1;
1593 
1594 	/* The firmware data file consists of list of Intel specific HCI
1595 	 * commands and its expected events. The first byte indicates the
1596 	 * type of the message, either HCI command or HCI event.
1597 	 *
1598 	 * It reads the command and its expected event from the firmware file,
1599 	 * and send to the controller. Once __hci_cmd_sync_ev() returns,
1600 	 * the returned event is compared with the event read from the firmware
1601 	 * file and it will continue until all the messages are downloaded to
1602 	 * the controller.
1603 	 *
1604 	 * Once the firmware patching is completed successfully,
1605 	 * the manufacturer mode is disabled with reset and activating the
1606 	 * downloaded patch.
1607 	 *
1608 	 * If the firmware patching fails, the manufacturer mode is
1609 	 * disabled with reset and deactivating the patch.
1610 	 *
1611 	 * If the default patch file is used, no reset is done when disabling
1612 	 * the manufacturer.
1613 	 */
1614 	while (fw->size > fw_ptr - fw->data) {
1615 		int ret;
1616 
1617 		ret = btintel_legacy_rom_patching(hdev, fw, &fw_ptr,
1618 						 &disable_patch);
1619 		if (ret < 0)
1620 			goto exit_mfg_deactivate;
1621 	}
1622 
1623 	release_firmware(fw);
1624 
1625 	if (disable_patch)
1626 		goto exit_mfg_disable;
1627 
1628 	/* Patching completed successfully and disable the manufacturer mode
1629 	 * with reset and activate the downloaded firmware patches.
1630 	 */
1631 	err = btintel_exit_mfg(hdev, true, true);
1632 	if (err)
1633 		return err;
1634 
1635 	/* Need build number for downloaded fw patches in
1636 	 * every power-on boot
1637 	 */
1638 	err = btintel_read_version(hdev, &new_ver);
1639 	if (err)
1640 		return err;
1641 
1642 	bt_dev_info(hdev, "Intel BT fw patch 0x%02x completed & activated",
1643 		    new_ver.fw_patch_num);
1644 
1645 	goto complete;
1646 
1647 exit_mfg_disable:
1648 	/* Disable the manufacturer mode without reset */
1649 	err = btintel_exit_mfg(hdev, false, false);
1650 	if (err)
1651 		return err;
1652 
1653 	bt_dev_info(hdev, "Intel firmware patch completed");
1654 
1655 	goto complete;
1656 
1657 exit_mfg_deactivate:
1658 	release_firmware(fw);
1659 
1660 	/* Patching failed. Disable the manufacturer mode with reset and
1661 	 * deactivate the downloaded firmware patches.
1662 	 */
1663 	err = btintel_exit_mfg(hdev, true, false);
1664 	if (err)
1665 		return err;
1666 
1667 	bt_dev_info(hdev, "Intel firmware patch completed and deactivated");
1668 
1669 complete:
1670 	/* Set the event mask for Intel specific vendor events. This enables
1671 	 * a few extra events that are useful during general operation.
1672 	 */
1673 	btintel_set_event_mask_mfg(hdev, false);
1674 
1675 	btintel_check_bdaddr(hdev);
1676 
1677 	return 0;
1678 }
1679 
1680 static int btintel_download_wait(struct hci_dev *hdev, ktime_t calltime, int msec)
1681 {
1682 	ktime_t delta, rettime;
1683 	unsigned long long duration;
1684 	int err;
1685 
1686 	btintel_set_flag(hdev, INTEL_FIRMWARE_LOADED);
1687 
1688 	bt_dev_info(hdev, "Waiting for firmware download to complete");
1689 
1690 	err = btintel_wait_on_flag_timeout(hdev, INTEL_DOWNLOADING,
1691 					   TASK_INTERRUPTIBLE,
1692 					   msecs_to_jiffies(msec));
1693 	if (err == -EINTR) {
1694 		bt_dev_err(hdev, "Firmware loading interrupted");
1695 		return err;
1696 	}
1697 
1698 	if (err) {
1699 		bt_dev_err(hdev, "Firmware loading timeout");
1700 		return -ETIMEDOUT;
1701 	}
1702 
1703 	if (btintel_test_flag(hdev, INTEL_FIRMWARE_FAILED)) {
1704 		bt_dev_err(hdev, "Firmware loading failed");
1705 		return -ENOEXEC;
1706 	}
1707 
1708 	rettime = ktime_get();
1709 	delta = ktime_sub(rettime, calltime);
1710 	duration = (unsigned long long)ktime_to_ns(delta) >> 10;
1711 
1712 	bt_dev_info(hdev, "Firmware loaded in %llu usecs", duration);
1713 
1714 	return 0;
1715 }
1716 
1717 static int btintel_boot_wait(struct hci_dev *hdev, ktime_t calltime, int msec)
1718 {
1719 	ktime_t delta, rettime;
1720 	unsigned long long duration;
1721 	int err;
1722 
1723 	bt_dev_info(hdev, "Waiting for device to boot");
1724 
1725 	err = btintel_wait_on_flag_timeout(hdev, INTEL_BOOTING,
1726 					   TASK_INTERRUPTIBLE,
1727 					   msecs_to_jiffies(msec));
1728 	if (err == -EINTR) {
1729 		bt_dev_err(hdev, "Device boot interrupted");
1730 		return -EINTR;
1731 	}
1732 
1733 	if (err) {
1734 		bt_dev_err(hdev, "Device boot timeout");
1735 		return -ETIMEDOUT;
1736 	}
1737 
1738 	rettime = ktime_get();
1739 	delta = ktime_sub(rettime, calltime);
1740 	duration = (unsigned long long) ktime_to_ns(delta) >> 10;
1741 
1742 	bt_dev_info(hdev, "Device booted in %llu usecs", duration);
1743 
1744 	return 0;
1745 }
1746 
1747 static int btintel_boot(struct hci_dev *hdev, u32 boot_addr)
1748 {
1749 	ktime_t calltime;
1750 	int err;
1751 
1752 	calltime = ktime_get();
1753 
1754 	btintel_set_flag(hdev, INTEL_BOOTING);
1755 
1756 	err = btintel_send_intel_reset(hdev, boot_addr);
1757 	if (err) {
1758 		bt_dev_err(hdev, "Intel Soft Reset failed (%d)", err);
1759 		btintel_reset_to_bootloader(hdev);
1760 		return err;
1761 	}
1762 
1763 	/* The bootloader will not indicate when the device is ready. This
1764 	 * is done by the operational firmware sending bootup notification.
1765 	 *
1766 	 * Booting into operational firmware should not take longer than
1767 	 * 1 second. However if that happens, then just fail the setup
1768 	 * since something went wrong.
1769 	 */
1770 	err = btintel_boot_wait(hdev, calltime, 1000);
1771 	if (err == -ETIMEDOUT)
1772 		btintel_reset_to_bootloader(hdev);
1773 
1774 	return err;
1775 }
1776 
1777 static int btintel_get_fw_name(struct intel_version *ver,
1778 					     struct intel_boot_params *params,
1779 					     char *fw_name, size_t len,
1780 					     const char *suffix)
1781 {
1782 	switch (ver->hw_variant) {
1783 	case 0x0b:	/* SfP */
1784 	case 0x0c:	/* WsP */
1785 		snprintf(fw_name, len, "intel/ibt-%u-%u.%s",
1786 			 ver->hw_variant,
1787 			 le16_to_cpu(params->dev_revid),
1788 			 suffix);
1789 		break;
1790 	case 0x11:	/* JfP */
1791 	case 0x12:	/* ThP */
1792 	case 0x13:	/* HrP */
1793 	case 0x14:	/* CcP */
1794 		snprintf(fw_name, len, "intel/ibt-%u-%u-%u.%s",
1795 			 ver->hw_variant,
1796 			 ver->hw_revision,
1797 			 ver->fw_revision,
1798 			 suffix);
1799 		break;
1800 	default:
1801 		return -EINVAL;
1802 	}
1803 
1804 	return 0;
1805 }
1806 
1807 static int btintel_download_fw(struct hci_dev *hdev,
1808 					 struct intel_version *ver,
1809 					 struct intel_boot_params *params,
1810 					 u32 *boot_param)
1811 {
1812 	const struct firmware *fw;
1813 	char fwname[64];
1814 	int err;
1815 	ktime_t calltime;
1816 
1817 	if (!ver || !params)
1818 		return -EINVAL;
1819 
1820 	/* The firmware variant determines if the device is in bootloader
1821 	 * mode or is running operational firmware. The value 0x06 identifies
1822 	 * the bootloader and the value 0x23 identifies the operational
1823 	 * firmware.
1824 	 *
1825 	 * When the operational firmware is already present, then only
1826 	 * the check for valid Bluetooth device address is needed. This
1827 	 * determines if the device will be added as configured or
1828 	 * unconfigured controller.
1829 	 *
1830 	 * It is not possible to use the Secure Boot Parameters in this
1831 	 * case since that command is only available in bootloader mode.
1832 	 */
1833 	if (ver->fw_variant == 0x23) {
1834 		btintel_clear_flag(hdev, INTEL_BOOTLOADER);
1835 		btintel_check_bdaddr(hdev);
1836 
1837 		/* SfP and WsP don't seem to update the firmware version on file
1838 		 * so version checking is currently possible.
1839 		 */
1840 		switch (ver->hw_variant) {
1841 		case 0x0b:	/* SfP */
1842 		case 0x0c:	/* WsP */
1843 			return 0;
1844 		}
1845 
1846 		/* Proceed to download to check if the version matches */
1847 		goto download;
1848 	}
1849 
1850 	/* Read the secure boot parameters to identify the operating
1851 	 * details of the bootloader.
1852 	 */
1853 	err = btintel_read_boot_params(hdev, params);
1854 	if (err)
1855 		return err;
1856 
1857 	/* It is required that every single firmware fragment is acknowledged
1858 	 * with a command complete event. If the boot parameters indicate
1859 	 * that this bootloader does not send them, then abort the setup.
1860 	 */
1861 	if (params->limited_cce != 0x00) {
1862 		bt_dev_err(hdev, "Unsupported Intel firmware loading method (%u)",
1863 			   params->limited_cce);
1864 		return -EINVAL;
1865 	}
1866 
1867 	/* If the OTP has no valid Bluetooth device address, then there will
1868 	 * also be no valid address for the operational firmware.
1869 	 */
1870 	if (!bacmp(&params->otp_bdaddr, BDADDR_ANY)) {
1871 		bt_dev_info(hdev, "No device address configured");
1872 		set_bit(HCI_QUIRK_INVALID_BDADDR, &hdev->quirks);
1873 	}
1874 
1875 download:
1876 	/* With this Intel bootloader only the hardware variant and device
1877 	 * revision information are used to select the right firmware for SfP
1878 	 * and WsP.
1879 	 *
1880 	 * The firmware filename is ibt-<hw_variant>-<dev_revid>.sfi.
1881 	 *
1882 	 * Currently the supported hardware variants are:
1883 	 *   11 (0x0b) for iBT3.0 (LnP/SfP)
1884 	 *   12 (0x0c) for iBT3.5 (WsP)
1885 	 *
1886 	 * For ThP/JfP and for future SKU's, the FW name varies based on HW
1887 	 * variant, HW revision and FW revision, as these are dependent on CNVi
1888 	 * and RF Combination.
1889 	 *
1890 	 *   17 (0x11) for iBT3.5 (JfP)
1891 	 *   18 (0x12) for iBT3.5 (ThP)
1892 	 *
1893 	 * The firmware file name for these will be
1894 	 * ibt-<hw_variant>-<hw_revision>-<fw_revision>.sfi.
1895 	 *
1896 	 */
1897 	err = btintel_get_fw_name(ver, params, fwname, sizeof(fwname), "sfi");
1898 	if (err < 0) {
1899 		if (!btintel_test_flag(hdev, INTEL_BOOTLOADER)) {
1900 			/* Firmware has already been loaded */
1901 			btintel_set_flag(hdev, INTEL_FIRMWARE_LOADED);
1902 			return 0;
1903 		}
1904 
1905 		bt_dev_err(hdev, "Unsupported Intel firmware naming");
1906 		return -EINVAL;
1907 	}
1908 
1909 	err = firmware_request_nowarn(&fw, fwname, &hdev->dev);
1910 	if (err < 0) {
1911 		if (!btintel_test_flag(hdev, INTEL_BOOTLOADER)) {
1912 			/* Firmware has already been loaded */
1913 			btintel_set_flag(hdev, INTEL_FIRMWARE_LOADED);
1914 			return 0;
1915 		}
1916 
1917 		bt_dev_err(hdev, "Failed to load Intel firmware file %s (%d)",
1918 			   fwname, err);
1919 		return err;
1920 	}
1921 
1922 	bt_dev_info(hdev, "Found device firmware: %s", fwname);
1923 
1924 	if (fw->size < 644) {
1925 		bt_dev_err(hdev, "Invalid size of firmware file (%zu)",
1926 			   fw->size);
1927 		err = -EBADF;
1928 		goto done;
1929 	}
1930 
1931 	calltime = ktime_get();
1932 
1933 	btintel_set_flag(hdev, INTEL_DOWNLOADING);
1934 
1935 	/* Start firmware downloading and get boot parameter */
1936 	err = btintel_download_firmware(hdev, ver, fw, boot_param);
1937 	if (err < 0) {
1938 		if (err == -EALREADY) {
1939 			/* Firmware has already been loaded */
1940 			btintel_set_flag(hdev, INTEL_FIRMWARE_LOADED);
1941 			err = 0;
1942 			goto done;
1943 		}
1944 
1945 		/* When FW download fails, send Intel Reset to retry
1946 		 * FW download.
1947 		 */
1948 		btintel_reset_to_bootloader(hdev);
1949 		goto done;
1950 	}
1951 
1952 	/* Before switching the device into operational mode and with that
1953 	 * booting the loaded firmware, wait for the bootloader notification
1954 	 * that all fragments have been successfully received.
1955 	 *
1956 	 * When the event processing receives the notification, then the
1957 	 * INTEL_DOWNLOADING flag will be cleared.
1958 	 *
1959 	 * The firmware loading should not take longer than 5 seconds
1960 	 * and thus just timeout if that happens and fail the setup
1961 	 * of this device.
1962 	 */
1963 	err = btintel_download_wait(hdev, calltime, 5000);
1964 	if (err == -ETIMEDOUT)
1965 		btintel_reset_to_bootloader(hdev);
1966 
1967 done:
1968 	release_firmware(fw);
1969 	return err;
1970 }
1971 
1972 static int btintel_bootloader_setup(struct hci_dev *hdev,
1973 				    struct intel_version *ver)
1974 {
1975 	struct intel_version new_ver;
1976 	struct intel_boot_params params;
1977 	u32 boot_param;
1978 	char ddcname[64];
1979 	int err;
1980 
1981 	BT_DBG("%s", hdev->name);
1982 
1983 	/* Set the default boot parameter to 0x0 and it is updated to
1984 	 * SKU specific boot parameter after reading Intel_Write_Boot_Params
1985 	 * command while downloading the firmware.
1986 	 */
1987 	boot_param = 0x00000000;
1988 
1989 	btintel_set_flag(hdev, INTEL_BOOTLOADER);
1990 
1991 	err = btintel_download_fw(hdev, ver, &params, &boot_param);
1992 	if (err)
1993 		return err;
1994 
1995 	/* controller is already having an operational firmware */
1996 	if (ver->fw_variant == 0x23)
1997 		goto finish;
1998 
1999 	err = btintel_boot(hdev, boot_param);
2000 	if (err)
2001 		return err;
2002 
2003 	btintel_clear_flag(hdev, INTEL_BOOTLOADER);
2004 
2005 	err = btintel_get_fw_name(ver, &params, ddcname,
2006 						sizeof(ddcname), "ddc");
2007 
2008 	if (err < 0) {
2009 		bt_dev_err(hdev, "Unsupported Intel firmware naming");
2010 	} else {
2011 		/* Once the device is running in operational mode, it needs to
2012 		 * apply the device configuration (DDC) parameters.
2013 		 *
2014 		 * The device can work without DDC parameters, so even if it
2015 		 * fails to load the file, no need to fail the setup.
2016 		 */
2017 		btintel_load_ddc_config(hdev, ddcname);
2018 	}
2019 
2020 	hci_dev_clear_flag(hdev, HCI_QUALITY_REPORT);
2021 
2022 	/* Read the Intel version information after loading the FW  */
2023 	err = btintel_read_version(hdev, &new_ver);
2024 	if (err)
2025 		return err;
2026 
2027 	btintel_version_info(hdev, &new_ver);
2028 
2029 finish:
2030 	/* Set the event mask for Intel specific vendor events. This enables
2031 	 * a few extra events that are useful during general operation. It
2032 	 * does not enable any debugging related events.
2033 	 *
2034 	 * The device will function correctly without these events enabled
2035 	 * and thus no need to fail the setup.
2036 	 */
2037 	btintel_set_event_mask(hdev, false);
2038 
2039 	return 0;
2040 }
2041 
2042 static void btintel_get_fw_name_tlv(const struct intel_version_tlv *ver,
2043 				    char *fw_name, size_t len,
2044 				    const char *suffix)
2045 {
2046 	/* The firmware file name for new generation controllers will be
2047 	 * ibt-<cnvi_top type+cnvi_top step>-<cnvr_top type+cnvr_top step>
2048 	 */
2049 	snprintf(fw_name, len, "intel/ibt-%04x-%04x.%s",
2050 		 INTEL_CNVX_TOP_PACK_SWAB(INTEL_CNVX_TOP_TYPE(ver->cnvi_top),
2051 					  INTEL_CNVX_TOP_STEP(ver->cnvi_top)),
2052 		 INTEL_CNVX_TOP_PACK_SWAB(INTEL_CNVX_TOP_TYPE(ver->cnvr_top),
2053 					  INTEL_CNVX_TOP_STEP(ver->cnvr_top)),
2054 		 suffix);
2055 }
2056 
2057 static int btintel_prepare_fw_download_tlv(struct hci_dev *hdev,
2058 					   struct intel_version_tlv *ver,
2059 					   u32 *boot_param)
2060 {
2061 	const struct firmware *fw;
2062 	char fwname[64];
2063 	int err;
2064 	ktime_t calltime;
2065 
2066 	if (!ver || !boot_param)
2067 		return -EINVAL;
2068 
2069 	/* The firmware variant determines if the device is in bootloader
2070 	 * mode or is running operational firmware. The value 0x03 identifies
2071 	 * the bootloader and the value 0x23 identifies the operational
2072 	 * firmware.
2073 	 *
2074 	 * When the operational firmware is already present, then only
2075 	 * the check for valid Bluetooth device address is needed. This
2076 	 * determines if the device will be added as configured or
2077 	 * unconfigured controller.
2078 	 *
2079 	 * It is not possible to use the Secure Boot Parameters in this
2080 	 * case since that command is only available in bootloader mode.
2081 	 */
2082 	if (ver->img_type == 0x03) {
2083 		btintel_clear_flag(hdev, INTEL_BOOTLOADER);
2084 		btintel_check_bdaddr(hdev);
2085 	} else {
2086 		/*
2087 		 * Check for valid bd address in boot loader mode. Device
2088 		 * will be marked as unconfigured if empty bd address is
2089 		 * found.
2090 		 */
2091 		if (!bacmp(&ver->otp_bd_addr, BDADDR_ANY)) {
2092 			bt_dev_info(hdev, "No device address configured");
2093 			set_bit(HCI_QUIRK_INVALID_BDADDR, &hdev->quirks);
2094 		}
2095 	}
2096 
2097 	btintel_get_fw_name_tlv(ver, fwname, sizeof(fwname), "sfi");
2098 	err = firmware_request_nowarn(&fw, fwname, &hdev->dev);
2099 	if (err < 0) {
2100 		if (!btintel_test_flag(hdev, INTEL_BOOTLOADER)) {
2101 			/* Firmware has already been loaded */
2102 			btintel_set_flag(hdev, INTEL_FIRMWARE_LOADED);
2103 			return 0;
2104 		}
2105 
2106 		bt_dev_err(hdev, "Failed to load Intel firmware file %s (%d)",
2107 			   fwname, err);
2108 
2109 		return err;
2110 	}
2111 
2112 	bt_dev_info(hdev, "Found device firmware: %s", fwname);
2113 
2114 	if (fw->size < 644) {
2115 		bt_dev_err(hdev, "Invalid size of firmware file (%zu)",
2116 			   fw->size);
2117 		err = -EBADF;
2118 		goto done;
2119 	}
2120 
2121 	calltime = ktime_get();
2122 
2123 	btintel_set_flag(hdev, INTEL_DOWNLOADING);
2124 
2125 	/* Start firmware downloading and get boot parameter */
2126 	err = btintel_download_fw_tlv(hdev, ver, fw, boot_param,
2127 					       INTEL_HW_VARIANT(ver->cnvi_bt),
2128 					       ver->sbe_type);
2129 	if (err < 0) {
2130 		if (err == -EALREADY) {
2131 			/* Firmware has already been loaded */
2132 			btintel_set_flag(hdev, INTEL_FIRMWARE_LOADED);
2133 			err = 0;
2134 			goto done;
2135 		}
2136 
2137 		/* When FW download fails, send Intel Reset to retry
2138 		 * FW download.
2139 		 */
2140 		btintel_reset_to_bootloader(hdev);
2141 		goto done;
2142 	}
2143 
2144 	/* Before switching the device into operational mode and with that
2145 	 * booting the loaded firmware, wait for the bootloader notification
2146 	 * that all fragments have been successfully received.
2147 	 *
2148 	 * When the event processing receives the notification, then the
2149 	 * BTUSB_DOWNLOADING flag will be cleared.
2150 	 *
2151 	 * The firmware loading should not take longer than 5 seconds
2152 	 * and thus just timeout if that happens and fail the setup
2153 	 * of this device.
2154 	 */
2155 	err = btintel_download_wait(hdev, calltime, 5000);
2156 	if (err == -ETIMEDOUT)
2157 		btintel_reset_to_bootloader(hdev);
2158 
2159 done:
2160 	release_firmware(fw);
2161 	return err;
2162 }
2163 
2164 static int btintel_get_codec_config_data(struct hci_dev *hdev,
2165 					 __u8 link, struct bt_codec *codec,
2166 					 __u8 *ven_len, __u8 **ven_data)
2167 {
2168 	int err = 0;
2169 
2170 	if (!ven_data || !ven_len)
2171 		return -EINVAL;
2172 
2173 	*ven_len = 0;
2174 	*ven_data = NULL;
2175 
2176 	if (link != ESCO_LINK) {
2177 		bt_dev_err(hdev, "Invalid link type(%u)", link);
2178 		return -EINVAL;
2179 	}
2180 
2181 	*ven_data = kmalloc(sizeof(__u8), GFP_KERNEL);
2182 	if (!*ven_data) {
2183 		err = -ENOMEM;
2184 		goto error;
2185 	}
2186 
2187 	/* supports only CVSD and mSBC offload codecs */
2188 	switch (codec->id) {
2189 	case 0x02:
2190 		**ven_data = 0x00;
2191 		break;
2192 	case 0x05:
2193 		**ven_data = 0x01;
2194 		break;
2195 	default:
2196 		err = -EINVAL;
2197 		bt_dev_err(hdev, "Invalid codec id(%u)", codec->id);
2198 		goto error;
2199 	}
2200 	/* codec and its capabilities are pre-defined to ids
2201 	 * preset id = 0x00 represents CVSD codec with sampling rate 8K
2202 	 * preset id = 0x01 represents mSBC codec with sampling rate 16K
2203 	 */
2204 	*ven_len = sizeof(__u8);
2205 	return err;
2206 
2207 error:
2208 	kfree(*ven_data);
2209 	*ven_data = NULL;
2210 	return err;
2211 }
2212 
2213 static int btintel_get_data_path_id(struct hci_dev *hdev, __u8 *data_path_id)
2214 {
2215 	/* Intel uses 1 as data path id for all the usecases */
2216 	*data_path_id = 1;
2217 	return 0;
2218 }
2219 
2220 static int btintel_configure_offload(struct hci_dev *hdev)
2221 {
2222 	struct sk_buff *skb;
2223 	int err = 0;
2224 	struct intel_offload_use_cases *use_cases;
2225 
2226 	skb = __hci_cmd_sync(hdev, 0xfc86, 0, NULL, HCI_INIT_TIMEOUT);
2227 	if (IS_ERR(skb)) {
2228 		bt_dev_err(hdev, "Reading offload use cases failed (%ld)",
2229 			   PTR_ERR(skb));
2230 		return PTR_ERR(skb);
2231 	}
2232 
2233 	if (skb->len < sizeof(*use_cases)) {
2234 		err = -EIO;
2235 		goto error;
2236 	}
2237 
2238 	use_cases = (void *)skb->data;
2239 
2240 	if (use_cases->status) {
2241 		err = -bt_to_errno(skb->data[0]);
2242 		goto error;
2243 	}
2244 
2245 	if (use_cases->preset[0] & 0x03) {
2246 		hdev->get_data_path_id = btintel_get_data_path_id;
2247 		hdev->get_codec_config_data = btintel_get_codec_config_data;
2248 	}
2249 error:
2250 	kfree_skb(skb);
2251 	return err;
2252 }
2253 
2254 static int btintel_bootloader_setup_tlv(struct hci_dev *hdev,
2255 					struct intel_version_tlv *ver)
2256 {
2257 	u32 boot_param;
2258 	char ddcname[64];
2259 	int err;
2260 	struct intel_version_tlv new_ver;
2261 
2262 	bt_dev_dbg(hdev, "");
2263 
2264 	/* Set the default boot parameter to 0x0 and it is updated to
2265 	 * SKU specific boot parameter after reading Intel_Write_Boot_Params
2266 	 * command while downloading the firmware.
2267 	 */
2268 	boot_param = 0x00000000;
2269 
2270 	btintel_set_flag(hdev, INTEL_BOOTLOADER);
2271 
2272 	err = btintel_prepare_fw_download_tlv(hdev, ver, &boot_param);
2273 	if (err)
2274 		return err;
2275 
2276 	/* check if controller is already having an operational firmware */
2277 	if (ver->img_type == 0x03)
2278 		goto finish;
2279 
2280 	err = btintel_boot(hdev, boot_param);
2281 	if (err)
2282 		return err;
2283 
2284 	btintel_clear_flag(hdev, INTEL_BOOTLOADER);
2285 
2286 	btintel_get_fw_name_tlv(ver, ddcname, sizeof(ddcname), "ddc");
2287 	/* Once the device is running in operational mode, it needs to
2288 	 * apply the device configuration (DDC) parameters.
2289 	 *
2290 	 * The device can work without DDC parameters, so even if it
2291 	 * fails to load the file, no need to fail the setup.
2292 	 */
2293 	btintel_load_ddc_config(hdev, ddcname);
2294 
2295 	/* Read supported use cases and set callbacks to fetch datapath id */
2296 	btintel_configure_offload(hdev);
2297 
2298 	hci_dev_clear_flag(hdev, HCI_QUALITY_REPORT);
2299 
2300 	/* Read the Intel version information after loading the FW  */
2301 	err = btintel_read_version_tlv(hdev, &new_ver);
2302 	if (err)
2303 		return err;
2304 
2305 	btintel_version_info_tlv(hdev, &new_ver);
2306 
2307 finish:
2308 	/* Set the event mask for Intel specific vendor events. This enables
2309 	 * a few extra events that are useful during general operation. It
2310 	 * does not enable any debugging related events.
2311 	 *
2312 	 * The device will function correctly without these events enabled
2313 	 * and thus no need to fail the setup.
2314 	 */
2315 	btintel_set_event_mask(hdev, false);
2316 
2317 	return 0;
2318 }
2319 
2320 static void btintel_set_msft_opcode(struct hci_dev *hdev, u8 hw_variant)
2321 {
2322 	switch (hw_variant) {
2323 	/* Legacy bootloader devices that supports MSFT Extension */
2324 	case 0x11:	/* JfP */
2325 	case 0x12:	/* ThP */
2326 	case 0x13:	/* HrP */
2327 	case 0x14:	/* CcP */
2328 	/* All Intel new genration controllers support the Microsoft vendor
2329 	 * extension are using 0xFC1E for VsMsftOpCode.
2330 	 */
2331 	case 0x17:
2332 	case 0x18:
2333 	case 0x19:
2334 	case 0x1b:
2335 		hci_set_msft_opcode(hdev, 0xFC1E);
2336 		break;
2337 	default:
2338 		/* Not supported */
2339 		break;
2340 	}
2341 }
2342 
2343 static int btintel_setup_combined(struct hci_dev *hdev)
2344 {
2345 	const u8 param[1] = { 0xFF };
2346 	struct intel_version ver;
2347 	struct intel_version_tlv ver_tlv;
2348 	struct sk_buff *skb;
2349 	int err;
2350 
2351 	BT_DBG("%s", hdev->name);
2352 
2353 	/* The some controllers have a bug with the first HCI command sent to it
2354 	 * returning number of completed commands as zero. This would stall the
2355 	 * command processing in the Bluetooth core.
2356 	 *
2357 	 * As a workaround, send HCI Reset command first which will reset the
2358 	 * number of completed commands and allow normal command processing
2359 	 * from now on.
2360 	 *
2361 	 * Regarding the INTEL_BROKEN_SHUTDOWN_LED flag, these devices maybe
2362 	 * in the SW_RFKILL ON state as a workaround of fixing LED issue during
2363 	 * the shutdown() procedure, and once the device is in SW_RFKILL ON
2364 	 * state, the only way to exit out of it is sending the HCI_Reset
2365 	 * command.
2366 	 */
2367 	if (btintel_test_flag(hdev, INTEL_BROKEN_INITIAL_NCMD) ||
2368 	    btintel_test_flag(hdev, INTEL_BROKEN_SHUTDOWN_LED)) {
2369 		skb = __hci_cmd_sync(hdev, HCI_OP_RESET, 0, NULL,
2370 				     HCI_INIT_TIMEOUT);
2371 		if (IS_ERR(skb)) {
2372 			bt_dev_err(hdev,
2373 				   "sending initial HCI reset failed (%ld)",
2374 				   PTR_ERR(skb));
2375 			return PTR_ERR(skb);
2376 		}
2377 		kfree_skb(skb);
2378 	}
2379 
2380 	/* Starting from TyP device, the command parameter and response are
2381 	 * changed even though the OCF for HCI_Intel_Read_Version command
2382 	 * remains same. The legacy devices can handle even if the
2383 	 * command has a parameter and returns a correct version information.
2384 	 * So, it uses new format to support both legacy and new format.
2385 	 */
2386 	skb = __hci_cmd_sync(hdev, 0xfc05, 1, param, HCI_CMD_TIMEOUT);
2387 	if (IS_ERR(skb)) {
2388 		bt_dev_err(hdev, "Reading Intel version command failed (%ld)",
2389 			   PTR_ERR(skb));
2390 		return PTR_ERR(skb);
2391 	}
2392 
2393 	/* Check the status */
2394 	if (skb->data[0]) {
2395 		bt_dev_err(hdev, "Intel Read Version command failed (%02x)",
2396 			   skb->data[0]);
2397 		err = -EIO;
2398 		goto exit_error;
2399 	}
2400 
2401 	/* Apply the common HCI quirks for Intel device */
2402 	set_bit(HCI_QUIRK_STRICT_DUPLICATE_FILTER, &hdev->quirks);
2403 	set_bit(HCI_QUIRK_SIMULTANEOUS_DISCOVERY, &hdev->quirks);
2404 	set_bit(HCI_QUIRK_NON_PERSISTENT_DIAG, &hdev->quirks);
2405 
2406 	/* Set up the quality report callback for Intel devices */
2407 	hdev->set_quality_report = btintel_set_quality_report;
2408 
2409 	/* For Legacy device, check the HW platform value and size */
2410 	if (skb->len == sizeof(ver) && skb->data[1] == 0x37) {
2411 		bt_dev_dbg(hdev, "Read the legacy Intel version information");
2412 
2413 		memcpy(&ver, skb->data, sizeof(ver));
2414 
2415 		/* Display version information */
2416 		btintel_version_info(hdev, &ver);
2417 
2418 		/* Check for supported iBT hardware variants of this firmware
2419 		 * loading method.
2420 		 *
2421 		 * This check has been put in place to ensure correct forward
2422 		 * compatibility options when newer hardware variants come
2423 		 * along.
2424 		 */
2425 		switch (ver.hw_variant) {
2426 		case 0x07:	/* WP */
2427 		case 0x08:	/* StP */
2428 			/* Legacy ROM product */
2429 			btintel_set_flag(hdev, INTEL_ROM_LEGACY);
2430 
2431 			/* Apply the device specific HCI quirks
2432 			 *
2433 			 * WBS for SdP - For the Legacy ROM products, only SdP
2434 			 * supports the WBS. But the version information is not
2435 			 * enough to use here because the StP2 and SdP have same
2436 			 * hw_variant and fw_variant. So, this flag is set by
2437 			 * the transport driver (btusb) based on the HW info
2438 			 * (idProduct)
2439 			 */
2440 			if (!btintel_test_flag(hdev,
2441 					       INTEL_ROM_LEGACY_NO_WBS_SUPPORT))
2442 				set_bit(HCI_QUIRK_WIDEBAND_SPEECH_SUPPORTED,
2443 					&hdev->quirks);
2444 			if (ver.hw_variant == 0x08 && ver.fw_variant == 0x22)
2445 				set_bit(HCI_QUIRK_VALID_LE_STATES,
2446 					&hdev->quirks);
2447 
2448 			err = btintel_legacy_rom_setup(hdev, &ver);
2449 			break;
2450 		case 0x0b:      /* SfP */
2451 		case 0x11:      /* JfP */
2452 		case 0x12:      /* ThP */
2453 		case 0x13:      /* HrP */
2454 		case 0x14:      /* CcP */
2455 			set_bit(HCI_QUIRK_VALID_LE_STATES, &hdev->quirks);
2456 			fallthrough;
2457 		case 0x0c:	/* WsP */
2458 			/* Apply the device specific HCI quirks
2459 			 *
2460 			 * All Legacy bootloader devices support WBS
2461 			 */
2462 			set_bit(HCI_QUIRK_WIDEBAND_SPEECH_SUPPORTED,
2463 				&hdev->quirks);
2464 
2465 			/* Setup MSFT Extension support */
2466 			btintel_set_msft_opcode(hdev, ver.hw_variant);
2467 
2468 			err = btintel_bootloader_setup(hdev, &ver);
2469 			break;
2470 		default:
2471 			bt_dev_err(hdev, "Unsupported Intel hw variant (%u)",
2472 				   ver.hw_variant);
2473 			err = -EINVAL;
2474 		}
2475 
2476 		goto exit_error;
2477 	}
2478 
2479 	/* memset ver_tlv to start with clean state as few fields are exclusive
2480 	 * to bootloader mode and are not populated in operational mode
2481 	 */
2482 	memset(&ver_tlv, 0, sizeof(ver_tlv));
2483 	/* For TLV type device, parse the tlv data */
2484 	err = btintel_parse_version_tlv(hdev, &ver_tlv, skb);
2485 	if (err) {
2486 		bt_dev_err(hdev, "Failed to parse TLV version information");
2487 		goto exit_error;
2488 	}
2489 
2490 	if (INTEL_HW_PLATFORM(ver_tlv.cnvi_bt) != 0x37) {
2491 		bt_dev_err(hdev, "Unsupported Intel hardware platform (0x%2x)",
2492 			   INTEL_HW_PLATFORM(ver_tlv.cnvi_bt));
2493 		err = -EINVAL;
2494 		goto exit_error;
2495 	}
2496 
2497 	/* Check for supported iBT hardware variants of this firmware
2498 	 * loading method.
2499 	 *
2500 	 * This check has been put in place to ensure correct forward
2501 	 * compatibility options when newer hardware variants come
2502 	 * along.
2503 	 */
2504 	switch (INTEL_HW_VARIANT(ver_tlv.cnvi_bt)) {
2505 	case 0x11:      /* JfP */
2506 	case 0x12:      /* ThP */
2507 	case 0x13:      /* HrP */
2508 	case 0x14:      /* CcP */
2509 		/* Some legacy bootloader devices starting from JfP,
2510 		 * the operational firmware supports both old and TLV based
2511 		 * HCI_Intel_Read_Version command based on the command
2512 		 * parameter.
2513 		 *
2514 		 * For upgrading firmware case, the TLV based version cannot
2515 		 * be used because the firmware filename for legacy bootloader
2516 		 * is based on the old format.
2517 		 *
2518 		 * Also, it is not easy to convert TLV based version from the
2519 		 * legacy version format.
2520 		 *
2521 		 * So, as a workaround for those devices, use the legacy
2522 		 * HCI_Intel_Read_Version to get the version information and
2523 		 * run the legacy bootloader setup.
2524 		 */
2525 		err = btintel_read_version(hdev, &ver);
2526 		if (err)
2527 			break;
2528 
2529 		/* Apply the device specific HCI quirks
2530 		 *
2531 		 * All Legacy bootloader devices support WBS
2532 		 */
2533 		set_bit(HCI_QUIRK_WIDEBAND_SPEECH_SUPPORTED, &hdev->quirks);
2534 
2535 		/* Set Valid LE States quirk */
2536 		set_bit(HCI_QUIRK_VALID_LE_STATES, &hdev->quirks);
2537 
2538 		/* Setup MSFT Extension support */
2539 		btintel_set_msft_opcode(hdev, ver.hw_variant);
2540 
2541 		err = btintel_bootloader_setup(hdev, &ver);
2542 		break;
2543 	case 0x17:
2544 	case 0x18:
2545 	case 0x19:
2546 	case 0x1b:
2547 		/* Display version information of TLV type */
2548 		btintel_version_info_tlv(hdev, &ver_tlv);
2549 
2550 		/* Apply the device specific HCI quirks for TLV based devices
2551 		 *
2552 		 * All TLV based devices support WBS
2553 		 */
2554 		set_bit(HCI_QUIRK_WIDEBAND_SPEECH_SUPPORTED, &hdev->quirks);
2555 
2556 		/* Valid LE States quirk for GfP */
2557 		if (INTEL_HW_VARIANT(ver_tlv.cnvi_bt) == 0x18)
2558 			set_bit(HCI_QUIRK_VALID_LE_STATES, &hdev->quirks);
2559 
2560 		/* Setup MSFT Extension support */
2561 		btintel_set_msft_opcode(hdev,
2562 					INTEL_HW_VARIANT(ver_tlv.cnvi_bt));
2563 
2564 		err = btintel_bootloader_setup_tlv(hdev, &ver_tlv);
2565 		break;
2566 	default:
2567 		bt_dev_err(hdev, "Unsupported Intel hw variant (%u)",
2568 			   INTEL_HW_VARIANT(ver_tlv.cnvi_bt));
2569 		err = -EINVAL;
2570 		break;
2571 	}
2572 
2573 exit_error:
2574 	kfree_skb(skb);
2575 
2576 	return err;
2577 }
2578 
2579 static int btintel_shutdown_combined(struct hci_dev *hdev)
2580 {
2581 	struct sk_buff *skb;
2582 	int ret;
2583 
2584 	/* Send HCI Reset to the controller to stop any BT activity which
2585 	 * were triggered. This will help to save power and maintain the
2586 	 * sync b/w Host and controller
2587 	 */
2588 	skb = __hci_cmd_sync(hdev, HCI_OP_RESET, 0, NULL, HCI_INIT_TIMEOUT);
2589 	if (IS_ERR(skb)) {
2590 		bt_dev_err(hdev, "HCI reset during shutdown failed");
2591 		return PTR_ERR(skb);
2592 	}
2593 	kfree_skb(skb);
2594 
2595 
2596 	/* Some platforms have an issue with BT LED when the interface is
2597 	 * down or BT radio is turned off, which takes 5 seconds to BT LED
2598 	 * goes off. As a workaround, sends HCI_Intel_SW_RFKILL to put the
2599 	 * device in the RFKILL ON state which turns off the BT LED immediately.
2600 	 */
2601 	if (btintel_test_flag(hdev, INTEL_BROKEN_SHUTDOWN_LED)) {
2602 		skb = __hci_cmd_sync(hdev, 0xfc3f, 0, NULL, HCI_INIT_TIMEOUT);
2603 		if (IS_ERR(skb)) {
2604 			ret = PTR_ERR(skb);
2605 			bt_dev_err(hdev, "turning off Intel device LED failed");
2606 			return ret;
2607 		}
2608 		kfree_skb(skb);
2609 	}
2610 
2611 	return 0;
2612 }
2613 
2614 int btintel_configure_setup(struct hci_dev *hdev)
2615 {
2616 	hdev->manufacturer = 2;
2617 	hdev->setup = btintel_setup_combined;
2618 	hdev->shutdown = btintel_shutdown_combined;
2619 	hdev->hw_error = btintel_hw_error;
2620 	hdev->set_diag = btintel_set_diag_combined;
2621 	hdev->set_bdaddr = btintel_set_bdaddr;
2622 
2623 	return 0;
2624 }
2625 EXPORT_SYMBOL_GPL(btintel_configure_setup);
2626 
2627 void btintel_bootup(struct hci_dev *hdev, const void *ptr, unsigned int len)
2628 {
2629 	const struct intel_bootup *evt = ptr;
2630 
2631 	if (len != sizeof(*evt))
2632 		return;
2633 
2634 	if (btintel_test_and_clear_flag(hdev, INTEL_BOOTING))
2635 		btintel_wake_up_flag(hdev, INTEL_BOOTING);
2636 }
2637 EXPORT_SYMBOL_GPL(btintel_bootup);
2638 
2639 void btintel_secure_send_result(struct hci_dev *hdev,
2640 				const void *ptr, unsigned int len)
2641 {
2642 	const struct intel_secure_send_result *evt = ptr;
2643 
2644 	if (len != sizeof(*evt))
2645 		return;
2646 
2647 	if (evt->result)
2648 		btintel_set_flag(hdev, INTEL_FIRMWARE_FAILED);
2649 
2650 	if (btintel_test_and_clear_flag(hdev, INTEL_DOWNLOADING) &&
2651 	    btintel_test_flag(hdev, INTEL_FIRMWARE_LOADED))
2652 		btintel_wake_up_flag(hdev, INTEL_DOWNLOADING);
2653 }
2654 EXPORT_SYMBOL_GPL(btintel_secure_send_result);
2655 
2656 MODULE_AUTHOR("Marcel Holtmann <marcel@holtmann.org>");
2657 MODULE_DESCRIPTION("Bluetooth support for Intel devices ver " VERSION);
2658 MODULE_VERSION(VERSION);
2659 MODULE_LICENSE("GPL");
2660 MODULE_FIRMWARE("intel/ibt-11-5.sfi");
2661 MODULE_FIRMWARE("intel/ibt-11-5.ddc");
2662 MODULE_FIRMWARE("intel/ibt-12-16.sfi");
2663 MODULE_FIRMWARE("intel/ibt-12-16.ddc");
2664