Lines Matching refs:hu
142 struct hci_uart *hu;
232 static void qca_power_shutdown(struct hci_uart *hu);
236 static enum qca_btsoc_type qca_soc_type(struct hci_uart *hu)
240 if (hu->serdev) {
241 struct qca_serdev *qsd = serdev_device_get_drvdata(hu->serdev);
251 static const char *qca_get_firmware_name(struct hci_uart *hu)
253 if (hu->serdev) {
254 struct qca_serdev *qsd = serdev_device_get_drvdata(hu->serdev);
279 static void serial_clock_vote(unsigned long vote, struct hci_uart *hu)
281 struct qca_data *qca = hu->priv;
326 __serial_clock_on(hu->tty);
328 __serial_clock_off(hu->tty);
349 static int send_hci_ibs_cmd(u8 cmd, struct hci_uart *hu)
353 struct qca_data *qca = hu->priv;
355 BT_DBG("hu %p send hci ibs cmd 0x%x", hu, cmd);
375 struct hci_uart *hu = qca->hu;
379 BT_DBG("hu %p wq awake device", hu);
382 serial_clock_vote(HCI_IBS_TX_VOTE_CLOCK_ON, hu);
387 if (send_hci_ibs_cmd(HCI_IBS_WAKE_IND, hu) < 0)
399 hci_uart_tx_wakeup(hu);
406 struct hci_uart *hu = qca->hu;
409 BT_DBG("hu %p wq awake rx", hu);
411 serial_clock_vote(HCI_IBS_RX_VOTE_CLOCK_ON, hu);
419 if (send_hci_ibs_cmd(HCI_IBS_WAKE_ACK, hu) < 0)
427 hci_uart_tx_wakeup(hu);
434 struct hci_uart *hu = qca->hu;
436 BT_DBG("hu %p rx clock vote off", hu);
438 serial_clock_vote(HCI_IBS_RX_VOTE_CLOCK_OFF, hu);
445 struct hci_uart *hu = qca->hu;
447 BT_DBG("hu %p tx clock vote off", hu);
450 hci_uart_tx_wakeup(hu);
455 serial_clock_vote(HCI_IBS_TX_VOTE_CLOCK_OFF, hu);
461 struct hci_uart *hu = qca->hu;
464 BT_DBG("hu %p idle timeout in %d state", hu, qca->tx_ibs_state);
472 if (send_hci_ibs_cmd(HCI_IBS_SLEEP_IND, hu) < 0) {
494 struct hci_uart *hu = qca->hu;
498 BT_DBG("hu %p wake retransmit timeout in %d state",
499 hu, qca->tx_ibs_state);
514 if (send_hci_ibs_cmd(HCI_IBS_WAKE_IND, hu) < 0) {
533 hci_uart_tx_wakeup(hu);
541 struct hci_uart *hu = qca->hu;
550 hci_reset_dev(hu->hdev);
559 static int qca_open(struct hci_uart *hu)
564 BT_DBG("hu %p qca_open", hu);
566 if (!hci_uart_has_flow_control(hu))
594 qca->hu = hu;
603 hu->priv = qca;
605 if (hu->serdev) {
606 qcadev = serdev_device_get_drvdata(hu->serdev);
609 hu->init_speed = qcadev->init_speed;
612 hu->oper_speed = qcadev->oper_speed;
629 struct hci_uart *hu = hci_get_drvdata(hdev);
630 struct qca_data *qca = hu->priv;
677 static int qca_flush(struct hci_uart *hu)
679 struct qca_data *qca = hu->priv;
681 BT_DBG("hu %p qca flush", hu);
690 static int qca_close(struct hci_uart *hu)
692 struct qca_data *qca = hu->priv;
694 BT_DBG("hu %p qca close", hu);
696 serial_clock_vote(HCI_IBS_VOTE_STATS_UPDATE, hu);
704 qca->hu = NULL;
708 hu->priv = NULL;
717 static void device_want_to_wakeup(struct hci_uart *hu)
720 struct qca_data *qca = hu->priv;
722 BT_DBG("hu %p want to wake up", hu);
747 if (send_hci_ibs_cmd(HCI_IBS_WAKE_ACK, hu) < 0) {
764 hci_uart_tx_wakeup(hu);
769 static void device_want_to_sleep(struct hci_uart *hu)
772 struct qca_data *qca = hu->priv;
774 BT_DBG("hu %p want to sleep in %d state", hu, qca->rx_ibs_state);
805 static void device_woke_up(struct hci_uart *hu)
808 struct qca_data *qca = hu->priv;
811 BT_DBG("hu %p woke up", hu);
852 hci_uart_tx_wakeup(hu);
858 static int qca_enqueue(struct hci_uart *hu, struct sk_buff *skb)
861 struct qca_data *qca = hu->priv;
863 BT_DBG("hu %p qca enq skb %p tx_ibs_state %d", hu, skb,
868 bt_dev_dbg(hu->hdev, "SSR is in progress");
928 struct hci_uart *hu = hci_get_drvdata(hdev);
930 BT_DBG("hu %p recv hci ibs cmd 0x%x", hu, HCI_IBS_SLEEP_IND);
932 device_want_to_sleep(hu);
940 struct hci_uart *hu = hci_get_drvdata(hdev);
942 BT_DBG("hu %p recv hci ibs cmd 0x%x", hu, HCI_IBS_WAKE_IND);
944 device_want_to_wakeup(hu);
952 struct hci_uart *hu = hci_get_drvdata(hdev);
954 BT_DBG("hu %p recv hci ibs cmd 0x%x", hu, HCI_IBS_WAKE_ACK);
956 device_woke_up(hu);
979 struct hci_uart *hu = qca->hu;
989 enum qca_btsoc_type soc_type = qca_soc_type(hu);
1032 bt_dev_err(hu->hdev, "Rx invalid memdump size");
1040 bt_dev_info(hu->hdev, "QCA collecting dump of size:%u",
1060 bt_dev_err(hu->hdev, "QCA: Discarding other packets");
1079 bt_dev_err(hu->hdev, "QCA controller missed packet:%d",
1084 bt_dev_err(hu->hdev,
1099 bt_dev_err(hu->hdev,
1102 bt_dev_dbg(hu->hdev,
1112 bt_dev_err(hu->hdev,
1119 bt_dev_info(hu->hdev,
1124 dev_coredumpv(&hu->serdev->dev, memdump_buf,
1141 struct hci_uart *hu = hci_get_drvdata(hdev);
1142 struct qca_data *qca = hu->priv;
1153 struct hci_uart *hu = hci_get_drvdata(hdev);
1154 struct qca_data *qca = hu->priv;
1218 static int qca_recv(struct hci_uart *hu, const void *data, int count)
1220 struct qca_data *qca = hu->priv;
1222 if (!test_bit(HCI_UART_REGISTERED, &hu->flags))
1225 qca->rx_skb = h4_recv_buf(hu->hdev, qca->rx_skb, data, count,
1229 bt_dev_err(hu->hdev, "Frame reassembly failed (%d)", err);
1237 static struct sk_buff *qca_dequeue(struct hci_uart *hu)
1239 struct qca_data *qca = hu->priv;
1282 struct hci_uart *hu = hci_get_drvdata(hdev);
1283 struct qca_data *qca = hu->priv;
1303 hci_uart_tx_wakeup(hu);
1310 if (hu->serdev)
1311 serdev_device_wait_until_sent(hu->serdev,
1315 if (qca_is_wcn399x(qca_soc_type(hu)))
1323 static inline void host_set_baudrate(struct hci_uart *hu, unsigned int speed)
1325 if (hu->serdev)
1326 serdev_device_set_baudrate(hu->serdev, speed);
1328 hci_uart_set_baudrate(hu, speed);
1331 static int qca_send_power_pulse(struct hci_uart *hu, bool on)
1347 bt_dev_dbg(hu->hdev, "sending power pulse %02x to controller", cmd);
1349 serdev_device_write_flush(hu->serdev);
1350 hci_uart_set_flow_control(hu, true);
1351 ret = serdev_device_write_buf(hu->serdev, &cmd, sizeof(cmd));
1353 bt_dev_err(hu->hdev, "failed to send power pulse %02x", cmd);
1357 serdev_device_wait_until_sent(hu->serdev, timeout);
1358 hci_uart_set_flow_control(hu, false);
1369 static unsigned int qca_get_speed(struct hci_uart *hu,
1375 if (hu->init_speed)
1376 speed = hu->init_speed;
1377 else if (hu->proto->init_speed)
1378 speed = hu->proto->init_speed;
1380 if (hu->oper_speed)
1381 speed = hu->oper_speed;
1382 else if (hu->proto->oper_speed)
1383 speed = hu->proto->oper_speed;
1389 static int qca_check_speeds(struct hci_uart *hu)
1391 if (qca_is_wcn399x(qca_soc_type(hu))) {
1392 if (!qca_get_speed(hu, QCA_INIT_SPEED) &&
1393 !qca_get_speed(hu, QCA_OPER_SPEED))
1396 if (!qca_get_speed(hu, QCA_INIT_SPEED) ||
1397 !qca_get_speed(hu, QCA_OPER_SPEED))
1404 static int qca_set_speed(struct hci_uart *hu, enum qca_speed_type speed_type)
1407 struct qca_data *qca = hu->priv;
1411 speed = qca_get_speed(hu, QCA_INIT_SPEED);
1413 host_set_baudrate(hu, speed);
1415 enum qca_btsoc_type soc_type = qca_soc_type(hu);
1417 speed = qca_get_speed(hu, QCA_OPER_SPEED);
1425 hci_uart_set_flow_control(hu, true);
1433 bt_dev_dbg(hu->hdev, "Set UART speed to %d", speed);
1434 ret = qca_set_baudrate(hu->hdev, qca_baudrate);
1438 host_set_baudrate(hu, speed);
1442 hci_uart_set_flow_control(hu, false);
1450 bt_dev_err(hu->hdev,
1462 static int qca_send_crashbuffer(struct hci_uart *hu)
1464 struct qca_data *qca = hu->priv;
1469 bt_dev_err(hu->hdev, "Failed to allocate memory for skb packet");
1480 bt_dev_info(hu->hdev, "crash the soc to collect controller dump");
1482 hci_uart_tx_wakeup(hu);
1489 struct hci_uart *hu = hci_get_drvdata(hdev);
1490 struct qca_data *qca = hu->priv;
1500 struct hci_uart *hu = hci_get_drvdata(hdev);
1501 struct qca_data *qca = hu->priv;
1515 qca_send_crashbuffer(hu);
1527 bt_dev_err(hu->hdev, "clearing allocated memory due to memdump timeout");
1549 struct hci_uart *hu = hci_get_drvdata(hdev);
1550 struct qca_data *qca = hu->priv;
1555 qca_send_crashbuffer(hu);
1572 hci_reset_dev(hu->hdev);
1578 static int qca_wcn3990_init(struct hci_uart *hu)
1586 qcadev = serdev_device_get_drvdata(hu->serdev);
1588 serdev_device_close(hu->serdev);
1593 ret = serdev_device_open(hu->serdev);
1595 bt_dev_err(hu->hdev, "failed to open port");
1601 host_set_baudrate(hu, 2400);
1602 ret = qca_send_power_pulse(hu, false);
1606 qca_set_speed(hu, QCA_INIT_SPEED);
1607 ret = qca_send_power_pulse(hu, true);
1616 serdev_device_close(hu->serdev);
1617 ret = serdev_device_open(hu->serdev);
1619 bt_dev_err(hu->hdev, "failed to open port");
1623 hci_uart_set_flow_control(hu, false);
1630 struct hci_uart *hu = hci_get_drvdata(hdev);
1631 enum qca_btsoc_type soc_type = qca_soc_type(hu);
1633 struct qca_data *qca = hu->priv;
1639 if (!hu->serdev)
1643 ret = qca_wcn3990_init(hu);
1645 qcadev = serdev_device_get_drvdata(hu->serdev);
1657 static int qca_setup(struct hci_uart *hu)
1659 struct hci_dev *hdev = hu->hdev;
1660 struct qca_data *qca = hu->priv;
1663 enum qca_btsoc_type soc_type = qca_soc_type(hu);
1664 const char *firmware_name = qca_get_firmware_name(hu);
1668 ret = qca_check_speeds(hu);
1700 qca_set_speed(hu, QCA_INIT_SPEED);
1704 speed = qca_get_speed(hu, QCA_OPER_SPEED);
1706 ret = qca_set_speed(hu, QCA_OPER_SPEED);
1727 hu->hdev->hw_error = qca_hw_error;
1728 hu->hdev->cmd_timeout = qca_cmd_timeout;
1742 qca_power_shutdown(hu);
1743 if (hu->serdev) {
1744 serdev_device_close(hu->serdev);
1745 ret = serdev_device_open(hu->serdev);
1758 hu->hdev->set_bdaddr = qca_set_bdaddr_rome;
1760 hu->hdev->set_bdaddr = qca_set_bdaddr;
1820 static void qca_power_shutdown(struct hci_uart *hu)
1823 struct qca_data *qca = hu->priv;
1825 enum qca_btsoc_type soc_type = qca_soc_type(hu);
1833 qca_flush(hu);
1839 if (!hu->serdev)
1842 qcadev = serdev_device_get_drvdata(hu->serdev);
1845 host_set_baudrate(hu, 2400);
1846 qca_send_power_pulse(hu, false);
1857 struct hci_uart *hu = hci_get_drvdata(hdev);
1858 struct qca_data *qca = hu->priv;
1859 enum qca_btsoc_type soc_type = qca_soc_type(hu);
1861 hu->hdev->hw_error = NULL;
1862 hu->hdev->cmd_timeout = NULL;
1874 qca_power_shutdown(hu);
2077 struct hci_uart *hu = &qcadev->serdev_hu;
2078 struct hci_dev *hdev = hu->hdev;
2079 struct qca_data *qca = hu->priv;
2114 struct hci_uart *hu = &qcadev->serdev_hu;
2115 struct qca_data *qca = hu->priv;
2152 bt_dev_err(hu->hdev, "SSR or FW download time out");
2171 serdev_device_write_flush(hu->serdev);
2173 ret = serdev_device_write_buf(hu->serdev, &cmd, sizeof(cmd));
2200 serdev_device_wait_until_sent(hu->serdev,
2202 serial_clock_vote(HCI_IBS_TX_VOTE_CLOCK_OFF, hu);
2228 struct hci_uart *hu = &qcadev->serdev_hu;
2229 struct qca_data *qca = hu->priv;