• Home
  • Raw
  • Download

Lines Matching refs:hdev

35 int btintel_check_bdaddr(struct hci_dev *hdev)  in btintel_check_bdaddr()  argument
40 skb = __hci_cmd_sync(hdev, HCI_OP_READ_BD_ADDR, 0, NULL, in btintel_check_bdaddr()
44 bt_dev_err(hdev, "Reading Intel device address failed (%d)", in btintel_check_bdaddr()
50 bt_dev_err(hdev, "Intel device address length mismatch"); in btintel_check_bdaddr()
63 bt_dev_err(hdev, "Found Intel default device address (%pMR)", in btintel_check_bdaddr()
65 set_bit(HCI_QUIRK_INVALID_BDADDR, &hdev->quirks); in btintel_check_bdaddr()
74 int btintel_enter_mfg(struct hci_dev *hdev) in btintel_enter_mfg() argument
79 skb = __hci_cmd_sync(hdev, 0xfc11, 2, param, HCI_CMD_TIMEOUT); in btintel_enter_mfg()
81 bt_dev_err(hdev, "Entering manufacturer mode failed (%ld)", in btintel_enter_mfg()
91 int btintel_exit_mfg(struct hci_dev *hdev, bool reset, bool patched) in btintel_exit_mfg() argument
104 skb = __hci_cmd_sync(hdev, 0xfc11, 2, param, HCI_CMD_TIMEOUT); in btintel_exit_mfg()
106 bt_dev_err(hdev, "Exiting manufacturer mode failed (%ld)", in btintel_exit_mfg()
116 int btintel_set_bdaddr(struct hci_dev *hdev, const bdaddr_t *bdaddr) in btintel_set_bdaddr() argument
121 skb = __hci_cmd_sync(hdev, 0xfc31, 6, bdaddr, HCI_INIT_TIMEOUT); in btintel_set_bdaddr()
124 bt_dev_err(hdev, "Changing Intel device address failed (%d)", in btintel_set_bdaddr()
134 static int btintel_set_event_mask(struct hci_dev *hdev, bool debug) in btintel_set_event_mask() argument
143 skb = __hci_cmd_sync(hdev, 0xfc52, 8, mask, HCI_INIT_TIMEOUT); in btintel_set_event_mask()
146 bt_dev_err(hdev, "Setting Intel event mask failed (%d)", err); in btintel_set_event_mask()
154 int btintel_set_diag(struct hci_dev *hdev, bool enable) in btintel_set_diag() argument
170 skb = __hci_cmd_sync(hdev, 0xfc43, 3, param, HCI_INIT_TIMEOUT); in btintel_set_diag()
175 bt_dev_err(hdev, "Changing Intel diagnostic mode failed (%d)", in btintel_set_diag()
182 btintel_set_event_mask(hdev, enable); in btintel_set_diag()
187 static int btintel_set_diag_mfg(struct hci_dev *hdev, bool enable) in btintel_set_diag_mfg() argument
191 err = btintel_enter_mfg(hdev); in btintel_set_diag_mfg()
195 ret = btintel_set_diag(hdev, enable); in btintel_set_diag_mfg()
197 err = btintel_exit_mfg(hdev, false, false); in btintel_set_diag_mfg()
204 static int btintel_set_diag_combined(struct hci_dev *hdev, bool enable) in btintel_set_diag_combined() argument
213 if (btintel_test_flag(hdev, INTEL_ROM_LEGACY)) in btintel_set_diag_combined()
214 ret = btintel_set_diag_mfg(hdev, enable); in btintel_set_diag_combined()
216 ret = btintel_set_diag(hdev, enable); in btintel_set_diag_combined()
221 static void btintel_hw_error(struct hci_dev *hdev, u8 code) in btintel_hw_error() argument
226 bt_dev_err(hdev, "Hardware error 0x%2.2x", code); in btintel_hw_error()
228 skb = __hci_cmd_sync(hdev, HCI_OP_RESET, 0, NULL, HCI_INIT_TIMEOUT); in btintel_hw_error()
230 bt_dev_err(hdev, "Reset after hardware error failed (%ld)", in btintel_hw_error()
236 skb = __hci_cmd_sync(hdev, 0xfc22, 1, &type, HCI_INIT_TIMEOUT); in btintel_hw_error()
238 bt_dev_err(hdev, "Retrieving Intel exception info failed (%ld)", in btintel_hw_error()
244 bt_dev_err(hdev, "Exception info size mismatch"); in btintel_hw_error()
249 bt_dev_err(hdev, "Exception info %s", (char *)(skb->data + 1)); in btintel_hw_error()
254 int btintel_version_info(struct hci_dev *hdev, struct intel_version *ver) in btintel_version_info() argument
262 bt_dev_err(hdev, "Unsupported Intel hardware platform (%u)", in btintel_version_info()
284 bt_dev_err(hdev, "Unsupported Intel hardware variant (%u)", in btintel_version_info()
303 bt_dev_err(hdev, "Unsupported firmware variant(%02x)", ver->fw_variant); in btintel_version_info()
307 bt_dev_info(hdev, "%s revision %u.%u build %u week %u %u", in btintel_version_info()
316 static int btintel_secure_send(struct hci_dev *hdev, u8 fragment_type, u32 plen, in btintel_secure_send() argument
326 skb = __hci_cmd_sync(hdev, 0xfc09, fragment_len + 1, in btintel_secure_send()
340 int btintel_load_ddc_config(struct hci_dev *hdev, const char *ddc_name) in btintel_load_ddc_config() argument
347 err = request_firmware_direct(&fw, ddc_name, &hdev->dev); in btintel_load_ddc_config()
349 bt_dev_err(hdev, "Failed to load Intel DDC file %s (%d)", in btintel_load_ddc_config()
354 bt_dev_info(hdev, "Found Intel DDC parameters: %s", ddc_name); in btintel_load_ddc_config()
364 skb = __hci_cmd_sync(hdev, 0xfc8b, cmd_plen, fw_ptr, in btintel_load_ddc_config()
367 bt_dev_err(hdev, "Failed to send Intel_Write_DDC (%ld)", in btintel_load_ddc_config()
379 bt_dev_info(hdev, "Applying Intel DDC parameters completed"); in btintel_load_ddc_config()
385 int btintel_set_event_mask_mfg(struct hci_dev *hdev, bool debug) in btintel_set_event_mask_mfg() argument
389 err = btintel_enter_mfg(hdev); in btintel_set_event_mask_mfg()
393 ret = btintel_set_event_mask(hdev, debug); in btintel_set_event_mask_mfg()
395 err = btintel_exit_mfg(hdev, false, false); in btintel_set_event_mask_mfg()
403 int btintel_read_version(struct hci_dev *hdev, struct intel_version *ver) in btintel_read_version() argument
407 skb = __hci_cmd_sync(hdev, 0xfc05, 0, NULL, HCI_CMD_TIMEOUT); in btintel_read_version()
409 bt_dev_err(hdev, "Reading Intel version information failed (%ld)", in btintel_read_version()
415 bt_dev_err(hdev, "Intel version event size mismatch"); in btintel_read_version()
428 static int btintel_version_info_tlv(struct hci_dev *hdev, in btintel_version_info_tlv() argument
437 bt_dev_err(hdev, "Unsupported Intel hardware platform (0x%2x)", in btintel_version_info_tlv()
454 bt_dev_err(hdev, "Unsupported Intel hardware variant (0x%x)", in btintel_version_info_tlv()
467 bt_dev_err(hdev, "Unsupported Intel firmware loading method (0x%x)", in btintel_version_info_tlv()
474 bt_dev_err(hdev, "Unsupported Intel secure boot engine type (0x%x)", in btintel_version_info_tlv()
479 bt_dev_info(hdev, "Device revision is %u", version->dev_rev_id); in btintel_version_info_tlv()
480 bt_dev_info(hdev, "Secure boot is %s", in btintel_version_info_tlv()
482 bt_dev_info(hdev, "OTP lock is %s", in btintel_version_info_tlv()
484 bt_dev_info(hdev, "API lock is %s", in btintel_version_info_tlv()
486 bt_dev_info(hdev, "Debug lock is %s", in btintel_version_info_tlv()
488 bt_dev_info(hdev, "Minimum firmware build %u week %u %u", in btintel_version_info_tlv()
496 bt_dev_err(hdev, "Unsupported image type(%02x)", version->img_type); in btintel_version_info_tlv()
500 bt_dev_info(hdev, "%s timestamp %u.%u buildtype %u build %u", variant, in btintel_version_info_tlv()
507 static int btintel_parse_version_tlv(struct hci_dev *hdev, in btintel_parse_version_tlv() argument
609 static int btintel_read_version_tlv(struct hci_dev *hdev, in btintel_read_version_tlv() argument
618 skb = __hci_cmd_sync(hdev, 0xfc05, 1, param, HCI_CMD_TIMEOUT); in btintel_read_version_tlv()
620 bt_dev_err(hdev, "Reading Intel version information failed (%ld)", in btintel_read_version_tlv()
626 bt_dev_err(hdev, "Intel Read Version command failed (%02x)", in btintel_read_version_tlv()
632 btintel_parse_version_tlv(hdev, version, skb); in btintel_read_version_tlv()
645 struct hci_dev *hdev; member
693 bt_dev_dbg(ctx->hdev, "Register (0x%x) read", le32_to_cpu(cp.addr)); in regmap_ibt_read()
695 skb = hci_cmd_sync(ctx->hdev, ctx->op_read, sizeof(cp), &cp, in regmap_ibt_read()
699 bt_dev_err(ctx->hdev, "regmap: Register (0x%x) read error (%d)", in regmap_ibt_read()
705 bt_dev_err(ctx->hdev, "regmap: Register (0x%x) read error, bad len", in regmap_ibt_read()
714 bt_dev_err(ctx->hdev, "regmap: Register (0x%x) read error, bad addr", in regmap_ibt_read()
765 bt_dev_dbg(ctx->hdev, "Register (0x%x) write", le32_to_cpu(cp->addr)); in regmap_ibt_gather_write()
767 skb = hci_cmd_sync(ctx->hdev, ctx->op_write, plen, cp, HCI_CMD_TIMEOUT); in regmap_ibt_gather_write()
770 bt_dev_err(ctx->hdev, "regmap: Register (0x%x) write error (%d)", in regmap_ibt_gather_write()
813 struct regmap *btintel_regmap_init(struct hci_dev *hdev, u16 opcode_read, in btintel_regmap_init() argument
818 bt_dev_info(hdev, "regmap: Init R%x-W%x region", opcode_read, in btintel_regmap_init()
827 ctx->hdev = hdev; in btintel_regmap_init()
829 return regmap_init(&hdev->dev, &regmap_ibt, ctx, &regmap_ibt_cfg); in btintel_regmap_init()
833 int btintel_send_intel_reset(struct hci_dev *hdev, u32 boot_param) in btintel_send_intel_reset() argument
840 skb = __hci_cmd_sync(hdev, 0xfc01, sizeof(params), &params, in btintel_send_intel_reset()
843 bt_dev_err(hdev, "Failed to send Intel Reset command"); in btintel_send_intel_reset()
853 int btintel_read_boot_params(struct hci_dev *hdev, in btintel_read_boot_params() argument
858 skb = __hci_cmd_sync(hdev, 0xfc0d, 0, NULL, HCI_INIT_TIMEOUT); in btintel_read_boot_params()
860 bt_dev_err(hdev, "Reading Intel boot parameters failed (%ld)", in btintel_read_boot_params()
866 bt_dev_err(hdev, "Intel boot parameters size mismatch"); in btintel_read_boot_params()
876 bt_dev_err(hdev, "Intel boot parameters command failed (%02x)", in btintel_read_boot_params()
881 bt_dev_info(hdev, "Device revision is %u", in btintel_read_boot_params()
884 bt_dev_info(hdev, "Secure boot is %s", in btintel_read_boot_params()
887 bt_dev_info(hdev, "OTP lock is %s", in btintel_read_boot_params()
890 bt_dev_info(hdev, "API lock is %s", in btintel_read_boot_params()
893 bt_dev_info(hdev, "Debug lock is %s", in btintel_read_boot_params()
896 bt_dev_info(hdev, "Minimum firmware build %u week %u %u", in btintel_read_boot_params()
904 static int btintel_sfi_rsa_header_secure_send(struct hci_dev *hdev, in btintel_sfi_rsa_header_secure_send() argument
912 err = btintel_secure_send(hdev, 0x00, 128, fw->data); in btintel_sfi_rsa_header_secure_send()
914 bt_dev_err(hdev, "Failed to send firmware header (%d)", err); in btintel_sfi_rsa_header_secure_send()
921 err = btintel_secure_send(hdev, 0x03, 256, fw->data + 128); in btintel_sfi_rsa_header_secure_send()
923 bt_dev_err(hdev, "Failed to send firmware pkey (%d)", err); in btintel_sfi_rsa_header_secure_send()
930 err = btintel_secure_send(hdev, 0x02, 256, fw->data + 388); in btintel_sfi_rsa_header_secure_send()
932 bt_dev_err(hdev, "Failed to send firmware signature (%d)", err); in btintel_sfi_rsa_header_secure_send()
940 static int btintel_sfi_ecdsa_header_secure_send(struct hci_dev *hdev, in btintel_sfi_ecdsa_header_secure_send() argument
948 err = btintel_secure_send(hdev, 0x00, 128, fw->data + 644); in btintel_sfi_ecdsa_header_secure_send()
950 bt_dev_err(hdev, "Failed to send firmware header (%d)", err); in btintel_sfi_ecdsa_header_secure_send()
957 err = btintel_secure_send(hdev, 0x03, 96, fw->data + 644 + 128); in btintel_sfi_ecdsa_header_secure_send()
959 bt_dev_err(hdev, "Failed to send firmware pkey (%d)", err); in btintel_sfi_ecdsa_header_secure_send()
966 err = btintel_secure_send(hdev, 0x02, 96, fw->data + 644 + 224); in btintel_sfi_ecdsa_header_secure_send()
968 bt_dev_err(hdev, "Failed to send firmware signature (%d)", in btintel_sfi_ecdsa_header_secure_send()
975 static int btintel_download_firmware_payload(struct hci_dev *hdev, in btintel_download_firmware_payload() argument
1001 err = btintel_secure_send(hdev, 0x01, frag_len, fw_ptr); in btintel_download_firmware_payload()
1003 bt_dev_err(hdev, in btintel_download_firmware_payload()
1018 static bool btintel_firmware_version(struct hci_dev *hdev, in btintel_firmware_version() argument
1040 bt_dev_info(hdev, "Boot Address: 0x%x", in btintel_firmware_version()
1043 bt_dev_info(hdev, "Firmware Version: %u-%u.%u", in btintel_firmware_version()
1058 int btintel_download_firmware(struct hci_dev *hdev, in btintel_download_firmware() argument
1079 if (btintel_firmware_version(hdev, ver->fw_build_num, in btintel_download_firmware()
1082 bt_dev_info(hdev, "Firmware already loaded"); in btintel_download_firmware()
1101 err = btintel_sfi_rsa_header_secure_send(hdev, fw); in btintel_download_firmware()
1105 return btintel_download_firmware_payload(hdev, fw, RSA_HEADER_LEN); in btintel_download_firmware()
1109 static int btintel_download_fw_tlv(struct hci_dev *hdev, in btintel_download_fw_tlv() argument
1120 if (btintel_firmware_version(hdev, ver->min_fw_build_nn, in btintel_download_fw_tlv()
1124 bt_dev_info(hdev, "Firmware already loaded"); in btintel_download_fw_tlv()
1157 bt_dev_err(hdev, "Invalid CSS Header version"); in btintel_download_fw_tlv()
1163 bt_dev_err(hdev, "Invalid SBE type for hardware variant (%d)", in btintel_download_fw_tlv()
1168 err = btintel_sfi_rsa_header_secure_send(hdev, fw); in btintel_download_fw_tlv()
1172 err = btintel_download_firmware_payload(hdev, fw, RSA_HEADER_LEN); in btintel_download_fw_tlv()
1183 bt_dev_err(hdev, "Invalid CSS Header version"); in btintel_download_fw_tlv()
1188 err = btintel_sfi_rsa_header_secure_send(hdev, fw); in btintel_download_fw_tlv()
1192 err = btintel_download_firmware_payload(hdev, fw, in btintel_download_fw_tlv()
1197 err = btintel_sfi_ecdsa_header_secure_send(hdev, fw); in btintel_download_fw_tlv()
1201 err = btintel_download_firmware_payload(hdev, fw, in btintel_download_fw_tlv()
1210 static void btintel_reset_to_bootloader(struct hci_dev *hdev) in btintel_reset_to_bootloader() argument
1236 skb = __hci_cmd_sync(hdev, 0xfc01, sizeof(params), in btintel_reset_to_bootloader()
1239 bt_dev_err(hdev, "FW download error recovery failed (%ld)", in btintel_reset_to_bootloader()
1243 bt_dev_info(hdev, "Intel reset sent to retry FW download"); in btintel_reset_to_bootloader()
1254 static int btintel_read_debug_features(struct hci_dev *hdev, in btintel_read_debug_features() argument
1263 skb = __hci_cmd_sync(hdev, 0xfca6, sizeof(page_no), &page_no, in btintel_read_debug_features()
1266 bt_dev_err(hdev, "Reading supported features failed (%ld)", in btintel_read_debug_features()
1272 bt_dev_err(hdev, "Supported features event size mismatch"); in btintel_read_debug_features()
1285 static int btintel_set_debug_features(struct hci_dev *hdev, in btintel_set_debug_features() argument
1296 bt_dev_info(hdev, "Telemetry exception format not supported"); in btintel_set_debug_features()
1300 skb = __hci_cmd_sync(hdev, 0xfc8b, 11, mask, HCI_INIT_TIMEOUT); in btintel_set_debug_features()
1302 bt_dev_err(hdev, "Setting Intel telemetry ddc write event mask failed (%ld)", in btintel_set_debug_features()
1311 static const struct firmware *btintel_legacy_rom_get_fw(struct hci_dev *hdev, in btintel_legacy_rom_get_fw() argument
1324 ret = request_firmware(&fw, fwname, &hdev->dev); in btintel_legacy_rom_get_fw()
1327 bt_dev_err(hdev, "Intel firmware file request failed (%d)", in btintel_legacy_rom_get_fw()
1332 bt_dev_err(hdev, "failed to open Intel firmware file: %s (%d)", in btintel_legacy_rom_get_fw()
1340 if (request_firmware(&fw, fwname, &hdev->dev) < 0) { in btintel_legacy_rom_get_fw()
1341 bt_dev_err(hdev, "failed to open default fw file: %s", in btintel_legacy_rom_get_fw()
1347 bt_dev_info(hdev, "Intel Bluetooth firmware file: %s", fwname); in btintel_legacy_rom_get_fw()
1352 static int btintel_legacy_rom_patching(struct hci_dev *hdev, in btintel_legacy_rom_patching() argument
1371 bt_dev_err(hdev, "Intel fw corrupted: invalid cmd read"); in btintel_legacy_rom_patching()
1385 bt_dev_err(hdev, "Intel fw corrupted: invalid cmd len"); in btintel_legacy_rom_patching()
1418 bt_dev_err(hdev, "Intel fw corrupted: invalid evt len"); in btintel_legacy_rom_patching()
1432 bt_dev_err(hdev, "Intel fw corrupted: invalid evt read"); in btintel_legacy_rom_patching()
1436 skb = __hci_cmd_sync_ev(hdev, le16_to_cpu(cmd->opcode), cmd->plen, in btintel_legacy_rom_patching()
1439 bt_dev_err(hdev, "sending Intel patch command (0x%4.4x) failed (%ld)", in btintel_legacy_rom_patching()
1449 bt_dev_err(hdev, "mismatch event length (opcode 0x%4.4x)", in btintel_legacy_rom_patching()
1456 bt_dev_err(hdev, "mismatch event parameter (opcode 0x%4.4x)", in btintel_legacy_rom_patching()
1466 static int btintel_legacy_rom_setup(struct hci_dev *hdev, in btintel_legacy_rom_setup() argument
1474 BT_DBG("%s", hdev->name); in btintel_legacy_rom_setup()
1481 bt_dev_info(hdev, in btintel_legacy_rom_setup()
1493 fw = btintel_legacy_rom_get_fw(hdev, ver); in btintel_legacy_rom_setup()
1502 err = btintel_enter_mfg(hdev); in btintel_legacy_rom_setup()
1533 ret = btintel_legacy_rom_patching(hdev, fw, &fw_ptr, in btintel_legacy_rom_setup()
1547 err = btintel_exit_mfg(hdev, true, true); in btintel_legacy_rom_setup()
1554 err = btintel_read_version(hdev, &new_ver); in btintel_legacy_rom_setup()
1558 bt_dev_info(hdev, "Intel BT fw patch 0x%02x completed & activated", in btintel_legacy_rom_setup()
1565 err = btintel_exit_mfg(hdev, false, false); in btintel_legacy_rom_setup()
1569 bt_dev_info(hdev, "Intel firmware patch completed"); in btintel_legacy_rom_setup()
1579 err = btintel_exit_mfg(hdev, true, false); in btintel_legacy_rom_setup()
1583 bt_dev_info(hdev, "Intel firmware patch completed and deactivated"); in btintel_legacy_rom_setup()
1589 btintel_set_event_mask_mfg(hdev, false); in btintel_legacy_rom_setup()
1591 btintel_check_bdaddr(hdev); in btintel_legacy_rom_setup()
1596 static int btintel_download_wait(struct hci_dev *hdev, ktime_t calltime, int msec) in btintel_download_wait() argument
1602 btintel_set_flag(hdev, INTEL_FIRMWARE_LOADED); in btintel_download_wait()
1604 bt_dev_info(hdev, "Waiting for firmware download to complete"); in btintel_download_wait()
1606 err = btintel_wait_on_flag_timeout(hdev, INTEL_DOWNLOADING, in btintel_download_wait()
1610 bt_dev_err(hdev, "Firmware loading interrupted"); in btintel_download_wait()
1615 bt_dev_err(hdev, "Firmware loading timeout"); in btintel_download_wait()
1619 if (btintel_test_flag(hdev, INTEL_FIRMWARE_FAILED)) { in btintel_download_wait()
1620 bt_dev_err(hdev, "Firmware loading failed"); in btintel_download_wait()
1628 bt_dev_info(hdev, "Firmware loaded in %llu usecs", duration); in btintel_download_wait()
1633 static int btintel_boot_wait(struct hci_dev *hdev, ktime_t calltime, int msec) in btintel_boot_wait() argument
1639 bt_dev_info(hdev, "Waiting for device to boot"); in btintel_boot_wait()
1641 err = btintel_wait_on_flag_timeout(hdev, INTEL_BOOTING, in btintel_boot_wait()
1645 bt_dev_err(hdev, "Device boot interrupted"); in btintel_boot_wait()
1650 bt_dev_err(hdev, "Device boot timeout"); in btintel_boot_wait()
1658 bt_dev_info(hdev, "Device booted in %llu usecs", duration); in btintel_boot_wait()
1663 static int btintel_boot(struct hci_dev *hdev, u32 boot_addr) in btintel_boot() argument
1670 btintel_set_flag(hdev, INTEL_BOOTING); in btintel_boot()
1672 err = btintel_send_intel_reset(hdev, boot_addr); in btintel_boot()
1674 bt_dev_err(hdev, "Intel Soft Reset failed (%d)", err); in btintel_boot()
1675 btintel_reset_to_bootloader(hdev); in btintel_boot()
1686 err = btintel_boot_wait(hdev, calltime, 1000); in btintel_boot()
1688 btintel_reset_to_bootloader(hdev); in btintel_boot()
1723 static int btintel_download_fw(struct hci_dev *hdev, in btintel_download_fw() argument
1750 btintel_clear_flag(hdev, INTEL_BOOTLOADER); in btintel_download_fw()
1751 btintel_check_bdaddr(hdev); in btintel_download_fw()
1769 err = btintel_read_boot_params(hdev, params); in btintel_download_fw()
1778 bt_dev_err(hdev, "Unsupported Intel firmware loading method (%u)", in btintel_download_fw()
1787 bt_dev_info(hdev, "No device address configured"); in btintel_download_fw()
1788 set_bit(HCI_QUIRK_INVALID_BDADDR, &hdev->quirks); in btintel_download_fw()
1815 if (!btintel_test_flag(hdev, INTEL_BOOTLOADER)) { in btintel_download_fw()
1817 btintel_set_flag(hdev, INTEL_FIRMWARE_LOADED); in btintel_download_fw()
1821 bt_dev_err(hdev, "Unsupported Intel firmware naming"); in btintel_download_fw()
1825 err = firmware_request_nowarn(&fw, fwname, &hdev->dev); in btintel_download_fw()
1827 if (!btintel_test_flag(hdev, INTEL_BOOTLOADER)) { in btintel_download_fw()
1829 btintel_set_flag(hdev, INTEL_FIRMWARE_LOADED); in btintel_download_fw()
1833 bt_dev_err(hdev, "Failed to load Intel firmware file %s (%d)", in btintel_download_fw()
1838 bt_dev_info(hdev, "Found device firmware: %s", fwname); in btintel_download_fw()
1841 bt_dev_err(hdev, "Invalid size of firmware file (%zu)", in btintel_download_fw()
1849 btintel_set_flag(hdev, INTEL_DOWNLOADING); in btintel_download_fw()
1852 err = btintel_download_firmware(hdev, ver, fw, boot_param); in btintel_download_fw()
1856 btintel_set_flag(hdev, INTEL_FIRMWARE_LOADED); in btintel_download_fw()
1864 btintel_reset_to_bootloader(hdev); in btintel_download_fw()
1879 err = btintel_download_wait(hdev, calltime, 5000); in btintel_download_fw()
1881 btintel_reset_to_bootloader(hdev); in btintel_download_fw()
1888 static int btintel_bootloader_setup(struct hci_dev *hdev, in btintel_bootloader_setup() argument
1898 BT_DBG("%s", hdev->name); in btintel_bootloader_setup()
1906 btintel_set_flag(hdev, INTEL_BOOTLOADER); in btintel_bootloader_setup()
1908 err = btintel_download_fw(hdev, ver, &params, &boot_param); in btintel_bootloader_setup()
1916 err = btintel_boot(hdev, boot_param); in btintel_bootloader_setup()
1920 btintel_clear_flag(hdev, INTEL_BOOTLOADER); in btintel_bootloader_setup()
1926 bt_dev_err(hdev, "Unsupported Intel firmware naming"); in btintel_bootloader_setup()
1934 btintel_load_ddc_config(hdev, ddcname); in btintel_bootloader_setup()
1940 err = btintel_read_debug_features(hdev, &features); in btintel_bootloader_setup()
1943 btintel_set_debug_features(hdev, &features); in btintel_bootloader_setup()
1947 err = btintel_read_version(hdev, &new_ver); in btintel_bootloader_setup()
1951 btintel_version_info(hdev, &new_ver); in btintel_bootloader_setup()
1961 btintel_set_event_mask(hdev, false); in btintel_bootloader_setup()
1981 static int btintel_prepare_fw_download_tlv(struct hci_dev *hdev, in btintel_prepare_fw_download_tlv() argument
2007 btintel_clear_flag(hdev, INTEL_BOOTLOADER); in btintel_prepare_fw_download_tlv()
2008 btintel_check_bdaddr(hdev); in btintel_prepare_fw_download_tlv()
2015 bt_dev_info(hdev, "No device address configured"); in btintel_prepare_fw_download_tlv()
2016 set_bit(HCI_QUIRK_INVALID_BDADDR, &hdev->quirks); in btintel_prepare_fw_download_tlv()
2020 err = firmware_request_nowarn(&fw, fwname, &hdev->dev); in btintel_prepare_fw_download_tlv()
2022 if (!btintel_test_flag(hdev, INTEL_BOOTLOADER)) { in btintel_prepare_fw_download_tlv()
2024 btintel_set_flag(hdev, INTEL_FIRMWARE_LOADED); in btintel_prepare_fw_download_tlv()
2028 bt_dev_err(hdev, "Failed to load Intel firmware file %s (%d)", in btintel_prepare_fw_download_tlv()
2034 bt_dev_info(hdev, "Found device firmware: %s", fwname); in btintel_prepare_fw_download_tlv()
2037 bt_dev_err(hdev, "Invalid size of firmware file (%zu)", in btintel_prepare_fw_download_tlv()
2045 btintel_set_flag(hdev, INTEL_DOWNLOADING); in btintel_prepare_fw_download_tlv()
2048 err = btintel_download_fw_tlv(hdev, ver, fw, boot_param, in btintel_prepare_fw_download_tlv()
2054 btintel_set_flag(hdev, INTEL_FIRMWARE_LOADED); in btintel_prepare_fw_download_tlv()
2062 btintel_reset_to_bootloader(hdev); in btintel_prepare_fw_download_tlv()
2077 err = btintel_download_wait(hdev, calltime, 5000); in btintel_prepare_fw_download_tlv()
2079 btintel_reset_to_bootloader(hdev); in btintel_prepare_fw_download_tlv()
2086 static int btintel_bootloader_setup_tlv(struct hci_dev *hdev, in btintel_bootloader_setup_tlv() argument
2095 bt_dev_dbg(hdev, ""); in btintel_bootloader_setup_tlv()
2103 btintel_set_flag(hdev, INTEL_BOOTLOADER); in btintel_bootloader_setup_tlv()
2105 err = btintel_prepare_fw_download_tlv(hdev, ver, &boot_param); in btintel_bootloader_setup_tlv()
2113 err = btintel_boot(hdev, boot_param); in btintel_bootloader_setup_tlv()
2117 btintel_clear_flag(hdev, INTEL_BOOTLOADER); in btintel_bootloader_setup_tlv()
2126 btintel_load_ddc_config(hdev, ddcname); in btintel_bootloader_setup_tlv()
2131 err = btintel_read_debug_features(hdev, &features); in btintel_bootloader_setup_tlv()
2134 btintel_set_debug_features(hdev, &features); in btintel_bootloader_setup_tlv()
2138 err = btintel_read_version_tlv(hdev, &new_ver); in btintel_bootloader_setup_tlv()
2142 btintel_version_info_tlv(hdev, &new_ver); in btintel_bootloader_setup_tlv()
2152 btintel_set_event_mask(hdev, false); in btintel_bootloader_setup_tlv()
2157 static void btintel_set_msft_opcode(struct hci_dev *hdev, u8 hw_variant) in btintel_set_msft_opcode() argument
2171 hci_set_msft_opcode(hdev, 0xFC1E); in btintel_set_msft_opcode()
2179 static int btintel_setup_combined(struct hci_dev *hdev) in btintel_setup_combined() argument
2187 BT_DBG("%s", hdev->name); in btintel_setup_combined()
2203 if (btintel_test_flag(hdev, INTEL_BROKEN_INITIAL_NCMD) || in btintel_setup_combined()
2204 btintel_test_flag(hdev, INTEL_BROKEN_SHUTDOWN_LED)) { in btintel_setup_combined()
2205 skb = __hci_cmd_sync(hdev, HCI_OP_RESET, 0, NULL, in btintel_setup_combined()
2208 bt_dev_err(hdev, in btintel_setup_combined()
2222 skb = __hci_cmd_sync(hdev, 0xfc05, 1, param, HCI_CMD_TIMEOUT); in btintel_setup_combined()
2224 bt_dev_err(hdev, "Reading Intel version command failed (%ld)", in btintel_setup_combined()
2231 bt_dev_err(hdev, "Intel Read Version command failed (%02x)", in btintel_setup_combined()
2238 set_bit(HCI_QUIRK_STRICT_DUPLICATE_FILTER, &hdev->quirks); in btintel_setup_combined()
2239 set_bit(HCI_QUIRK_SIMULTANEOUS_DISCOVERY, &hdev->quirks); in btintel_setup_combined()
2240 set_bit(HCI_QUIRK_NON_PERSISTENT_DIAG, &hdev->quirks); in btintel_setup_combined()
2244 bt_dev_dbg(hdev, "Read the legacy Intel version information"); in btintel_setup_combined()
2249 btintel_version_info(hdev, &ver); in btintel_setup_combined()
2262 btintel_set_flag(hdev, INTEL_ROM_LEGACY); in btintel_setup_combined()
2273 if (!btintel_test_flag(hdev, in btintel_setup_combined()
2276 &hdev->quirks); in btintel_setup_combined()
2279 &hdev->quirks); in btintel_setup_combined()
2281 err = btintel_legacy_rom_setup(hdev, &ver); in btintel_setup_combined()
2288 set_bit(HCI_QUIRK_VALID_LE_STATES, &hdev->quirks); in btintel_setup_combined()
2296 &hdev->quirks); in btintel_setup_combined()
2299 btintel_set_msft_opcode(hdev, ver.hw_variant); in btintel_setup_combined()
2301 err = btintel_bootloader_setup(hdev, &ver); in btintel_setup_combined()
2304 bt_dev_err(hdev, "Unsupported Intel hw variant (%u)", in btintel_setup_combined()
2313 err = btintel_parse_version_tlv(hdev, &ver_tlv, skb); in btintel_setup_combined()
2315 bt_dev_err(hdev, "Failed to parse TLV version information"); in btintel_setup_combined()
2320 bt_dev_err(hdev, "Unsupported Intel hardware platform (0x%2x)", in btintel_setup_combined()
2354 err = btintel_read_version(hdev, &ver); in btintel_setup_combined()
2362 set_bit(HCI_QUIRK_WIDEBAND_SPEECH_SUPPORTED, &hdev->quirks); in btintel_setup_combined()
2365 set_bit(HCI_QUIRK_VALID_LE_STATES, &hdev->quirks); in btintel_setup_combined()
2368 btintel_set_msft_opcode(hdev, ver.hw_variant); in btintel_setup_combined()
2370 err = btintel_bootloader_setup(hdev, &ver); in btintel_setup_combined()
2376 btintel_version_info_tlv(hdev, &ver_tlv); in btintel_setup_combined()
2382 set_bit(HCI_QUIRK_WIDEBAND_SPEECH_SUPPORTED, &hdev->quirks); in btintel_setup_combined()
2385 set_bit(HCI_QUIRK_VALID_LE_STATES, &hdev->quirks); in btintel_setup_combined()
2388 btintel_set_msft_opcode(hdev, in btintel_setup_combined()
2391 err = btintel_bootloader_setup_tlv(hdev, &ver_tlv); in btintel_setup_combined()
2394 bt_dev_err(hdev, "Unsupported Intel hw variant (%u)", in btintel_setup_combined()
2406 static int btintel_shutdown_combined(struct hci_dev *hdev) in btintel_shutdown_combined() argument
2415 skb = __hci_cmd_sync(hdev, HCI_OP_RESET, 0, NULL, HCI_INIT_TIMEOUT); in btintel_shutdown_combined()
2417 bt_dev_err(hdev, "HCI reset during shutdown failed"); in btintel_shutdown_combined()
2428 if (btintel_test_flag(hdev, INTEL_BROKEN_SHUTDOWN_LED)) { in btintel_shutdown_combined()
2429 skb = __hci_cmd_sync(hdev, 0xfc3f, 0, NULL, HCI_INIT_TIMEOUT); in btintel_shutdown_combined()
2432 bt_dev_err(hdev, "turning off Intel device LED failed"); in btintel_shutdown_combined()
2441 int btintel_configure_setup(struct hci_dev *hdev) in btintel_configure_setup() argument
2443 hdev->manufacturer = 2; in btintel_configure_setup()
2444 hdev->setup = btintel_setup_combined; in btintel_configure_setup()
2445 hdev->shutdown = btintel_shutdown_combined; in btintel_configure_setup()
2446 hdev->hw_error = btintel_hw_error; in btintel_configure_setup()
2447 hdev->set_diag = btintel_set_diag_combined; in btintel_configure_setup()
2448 hdev->set_bdaddr = btintel_set_bdaddr; in btintel_configure_setup()
2454 void btintel_bootup(struct hci_dev *hdev, const void *ptr, unsigned int len) in btintel_bootup() argument
2461 if (btintel_test_and_clear_flag(hdev, INTEL_BOOTING)) in btintel_bootup()
2462 btintel_wake_up_flag(hdev, INTEL_BOOTING); in btintel_bootup()
2466 void btintel_secure_send_result(struct hci_dev *hdev, in btintel_secure_send_result() argument
2475 btintel_set_flag(hdev, INTEL_FIRMWARE_FAILED); in btintel_secure_send_result()
2477 if (btintel_test_and_clear_flag(hdev, INTEL_DOWNLOADING) && in btintel_secure_send_result()
2478 btintel_test_flag(hdev, INTEL_FIRMWARE_LOADED)) in btintel_secure_send_result()
2479 btintel_wake_up_flag(hdev, INTEL_DOWNLOADING); in btintel_secure_send_result()