Lines Matching refs:hu
26 static inline void hci_uart_tx_complete(struct hci_uart *hu, int pkt_type) in hci_uart_tx_complete() argument
28 struct hci_dev *hdev = hu->hdev; in hci_uart_tx_complete()
46 static inline struct sk_buff *hci_uart_dequeue(struct hci_uart *hu) in hci_uart_dequeue() argument
48 struct sk_buff *skb = hu->tx_skb; in hci_uart_dequeue()
51 if (test_bit(HCI_UART_PROTO_READY, &hu->flags)) in hci_uart_dequeue()
52 skb = hu->proto->dequeue(hu); in hci_uart_dequeue()
54 hu->tx_skb = NULL; in hci_uart_dequeue()
61 struct hci_uart *hu = container_of(work, struct hci_uart, write_work); in hci_uart_write_work() local
62 struct serdev_device *serdev = hu->serdev; in hci_uart_write_work()
63 struct hci_dev *hdev = hu->hdev; in hci_uart_write_work()
70 clear_bit(HCI_UART_TX_WAKEUP, &hu->tx_state); in hci_uart_write_work()
72 while ((skb = hci_uart_dequeue(hu))) { in hci_uart_write_work()
81 hu->tx_skb = skb; in hci_uart_write_work()
85 hci_uart_tx_complete(hu, hci_skb_pkt_type(skb)); in hci_uart_write_work()
88 } while (test_bit(HCI_UART_TX_WAKEUP, &hu->tx_state)); in hci_uart_write_work()
90 clear_bit(HCI_UART_SENDING, &hu->tx_state); in hci_uart_write_work()
98 struct hci_uart *hu = hci_get_drvdata(hdev); in hci_uart_flush() local
100 BT_DBG("hdev %p serdev %p", hdev, hu->serdev); in hci_uart_flush()
102 if (hu->tx_skb) { in hci_uart_flush()
103 kfree_skb(hu->tx_skb); hu->tx_skb = NULL; in hci_uart_flush()
107 serdev_device_write_flush(hu->serdev); in hci_uart_flush()
109 if (test_bit(HCI_UART_PROTO_READY, &hu->flags)) in hci_uart_flush()
110 hu->proto->flush(hu); in hci_uart_flush()
140 struct hci_uart *hu = hci_get_drvdata(hdev); in hci_uart_send_frame() local
145 hu->proto->enqueue(hu, skb); in hci_uart_send_frame()
147 hci_uart_tx_wakeup(hu); in hci_uart_send_frame()
154 struct hci_uart *hu = hci_get_drvdata(hdev); in hci_uart_setup() local
161 if (hu->init_speed) in hci_uart_setup()
162 speed = hu->init_speed; in hci_uart_setup()
163 else if (hu->proto->init_speed) in hci_uart_setup()
164 speed = hu->proto->init_speed; in hci_uart_setup()
169 serdev_device_set_baudrate(hu->serdev, speed); in hci_uart_setup()
172 if (hu->oper_speed) in hci_uart_setup()
173 speed = hu->oper_speed; in hci_uart_setup()
174 else if (hu->proto->oper_speed) in hci_uart_setup()
175 speed = hu->proto->oper_speed; in hci_uart_setup()
179 if (hu->proto->set_baudrate && speed) { in hci_uart_setup()
180 err = hu->proto->set_baudrate(hu, speed); in hci_uart_setup()
184 serdev_device_set_baudrate(hu->serdev, speed); in hci_uart_setup()
187 if (hu->proto->setup) in hci_uart_setup()
188 return hu->proto->setup(hu); in hci_uart_setup()
190 if (!test_bit(HCI_UART_VND_DETECT, &hu->hdev_flags)) in hci_uart_setup()
216 struct hci_uart *hu = serdev_device_get_drvdata(serdev); in hci_uart_write_wakeup() local
220 if (!hu || serdev != hu->serdev) { in hci_uart_write_wakeup()
225 if (test_bit(HCI_UART_PROTO_READY, &hu->flags)) in hci_uart_write_wakeup()
226 hci_uart_tx_wakeup(hu); in hci_uart_write_wakeup()
242 struct hci_uart *hu = serdev_device_get_drvdata(serdev); in hci_uart_receive_buf() local
244 if (!hu || serdev != hu->serdev) { in hci_uart_receive_buf()
249 if (!test_bit(HCI_UART_PROTO_READY, &hu->flags)) in hci_uart_receive_buf()
255 hu->proto->recv(hu, data, count); in hci_uart_receive_buf()
257 if (hu->hdev) in hci_uart_receive_buf()
258 hu->hdev->stat.byte_rx += count; in hci_uart_receive_buf()
268 int hci_uart_register_device(struct hci_uart *hu, in hci_uart_register_device() argument
276 serdev_device_set_client_ops(hu->serdev, &hci_serdev_client_ops); in hci_uart_register_device()
278 err = serdev_device_open(hu->serdev); in hci_uart_register_device()
282 err = p->open(hu); in hci_uart_register_device()
286 hu->proto = p; in hci_uart_register_device()
287 set_bit(HCI_UART_PROTO_READY, &hu->flags); in hci_uart_register_device()
297 hu->hdev = hdev; in hci_uart_register_device()
300 hci_set_drvdata(hdev, hu); in hci_uart_register_device()
302 INIT_WORK(&hu->init_ready, hci_uart_init_work); in hci_uart_register_device()
303 INIT_WORK(&hu->write_work, hci_uart_write_work); in hci_uart_register_device()
304 percpu_init_rwsem(&hu->proto_lock); in hci_uart_register_device()
310 if (hu->proto->setup) in hci_uart_register_device()
311 hdev->manufacturer = hu->proto->manufacturer; in hci_uart_register_device()
318 SET_HCIDEV_DEV(hdev, &hu->serdev->dev); in hci_uart_register_device()
320 if (test_bit(HCI_UART_RAW_DEVICE, &hu->hdev_flags)) in hci_uart_register_device()
323 if (test_bit(HCI_UART_EXT_CONFIG, &hu->hdev_flags)) in hci_uart_register_device()
326 if (test_bit(HCI_UART_CREATE_AMP, &hu->hdev_flags)) in hci_uart_register_device()
331 if (test_bit(HCI_UART_INIT_PENDING, &hu->hdev_flags)) in hci_uart_register_device()
340 set_bit(HCI_UART_REGISTERED, &hu->flags); in hci_uart_register_device()
347 clear_bit(HCI_UART_PROTO_READY, &hu->flags); in hci_uart_register_device()
348 p->close(hu); in hci_uart_register_device()
350 serdev_device_close(hu->serdev); in hci_uart_register_device()
355 void hci_uart_unregister_device(struct hci_uart *hu) in hci_uart_unregister_device() argument
357 struct hci_dev *hdev = hu->hdev; in hci_uart_unregister_device()
359 clear_bit(HCI_UART_PROTO_READY, &hu->flags); in hci_uart_unregister_device()
363 cancel_work_sync(&hu->write_work); in hci_uart_unregister_device()
365 hu->proto->close(hu); in hci_uart_unregister_device()
366 serdev_device_close(hu->serdev); in hci_uart_unregister_device()