Lines Matching defs:data
78 static struct urb *bfusb_get_completed(struct bfusb_data *data)
83 BT_DBG("bfusb %p", data);
85 skb = skb_dequeue(&data->completed_q);
94 static void bfusb_unlink_urbs(struct bfusb_data *data)
99 BT_DBG("bfusb %p", data);
101 while ((skb = skb_dequeue(&data->pending_q))) {
104 skb_queue_tail(&data->completed_q, skb);
107 while ((urb = bfusb_get_completed(data)))
111 static int bfusb_send_bulk(struct bfusb_data *data, struct sk_buff *skb)
114 struct urb *urb = bfusb_get_completed(data);
117 BT_DBG("bfusb %p skb %p len %d", data, skb, skb->len);
125 pipe = usb_sndbulkpipe(data->udev, data->bulk_out_ep);
127 usb_fill_bulk_urb(urb, data->udev, pipe, skb->data, skb->len,
132 skb_queue_tail(&data->pending_q, skb);
136 bt_dev_err(data->hdev, "bulk tx submit failed urb %p err %d",
138 skb_unlink(skb, &data->pending_q);
141 atomic_inc(&data->pending_tx);
146 static void bfusb_tx_wakeup(struct bfusb_data *data)
150 BT_DBG("bfusb %p", data);
152 if (test_and_set_bit(BFUSB_TX_PROCESS, &data->state)) {
153 set_bit(BFUSB_TX_WAKEUP, &data->state);
158 clear_bit(BFUSB_TX_WAKEUP, &data->state);
160 while ((atomic_read(&data->pending_tx) < BFUSB_MAX_BULK_TX) &&
161 (skb = skb_dequeue(&data->transmit_q))) {
162 if (bfusb_send_bulk(data, skb) < 0) {
163 skb_queue_head(&data->transmit_q, skb);
168 } while (test_bit(BFUSB_TX_WAKEUP, &data->state));
170 clear_bit(BFUSB_TX_PROCESS, &data->state);
176 struct bfusb_data *data = (struct bfusb_data *) skb->dev;
178 BT_DBG("bfusb %p urb %p skb %p len %d", data, urb, skb, skb->len);
180 atomic_dec(&data->pending_tx);
182 if (!test_bit(HCI_RUNNING, &data->hdev->flags))
186 data->hdev->stat.byte_tx += skb->len;
188 data->hdev->stat.err_tx++;
190 read_lock(&data->lock);
192 skb_unlink(skb, &data->pending_q);
193 skb_queue_tail(&data->completed_q, skb);
195 bfusb_tx_wakeup(data);
197 read_unlock(&data->lock);
201 static int bfusb_rx_submit(struct bfusb_data *data, struct urb *urb)
207 BT_DBG("bfusb %p urb %p", data, urb);
221 skb->dev = (void *) data;
226 pipe = usb_rcvbulkpipe(data->udev, data->bulk_in_ep);
228 usb_fill_bulk_urb(urb, data->udev, pipe, skb->data, size,
231 skb_queue_tail(&data->pending_q, skb);
235 bt_dev_err(data->hdev, "bulk rx submit failed urb %p err %d",
237 skb_unlink(skb, &data->pending_q);
245 static inline int bfusb_recv_block(struct bfusb_data *data, int hdr, unsigned char *buf, int len)
247 BT_DBG("bfusb %p hdr 0x%02x data %p len %d", data, hdr, buf, len);
250 bt_dev_err(data->hdev, "error in block");
251 kfree_skb(data->reassembly);
252 data->reassembly = NULL;
261 if (data->reassembly) {
262 bt_dev_err(data->hdev, "unexpected start block");
263 kfree_skb(data->reassembly);
264 data->reassembly = NULL;
268 bt_dev_err(data->hdev, "no packet type found");
280 bt_dev_err(data->hdev, "event block is too short");
290 bt_dev_err(data->hdev, "data block is too short");
300 bt_dev_err(data->hdev, "audio block is too short");
308 bt_dev_err(data->hdev, "no memory for the packet");
314 data->reassembly = skb;
316 if (!data->reassembly) {
317 bt_dev_err(data->hdev, "unexpected continuation block");
323 skb_put_data(data->reassembly, buf, len);
326 hci_recv_frame(data->hdev, data->reassembly);
327 data->reassembly = NULL;
336 struct bfusb_data *data = (struct bfusb_data *) skb->dev;
341 BT_DBG("bfusb %p urb %p skb %p len %d", data, urb, skb, skb->len);
343 read_lock(&data->lock);
345 if (!test_bit(HCI_RUNNING, &data->hdev->flags))
351 data->hdev->stat.byte_rx += count;
369 bt_dev_err(data->hdev, "block extends over URB buffer ranges");
373 bfusb_recv_block(data, hdr, buf, len);
379 skb_unlink(skb, &data->pending_q);
382 bfusb_rx_submit(data, urb);
384 read_unlock(&data->lock);
389 urb->dev = data->udev;
393 bt_dev_err(data->hdev, "bulk resubmit failed urb %p err %d",
398 read_unlock(&data->lock);
403 struct bfusb_data *data = hci_get_drvdata(hdev);
407 BT_DBG("hdev %p bfusb %p", hdev, data);
409 write_lock_irqsave(&data->lock, flags);
411 err = bfusb_rx_submit(data, NULL);
414 bfusb_rx_submit(data, NULL);
417 write_unlock_irqrestore(&data->lock, flags);
424 struct bfusb_data *data = hci_get_drvdata(hdev);
426 BT_DBG("hdev %p bfusb %p", hdev, data);
428 skb_queue_purge(&data->transmit_q);
435 struct bfusb_data *data = hci_get_drvdata(hdev);
438 BT_DBG("hdev %p bfusb %p", hdev, data);
440 write_lock_irqsave(&data->lock, flags);
441 write_unlock_irqrestore(&data->lock, flags);
443 bfusb_unlink_urbs(data);
451 struct bfusb_data *data = hci_get_drvdata(hdev);
483 nskb->dev = (void *) data;
500 if ((nskb->len % data->bulk_pkt_size) == 0) {
506 read_lock(&data->lock);
508 skb_queue_tail(&data->transmit_q, nskb);
509 bfusb_tx_wakeup(data);
511 read_unlock(&data->lock);
518 static int bfusb_load_firmware(struct bfusb_data *data,
524 BT_DBG("bfusb %p udev %p", data, data->udev);
534 pipe = usb_sndctrlpipe(data->udev, 0);
536 if (usb_control_msg(data->udev, pipe, USB_REQ_SET_CONFIGURATION,
543 data->udev->toggle[0] = data->udev->toggle[1] = 0;
545 pipe = usb_sndbulkpipe(data->udev, data->bulk_out_ep);
552 err = usb_bulk_msg(data->udev, pipe, buf, size,
564 err = usb_bulk_msg(data->udev, pipe, NULL, 0,
571 pipe = usb_sndctrlpipe(data->udev, 0);
573 err = usb_control_msg(data->udev, pipe, USB_REQ_SET_CONFIGURATION,
580 data->udev->toggle[0] = data->udev->toggle[1] = 0;
590 pipe = usb_sndctrlpipe(data->udev, 0);
592 usb_control_msg(data->udev, pipe, USB_REQ_SET_CONFIGURATION,
605 struct bfusb_data *data;
622 data = devm_kzalloc(&intf->dev, sizeof(struct bfusb_data), GFP_KERNEL);
623 if (!data)
626 data->udev = udev;
627 data->bulk_in_ep = bulk_in_ep->desc.bEndpointAddress;
628 data->bulk_out_ep = bulk_out_ep->desc.bEndpointAddress;
629 data->bulk_pkt_size = le16_to_cpu(bulk_out_ep->desc.wMaxPacketSize);
631 if (!data->bulk_pkt_size)
634 rwlock_init(&data->lock);
636 data->reassembly = NULL;
638 skb_queue_head_init(&data->transmit_q);
639 skb_queue_head_init(&data->pending_q);
640 skb_queue_head_init(&data->completed_q);
647 BT_DBG("firmware data %p size %zu", firmware->data, firmware->size);
649 if (bfusb_load_firmware(data, firmware->data, firmware->size) < 0) {
663 data->hdev = hdev;
666 hci_set_drvdata(hdev, data);
682 usb_set_intfdata(intf, data);
695 struct bfusb_data *data = usb_get_intfdata(intf);
696 struct hci_dev *hdev = data->hdev;