• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /netgear-WNDR4500-V1.0.1.40_1.0.68/src/linux/linux-2.6/drivers/bluetooth/

Lines Matching refs:husb

198 #define __pending_tx(husb, type)  (&husb->pending_tx[type-1])
199 #define __pending_q(husb, type) (&husb->pending_q[type-1])
200 #define __completed_q(husb, type) (&husb->completed_q[type-1])
201 #define __transmit_q(husb, type) (&husb->transmit_q[type-1])
202 #define __reassembly(husb, type) (husb->reassembly[type-1])
204 static inline struct _urb *__get_completed(struct hci_usb *husb, int type)
206 return _urb_dequeue(__completed_q(husb, type));
231 static int hci_usb_intr_rx_submit(struct hci_usb *husb)
238 BT_DBG("%s", husb->hdev->name);
240 size = le16_to_cpu(husb->intr_in_ep->desc.wMaxPacketSize);
252 _urb_queue_tail(__pending_q(husb, _urb->type), _urb);
255 pipe = usb_rcvintpipe(husb->udev, husb->intr_in_ep->desc.bEndpointAddress);
256 interval = husb->intr_in_ep->desc.bInterval;
257 usb_fill_int_urb(urb, husb->udev, pipe, buf, size, hci_usb_rx_complete, husb, interval);
262 husb->hdev->name, urb, err);
270 static int hci_usb_bulk_rx_submit(struct hci_usb *husb)
287 _urb_queue_tail(__pending_q(husb, _urb->type), _urb);
290 pipe = usb_rcvbulkpipe(husb->udev, husb->bulk_in_ep->desc.bEndpointAddress);
291 usb_fill_bulk_urb(urb, husb->udev, pipe, buf, size, hci_usb_rx_complete, husb);
294 BT_DBG("%s urb %p", husb->hdev->name, urb);
299 husb->hdev->name, urb, err);
308 static int hci_usb_isoc_rx_submit(struct hci_usb *husb)
315 mtu = le16_to_cpu(husb->isoc_in_ep->desc.wMaxPacketSize);
328 _urb_queue_tail(__pending_q(husb, _urb->type), _urb);
332 urb->context = husb;
333 urb->dev = husb->udev;
334 urb->pipe = usb_rcvisocpipe(husb->udev, husb->isoc_in_ep->desc.bEndpointAddress);
337 urb->interval = husb->isoc_in_ep->desc.bInterval;
345 BT_DBG("%s urb %p", husb->hdev->name, urb);
350 husb->hdev->name, urb, err);
362 struct hci_usb *husb = (struct hci_usb *) hdev->driver_data;
371 write_lock_irqsave(&husb->completion_lock, flags);
373 err = hci_usb_intr_rx_submit(husb);
376 hci_usb_bulk_rx_submit(husb);
379 if (husb->isoc_iface)
381 hci_usb_isoc_rx_submit(husb);
387 write_unlock_irqrestore(&husb->completion_lock, flags);
394 struct hci_usb *husb = (struct hci_usb *) hdev->driver_data;
400 skb_queue_purge(&husb->transmit_q[i]);
404 static void hci_usb_unlink_urbs(struct hci_usb *husb)
408 BT_DBG("%s", husb->hdev->name);
415 while ((_urb = _urb_dequeue(&husb->pending_q[i]))) {
418 husb->hdev->name, _urb, _urb->type, urb);
420 _urb_queue_tail(__completed_q(husb, _urb->type), _urb);
424 while ((_urb = _urb_dequeue(&husb->completed_q[i]))) {
427 husb->hdev->name, _urb, _urb->type, urb);
434 if (husb->reassembly[i]) {
435 kfree_skb(husb->reassembly[i]);
436 husb->reassembly[i] = NULL;
444 struct hci_usb *husb = (struct hci_usb *) hdev->driver_data;
453 write_lock_irqsave(&husb->completion_lock, flags);
454 write_unlock_irqrestore(&husb->completion_lock, flags);
456 hci_usb_unlink_urbs(husb);
461 static int __tx_submit(struct hci_usb *husb, struct _urb *_urb)
466 BT_DBG("%s urb %p type %d", husb->hdev->name, urb, _urb->type);
468 _urb_queue_tail(__pending_q(husb, _urb->type), _urb);
472 husb->hdev->name, urb, _urb->type, err);
474 _urb_queue_tail(__completed_q(husb, _urb->type), _urb);
476 atomic_inc(__pending_tx(husb, _urb->type));
481 static inline int hci_usb_send_ctrl(struct hci_usb *husb, struct sk_buff *skb)
483 struct _urb *_urb = __get_completed(husb, bt_cb(skb)->pkt_type);
501 dr->bRequestType = husb->ctrl_req;
508 usb_fill_control_urb(urb, husb->udev, usb_sndctrlpipe(husb->udev, 0),
509 (void *) dr, skb->data, skb->len, hci_usb_tx_complete, husb);
511 BT_DBG("%s skb %p len %d", husb->hdev->name, skb, skb->len);
514 return __tx_submit(husb, _urb);
517 static inline int hci_usb_send_bulk(struct hci_usb *husb, struct sk_buff *skb)
519 struct _urb *_urb = __get_completed(husb, bt_cb(skb)->pkt_type);
531 pipe = usb_sndbulkpipe(husb->udev, husb->bulk_out_ep->desc.bEndpointAddress);
532 usb_fill_bulk_urb(urb, husb->udev, pipe, skb->data, skb->len,
533 hci_usb_tx_complete, husb);
536 BT_DBG("%s skb %p len %d", husb->hdev->name, skb, skb->len);
539 return __tx_submit(husb, _urb);
543 static inline int hci_usb_send_isoc(struct hci_usb *husb, struct sk_buff *skb)
545 struct _urb *_urb = __get_completed(husb, bt_cb(skb)->pkt_type);
555 BT_DBG("%s skb %p len %d", husb->hdev->name, skb, skb->len);
559 urb->context = husb;
560 urb->dev = husb->udev;
561 urb->pipe = usb_sndisocpipe(husb->udev, husb->isoc_out_ep->desc.bEndpointAddress);
565 urb->interval = husb->isoc_out_ep->desc.bInterval;
570 __fill_isoc_desc(urb, skb->len, le16_to_cpu(husb->isoc_out_ep->desc.wMaxPacketSize));
573 return __tx_submit(husb, _urb);
577 static void hci_usb_tx_process(struct hci_usb *husb)
582 BT_DBG("%s", husb->hdev->name);
585 clear_bit(HCI_USB_TX_WAKEUP, &husb->state);
588 q = __transmit_q(husb, HCI_COMMAND_PKT);
589 if (!atomic_read(__pending_tx(husb, HCI_COMMAND_PKT)) &&
591 if (hci_usb_send_ctrl(husb, skb) < 0)
597 q = __transmit_q(husb, HCI_SCODATA_PKT);
598 if (atomic_read(__pending_tx(husb, HCI_SCODATA_PKT)) < HCI_MAX_ISOC_TX &&
600 if (hci_usb_send_isoc(husb, skb) < 0)
606 q = __transmit_q(husb, HCI_ACLDATA_PKT);
607 while (atomic_read(__pending_tx(husb, HCI_ACLDATA_PKT)) < HCI_MAX_BULK_TX &&
609 if (hci_usb_send_bulk(husb, skb) < 0) {
614 } while(test_bit(HCI_USB_TX_WAKEUP, &husb->state));
617 static inline void hci_usb_tx_wakeup(struct hci_usb *husb)
620 if (!test_and_set_bit(HCI_USB_TX_PROCESS, &husb->state)) {
621 hci_usb_tx_process(husb);
622 clear_bit(HCI_USB_TX_PROCESS, &husb->state);
624 set_bit(HCI_USB_TX_WAKEUP, &husb->state);
631 struct hci_usb *husb;
643 husb = (struct hci_usb *) hdev->driver_data;
665 read_lock(&husb->completion_lock);
667 skb_queue_tail(__transmit_q(husb, bt_cb(skb)->pkt_type), skb);
668 hci_usb_tx_wakeup(husb);
670 read_unlock(&husb->completion_lock);
674 static inline int __recv_frame(struct hci_usb *husb, int type, void *data, int count)
676 BT_DBG("%s type %d data %p count %d", husb->hdev->name, type, data, count);
678 husb->hdev->stat.byte_rx += count;
681 struct sk_buff *skb = __reassembly(husb, type);
718 BT_ERR("%s no memory for the packet", husb->hdev->name);
721 skb->dev = (void *) husb->hdev;
724 __reassembly(husb, type) = skb;
741 __reassembly(husb, type) = NULL;
754 struct hci_usb *husb = (void *) urb->context;
755 struct hci_dev *hdev = husb->hdev;
761 read_lock(&husb->completion_lock);
779 __recv_frame(husb, _urb->type,
787 err = __recv_frame(husb, _urb->type, urb->transfer_buffer, count);
790 husb->hdev->name, _urb->type, count);
796 urb->dev = husb->udev;
802 read_unlock(&husb->completion_lock);
808 struct hci_usb *husb = (void *) urb->context;
809 struct hci_dev *hdev = husb->hdev;
814 atomic_dec(__pending_tx(husb, _urb->type));
827 read_lock(&husb->completion_lock);
830 _urb_queue_tail(__completed_q(husb, _urb->type), _urb);
832 hci_usb_tx_wakeup(husb);
834 read_unlock(&husb->completion_lock);
839 struct hci_usb *husb = (struct hci_usb *) hdev->driver_data;
843 kfree(husb);
860 struct hci_usb *husb;
913 if (!(husb = kzalloc(sizeof(struct hci_usb), GFP_KERNEL))) {
918 husb->udev = udev;
919 husb->bulk_out_ep = bulk_out_ep;
920 husb->bulk_in_ep = bulk_in_ep;
921 husb->intr_in_ep = intr_in_ep;
924 husb->ctrl_req = USB_TYPE_VENDOR;
926 husb->ctrl_req = USB_TYPE_CLASS;
970 if (usb_driver_claim_interface(&hci_usb_driver, isoc_iface, husb) != 0)
974 husb->isoc_iface = isoc_iface;
976 husb->isoc_iface = NULL;
978 husb->isoc_iface = isoc_iface;
979 husb->isoc_in_ep = isoc_in_ep;
980 husb->isoc_out_ep = isoc_out_ep;
986 rwlock_init(&husb->completion_lock);
989 skb_queue_head_init(&husb->transmit_q[i]);
990 _urb_queue_init(&husb->pending_q[i]);
991 _urb_queue_init(&husb->completed_q[i]);
1001 husb->hdev = hdev;
1004 hdev->driver_data = husb;
1046 usb_set_intfdata(intf, husb);
1050 if (husb->isoc_iface)
1051 usb_driver_release_interface(&hci_usb_driver, husb->isoc_iface);
1052 kfree(husb);
1060 struct hci_usb *husb = usb_get_intfdata(intf);
1063 if (!husb || intf == husb->isoc_iface)
1067 hdev = husb->hdev;
1073 if (husb->isoc_iface)
1074 usb_driver_release_interface(&hci_usb_driver, husb->isoc_iface);
1084 struct hci_usb *husb = usb_get_intfdata(intf);
1089 if (!husb || intf == husb->isoc_iface)
1092 hci_suspend_dev(husb->hdev);
1097 struct _urb_queue *q = &husb->pending_q[i];
1121 struct hci_usb *husb = usb_get_intfdata(intf);
1125 if (!husb || intf == husb->isoc_iface)
1129 struct _urb_queue *q = &husb->pending_q[i];
1146 hci_resume_dev(husb->hdev);