Lines Matching refs:qca
133 struct qca_data *qca = hu->priv; in serial_clock_vote() local
136 bool old_vote = (qca->tx_vote | qca->rx_vote); in serial_clock_vote()
141 diff = jiffies_to_msecs(jiffies - qca->vote_last_jif); in serial_clock_vote()
144 qca->vote_off_ms += diff; in serial_clock_vote()
146 qca->vote_on_ms += diff; in serial_clock_vote()
150 qca->tx_vote = true; in serial_clock_vote()
151 qca->tx_votes_on++; in serial_clock_vote()
156 qca->rx_vote = true; in serial_clock_vote()
157 qca->rx_votes_on++; in serial_clock_vote()
162 qca->tx_vote = false; in serial_clock_vote()
163 qca->tx_votes_off++; in serial_clock_vote()
164 new_vote = qca->rx_vote | qca->tx_vote; in serial_clock_vote()
168 qca->rx_vote = false; in serial_clock_vote()
169 qca->rx_votes_off++; in serial_clock_vote()
170 new_vote = qca->rx_vote | qca->tx_vote; in serial_clock_vote()
187 diff = jiffies_to_msecs(jiffies - qca->vote_last_jif); in serial_clock_vote()
190 qca->votes_on++; in serial_clock_vote()
191 qca->vote_off_ms += diff; in serial_clock_vote()
193 qca->votes_off++; in serial_clock_vote()
194 qca->vote_on_ms += diff; in serial_clock_vote()
196 qca->vote_last_jif = jiffies; in serial_clock_vote()
207 struct qca_data *qca = hu->priv; in send_hci_ibs_cmd() local
220 skb_queue_tail(&qca->txq, skb); in send_hci_ibs_cmd()
227 struct qca_data *qca = container_of(work, struct qca_data, in qca_wq_awake_device() local
229 struct hci_uart *hu = qca->hu; in qca_wq_awake_device()
237 spin_lock(&qca->hci_ibs_lock); in qca_wq_awake_device()
243 qca->ibs_sent_wakes++; in qca_wq_awake_device()
246 retrans_delay = msecs_to_jiffies(qca->wake_retrans); in qca_wq_awake_device()
247 mod_timer(&qca->wake_retrans_timer, jiffies + retrans_delay); in qca_wq_awake_device()
249 spin_unlock(&qca->hci_ibs_lock); in qca_wq_awake_device()
257 struct qca_data *qca = container_of(work, struct qca_data, in qca_wq_awake_rx() local
259 struct hci_uart *hu = qca->hu; in qca_wq_awake_rx()
265 spin_lock(&qca->hci_ibs_lock); in qca_wq_awake_rx()
266 qca->rx_ibs_state = HCI_IBS_RX_AWAKE; in qca_wq_awake_rx()
274 qca->ibs_sent_wacks++; in qca_wq_awake_rx()
276 spin_unlock(&qca->hci_ibs_lock); in qca_wq_awake_rx()
284 struct qca_data *qca = container_of(work, struct qca_data, in qca_wq_serial_rx_clock_vote_off() local
286 struct hci_uart *hu = qca->hu; in qca_wq_serial_rx_clock_vote_off()
295 struct qca_data *qca = container_of(work, struct qca_data, in qca_wq_serial_tx_clock_vote_off() local
297 struct hci_uart *hu = qca->hu; in qca_wq_serial_tx_clock_vote_off()
313 struct qca_data *qca = hu->priv; in hci_ibs_tx_idle_timeout() local
316 BT_DBG("hu %p idle timeout in %d state", hu, qca->tx_ibs_state); in hci_ibs_tx_idle_timeout()
318 spin_lock_irqsave_nested(&qca->hci_ibs_lock, in hci_ibs_tx_idle_timeout()
321 switch (qca->tx_ibs_state) { in hci_ibs_tx_idle_timeout()
328 qca->tx_ibs_state = HCI_IBS_TX_ASLEEP; in hci_ibs_tx_idle_timeout()
329 qca->ibs_sent_slps++; in hci_ibs_tx_idle_timeout()
330 queue_work(qca->workqueue, &qca->ws_tx_vote_off); in hci_ibs_tx_idle_timeout()
338 BT_ERR("Spurrious timeout tx state %d", qca->tx_ibs_state); in hci_ibs_tx_idle_timeout()
342 spin_unlock_irqrestore(&qca->hci_ibs_lock, flags); in hci_ibs_tx_idle_timeout()
348 struct qca_data *qca = hu->priv; in hci_ibs_wake_retrans_timeout() local
353 hu, qca->tx_ibs_state); in hci_ibs_wake_retrans_timeout()
355 spin_lock_irqsave_nested(&qca->hci_ibs_lock, in hci_ibs_wake_retrans_timeout()
358 switch (qca->tx_ibs_state) { in hci_ibs_wake_retrans_timeout()
366 qca->ibs_sent_wakes++; in hci_ibs_wake_retrans_timeout()
367 retrans_delay = msecs_to_jiffies(qca->wake_retrans); in hci_ibs_wake_retrans_timeout()
368 mod_timer(&qca->wake_retrans_timer, jiffies + retrans_delay); in hci_ibs_wake_retrans_timeout()
376 BT_ERR("Spurrious timeout tx state %d", qca->tx_ibs_state); in hci_ibs_wake_retrans_timeout()
380 spin_unlock_irqrestore(&qca->hci_ibs_lock, flags); in hci_ibs_wake_retrans_timeout()
389 struct qca_data *qca; in qca_open() local
393 qca = kzalloc(sizeof(struct qca_data), GFP_ATOMIC); in qca_open()
394 if (!qca) in qca_open()
397 skb_queue_head_init(&qca->txq); in qca_open()
398 skb_queue_head_init(&qca->tx_wait_q); in qca_open()
399 spin_lock_init(&qca->hci_ibs_lock); in qca_open()
400 qca->workqueue = create_singlethread_workqueue("qca_wq"); in qca_open()
401 if (!qca->workqueue) { in qca_open()
403 kfree(qca); in qca_open()
407 INIT_WORK(&qca->ws_awake_rx, qca_wq_awake_rx); in qca_open()
408 INIT_WORK(&qca->ws_awake_device, qca_wq_awake_device); in qca_open()
409 INIT_WORK(&qca->ws_rx_vote_off, qca_wq_serial_rx_clock_vote_off); in qca_open()
410 INIT_WORK(&qca->ws_tx_vote_off, qca_wq_serial_tx_clock_vote_off); in qca_open()
412 qca->hu = hu; in qca_open()
415 qca->tx_ibs_state = HCI_IBS_TX_ASLEEP; in qca_open()
416 qca->rx_ibs_state = HCI_IBS_RX_ASLEEP; in qca_open()
419 qca->tx_vote = false; in qca_open()
420 qca->rx_vote = false; in qca_open()
421 qca->flags = 0; in qca_open()
423 qca->ibs_sent_wacks = 0; in qca_open()
424 qca->ibs_sent_slps = 0; in qca_open()
425 qca->ibs_sent_wakes = 0; in qca_open()
426 qca->ibs_recv_wacks = 0; in qca_open()
427 qca->ibs_recv_slps = 0; in qca_open()
428 qca->ibs_recv_wakes = 0; in qca_open()
429 qca->vote_last_jif = jiffies; in qca_open()
430 qca->vote_on_ms = 0; in qca_open()
431 qca->vote_off_ms = 0; in qca_open()
432 qca->votes_on = 0; in qca_open()
433 qca->votes_off = 0; in qca_open()
434 qca->tx_votes_on = 0; in qca_open()
435 qca->tx_votes_off = 0; in qca_open()
436 qca->rx_votes_on = 0; in qca_open()
437 qca->rx_votes_off = 0; in qca_open()
439 hu->priv = qca; in qca_open()
441 init_timer(&qca->wake_retrans_timer); in qca_open()
442 qca->wake_retrans_timer.function = hci_ibs_wake_retrans_timeout; in qca_open()
443 qca->wake_retrans_timer.data = (u_long)hu; in qca_open()
444 qca->wake_retrans = IBS_WAKE_RETRANS_TIMEOUT_MS; in qca_open()
446 init_timer(&qca->tx_idle_timer); in qca_open()
447 qca->tx_idle_timer.function = hci_ibs_tx_idle_timeout; in qca_open()
448 qca->tx_idle_timer.data = (u_long)hu; in qca_open()
449 qca->tx_idle_delay = IBS_TX_IDLE_TIMEOUT_MS; in qca_open()
452 qca->tx_idle_delay, qca->wake_retrans); in qca_open()
460 struct qca_data *qca = hu->priv; in qca_debugfs_init() local
471 debugfs_create_u8("tx_ibs_state", mode, ibs_dir, &qca->tx_ibs_state); in qca_debugfs_init()
472 debugfs_create_u8("rx_ibs_state", mode, ibs_dir, &qca->rx_ibs_state); in qca_debugfs_init()
474 &qca->ibs_sent_slps); in qca_debugfs_init()
476 &qca->ibs_sent_wakes); in qca_debugfs_init()
478 &qca->ibs_sent_wacks); in qca_debugfs_init()
480 &qca->ibs_recv_slps); in qca_debugfs_init()
482 &qca->ibs_recv_wakes); in qca_debugfs_init()
484 &qca->ibs_recv_wacks); in qca_debugfs_init()
485 debugfs_create_bool("tx_vote", mode, ibs_dir, &qca->tx_vote); in qca_debugfs_init()
486 debugfs_create_u64("tx_votes_on", mode, ibs_dir, &qca->tx_votes_on); in qca_debugfs_init()
487 debugfs_create_u64("tx_votes_off", mode, ibs_dir, &qca->tx_votes_off); in qca_debugfs_init()
488 debugfs_create_bool("rx_vote", mode, ibs_dir, &qca->rx_vote); in qca_debugfs_init()
489 debugfs_create_u64("rx_votes_on", mode, ibs_dir, &qca->rx_votes_on); in qca_debugfs_init()
490 debugfs_create_u64("rx_votes_off", mode, ibs_dir, &qca->rx_votes_off); in qca_debugfs_init()
491 debugfs_create_u64("votes_on", mode, ibs_dir, &qca->votes_on); in qca_debugfs_init()
492 debugfs_create_u64("votes_off", mode, ibs_dir, &qca->votes_off); in qca_debugfs_init()
493 debugfs_create_u32("vote_on_ms", mode, ibs_dir, &qca->vote_on_ms); in qca_debugfs_init()
494 debugfs_create_u32("vote_off_ms", mode, ibs_dir, &qca->vote_off_ms); in qca_debugfs_init()
498 debugfs_create_u32("wake_retrans", mode, ibs_dir, &qca->wake_retrans); in qca_debugfs_init()
500 &qca->tx_idle_delay); in qca_debugfs_init()
506 struct qca_data *qca = hu->priv; in qca_flush() local
510 skb_queue_purge(&qca->tx_wait_q); in qca_flush()
511 skb_queue_purge(&qca->txq); in qca_flush()
519 struct qca_data *qca = hu->priv; in qca_close() local
525 skb_queue_purge(&qca->tx_wait_q); in qca_close()
526 skb_queue_purge(&qca->txq); in qca_close()
527 del_timer(&qca->tx_idle_timer); in qca_close()
528 del_timer(&qca->wake_retrans_timer); in qca_close()
529 destroy_workqueue(qca->workqueue); in qca_close()
530 qca->hu = NULL; in qca_close()
532 kfree_skb(qca->rx_skb); in qca_close()
536 kfree(qca); in qca_close()
546 struct qca_data *qca = hu->priv; in device_want_to_wakeup() local
550 spin_lock_irqsave(&qca->hci_ibs_lock, flags); in device_want_to_wakeup()
552 qca->ibs_recv_wakes++; in device_want_to_wakeup()
554 switch (qca->rx_ibs_state) { in device_want_to_wakeup()
559 queue_work(qca->workqueue, &qca->ws_awake_rx); in device_want_to_wakeup()
560 spin_unlock_irqrestore(&qca->hci_ibs_lock, flags); in device_want_to_wakeup()
571 qca->ibs_sent_wacks++; in device_want_to_wakeup()
577 qca->rx_ibs_state); in device_want_to_wakeup()
581 spin_unlock_irqrestore(&qca->hci_ibs_lock, flags); in device_want_to_wakeup()
592 struct qca_data *qca = hu->priv; in device_want_to_sleep() local
596 spin_lock_irqsave(&qca->hci_ibs_lock, flags); in device_want_to_sleep()
598 qca->ibs_recv_slps++; in device_want_to_sleep()
600 switch (qca->rx_ibs_state) { in device_want_to_sleep()
603 qca->rx_ibs_state = HCI_IBS_RX_ASLEEP; in device_want_to_sleep()
605 queue_work(qca->workqueue, &qca->ws_rx_vote_off); in device_want_to_sleep()
614 qca->rx_ibs_state); in device_want_to_sleep()
618 spin_unlock_irqrestore(&qca->hci_ibs_lock, flags); in device_want_to_sleep()
626 struct qca_data *qca = hu->priv; in device_woke_up() local
631 spin_lock_irqsave(&qca->hci_ibs_lock, flags); in device_woke_up()
633 qca->ibs_recv_wacks++; in device_woke_up()
635 switch (qca->tx_ibs_state) { in device_woke_up()
639 qca->tx_ibs_state); in device_woke_up()
644 while ((skb = skb_dequeue(&qca->tx_wait_q))) in device_woke_up()
645 skb_queue_tail(&qca->txq, skb); in device_woke_up()
648 del_timer(&qca->wake_retrans_timer); in device_woke_up()
649 idle_delay = msecs_to_jiffies(qca->tx_idle_delay); in device_woke_up()
650 mod_timer(&qca->tx_idle_timer, jiffies + idle_delay); in device_woke_up()
651 qca->tx_ibs_state = HCI_IBS_TX_AWAKE; in device_woke_up()
659 qca->tx_ibs_state); in device_woke_up()
663 spin_unlock_irqrestore(&qca->hci_ibs_lock, flags); in device_woke_up()
675 struct qca_data *qca = hu->priv; in qca_enqueue() local
678 qca->tx_ibs_state); in qca_enqueue()
686 if (!test_bit(STATE_IN_BAND_SLEEP_ENABLED, &qca->flags)) { in qca_enqueue()
687 skb_queue_tail(&qca->txq, skb); in qca_enqueue()
691 spin_lock_irqsave(&qca->hci_ibs_lock, flags); in qca_enqueue()
694 switch (qca->tx_ibs_state) { in qca_enqueue()
697 skb_queue_tail(&qca->txq, skb); in qca_enqueue()
698 idle_delay = msecs_to_jiffies(qca->tx_idle_delay); in qca_enqueue()
699 mod_timer(&qca->tx_idle_timer, jiffies + idle_delay); in qca_enqueue()
705 skb_queue_tail(&qca->tx_wait_q, skb); in qca_enqueue()
707 qca->tx_ibs_state = HCI_IBS_TX_WAKING; in qca_enqueue()
709 queue_work(qca->workqueue, &qca->ws_awake_device); in qca_enqueue()
715 skb_queue_tail(&qca->tx_wait_q, skb); in qca_enqueue()
720 qca->tx_ibs_state); in qca_enqueue()
725 spin_unlock_irqrestore(&qca->hci_ibs_lock, flags); in qca_enqueue()
798 struct qca_data *qca = hu->priv; in qca_recv() local
803 qca->rx_skb = h4_recv_buf(hu->hdev, qca->rx_skb, data, count, in qca_recv()
805 if (IS_ERR(qca->rx_skb)) { in qca_recv()
806 int err = PTR_ERR(qca->rx_skb); in qca_recv()
808 qca->rx_skb = NULL; in qca_recv()
817 struct qca_data *qca = hu->priv; in qca_dequeue() local
819 return skb_dequeue(&qca->txq); in qca_dequeue()
859 struct qca_data *qca = hu->priv; in qca_set_baudrate() local
878 skb_queue_tail(&qca->txq, skb); in qca_set_baudrate()
895 struct qca_data *qca = hu->priv; in qca_setup() local
902 clear_bit(STATE_IN_BAND_SLEEP_ENABLED, &qca->flags); in qca_setup()
937 set_bit(STATE_IN_BAND_SLEEP_ENABLED, &qca->flags); in qca_setup()