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
392 if (priv->hw_host_to_card) in btmrvl_tx_pkt()
393 ret = priv->hw_host_to_card(priv, skb->data, skb->len); in btmrvl_tx_pkt()
398 static void btmrvl_init_adapter(struct btmrvl_private *priv) in btmrvl_init_adapter() argument
402 skb_queue_head_init(&priv->adapter->tx_queue); in btmrvl_init_adapter()
404 priv->adapter->ps_state = PS_AWAKE; in btmrvl_init_adapter()
407 priv->adapter->hw_regs_buf = kzalloc(buf_size, GFP_KERNEL); in btmrvl_init_adapter()
408 if (!priv->adapter->hw_regs_buf) { in btmrvl_init_adapter()
409 priv->adapter->hw_regs = NULL; in btmrvl_init_adapter()
412 priv->adapter->hw_regs = in btmrvl_init_adapter()
413 (u8 *)ALIGN_ADDR(priv->adapter->hw_regs_buf, in btmrvl_init_adapter()
416 priv->adapter->hw_regs_buf, priv->adapter->hw_regs); in btmrvl_init_adapter()
419 init_waitqueue_head(&priv->adapter->cmd_wait_q); in btmrvl_init_adapter()
420 init_waitqueue_head(&priv->adapter->event_hs_wait_q); in btmrvl_init_adapter()
423 static void btmrvl_free_adapter(struct btmrvl_private *priv) in btmrvl_free_adapter() argument
425 skb_queue_purge(&priv->adapter->tx_queue); in btmrvl_free_adapter()
427 kfree(priv->adapter->hw_regs_buf); in btmrvl_free_adapter()
428 kfree(priv->adapter); in btmrvl_free_adapter()
430 priv->adapter = NULL; in btmrvl_free_adapter()
435 struct btmrvl_private *priv = hci_get_drvdata(hdev); in btmrvl_send_frame() local
453 skb_queue_tail(&priv->adapter->tx_queue, skb); in btmrvl_send_frame()
455 wake_up_interruptible(&priv->main_thread.wait_q); in btmrvl_send_frame()
462 struct btmrvl_private *priv = hci_get_drvdata(hdev); in btmrvl_flush() local
464 skb_queue_purge(&priv->adapter->tx_queue); in btmrvl_flush()
471 struct btmrvl_private *priv = hci_get_drvdata(hdev); in btmrvl_close() local
473 skb_queue_purge(&priv->adapter->tx_queue); in btmrvl_close()
483 static int btmrvl_download_cal_data(struct btmrvl_private *priv, in btmrvl_download_cal_data() argument
496 ret = btmrvl_send_sync_cmd(priv, BT_CMD_LOAD_CONFIG_DATA, data, in btmrvl_download_cal_data()
504 static int btmrvl_check_device_tree(struct btmrvl_private *priv) in btmrvl_check_device_tree() argument
514 priv->btmrvl_dev.gpio_gap = val; in btmrvl_check_device_tree()
525 ret = btmrvl_download_cal_data(priv, cal_data, in btmrvl_check_device_tree()
539 struct btmrvl_private *priv = hci_get_drvdata(hdev); in btmrvl_setup() local
542 ret = btmrvl_send_module_cfg_cmd(priv, MODULE_BRINGUP_REQ); in btmrvl_setup()
546 priv->btmrvl_dev.gpio_gap = 0xffff; in btmrvl_setup()
548 btmrvl_check_device_tree(priv); in btmrvl_setup()
550 btmrvl_enable_sco_routing_to_host(priv); in btmrvl_setup()
552 btmrvl_pscan_window_reporting(priv, 0x01); in btmrvl_setup()
554 priv->btmrvl_dev.psmode = 1; in btmrvl_setup()
555 btmrvl_enable_ps(priv); in btmrvl_setup()
557 btmrvl_send_hscfg_cmd(priv); in btmrvl_setup()
592 struct btmrvl_private *priv = thread->priv; in btmrvl_service_main_thread() local
593 struct btmrvl_adapter *adapter = priv->adapter; in btmrvl_service_main_thread()
604 if (kthread_should_stop() || priv->surprise_removed) { in btmrvl_service_main_thread()
611 (!priv->btmrvl_dev.tx_dnld_rdy || in btmrvl_service_main_thread()
623 if (kthread_should_stop() || priv->surprise_removed) { in btmrvl_service_main_thread()
628 spin_lock_irqsave(&priv->driver_lock, flags); in btmrvl_service_main_thread()
631 spin_unlock_irqrestore(&priv->driver_lock, flags); in btmrvl_service_main_thread()
632 priv->hw_process_int_status(priv); in btmrvl_service_main_thread()
635 spin_unlock_irqrestore(&priv->driver_lock, flags); in btmrvl_service_main_thread()
637 priv->hw_wakeup_firmware(priv); in btmrvl_service_main_thread()
640 spin_unlock_irqrestore(&priv->driver_lock, flags); in btmrvl_service_main_thread()
646 if (!priv->btmrvl_dev.tx_dnld_rdy) in btmrvl_service_main_thread()
651 if (btmrvl_tx_pkt(priv, skb)) in btmrvl_service_main_thread()
652 priv->btmrvl_dev.hcidev->stat.err_tx++; in btmrvl_service_main_thread()
654 priv->btmrvl_dev.hcidev->stat.byte_tx += skb->len; in btmrvl_service_main_thread()
663 int btmrvl_register_hdev(struct btmrvl_private *priv) in btmrvl_register_hdev() argument
674 priv->btmrvl_dev.hcidev = hdev; in btmrvl_register_hdev()
675 hci_set_drvdata(hdev, priv); in btmrvl_register_hdev()
685 hdev->dev_type = priv->btmrvl_dev.dev_type; in btmrvl_register_hdev()
704 kthread_stop(priv->main_thread.task); in btmrvl_register_hdev()
706 btmrvl_free_adapter(priv); in btmrvl_register_hdev()
707 kfree(priv); in btmrvl_register_hdev()
715 struct btmrvl_private *priv; in btmrvl_add_card() local
717 priv = kzalloc(sizeof(*priv), GFP_KERNEL); in btmrvl_add_card()
718 if (!priv) { in btmrvl_add_card()
723 priv->adapter = kzalloc(sizeof(*priv->adapter), GFP_KERNEL); in btmrvl_add_card()
724 if (!priv->adapter) { in btmrvl_add_card()
729 btmrvl_init_adapter(priv); in btmrvl_add_card()
732 priv->main_thread.priv = priv; in btmrvl_add_card()
733 spin_lock_init(&priv->driver_lock); in btmrvl_add_card()
735 init_waitqueue_head(&priv->main_thread.wait_q); in btmrvl_add_card()
736 priv->main_thread.task = kthread_run(btmrvl_service_main_thread, in btmrvl_add_card()
737 &priv->main_thread, "btmrvl_main_service"); in btmrvl_add_card()
738 if (IS_ERR(priv->main_thread.task)) in btmrvl_add_card()
741 priv->btmrvl_dev.card = card; in btmrvl_add_card()
742 priv->btmrvl_dev.tx_dnld_rdy = true; in btmrvl_add_card()
744 return priv; in btmrvl_add_card()
747 btmrvl_free_adapter(priv); in btmrvl_add_card()
750 kfree(priv); in btmrvl_add_card()
757 int btmrvl_remove_card(struct btmrvl_private *priv) in btmrvl_remove_card() argument
761 hdev = priv->btmrvl_dev.hcidev; in btmrvl_remove_card()
763 wake_up_interruptible(&priv->adapter->cmd_wait_q); in btmrvl_remove_card()
764 wake_up_interruptible(&priv->adapter->event_hs_wait_q); in btmrvl_remove_card()
766 kthread_stop(priv->main_thread.task); in btmrvl_remove_card()
776 priv->btmrvl_dev.hcidev = NULL; in btmrvl_remove_card()
778 btmrvl_free_adapter(priv); in btmrvl_remove_card()
780 kfree(priv); in btmrvl_remove_card()