Lines Matching +full:embedded +full:- +full:trace +full:- +full:extension
1 // SPDX-License-Identifier: GPL-2.0-or-later
76 if (skb->len != sizeof(*bda)) { in btintel_check_bdaddr()
79 return -EIO; in btintel_check_bdaddr()
82 bda = (struct hci_rp_read_bd_addr *)skb->data; in btintel_check_bdaddr()
89 if (!bacmp(&bda->bdaddr, BDADDR_INTEL)) { in btintel_check_bdaddr()
91 &bda->bdaddr); in btintel_check_bdaddr()
92 set_bit(HCI_QUIRK_INVALID_BDADDR, &hdev->quirks); in btintel_check_bdaddr()
200 if (err == -ENODATA) in btintel_set_diag()
270 if (skb->len != 13) { in btintel_hw_error()
276 bt_dev_err(hdev, "Exception info %s", (char *)(skb->data + 1)); in btintel_hw_error()
288 if (ver->hw_platform != 0x37) { in btintel_version_info()
290 ver->hw_platform); in btintel_version_info()
291 return -EINVAL; in btintel_version_info()
300 switch (ver->hw_variant) { in btintel_version_info()
301 case 0x07: /* WP - Legacy ROM */ in btintel_version_info()
302 case 0x08: /* StP - Legacy ROM */ in btintel_version_info()
312 ver->hw_variant); in btintel_version_info()
313 return -EINVAL; in btintel_version_info()
316 switch (ver->fw_variant) { in btintel_version_info()
330 bt_dev_err(hdev, "Unsupported firmware variant(%02x)", ver->fw_variant); in btintel_version_info()
331 return -EINVAL; in btintel_version_info()
334 coredump_info.hw_variant = ver->hw_variant; in btintel_version_info()
335 coredump_info.fw_build_num = ver->fw_build_num; in btintel_version_info()
338 variant, ver->fw_revision >> 4, ver->fw_revision & 0x0f, in btintel_version_info()
339 ver->fw_build_num, ver->fw_build_ww, in btintel_version_info()
340 2000 + ver->fw_build_yy); in btintel_version_info()
363 plen -= fragment_len; in btintel_secure_send()
377 err = request_firmware_direct(&fw, ddc_name, &hdev->dev); in btintel_load_ddc_config()
386 fw_ptr = fw->data; in btintel_load_ddc_config()
389 * Length (1 byte), DDC ID (2 bytes), and DDC value (Length - 2). in btintel_load_ddc_config()
391 while (fw->size > fw_ptr - fw->data) { in btintel_load_ddc_config()
444 if (skb->len != sizeof(*ver)) { in btintel_read_version()
447 return -EILSEQ; in btintel_read_version()
450 memcpy(ver, skb->data, sizeof(*ver)); in btintel_read_version()
466 if (INTEL_HW_PLATFORM(version->cnvi_bt) != 0x37) { in btintel_version_info_tlv()
468 INTEL_HW_PLATFORM(version->cnvi_bt)); in btintel_version_info_tlv()
469 return -EINVAL; in btintel_version_info_tlv()
478 switch (INTEL_HW_VARIANT(version->cnvi_bt)) { in btintel_version_info_tlv()
481 case 0x19: /* Slr-F */ in btintel_version_info_tlv()
487 INTEL_HW_VARIANT(version->cnvi_bt)); in btintel_version_info_tlv()
488 return -EINVAL; in btintel_version_info_tlv()
491 switch (version->img_type) { in btintel_version_info_tlv()
498 if (version->limited_cce != 0x00) { in btintel_version_info_tlv()
500 version->limited_cce); in btintel_version_info_tlv()
501 return -EINVAL; in btintel_version_info_tlv()
505 if (version->sbe_type > 0x01) { in btintel_version_info_tlv()
507 version->sbe_type); in btintel_version_info_tlv()
508 return -EINVAL; in btintel_version_info_tlv()
511 bt_dev_info(hdev, "Device revision is %u", version->dev_rev_id); in btintel_version_info_tlv()
513 version->secure_boot ? "enabled" : "disabled"); in btintel_version_info_tlv()
515 version->otp_lock ? "enabled" : "disabled"); in btintel_version_info_tlv()
517 version->api_lock ? "enabled" : "disabled"); in btintel_version_info_tlv()
519 version->debug_lock ? "enabled" : "disabled"); in btintel_version_info_tlv()
521 version->min_fw_build_nn, version->min_fw_build_cw, in btintel_version_info_tlv()
522 2000 + version->min_fw_build_yy); in btintel_version_info_tlv()
528 bt_dev_err(hdev, "Unsupported image type(%02x)", version->img_type); in btintel_version_info_tlv()
529 return -EINVAL; in btintel_version_info_tlv()
532 coredump_info.hw_variant = INTEL_HW_VARIANT(version->cnvi_bt); in btintel_version_info_tlv()
533 coredump_info.fw_build_num = version->build_num; in btintel_version_info_tlv()
536 2000 + (version->timestamp >> 8), version->timestamp & 0xff, in btintel_version_info_tlv()
537 version->build_type, version->build_num); in btintel_version_info_tlv()
554 while (skb->len) { in btintel_parse_version_tlv()
558 if (skb->len < sizeof(*tlv)) in btintel_parse_version_tlv()
559 return -EINVAL; in btintel_parse_version_tlv()
561 tlv = (struct intel_tlv *)skb->data; in btintel_parse_version_tlv()
564 if (skb->len < tlv->len + sizeof(*tlv)) in btintel_parse_version_tlv()
565 return -EINVAL; in btintel_parse_version_tlv()
567 switch (tlv->type) { in btintel_parse_version_tlv()
569 version->cnvi_top = get_unaligned_le32(tlv->val); in btintel_parse_version_tlv()
572 version->cnvr_top = get_unaligned_le32(tlv->val); in btintel_parse_version_tlv()
575 version->cnvi_bt = get_unaligned_le32(tlv->val); in btintel_parse_version_tlv()
578 version->cnvr_bt = get_unaligned_le32(tlv->val); in btintel_parse_version_tlv()
581 version->dev_rev_id = get_unaligned_le16(tlv->val); in btintel_parse_version_tlv()
584 version->img_type = tlv->val[0]; in btintel_parse_version_tlv()
591 version->min_fw_build_cw = tlv->val[0]; in btintel_parse_version_tlv()
592 version->min_fw_build_yy = tlv->val[1]; in btintel_parse_version_tlv()
593 version->timestamp = get_unaligned_le16(tlv->val); in btintel_parse_version_tlv()
596 version->build_type = tlv->val[0]; in btintel_parse_version_tlv()
603 version->min_fw_build_nn = tlv->val[0]; in btintel_parse_version_tlv()
604 version->build_num = get_unaligned_le32(tlv->val); in btintel_parse_version_tlv()
607 version->secure_boot = tlv->val[0]; in btintel_parse_version_tlv()
610 version->otp_lock = tlv->val[0]; in btintel_parse_version_tlv()
613 version->api_lock = tlv->val[0]; in btintel_parse_version_tlv()
616 version->debug_lock = tlv->val[0]; in btintel_parse_version_tlv()
619 version->min_fw_build_nn = tlv->val[0]; in btintel_parse_version_tlv()
620 version->min_fw_build_cw = tlv->val[1]; in btintel_parse_version_tlv()
621 version->min_fw_build_yy = tlv->val[2]; in btintel_parse_version_tlv()
624 version->limited_cce = tlv->val[0]; in btintel_parse_version_tlv()
627 version->sbe_type = tlv->val[0]; in btintel_parse_version_tlv()
630 memcpy(&version->otp_bd_addr, tlv->val, in btintel_parse_version_tlv()
638 skb_pull(skb, tlv->len + sizeof(*tlv)); in btintel_parse_version_tlv()
651 return -EINVAL; in btintel_read_version_tlv()
660 if (skb->data[0]) { in btintel_read_version_tlv()
662 skb->data[0]); in btintel_read_version_tlv()
664 return -EIO; in btintel_read_version_tlv()
673 /* ------- REGMAP IBT SUPPORT ------- */
708 return -EINVAL; in regmap_ibt_read()
721 return -EINVAL; in regmap_ibt_read()
724 /* regmap provides a little-endian formatted addr */ in regmap_ibt_read()
728 bt_dev_dbg(ctx->hdev, "Register (0x%x) read", le32_to_cpu(cp.addr)); in regmap_ibt_read()
730 skb = hci_cmd_sync(ctx->hdev, ctx->op_read, sizeof(cp), &cp, in regmap_ibt_read()
734 bt_dev_err(ctx->hdev, "regmap: Register (0x%x) read error (%d)", in regmap_ibt_read()
739 if (skb->len != sizeof(*rp) + val_size) { in regmap_ibt_read()
740 bt_dev_err(ctx->hdev, "regmap: Register (0x%x) read error, bad len", in regmap_ibt_read()
742 err = -EINVAL; in regmap_ibt_read()
746 rp = (struct ibt_rp_reg_access *)skb->data; in regmap_ibt_read()
748 if (rp->addr != cp.addr) { in regmap_ibt_read()
749 bt_dev_err(ctx->hdev, "regmap: Register (0x%x) read error, bad addr", in regmap_ibt_read()
750 le32_to_cpu(rp->addr)); in regmap_ibt_read()
751 err = -EINVAL; in regmap_ibt_read()
755 memcpy(val, rp->data, val_size); in regmap_ibt_read()
774 return -EINVAL; in regmap_ibt_gather_write()
787 return -EINVAL; in regmap_ibt_gather_write()
792 return -ENOMEM; in regmap_ibt_gather_write()
794 /* regmap provides a little-endian formatted addr/value */ in regmap_ibt_gather_write()
795 cp->addr = *(__le32 *)addr; in regmap_ibt_gather_write()
796 cp->mode = mode; in regmap_ibt_gather_write()
797 cp->len = val_size; in regmap_ibt_gather_write()
798 memcpy(&cp->data, val, val_size); in regmap_ibt_gather_write()
800 bt_dev_dbg(ctx->hdev, "Register (0x%x) write", le32_to_cpu(cp->addr)); in regmap_ibt_gather_write()
802 skb = hci_cmd_sync(ctx->hdev, ctx->op_write, plen, cp, HCI_CMD_TIMEOUT); in regmap_ibt_gather_write()
805 bt_dev_err(ctx->hdev, "regmap: Register (0x%x) write error (%d)", in regmap_ibt_gather_write()
806 le32_to_cpu(cp->addr), err); in regmap_ibt_gather_write()
822 return -EINVAL; in regmap_ibt_write()
824 return regmap_ibt_gather_write(context, data, 4, data + 4, count - 4); in regmap_ibt_write()
853 bt_dev_info(hdev, "regmap: Init R%x-W%x region", opcode_read, in btintel_regmap_init()
858 return ERR_PTR(-ENOMEM); in btintel_regmap_init()
860 ctx->op_read = opcode_read; in btintel_regmap_init()
861 ctx->op_write = opcode_write; in btintel_regmap_init()
862 ctx->hdev = hdev; in btintel_regmap_init()
864 return regmap_init(&hdev->dev, ®map_ibt, ctx, ®map_ibt_cfg); in btintel_regmap_init()
900 if (skb->len != sizeof(*params)) { in btintel_read_boot_params()
903 return -EILSEQ; in btintel_read_boot_params()
906 memcpy(params, skb->data, sizeof(*params)); in btintel_read_boot_params()
910 if (params->status) { in btintel_read_boot_params()
912 params->status); in btintel_read_boot_params()
913 return -bt_to_errno(params->status); in btintel_read_boot_params()
917 le16_to_cpu(params->dev_revid)); in btintel_read_boot_params()
920 params->secure_boot ? "enabled" : "disabled"); in btintel_read_boot_params()
923 params->otp_lock ? "enabled" : "disabled"); in btintel_read_boot_params()
926 params->api_lock ? "enabled" : "disabled"); in btintel_read_boot_params()
929 params->debug_lock ? "enabled" : "disabled"); in btintel_read_boot_params()
932 params->min_fw_build_nn, params->min_fw_build_cw, in btintel_read_boot_params()
933 2000 + params->min_fw_build_yy); in btintel_read_boot_params()
947 err = btintel_secure_send(hdev, 0x00, 128, fw->data); in btintel_sfi_rsa_header_secure_send()
956 err = btintel_secure_send(hdev, 0x03, 256, fw->data + 128); in btintel_sfi_rsa_header_secure_send()
965 err = btintel_secure_send(hdev, 0x02, 256, fw->data + 388); in btintel_sfi_rsa_header_secure_send()
983 err = btintel_secure_send(hdev, 0x00, 128, fw->data + 644); in btintel_sfi_ecdsa_header_secure_send()
992 err = btintel_secure_send(hdev, 0x03, 96, fw->data + 644 + 128); in btintel_sfi_ecdsa_header_secure_send()
1001 err = btintel_secure_send(hdev, 0x02, 96, fw->data + 644 + 224); in btintel_sfi_ecdsa_header_secure_send()
1018 fw_ptr = fw->data + offset; in btintel_download_firmware_payload()
1020 err = -EINVAL; in btintel_download_firmware_payload()
1022 while (fw_ptr - fw->data < fw->size) { in btintel_download_firmware_payload()
1025 frag_len += sizeof(*cmd) + cmd->plen; in btintel_download_firmware_payload()
1060 fw_ptr = fw->data; in btintel_firmware_version()
1062 while (fw_ptr - fw->data < fw->size) { in btintel_firmware_version()
1066 * HCI_Intel_Reset command and it is embedded in the firmware in btintel_firmware_version()
1070 if (le16_to_cpu(cmd->opcode) == CMD_WRITE_BOOT_PARAMS) { in btintel_firmware_version()
1075 *boot_addr = le32_to_cpu(params->boot_addr); in btintel_firmware_version()
1079 bt_dev_info(hdev, "Firmware Version: %u-%u.%u", in btintel_firmware_version()
1080 params->fw_build_num, params->fw_build_ww, in btintel_firmware_version()
1081 params->fw_build_yy); in btintel_firmware_version()
1083 return (num == params->fw_build_num && in btintel_firmware_version()
1084 ww == params->fw_build_ww && in btintel_firmware_version()
1085 yy == params->fw_build_yy); in btintel_firmware_version()
1088 fw_ptr += sizeof(*cmd) + cmd->plen; in btintel_firmware_version()
1104 switch (ver->hw_variant) { in btintel_download_firmware()
1112 if (btintel_firmware_version(hdev, ver->fw_build_num, in btintel_download_firmware()
1113 ver->fw_build_ww, ver->fw_build_yy, in btintel_download_firmware()
1116 /* Return -EALREADY to indicate that the firmware has in btintel_download_firmware()
1119 return -EALREADY; in btintel_download_firmware()
1131 if (ver->fw_variant == 0x23) in btintel_download_firmware()
1132 return -EINVAL; in btintel_download_firmware()
1151 if (btintel_firmware_version(hdev, ver->min_fw_build_nn, in btintel_download_fw_tlv()
1152 ver->min_fw_build_cw, in btintel_download_fw_tlv()
1153 ver->min_fw_build_yy, in btintel_download_fw_tlv()
1156 /* Return -EALREADY to indicate that firmware has in btintel_download_fw_tlv()
1159 return -EALREADY; in btintel_download_fw_tlv()
1170 if (ver->img_type == 0x03) in btintel_download_fw_tlv()
1171 return -EINVAL; in btintel_download_fw_tlv()
1185 css_header_ver = get_unaligned_le32(fw->data + CSS_HEADER_OFFSET); in btintel_download_fw_tlv()
1188 return -EINVAL; in btintel_download_fw_tlv()
1195 return -EINVAL; in btintel_download_fw_tlv()
1207 if (fw->data[ECDSA_OFFSET] != 0x06) in btintel_download_fw_tlv()
1208 return -EINVAL; in btintel_download_fw_tlv()
1211 css_header_ver = get_unaligned_le32(fw->data + ECDSA_OFFSET + CSS_HEADER_OFFSET); in btintel_download_fw_tlv()
1214 return -EINVAL; in btintel_download_fw_tlv()
1246 * re-enumeration of BT controller. in btintel_reset_to_bootloader()
1290 /* Intel controller supports two pages, each page is of 128-bit in btintel_read_debug_features()
1301 if (skb->len != (sizeof(features->page1) + 3)) { in btintel_read_debug_features()
1304 return -EILSEQ; in btintel_read_debug_features()
1307 memcpy(features->page1, skb->data + 3, sizeof(features->page1)); in btintel_read_debug_features()
1324 struct hci_dev *hdev = ppag->hdev; in btintel_ppag_callback()
1328 bt_dev_warn(hdev, "PPAG-BT: ACPI Failure: %s", acpi_format_exception(status)); in btintel_ppag_callback()
1338 if (strncmp((char *)string.pointer + len - 4, BTINTEL_PPAG_NAME, 4)) { in btintel_ppag_callback()
1346 ppag->status = status; in btintel_ppag_callback()
1347 bt_dev_warn(hdev, "PPAG-BT: ACPI Failure: %s", acpi_format_exception(status)); in btintel_ppag_callback()
1354 if (p->type != ACPI_TYPE_PACKAGE || p->package.count != 2) { in btintel_ppag_callback()
1356 bt_dev_warn(hdev, "PPAG-BT: Invalid object type: %d or package count: %d", in btintel_ppag_callback()
1357 p->type, p->package.count); in btintel_ppag_callback()
1358 ppag->status = AE_ERROR; in btintel_ppag_callback()
1362 elements = p->package.elements; in btintel_ppag_callback()
1367 ppag->domain = (u32)p->package.elements[0].integer.value; in btintel_ppag_callback()
1368 ppag->mode = (u32)p->package.elements[1].integer.value; in btintel_ppag_callback()
1369 ppag->status = AE_OK; in btintel_ppag_callback()
1385 return -EINVAL; in btintel_set_debug_features()
1388 if (!(features->page1[0] & 0x3f)) { in btintel_set_debug_features()
1433 return -EINVAL; in btintel_reset_debug_features()
1436 if (!(features->page1[0] & 0x3f)) { in btintel_reset_debug_features()
1441 /* Should stop the trace before writing ddc event mask. */ in btintel_reset_debug_features()
1533 return -EOPNOTSUPP; in btintel_register_devcoredump_support()
1549 "intel/ibt-hw-%x.%x.%x-fw-%x.%x.%x.%x.%x.bseq", in btintel_legacy_rom_get_fw()
1550 ver->hw_platform, ver->hw_variant, ver->hw_revision, in btintel_legacy_rom_get_fw()
1551 ver->fw_variant, ver->fw_revision, ver->fw_build_num, in btintel_legacy_rom_get_fw()
1552 ver->fw_build_ww, ver->fw_build_yy); in btintel_legacy_rom_get_fw()
1554 ret = request_firmware(&fw, fwname, &hdev->dev); in btintel_legacy_rom_get_fw()
1556 if (ret == -EINVAL) { in btintel_legacy_rom_get_fw()
1568 snprintf(fwname, sizeof(fwname), "intel/ibt-hw-%x.%x.bseq", in btintel_legacy_rom_get_fw()
1569 ver->hw_platform, ver->hw_variant); in btintel_legacy_rom_get_fw()
1570 if (request_firmware(&fw, fwname, &hdev->dev) < 0) { in btintel_legacy_rom_get_fw()
1591 int remain = fw->size - (*fw_ptr - fw->data); in btintel_legacy_rom_patching()
1602 return -EINVAL; in btintel_legacy_rom_patching()
1605 remain--; in btintel_legacy_rom_patching()
1609 remain -= sizeof(*cmd); in btintel_legacy_rom_patching()
1614 if (remain < cmd->plen) { in btintel_legacy_rom_patching()
1616 return -EFAULT; in btintel_legacy_rom_patching()
1625 if (*disable_patch && le16_to_cpu(cmd->opcode) == 0xfc8e) in btintel_legacy_rom_patching()
1629 *fw_ptr += cmd->plen; in btintel_legacy_rom_patching()
1630 remain -= cmd->plen; in btintel_legacy_rom_patching()
1641 remain--; in btintel_legacy_rom_patching()
1645 remain -= sizeof(*evt); in btintel_legacy_rom_patching()
1647 if (remain < evt->plen) { in btintel_legacy_rom_patching()
1649 return -EFAULT; in btintel_legacy_rom_patching()
1653 *fw_ptr += evt->plen; in btintel_legacy_rom_patching()
1654 remain -= evt->plen; in btintel_legacy_rom_patching()
1663 return -EFAULT; in btintel_legacy_rom_patching()
1666 skb = __hci_cmd_sync_ev(hdev, le16_to_cpu(cmd->opcode), cmd->plen, in btintel_legacy_rom_patching()
1667 cmd_param, evt->evt, HCI_INIT_TIMEOUT); in btintel_legacy_rom_patching()
1670 cmd->opcode, PTR_ERR(skb)); in btintel_legacy_rom_patching()
1678 if (skb->len != evt->plen) { in btintel_legacy_rom_patching()
1680 le16_to_cpu(cmd->opcode)); in btintel_legacy_rom_patching()
1682 return -EFAULT; in btintel_legacy_rom_patching()
1685 if (memcmp(skb->data, evt_param, evt->plen)) { in btintel_legacy_rom_patching()
1687 le16_to_cpu(cmd->opcode)); in btintel_legacy_rom_patching()
1689 return -EFAULT; in btintel_legacy_rom_patching()
1704 BT_DBG("%s", hdev->name); in btintel_legacy_rom_setup()
1710 if (ver->fw_patch_num) { in btintel_legacy_rom_setup()
1713 ver->fw_patch_num); in btintel_legacy_rom_setup()
1726 fw_ptr = fw->data; in btintel_legacy_rom_setup()
1760 while (fw->size > fw_ptr - fw->data) { in btintel_legacy_rom_setup()
1782 * every power-on boot in btintel_legacy_rom_setup()
1839 if (err == -EINTR) { in btintel_download_wait()
1846 return -ETIMEDOUT; in btintel_download_wait()
1851 return -ENOEXEC; in btintel_download_wait()
1874 if (err == -EINTR) { in btintel_boot_wait()
1876 return -EINTR; in btintel_boot_wait()
1881 return -ETIMEDOUT; in btintel_boot_wait()
1917 if (err == -ETIMEDOUT) in btintel_boot()
1928 switch (ver->hw_variant) { in btintel_get_fw_name()
1931 snprintf(fw_name, len, "intel/ibt-%u-%u.%s", in btintel_get_fw_name()
1932 ver->hw_variant, in btintel_get_fw_name()
1933 le16_to_cpu(params->dev_revid), in btintel_get_fw_name()
1940 snprintf(fw_name, len, "intel/ibt-%u-%u-%u.%s", in btintel_get_fw_name()
1941 ver->hw_variant, in btintel_get_fw_name()
1942 ver->hw_revision, in btintel_get_fw_name()
1943 ver->fw_revision, in btintel_get_fw_name()
1947 return -EINVAL; in btintel_get_fw_name()
1964 return -EINVAL; in btintel_download_fw()
1979 if (ver->fw_variant == 0x23) { in btintel_download_fw()
1986 switch (ver->hw_variant) { in btintel_download_fw()
2007 if (params->limited_cce != 0x00) { in btintel_download_fw()
2009 params->limited_cce); in btintel_download_fw()
2010 return -EINVAL; in btintel_download_fw()
2016 if (!bacmp(¶ms->otp_bdaddr, BDADDR_ANY)) { in btintel_download_fw()
2018 set_bit(HCI_QUIRK_INVALID_BDADDR, &hdev->quirks); in btintel_download_fw()
2026 * The firmware filename is ibt-<hw_variant>-<dev_revid>.sfi. in btintel_download_fw()
2040 * ibt-<hw_variant>-<hw_revision>-<fw_revision>.sfi. in btintel_download_fw()
2052 return -EINVAL; in btintel_download_fw()
2055 err = firmware_request_nowarn(&fw, fwname, &hdev->dev); in btintel_download_fw()
2070 if (fw->size < 644) { in btintel_download_fw()
2072 fw->size); in btintel_download_fw()
2073 err = -EBADF; in btintel_download_fw()
2084 if (err == -EALREADY) { in btintel_download_fw()
2110 if (err == -ETIMEDOUT) in btintel_download_fw()
2127 BT_DBG("%s", hdev->name); in btintel_bootloader_setup()
2142 if (ver->fw_variant == 0x23) in btintel_bootloader_setup()
2193 * ibt-<cnvi_top type+cnvi_top step>-<cnvr_top type+cnvr_top step> in btintel_get_fw_name_tlv()
2195 snprintf(fw_name, len, "intel/ibt-%04x-%04x.%s", in btintel_get_fw_name_tlv()
2196 INTEL_CNVX_TOP_PACK_SWAB(INTEL_CNVX_TOP_TYPE(ver->cnvi_top), in btintel_get_fw_name_tlv()
2197 INTEL_CNVX_TOP_STEP(ver->cnvi_top)), in btintel_get_fw_name_tlv()
2198 INTEL_CNVX_TOP_PACK_SWAB(INTEL_CNVX_TOP_TYPE(ver->cnvr_top), in btintel_get_fw_name_tlv()
2199 INTEL_CNVX_TOP_STEP(ver->cnvr_top)), in btintel_get_fw_name_tlv()
2213 return -EINVAL; in btintel_prepare_fw_download_tlv()
2228 if (ver->img_type == 0x03) { in btintel_prepare_fw_download_tlv()
2237 if (!bacmp(&ver->otp_bd_addr, BDADDR_ANY)) { in btintel_prepare_fw_download_tlv()
2239 set_bit(HCI_QUIRK_INVALID_BDADDR, &hdev->quirks); in btintel_prepare_fw_download_tlv()
2244 err = firmware_request_nowarn(&fw, fwname, &hdev->dev); in btintel_prepare_fw_download_tlv()
2260 if (fw->size < 644) { in btintel_prepare_fw_download_tlv()
2262 fw->size); in btintel_prepare_fw_download_tlv()
2263 err = -EBADF; in btintel_prepare_fw_download_tlv()
2273 INTEL_HW_VARIANT(ver->cnvi_bt), in btintel_prepare_fw_download_tlv()
2274 ver->sbe_type); in btintel_prepare_fw_download_tlv()
2276 if (err == -EALREADY) { in btintel_prepare_fw_download_tlv()
2302 if (err == -ETIMEDOUT) in btintel_prepare_fw_download_tlv()
2317 return -EINVAL; in btintel_get_codec_config_data()
2324 return -EINVAL; in btintel_get_codec_config_data()
2329 err = -ENOMEM; in btintel_get_codec_config_data()
2334 switch (codec->id) { in btintel_get_codec_config_data()
2342 err = -EINVAL; in btintel_get_codec_config_data()
2343 bt_dev_err(hdev, "Invalid codec id(%u)", codec->id); in btintel_get_codec_config_data()
2346 /* codec and its capabilities are pre-defined to ids in btintel_get_codec_config_data()
2379 if (skb->len < sizeof(*use_cases)) { in btintel_configure_offload()
2380 err = -EIO; in btintel_configure_offload()
2384 use_cases = (void *)skb->data; in btintel_configure_offload()
2386 if (use_cases->status) { in btintel_configure_offload()
2387 err = -bt_to_errno(skb->data[0]); in btintel_configure_offload()
2391 if (use_cases->preset[0] & 0x03) { in btintel_configure_offload()
2392 hdev->get_data_path_id = btintel_get_data_path_id; in btintel_configure_offload()
2393 hdev->get_codec_config_data = btintel_get_codec_config_data; in btintel_configure_offload()
2408 switch (ver->cnvr_top & 0xFFF) { in btintel_set_ppag()
2413 ver->cnvr_top & 0xFFF); in btintel_set_ppag()
2432 bt_dev_dbg(hdev, "PPAG-BT: ACPI entry not found"); in btintel_set_ppag()
2439 bt_dev_dbg(hdev, "PPAG-BT: Bluetooth domain is disabled in ACPI firmware"); in btintel_set_ppag()
2450 bt_dev_dbg(hdev, "PPAG-BT: EU, China mode are disabled in CB/BIOS"); in btintel_set_ppag()
2461 bt_dev_info(hdev, "PPAG-BT: Enabled (Mode %d)", ppag.mode); in btintel_set_ppag()
2475 ret = -ENODEV; in btintel_acpi_reset_method()
2480 if (p->package.count != 1 || p->type != ACPI_TYPE_PACKAGE) { in btintel_acpi_reset_method()
2482 ret = -EINVAL; in btintel_acpi_reset_method()
2486 ref = &p->package.elements[0]; in btintel_acpi_reset_method()
2487 if (ref->type != ACPI_TYPE_LOCAL_REFERENCE) { in btintel_acpi_reset_method()
2488 bt_dev_err(hdev, "Invalid object type: 0x%x", ref->type); in btintel_acpi_reset_method()
2489 ret = -EINVAL; in btintel_acpi_reset_method()
2493 status = acpi_evaluate_object(ref->reference.handle, "_RST", NULL, NULL); in btintel_acpi_reset_method()
2496 ret = -ENODEV; in btintel_acpi_reset_method()
2529 switch (ver_tlv->cnvi_top & 0xfff) { in btintel_set_dsm_reset_method()
2572 data->acpi_reset_method = btintel_acpi_reset_method; in btintel_set_dsm_reset_method()
2598 if (ver->img_type == 0x03) in btintel_bootloader_setup_tlv()
2647 /* Legacy bootloader devices that supports MSFT Extension */ in btintel_set_msft_opcode()
2653 * extension are using 0xFC1E for VsMsftOpCode. in btintel_set_msft_opcode()
2676 BT_DBG("%s", hdev->name); in btintel_setup_combined()
2719 if (skb->data[0]) { in btintel_setup_combined()
2721 skb->data[0]); in btintel_setup_combined()
2722 err = -EIO; in btintel_setup_combined()
2727 set_bit(HCI_QUIRK_STRICT_DUPLICATE_FILTER, &hdev->quirks); in btintel_setup_combined()
2728 set_bit(HCI_QUIRK_SIMULTANEOUS_DISCOVERY, &hdev->quirks); in btintel_setup_combined()
2729 set_bit(HCI_QUIRK_NON_PERSISTENT_DIAG, &hdev->quirks); in btintel_setup_combined()
2732 hdev->set_quality_report = btintel_set_quality_report; in btintel_setup_combined()
2735 if (skb->len == sizeof(ver) && skb->data[1] == 0x37) { in btintel_setup_combined()
2738 memcpy(&ver, skb->data, sizeof(ver)); in btintel_setup_combined()
2758 * WBS for SdP - For the Legacy ROM products, only SdP in btintel_setup_combined()
2768 &hdev->quirks); in btintel_setup_combined()
2771 &hdev->quirks); in btintel_setup_combined()
2780 set_bit(HCI_QUIRK_VALID_LE_STATES, &hdev->quirks); in btintel_setup_combined()
2788 &hdev->quirks); in btintel_setup_combined()
2791 set_bit(HCI_QUIRK_BROKEN_LE_CODED, &hdev->quirks); in btintel_setup_combined()
2793 /* Setup MSFT Extension support */ in btintel_setup_combined()
2802 err = -EINVAL; in btintel_setup_combined()
2822 err = -EINVAL; in btintel_setup_combined()
2862 set_bit(HCI_QUIRK_WIDEBAND_SPEECH_SUPPORTED, &hdev->quirks); in btintel_setup_combined()
2865 set_bit(HCI_QUIRK_BROKEN_LE_CODED, &hdev->quirks); in btintel_setup_combined()
2868 set_bit(HCI_QUIRK_VALID_LE_STATES, &hdev->quirks); in btintel_setup_combined()
2870 /* Setup MSFT Extension support */ in btintel_setup_combined()
2888 set_bit(HCI_QUIRK_WIDEBAND_SPEECH_SUPPORTED, &hdev->quirks); in btintel_setup_combined()
2891 set_bit(HCI_QUIRK_VALID_LE_STATES, &hdev->quirks); in btintel_setup_combined()
2893 /* Setup MSFT Extension support */ in btintel_setup_combined()
2904 err = -EINVAL; in btintel_setup_combined()
2951 hdev->manufacturer = 2; in btintel_configure_setup()
2952 hdev->setup = btintel_setup_combined; in btintel_configure_setup()
2953 hdev->shutdown = btintel_shutdown_combined; in btintel_configure_setup()
2954 hdev->hw_error = btintel_hw_error; in btintel_configure_setup()
2955 hdev->set_diag = btintel_set_diag_combined; in btintel_configure_setup()
2956 hdev->set_bdaddr = btintel_set_bdaddr; in btintel_configure_setup()
2966 struct intel_tlv *tlv = (void *)&skb->data[5]; in btintel_diagnostics()
2969 if (tlv->type != INTEL_TLV_TYPE_ID) in btintel_diagnostics()
2972 switch (tlv->val[0]) { in btintel_diagnostics()
2978 if (!hci_devcd_init(hdev, skb->len)) { in btintel_diagnostics()
2987 bt_dev_err(hdev, "Invalid exception type %02X", tlv->val[0]); in btintel_diagnostics()
2996 struct hci_event_hdr *hdr = (void *)skb->data; in btintel_recv_event()
2999 if (skb->len > HCI_EVENT_HDR_SIZE && hdr->evt == 0xff && in btintel_recv_event()
3000 hdr->plen > 0) { in btintel_recv_event()
3001 const void *ptr = skb->data + HCI_EVENT_HDR_SIZE + 1; in btintel_recv_event()
3002 unsigned int len = skb->len - HCI_EVENT_HDR_SIZE - 1; in btintel_recv_event()
3005 switch (skb->data[2]) { in btintel_recv_event()
3028 memcmp(&skb->data[2], diagnostics_hdr, in btintel_recv_event()
3058 if (evt->result) in btintel_secure_send_result()
3071 MODULE_FIRMWARE("intel/ibt-11-5.sfi");
3072 MODULE_FIRMWARE("intel/ibt-11-5.ddc");
3073 MODULE_FIRMWARE("intel/ibt-12-16.sfi");
3074 MODULE_FIRMWARE("intel/ibt-12-16.ddc");