Lines Matching refs:data

93 static struct urb *bfusb_get_completed(struct bfusb_data *data)  in bfusb_get_completed()  argument
98 BT_DBG("bfusb %p", data); in bfusb_get_completed()
100 skb = skb_dequeue(&data->completed_q); in bfusb_get_completed()
109 static void bfusb_unlink_urbs(struct bfusb_data *data) in bfusb_unlink_urbs() argument
114 BT_DBG("bfusb %p", data); in bfusb_unlink_urbs()
116 while ((skb = skb_dequeue(&data->pending_q))) { in bfusb_unlink_urbs()
119 skb_queue_tail(&data->completed_q, skb); in bfusb_unlink_urbs()
122 while ((urb = bfusb_get_completed(data))) in bfusb_unlink_urbs()
126 static int bfusb_send_bulk(struct bfusb_data *data, struct sk_buff *skb) in bfusb_send_bulk() argument
129 struct urb *urb = bfusb_get_completed(data); in bfusb_send_bulk()
132 BT_DBG("bfusb %p skb %p len %d", data, skb, skb->len); in bfusb_send_bulk()
140 pipe = usb_sndbulkpipe(data->udev, data->bulk_out_ep); in bfusb_send_bulk()
142 usb_fill_bulk_urb(urb, data->udev, pipe, skb->data, skb->len, in bfusb_send_bulk()
147 skb_queue_tail(&data->pending_q, skb); in bfusb_send_bulk()
152 data->hdev->name, urb, err); in bfusb_send_bulk()
153 skb_unlink(skb, &data->pending_q); in bfusb_send_bulk()
156 atomic_inc(&data->pending_tx); in bfusb_send_bulk()
161 static void bfusb_tx_wakeup(struct bfusb_data *data) in bfusb_tx_wakeup() argument
165 BT_DBG("bfusb %p", data); in bfusb_tx_wakeup()
167 if (test_and_set_bit(BFUSB_TX_PROCESS, &data->state)) { in bfusb_tx_wakeup()
168 set_bit(BFUSB_TX_WAKEUP, &data->state); in bfusb_tx_wakeup()
173 clear_bit(BFUSB_TX_WAKEUP, &data->state); in bfusb_tx_wakeup()
175 while ((atomic_read(&data->pending_tx) < BFUSB_MAX_BULK_TX) && in bfusb_tx_wakeup()
176 (skb = skb_dequeue(&data->transmit_q))) { in bfusb_tx_wakeup()
177 if (bfusb_send_bulk(data, skb) < 0) { in bfusb_tx_wakeup()
178 skb_queue_head(&data->transmit_q, skb); in bfusb_tx_wakeup()
183 } while (test_bit(BFUSB_TX_WAKEUP, &data->state)); in bfusb_tx_wakeup()
185 clear_bit(BFUSB_TX_PROCESS, &data->state); in bfusb_tx_wakeup()
191 struct bfusb_data *data = (struct bfusb_data *) skb->dev; in bfusb_tx_complete() local
193 BT_DBG("bfusb %p urb %p skb %p len %d", data, urb, skb, skb->len); in bfusb_tx_complete()
195 atomic_dec(&data->pending_tx); in bfusb_tx_complete()
197 if (!test_bit(HCI_RUNNING, &data->hdev->flags)) in bfusb_tx_complete()
201 data->hdev->stat.byte_tx += skb->len; in bfusb_tx_complete()
203 data->hdev->stat.err_tx++; in bfusb_tx_complete()
205 read_lock(&data->lock); in bfusb_tx_complete()
207 skb_unlink(skb, &data->pending_q); in bfusb_tx_complete()
208 skb_queue_tail(&data->completed_q, skb); in bfusb_tx_complete()
210 bfusb_tx_wakeup(data); in bfusb_tx_complete()
212 read_unlock(&data->lock); in bfusb_tx_complete()
216 static int bfusb_rx_submit(struct bfusb_data *data, struct urb *urb) in bfusb_rx_submit() argument
222 BT_DBG("bfusb %p urb %p", data, urb); in bfusb_rx_submit()
236 skb->dev = (void *) data; in bfusb_rx_submit()
241 pipe = usb_rcvbulkpipe(data->udev, data->bulk_in_ep); in bfusb_rx_submit()
243 usb_fill_bulk_urb(urb, data->udev, pipe, skb->data, size, in bfusb_rx_submit()
246 skb_queue_tail(&data->pending_q, skb); in bfusb_rx_submit()
251 data->hdev->name, urb, err); in bfusb_rx_submit()
252 skb_unlink(skb, &data->pending_q); in bfusb_rx_submit()
260 static inline int bfusb_recv_block(struct bfusb_data *data, int hdr, unsigned char *buf, int len) in bfusb_recv_block() argument
262 BT_DBG("bfusb %p hdr 0x%02x data %p len %d", data, hdr, buf, len); in bfusb_recv_block()
265 BT_ERR("%s error in block", data->hdev->name); in bfusb_recv_block()
266 kfree_skb(data->reassembly); in bfusb_recv_block()
267 data->reassembly = NULL; in bfusb_recv_block()
276 if (data->reassembly) { in bfusb_recv_block()
277 BT_ERR("%s unexpected start block", data->hdev->name); in bfusb_recv_block()
278 kfree_skb(data->reassembly); in bfusb_recv_block()
279 data->reassembly = NULL; in bfusb_recv_block()
283 BT_ERR("%s no packet type found", data->hdev->name); in bfusb_recv_block()
295 BT_ERR("%s event block is too short", data->hdev->name); in bfusb_recv_block()
305 BT_ERR("%s data block is too short", data->hdev->name); in bfusb_recv_block()
315 BT_ERR("%s audio block is too short", data->hdev->name); in bfusb_recv_block()
323 BT_ERR("%s no memory for the packet", data->hdev->name); in bfusb_recv_block()
329 data->reassembly = skb; in bfusb_recv_block()
331 if (!data->reassembly) { in bfusb_recv_block()
332 BT_ERR("%s unexpected continuation block", data->hdev->name); in bfusb_recv_block()
338 memcpy(skb_put(data->reassembly, len), buf, len); in bfusb_recv_block()
341 hci_recv_frame(data->hdev, data->reassembly); in bfusb_recv_block()
342 data->reassembly = NULL; in bfusb_recv_block()
351 struct bfusb_data *data = (struct bfusb_data *) skb->dev; in bfusb_rx_complete() local
356 BT_DBG("bfusb %p urb %p skb %p len %d", data, urb, skb, skb->len); in bfusb_rx_complete()
358 read_lock(&data->lock); in bfusb_rx_complete()
360 if (!test_bit(HCI_RUNNING, &data->hdev->flags)) in bfusb_rx_complete()
366 data->hdev->stat.byte_rx += count; in bfusb_rx_complete()
385 data->hdev->name); in bfusb_rx_complete()
389 bfusb_recv_block(data, hdr, buf, len); in bfusb_rx_complete()
395 skb_unlink(skb, &data->pending_q); in bfusb_rx_complete()
398 bfusb_rx_submit(data, urb); in bfusb_rx_complete()
400 read_unlock(&data->lock); in bfusb_rx_complete()
405 urb->dev = data->udev; in bfusb_rx_complete()
410 data->hdev->name, urb, err); in bfusb_rx_complete()
414 read_unlock(&data->lock); in bfusb_rx_complete()
419 struct bfusb_data *data = hci_get_drvdata(hdev); in bfusb_open() local
423 BT_DBG("hdev %p bfusb %p", hdev, data); in bfusb_open()
428 write_lock_irqsave(&data->lock, flags); in bfusb_open()
430 err = bfusb_rx_submit(data, NULL); in bfusb_open()
433 bfusb_rx_submit(data, NULL); in bfusb_open()
438 write_unlock_irqrestore(&data->lock, flags); in bfusb_open()
445 struct bfusb_data *data = hci_get_drvdata(hdev); in bfusb_flush() local
447 BT_DBG("hdev %p bfusb %p", hdev, data); in bfusb_flush()
449 skb_queue_purge(&data->transmit_q); in bfusb_flush()
456 struct bfusb_data *data = hci_get_drvdata(hdev); in bfusb_close() local
459 BT_DBG("hdev %p bfusb %p", hdev, data); in bfusb_close()
464 write_lock_irqsave(&data->lock, flags); in bfusb_close()
465 write_unlock_irqrestore(&data->lock, flags); in bfusb_close()
467 bfusb_unlink_urbs(data); in bfusb_close()
475 struct bfusb_data *data = hci_get_drvdata(hdev); in bfusb_send_frame() local
509 nskb->dev = (void *) data; in bfusb_send_frame()
526 if ((nskb->len % data->bulk_pkt_size) == 0) { in bfusb_send_frame()
532 read_lock(&data->lock); in bfusb_send_frame()
534 skb_queue_tail(&data->transmit_q, nskb); in bfusb_send_frame()
535 bfusb_tx_wakeup(data); in bfusb_send_frame()
537 read_unlock(&data->lock); in bfusb_send_frame()
544 static int bfusb_load_firmware(struct bfusb_data *data, in bfusb_load_firmware() argument
550 BT_DBG("bfusb %p udev %p", data, data->udev); in bfusb_load_firmware()
560 pipe = usb_sndctrlpipe(data->udev, 0); in bfusb_load_firmware()
562 if (usb_control_msg(data->udev, pipe, USB_REQ_SET_CONFIGURATION, in bfusb_load_firmware()
569 data->udev->toggle[0] = data->udev->toggle[1] = 0; in bfusb_load_firmware()
571 pipe = usb_sndbulkpipe(data->udev, data->bulk_out_ep); in bfusb_load_firmware()
578 err = usb_bulk_msg(data->udev, pipe, buf, size, in bfusb_load_firmware()
590 err = usb_bulk_msg(data->udev, pipe, NULL, 0, in bfusb_load_firmware()
597 pipe = usb_sndctrlpipe(data->udev, 0); in bfusb_load_firmware()
599 err = usb_control_msg(data->udev, pipe, USB_REQ_SET_CONFIGURATION, in bfusb_load_firmware()
606 data->udev->toggle[0] = data->udev->toggle[1] = 0; in bfusb_load_firmware()
616 pipe = usb_sndctrlpipe(data->udev, 0); in bfusb_load_firmware()
618 usb_control_msg(data->udev, pipe, USB_REQ_SET_CONFIGURATION, in bfusb_load_firmware()
631 struct bfusb_data *data; in bfusb_probe() local
648 data = devm_kzalloc(&intf->dev, sizeof(struct bfusb_data), GFP_KERNEL); in bfusb_probe()
649 if (!data) { in bfusb_probe()
654 data->udev = udev; in bfusb_probe()
655 data->bulk_in_ep = bulk_in_ep->desc.bEndpointAddress; in bfusb_probe()
656 data->bulk_out_ep = bulk_out_ep->desc.bEndpointAddress; in bfusb_probe()
657 data->bulk_pkt_size = le16_to_cpu(bulk_out_ep->desc.wMaxPacketSize); in bfusb_probe()
659 rwlock_init(&data->lock); in bfusb_probe()
661 data->reassembly = NULL; in bfusb_probe()
663 skb_queue_head_init(&data->transmit_q); in bfusb_probe()
664 skb_queue_head_init(&data->pending_q); in bfusb_probe()
665 skb_queue_head_init(&data->completed_q); in bfusb_probe()
672 BT_DBG("firmware data %p size %zu", firmware->data, firmware->size); in bfusb_probe()
674 if (bfusb_load_firmware(data, firmware->data, firmware->size) < 0) { in bfusb_probe()
688 data->hdev = hdev; in bfusb_probe()
691 hci_set_drvdata(hdev, data); in bfusb_probe()
707 usb_set_intfdata(intf, data); in bfusb_probe()
720 struct bfusb_data *data = usb_get_intfdata(intf); in bfusb_disconnect() local
721 struct hci_dev *hdev = data->hdev; in bfusb_disconnect()