Lines Matching refs:priv
37 void btmrvl_interrupt(struct btmrvl_private *priv) in btmrvl_interrupt() argument
39 priv->adapter->ps_state = PS_AWAKE; in btmrvl_interrupt()
41 priv->adapter->wakeup_tries = 0; in btmrvl_interrupt()
43 priv->adapter->int_count++; in btmrvl_interrupt()
45 if (priv->adapter->hs_state == HS_ACTIVATED) { in btmrvl_interrupt()
47 priv->adapter->hs_state = HS_DEACTIVATED; in btmrvl_interrupt()
50 wake_up_interruptible(&priv->main_thread.wait_q); in btmrvl_interrupt()
54 bool btmrvl_check_evtpkt(struct btmrvl_private *priv, struct sk_buff *skb) in btmrvl_check_evtpkt() argument
65 if (priv->btmrvl_dev.sendcmdflag) { in btmrvl_check_evtpkt()
66 priv->btmrvl_dev.sendcmdflag = false; in btmrvl_check_evtpkt()
67 priv->adapter->cmd_complete = true; in btmrvl_check_evtpkt()
68 wake_up_interruptible(&priv->adapter->cmd_wait_q); in btmrvl_check_evtpkt()
83 int btmrvl_process_event(struct btmrvl_private *priv, struct sk_buff *skb) in btmrvl_process_event() argument
85 struct btmrvl_adapter *adapter = priv->adapter; in btmrvl_process_event()
131 if (priv->btmrvl_dev.sendcmdflag && in btmrvl_process_event()
139 priv->btmrvl_dev.dev_type = HCI_AMP; in btmrvl_process_event()
141 priv->btmrvl_dev.dev_type = HCI_BREDR; in btmrvl_process_event()
143 BT_DBG("dev_type: %d", priv->btmrvl_dev.dev_type); in btmrvl_process_event()
144 } else if (priv->btmrvl_dev.sendcmdflag && in btmrvl_process_event()
175 static int btmrvl_send_sync_cmd(struct btmrvl_private *priv, u16 opcode, in btmrvl_send_sync_cmd() argument
181 if (priv->surprise_removed) { in btmrvl_send_sync_cmd()
201 skb_queue_head(&priv->adapter->tx_queue, skb); in btmrvl_send_sync_cmd()
203 priv->btmrvl_dev.sendcmdflag = true; in btmrvl_send_sync_cmd()
205 priv->adapter->cmd_complete = false; in btmrvl_send_sync_cmd()
207 wake_up_interruptible(&priv->main_thread.wait_q); in btmrvl_send_sync_cmd()
209 if (!wait_event_interruptible_timeout(priv->adapter->cmd_wait_q, in btmrvl_send_sync_cmd()
210 priv->adapter->cmd_complete || in btmrvl_send_sync_cmd()
211 priv->surprise_removed, in btmrvl_send_sync_cmd()
215 if (priv->surprise_removed) in btmrvl_send_sync_cmd()
221 int btmrvl_send_module_cfg_cmd(struct btmrvl_private *priv, u8 subcmd) in btmrvl_send_module_cfg_cmd() argument
225 ret = btmrvl_send_sync_cmd(priv, BT_CMD_MODULE_CFG_REQ, &subcmd, 1); in btmrvl_send_module_cfg_cmd()
233 static int btmrvl_enable_sco_routing_to_host(struct btmrvl_private *priv) in btmrvl_enable_sco_routing_to_host() argument
238 ret = btmrvl_send_sync_cmd(priv, BT_CMD_ROUTE_SCO_TO_HOST, &subcmd, 1); in btmrvl_enable_sco_routing_to_host()
245 int btmrvl_pscan_window_reporting(struct btmrvl_private *priv, u8 subcmd) in btmrvl_pscan_window_reporting() argument
247 struct btmrvl_sdio_card *card = priv->btmrvl_dev.card; in btmrvl_pscan_window_reporting()
253 ret = btmrvl_send_sync_cmd(priv, BT_CMD_PSCAN_WIN_REPORT_ENABLE, in btmrvl_pscan_window_reporting()
262 int btmrvl_send_hscfg_cmd(struct btmrvl_private *priv) in btmrvl_send_hscfg_cmd() argument
267 param[0] = (priv->btmrvl_dev.gpio_gap & 0xff00) >> 8; in btmrvl_send_hscfg_cmd()
268 param[1] = (u8) (priv->btmrvl_dev.gpio_gap & 0x00ff); in btmrvl_send_hscfg_cmd()
273 ret = btmrvl_send_sync_cmd(priv, BT_CMD_HOST_SLEEP_CONFIG, param, 2); in btmrvl_send_hscfg_cmd()
281 int btmrvl_enable_ps(struct btmrvl_private *priv) in btmrvl_enable_ps() argument
286 if (priv->btmrvl_dev.psmode) in btmrvl_enable_ps()
291 ret = btmrvl_send_sync_cmd(priv, BT_CMD_AUTO_SLEEP_MODE, ¶m, 1); in btmrvl_enable_ps()
299 int btmrvl_enable_hs(struct btmrvl_private *priv) in btmrvl_enable_hs() argument
301 struct btmrvl_adapter *adapter = priv->adapter; in btmrvl_enable_hs()
304 ret = btmrvl_send_sync_cmd(priv, BT_CMD_HOST_SLEEP_ENABLE, NULL, 0); in btmrvl_enable_hs()
312 priv->surprise_removed, in btmrvl_enable_hs()
314 if (ret < 0 || priv->surprise_removed) { in btmrvl_enable_hs()
332 int btmrvl_prepare_command(struct btmrvl_private *priv) in btmrvl_prepare_command() argument
336 if (priv->btmrvl_dev.hscfgcmd) { in btmrvl_prepare_command()
337 priv->btmrvl_dev.hscfgcmd = 0; in btmrvl_prepare_command()
338 btmrvl_send_hscfg_cmd(priv); in btmrvl_prepare_command()
341 if (priv->btmrvl_dev.pscmd) { in btmrvl_prepare_command()
342 priv->btmrvl_dev.pscmd = 0; in btmrvl_prepare_command()
343 btmrvl_enable_ps(priv); in btmrvl_prepare_command()
346 if (priv->btmrvl_dev.hscmd) { in btmrvl_prepare_command()
347 priv->btmrvl_dev.hscmd = 0; in btmrvl_prepare_command()
349 if (priv->btmrvl_dev.hsmode) { in btmrvl_prepare_command()
350 ret = btmrvl_enable_hs(priv); in btmrvl_prepare_command()
352 ret = priv->hw_wakeup_firmware(priv); in btmrvl_prepare_command()
353 priv->adapter->hs_state = HS_DEACTIVATED; in btmrvl_prepare_command()
361 void btmrvl_firmware_dump(struct btmrvl_private *priv) in btmrvl_firmware_dump() argument
363 if (priv->firmware_dump) in btmrvl_firmware_dump()
364 priv->firmware_dump(priv); in btmrvl_firmware_dump()
367 static int btmrvl_tx_pkt(struct btmrvl_private *priv, struct sk_buff *skb) in btmrvl_tx_pkt() argument
406 if (priv->hw_host_to_card) in btmrvl_tx_pkt()
407 ret = priv->hw_host_to_card(priv, skb->data, skb->len); in btmrvl_tx_pkt()
412 static void btmrvl_init_adapter(struct btmrvl_private *priv) in btmrvl_init_adapter() argument
416 skb_queue_head_init(&priv->adapter->tx_queue); in btmrvl_init_adapter()
418 priv->adapter->ps_state = PS_AWAKE; in btmrvl_init_adapter()
421 priv->adapter->hw_regs_buf = kzalloc(buf_size, GFP_KERNEL); in btmrvl_init_adapter()
422 if (!priv->adapter->hw_regs_buf) { in btmrvl_init_adapter()
423 priv->adapter->hw_regs = NULL; in btmrvl_init_adapter()
426 priv->adapter->hw_regs = in btmrvl_init_adapter()
427 (u8 *)ALIGN_ADDR(priv->adapter->hw_regs_buf, in btmrvl_init_adapter()
430 priv->adapter->hw_regs_buf, priv->adapter->hw_regs); in btmrvl_init_adapter()
433 init_waitqueue_head(&priv->adapter->cmd_wait_q); in btmrvl_init_adapter()
434 init_waitqueue_head(&priv->adapter->event_hs_wait_q); in btmrvl_init_adapter()
437 static void btmrvl_free_adapter(struct btmrvl_private *priv) in btmrvl_free_adapter() argument
439 skb_queue_purge(&priv->adapter->tx_queue); in btmrvl_free_adapter()
441 kfree(priv->adapter->hw_regs_buf); in btmrvl_free_adapter()
442 kfree(priv->adapter); in btmrvl_free_adapter()
444 priv->adapter = NULL; in btmrvl_free_adapter()
449 struct btmrvl_private *priv = hci_get_drvdata(hdev); in btmrvl_send_frame() local
474 skb_queue_tail(&priv->adapter->tx_queue, skb); in btmrvl_send_frame()
476 wake_up_interruptible(&priv->main_thread.wait_q); in btmrvl_send_frame()
483 struct btmrvl_private *priv = hci_get_drvdata(hdev); in btmrvl_flush() local
485 skb_queue_purge(&priv->adapter->tx_queue); in btmrvl_flush()
492 struct btmrvl_private *priv = hci_get_drvdata(hdev); in btmrvl_close() local
497 skb_queue_purge(&priv->adapter->tx_queue); in btmrvl_close()
509 static int btmrvl_download_cal_data(struct btmrvl_private *priv, in btmrvl_download_cal_data() argument
522 ret = btmrvl_send_sync_cmd(priv, BT_CMD_LOAD_CONFIG_DATA, data, in btmrvl_download_cal_data()
530 static int btmrvl_check_device_tree(struct btmrvl_private *priv) in btmrvl_check_device_tree() argument
540 priv->btmrvl_dev.gpio_gap = val; in btmrvl_check_device_tree()
549 ret = btmrvl_download_cal_data(priv, cal_data, in btmrvl_check_device_tree()
562 struct btmrvl_private *priv = hci_get_drvdata(hdev); in btmrvl_setup() local
565 ret = btmrvl_send_module_cfg_cmd(priv, MODULE_BRINGUP_REQ); in btmrvl_setup()
569 priv->btmrvl_dev.gpio_gap = 0xffff; in btmrvl_setup()
571 btmrvl_check_device_tree(priv); in btmrvl_setup()
573 btmrvl_enable_sco_routing_to_host(priv); in btmrvl_setup()
575 btmrvl_pscan_window_reporting(priv, 0x01); in btmrvl_setup()
577 priv->btmrvl_dev.psmode = 1; in btmrvl_setup()
578 btmrvl_enable_ps(priv); in btmrvl_setup()
580 btmrvl_send_hscfg_cmd(priv); in btmrvl_setup()
615 struct btmrvl_private *priv = thread->priv; in btmrvl_service_main_thread() local
616 struct btmrvl_adapter *adapter = priv->adapter; in btmrvl_service_main_thread()
627 if (kthread_should_stop() || priv->surprise_removed) { in btmrvl_service_main_thread()
634 (!priv->btmrvl_dev.tx_dnld_rdy || in btmrvl_service_main_thread()
646 if (kthread_should_stop() || priv->surprise_removed) { in btmrvl_service_main_thread()
651 spin_lock_irqsave(&priv->driver_lock, flags); in btmrvl_service_main_thread()
654 spin_unlock_irqrestore(&priv->driver_lock, flags); in btmrvl_service_main_thread()
655 priv->hw_process_int_status(priv); in btmrvl_service_main_thread()
658 spin_unlock_irqrestore(&priv->driver_lock, flags); in btmrvl_service_main_thread()
660 priv->hw_wakeup_firmware(priv); in btmrvl_service_main_thread()
663 spin_unlock_irqrestore(&priv->driver_lock, flags); in btmrvl_service_main_thread()
669 if (!priv->btmrvl_dev.tx_dnld_rdy) in btmrvl_service_main_thread()
674 if (btmrvl_tx_pkt(priv, skb)) in btmrvl_service_main_thread()
675 priv->btmrvl_dev.hcidev->stat.err_tx++; in btmrvl_service_main_thread()
677 priv->btmrvl_dev.hcidev->stat.byte_tx += skb->len; in btmrvl_service_main_thread()
686 int btmrvl_register_hdev(struct btmrvl_private *priv) in btmrvl_register_hdev() argument
697 priv->btmrvl_dev.hcidev = hdev; in btmrvl_register_hdev()
698 hci_set_drvdata(hdev, priv); in btmrvl_register_hdev()
708 hdev->dev_type = priv->btmrvl_dev.dev_type; in btmrvl_register_hdev()
727 kthread_stop(priv->main_thread.task); in btmrvl_register_hdev()
729 btmrvl_free_adapter(priv); in btmrvl_register_hdev()
730 kfree(priv); in btmrvl_register_hdev()
738 struct btmrvl_private *priv; in btmrvl_add_card() local
740 priv = kzalloc(sizeof(*priv), GFP_KERNEL); in btmrvl_add_card()
741 if (!priv) { in btmrvl_add_card()
746 priv->adapter = kzalloc(sizeof(*priv->adapter), GFP_KERNEL); in btmrvl_add_card()
747 if (!priv->adapter) { in btmrvl_add_card()
752 btmrvl_init_adapter(priv); in btmrvl_add_card()
755 priv->main_thread.priv = priv; in btmrvl_add_card()
756 spin_lock_init(&priv->driver_lock); in btmrvl_add_card()
758 init_waitqueue_head(&priv->main_thread.wait_q); in btmrvl_add_card()
759 priv->main_thread.task = kthread_run(btmrvl_service_main_thread, in btmrvl_add_card()
760 &priv->main_thread, "btmrvl_main_service"); in btmrvl_add_card()
761 if (IS_ERR(priv->main_thread.task)) in btmrvl_add_card()
764 priv->btmrvl_dev.card = card; in btmrvl_add_card()
765 priv->btmrvl_dev.tx_dnld_rdy = true; in btmrvl_add_card()
767 return priv; in btmrvl_add_card()
770 btmrvl_free_adapter(priv); in btmrvl_add_card()
773 kfree(priv); in btmrvl_add_card()
780 int btmrvl_remove_card(struct btmrvl_private *priv) in btmrvl_remove_card() argument
784 hdev = priv->btmrvl_dev.hcidev; in btmrvl_remove_card()
786 wake_up_interruptible(&priv->adapter->cmd_wait_q); in btmrvl_remove_card()
787 wake_up_interruptible(&priv->adapter->event_hs_wait_q); in btmrvl_remove_card()
789 kthread_stop(priv->main_thread.task); in btmrvl_remove_card()
799 priv->btmrvl_dev.hcidev = NULL; in btmrvl_remove_card()
801 btmrvl_free_adapter(priv); in btmrvl_remove_card()
803 kfree(priv); in btmrvl_remove_card()