Lines Matching refs:hu

77 	int			(*rx_func)(struct hci_uart *hu, u8 c);
80 struct hci_uart *hu; /* Parent HCI UART */
126 static void h5_link_control(struct hci_uart *hu, const void *data, size_t len)
128 struct h5 *h5 = hu->priv;
153 struct hci_uart *hu = h5->hu;
157 BT_DBG("%s", hu->hdev->name);
160 h5_link_control(hu, sync_req, sizeof(sync_req));
164 h5_link_control(hu, conf_req, sizeof(conf_req));
177 BT_DBG("hu %p retransmitting %u pkts", hu, h5->unack.qlen);
189 hci_uart_tx_wakeup(hu);
192 static void h5_peer_reset(struct hci_uart *hu)
194 struct h5 *h5 = hu->priv;
196 bt_dev_err(hu->hdev, "Peer device has reset");
210 hci_reset_dev(hu->hdev);
213 static int h5_open(struct hci_uart *hu)
218 BT_DBG("hu %p", hu);
220 if (hu->serdev) {
221 h5 = serdev_device_get_drvdata(hu->serdev);
228 hu->priv = h5;
229 h5->hu = hu;
244 set_bit(HCI_UART_INIT_PENDING, &hu->hdev_flags);
247 h5_link_control(hu, sync, sizeof(sync));
253 static int h5_close(struct hci_uart *hu)
255 struct h5 *h5 = hu->priv;
269 if (!hu->serdev)
275 static int h5_setup(struct hci_uart *hu)
277 struct h5 *h5 = hu->priv;
327 static void h5_handle_internal_rx(struct hci_uart *hu)
329 struct h5 *h5 = hu->priv;
340 BT_DBG("%s", hu->hdev->name);
352 h5_peer_reset(hu);
353 h5_link_control(hu, sync_rsp, 2);
356 h5_peer_reset(hu);
358 h5_link_control(hu, conf_req, 3);
360 h5_link_control(hu, conf_rsp, 2);
361 h5_link_control(hu, conf_req, 3);
367 hci_uart_init_ready(hu);
378 h5_link_control(hu, woken_req, 2);
385 hci_uart_tx_wakeup(hu);
388 static void h5_complete_rx_pkt(struct hci_uart *hu)
390 struct h5 *h5 = hu->priv;
396 hci_uart_tx_wakeup(hu);
413 hci_recv_frame(hu->hdev, h5->rx_skb);
419 h5_handle_internal_rx(hu);
426 static int h5_rx_crc(struct hci_uart *hu, unsigned char c)
428 h5_complete_rx_pkt(hu);
433 static int h5_rx_payload(struct hci_uart *hu, unsigned char c)
435 struct h5 *h5 = hu->priv;
442 h5_complete_rx_pkt(hu);
448 static int h5_rx_3wire_hdr(struct hci_uart *hu, unsigned char c)
450 struct h5 *h5 = hu->priv;
454 hu->hdev->name, H5_HDR_SEQ(hdr), H5_HDR_ACK(hdr),
459 bt_dev_err(hu->hdev, "Invalid header checksum");
465 bt_dev_err(hu->hdev, "Out-of-order packet arrived (%u != %u)",
468 hci_uart_tx_wakeup(hu);
475 bt_dev_err(hu->hdev, "Non-link packet received in non-active state");
486 static int h5_rx_pkt_start(struct hci_uart *hu, unsigned char c)
488 struct h5 *h5 = hu->priv;
498 bt_dev_err(hu->hdev, "Can't allocate mem for new packet");
503 h5->rx_skb->dev = (void *)hu->hdev;
508 static int h5_rx_delimiter(struct hci_uart *hu, unsigned char c)
510 struct h5 *h5 = hu->priv;
561 static int h5_recv(struct hci_uart *hu, const void *data, int count)
563 struct h5 *h5 = hu->priv;
566 BT_DBG("%s pending %zu count %d", hu->hdev->name, h5->rx_pending,
574 bt_dev_err(hu->hdev, "Too short H5 packet");
585 processed = h5->rx_func(hu, *ptr);
593 if (hu->serdev) {
594 pm_runtime_get(&hu->serdev->dev);
595 pm_runtime_mark_last_busy(&hu->serdev->dev);
596 pm_runtime_put_autosuspend(&hu->serdev->dev);
602 static int h5_enqueue(struct hci_uart *hu, struct sk_buff *skb)
604 struct h5 *h5 = hu->priv;
607 bt_dev_err(hu->hdev, "Packet too long (%u bytes)", skb->len);
613 bt_dev_err(hu->hdev, "Ignoring HCI data in non-active state");
630 bt_dev_err(hu->hdev, "Unknown packet type %u", hci_skb_pkt_type(skb));
635 if (hu->serdev) {
636 pm_runtime_get_sync(&hu->serdev->dev);
637 pm_runtime_mark_last_busy(&hu->serdev->dev);
638 pm_runtime_put_autosuspend(&hu->serdev->dev);
683 static struct sk_buff *h5_prepare_pkt(struct hci_uart *hu, u8 pkt_type,
686 struct h5 *h5 = hu->priv;
692 bt_dev_err(hu->hdev, "Unknown packet type %u", pkt_type);
725 hu->hdev->name, H5_HDR_SEQ(hdr), H5_HDR_ACK(hdr),
740 static struct sk_buff *h5_dequeue(struct hci_uart *hu)
742 struct h5 *h5 = hu->priv;
756 return h5_prepare_pkt(hu, HCI_3WIRE_LINK_PKT, wakeup_req, 2);
761 nskb = h5_prepare_pkt(hu, hci_skb_pkt_type(skb),
769 bt_dev_err(hu->hdev, "Could not dequeue pkt because alloc_skb failed");
779 nskb = h5_prepare_pkt(hu, hci_skb_pkt_type(skb),
789 bt_dev_err(hu->hdev, "Could not dequeue pkt because alloc_skb failed");
796 return h5_prepare_pkt(hu, HCI_3WIRE_ACK_PKT, NULL, 0);
801 static int h5_flush(struct hci_uart *hu)
803 BT_DBG("hu %p", hu);
829 h5->hu = &h5->serdev_hu;
911 btrtl_dev = btrtl_initialize(h5->hu->hdev, h5->id);
915 err = btrtl_get_uart_settings(h5->hu->hdev, btrtl_dev,
922 skb = __hci_cmd_sync(h5->hu->hdev, 0xfc17, sizeof(baudrate_data),
925 rtl_dev_err(h5->hu->hdev, "set baud rate command failed\n");
934 serdev_device_set_baudrate(h5->hu->serdev, controller_baudrate);
935 serdev_device_set_flow_control(h5->hu->serdev, flow_control);
940 err = btrtl_download_firmware(h5->hu->hdev, btrtl_dev);
946 btrtl_set_quirks(h5->hu->hdev, btrtl_dev);
962 set_bit(HCI_UART_NO_SUSPEND_NOTIFIER, &h5->hu->flags);
965 serdev_device_set_flow_control(h5->hu->serdev, false);
966 serdev_device_set_parity(h5->hu->serdev, SERDEV_PARITY_EVEN);
967 serdev_device_set_baudrate(h5->hu->serdev, 115200);
970 pm_runtime_set_active(&h5->hu->serdev->dev);
971 pm_runtime_use_autosuspend(&h5->hu->serdev->dev);
972 pm_runtime_set_autosuspend_delay(&h5->hu->serdev->dev,
974 pm_runtime_enable(&h5->hu->serdev->dev);
991 pm_runtime_disable(&h5->hu->serdev->dev);
1005 serdev_device_set_flow_control(h5->hu->serdev, false);
1046 reprobe->dev = get_device(&h5->hu->serdev->dev);
1052 serdev_device_set_flow_control(h5->hu->serdev, true);