Lines Matching refs:hu
72 int (*rx_func)(struct hci_uart *hu, u8 c);
75 struct hci_uart *hu; /* Parent HCI UART */
111 static void h5_link_control(struct hci_uart *hu, const void *data, size_t len)
113 struct h5 *h5 = hu->priv;
138 struct hci_uart *hu = h5->hu;
142 BT_DBG("%s", hu->hdev->name);
145 h5_link_control(hu, sync_req, sizeof(sync_req));
149 h5_link_control(hu, conf_req, sizeof(conf_req));
162 BT_DBG("hu %p retransmitting %u pkts", hu, h5->unack.qlen);
174 hci_uart_tx_wakeup(hu);
177 static void h5_peer_reset(struct hci_uart *hu)
179 struct h5 *h5 = hu->priv;
181 bt_dev_err(hu->hdev, "Peer device has reset");
195 hci_reset_dev(hu->hdev);
198 static int h5_open(struct hci_uart *hu)
203 BT_DBG("hu %p", hu);
205 if (hu->serdev) {
206 h5 = serdev_device_get_drvdata(hu->serdev);
213 hu->priv = h5;
214 h5->hu = hu;
229 set_bit(HCI_UART_INIT_PENDING, &hu->hdev_flags);
232 h5_link_control(hu, sync, sizeof(sync));
238 static int h5_close(struct hci_uart *hu)
240 struct h5 *h5 = hu->priv;
254 if (!hu->serdev)
260 static int h5_setup(struct hci_uart *hu)
262 struct h5 *h5 = hu->priv;
312 static void h5_handle_internal_rx(struct hci_uart *hu)
314 struct h5 *h5 = hu->priv;
325 BT_DBG("%s", hu->hdev->name);
337 h5_peer_reset(hu);
338 h5_link_control(hu, sync_rsp, 2);
341 h5_peer_reset(hu);
343 h5_link_control(hu, conf_req, 3);
345 h5_link_control(hu, conf_rsp, 2);
346 h5_link_control(hu, conf_req, 3);
352 hci_uart_init_ready(hu);
363 h5_link_control(hu, woken_req, 2);
370 hci_uart_tx_wakeup(hu);
373 static void h5_complete_rx_pkt(struct hci_uart *hu)
375 struct h5 *h5 = hu->priv;
381 hci_uart_tx_wakeup(hu);
398 hci_recv_frame(hu->hdev, h5->rx_skb);
404 h5_handle_internal_rx(hu);
411 static int h5_rx_crc(struct hci_uart *hu, unsigned char c)
413 h5_complete_rx_pkt(hu);
418 static int h5_rx_payload(struct hci_uart *hu, unsigned char c)
420 struct h5 *h5 = hu->priv;
427 h5_complete_rx_pkt(hu);
433 static int h5_rx_3wire_hdr(struct hci_uart *hu, unsigned char c)
435 struct h5 *h5 = hu->priv;
439 hu->hdev->name, H5_HDR_SEQ(hdr), H5_HDR_ACK(hdr),
444 bt_dev_err(hu->hdev, "Invalid header checksum");
450 bt_dev_err(hu->hdev, "Out-of-order packet arrived (%u != %u)",
458 bt_dev_err(hu->hdev, "Non-link packet received in non-active state");
469 static int h5_rx_pkt_start(struct hci_uart *hu, unsigned char c)
471 struct h5 *h5 = hu->priv;
481 bt_dev_err(hu->hdev, "Can't allocate mem for new packet");
486 h5->rx_skb->dev = (void *)hu->hdev;
491 static int h5_rx_delimiter(struct hci_uart *hu, unsigned char c)
493 struct h5 *h5 = hu->priv;
544 static int h5_recv(struct hci_uart *hu, const void *data, int count)
546 struct h5 *h5 = hu->priv;
549 BT_DBG("%s pending %zu count %d", hu->hdev->name, h5->rx_pending,
557 bt_dev_err(hu->hdev, "Too short H5 packet");
568 processed = h5->rx_func(hu, *ptr);
579 static int h5_enqueue(struct hci_uart *hu, struct sk_buff *skb)
581 struct h5 *h5 = hu->priv;
584 bt_dev_err(hu->hdev, "Packet too long (%u bytes)", skb->len);
590 bt_dev_err(hu->hdev, "Ignoring HCI data in non-active state");
607 bt_dev_err(hu->hdev, "Unknown packet type %u", hci_skb_pkt_type(skb));
654 static struct sk_buff *h5_prepare_pkt(struct hci_uart *hu, u8 pkt_type,
657 struct h5 *h5 = hu->priv;
663 bt_dev_err(hu->hdev, "Unknown packet type %u", pkt_type);
696 hu->hdev->name, H5_HDR_SEQ(hdr), H5_HDR_ACK(hdr),
711 static struct sk_buff *h5_dequeue(struct hci_uart *hu)
713 struct h5 *h5 = hu->priv;
727 return h5_prepare_pkt(hu, HCI_3WIRE_LINK_PKT, wakeup_req, 2);
732 nskb = h5_prepare_pkt(hu, hci_skb_pkt_type(skb),
740 bt_dev_err(hu->hdev, "Could not dequeue pkt because alloc_skb failed");
750 nskb = h5_prepare_pkt(hu, hci_skb_pkt_type(skb),
760 bt_dev_err(hu->hdev, "Could not dequeue pkt because alloc_skb failed");
767 return h5_prepare_pkt(hu, HCI_3WIRE_ACK_PKT, NULL, 0);
772 static int h5_flush(struct hci_uart *hu)
774 BT_DBG("hu %p", hu);
799 h5->hu = &h5->serdev_hu;
879 btrtl_dev = btrtl_initialize(h5->hu->hdev, h5->id);
883 err = btrtl_get_uart_settings(h5->hu->hdev, btrtl_dev,
890 skb = __hci_cmd_sync(h5->hu->hdev, 0xfc17, sizeof(baudrate_data),
893 rtl_dev_err(h5->hu->hdev, "set baud rate command failed\n");
902 serdev_device_set_baudrate(h5->hu->serdev, controller_baudrate);
903 serdev_device_set_flow_control(h5->hu->serdev, flow_control);
905 err = btrtl_download_firmware(h5->hu->hdev, btrtl_dev);
912 set_bit(HCI_QUIRK_SIMULTANEOUS_DISCOVERY, &h5->hu->hdev->quirks);
923 serdev_device_set_flow_control(h5->hu->serdev, false);
924 serdev_device_set_parity(h5->hu->serdev, SERDEV_PARITY_EVEN);
925 serdev_device_set_baudrate(h5->hu->serdev, 115200);
947 serdev_device_set_flow_control(h5->hu->serdev, false);
984 reprobe->dev = get_device(&h5->hu->serdev->dev);