Lines Matching full:data

106 static int btintel_pcie_setup_dbgc(struct btintel_pcie_data *data)  in btintel_pcie_setup_dbgc()  argument
112 data->dbgc.count = BTINTEL_PCIE_DBGC_BUFFER_COUNT; in btintel_pcie_setup_dbgc()
113 data->dbgc.bufs = devm_kcalloc(&data->pdev->dev, data->dbgc.count, in btintel_pcie_setup_dbgc()
115 if (!data->dbgc.bufs) in btintel_pcie_setup_dbgc()
118 data->dbgc.buf_v_addr = dmam_alloc_coherent(&data->pdev->dev, in btintel_pcie_setup_dbgc()
119 data->dbgc.count * in btintel_pcie_setup_dbgc()
121 &data->dbgc.buf_p_addr, in btintel_pcie_setup_dbgc()
123 if (!data->dbgc.buf_v_addr) in btintel_pcie_setup_dbgc()
126 data->dbgc.frag_v_addr = dmam_alloc_coherent(&data->pdev->dev, in btintel_pcie_setup_dbgc()
128 &data->dbgc.frag_p_addr, in btintel_pcie_setup_dbgc()
130 if (!data->dbgc.frag_v_addr) in btintel_pcie_setup_dbgc()
133 data->dbgc.frag_size = sizeof(struct btintel_pcie_dbgc_ctxt); in btintel_pcie_setup_dbgc()
140 for (i = 0; i < data->dbgc.count; i++) { in btintel_pcie_setup_dbgc()
141 buf = &data->dbgc.bufs[i]; in btintel_pcie_setup_dbgc()
142 buf->data_p_addr = data->dbgc.buf_p_addr + i * BTINTEL_PCIE_DBGC_BUFFER_SIZE; in btintel_pcie_setup_dbgc()
143 buf->data = data->dbgc.buf_v_addr + i * BTINTEL_PCIE_DBGC_BUFFER_SIZE; in btintel_pcie_setup_dbgc()
149 memcpy(data->dbgc.frag_v_addr, &db_frag, sizeof(db_frag)); in btintel_pcie_setup_dbgc()
180 static void btintel_pcie_set_tx_db(struct btintel_pcie_data *data, u16 index) in btintel_pcie_set_tx_db() argument
187 btintel_pcie_wr_reg32(data, BTINTEL_PCIE_CSR_HBUS_TARG_WRPTR, val); in btintel_pcie_set_tx_db()
190 /* Copy the data to next(@tfd_index) data buffer and update the TFD(transfer
191 * descriptor) with the data length and the DMA address of the data buffer.
207 /* Copy the outgoing data to DMA buffer */ in btintel_pcie_prepare_tx()
208 memcpy(buf->data, skb->data, tfd->size); in btintel_pcie_prepare_tx()
211 static int btintel_pcie_send_sync(struct btintel_pcie_data *data, in btintel_pcie_send_sync() argument
216 struct txq *txq = &data->txq; in btintel_pcie_send_sync()
218 tfd_index = data->ia.tr_hia[BTINTEL_PCIE_TXQ_NUM]; in btintel_pcie_send_sync()
223 /* Prepare for TX. It updates the TFD with the length of data and in btintel_pcie_send_sync()
224 * address of the DMA buffer, and copy the data to the DMA buffer in btintel_pcie_send_sync()
229 data->ia.tr_hia[BTINTEL_PCIE_TXQ_NUM] = tfd_index; in btintel_pcie_send_sync()
232 data->tx_wait_done = false; in btintel_pcie_send_sync()
235 btintel_pcie_set_tx_db(data, tfd_index); in btintel_pcie_send_sync()
238 ret = wait_event_timeout(data->tx_wait_q, data->tx_wait_done, in btintel_pcie_send_sync()
247 * is available to receive the data
249 static void btintel_pcie_set_rx_db(struct btintel_pcie_data *data, u16 index) in btintel_pcie_set_rx_db() argument
256 btintel_pcie_wr_reg32(data, BTINTEL_PCIE_CSR_HBUS_TARG_WRPTR, val); in btintel_pcie_set_rx_db()
278 static int btintel_pcie_submit_rx(struct btintel_pcie_data *data) in btintel_pcie_submit_rx() argument
281 struct rxq *rxq = &data->rxq; in btintel_pcie_submit_rx()
283 frbd_index = data->ia.tr_hia[BTINTEL_PCIE_RXQ_NUM]; in btintel_pcie_submit_rx()
294 data->ia.tr_hia[BTINTEL_PCIE_RXQ_NUM] = frbd_index; in btintel_pcie_submit_rx()
295 ipc_print_ia_ring(data->hdev, &data->ia, BTINTEL_PCIE_RXQ_NUM); in btintel_pcie_submit_rx()
298 btintel_pcie_set_rx_db(data, frbd_index); in btintel_pcie_submit_rx()
303 static int btintel_pcie_start_rx(struct btintel_pcie_data *data) in btintel_pcie_start_rx() argument
308 ret = btintel_pcie_submit_rx(data); in btintel_pcie_start_rx()
316 static void btintel_pcie_reset_ia(struct btintel_pcie_data *data) in btintel_pcie_reset_ia() argument
318 memset(data->ia.tr_hia, 0, sizeof(u16) * BTINTEL_PCIE_NUM_QUEUES); in btintel_pcie_reset_ia()
319 memset(data->ia.tr_tia, 0, sizeof(u16) * BTINTEL_PCIE_NUM_QUEUES); in btintel_pcie_reset_ia()
320 memset(data->ia.cr_hia, 0, sizeof(u16) * BTINTEL_PCIE_NUM_QUEUES); in btintel_pcie_reset_ia()
321 memset(data->ia.cr_tia, 0, sizeof(u16) * BTINTEL_PCIE_NUM_QUEUES); in btintel_pcie_reset_ia()
324 static int btintel_pcie_reset_bt(struct btintel_pcie_data *data) in btintel_pcie_reset_bt() argument
329 reg = btintel_pcie_rd_reg32(data, BTINTEL_PCIE_CSR_FUNC_CTRL_REG); in btintel_pcie_reset_bt()
336 btintel_pcie_wr_reg32(data, BTINTEL_PCIE_CSR_FUNC_CTRL_REG, reg); in btintel_pcie_reset_bt()
339 reg = btintel_pcie_rd_reg32(data, BTINTEL_PCIE_CSR_FUNC_CTRL_REG); in btintel_pcie_reset_bt()
347 reg = btintel_pcie_rd_reg32(data, BTINTEL_PCIE_CSR_FUNC_CTRL_REG); in btintel_pcie_reset_bt()
353 btintel_pcie_wr_reg32(data, BTINTEL_PCIE_CSR_FUNC_CTRL_REG, reg); in btintel_pcie_reset_bt()
356 reg = btintel_pcie_rd_reg32(data, BTINTEL_PCIE_CSR_FUNC_CTRL_REG); in btintel_pcie_reset_bt()
357 bt_dev_dbg(data->hdev, "csr register after reset: 0x%8.8x", reg); in btintel_pcie_reset_bt()
359 reg = btintel_pcie_rd_reg32(data, BTINTEL_PCIE_CSR_BOOT_STAGE_REG); in btintel_pcie_reset_bt()
367 static void btintel_pcie_mac_init(struct btintel_pcie_data *data) in btintel_pcie_mac_init() argument
372 reg = btintel_pcie_rd_reg32(data, BTINTEL_PCIE_CSR_FUNC_CTRL_REG); in btintel_pcie_mac_init()
378 btintel_pcie_wr_reg32(data, BTINTEL_PCIE_CSR_FUNC_CTRL_REG, reg); in btintel_pcie_mac_init()
381 static int btintel_pcie_add_dmp_data(struct hci_dev *hdev, const void *data, int size) in btintel_pcie_add_dmp_data() argument
390 skb_put_data(skb, data, size); in btintel_pcie_add_dmp_data()
393 bt_dev_err(hdev, "Failed to append data in the coredump"); in btintel_pcie_add_dmp_data()
400 static int btintel_pcie_get_mac_access(struct btintel_pcie_data *data) in btintel_pcie_get_mac_access() argument
405 reg = btintel_pcie_rd_reg32(data, BTINTEL_PCIE_CSR_FUNC_CTRL_REG); in btintel_pcie_get_mac_access()
412 btintel_pcie_wr_reg32(data, BTINTEL_PCIE_CSR_FUNC_CTRL_REG, reg); in btintel_pcie_get_mac_access()
415 reg = btintel_pcie_rd_reg32(data, BTINTEL_PCIE_CSR_FUNC_CTRL_REG); in btintel_pcie_get_mac_access()
426 static void btintel_pcie_release_mac_access(struct btintel_pcie_data *data) in btintel_pcie_release_mac_access() argument
430 reg = btintel_pcie_rd_reg32(data, BTINTEL_PCIE_CSR_FUNC_CTRL_REG); in btintel_pcie_release_mac_access()
441 btintel_pcie_wr_reg32(data, BTINTEL_PCIE_CSR_FUNC_CTRL_REG, reg); in btintel_pcie_release_mac_access()
445 void *data, int size) in btintel_pcie_copy_tlv() argument
452 memcpy(tlv->val, data, tlv->len); in btintel_pcie_copy_tlv()
455 static int btintel_pcie_read_dram_buffers(struct btintel_pcie_data *data) in btintel_pcie_read_dram_buffers() argument
458 struct btintel_pcie_dbgc *dbgc = &data->dbgc; in btintel_pcie_read_dram_buffers()
460 struct hci_dev *hdev = data->hdev; in btintel_pcie_read_dram_buffers()
469 wr_ptr_status = btintel_pcie_rd_dev_mem(data, BTINTEL_PCIE_DBGC_CUR_DBGBUFF_STATUS); in btintel_pcie_read_dram_buffers()
480 data->dmp_hdr.write_ptr = prev_size + offset; in btintel_pcie_read_dram_buffers()
492 2000 + (data->dmp_hdr.fw_timestamp >> 8), in btintel_pcie_read_dram_buffers()
493 data->dmp_hdr.fw_timestamp & 0xff, data->dmp_hdr.fw_build_type, in btintel_pcie_read_dram_buffers()
494 data->dmp_hdr.fw_build_num); in btintel_pcie_read_dram_buffers()
496 hdr_len = sizeof(*tlv) + sizeof(data->dmp_hdr.cnvi_bt) + in btintel_pcie_read_dram_buffers()
497 sizeof(*tlv) + sizeof(data->dmp_hdr.write_ptr) + in btintel_pcie_read_dram_buffers()
498 sizeof(*tlv) + sizeof(data->dmp_hdr.wrap_ctr) + in btintel_pcie_read_dram_buffers()
499 sizeof(*tlv) + sizeof(data->dmp_hdr.trigger_reason) + in btintel_pcie_read_dram_buffers()
500 sizeof(*tlv) + sizeof(data->dmp_hdr.fw_git_sha1) + in btintel_pcie_read_dram_buffers()
501 sizeof(*tlv) + sizeof(data->dmp_hdr.cnvr_top) + in btintel_pcie_read_dram_buffers()
502 sizeof(*tlv) + sizeof(data->dmp_hdr.cnvi_top) + in btintel_pcie_read_dram_buffers()
512 /* Add debug buffers data length to dump size */ in btintel_pcie_read_dram_buffers()
524 btintel_pcie_copy_tlv(skb, BTINTEL_CNVI_BT, &data->dmp_hdr.cnvi_bt, in btintel_pcie_read_dram_buffers()
525 sizeof(data->dmp_hdr.cnvi_bt)); in btintel_pcie_read_dram_buffers()
527 btintel_pcie_copy_tlv(skb, BTINTEL_WRITE_PTR, &data->dmp_hdr.write_ptr, in btintel_pcie_read_dram_buffers()
528 sizeof(data->dmp_hdr.write_ptr)); in btintel_pcie_read_dram_buffers()
530 data->dmp_hdr.wrap_ctr = btintel_pcie_rd_dev_mem(data, in btintel_pcie_read_dram_buffers()
533 btintel_pcie_copy_tlv(skb, BTINTEL_WRAP_CTR, &data->dmp_hdr.wrap_ctr, in btintel_pcie_read_dram_buffers()
534 sizeof(data->dmp_hdr.wrap_ctr)); in btintel_pcie_read_dram_buffers()
536 btintel_pcie_copy_tlv(skb, BTINTEL_TRIGGER_REASON, &data->dmp_hdr.trigger_reason, in btintel_pcie_read_dram_buffers()
537 sizeof(data->dmp_hdr.trigger_reason)); in btintel_pcie_read_dram_buffers()
539 btintel_pcie_copy_tlv(skb, BTINTEL_FW_SHA, &data->dmp_hdr.fw_git_sha1, in btintel_pcie_read_dram_buffers()
540 sizeof(data->dmp_hdr.fw_git_sha1)); in btintel_pcie_read_dram_buffers()
542 btintel_pcie_copy_tlv(skb, BTINTEL_CNVR_TOP, &data->dmp_hdr.cnvr_top, in btintel_pcie_read_dram_buffers()
543 sizeof(data->dmp_hdr.cnvr_top)); in btintel_pcie_read_dram_buffers()
545 btintel_pcie_copy_tlv(skb, BTINTEL_CNVI_TOP, &data->dmp_hdr.cnvi_top, in btintel_pcie_read_dram_buffers()
546 sizeof(data->dmp_hdr.cnvi_top)); in btintel_pcie_read_dram_buffers()
557 ret = btintel_pcie_add_dmp_data(hdev, dbgc->bufs[i].data, in btintel_pcie_read_dram_buffers()
570 struct btintel_pcie_data *data = hci_get_drvdata(hdev); in btintel_pcie_dump_traces() local
573 ret = btintel_pcie_get_mac_access(data); in btintel_pcie_dump_traces()
579 ret = btintel_pcie_read_dram_buffers(data); in btintel_pcie_dump_traces()
581 btintel_pcie_release_mac_access(data); in btintel_pcie_dump_traces()
589 struct btintel_pcie_data *data = hci_get_drvdata(hdev); in btintel_pcie_dump_hdr() local
597 INTEL_HW_VARIANT(data->dmp_hdr.cnvi_bt)); in btintel_pcie_dump_hdr()
601 data->dmp_hdr.fw_build_num); in btintel_pcie_dump_hdr()
604 snprintf(buf, sizeof(buf), "Driver: %s\n", data->dmp_hdr.driver_name); in btintel_pcie_dump_hdr()
615 struct btintel_pcie_data *data = hci_get_drvdata(hdev); in btintel_pcie_dump_notify() local
619 data->dmp_hdr.state = HCI_DEVCOREDUMP_IDLE; in btintel_pcie_dump_notify()
622 data->dmp_hdr.state = HCI_DEVCOREDUMP_ACTIVE; in btintel_pcie_dump_notify()
627 data->dmp_hdr.state = HCI_DEVCOREDUMP_IDLE; in btintel_pcie_dump_notify()
638 static int btintel_pcie_enable_bt(struct btintel_pcie_data *data) in btintel_pcie_enable_bt() argument
643 data->gp0_received = false; in btintel_pcie_enable_bt()
646 btintel_pcie_wr_reg32(data, BTINTEL_PCIE_CSR_CI_ADDR_LSB_REG, in btintel_pcie_enable_bt()
647 data->ci_p_addr & 0xffffffff); in btintel_pcie_enable_bt()
648 btintel_pcie_wr_reg32(data, BTINTEL_PCIE_CSR_CI_ADDR_MSB_REG, in btintel_pcie_enable_bt()
649 (u64)data->ci_p_addr >> 32); in btintel_pcie_enable_bt()
654 data->boot_stage_cache = 0x0; in btintel_pcie_enable_bt()
657 reg = btintel_pcie_rd_reg32(data, BTINTEL_PCIE_CSR_FUNC_CTRL_REG); in btintel_pcie_enable_bt()
664 btintel_pcie_wr_reg32(data, BTINTEL_PCIE_CSR_FUNC_CTRL_REG, reg); in btintel_pcie_enable_bt()
667 btintel_pcie_set_reg_bits(data, BTINTEL_PCIE_CSR_FUNC_CTRL_REG, in btintel_pcie_enable_bt()
670 btintel_pcie_rd_reg32(data, BTINTEL_PCIE_CSR_FUNC_CTRL_REG); in btintel_pcie_enable_bt()
675 data->alive_intr_ctxt = BTINTEL_PCIE_ROM; in btintel_pcie_enable_bt()
676 err = wait_event_timeout(data->gp0_wait_q, data->gp0_received, in btintel_pcie_enable_bt()
682 if (~data->boot_stage_cache & BTINTEL_PCIE_CSR_BOOT_STAGE_ROM) in btintel_pcie_enable_bt()
688 static inline bool btintel_pcie_in_op(struct btintel_pcie_data *data) in btintel_pcie_in_op() argument
690 return data->boot_stage_cache & BTINTEL_PCIE_CSR_BOOT_STAGE_OPFW; in btintel_pcie_in_op()
693 static inline bool btintel_pcie_in_iml(struct btintel_pcie_data *data) in btintel_pcie_in_iml() argument
695 return data->boot_stage_cache & BTINTEL_PCIE_CSR_BOOT_STAGE_IML && in btintel_pcie_in_iml()
696 !(data->boot_stage_cache & BTINTEL_PCIE_CSR_BOOT_STAGE_OPFW); in btintel_pcie_in_iml()
699 static inline bool btintel_pcie_in_d3(struct btintel_pcie_data *data) in btintel_pcie_in_d3() argument
701 return data->boot_stage_cache & BTINTEL_PCIE_CSR_BOOT_STAGE_D3_STATE_READY; in btintel_pcie_in_d3()
704 static inline bool btintel_pcie_in_d0(struct btintel_pcie_data *data) in btintel_pcie_in_d0() argument
706 return !(data->boot_stage_cache & BTINTEL_PCIE_CSR_BOOT_STAGE_D3_STATE_READY); in btintel_pcie_in_d0()
709 static void btintel_pcie_wr_sleep_cntrl(struct btintel_pcie_data *data, in btintel_pcie_wr_sleep_cntrl() argument
712 bt_dev_dbg(data->hdev, "writing sleep_ctl_reg: 0x%8.8x", dxstate); in btintel_pcie_wr_sleep_cntrl()
713 btintel_pcie_wr_reg32(data, BTINTEL_PCIE_CSR_IPC_SLEEP_CTL_REG, dxstate); in btintel_pcie_wr_sleep_cntrl()
738 static int btintel_pcie_read_device_mem(struct btintel_pcie_data *data, in btintel_pcie_read_device_mem() argument
745 err = btintel_pcie_get_mac_access(data); in btintel_pcie_read_device_mem()
747 bt_dev_err(data->hdev, "Failed to get mac access %d", err); in btintel_pcie_read_device_mem()
752 *val = btintel_pcie_rd_dev_mem(data, dev_addr); in btintel_pcie_read_device_mem()
754 btintel_pcie_release_mac_access(data); in btintel_pcie_read_device_mem()
762 static void btintel_pcie_msix_gp0_handler(struct btintel_pcie_data *data) in btintel_pcie_msix_gp0_handler() argument
771 reg = btintel_pcie_rd_reg32(data, BTINTEL_PCIE_CSR_BOOT_STAGE_REG); in btintel_pcie_msix_gp0_handler()
772 if (reg != data->boot_stage_cache) in btintel_pcie_msix_gp0_handler()
773 data->boot_stage_cache = reg; in btintel_pcie_msix_gp0_handler()
775 bt_dev_dbg(data->hdev, "Alive context: %s old_boot_stage: 0x%8.8x new_boot_stage: 0x%8.8x", in btintel_pcie_msix_gp0_handler()
776 btintel_pcie_alivectxt_state2str(data->alive_intr_ctxt), in btintel_pcie_msix_gp0_handler()
777 data->boot_stage_cache, reg); in btintel_pcie_msix_gp0_handler()
778 reg = btintel_pcie_rd_reg32(data, BTINTEL_PCIE_CSR_IMG_RESPONSE_REG); in btintel_pcie_msix_gp0_handler()
779 if (reg != data->img_resp_cache) in btintel_pcie_msix_gp0_handler()
780 data->img_resp_cache = reg; in btintel_pcie_msix_gp0_handler()
782 data->gp0_received = true; in btintel_pcie_msix_gp0_handler()
784 old_ctxt = data->alive_intr_ctxt; in btintel_pcie_msix_gp0_handler()
788 switch (data->alive_intr_ctxt) { in btintel_pcie_msix_gp0_handler()
790 data->alive_intr_ctxt = BTINTEL_PCIE_FW_DL; in btintel_pcie_msix_gp0_handler()
799 if (btintel_pcie_in_op(data)) { in btintel_pcie_msix_gp0_handler()
804 if (btintel_pcie_in_iml(data)) { in btintel_pcie_msix_gp0_handler()
806 data->alive_intr_ctxt = BTINTEL_PCIE_FW_DL; in btintel_pcie_msix_gp0_handler()
811 if (btintel_test_and_clear_flag(data->hdev, INTEL_WAIT_FOR_D0)) { in btintel_pcie_msix_gp0_handler()
812 btintel_wake_up_flag(data->hdev, INTEL_WAIT_FOR_D0); in btintel_pcie_msix_gp0_handler()
813 data->alive_intr_ctxt = BTINTEL_PCIE_D0; in btintel_pcie_msix_gp0_handler()
817 if (btintel_pcie_in_d3(data)) { in btintel_pcie_msix_gp0_handler()
818 data->alive_intr_ctxt = BTINTEL_PCIE_D3; in btintel_pcie_msix_gp0_handler()
824 if (btintel_pcie_in_d0(data)) { in btintel_pcie_msix_gp0_handler()
825 data->alive_intr_ctxt = BTINTEL_PCIE_D0; in btintel_pcie_msix_gp0_handler()
832 data->alive_intr_ctxt = BTINTEL_PCIE_D0; in btintel_pcie_msix_gp0_handler()
837 bt_dev_err(data->hdev, "Unknown state: 0x%2.2x", in btintel_pcie_msix_gp0_handler()
838 data->alive_intr_ctxt); in btintel_pcie_msix_gp0_handler()
843 btintel_pcie_reset_ia(data); in btintel_pcie_msix_gp0_handler()
844 btintel_pcie_start_rx(data); in btintel_pcie_msix_gp0_handler()
848 bt_dev_dbg(data->hdev, "wake up gp0 wait_q"); in btintel_pcie_msix_gp0_handler()
849 wake_up(&data->gp0_wait_q); in btintel_pcie_msix_gp0_handler()
852 if (old_ctxt != data->alive_intr_ctxt) in btintel_pcie_msix_gp0_handler()
853 bt_dev_dbg(data->hdev, "alive context changed: %s -> %s", in btintel_pcie_msix_gp0_handler()
855 btintel_pcie_alivectxt_state2str(data->alive_intr_ctxt)); in btintel_pcie_msix_gp0_handler()
860 static void btintel_pcie_msix_tx_handle(struct btintel_pcie_data *data) in btintel_pcie_msix_tx_handle() argument
866 cr_tia = data->ia.cr_tia[BTINTEL_PCIE_TXQ_NUM]; in btintel_pcie_msix_tx_handle()
867 cr_hia = data->ia.cr_hia[BTINTEL_PCIE_TXQ_NUM]; in btintel_pcie_msix_tx_handle()
872 txq = &data->txq; in btintel_pcie_msix_tx_handle()
875 data->tx_wait_done = true; in btintel_pcie_msix_tx_handle()
876 wake_up(&data->tx_wait_q); in btintel_pcie_msix_tx_handle()
884 data->ia.cr_tia[BTINTEL_PCIE_TXQ_NUM] = cr_tia; in btintel_pcie_msix_tx_handle()
885 ipc_print_ia_ring(data->hdev, &data->ia, BTINTEL_PCIE_TXQ_NUM); in btintel_pcie_msix_tx_handle()
891 struct hci_event_hdr *hdr = (void *)skb->data; in btintel_pcie_recv_event()
893 struct btintel_pcie_data *data = hci_get_drvdata(hdev); in btintel_pcie_recv_event() local
897 const void *ptr = skb->data + HCI_EVENT_HDR_SIZE + 1; in btintel_pcie_recv_event()
901 switch (skb->data[2]) { in btintel_pcie_recv_event()
913 if (btintel_pcie_in_op(data)) { in btintel_pcie_recv_event()
914 btintel_pcie_wr_sleep_cntrl(data, BTINTEL_PCIE_STATE_D0); in btintel_pcie_recv_event()
915 data->alive_intr_ctxt = BTINTEL_PCIE_INTEL_HCI_RESET2; in btintel_pcie_recv_event()
920 if (btintel_pcie_in_iml(data)) { in btintel_pcie_recv_event()
929 if (btintel_test_and_clear_flag(data->hdev, in btintel_pcie_recv_event()
931 btintel_wake_up_flag(data->hdev, in btintel_pcie_recv_event()
952 memcmp(&skb->data[2], diagnostics_hdr, in btintel_pcie_recv_event()
960 if (skb->data[2] == 0x97) { in btintel_pcie_recv_event()
968 /* Process the received rx data
969 * It check the frame header to identify the data type and create skb
972 static int btintel_pcie_recv_frame(struct btintel_pcie_data *data, in btintel_pcie_recv_frame() argument
980 struct hci_dev *hdev = data->hdev; in btintel_pcie_recv_frame()
982 spin_lock(&data->hci_rx_lock); in btintel_pcie_recv_frame()
1072 spin_unlock(&data->hci_rx_lock); in btintel_pcie_recv_frame()
1077 static void btintel_pcie_read_hwexp(struct btintel_pcie_data *data) in btintel_pcie_read_hwexp() argument
1093 switch (data->dmp_hdr.cnvi_top & 0xfff) { in btintel_pcie_read_hwexp()
1097 if (INTEL_CNVX_TOP_STEP(data->dmp_hdr.cnvi_top) != 0x01) in btintel_pcie_read_hwexp()
1099 len = BTINTEL_PCIE_BLZR_HWEXP_SIZE; /* exception data length */ in btintel_pcie_read_hwexp()
1107 bt_dev_err(data->hdev, "Unsupported cnvi 0x%8.8x", data->dmp_hdr.cnvi_top); in btintel_pcie_read_hwexp()
1115 btintel_pcie_mac_init(data); in btintel_pcie_read_hwexp()
1117 err = btintel_pcie_read_device_mem(data, buf, addr, len); in btintel_pcie_read_hwexp()
1123 bt_dev_err(data->hdev, "Invalid exception dump signature: 0x%8.8x", in btintel_pcie_read_hwexp()
1128 snprintf(prefix, sizeof(prefix), "Bluetooth: %s: ", bt_dev_name(data->hdev)); in btintel_pcie_read_hwexp()
1139 bt_dev_dbg(data->hdev, "Invalid TLV type 0"); in btintel_pcie_read_hwexp()
1156 bt_dev_dbg(data->hdev, "TLV packet length: %u", pkt_len); in btintel_pcie_read_hwexp()
1173 btintel_pcie_recv_frame(data, skb); in btintel_pcie_read_hwexp()
1180 static void btintel_pcie_msix_hw_exp_handler(struct btintel_pcie_data *data) in btintel_pcie_msix_hw_exp_handler() argument
1182 bt_dev_err(data->hdev, "Received hw exception interrupt"); in btintel_pcie_msix_hw_exp_handler()
1184 if (test_and_set_bit(BTINTEL_PCIE_CORE_HALTED, &data->flags)) in btintel_pcie_msix_hw_exp_handler()
1187 if (test_and_set_bit(BTINTEL_PCIE_HWEXP_INPROGRESS, &data->flags)) in btintel_pcie_msix_hw_exp_handler()
1191 if (!test_and_set_bit(BTINTEL_PCIE_COREDUMP_INPROGRESS, &data->flags)) in btintel_pcie_msix_hw_exp_handler()
1192 data->dmp_hdr.trigger_reason = BTINTEL_PCIE_TRIGGER_REASON_FW_ASSERT; in btintel_pcie_msix_hw_exp_handler()
1194 queue_work(data->workqueue, &data->rx_work); in btintel_pcie_msix_hw_exp_handler()
1199 struct btintel_pcie_data *data = container_of(work, in btintel_pcie_rx_work() local
1203 if (test_bit(BTINTEL_PCIE_HWEXP_INPROGRESS, &data->flags)) { in btintel_pcie_rx_work()
1211 btintel_pcie_read_hwexp(data); in btintel_pcie_rx_work()
1212 clear_bit(BTINTEL_PCIE_HWEXP_INPROGRESS, &data->flags); in btintel_pcie_rx_work()
1215 if (test_bit(BTINTEL_PCIE_COREDUMP_INPROGRESS, &data->flags)) { in btintel_pcie_rx_work()
1216 btintel_pcie_dump_traces(data->hdev); in btintel_pcie_rx_work()
1217 clear_bit(BTINTEL_PCIE_COREDUMP_INPROGRESS, &data->flags); in btintel_pcie_rx_work()
1221 while ((skb = skb_dequeue(&data->rx_skb_q))) { in btintel_pcie_rx_work()
1222 btintel_pcie_recv_frame(data, skb); in btintel_pcie_rx_work()
1226 /* create sk_buff with data and save it to queue and start RX work */
1227 static int btintel_pcie_submit_rx_work(struct btintel_pcie_data *data, u8 status, in btintel_pcie_submit_rx_work() argument
1250 skb_queue_tail(&data->rx_skb_q, skb); in btintel_pcie_submit_rx_work()
1251 queue_work(data->workqueue, &data->rx_work); in btintel_pcie_submit_rx_work()
1254 ret = btintel_pcie_submit_rx(data); in btintel_pcie_submit_rx_work()
1260 static void btintel_pcie_msix_rx_handle(struct btintel_pcie_data *data) in btintel_pcie_msix_rx_handle() argument
1267 struct hci_dev *hdev = data->hdev; in btintel_pcie_msix_rx_handle()
1269 cr_hia = data->ia.cr_hia[BTINTEL_PCIE_RXQ_NUM]; in btintel_pcie_msix_rx_handle()
1270 cr_tia = data->ia.cr_tia[BTINTEL_PCIE_RXQ_NUM]; in btintel_pcie_msix_rx_handle()
1278 rxq = &data->rxq; in btintel_pcie_msix_rx_handle()
1285 ipc_print_urbd1(data->hdev, urbd1, cr_tia); in btintel_pcie_msix_rx_handle()
1294 ret = btintel_pcie_submit_rx_work(data, urbd1->status, in btintel_pcie_msix_rx_handle()
1295 buf->data); in btintel_pcie_msix_rx_handle()
1302 data->ia.cr_tia[BTINTEL_PCIE_RXQ_NUM] = cr_tia; in btintel_pcie_msix_rx_handle()
1303 ipc_print_ia_ring(data->hdev, &data->ia, BTINTEL_PCIE_RXQ_NUM); in btintel_pcie_msix_rx_handle()
1307 static irqreturn_t btintel_pcie_msix_isr(int irq, void *data) in btintel_pcie_msix_isr() argument
1312 static inline bool btintel_pcie_is_rxq_empty(struct btintel_pcie_data *data) in btintel_pcie_is_rxq_empty() argument
1314 return data->ia.cr_hia[BTINTEL_PCIE_RXQ_NUM] == data->ia.cr_tia[BTINTEL_PCIE_RXQ_NUM]; in btintel_pcie_is_rxq_empty()
1317 static inline bool btintel_pcie_is_txackq_empty(struct btintel_pcie_data *data) in btintel_pcie_is_txackq_empty() argument
1319 return data->ia.cr_tia[BTINTEL_PCIE_TXQ_NUM] == data->ia.cr_hia[BTINTEL_PCIE_TXQ_NUM]; in btintel_pcie_is_txackq_empty()
1325 struct btintel_pcie_data *data = btintel_pcie_get_data(entry); in btintel_pcie_irq_msix_handler() local
1328 spin_lock(&data->irq_lock); in btintel_pcie_irq_msix_handler()
1329 intr_fh = btintel_pcie_rd_reg32(data, BTINTEL_PCIE_CSR_MSIX_FH_INT_CAUSES); in btintel_pcie_irq_msix_handler()
1330 intr_hw = btintel_pcie_rd_reg32(data, BTINTEL_PCIE_CSR_MSIX_HW_INT_CAUSES); in btintel_pcie_irq_msix_handler()
1333 btintel_pcie_wr_reg32(data, BTINTEL_PCIE_CSR_MSIX_FH_INT_CAUSES, intr_fh); in btintel_pcie_irq_msix_handler()
1334 btintel_pcie_wr_reg32(data, BTINTEL_PCIE_CSR_MSIX_HW_INT_CAUSES, intr_hw); in btintel_pcie_irq_msix_handler()
1335 spin_unlock(&data->irq_lock); in btintel_pcie_irq_msix_handler()
1344 btintel_pcie_msix_hw_exp_handler(data); in btintel_pcie_irq_msix_handler()
1350 btintel_pcie_msix_gp0_handler(data); in btintel_pcie_irq_msix_handler()
1354 btintel_pcie_msix_tx_handle(data); in btintel_pcie_irq_msix_handler()
1355 if (!btintel_pcie_is_rxq_empty(data)) in btintel_pcie_irq_msix_handler()
1356 btintel_pcie_msix_rx_handle(data); in btintel_pcie_irq_msix_handler()
1361 btintel_pcie_msix_rx_handle(data); in btintel_pcie_irq_msix_handler()
1362 if (!btintel_pcie_is_txackq_empty(data)) in btintel_pcie_irq_msix_handler()
1363 btintel_pcie_msix_tx_handle(data); in btintel_pcie_irq_msix_handler()
1374 btintel_pcie_wr_reg32(data, BTINTEL_PCIE_CSR_MSIX_AUTOMASK_ST, in btintel_pcie_irq_msix_handler()
1383 static int btintel_pcie_setup_irq(struct btintel_pcie_data *data) in btintel_pcie_setup_irq() argument
1389 data->msix_entries[i].entry = i; in btintel_pcie_setup_irq()
1391 num_irqs = pci_alloc_irq_vectors(data->pdev, BTINTEL_PCIE_MSIX_VEC_MIN, in btintel_pcie_setup_irq()
1396 data->alloc_vecs = num_irqs; in btintel_pcie_setup_irq()
1397 data->msix_enabled = 1; in btintel_pcie_setup_irq()
1398 data->def_irq = 0; in btintel_pcie_setup_irq()
1401 for (i = 0; i < data->alloc_vecs; i++) { in btintel_pcie_setup_irq()
1404 msix_entry = &data->msix_entries[i]; in btintel_pcie_setup_irq()
1405 msix_entry->vector = pci_irq_vector(data->pdev, i); in btintel_pcie_setup_irq()
1407 err = devm_request_threaded_irq(&data->pdev->dev, in btintel_pcie_setup_irq()
1415 pci_free_irq_vectors(data->pdev); in btintel_pcie_setup_irq()
1416 data->alloc_vecs = 0; in btintel_pcie_setup_irq()
1443 static void btintel_pcie_config_msix(struct btintel_pcie_data *data) in btintel_pcie_config_msix() argument
1446 int val = data->def_irq | BTINTEL_PCIE_MSIX_NON_AUTO_CLEAR_CAUSE; in btintel_pcie_config_msix()
1450 btintel_pcie_wr_reg8(data, in btintel_pcie_config_msix()
1453 btintel_pcie_clr_reg_bits(data, in btintel_pcie_config_msix()
1459 data->fh_init_mask = ~btintel_pcie_rd_reg32(data, BTINTEL_PCIE_CSR_MSIX_FH_INT_MASK); in btintel_pcie_config_msix()
1460 data->hw_init_mask = ~btintel_pcie_rd_reg32(data, BTINTEL_PCIE_CSR_MSIX_HW_INT_MASK); in btintel_pcie_config_msix()
1464 struct btintel_pcie_data *data) in btintel_pcie_config_pcie() argument
1481 data->base_addr = pcim_iomap_region(pdev, 0, KBUILD_MODNAME); in btintel_pcie_config_pcie()
1482 if (IS_ERR(data->base_addr)) in btintel_pcie_config_pcie()
1483 return PTR_ERR(data->base_addr); in btintel_pcie_config_pcie()
1485 err = btintel_pcie_setup_irq(data); in btintel_pcie_config_pcie()
1490 btintel_pcie_config_msix(data); in btintel_pcie_config_pcie()
1495 static void btintel_pcie_init_ci(struct btintel_pcie_data *data, in btintel_pcie_init_ci() argument
1501 ci->addr_cr_hia = data->ia.cr_hia_p_addr; in btintel_pcie_init_ci()
1502 ci->addr_tr_tia = data->ia.tr_tia_p_addr; in btintel_pcie_init_ci()
1503 ci->addr_cr_tia = data->ia.cr_tia_p_addr; in btintel_pcie_init_ci()
1504 ci->addr_tr_hia = data->ia.tr_hia_p_addr; in btintel_pcie_init_ci()
1507 ci->addr_urbdq0 = data->txq.urbd0s_p_addr; in btintel_pcie_init_ci()
1508 ci->addr_tfdq = data->txq.tfds_p_addr; in btintel_pcie_init_ci()
1509 ci->num_tfdq = data->txq.count; in btintel_pcie_init_ci()
1510 ci->num_urbdq0 = data->txq.count; in btintel_pcie_init_ci()
1514 ci->addr_frbdq = data->rxq.frbds_p_addr; in btintel_pcie_init_ci()
1515 ci->num_frbdq = data->rxq.count; in btintel_pcie_init_ci()
1517 ci->addr_urbdq1 = data->rxq.urbd1s_p_addr; in btintel_pcie_init_ci()
1518 ci->num_urbdq1 = data->rxq.count; in btintel_pcie_init_ci()
1522 ci->dbgc_addr = data->dbgc.frag_p_addr; in btintel_pcie_init_ci()
1523 ci->dbgc_size = data->dbgc.frag_size; in btintel_pcie_init_ci()
1527 static void btintel_pcie_free_txq_bufs(struct btintel_pcie_data *data, in btintel_pcie_free_txq_bufs() argument
1530 /* Free data buffers first */ in btintel_pcie_free_txq_bufs()
1531 dma_free_coherent(&data->pdev->dev, txq->count * BTINTEL_PCIE_BUFFER_SIZE, in btintel_pcie_free_txq_bufs()
1536 static int btintel_pcie_setup_txq_bufs(struct btintel_pcie_data *data, in btintel_pcie_setup_txq_bufs() argument
1547 /* Allocate full chunk of data buffer for DMA first and do indexing and in btintel_pcie_setup_txq_bufs()
1550 txq->buf_v_addr = dma_alloc_coherent(&data->pdev->dev, in btintel_pcie_setup_txq_bufs()
1565 buf->data = txq->buf_v_addr + (i * BTINTEL_PCIE_BUFFER_SIZE); in btintel_pcie_setup_txq_bufs()
1571 static void btintel_pcie_free_rxq_bufs(struct btintel_pcie_data *data, in btintel_pcie_free_rxq_bufs() argument
1574 /* Free data buffers first */ in btintel_pcie_free_rxq_bufs()
1575 dma_free_coherent(&data->pdev->dev, rxq->count * BTINTEL_PCIE_BUFFER_SIZE, in btintel_pcie_free_rxq_bufs()
1580 static int btintel_pcie_setup_rxq_bufs(struct btintel_pcie_data *data, in btintel_pcie_setup_rxq_bufs() argument
1591 /* Allocate full chunk of data buffer for DMA first and do indexing and in btintel_pcie_setup_rxq_bufs()
1594 rxq->buf_v_addr = dma_alloc_coherent(&data->pdev->dev, in btintel_pcie_setup_rxq_bufs()
1609 buf->data = rxq->buf_v_addr + (i * BTINTEL_PCIE_BUFFER_SIZE); in btintel_pcie_setup_rxq_bufs()
1615 static void btintel_pcie_setup_ia(struct btintel_pcie_data *data, in btintel_pcie_setup_ia() argument
1636 static void btintel_pcie_free(struct btintel_pcie_data *data) in btintel_pcie_free() argument
1638 btintel_pcie_free_rxq_bufs(data, &data->rxq); in btintel_pcie_free()
1639 btintel_pcie_free_txq_bufs(data, &data->txq); in btintel_pcie_free()
1641 dma_pool_free(data->dma_pool, data->dma_v_addr, data->dma_p_addr); in btintel_pcie_free()
1642 dma_pool_destroy(data->dma_pool); in btintel_pcie_free()
1645 /* Allocate tx and rx queues, any related data structures and buffers.
1647 static int btintel_pcie_alloc(struct btintel_pcie_data *data) in btintel_pcie_alloc() argument
1656 * The DMA memory for data buffer is allocated while setting up the in btintel_pcie_alloc()
1674 data->dma_pool = dma_pool_create(KBUILD_MODNAME, &data->pdev->dev, in btintel_pcie_alloc()
1676 if (!data->dma_pool) { in btintel_pcie_alloc()
1681 v_addr = dma_pool_zalloc(data->dma_pool, GFP_KERNEL | __GFP_NOWARN, in btintel_pcie_alloc()
1684 dma_pool_destroy(data->dma_pool); in btintel_pcie_alloc()
1689 data->dma_p_addr = p_addr; in btintel_pcie_alloc()
1690 data->dma_v_addr = v_addr; in btintel_pcie_alloc()
1693 data->txq.count = BTINTEL_DESCS_COUNT; in btintel_pcie_alloc()
1694 data->rxq.count = BTINTEL_DESCS_COUNT; in btintel_pcie_alloc()
1697 data->txq.tfds_p_addr = p_addr; in btintel_pcie_alloc()
1698 data->txq.tfds = v_addr; in btintel_pcie_alloc()
1704 data->txq.urbd0s_p_addr = p_addr; in btintel_pcie_alloc()
1705 data->txq.urbd0s = v_addr; in btintel_pcie_alloc()
1711 data->rxq.frbds_p_addr = p_addr; in btintel_pcie_alloc()
1712 data->rxq.frbds = v_addr; in btintel_pcie_alloc()
1718 data->rxq.urbd1s_p_addr = p_addr; in btintel_pcie_alloc()
1719 data->rxq.urbd1s = v_addr; in btintel_pcie_alloc()
1724 /* Setup data buffers for txq */ in btintel_pcie_alloc()
1725 err = btintel_pcie_setup_txq_bufs(data, &data->txq); in btintel_pcie_alloc()
1729 /* Setup data buffers for rxq */ in btintel_pcie_alloc()
1730 err = btintel_pcie_setup_rxq_bufs(data, &data->rxq); in btintel_pcie_alloc()
1735 btintel_pcie_setup_ia(data, p_addr, v_addr, &data->ia); in btintel_pcie_alloc()
1737 /* Setup data buffers for dbgc */ in btintel_pcie_alloc()
1738 err = btintel_pcie_setup_dbgc(data); in btintel_pcie_alloc()
1746 data->ci = v_addr; in btintel_pcie_alloc()
1747 data->ci_p_addr = p_addr; in btintel_pcie_alloc()
1750 btintel_pcie_init_ci(data, data->ci); in btintel_pcie_alloc()
1755 btintel_pcie_free_txq_bufs(data, &data->txq); in btintel_pcie_alloc()
1757 dma_pool_free(data->dma_pool, data->dma_v_addr, data->dma_p_addr); in btintel_pcie_alloc()
1758 dma_pool_destroy(data->dma_pool); in btintel_pcie_alloc()
1805 struct btintel_pcie_data *data = hci_get_drvdata(hdev); in btintel_pcie_send_frame() local
1814 * the first byte to get the packet type and redirect the rest of data in btintel_pcie_send_frame()
1817 * But for PCIe, THF(Transfer Flow Handler) fetches the 4 bytes of data in btintel_pcie_send_frame()
1823 * head room for profile and driver use, and before sending the data in btintel_pcie_send_frame()
1829 cmd = (void *)skb->data; in btintel_pcie_send_frame()
1832 struct hci_command_hdr *cmd = (void *)skb->data; in btintel_pcie_send_frame()
1845 data->gp0_received = false; in btintel_pcie_send_frame()
1867 ret = btintel_pcie_send_sync(data, skb); in btintel_pcie_send_frame()
1876 old_ctxt = data->alive_intr_ctxt; in btintel_pcie_send_frame()
1877 data->alive_intr_ctxt = in btintel_pcie_send_frame()
1880 bt_dev_dbg(data->hdev, "sent cmd: 0x%4.4x alive context changed: %s -> %s", in btintel_pcie_send_frame()
1882 btintel_pcie_alivectxt_state2str(data->alive_intr_ctxt)); in btintel_pcie_send_frame()
1884 ret = wait_event_timeout(data->gp0_wait_q, in btintel_pcie_send_frame()
1885 data->gp0_received, in btintel_pcie_send_frame()
1890 btintel_pcie_alivectxt_state2str(data->alive_intr_ctxt)); in btintel_pcie_send_frame()
1903 static void btintel_pcie_release_hdev(struct btintel_pcie_data *data) in btintel_pcie_release_hdev() argument
1907 hdev = data->hdev; in btintel_pcie_release_hdev()
1910 data->hdev = NULL; in btintel_pcie_release_hdev()
1915 struct btintel_pcie_data *data = hci_get_drvdata(hdev); in btintel_pcie_setup_internal() local
1931 if (skb->data[0]) { in btintel_pcie_setup_internal()
1933 skb->data[0]); in btintel_pcie_setup_internal()
1947 /* For TLV type device, parse the tlv data */ in btintel_pcie_setup_internal()
1999 data->dmp_hdr.cnvi_top = ver_tlv.cnvi_top; in btintel_pcie_setup_internal()
2000 data->dmp_hdr.cnvr_top = ver_tlv.cnvr_top; in btintel_pcie_setup_internal()
2001 data->dmp_hdr.fw_timestamp = ver_tlv.timestamp; in btintel_pcie_setup_internal()
2002 data->dmp_hdr.fw_build_type = ver_tlv.build_type; in btintel_pcie_setup_internal()
2003 data->dmp_hdr.fw_build_num = ver_tlv.build_num; in btintel_pcie_setup_internal()
2004 data->dmp_hdr.cnvi_bt = ver_tlv.cnvi_bt; in btintel_pcie_setup_internal()
2007 data->dmp_hdr.fw_git_sha1 = ver_tlv.git_sha1; in btintel_pcie_setup_internal()
2026 struct btintel_pcie_data *data = hci_get_drvdata(hdev); in btintel_pcie_setup() local
2031 err = btintel_pcie_reset_bt(data); in btintel_pcie_setup()
2037 btintel_pcie_reset_ia(data); in btintel_pcie_setup()
2038 btintel_pcie_config_msix(data); in btintel_pcie_setup()
2039 err = btintel_pcie_enable_bt(data); in btintel_pcie_setup()
2044 btintel_pcie_start_rx(data); in btintel_pcie_setup()
2049 static int btintel_pcie_setup_hdev(struct btintel_pcie_data *data) in btintel_pcie_setup_hdev() argument
2059 hci_set_drvdata(hdev, data); in btintel_pcie_setup_hdev()
2061 data->hdev = hdev; in btintel_pcie_setup_hdev()
2062 SET_HCIDEV_DEV(hdev, &data->pdev->dev); in btintel_pcie_setup_hdev()
2080 data->dmp_hdr.driver_name = KBUILD_MODNAME; in btintel_pcie_setup_hdev()
2092 struct btintel_pcie_data *data; in btintel_pcie_probe() local
2097 data = devm_kzalloc(&pdev->dev, sizeof(*data), GFP_KERNEL); in btintel_pcie_probe()
2098 if (!data) in btintel_pcie_probe()
2101 data->pdev = pdev; in btintel_pcie_probe()
2103 spin_lock_init(&data->irq_lock); in btintel_pcie_probe()
2104 spin_lock_init(&data->hci_rx_lock); in btintel_pcie_probe()
2106 init_waitqueue_head(&data->gp0_wait_q); in btintel_pcie_probe()
2107 data->gp0_received = false; in btintel_pcie_probe()
2109 init_waitqueue_head(&data->tx_wait_q); in btintel_pcie_probe()
2110 data->tx_wait_done = false; in btintel_pcie_probe()
2112 data->workqueue = alloc_ordered_workqueue(KBUILD_MODNAME, WQ_HIGHPRI); in btintel_pcie_probe()
2113 if (!data->workqueue) in btintel_pcie_probe()
2116 skb_queue_head_init(&data->rx_skb_q); in btintel_pcie_probe()
2117 INIT_WORK(&data->rx_work, btintel_pcie_rx_work); in btintel_pcie_probe()
2119 data->boot_stage_cache = 0x00; in btintel_pcie_probe()
2120 data->img_resp_cache = 0x00; in btintel_pcie_probe()
2122 err = btintel_pcie_config_pcie(pdev, data); in btintel_pcie_probe()
2126 pci_set_drvdata(pdev, data); in btintel_pcie_probe()
2128 err = btintel_pcie_alloc(data); in btintel_pcie_probe()
2132 err = btintel_pcie_enable_bt(data); in btintel_pcie_probe()
2137 data->cnvi = btintel_pcie_rd_reg32(data, BTINTEL_PCIE_CSR_HW_REV_REG); in btintel_pcie_probe()
2139 data->cnvr = btintel_pcie_rd_reg32(data, BTINTEL_PCIE_CSR_RF_ID_REG); in btintel_pcie_probe()
2141 err = btintel_pcie_start_rx(data); in btintel_pcie_probe()
2145 err = btintel_pcie_setup_hdev(data); in btintel_pcie_probe()
2149 bt_dev_dbg(data->hdev, "cnvi: 0x%8.8x cnvr: 0x%8.8x", data->cnvi, in btintel_pcie_probe()
2150 data->cnvr); in btintel_pcie_probe()
2155 btintel_pcie_reset_bt(data); in btintel_pcie_probe()
2166 struct btintel_pcie_data *data; in btintel_pcie_remove() local
2168 data = pci_get_drvdata(pdev); in btintel_pcie_remove()
2170 btintel_pcie_reset_bt(data); in btintel_pcie_remove()
2171 for (int i = 0; i < data->alloc_vecs; i++) { in btintel_pcie_remove()
2174 msix_entry = &data->msix_entries[i]; in btintel_pcie_remove()
2180 btintel_pcie_release_hdev(data); in btintel_pcie_remove()
2182 flush_work(&data->rx_work); in btintel_pcie_remove()
2184 destroy_workqueue(data->workqueue); in btintel_pcie_remove()
2186 btintel_pcie_free(data); in btintel_pcie_remove()
2197 struct btintel_pcie_data *data = pci_get_drvdata(pdev); in btintel_pcie_coredump() local
2199 if (test_and_set_bit(BTINTEL_PCIE_COREDUMP_INPROGRESS, &data->flags)) in btintel_pcie_coredump()
2202 data->dmp_hdr.trigger_reason = BTINTEL_PCIE_TRIGGER_REASON_USER_TRIGGER; in btintel_pcie_coredump()
2203 queue_work(data->workqueue, &data->rx_work); in btintel_pcie_coredump()