Lines Matching refs:hdev
348 struct hci_dev *hdev; member
385 int (*recv_event)(struct hci_dev *hdev, struct sk_buff *skb);
388 int (*setup_on_usb)(struct hci_dev *hdev);
453 data->recv_event(data->hdev, skb); in btusb_recv_intr()
510 hci_recv_frame(data->hdev, skb); in btusb_recv_bulk()
565 hci_recv_frame(data->hdev, skb); in btusb_recv_isoc()
578 struct hci_dev *hdev = urb->context; in btusb_intr_complete() local
579 struct btusb_data *data = hci_get_drvdata(hdev); in btusb_intr_complete()
582 BT_DBG("%s urb %p status %d count %d", hdev->name, urb, urb->status, in btusb_intr_complete()
585 if (!test_bit(HCI_RUNNING, &hdev->flags)) in btusb_intr_complete()
589 hdev->stat.byte_rx += urb->actual_length; in btusb_intr_complete()
593 BT_ERR("%s corrupted event packet", hdev->name); in btusb_intr_complete()
594 hdev->stat.err_rx++; in btusb_intr_complete()
613 hdev->name, urb, -err); in btusb_intr_complete()
618 static int btusb_submit_intr_urb(struct hci_dev *hdev, gfp_t mem_flags) in btusb_submit_intr_urb() argument
620 struct btusb_data *data = hci_get_drvdata(hdev); in btusb_submit_intr_urb()
626 BT_DBG("%s", hdev->name); in btusb_submit_intr_urb()
646 btusb_intr_complete, hdev, data->intr_ep->bInterval); in btusb_submit_intr_urb()
656 hdev->name, urb, -err); in btusb_submit_intr_urb()
667 struct hci_dev *hdev = urb->context; in btusb_bulk_complete() local
668 struct btusb_data *data = hci_get_drvdata(hdev); in btusb_bulk_complete()
671 BT_DBG("%s urb %p status %d count %d", hdev->name, urb, urb->status, in btusb_bulk_complete()
674 if (!test_bit(HCI_RUNNING, &hdev->flags)) in btusb_bulk_complete()
678 hdev->stat.byte_rx += urb->actual_length; in btusb_bulk_complete()
682 BT_ERR("%s corrupted ACL packet", hdev->name); in btusb_bulk_complete()
683 hdev->stat.err_rx++; in btusb_bulk_complete()
702 hdev->name, urb, -err); in btusb_bulk_complete()
707 static int btusb_submit_bulk_urb(struct hci_dev *hdev, gfp_t mem_flags) in btusb_submit_bulk_urb() argument
709 struct btusb_data *data = hci_get_drvdata(hdev); in btusb_submit_bulk_urb()
715 BT_DBG("%s", hdev->name); in btusb_submit_bulk_urb()
733 btusb_bulk_complete, hdev); in btusb_submit_bulk_urb()
744 hdev->name, urb, -err); in btusb_submit_bulk_urb()
755 struct hci_dev *hdev = urb->context; in btusb_isoc_complete() local
756 struct btusb_data *data = hci_get_drvdata(hdev); in btusb_isoc_complete()
759 BT_DBG("%s urb %p status %d count %d", hdev->name, urb, urb->status, in btusb_isoc_complete()
762 if (!test_bit(HCI_RUNNING, &hdev->flags)) in btusb_isoc_complete()
773 hdev->stat.byte_rx += length; in btusb_isoc_complete()
777 BT_ERR("%s corrupted SCO packet", hdev->name); in btusb_isoc_complete()
778 hdev->stat.err_rx++; in btusb_isoc_complete()
797 hdev->name, urb, -err); in btusb_isoc_complete()
823 static int btusb_submit_isoc_urb(struct hci_dev *hdev, gfp_t mem_flags) in btusb_submit_isoc_urb() argument
825 struct btusb_data *data = hci_get_drvdata(hdev); in btusb_submit_isoc_urb()
831 BT_DBG("%s", hdev->name); in btusb_submit_isoc_urb()
852 hdev, data->isoc_rx_ep->bInterval); in btusb_submit_isoc_urb()
865 hdev->name, urb, -err); in btusb_submit_isoc_urb()
877 struct hci_dev *hdev = (struct hci_dev *)skb->dev; in btusb_tx_complete() local
878 struct btusb_data *data = hci_get_drvdata(hdev); in btusb_tx_complete()
880 BT_DBG("%s urb %p status %d count %d", hdev->name, urb, urb->status, in btusb_tx_complete()
883 if (!test_bit(HCI_RUNNING, &hdev->flags)) in btusb_tx_complete()
887 hdev->stat.byte_tx += urb->transfer_buffer_length; in btusb_tx_complete()
889 hdev->stat.err_tx++; in btusb_tx_complete()
904 struct hci_dev *hdev = (struct hci_dev *)skb->dev; in btusb_isoc_tx_complete() local
906 BT_DBG("%s urb %p status %d count %d", hdev->name, urb, urb->status, in btusb_isoc_tx_complete()
909 if (!test_bit(HCI_RUNNING, &hdev->flags)) in btusb_isoc_tx_complete()
913 hdev->stat.byte_tx += urb->transfer_buffer_length; in btusb_isoc_tx_complete()
915 hdev->stat.err_tx++; in btusb_isoc_tx_complete()
923 static int btusb_open(struct hci_dev *hdev) in btusb_open() argument
925 struct btusb_data *data = hci_get_drvdata(hdev); in btusb_open()
928 BT_DBG("%s", hdev->name); in btusb_open()
934 err = data->setup_on_usb(hdev); in btusb_open()
945 if (test_and_set_bit(HCI_RUNNING, &hdev->flags)) in btusb_open()
951 err = btusb_submit_intr_urb(hdev, GFP_KERNEL); in btusb_open()
955 err = btusb_submit_bulk_urb(hdev, GFP_KERNEL); in btusb_open()
962 btusb_submit_bulk_urb(hdev, GFP_KERNEL); in btusb_open()
970 clear_bit(HCI_RUNNING, &hdev->flags); in btusb_open()
982 static int btusb_close(struct hci_dev *hdev) in btusb_close() argument
984 struct btusb_data *data = hci_get_drvdata(hdev); in btusb_close()
987 BT_DBG("%s", hdev->name); in btusb_close()
989 if (!test_and_clear_bit(HCI_RUNNING, &hdev->flags)) in btusb_close()
1014 static int btusb_flush(struct hci_dev *hdev) in btusb_flush() argument
1016 struct btusb_data *data = hci_get_drvdata(hdev); in btusb_flush()
1018 BT_DBG("%s", hdev->name); in btusb_flush()
1026 static struct urb *alloc_ctrl_urb(struct hci_dev *hdev, struct sk_buff *skb) in alloc_ctrl_urb() argument
1028 struct btusb_data *data = hci_get_drvdata(hdev); in alloc_ctrl_urb()
1054 skb->dev = (void *)hdev; in alloc_ctrl_urb()
1059 static struct urb *alloc_bulk_urb(struct hci_dev *hdev, struct sk_buff *skb) in alloc_bulk_urb() argument
1061 struct btusb_data *data = hci_get_drvdata(hdev); in alloc_bulk_urb()
1077 skb->dev = (void *)hdev; in alloc_bulk_urb()
1082 static struct urb *alloc_isoc_urb(struct hci_dev *hdev, struct sk_buff *skb) in alloc_isoc_urb() argument
1084 struct btusb_data *data = hci_get_drvdata(hdev); in alloc_isoc_urb()
1106 skb->dev = (void *)hdev; in alloc_isoc_urb()
1111 static int submit_tx_urb(struct hci_dev *hdev, struct urb *urb) in submit_tx_urb() argument
1113 struct btusb_data *data = hci_get_drvdata(hdev); in submit_tx_urb()
1122 hdev->name, urb, -err); in submit_tx_urb()
1133 static int submit_or_queue_tx_urb(struct hci_dev *hdev, struct urb *urb) in submit_or_queue_tx_urb() argument
1135 struct btusb_data *data = hci_get_drvdata(hdev); in submit_or_queue_tx_urb()
1146 return submit_tx_urb(hdev, urb); in submit_or_queue_tx_urb()
1155 static int btusb_send_frame(struct hci_dev *hdev, struct sk_buff *skb) in btusb_send_frame() argument
1159 BT_DBG("%s", hdev->name); in btusb_send_frame()
1161 if (!test_bit(HCI_RUNNING, &hdev->flags)) in btusb_send_frame()
1166 urb = alloc_ctrl_urb(hdev, skb); in btusb_send_frame()
1170 hdev->stat.cmd_tx++; in btusb_send_frame()
1171 return submit_or_queue_tx_urb(hdev, urb); in btusb_send_frame()
1174 urb = alloc_bulk_urb(hdev, skb); in btusb_send_frame()
1178 hdev->stat.acl_tx++; in btusb_send_frame()
1179 return submit_or_queue_tx_urb(hdev, urb); in btusb_send_frame()
1182 if (hci_conn_num(hdev, SCO_LINK) < 1) in btusb_send_frame()
1185 urb = alloc_isoc_urb(hdev, skb); in btusb_send_frame()
1189 hdev->stat.sco_tx++; in btusb_send_frame()
1190 return submit_tx_urb(hdev, urb); in btusb_send_frame()
1196 static void btusb_notify(struct hci_dev *hdev, unsigned int evt) in btusb_notify() argument
1198 struct btusb_data *data = hci_get_drvdata(hdev); in btusb_notify()
1200 BT_DBG("%s evt %d", hdev->name, evt); in btusb_notify()
1202 if (hci_conn_num(hdev, SCO_LINK) != data->sco_num) { in btusb_notify()
1203 data->sco_num = hci_conn_num(hdev, SCO_LINK); in btusb_notify()
1208 static inline int __set_isoc_interface(struct hci_dev *hdev, int altsetting) in __set_isoc_interface() argument
1210 struct btusb_data *data = hci_get_drvdata(hdev); in __set_isoc_interface()
1220 BT_ERR("%s setting interface failed (%d)", hdev->name, -err); in __set_isoc_interface()
1244 BT_ERR("%s invalid SCO descriptors", hdev->name); in __set_isoc_interface()
1254 struct hci_dev *hdev = data->hdev; in btusb_work() local
1270 if (hdev->voice_setting & 0x0020) { in btusb_work()
1282 if (__set_isoc_interface(hdev, new_alts) < 0) in btusb_work()
1287 if (btusb_submit_isoc_urb(hdev, GFP_KERNEL) < 0) in btusb_work()
1290 btusb_submit_isoc_urb(hdev, GFP_KERNEL); in btusb_work()
1296 __set_isoc_interface(hdev, 0); in btusb_work()
1314 static struct sk_buff *btusb_read_local_version(struct hci_dev *hdev) in btusb_read_local_version() argument
1318 skb = __hci_cmd_sync(hdev, HCI_OP_READ_LOCAL_VERSION, 0, NULL, in btusb_read_local_version()
1322 hdev->name, PTR_ERR(skb)); in btusb_read_local_version()
1328 hdev->name); in btusb_read_local_version()
1336 static int btusb_setup_bcm92035(struct hci_dev *hdev) in btusb_setup_bcm92035() argument
1341 BT_DBG("%s", hdev->name); in btusb_setup_bcm92035()
1343 skb = __hci_cmd_sync(hdev, 0xfc3b, 1, &val, HCI_INIT_TIMEOUT); in btusb_setup_bcm92035()
1352 static int btusb_setup_csr(struct hci_dev *hdev) in btusb_setup_csr() argument
1358 BT_DBG("%s", hdev->name); in btusb_setup_csr()
1360 skb = btusb_read_local_version(hdev); in btusb_setup_csr()
1371 clear_bit(HCI_QUIRK_RESET_ON_CLOSE, &hdev->quirks); in btusb_setup_csr()
1377 &hdev->quirks); in btusb_setup_csr()
1418 static int rtl_read_rom_version(struct hci_dev *hdev, u8 *version) in rtl_read_rom_version() argument
1425 skb = __hci_cmd_sync(hdev, 0xfc6d, 0, NULL, HCI_INIT_TIMEOUT); in rtl_read_rom_version()
1428 hdev->name, PTR_ERR(skb)); in rtl_read_rom_version()
1433 BT_ERR("%s: RTL version event length mismatch", hdev->name); in rtl_read_rom_version()
1440 hdev->name, rom_version->status, rom_version->version); in rtl_read_rom_version()
1450 static int rtl8723b_parse_firmware(struct hci_dev *hdev, u16 lmp_subver, in rtl8723b_parse_firmware() argument
1472 ret = rtl_read_rom_version(hdev, &rom_version); in rtl8723b_parse_firmware()
1482 BT_ERR("%s: extension section signature mismatch", hdev->name); in rtl8723b_parse_firmware()
1504 hdev->name); in rtl8723b_parse_firmware()
1517 BT_ERR("%s: failed to find version instruction", hdev->name); in rtl8723b_parse_firmware()
1522 BT_ERR("%s: unknown project id %d", hdev->name, project_id); in rtl8723b_parse_firmware()
1527 BT_ERR("%s: firmware is for %x but this is a %x", hdev->name, in rtl8723b_parse_firmware()
1534 BT_ERR("%s: bad EPATCH signature", hdev->name); in rtl8723b_parse_firmware()
1569 hdev->name, rom_version); in rtl8723b_parse_firmware()
1592 static int rtl_download_firmware(struct hci_dev *hdev, in rtl_download_firmware() argument
1619 skb = __hci_cmd_sync(hdev, 0xfc20, frag_len + 1, dl_cmd, in rtl_download_firmware()
1623 hdev->name, PTR_ERR(skb)); in rtl_download_firmware()
1630 hdev->name); in rtl_download_firmware()
1652 static int btusb_setup_rtl8723a(struct hci_dev *hdev) in btusb_setup_rtl8723a() argument
1654 struct btusb_data *data = dev_get_drvdata(&hdev->dev); in btusb_setup_rtl8723a()
1659 BT_INFO("%s: rtl: loading rtl_bt/rtl8723a_fw.bin", hdev->name); in btusb_setup_rtl8723a()
1662 BT_ERR("%s: Failed to load rtl_bt/rtl8723a_fw.bin", hdev->name); in btusb_setup_rtl8723a()
1675 BT_ERR("%s: unexpected EPATCH signature!", hdev->name); in btusb_setup_rtl8723a()
1680 ret = rtl_download_firmware(hdev, fw->data, fw->size); in btusb_setup_rtl8723a()
1687 static int btusb_setup_rtl8723b(struct hci_dev *hdev, u16 lmp_subver, in btusb_setup_rtl8723b() argument
1690 struct btusb_data *data = dev_get_drvdata(&hdev->dev); in btusb_setup_rtl8723b()
1696 BT_INFO("%s: rtl: loading %s", hdev->name, fw_name); in btusb_setup_rtl8723b()
1699 BT_ERR("%s: Failed to load %s", hdev->name, fw_name); in btusb_setup_rtl8723b()
1703 ret = rtl8723b_parse_firmware(hdev, lmp_subver, fw, &fw_data); in btusb_setup_rtl8723b()
1707 ret = rtl_download_firmware(hdev, fw_data, ret); in btusb_setup_rtl8723b()
1717 static int btusb_setup_realtek(struct hci_dev *hdev) in btusb_setup_realtek() argument
1723 skb = btusb_read_local_version(hdev); in btusb_setup_realtek()
1729 "lmp_subver=%04x", hdev->name, resp->hci_ver, resp->hci_rev, in btusb_setup_realtek()
1744 return btusb_setup_rtl8723a(hdev); in btusb_setup_realtek()
1746 return btusb_setup_rtl8723b(hdev, lmp_subver, in btusb_setup_realtek()
1749 return btusb_setup_rtl8723b(hdev, lmp_subver, in btusb_setup_realtek()
1752 return btusb_setup_rtl8723b(hdev, lmp_subver, in btusb_setup_realtek()
1760 static const struct firmware *btusb_setup_intel_get_fw(struct hci_dev *hdev, in btusb_setup_intel_get_fw() argument
1773 ret = request_firmware(&fw, fwname, &hdev->dev); in btusb_setup_intel_get_fw()
1777 hdev->name, ret); in btusb_setup_intel_get_fw()
1782 hdev->name, fwname, ret); in btusb_setup_intel_get_fw()
1789 if (request_firmware(&fw, fwname, &hdev->dev) < 0) { in btusb_setup_intel_get_fw()
1791 hdev->name, fwname); in btusb_setup_intel_get_fw()
1796 BT_INFO("%s: Intel Bluetooth firmware file: %s", hdev->name, fwname); in btusb_setup_intel_get_fw()
1801 static int btusb_setup_intel_patching(struct hci_dev *hdev, in btusb_setup_intel_patching() argument
1820 BT_ERR("%s Intel fw corrupted: invalid cmd read", hdev->name); in btusb_setup_intel_patching()
1834 BT_ERR("%s Intel fw corrupted: invalid cmd len", hdev->name); in btusb_setup_intel_patching()
1868 hdev->name); in btusb_setup_intel_patching()
1882 BT_ERR("%s Intel fw corrupted: invalid evt read", hdev->name); in btusb_setup_intel_patching()
1886 skb = __hci_cmd_sync_ev(hdev, le16_to_cpu(cmd->opcode), cmd->plen, in btusb_setup_intel_patching()
1890 hdev->name, cmd->opcode, PTR_ERR(skb)); in btusb_setup_intel_patching()
1899 BT_ERR("%s mismatch event length (opcode 0x%4.4x)", hdev->name, in btusb_setup_intel_patching()
1907 hdev->name, le16_to_cpu(cmd->opcode)); in btusb_setup_intel_patching()
1916 static int btusb_setup_intel(struct hci_dev *hdev) in btusb_setup_intel() argument
1929 BT_DBG("%s", hdev->name); in btusb_setup_intel()
1939 skb = __hci_cmd_sync(hdev, HCI_OP_RESET, 0, NULL, HCI_INIT_TIMEOUT); in btusb_setup_intel()
1942 hdev->name, PTR_ERR(skb)); in btusb_setup_intel()
1953 skb = __hci_cmd_sync(hdev, 0xfc05, 0, NULL, HCI_INIT_TIMEOUT); in btusb_setup_intel()
1956 hdev->name, PTR_ERR(skb)); in btusb_setup_intel()
1961 BT_ERR("%s Intel version event length mismatch", hdev->name); in btusb_setup_intel()
1968 BT_ERR("%s Intel fw version event failed (%02x)", hdev->name, in btusb_setup_intel()
1975 hdev->name, ver->hw_platform, ver->hw_variant, in btusb_setup_intel()
1986 hdev->name, ver->fw_patch_num); in btusb_setup_intel()
1988 btintel_check_bdaddr(hdev); in btusb_setup_intel()
1998 fw = btusb_setup_intel_get_fw(hdev, ver); in btusb_setup_intel()
2001 btintel_check_bdaddr(hdev); in btusb_setup_intel()
2014 skb = __hci_cmd_sync(hdev, 0xfc11, 2, mfg_enable, HCI_INIT_TIMEOUT); in btusb_setup_intel()
2017 hdev->name, PTR_ERR(skb)); in btusb_setup_intel()
2026 hdev->name, evt_status); in btusb_setup_intel()
2058 ret = btusb_setup_intel_patching(hdev, fw, &fw_ptr, in btusb_setup_intel()
2072 skb = __hci_cmd_sync(hdev, 0xfc11, sizeof(mfg_reset_activate), in btusb_setup_intel()
2076 hdev->name, PTR_ERR(skb)); in btusb_setup_intel()
2082 hdev->name); in btusb_setup_intel()
2084 btintel_check_bdaddr(hdev); in btusb_setup_intel()
2089 skb = __hci_cmd_sync(hdev, 0xfc11, sizeof(mfg_disable), mfg_disable, in btusb_setup_intel()
2093 hdev->name, PTR_ERR(skb)); in btusb_setup_intel()
2098 BT_INFO("%s: Intel Bluetooth firmware patch completed", hdev->name); in btusb_setup_intel()
2100 btintel_check_bdaddr(hdev); in btusb_setup_intel()
2109 skb = __hci_cmd_sync(hdev, 0xfc11, sizeof(mfg_reset_deactivate), in btusb_setup_intel()
2113 hdev->name, PTR_ERR(skb)); in btusb_setup_intel()
2119 hdev->name); in btusb_setup_intel()
2121 btintel_check_bdaddr(hdev); in btusb_setup_intel()
2125 static int inject_cmd_complete(struct hci_dev *hdev, __u16 opcode) in inject_cmd_complete() argument
2147 return hci_recv_frame(hdev, skb); in inject_cmd_complete()
2195 static int btusb_recv_event_intel(struct hci_dev *hdev, struct sk_buff *skb) in btusb_recv_event_intel() argument
2197 struct btusb_data *data = hci_get_drvdata(hdev); in btusb_recv_event_intel()
2227 return hci_recv_frame(hdev, skb); in btusb_recv_event_intel()
2230 static int btusb_send_frame_intel(struct hci_dev *hdev, struct sk_buff *skb) in btusb_send_frame_intel() argument
2232 struct btusb_data *data = hci_get_drvdata(hdev); in btusb_send_frame_intel()
2235 BT_DBG("%s", hdev->name); in btusb_send_frame_intel()
2237 if (!test_bit(HCI_RUNNING, &hdev->flags)) in btusb_send_frame_intel()
2251 urb = alloc_bulk_urb(hdev, skb); in btusb_send_frame_intel()
2253 urb = alloc_ctrl_urb(hdev, skb); in btusb_send_frame_intel()
2261 inject_cmd_complete(hdev, opcode); in btusb_send_frame_intel()
2263 urb = alloc_ctrl_urb(hdev, skb); in btusb_send_frame_intel()
2268 hdev->stat.cmd_tx++; in btusb_send_frame_intel()
2269 return submit_or_queue_tx_urb(hdev, urb); in btusb_send_frame_intel()
2272 urb = alloc_bulk_urb(hdev, skb); in btusb_send_frame_intel()
2276 hdev->stat.acl_tx++; in btusb_send_frame_intel()
2277 return submit_or_queue_tx_urb(hdev, urb); in btusb_send_frame_intel()
2280 if (hci_conn_num(hdev, SCO_LINK) < 1) in btusb_send_frame_intel()
2283 urb = alloc_isoc_urb(hdev, skb); in btusb_send_frame_intel()
2287 hdev->stat.sco_tx++; in btusb_send_frame_intel()
2288 return submit_tx_urb(hdev, urb); in btusb_send_frame_intel()
2294 static int btusb_intel_secure_send(struct hci_dev *hdev, u8 fragment_type, in btusb_intel_secure_send() argument
2304 skb = __hci_cmd_sync(hdev, 0xfc09, fragment_len + 1, in btusb_intel_secure_send()
2318 static void btusb_intel_version_info(struct hci_dev *hdev, in btusb_intel_version_info() argument
2334 BT_INFO("%s: %s revision %u.%u build %u week %u %u", hdev->name, in btusb_intel_version_info()
2339 static int btusb_setup_intel_new(struct hci_dev *hdev) in btusb_setup_intel_new() argument
2343 struct btusb_data *data = hci_get_drvdata(hdev); in btusb_setup_intel_new()
2355 BT_DBG("%s", hdev->name); in btusb_setup_intel_new()
2363 skb = __hci_cmd_sync(hdev, 0xfc05, 0, NULL, HCI_INIT_TIMEOUT); in btusb_setup_intel_new()
2366 hdev->name, PTR_ERR(skb)); in btusb_setup_intel_new()
2371 BT_ERR("%s: Intel version event size mismatch", hdev->name); in btusb_setup_intel_new()
2379 hdev->name, ver->status); in btusb_setup_intel_new()
2390 hdev->name, ver->hw_platform); in btusb_setup_intel_new()
2402 hdev->name, ver->hw_variant); in btusb_setup_intel_new()
2407 btusb_intel_version_info(hdev, ver); in btusb_setup_intel_new()
2425 btintel_check_bdaddr(hdev); in btusb_setup_intel_new()
2434 hdev->name, ver->fw_variant); in btusb_setup_intel_new()
2444 skb = __hci_cmd_sync(hdev, 0xfc0d, 0, NULL, HCI_INIT_TIMEOUT); in btusb_setup_intel_new()
2447 hdev->name, PTR_ERR(skb)); in btusb_setup_intel_new()
2452 BT_ERR("%s: Intel boot parameters size mismatch", hdev->name); in btusb_setup_intel_new()
2460 hdev->name, params->status); in btusb_setup_intel_new()
2466 BT_INFO("%s: Device revision is %u", hdev->name, in btusb_setup_intel_new()
2469 BT_INFO("%s: Secure boot is %s", hdev->name, in btusb_setup_intel_new()
2472 BT_INFO("%s: Minimum firmware build %u week %u %u", hdev->name, in btusb_setup_intel_new()
2482 hdev->name, params->limited_cce); in btusb_setup_intel_new()
2491 BT_INFO("%s: No device address configured", hdev->name); in btusb_setup_intel_new()
2492 set_bit(HCI_QUIRK_INVALID_BDADDR, &hdev->quirks); in btusb_setup_intel_new()
2504 err = request_firmware(&fw, fwname, &hdev->dev); in btusb_setup_intel_new()
2507 hdev->name, err); in btusb_setup_intel_new()
2512 BT_INFO("%s: Found device firmware: %s", hdev->name, fwname); in btusb_setup_intel_new()
2518 hdev->name, fw->size); in btusb_setup_intel_new()
2528 err = btusb_intel_secure_send(hdev, 0x00, 128, fw->data); in btusb_setup_intel_new()
2531 hdev->name, err); in btusb_setup_intel_new()
2538 err = btusb_intel_secure_send(hdev, 0x03, 256, fw->data + 128); in btusb_setup_intel_new()
2541 hdev->name, err); in btusb_setup_intel_new()
2548 err = btusb_intel_secure_send(hdev, 0x02, 256, fw->data + 388); in btusb_setup_intel_new()
2551 hdev->name, err); in btusb_setup_intel_new()
2572 err = btusb_intel_secure_send(hdev, 0x01, frag_len, in btusb_setup_intel_new()
2576 hdev->name, err); in btusb_setup_intel_new()
2587 BT_INFO("%s: Waiting for firmware download to complete", hdev->name); in btusb_setup_intel_new()
2604 BT_ERR("%s: Firmware loading interrupted", hdev->name); in btusb_setup_intel_new()
2610 BT_ERR("%s: Firmware loading timeout", hdev->name); in btusb_setup_intel_new()
2616 BT_ERR("%s: Firmware loading failed", hdev->name); in btusb_setup_intel_new()
2625 BT_INFO("%s: Firmware loaded in %llu usecs", hdev->name, duration); in btusb_setup_intel_new()
2637 skb = __hci_cmd_sync(hdev, 0xfc01, sizeof(reset_param), reset_param, in btusb_setup_intel_new()
2651 BT_INFO("%s: Waiting for device to boot", hdev->name); in btusb_setup_intel_new()
2658 BT_ERR("%s: Device boot interrupted", hdev->name); in btusb_setup_intel_new()
2663 BT_ERR("%s: Device boot timeout", hdev->name); in btusb_setup_intel_new()
2671 BT_INFO("%s: Device booted in %llu usecs", hdev->name, duration); in btusb_setup_intel_new()
2678 static void btusb_hw_error_intel(struct hci_dev *hdev, u8 code) in btusb_hw_error_intel() argument
2683 BT_ERR("%s: Hardware error 0x%2.2x", hdev->name, code); in btusb_hw_error_intel()
2685 skb = __hci_cmd_sync(hdev, HCI_OP_RESET, 0, NULL, HCI_INIT_TIMEOUT); in btusb_hw_error_intel()
2688 hdev->name, PTR_ERR(skb)); in btusb_hw_error_intel()
2693 skb = __hci_cmd_sync(hdev, 0xfc22, 1, &type, HCI_INIT_TIMEOUT); in btusb_hw_error_intel()
2696 hdev->name, PTR_ERR(skb)); in btusb_hw_error_intel()
2701 BT_ERR("%s: Exception info size mismatch", hdev->name); in btusb_hw_error_intel()
2708 hdev->name, skb->data[0]); in btusb_hw_error_intel()
2713 BT_ERR("%s: Exception info %s", hdev->name, (char *)(skb->data + 1)); in btusb_hw_error_intel()
2718 static int btusb_shutdown_intel(struct hci_dev *hdev) in btusb_shutdown_intel() argument
2727 skb = __hci_cmd_sync(hdev, 0xfc3f, 0, NULL, HCI_INIT_TIMEOUT); in btusb_shutdown_intel()
2731 hdev->name, ret); in btusb_shutdown_intel()
2739 static int btusb_set_bdaddr_marvell(struct hci_dev *hdev, in btusb_set_bdaddr_marvell() argument
2750 skb = __hci_cmd_sync(hdev, 0xfc22, sizeof(buf), buf, HCI_INIT_TIMEOUT); in btusb_set_bdaddr_marvell()
2754 hdev->name, ret); in btusb_set_bdaddr_marvell()
2762 static int btusb_set_bdaddr_ath3012(struct hci_dev *hdev, in btusb_set_bdaddr_ath3012() argument
2775 skb = __hci_cmd_sync(hdev, 0xfc0b, sizeof(buf), buf, HCI_INIT_TIMEOUT); in btusb_set_bdaddr_ath3012()
2779 hdev->name, ret); in btusb_set_bdaddr_ath3012()
2825 static int btusb_qca_send_vendor_req(struct hci_dev *hdev, u8 request, in btusb_qca_send_vendor_req() argument
2828 struct btusb_data *btdata = hci_get_drvdata(hdev); in btusb_qca_send_vendor_req()
2844 BT_ERR("%s: Failed to access otp area (%d)", hdev->name, err); in btusb_qca_send_vendor_req()
2856 static int btusb_setup_qca_download_fw(struct hci_dev *hdev, in btusb_setup_qca_download_fw() argument
2860 struct btusb_data *btdata = hci_get_drvdata(hdev); in btusb_setup_qca_download_fw()
2884 BT_ERR("%s: Failed to send headers (%d)", hdev->name, err); in btusb_setup_qca_download_fw()
2901 hdev->name, sent, firmware->size, err); in btusb_setup_qca_download_fw()
2906 BT_ERR("%s: Failed to get bulk buffer", hdev->name); in btusb_setup_qca_download_fw()
2920 static int btusb_setup_qca_load_rampatch(struct hci_dev *hdev, in btusb_setup_qca_load_rampatch() argument
2936 err = request_firmware(&fw, fwname, &hdev->dev); in btusb_setup_qca_load_rampatch()
2939 hdev->name, fwname, err); in btusb_setup_qca_load_rampatch()
2943 BT_INFO("%s: using rampatch file: %s", hdev->name, fwname); in btusb_setup_qca_load_rampatch()
2950 "build 0x%x", hdev->name, rver_rom, rver_patch, ver_rom, in btusb_setup_qca_load_rampatch()
2955 hdev->name); in btusb_setup_qca_load_rampatch()
2960 err = btusb_setup_qca_download_fw(hdev, fw, info->rampatch_hdr); in btusb_setup_qca_load_rampatch()
2968 static int btusb_setup_qca_load_nvm(struct hci_dev *hdev, in btusb_setup_qca_load_nvm() argument
2979 err = request_firmware(&fw, fwname, &hdev->dev); in btusb_setup_qca_load_nvm()
2982 hdev->name, fwname, err); in btusb_setup_qca_load_nvm()
2986 BT_INFO("%s: using NVM file: %s", hdev->name, fwname); in btusb_setup_qca_load_nvm()
2988 err = btusb_setup_qca_download_fw(hdev, fw, info->nvm_hdr); in btusb_setup_qca_load_nvm()
2995 static int btusb_setup_qca(struct hci_dev *hdev) in btusb_setup_qca() argument
3003 err = btusb_qca_send_vendor_req(hdev, QCA_GET_TARGET_VERSION, &ver, in btusb_setup_qca()
3014 BT_ERR("%s: don't support firmware rome 0x%x", hdev->name, in btusb_setup_qca()
3019 err = btusb_qca_send_vendor_req(hdev, QCA_CHECK_STATUS, &status, in btusb_setup_qca()
3025 err = btusb_setup_qca_load_rampatch(hdev, &ver, info); in btusb_setup_qca()
3031 err = btusb_setup_qca_load_nvm(hdev, &ver, info); in btusb_setup_qca()
3044 struct hci_dev *hdev; in btusb_probe() local
3130 hdev = hci_alloc_dev(); in btusb_probe()
3131 if (!hdev) in btusb_probe()
3134 hdev->bus = HCI_USB; in btusb_probe()
3135 hci_set_drvdata(hdev, data); in btusb_probe()
3138 hdev->dev_type = HCI_AMP; in btusb_probe()
3140 hdev->dev_type = HCI_BREDR; in btusb_probe()
3142 data->hdev = hdev; in btusb_probe()
3144 SET_HCIDEV_DEV(hdev, &intf->dev); in btusb_probe()
3146 hdev->open = btusb_open; in btusb_probe()
3147 hdev->close = btusb_close; in btusb_probe()
3148 hdev->flush = btusb_flush; in btusb_probe()
3149 hdev->send = btusb_send_frame; in btusb_probe()
3150 hdev->notify = btusb_notify; in btusb_probe()
3153 hdev->setup = btusb_setup_bcm92035; in btusb_probe()
3157 hdev->setup = btbcm_setup_patchram; in btusb_probe()
3158 hdev->set_bdaddr = btbcm_set_bdaddr; in btusb_probe()
3162 hdev->setup = btbcm_setup_apple; in btusb_probe()
3166 hdev->setup = btusb_setup_intel; in btusb_probe()
3167 hdev->shutdown = btusb_shutdown_intel; in btusb_probe()
3168 hdev->set_bdaddr = btintel_set_bdaddr; in btusb_probe()
3169 set_bit(HCI_QUIRK_STRICT_DUPLICATE_FILTER, &hdev->quirks); in btusb_probe()
3170 set_bit(HCI_QUIRK_SIMULTANEOUS_DISCOVERY, &hdev->quirks); in btusb_probe()
3174 hdev->send = btusb_send_frame_intel; in btusb_probe()
3175 hdev->setup = btusb_setup_intel_new; in btusb_probe()
3176 hdev->hw_error = btusb_hw_error_intel; in btusb_probe()
3177 hdev->set_bdaddr = btintel_set_bdaddr; in btusb_probe()
3178 set_bit(HCI_QUIRK_STRICT_DUPLICATE_FILTER, &hdev->quirks); in btusb_probe()
3182 hdev->set_bdaddr = btusb_set_bdaddr_marvell; in btusb_probe()
3185 set_bit(HCI_QUIRK_FIXUP_INQUIRY_MODE, &hdev->quirks); in btusb_probe()
3186 set_bit(HCI_QUIRK_BROKEN_LOCAL_COMMANDS, &hdev->quirks); in btusb_probe()
3190 set_bit(HCI_QUIRK_RAW_DEVICE, &hdev->quirks); in btusb_probe()
3193 hdev->set_bdaddr = btusb_set_bdaddr_ath3012; in btusb_probe()
3194 set_bit(HCI_QUIRK_SIMULTANEOUS_DISCOVERY, &hdev->quirks); in btusb_probe()
3195 set_bit(HCI_QUIRK_STRICT_DUPLICATE_FILTER, &hdev->quirks); in btusb_probe()
3200 hdev->set_bdaddr = btusb_set_bdaddr_ath3012; in btusb_probe()
3204 hdev->setup = btusb_setup_realtek; in btusb_probe()
3215 set_bit(HCI_QUIRK_RESET_ON_CLOSE, &hdev->quirks); in btusb_probe()
3219 set_bit(HCI_QUIRK_FIXUP_BUFFER_SIZE, &hdev->quirks); in btusb_probe()
3227 set_bit(HCI_QUIRK_RESET_ON_CLOSE, &hdev->quirks); in btusb_probe()
3236 set_bit(HCI_QUIRK_RESET_ON_CLOSE, &hdev->quirks); in btusb_probe()
3240 hdev->setup = btusb_setup_csr; in btusb_probe()
3242 set_bit(HCI_QUIRK_SIMULTANEOUS_DISCOVERY, &hdev->quirks); in btusb_probe()
3250 set_bit(HCI_QUIRK_RAW_DEVICE, &hdev->quirks); in btusb_probe()
3260 hci_free_dev(hdev); in btusb_probe()
3269 hci_free_dev(hdev); in btusb_probe()
3274 err = hci_register_dev(hdev); in btusb_probe()
3276 hci_free_dev(hdev); in btusb_probe()
3288 struct hci_dev *hdev; in btusb_disconnect() local
3295 hdev = data->hdev; in btusb_disconnect()
3301 hci_unregister_dev(hdev); in btusb_disconnect()
3308 hci_free_dev(hdev); in btusb_disconnect()
3357 struct hci_dev *hdev = data->hdev; in btusb_resume() local
3365 if (!test_bit(HCI_RUNNING, &hdev->flags)) in btusb_resume()
3369 err = btusb_submit_intr_urb(hdev, GFP_NOIO); in btusb_resume()
3377 err = btusb_submit_bulk_urb(hdev, GFP_NOIO); in btusb_resume()
3383 btusb_submit_bulk_urb(hdev, GFP_NOIO); in btusb_resume()
3387 if (btusb_submit_isoc_urb(hdev, GFP_NOIO) < 0) in btusb_resume()
3390 btusb_submit_isoc_urb(hdev, GFP_NOIO); in btusb_resume()