Lines Matching refs:hdev
61 int btintel_check_bdaddr(struct hci_dev *hdev) in btintel_check_bdaddr() argument
66 skb = __hci_cmd_sync(hdev, HCI_OP_READ_BD_ADDR, 0, NULL, in btintel_check_bdaddr()
70 bt_dev_err(hdev, "Reading Intel device address failed (%d)", in btintel_check_bdaddr()
76 bt_dev_err(hdev, "Intel device address length mismatch"); in btintel_check_bdaddr()
89 bt_dev_err(hdev, "Found Intel default device address (%pMR)", in btintel_check_bdaddr()
91 hci_set_quirk(hdev, HCI_QUIRK_INVALID_BDADDR); in btintel_check_bdaddr()
100 int btintel_enter_mfg(struct hci_dev *hdev) in btintel_enter_mfg() argument
105 skb = __hci_cmd_sync(hdev, 0xfc11, 2, param, HCI_CMD_TIMEOUT); in btintel_enter_mfg()
107 bt_dev_err(hdev, "Entering manufacturer mode failed (%ld)", in btintel_enter_mfg()
117 int btintel_exit_mfg(struct hci_dev *hdev, bool reset, bool patched) in btintel_exit_mfg() argument
130 skb = __hci_cmd_sync(hdev, 0xfc11, 2, param, HCI_CMD_TIMEOUT); in btintel_exit_mfg()
132 bt_dev_err(hdev, "Exiting manufacturer mode failed (%ld)", in btintel_exit_mfg()
142 int btintel_set_bdaddr(struct hci_dev *hdev, const bdaddr_t *bdaddr) in btintel_set_bdaddr() argument
147 skb = __hci_cmd_sync(hdev, 0xfc31, 6, bdaddr, HCI_INIT_TIMEOUT); in btintel_set_bdaddr()
150 bt_dev_err(hdev, "Changing Intel device address failed (%d)", in btintel_set_bdaddr()
160 static int btintel_set_event_mask(struct hci_dev *hdev, bool debug) in btintel_set_event_mask() argument
169 skb = __hci_cmd_sync(hdev, 0xfc52, 8, mask, HCI_INIT_TIMEOUT); in btintel_set_event_mask()
172 bt_dev_err(hdev, "Setting Intel event mask failed (%d)", err); in btintel_set_event_mask()
180 int btintel_set_diag(struct hci_dev *hdev, bool enable) in btintel_set_diag() argument
196 skb = __hci_cmd_sync(hdev, 0xfc43, 3, param, HCI_INIT_TIMEOUT); in btintel_set_diag()
201 bt_dev_err(hdev, "Changing Intel diagnostic mode failed (%d)", in btintel_set_diag()
208 btintel_set_event_mask(hdev, enable); in btintel_set_diag()
213 static int btintel_set_diag_mfg(struct hci_dev *hdev, bool enable) in btintel_set_diag_mfg() argument
217 err = btintel_enter_mfg(hdev); in btintel_set_diag_mfg()
221 ret = btintel_set_diag(hdev, enable); in btintel_set_diag_mfg()
223 err = btintel_exit_mfg(hdev, false, false); in btintel_set_diag_mfg()
230 static int btintel_set_diag_combined(struct hci_dev *hdev, bool enable) in btintel_set_diag_combined() argument
239 if (btintel_test_flag(hdev, INTEL_ROM_LEGACY)) in btintel_set_diag_combined()
240 ret = btintel_set_diag_mfg(hdev, enable); in btintel_set_diag_combined()
242 ret = btintel_set_diag(hdev, enable); in btintel_set_diag_combined()
247 void btintel_hw_error(struct hci_dev *hdev, u8 code) in btintel_hw_error() argument
252 bt_dev_err(hdev, "Hardware error 0x%2.2x", code); in btintel_hw_error()
254 hci_req_sync_lock(hdev); in btintel_hw_error()
256 skb = __hci_cmd_sync(hdev, HCI_OP_RESET, 0, NULL, HCI_INIT_TIMEOUT); in btintel_hw_error()
258 bt_dev_err(hdev, "Reset after hardware error failed (%ld)", in btintel_hw_error()
264 skb = __hci_cmd_sync(hdev, 0xfc22, 1, &type, HCI_INIT_TIMEOUT); in btintel_hw_error()
266 bt_dev_err(hdev, "Retrieving Intel exception info failed (%ld)", in btintel_hw_error()
272 bt_dev_err(hdev, "Exception info size mismatch"); in btintel_hw_error()
277 bt_dev_err(hdev, "Exception info %s", (char *)(skb->data + 1)); in btintel_hw_error()
282 hci_req_sync_unlock(hdev); in btintel_hw_error()
286 int btintel_version_info(struct hci_dev *hdev, struct intel_version *ver) in btintel_version_info() argument
294 bt_dev_err(hdev, "Unsupported Intel hardware platform (%u)", in btintel_version_info()
316 bt_dev_err(hdev, "Unsupported Intel hardware variant (%u)", in btintel_version_info()
335 bt_dev_err(hdev, "Unsupported firmware variant(%02x)", ver->fw_variant); in btintel_version_info()
342 bt_dev_info(hdev, "%s revision %u.%u build %u week %u %u", in btintel_version_info()
351 static int btintel_secure_send(struct hci_dev *hdev, u8 fragment_type, u32 plen, in btintel_secure_send() argument
361 skb = __hci_cmd_sync(hdev, 0xfc09, fragment_len + 1, in btintel_secure_send()
375 int btintel_load_ddc_config(struct hci_dev *hdev, const char *ddc_name) in btintel_load_ddc_config() argument
382 err = request_firmware_direct(&fw, ddc_name, &hdev->dev); in btintel_load_ddc_config()
384 bt_dev_err(hdev, "Failed to load Intel DDC file %s (%d)", in btintel_load_ddc_config()
389 bt_dev_info(hdev, "Found Intel DDC parameters: %s", ddc_name); in btintel_load_ddc_config()
399 skb = __hci_cmd_sync(hdev, 0xfc8b, cmd_plen, fw_ptr, in btintel_load_ddc_config()
402 bt_dev_err(hdev, "Failed to send Intel_Write_DDC (%ld)", in btintel_load_ddc_config()
414 bt_dev_info(hdev, "Applying Intel DDC parameters completed"); in btintel_load_ddc_config()
420 int btintel_set_event_mask_mfg(struct hci_dev *hdev, bool debug) in btintel_set_event_mask_mfg() argument
424 err = btintel_enter_mfg(hdev); in btintel_set_event_mask_mfg()
428 ret = btintel_set_event_mask(hdev, debug); in btintel_set_event_mask_mfg()
430 err = btintel_exit_mfg(hdev, false, false); in btintel_set_event_mask_mfg()
438 int btintel_read_version(struct hci_dev *hdev, struct intel_version *ver) in btintel_read_version() argument
442 skb = __hci_cmd_sync(hdev, 0xfc05, 0, NULL, HCI_CMD_TIMEOUT); in btintel_read_version()
444 bt_dev_err(hdev, "Reading Intel version information failed (%ld)", in btintel_read_version()
450 bt_dev_err(hdev, "Intel version event size mismatch"); in btintel_read_version()
463 int btintel_version_info_tlv(struct hci_dev *hdev, in btintel_version_info_tlv() argument
472 bt_dev_err(hdev, "Unsupported Intel hardware platform (0x%2x)", in btintel_version_info_tlv()
495 bt_dev_err(hdev, "Unsupported Intel hardware variant (0x%x)", in btintel_version_info_tlv()
508 bt_dev_err(hdev, "Unsupported Intel firmware loading method (0x%x)", in btintel_version_info_tlv()
515 bt_dev_err(hdev, "Unsupported Intel secure boot engine type (0x%x)", in btintel_version_info_tlv()
520 bt_dev_info(hdev, "Device revision is %u", version->dev_rev_id); in btintel_version_info_tlv()
521 bt_dev_info(hdev, "Secure boot is %s", in btintel_version_info_tlv()
523 bt_dev_info(hdev, "OTP lock is %s", in btintel_version_info_tlv()
525 bt_dev_info(hdev, "API lock is %s", in btintel_version_info_tlv()
527 bt_dev_info(hdev, "Debug lock is %s", in btintel_version_info_tlv()
529 bt_dev_info(hdev, "Minimum firmware build %u week %u %u", in btintel_version_info_tlv()
540 bt_dev_err(hdev, "Unsupported image type(%02x)", version->img_type); in btintel_version_info_tlv()
547 bt_dev_info(hdev, "%s timestamp %u.%u buildtype %u build %u", variant, in btintel_version_info_tlv()
551 bt_dev_info(hdev, "Firmware SHA1: 0x%8.8x", version->git_sha1); in btintel_version_info_tlv()
557 int btintel_parse_version_tlv(struct hci_dev *hdev, in btintel_parse_version_tlv() argument
667 static int btintel_read_version_tlv(struct hci_dev *hdev, in btintel_read_version_tlv() argument
676 skb = __hci_cmd_sync(hdev, 0xfc05, 1, param, HCI_CMD_TIMEOUT); in btintel_read_version_tlv()
678 bt_dev_err(hdev, "Reading Intel version information failed (%ld)", in btintel_read_version_tlv()
684 bt_dev_err(hdev, "Intel Read Version command failed (%02x)", in btintel_read_version_tlv()
690 btintel_parse_version_tlv(hdev, version, skb); in btintel_read_version_tlv()
703 struct hci_dev *hdev; member
751 bt_dev_dbg(ctx->hdev, "Register (0x%x) read", le32_to_cpu(cp.addr)); in regmap_ibt_read()
753 skb = hci_cmd_sync(ctx->hdev, ctx->op_read, sizeof(cp), &cp, in regmap_ibt_read()
757 bt_dev_err(ctx->hdev, "regmap: Register (0x%x) read error (%d)", in regmap_ibt_read()
763 bt_dev_err(ctx->hdev, "regmap: Register (0x%x) read error, bad len", in regmap_ibt_read()
772 bt_dev_err(ctx->hdev, "regmap: Register (0x%x) read error, bad addr", in regmap_ibt_read()
823 bt_dev_dbg(ctx->hdev, "Register (0x%x) write", le32_to_cpu(cp->addr)); in regmap_ibt_gather_write()
825 skb = hci_cmd_sync(ctx->hdev, ctx->op_write, plen, cp, HCI_CMD_TIMEOUT); in regmap_ibt_gather_write()
828 bt_dev_err(ctx->hdev, "regmap: Register (0x%x) write error (%d)", in regmap_ibt_gather_write()
871 struct regmap *btintel_regmap_init(struct hci_dev *hdev, u16 opcode_read, in btintel_regmap_init() argument
876 bt_dev_info(hdev, "regmap: Init R%x-W%x region", opcode_read, in btintel_regmap_init()
885 ctx->hdev = hdev; in btintel_regmap_init()
887 return regmap_init(&hdev->dev, ®map_ibt, ctx, ®map_ibt_cfg); in btintel_regmap_init()
891 int btintel_send_intel_reset(struct hci_dev *hdev, u32 boot_param) in btintel_send_intel_reset() argument
898 skb = __hci_cmd_sync(hdev, BTINTEL_HCI_OP_RESET, sizeof(params), ¶ms, in btintel_send_intel_reset()
901 bt_dev_err(hdev, "Failed to send Intel Reset command"); in btintel_send_intel_reset()
911 int btintel_read_boot_params(struct hci_dev *hdev, in btintel_read_boot_params() argument
916 skb = __hci_cmd_sync(hdev, 0xfc0d, 0, NULL, HCI_INIT_TIMEOUT); in btintel_read_boot_params()
918 bt_dev_err(hdev, "Reading Intel boot parameters failed (%ld)", in btintel_read_boot_params()
924 bt_dev_err(hdev, "Intel boot parameters size mismatch"); in btintel_read_boot_params()
934 bt_dev_err(hdev, "Intel boot parameters command failed (%02x)", in btintel_read_boot_params()
939 bt_dev_info(hdev, "Device revision is %u", in btintel_read_boot_params()
942 bt_dev_info(hdev, "Secure boot is %s", in btintel_read_boot_params()
945 bt_dev_info(hdev, "OTP lock is %s", in btintel_read_boot_params()
948 bt_dev_info(hdev, "API lock is %s", in btintel_read_boot_params()
951 bt_dev_info(hdev, "Debug lock is %s", in btintel_read_boot_params()
954 bt_dev_info(hdev, "Minimum firmware build %u week %u %u", in btintel_read_boot_params()
962 static int btintel_sfi_rsa_header_secure_send(struct hci_dev *hdev, in btintel_sfi_rsa_header_secure_send() argument
970 err = btintel_secure_send(hdev, 0x00, 128, fw->data); in btintel_sfi_rsa_header_secure_send()
972 bt_dev_err(hdev, "Failed to send firmware header (%d)", err); in btintel_sfi_rsa_header_secure_send()
979 err = btintel_secure_send(hdev, 0x03, 256, fw->data + 128); in btintel_sfi_rsa_header_secure_send()
981 bt_dev_err(hdev, "Failed to send firmware pkey (%d)", err); in btintel_sfi_rsa_header_secure_send()
988 err = btintel_secure_send(hdev, 0x02, 256, fw->data + 388); in btintel_sfi_rsa_header_secure_send()
990 bt_dev_err(hdev, "Failed to send firmware signature (%d)", err); in btintel_sfi_rsa_header_secure_send()
998 static int btintel_sfi_ecdsa_header_secure_send(struct hci_dev *hdev, in btintel_sfi_ecdsa_header_secure_send() argument
1006 err = btintel_secure_send(hdev, 0x00, 128, fw->data + 644); in btintel_sfi_ecdsa_header_secure_send()
1008 bt_dev_err(hdev, "Failed to send firmware header (%d)", err); in btintel_sfi_ecdsa_header_secure_send()
1015 err = btintel_secure_send(hdev, 0x03, 96, fw->data + 644 + 128); in btintel_sfi_ecdsa_header_secure_send()
1017 bt_dev_err(hdev, "Failed to send firmware pkey (%d)", err); in btintel_sfi_ecdsa_header_secure_send()
1024 err = btintel_secure_send(hdev, 0x02, 96, fw->data + 644 + 224); in btintel_sfi_ecdsa_header_secure_send()
1026 bt_dev_err(hdev, "Failed to send firmware signature (%d)", in btintel_sfi_ecdsa_header_secure_send()
1033 static int btintel_download_firmware_payload(struct hci_dev *hdev, in btintel_download_firmware_payload() argument
1059 err = btintel_secure_send(hdev, 0x01, frag_len, fw_ptr); in btintel_download_firmware_payload()
1061 bt_dev_err(hdev, in btintel_download_firmware_payload()
1076 static bool btintel_firmware_version(struct hci_dev *hdev, in btintel_firmware_version() argument
1100 bt_dev_info(hdev, "Boot Address: 0x%x", *boot_addr); in btintel_firmware_version()
1102 bt_dev_info(hdev, "Firmware Version: %u-%u.%u", in btintel_firmware_version()
1117 int btintel_download_firmware(struct hci_dev *hdev, in btintel_download_firmware() argument
1135 if (btintel_firmware_version(hdev, ver->fw_build_num, in btintel_download_firmware()
1138 bt_dev_info(hdev, "Firmware already loaded"); in btintel_download_firmware()
1157 err = btintel_sfi_rsa_header_secure_send(hdev, fw); in btintel_download_firmware()
1161 return btintel_download_firmware_payload(hdev, fw, RSA_HEADER_LEN); in btintel_download_firmware()
1165 static int btintel_download_fw_tlv(struct hci_dev *hdev, in btintel_download_fw_tlv() argument
1174 if (btintel_firmware_version(hdev, ver->min_fw_build_nn, in btintel_download_fw_tlv()
1178 bt_dev_info(hdev, "Firmware already loaded"); in btintel_download_fw_tlv()
1210 bt_dev_err(hdev, "Invalid CSS Header version"); in btintel_download_fw_tlv()
1216 bt_dev_err(hdev, "Invalid SBE type for hardware variant (%d)", in btintel_download_fw_tlv()
1221 err = btintel_sfi_rsa_header_secure_send(hdev, fw); in btintel_download_fw_tlv()
1225 err = btintel_download_firmware_payload(hdev, fw, RSA_HEADER_LEN); in btintel_download_fw_tlv()
1236 bt_dev_err(hdev, "Invalid CSS Header version"); in btintel_download_fw_tlv()
1241 err = btintel_sfi_rsa_header_secure_send(hdev, fw); in btintel_download_fw_tlv()
1245 err = btintel_download_firmware_payload(hdev, fw, in btintel_download_fw_tlv()
1250 err = btintel_sfi_ecdsa_header_secure_send(hdev, fw); in btintel_download_fw_tlv()
1254 err = btintel_download_firmware_payload(hdev, fw, in btintel_download_fw_tlv()
1263 static void btintel_reset_to_bootloader(struct hci_dev *hdev) in btintel_reset_to_bootloader() argument
1271 if (hdev->bus == HCI_PCI) in btintel_reset_to_bootloader()
1296 skb = __hci_cmd_sync(hdev, BTINTEL_HCI_OP_RESET, sizeof(params), in btintel_reset_to_bootloader()
1299 bt_dev_err(hdev, "FW download error recovery failed (%ld)", in btintel_reset_to_bootloader()
1303 bt_dev_info(hdev, "Intel reset sent to retry FW download"); in btintel_reset_to_bootloader()
1314 static int btintel_read_debug_features(struct hci_dev *hdev, in btintel_read_debug_features() argument
1323 skb = __hci_cmd_sync(hdev, 0xfca6, sizeof(page_no), &page_no, in btintel_read_debug_features()
1326 bt_dev_err(hdev, "Reading supported features failed (%ld)", in btintel_read_debug_features()
1332 bt_dev_err(hdev, "Supported features event size mismatch"); in btintel_read_debug_features()
1345 static int btintel_set_debug_features(struct hci_dev *hdev, in btintel_set_debug_features() argument
1355 bt_dev_warn(hdev, "Debug features not read"); in btintel_set_debug_features()
1360 bt_dev_info(hdev, "Telemetry exception format not supported"); in btintel_set_debug_features()
1364 skb = __hci_cmd_sync(hdev, 0xfc8b, 11, mask, HCI_INIT_TIMEOUT); in btintel_set_debug_features()
1366 bt_dev_err(hdev, "Setting Intel telemetry ddc write event mask failed (%ld)", in btintel_set_debug_features()
1372 skb = __hci_cmd_sync(hdev, 0xfc8b, 5, period, HCI_INIT_TIMEOUT); in btintel_set_debug_features()
1374 bt_dev_err(hdev, "Setting periodicity for link statistics traces failed (%ld)", in btintel_set_debug_features()
1380 skb = __hci_cmd_sync(hdev, 0xfca1, 1, &trace_enable, HCI_INIT_TIMEOUT); in btintel_set_debug_features()
1382 bt_dev_err(hdev, "Enable tracing of link statistics events failed (%ld)", in btintel_set_debug_features()
1388 bt_dev_info(hdev, "set debug features: trace_enable 0x%02x mask 0x%02x", in btintel_set_debug_features()
1394 static int btintel_reset_debug_features(struct hci_dev *hdev, in btintel_reset_debug_features() argument
1403 bt_dev_warn(hdev, "Debug features not read"); in btintel_reset_debug_features()
1408 bt_dev_info(hdev, "Telemetry exception format not supported"); in btintel_reset_debug_features()
1413 skb = __hci_cmd_sync(hdev, 0xfca1, 1, &trace_enable, HCI_INIT_TIMEOUT); in btintel_reset_debug_features()
1415 bt_dev_err(hdev, "Stop tracing of link statistics events failed (%ld)", in btintel_reset_debug_features()
1421 skb = __hci_cmd_sync(hdev, 0xfc8b, 11, mask, HCI_INIT_TIMEOUT); in btintel_reset_debug_features()
1423 bt_dev_err(hdev, "Setting Intel telemetry ddc write event mask failed (%ld)", in btintel_reset_debug_features()
1429 bt_dev_info(hdev, "reset debug features: trace_enable 0x%02x mask 0x%02x", in btintel_reset_debug_features()
1435 int btintel_set_quality_report(struct hci_dev *hdev, bool enable) in btintel_set_quality_report() argument
1440 bt_dev_dbg(hdev, "enable %d", enable); in btintel_set_quality_report()
1445 err = btintel_read_debug_features(hdev, &features); in btintel_set_quality_report()
1451 err = btintel_set_debug_features(hdev, &features); in btintel_set_quality_report()
1453 err = btintel_reset_debug_features(hdev, &features); in btintel_set_quality_report()
1459 static void btintel_coredump(struct hci_dev *hdev) in btintel_coredump() argument
1463 skb = __hci_cmd_sync(hdev, 0xfc4e, 0, NULL, HCI_CMD_TIMEOUT); in btintel_coredump()
1465 bt_dev_err(hdev, "Coredump failed (%ld)", PTR_ERR(skb)); in btintel_coredump()
1472 static void btintel_dmp_hdr(struct hci_dev *hdev, struct sk_buff *skb) in btintel_dmp_hdr() argument
1491 static int btintel_register_devcoredump_support(struct hci_dev *hdev) in btintel_register_devcoredump_support() argument
1496 err = btintel_read_debug_features(hdev, &features); in btintel_register_devcoredump_support()
1498 bt_dev_info(hdev, "Error reading debug features"); in btintel_register_devcoredump_support()
1503 bt_dev_dbg(hdev, "Telemetry exception format not supported"); in btintel_register_devcoredump_support()
1507 hci_devcd_register(hdev, btintel_coredump, btintel_dmp_hdr, NULL); in btintel_register_devcoredump_support()
1512 static const struct firmware *btintel_legacy_rom_get_fw(struct hci_dev *hdev, in btintel_legacy_rom_get_fw() argument
1525 ret = request_firmware(&fw, fwname, &hdev->dev); in btintel_legacy_rom_get_fw()
1528 bt_dev_err(hdev, "Intel firmware file request failed (%d)", in btintel_legacy_rom_get_fw()
1533 bt_dev_err(hdev, "failed to open Intel firmware file: %s (%d)", in btintel_legacy_rom_get_fw()
1541 if (request_firmware(&fw, fwname, &hdev->dev) < 0) { in btintel_legacy_rom_get_fw()
1542 bt_dev_err(hdev, "failed to open default fw file: %s", in btintel_legacy_rom_get_fw()
1548 bt_dev_info(hdev, "Intel Bluetooth firmware file: %s", fwname); in btintel_legacy_rom_get_fw()
1553 static int btintel_legacy_rom_patching(struct hci_dev *hdev, in btintel_legacy_rom_patching() argument
1572 bt_dev_err(hdev, "Intel fw corrupted: invalid cmd read"); in btintel_legacy_rom_patching()
1586 bt_dev_err(hdev, "Intel fw corrupted: invalid cmd len"); in btintel_legacy_rom_patching()
1619 bt_dev_err(hdev, "Intel fw corrupted: invalid evt len"); in btintel_legacy_rom_patching()
1633 bt_dev_err(hdev, "Intel fw corrupted: invalid evt read"); in btintel_legacy_rom_patching()
1637 skb = __hci_cmd_sync_ev(hdev, le16_to_cpu(cmd->opcode), cmd->plen, in btintel_legacy_rom_patching()
1640 bt_dev_err(hdev, "sending Intel patch command (0x%4.4x) failed (%ld)", in btintel_legacy_rom_patching()
1650 bt_dev_err(hdev, "mismatch event length (opcode 0x%4.4x)", in btintel_legacy_rom_patching()
1657 bt_dev_err(hdev, "mismatch event parameter (opcode 0x%4.4x)", in btintel_legacy_rom_patching()
1667 static int btintel_legacy_rom_setup(struct hci_dev *hdev, in btintel_legacy_rom_setup() argument
1675 BT_DBG("%s", hdev->name); in btintel_legacy_rom_setup()
1682 bt_dev_info(hdev, in btintel_legacy_rom_setup()
1694 fw = btintel_legacy_rom_get_fw(hdev, ver); in btintel_legacy_rom_setup()
1703 err = btintel_enter_mfg(hdev); in btintel_legacy_rom_setup()
1734 ret = btintel_legacy_rom_patching(hdev, fw, &fw_ptr, in btintel_legacy_rom_setup()
1748 err = btintel_exit_mfg(hdev, true, true); in btintel_legacy_rom_setup()
1755 err = btintel_read_version(hdev, &new_ver); in btintel_legacy_rom_setup()
1759 bt_dev_info(hdev, "Intel BT fw patch 0x%02x completed & activated", in btintel_legacy_rom_setup()
1766 err = btintel_exit_mfg(hdev, false, false); in btintel_legacy_rom_setup()
1770 bt_dev_info(hdev, "Intel firmware patch completed"); in btintel_legacy_rom_setup()
1780 err = btintel_exit_mfg(hdev, true, false); in btintel_legacy_rom_setup()
1784 bt_dev_info(hdev, "Intel firmware patch completed and deactivated"); in btintel_legacy_rom_setup()
1790 btintel_set_event_mask_mfg(hdev, false); in btintel_legacy_rom_setup()
1792 btintel_check_bdaddr(hdev); in btintel_legacy_rom_setup()
1797 static int btintel_download_wait(struct hci_dev *hdev, ktime_t calltime, int msec) in btintel_download_wait() argument
1803 btintel_set_flag(hdev, INTEL_FIRMWARE_LOADED); in btintel_download_wait()
1805 bt_dev_info(hdev, "Waiting for firmware download to complete"); in btintel_download_wait()
1807 err = btintel_wait_on_flag_timeout(hdev, INTEL_DOWNLOADING, in btintel_download_wait()
1811 bt_dev_err(hdev, "Firmware loading interrupted"); in btintel_download_wait()
1816 bt_dev_err(hdev, "Firmware loading timeout"); in btintel_download_wait()
1820 if (btintel_test_flag(hdev, INTEL_FIRMWARE_FAILED)) { in btintel_download_wait()
1821 bt_dev_err(hdev, "Firmware loading failed"); in btintel_download_wait()
1829 bt_dev_info(hdev, "Firmware loaded in %llu usecs", duration); in btintel_download_wait()
1834 static int btintel_boot_wait(struct hci_dev *hdev, ktime_t calltime, int msec) in btintel_boot_wait() argument
1840 bt_dev_info(hdev, "Waiting for device to boot"); in btintel_boot_wait()
1842 err = btintel_wait_on_flag_timeout(hdev, INTEL_BOOTING, in btintel_boot_wait()
1846 bt_dev_err(hdev, "Device boot interrupted"); in btintel_boot_wait()
1851 bt_dev_err(hdev, "Device boot timeout"); in btintel_boot_wait()
1859 bt_dev_info(hdev, "Device booted in %llu usecs", duration); in btintel_boot_wait()
1864 static int btintel_boot_wait_d0(struct hci_dev *hdev, ktime_t calltime, in btintel_boot_wait_d0() argument
1871 bt_dev_info(hdev, "Waiting for device transition to d0"); in btintel_boot_wait_d0()
1873 err = btintel_wait_on_flag_timeout(hdev, INTEL_WAIT_FOR_D0, in btintel_boot_wait_d0()
1877 bt_dev_err(hdev, "Device d0 move interrupted"); in btintel_boot_wait_d0()
1882 bt_dev_err(hdev, "Device d0 move timeout"); in btintel_boot_wait_d0()
1890 bt_dev_info(hdev, "Device moved to D0 in %llu usecs", duration); in btintel_boot_wait_d0()
1895 static int btintel_boot(struct hci_dev *hdev, u32 boot_addr) in btintel_boot() argument
1902 btintel_set_flag(hdev, INTEL_BOOTING); in btintel_boot()
1903 btintel_set_flag(hdev, INTEL_WAIT_FOR_D0); in btintel_boot()
1905 err = btintel_send_intel_reset(hdev, boot_addr); in btintel_boot()
1907 bt_dev_err(hdev, "Intel Soft Reset failed (%d)", err); in btintel_boot()
1908 btintel_reset_to_bootloader(hdev); in btintel_boot()
1919 err = btintel_boot_wait(hdev, calltime, 5000); in btintel_boot()
1921 btintel_reset_to_bootloader(hdev); in btintel_boot()
1925 if (hdev->bus == HCI_PCI) { in btintel_boot()
1934 err = btintel_boot_wait_d0(hdev, calltime, 2000); in btintel_boot()
1971 static int btintel_download_fw(struct hci_dev *hdev, in btintel_download_fw() argument
1998 btintel_clear_flag(hdev, INTEL_BOOTLOADER); in btintel_download_fw()
1999 btintel_check_bdaddr(hdev); in btintel_download_fw()
2017 err = btintel_read_boot_params(hdev, params); in btintel_download_fw()
2026 bt_dev_err(hdev, "Unsupported Intel firmware loading method (%u)", in btintel_download_fw()
2035 bt_dev_info(hdev, "No device address configured"); in btintel_download_fw()
2036 hci_set_quirk(hdev, HCI_QUIRK_INVALID_BDADDR); in btintel_download_fw()
2063 if (!btintel_test_flag(hdev, INTEL_BOOTLOADER)) { in btintel_download_fw()
2065 btintel_set_flag(hdev, INTEL_FIRMWARE_LOADED); in btintel_download_fw()
2069 bt_dev_err(hdev, "Unsupported Intel firmware naming"); in btintel_download_fw()
2073 err = firmware_request_nowarn(&fw, fwname, &hdev->dev); in btintel_download_fw()
2075 if (!btintel_test_flag(hdev, INTEL_BOOTLOADER)) { in btintel_download_fw()
2077 btintel_set_flag(hdev, INTEL_FIRMWARE_LOADED); in btintel_download_fw()
2081 bt_dev_err(hdev, "Failed to load Intel firmware file %s (%d)", in btintel_download_fw()
2086 bt_dev_info(hdev, "Found device firmware: %s", fwname); in btintel_download_fw()
2089 bt_dev_err(hdev, "Invalid size of firmware file (%zu)", in btintel_download_fw()
2097 btintel_set_flag(hdev, INTEL_DOWNLOADING); in btintel_download_fw()
2100 err = btintel_download_firmware(hdev, ver, fw, boot_param); in btintel_download_fw()
2104 btintel_set_flag(hdev, INTEL_FIRMWARE_LOADED); in btintel_download_fw()
2112 btintel_reset_to_bootloader(hdev); in btintel_download_fw()
2127 err = btintel_download_wait(hdev, calltime, 5000); in btintel_download_fw()
2129 btintel_reset_to_bootloader(hdev); in btintel_download_fw()
2136 static int btintel_bootloader_setup(struct hci_dev *hdev, in btintel_bootloader_setup() argument
2145 BT_DBG("%s", hdev->name); in btintel_bootloader_setup()
2153 btintel_set_flag(hdev, INTEL_BOOTLOADER); in btintel_bootloader_setup()
2155 err = btintel_download_fw(hdev, ver, ¶ms, &boot_param); in btintel_bootloader_setup()
2163 err = btintel_boot(hdev, boot_param); in btintel_bootloader_setup()
2167 btintel_clear_flag(hdev, INTEL_BOOTLOADER); in btintel_bootloader_setup()
2173 bt_dev_err(hdev, "Unsupported Intel firmware naming"); in btintel_bootloader_setup()
2181 btintel_load_ddc_config(hdev, ddcname); in btintel_bootloader_setup()
2184 hci_dev_clear_flag(hdev, HCI_QUALITY_REPORT); in btintel_bootloader_setup()
2187 err = btintel_read_version(hdev, &new_ver); in btintel_bootloader_setup()
2191 btintel_version_info(hdev, &new_ver); in btintel_bootloader_setup()
2201 btintel_set_event_mask(hdev, false); in btintel_bootloader_setup()
2268 static int btintel_prepare_fw_download_tlv(struct hci_dev *hdev, in btintel_prepare_fw_download_tlv() argument
2294 btintel_clear_flag(hdev, INTEL_BOOTLOADER); in btintel_prepare_fw_download_tlv()
2295 btintel_check_bdaddr(hdev); in btintel_prepare_fw_download_tlv()
2303 bt_dev_info(hdev, "No device address configured"); in btintel_prepare_fw_download_tlv()
2304 hci_set_quirk(hdev, HCI_QUIRK_INVALID_BDADDR); in btintel_prepare_fw_download_tlv()
2322 err = firmware_request_nowarn(&fw, fwname, &hdev->dev); in btintel_prepare_fw_download_tlv()
2324 if (!btintel_test_flag(hdev, INTEL_BOOTLOADER)) { in btintel_prepare_fw_download_tlv()
2326 btintel_set_flag(hdev, INTEL_FIRMWARE_LOADED); in btintel_prepare_fw_download_tlv()
2330 bt_dev_err(hdev, "Failed to load Intel firmware file %s (%d)", in btintel_prepare_fw_download_tlv()
2336 bt_dev_info(hdev, "Found device firmware: %s", fwname); in btintel_prepare_fw_download_tlv()
2339 bt_dev_err(hdev, "Invalid size of firmware file (%zu)", in btintel_prepare_fw_download_tlv()
2347 btintel_set_flag(hdev, INTEL_DOWNLOADING); in btintel_prepare_fw_download_tlv()
2350 err = btintel_download_fw_tlv(hdev, ver, fw, boot_param, in btintel_prepare_fw_download_tlv()
2356 btintel_set_flag(hdev, INTEL_FIRMWARE_LOADED); in btintel_prepare_fw_download_tlv()
2364 btintel_reset_to_bootloader(hdev); in btintel_prepare_fw_download_tlv()
2379 err = btintel_download_wait(hdev, calltime, 5000); in btintel_prepare_fw_download_tlv()
2381 btintel_reset_to_bootloader(hdev); in btintel_prepare_fw_download_tlv()
2388 static int btintel_get_codec_config_data(struct hci_dev *hdev, in btintel_get_codec_config_data() argument
2401 bt_dev_err(hdev, "Invalid link type(%u)", link); in btintel_get_codec_config_data()
2421 bt_dev_err(hdev, "Invalid codec id(%u)", codec->id); in btintel_get_codec_config_data()
2437 static int btintel_get_data_path_id(struct hci_dev *hdev, __u8 *data_path_id) in btintel_get_data_path_id() argument
2444 static int btintel_configure_offload(struct hci_dev *hdev) in btintel_configure_offload() argument
2450 skb = __hci_cmd_sync(hdev, 0xfc86, 0, NULL, HCI_INIT_TIMEOUT); in btintel_configure_offload()
2452 bt_dev_err(hdev, "Reading offload use cases failed (%ld)", in btintel_configure_offload()
2470 hdev->get_data_path_id = btintel_get_data_path_id; in btintel_configure_offload()
2471 hdev->get_codec_config_data = btintel_get_codec_config_data; in btintel_configure_offload()
2478 static void btintel_set_ppag(struct hci_dev *hdev, struct intel_version_tlv *ver) in btintel_set_ppag() argument
2493 bt_dev_dbg(hdev, "PPAG not supported for Intel CNVr (0x%3x)", in btintel_set_ppag()
2498 handle = ACPI_HANDLE(GET_HCIDEV_DEV(hdev)); in btintel_set_ppag()
2500 bt_dev_info(hdev, "No support for BT device in ACPI firmware"); in btintel_set_ppag()
2507 bt_dev_dbg(hdev, "PPAG-BT: ACPI entry not found"); in btintel_set_ppag()
2510 bt_dev_warn(hdev, "PPAG-BT: ACPI Failure: %s", acpi_format_exception(status)); in btintel_set_ppag()
2516 bt_dev_warn(hdev, "PPAG-BT: Invalid object type: %d or package count: %d", in btintel_set_ppag()
2532 bt_dev_dbg(hdev, "PPAG-BT: Bluetooth domain is disabled in ACPI firmware"); in btintel_set_ppag()
2545 bt_dev_dbg(hdev, "PPAG-BT: EU, China mode are disabled in BIOS"); in btintel_set_ppag()
2551 skb = __hci_cmd_sync(hdev, INTEL_OP_PPAG_CMD, sizeof(ppag_cmd), in btintel_set_ppag()
2554 bt_dev_warn(hdev, "Failed to send PPAG Enable (%ld)", PTR_ERR(skb)); in btintel_set_ppag()
2557 bt_dev_info(hdev, "PPAG-BT: Enabled (Mode %d)", mode); in btintel_set_ppag()
2561 static int btintel_acpi_reset_method(struct hci_dev *hdev) in btintel_acpi_reset_method() argument
2568 status = acpi_evaluate_object(ACPI_HANDLE(GET_HCIDEV_DEV(hdev)), "_PRR", NULL, &buffer); in btintel_acpi_reset_method()
2570 bt_dev_err(hdev, "Failed to run _PRR method"); in btintel_acpi_reset_method()
2577 bt_dev_err(hdev, "Invalid arguments"); in btintel_acpi_reset_method()
2584 bt_dev_err(hdev, "Invalid object type: 0x%x", ref->type); in btintel_acpi_reset_method()
2591 bt_dev_err(hdev, "Failed to run_RST method"); in btintel_acpi_reset_method()
2601 static void btintel_set_dsm_reset_method(struct hci_dev *hdev, in btintel_set_dsm_reset_method() argument
2604 struct btintel_data *data = hci_get_priv(hdev); in btintel_set_dsm_reset_method()
2605 acpi_handle handle = ACPI_HANDLE(GET_HCIDEV_DEV(hdev)); in btintel_set_dsm_reset_method()
2613 handle = ACPI_HANDLE(GET_HCIDEV_DEV(hdev)); in btintel_set_dsm_reset_method()
2616 bt_dev_dbg(hdev, "No support for bluetooth device in ACPI firmware"); in btintel_set_dsm_reset_method()
2621 bt_dev_err(hdev, "No support for _PRR ACPI method"); in btintel_set_dsm_reset_method()
2635 bt_dev_err(hdev, "No dsm support to set reset delay"); in btintel_set_dsm_reset_method()
2644 bt_dev_err(hdev, "Failed to call dsm to set reset delay"); in btintel_set_dsm_reset_method()
2650 bt_dev_info(hdev, "DSM reset method type: 0x%02x", reset_payload[2]); in btintel_set_dsm_reset_method()
2654 bt_dev_warn(hdev, "No support for dsm to set reset method"); in btintel_set_dsm_reset_method()
2664 bt_dev_err(hdev, "Failed to call dsm to set reset method"); in btintel_set_dsm_reset_method()
2673 static u8 btintel_classify_pkt_type(struct hci_dev *hdev, struct sk_buff *skb) in btintel_classify_pkt_type() argument
2679 if (iso_capable(hdev) && hci_skb_pkt_type(skb) == HCI_ACLDATA_PKT) { in btintel_classify_pkt_type()
2748 static int btintel_set_dsbr(struct hci_dev *hdev, struct intel_version_tlv *ver) in btintel_set_dsbr() argument
2778 hdev->bus == HCI_USB) in btintel_set_dsbr()
2792 bt_dev_dbg(hdev, "Error reading efi: %ls (%d)", in btintel_set_dsbr()
2798 bt_dev_info(hdev, "dsbr: enable: 0x%2.2x value: 0x%2.2x", cmd.enable, in btintel_set_dsbr()
2801 skb = __hci_cmd_sync(hdev, 0xfc0a, sizeof(cmd), &cmd, HCI_CMD_TIMEOUT); in btintel_set_dsbr()
2815 static acpi_status btintel_evaluate_acpi_method(struct hci_dev *hdev, in btintel_evaluate_acpi_method() argument
2825 handle = ACPI_HANDLE(GET_HCIDEV_DEV(hdev)); in btintel_evaluate_acpi_method()
2827 bt_dev_dbg(hdev, "ACPI-BT: No ACPI support for Bluetooth device"); in btintel_evaluate_acpi_method()
2834 bt_dev_dbg(hdev, "ACPI-BT: ACPI Failure: %s method: %s", in btintel_evaluate_acpi_method()
2842 bt_dev_warn(hdev, "ACPI-BT: Invalid object type: %d or package count: %d", in btintel_evaluate_acpi_method()
2867 static int btintel_send_sar_ddc(struct hci_dev *hdev, struct btintel_cp_ddc_write *data, u8 len) in btintel_send_sar_ddc() argument
2871 skb = __hci_cmd_sync(hdev, 0xfc8b, len, data, HCI_CMD_TIMEOUT); in btintel_send_sar_ddc()
2873 bt_dev_warn(hdev, "Failed to send sar ddc id:0x%4.4x (%ld)", in btintel_send_sar_ddc()
2881 static int btintel_send_edr(struct hci_dev *hdev, struct btintel_cp_ddc_write *cmd, in btintel_send_edr() argument
2889 return btintel_send_sar_ddc(hdev, cmd, 6); in btintel_send_edr()
2892 static int btintel_send_le(struct hci_dev *hdev, struct btintel_cp_ddc_write *cmd, in btintel_send_le() argument
2898 return btintel_send_sar_ddc(hdev, cmd, 4); in btintel_send_le()
2901 static int btintel_send_br(struct hci_dev *hdev, struct btintel_cp_ddc_write *cmd, in btintel_send_br() argument
2907 return btintel_send_sar_ddc(hdev, cmd, 4); in btintel_send_br()
2910 static int btintel_send_br_mutual(struct hci_dev *hdev, struct btintel_cp_ddc_write *cmd, in btintel_send_br_mutual() argument
2916 return btintel_send_sar_ddc(hdev, cmd, 4); in btintel_send_br_mutual()
2919 static int btintel_send_edr2(struct hci_dev *hdev, struct btintel_cp_ddc_write *cmd, in btintel_send_edr2() argument
2925 return btintel_send_sar_ddc(hdev, cmd, 4); in btintel_send_edr2()
2928 static int btintel_send_edr3(struct hci_dev *hdev, struct btintel_cp_ddc_write *cmd, in btintel_send_edr3() argument
2934 return btintel_send_sar_ddc(hdev, cmd, 4); in btintel_send_edr3()
2937 static int btintel_set_legacy_sar(struct hci_dev *hdev, struct btintel_sar_inc_pwr *sar) in btintel_set_legacy_sar() argument
2944 ret = btintel_send_br(hdev, cmd, 0x0131, sar); in btintel_set_legacy_sar()
2948 ret = btintel_send_br(hdev, cmd, 0x0132, sar); in btintel_set_legacy_sar()
2952 ret = btintel_send_le(hdev, cmd, 0x0133, sar); in btintel_set_legacy_sar()
2956 ret = btintel_send_edr(hdev, cmd, 0x0137, sar); in btintel_set_legacy_sar()
2960 ret = btintel_send_edr(hdev, cmd, 0x0138, sar); in btintel_set_legacy_sar()
2964 ret = btintel_send_edr(hdev, cmd, 0x013b, sar); in btintel_set_legacy_sar()
2968 ret = btintel_send_edr(hdev, cmd, 0x013c, sar); in btintel_set_legacy_sar()
2973 static int btintel_set_mutual_sar(struct hci_dev *hdev, struct btintel_sar_inc_pwr *sar) in btintel_set_mutual_sar() argument
2992 ret = btintel_send_sar_ddc(hdev, cmd, 4); in btintel_set_mutual_sar()
3002 ret = btintel_send_sar_ddc(hdev, cmd, 4); in btintel_set_mutual_sar()
3007 ret = btintel_send_br_mutual(hdev, cmd, 0x01a0, sar); in btintel_set_mutual_sar()
3011 ret = btintel_send_edr2(hdev, cmd, 0x01a1, sar); in btintel_set_mutual_sar()
3015 ret = btintel_send_edr3(hdev, cmd, 0x01a2, sar); in btintel_set_mutual_sar()
3019 ret = btintel_send_le(hdev, cmd, 0x01a3, sar); in btintel_set_mutual_sar()
3024 skb = __hci_cmd_sync(hdev, 0xfe25, 1, &enable, HCI_CMD_TIMEOUT); in btintel_set_mutual_sar()
3026 bt_dev_warn(hdev, "Failed to send Intel SAR Enable (%ld)", PTR_ERR(skb)); in btintel_set_mutual_sar()
3034 static int btintel_sar_send_to_device(struct hci_dev *hdev, struct btintel_sar_inc_pwr *sar, in btintel_sar_send_to_device() argument
3044 bt_dev_info(hdev, "Applying legacy Bluetooth SAR"); in btintel_sar_send_to_device()
3045 ret = btintel_set_legacy_sar(hdev, sar); in btintel_sar_send_to_device()
3047 bt_dev_info(hdev, "Applying mutual Bluetooth SAR"); in btintel_sar_send_to_device()
3048 ret = btintel_set_mutual_sar(hdev, sar); in btintel_sar_send_to_device()
3056 static int btintel_acpi_set_sar(struct hci_dev *hdev, struct intel_version_tlv *ver) in btintel_acpi_set_sar() argument
3064 status = btintel_evaluate_acpi_method(hdev, "BRDS", &buffer, 2); in btintel_acpi_set_sar()
3083 bt_dev_dbg(hdev, "BT_SAR: revision: 0x%2.2x not supported", revision); in btintel_acpi_set_sar()
3118 bt_dev_dbg(hdev, "Bluetooth SAR is not enabled"); in btintel_acpi_set_sar()
3123 ret = btintel_sar_send_to_device(hdev, &sar, ver); in btintel_acpi_set_sar()
3130 static int btintel_set_specific_absorption_rate(struct hci_dev *hdev, in btintel_set_specific_absorption_rate() argument
3134 return btintel_acpi_set_sar(hdev, ver); in btintel_set_specific_absorption_rate()
3139 int btintel_bootloader_setup_tlv(struct hci_dev *hdev, in btintel_bootloader_setup_tlv() argument
3147 bt_dev_dbg(hdev, ""); in btintel_bootloader_setup_tlv()
3160 btintel_clear_flag(hdev, i); in btintel_bootloader_setup_tlv()
3162 btintel_set_flag(hdev, INTEL_BOOTLOADER); in btintel_bootloader_setup_tlv()
3164 err = btintel_prepare_fw_download_tlv(hdev, ver, &boot_param); in btintel_bootloader_setup_tlv()
3172 err = btintel_boot(hdev, boot_param); in btintel_bootloader_setup_tlv()
3176 err = btintel_read_version_tlv(hdev, ver); in btintel_bootloader_setup_tlv()
3181 err = btintel_set_dsbr(hdev, ver); in btintel_bootloader_setup_tlv()
3183 bt_dev_err(hdev, "Failed to send dsbr command (%d)", err); in btintel_bootloader_setup_tlv()
3191 err = btintel_prepare_fw_download_tlv(hdev, ver, &boot_param); in btintel_bootloader_setup_tlv()
3195 err = btintel_boot(hdev, boot_param); in btintel_bootloader_setup_tlv()
3200 btintel_clear_flag(hdev, INTEL_BOOTLOADER); in btintel_bootloader_setup_tlv()
3209 btintel_load_ddc_config(hdev, ddcname); in btintel_bootloader_setup_tlv()
3212 btintel_configure_offload(hdev); in btintel_bootloader_setup_tlv()
3214 hci_dev_clear_flag(hdev, HCI_QUALITY_REPORT); in btintel_bootloader_setup_tlv()
3217 btintel_set_specific_absorption_rate(hdev, ver); in btintel_bootloader_setup_tlv()
3220 btintel_set_ppag(hdev, ver); in btintel_bootloader_setup_tlv()
3223 err = btintel_read_version_tlv(hdev, &new_ver); in btintel_bootloader_setup_tlv()
3227 btintel_version_info_tlv(hdev, &new_ver); in btintel_bootloader_setup_tlv()
3237 btintel_set_event_mask(hdev, false); in btintel_bootloader_setup_tlv()
3243 void btintel_set_msft_opcode(struct hci_dev *hdev, u8 hw_variant) in btintel_set_msft_opcode() argument
3263 hci_set_msft_opcode(hdev, 0xFC1E); in btintel_set_msft_opcode()
3272 void btintel_print_fseq_info(struct hci_dev *hdev) in btintel_print_fseq_info() argument
3279 skb = __hci_cmd_sync(hdev, 0xfcb3, 0, NULL, HCI_CMD_TIMEOUT); in btintel_print_fseq_info()
3281 bt_dev_dbg(hdev, "Reading fseq status command failed (%ld)", in btintel_print_fseq_info()
3287 bt_dev_dbg(hdev, "Malformed packet of length %u received", in btintel_print_fseq_info()
3295 bt_dev_dbg(hdev, "Failed to get fseq status (0x%2.2x)", *p); in btintel_print_fseq_info()
3317 bt_dev_err(hdev, "Fseq status: %s (0x%2.2x)", str, *p); in btintel_print_fseq_info()
3322 bt_dev_info(hdev, "Fseq status: %s (0x%2.2x)", str, *p); in btintel_print_fseq_info()
3325 bt_dev_dbg(hdev, "Reason: 0x%8.8x", val); in btintel_print_fseq_info()
3328 bt_dev_dbg(hdev, "Global version: 0x%8.8x", val); in btintel_print_fseq_info()
3331 bt_dev_dbg(hdev, "Installed version: 0x%8.8x", val); in btintel_print_fseq_info()
3335 bt_dev_info(hdev, "Fseq executed: %2.2u.%2.2u.%2.2u.%2.2u", p[0], p[1], in btintel_print_fseq_info()
3340 bt_dev_info(hdev, "Fseq BT Top: %2.2u.%2.2u.%2.2u.%2.2u", p[0], p[1], in btintel_print_fseq_info()
3344 bt_dev_dbg(hdev, "Fseq Top init version: 0x%8.8x", val); in btintel_print_fseq_info()
3347 bt_dev_dbg(hdev, "Fseq Cnvio init version: 0x%8.8x", val); in btintel_print_fseq_info()
3350 bt_dev_dbg(hdev, "Fseq MBX Wifi file version: 0x%8.8x", val); in btintel_print_fseq_info()
3353 bt_dev_dbg(hdev, "Fseq BT version: 0x%8.8x", val); in btintel_print_fseq_info()
3356 bt_dev_dbg(hdev, "Fseq Top reset address: 0x%8.8x", val); in btintel_print_fseq_info()
3359 bt_dev_dbg(hdev, "Fseq MBX timeout: 0x%8.8x", val); in btintel_print_fseq_info()
3362 bt_dev_dbg(hdev, "Fseq MBX ack: 0x%8.8x", val); in btintel_print_fseq_info()
3365 bt_dev_dbg(hdev, "Fseq CNVi id: 0x%8.8x", val); in btintel_print_fseq_info()
3368 bt_dev_dbg(hdev, "Fseq CNVr id: 0x%8.8x", val); in btintel_print_fseq_info()
3371 bt_dev_dbg(hdev, "Fseq Error handle: 0x%8.8x", val); in btintel_print_fseq_info()
3374 bt_dev_dbg(hdev, "Fseq Magic noalive indication: 0x%8.8x", val); in btintel_print_fseq_info()
3377 bt_dev_dbg(hdev, "Fseq OTP version: 0x%8.8x", val); in btintel_print_fseq_info()
3380 bt_dev_dbg(hdev, "Fseq MBX otp version: 0x%8.8x", val); in btintel_print_fseq_info()
3386 static int btintel_setup_combined(struct hci_dev *hdev) in btintel_setup_combined() argument
3394 BT_DBG("%s", hdev->name); in btintel_setup_combined()
3410 if (btintel_test_flag(hdev, INTEL_BROKEN_INITIAL_NCMD) || in btintel_setup_combined()
3411 btintel_test_flag(hdev, INTEL_BROKEN_SHUTDOWN_LED)) { in btintel_setup_combined()
3412 skb = __hci_cmd_sync(hdev, HCI_OP_RESET, 0, NULL, in btintel_setup_combined()
3415 bt_dev_err(hdev, in btintel_setup_combined()
3429 skb = __hci_cmd_sync(hdev, 0xfc05, 1, param, HCI_CMD_TIMEOUT); in btintel_setup_combined()
3431 bt_dev_err(hdev, "Reading Intel version command failed (%ld)", in btintel_setup_combined()
3438 bt_dev_err(hdev, "Intel Read Version command failed (%02x)", in btintel_setup_combined()
3445 hci_set_quirk(hdev, HCI_QUIRK_STRICT_DUPLICATE_FILTER); in btintel_setup_combined()
3446 hci_set_quirk(hdev, HCI_QUIRK_SIMULTANEOUS_DISCOVERY); in btintel_setup_combined()
3447 hci_set_quirk(hdev, HCI_QUIRK_NON_PERSISTENT_DIAG); in btintel_setup_combined()
3450 hdev->set_quality_report = btintel_set_quality_report; in btintel_setup_combined()
3454 bt_dev_dbg(hdev, "Read the legacy Intel version information"); in btintel_setup_combined()
3459 btintel_version_info(hdev, &ver); in btintel_setup_combined()
3472 btintel_set_flag(hdev, INTEL_ROM_LEGACY); in btintel_setup_combined()
3483 if (!btintel_test_flag(hdev, in btintel_setup_combined()
3485 hci_set_quirk(hdev, in btintel_setup_combined()
3488 err = btintel_legacy_rom_setup(hdev, &ver); in btintel_setup_combined()
3501 hci_set_quirk(hdev, in btintel_setup_combined()
3505 hci_set_quirk(hdev, HCI_QUIRK_BROKEN_LE_CODED); in btintel_setup_combined()
3508 btintel_set_msft_opcode(hdev, ver.hw_variant); in btintel_setup_combined()
3510 err = btintel_bootloader_setup(hdev, &ver); in btintel_setup_combined()
3511 btintel_register_devcoredump_support(hdev); in btintel_setup_combined()
3514 bt_dev_err(hdev, "Unsupported Intel hw variant (%u)", in btintel_setup_combined()
3519 hci_set_hw_info(hdev, in btintel_setup_combined()
3532 err = btintel_parse_version_tlv(hdev, &ver_tlv, skb); in btintel_setup_combined()
3534 bt_dev_err(hdev, "Failed to parse TLV version information"); in btintel_setup_combined()
3539 bt_dev_err(hdev, "Unsupported Intel hardware platform (0x%2x)", in btintel_setup_combined()
3573 err = btintel_read_version(hdev, &ver); in btintel_setup_combined()
3581 hci_set_quirk(hdev, HCI_QUIRK_WIDEBAND_SPEECH_SUPPORTED); in btintel_setup_combined()
3584 hci_set_quirk(hdev, HCI_QUIRK_BROKEN_LE_CODED); in btintel_setup_combined()
3587 btintel_set_msft_opcode(hdev, ver.hw_variant); in btintel_setup_combined()
3589 err = btintel_bootloader_setup(hdev, &ver); in btintel_setup_combined()
3590 btintel_register_devcoredump_support(hdev); in btintel_setup_combined()
3595 hdev->classify_pkt_type = btintel_classify_pkt_type; in btintel_setup_combined()
3605 btintel_version_info_tlv(hdev, &ver_tlv); in btintel_setup_combined()
3611 hci_set_quirk(hdev, HCI_QUIRK_WIDEBAND_SPEECH_SUPPORTED); in btintel_setup_combined()
3614 btintel_set_msft_opcode(hdev, in btintel_setup_combined()
3616 btintel_set_dsm_reset_method(hdev, &ver_tlv); in btintel_setup_combined()
3618 err = btintel_bootloader_setup_tlv(hdev, &ver_tlv); in btintel_setup_combined()
3622 btintel_register_devcoredump_support(hdev); in btintel_setup_combined()
3623 btintel_print_fseq_info(hdev); in btintel_setup_combined()
3626 bt_dev_err(hdev, "Unsupported Intel hw variant (%u)", in btintel_setup_combined()
3632 hci_set_hw_info(hdev, "INTEL platform=%u variant=%u", in btintel_setup_combined()
3642 int btintel_shutdown_combined(struct hci_dev *hdev) in btintel_shutdown_combined() argument
3651 skb = __hci_cmd_sync(hdev, HCI_OP_RESET, 0, NULL, HCI_INIT_TIMEOUT); in btintel_shutdown_combined()
3653 bt_dev_err(hdev, "HCI reset during shutdown failed"); in btintel_shutdown_combined()
3664 if (btintel_test_flag(hdev, INTEL_BROKEN_SHUTDOWN_LED)) { in btintel_shutdown_combined()
3665 skb = __hci_cmd_sync(hdev, 0xfc3f, 0, NULL, HCI_INIT_TIMEOUT); in btintel_shutdown_combined()
3668 bt_dev_err(hdev, "turning off Intel device LED failed"); in btintel_shutdown_combined()
3678 int btintel_configure_setup(struct hci_dev *hdev, const char *driver_name) in btintel_configure_setup() argument
3680 hdev->manufacturer = 2; in btintel_configure_setup()
3681 hdev->setup = btintel_setup_combined; in btintel_configure_setup()
3682 hdev->shutdown = btintel_shutdown_combined; in btintel_configure_setup()
3683 hdev->hw_error = btintel_hw_error; in btintel_configure_setup()
3684 hdev->set_diag = btintel_set_diag_combined; in btintel_configure_setup()
3685 hdev->set_bdaddr = btintel_set_bdaddr; in btintel_configure_setup()
3693 static int btintel_diagnostics(struct hci_dev *hdev, struct sk_buff *skb) in btintel_diagnostics() argument
3707 if (!hci_devcd_init(hdev, skb->len)) { in btintel_diagnostics()
3708 hci_devcd_append(hdev, skb_clone(skb, GFP_ATOMIC)); in btintel_diagnostics()
3709 hci_devcd_complete(hdev); in btintel_diagnostics()
3711 bt_dev_err(hdev, "Failed to generate devcoredump"); in btintel_diagnostics()
3715 bt_dev_err(hdev, "Invalid exception type %02X", tlv->val[0]); in btintel_diagnostics()
3719 return hci_recv_frame(hdev, skb); in btintel_diagnostics()
3722 int btintel_recv_event(struct hci_dev *hdev, struct sk_buff *skb) in btintel_recv_event() argument
3732 if (btintel_test_flag(hdev, INTEL_BOOTLOADER)) { in btintel_recv_event()
3739 btintel_bootup(hdev, ptr, len); in btintel_recv_event()
3748 btintel_secure_send_result(hdev, ptr, len); in btintel_recv_event()
3760 return btintel_diagnostics(hdev, skb); in btintel_recv_event()
3764 return hci_recv_frame(hdev, skb); in btintel_recv_event()
3768 void btintel_bootup(struct hci_dev *hdev, const void *ptr, unsigned int len) in btintel_bootup() argument
3775 if (btintel_test_and_clear_flag(hdev, INTEL_BOOTING)) in btintel_bootup()
3776 btintel_wake_up_flag(hdev, INTEL_BOOTING); in btintel_bootup()
3780 void btintel_secure_send_result(struct hci_dev *hdev, in btintel_secure_send_result() argument
3789 btintel_set_flag(hdev, INTEL_FIRMWARE_FAILED); in btintel_secure_send_result()
3791 if (btintel_test_and_clear_flag(hdev, INTEL_DOWNLOADING) && in btintel_secure_send_result()
3792 btintel_test_flag(hdev, INTEL_FIRMWARE_LOADED)) in btintel_secure_send_result()
3793 btintel_wake_up_flag(hdev, INTEL_DOWNLOADING); in btintel_secure_send_result()