Lines Matching refs:kingsun
177 static int ksdazzle_change_speed(struct ksdazzle_cb *kingsun, unsigned speed) in ksdazzle_change_speed() argument
185 if (kingsun->speed_setuprequest == NULL || kingsun->speed_urb == NULL) in ksdazzle_change_speed()
193 memset(&(kingsun->speedparams), 0, sizeof(struct ksdazzle_speedparams)); in ksdazzle_change_speed()
194 kingsun->speedparams.baudrate = cpu_to_le32(speed); in ksdazzle_change_speed()
195 kingsun->speedparams.flags = KS_DATA_8_BITS; in ksdazzle_change_speed()
198 usb_fill_control_urb(kingsun->speed_urb, kingsun->usbdev, in ksdazzle_change_speed()
199 usb_sndctrlpipe(kingsun->usbdev, 0), in ksdazzle_change_speed()
200 (unsigned char *)kingsun->speed_setuprequest, in ksdazzle_change_speed()
201 &(kingsun->speedparams), in ksdazzle_change_speed()
203 ksdazzle_speed_irq, kingsun); in ksdazzle_change_speed()
204 kingsun->speed_urb->status = 0; in ksdazzle_change_speed()
205 err = usb_submit_urb(kingsun->speed_urb, GFP_ATOMIC); in ksdazzle_change_speed()
212 static int ksdazzle_submit_tx_fragment(struct ksdazzle_cb *kingsun) in ksdazzle_submit_tx_fragment() argument
219 if (wraplen > kingsun->tx_buf_clear_used) in ksdazzle_submit_tx_fragment()
220 wraplen = kingsun->tx_buf_clear_used; in ksdazzle_submit_tx_fragment()
223 memset(kingsun->tx_payload, 0, 8); in ksdazzle_submit_tx_fragment()
224 kingsun->tx_payload[0] = (unsigned char)0xf8 + wraplen; in ksdazzle_submit_tx_fragment()
225 memcpy(kingsun->tx_payload + 1, kingsun->tx_buf_clear, wraplen); in ksdazzle_submit_tx_fragment()
227 usb_fill_int_urb(kingsun->tx_urb, kingsun->usbdev, in ksdazzle_submit_tx_fragment()
228 usb_sndintpipe(kingsun->usbdev, kingsun->ep_out), in ksdazzle_submit_tx_fragment()
229 kingsun->tx_payload, 8, ksdazzle_send_irq, kingsun, 1); in ksdazzle_submit_tx_fragment()
230 kingsun->tx_urb->status = 0; in ksdazzle_submit_tx_fragment()
231 ret = usb_submit_urb(kingsun->tx_urb, GFP_ATOMIC); in ksdazzle_submit_tx_fragment()
234 kingsun->tx_buf_clear_sent = (ret == 0) ? wraplen : 0; in ksdazzle_submit_tx_fragment()
241 struct ksdazzle_cb *kingsun = urb->context; in ksdazzle_send_irq() local
242 struct net_device *netdev = kingsun->netdev; in ksdazzle_send_irq()
246 if (!netif_running(kingsun->netdev)) { in ksdazzle_send_irq()
247 dev_err(&kingsun->usbdev->dev, in ksdazzle_send_irq()
254 dev_err(&kingsun->usbdev->dev, in ksdazzle_send_irq()
260 if (kingsun->tx_buf_clear_used > 0) { in ksdazzle_send_irq()
262 if (kingsun->tx_buf_clear_sent < kingsun->tx_buf_clear_used) { in ksdazzle_send_irq()
263 memmove(kingsun->tx_buf_clear, in ksdazzle_send_irq()
264 kingsun->tx_buf_clear + in ksdazzle_send_irq()
265 kingsun->tx_buf_clear_sent, in ksdazzle_send_irq()
266 kingsun->tx_buf_clear_used - in ksdazzle_send_irq()
267 kingsun->tx_buf_clear_sent); in ksdazzle_send_irq()
269 kingsun->tx_buf_clear_used -= kingsun->tx_buf_clear_sent; in ksdazzle_send_irq()
270 kingsun->tx_buf_clear_sent = 0; in ksdazzle_send_irq()
272 if (kingsun->tx_buf_clear_used > 0) { in ksdazzle_send_irq()
274 if ((ret = ksdazzle_submit_tx_fragment(kingsun)) != 0) { in ksdazzle_send_irq()
275 dev_err(&kingsun->usbdev->dev, in ksdazzle_send_irq()
289 if (kingsun->new_speed != -1 && in ksdazzle_send_irq()
290 cpu_to_le32(kingsun->new_speed) != in ksdazzle_send_irq()
291 kingsun->speedparams.baudrate) in ksdazzle_send_irq()
292 ksdazzle_change_speed(kingsun, in ksdazzle_send_irq()
293 kingsun->new_speed); in ksdazzle_send_irq()
306 struct ksdazzle_cb *kingsun; in ksdazzle_hard_xmit() local
315 kingsun = netdev_priv(netdev); in ksdazzle_hard_xmit()
317 spin_lock(&kingsun->lock); in ksdazzle_hard_xmit()
318 kingsun->new_speed = irda_get_next_speed(skb); in ksdazzle_hard_xmit()
322 async_wrap_skb(skb, kingsun->tx_buf_clear, KINGSUN_SND_FIFO_SIZE); in ksdazzle_hard_xmit()
323 kingsun->tx_buf_clear_used = wraplen; in ksdazzle_hard_xmit()
325 if ((ret = ksdazzle_submit_tx_fragment(kingsun)) != 0) { in ksdazzle_hard_xmit()
326 dev_err(&kingsun->usbdev->dev, in ksdazzle_hard_xmit()
343 spin_unlock(&kingsun->lock); in ksdazzle_hard_xmit()
351 struct ksdazzle_cb *kingsun = urb->context; in ksdazzle_rcv_irq() local
352 struct net_device *netdev = kingsun->netdev; in ksdazzle_rcv_irq()
356 kingsun->receiving = 0; in ksdazzle_rcv_irq()
362 dev_err(&kingsun->usbdev->dev, in ksdazzle_rcv_irq()
365 kingsun->receiving = 0; in ksdazzle_rcv_irq()
375 &kingsun->rx_unwrap_buff, bytes[i]); in ksdazzle_rcv_irq()
377 kingsun->receiving = in ksdazzle_rcv_irq()
378 (kingsun->rx_unwrap_buff.state != OUTSIDE_FRAME) ? 1 : 0; in ksdazzle_rcv_irq()
395 struct ksdazzle_cb *kingsun = netdev_priv(netdev); in ksdazzle_net_open() local
400 kingsun->receiving = 0; in ksdazzle_net_open()
403 kingsun->rx_unwrap_buff.in_frame = FALSE; in ksdazzle_net_open()
404 kingsun->rx_unwrap_buff.state = OUTSIDE_FRAME; in ksdazzle_net_open()
405 kingsun->rx_unwrap_buff.truesize = IRDA_SKB_MAX_MTU; in ksdazzle_net_open()
406 kingsun->rx_unwrap_buff.skb = dev_alloc_skb(IRDA_SKB_MAX_MTU); in ksdazzle_net_open()
407 if (!kingsun->rx_unwrap_buff.skb) in ksdazzle_net_open()
410 skb_reserve(kingsun->rx_unwrap_buff.skb, 1); in ksdazzle_net_open()
411 kingsun->rx_unwrap_buff.head = kingsun->rx_unwrap_buff.skb->data; in ksdazzle_net_open()
413 kingsun->rx_urb = usb_alloc_urb(0, GFP_KERNEL); in ksdazzle_net_open()
414 if (!kingsun->rx_urb) in ksdazzle_net_open()
417 kingsun->tx_urb = usb_alloc_urb(0, GFP_KERNEL); in ksdazzle_net_open()
418 if (!kingsun->tx_urb) in ksdazzle_net_open()
421 kingsun->speed_urb = usb_alloc_urb(0, GFP_KERNEL); in ksdazzle_net_open()
422 if (!kingsun->speed_urb) in ksdazzle_net_open()
426 kingsun->new_speed = 9600; in ksdazzle_net_open()
427 err = ksdazzle_change_speed(kingsun, 9600); in ksdazzle_net_open()
435 sprintf(hwname, "usb#%d", kingsun->usbdev->devnum); in ksdazzle_net_open()
436 kingsun->irlap = irlap_open(netdev, &kingsun->qos, hwname); in ksdazzle_net_open()
437 if (!kingsun->irlap) { in ksdazzle_net_open()
439 dev_err(&kingsun->usbdev->dev, "irlap_open failed\n"); in ksdazzle_net_open()
444 usb_fill_int_urb(kingsun->rx_urb, kingsun->usbdev, in ksdazzle_net_open()
445 usb_rcvintpipe(kingsun->usbdev, kingsun->ep_in), in ksdazzle_net_open()
446 kingsun->rx_buf, KINGSUN_RCV_MAX, ksdazzle_rcv_irq, in ksdazzle_net_open()
447 kingsun, 1); in ksdazzle_net_open()
448 kingsun->rx_urb->status = 0; in ksdazzle_net_open()
449 err = usb_submit_urb(kingsun->rx_urb, GFP_KERNEL); in ksdazzle_net_open()
451 dev_err(&kingsun->usbdev->dev, "first urb-submit failed: %d\n", err); in ksdazzle_net_open()
469 irlap_close(kingsun->irlap); in ksdazzle_net_open()
471 usb_free_urb(kingsun->speed_urb); in ksdazzle_net_open()
472 kingsun->speed_urb = NULL; in ksdazzle_net_open()
473 usb_free_urb(kingsun->tx_urb); in ksdazzle_net_open()
474 kingsun->tx_urb = NULL; in ksdazzle_net_open()
475 usb_free_urb(kingsun->rx_urb); in ksdazzle_net_open()
476 kingsun->rx_urb = NULL; in ksdazzle_net_open()
477 if (kingsun->rx_unwrap_buff.skb) { in ksdazzle_net_open()
478 kfree_skb(kingsun->rx_unwrap_buff.skb); in ksdazzle_net_open()
479 kingsun->rx_unwrap_buff.skb = NULL; in ksdazzle_net_open()
480 kingsun->rx_unwrap_buff.head = NULL; in ksdazzle_net_open()
493 struct ksdazzle_cb *kingsun = netdev_priv(netdev); in ksdazzle_net_close() local
499 usb_kill_urb(kingsun->tx_urb); in ksdazzle_net_close()
500 usb_free_urb(kingsun->tx_urb); in ksdazzle_net_close()
501 kingsun->tx_urb = NULL; in ksdazzle_net_close()
503 usb_kill_urb(kingsun->speed_urb); in ksdazzle_net_close()
504 usb_free_urb(kingsun->speed_urb); in ksdazzle_net_close()
505 kingsun->speed_urb = NULL; in ksdazzle_net_close()
507 usb_kill_urb(kingsun->rx_urb); in ksdazzle_net_close()
508 usb_free_urb(kingsun->rx_urb); in ksdazzle_net_close()
509 kingsun->rx_urb = NULL; in ksdazzle_net_close()
511 kfree_skb(kingsun->rx_unwrap_buff.skb); in ksdazzle_net_close()
512 kingsun->rx_unwrap_buff.skb = NULL; in ksdazzle_net_close()
513 kingsun->rx_unwrap_buff.head = NULL; in ksdazzle_net_close()
514 kingsun->rx_unwrap_buff.in_frame = FALSE; in ksdazzle_net_close()
515 kingsun->rx_unwrap_buff.state = OUTSIDE_FRAME; in ksdazzle_net_close()
516 kingsun->receiving = 0; in ksdazzle_net_close()
519 irlap_close(kingsun->irlap); in ksdazzle_net_close()
521 kingsun->irlap = NULL; in ksdazzle_net_close()
533 struct ksdazzle_cb *kingsun = netdev_priv(netdev); in ksdazzle_net_ioctl() local
542 if (netif_device_present(kingsun->netdev)) in ksdazzle_net_ioctl()
543 return ksdazzle_change_speed(kingsun, in ksdazzle_net_ioctl()
552 if (netif_running(kingsun->netdev)) in ksdazzle_net_ioctl()
553 irda_device_set_media_busy(kingsun->netdev, TRUE); in ksdazzle_net_ioctl()
558 irq->ifr_receiving = kingsun->receiving; in ksdazzle_net_ioctl()
587 struct ksdazzle_cb *kingsun = NULL; in ksdazzle_probe() local
632 net = alloc_irdadev(sizeof(*kingsun)); in ksdazzle_probe()
637 kingsun = netdev_priv(net); in ksdazzle_probe()
638 kingsun->netdev = net; in ksdazzle_probe()
639 kingsun->usbdev = dev; in ksdazzle_probe()
640 kingsun->ep_in = ep_in; in ksdazzle_probe()
641 kingsun->ep_out = ep_out; in ksdazzle_probe()
642 kingsun->irlap = NULL; in ksdazzle_probe()
643 kingsun->tx_urb = NULL; in ksdazzle_probe()
644 kingsun->tx_buf_clear = NULL; in ksdazzle_probe()
645 kingsun->tx_buf_clear_used = 0; in ksdazzle_probe()
646 kingsun->tx_buf_clear_sent = 0; in ksdazzle_probe()
648 kingsun->rx_urb = NULL; in ksdazzle_probe()
649 kingsun->rx_buf = NULL; in ksdazzle_probe()
650 kingsun->rx_unwrap_buff.in_frame = FALSE; in ksdazzle_probe()
651 kingsun->rx_unwrap_buff.state = OUTSIDE_FRAME; in ksdazzle_probe()
652 kingsun->rx_unwrap_buff.skb = NULL; in ksdazzle_probe()
653 kingsun->receiving = 0; in ksdazzle_probe()
654 spin_lock_init(&kingsun->lock); in ksdazzle_probe()
656 kingsun->speed_setuprequest = NULL; in ksdazzle_probe()
657 kingsun->speed_urb = NULL; in ksdazzle_probe()
658 kingsun->speedparams.baudrate = 0; in ksdazzle_probe()
661 kingsun->rx_buf = kmalloc(KINGSUN_RCV_MAX, GFP_KERNEL); in ksdazzle_probe()
662 if (!kingsun->rx_buf) in ksdazzle_probe()
666 kingsun->tx_buf_clear = kmalloc(KINGSUN_SND_FIFO_SIZE, GFP_KERNEL); in ksdazzle_probe()
667 if (!kingsun->tx_buf_clear) in ksdazzle_probe()
671 kingsun->speed_setuprequest = in ksdazzle_probe()
673 if (!kingsun->speed_setuprequest) in ksdazzle_probe()
675 kingsun->speed_setuprequest->bRequestType = in ksdazzle_probe()
677 kingsun->speed_setuprequest->bRequest = KINGSUN_REQ_SEND; in ksdazzle_probe()
678 kingsun->speed_setuprequest->wValue = cpu_to_le16(0x0200); in ksdazzle_probe()
679 kingsun->speed_setuprequest->wIndex = cpu_to_le16(0x0001); in ksdazzle_probe()
680 kingsun->speed_setuprequest->wLength = in ksdazzle_probe()
689 irda_init_max_qos_capabilies(&kingsun->qos); in ksdazzle_probe()
695 kingsun->qos.baud_rate.bits = in ksdazzle_probe()
697 kingsun->qos.min_turn_time.bits &= KINGSUN_MTT; in ksdazzle_probe()
698 irda_qos_bits_to_value(&kingsun->qos); in ksdazzle_probe()
710 usb_set_intfdata(intf, kingsun); in ksdazzle_probe()
723 kfree(kingsun->speed_setuprequest); in ksdazzle_probe()
724 kfree(kingsun->tx_buf_clear); in ksdazzle_probe()
725 kfree(kingsun->rx_buf); in ksdazzle_probe()
736 struct ksdazzle_cb *kingsun = usb_get_intfdata(intf); in ksdazzle_disconnect() local
738 if (!kingsun) in ksdazzle_disconnect()
741 unregister_netdev(kingsun->netdev); in ksdazzle_disconnect()
744 usb_kill_urb(kingsun->speed_urb); in ksdazzle_disconnect()
745 usb_free_urb(kingsun->speed_urb); in ksdazzle_disconnect()
746 kingsun->speed_urb = NULL; in ksdazzle_disconnect()
748 usb_kill_urb(kingsun->tx_urb); in ksdazzle_disconnect()
749 usb_free_urb(kingsun->tx_urb); in ksdazzle_disconnect()
750 kingsun->tx_urb = NULL; in ksdazzle_disconnect()
752 usb_kill_urb(kingsun->rx_urb); in ksdazzle_disconnect()
753 usb_free_urb(kingsun->rx_urb); in ksdazzle_disconnect()
754 kingsun->rx_urb = NULL; in ksdazzle_disconnect()
756 kfree(kingsun->speed_setuprequest); in ksdazzle_disconnect()
757 kfree(kingsun->tx_buf_clear); in ksdazzle_disconnect()
758 kfree(kingsun->rx_buf); in ksdazzle_disconnect()
759 free_netdev(kingsun->netdev); in ksdazzle_disconnect()
768 struct ksdazzle_cb *kingsun = usb_get_intfdata(intf); in ksdazzle_suspend() local
770 netif_device_detach(kingsun->netdev); in ksdazzle_suspend()
771 if (kingsun->speed_urb != NULL) in ksdazzle_suspend()
772 usb_kill_urb(kingsun->speed_urb); in ksdazzle_suspend()
773 if (kingsun->tx_urb != NULL) in ksdazzle_suspend()
774 usb_kill_urb(kingsun->tx_urb); in ksdazzle_suspend()
775 if (kingsun->rx_urb != NULL) in ksdazzle_suspend()
776 usb_kill_urb(kingsun->rx_urb); in ksdazzle_suspend()
783 struct ksdazzle_cb *kingsun = usb_get_intfdata(intf); in ksdazzle_resume() local
785 if (kingsun->rx_urb != NULL) { in ksdazzle_resume()
787 usb_submit_urb(kingsun->rx_urb, GFP_KERNEL); in ksdazzle_resume()
789 netif_device_attach(kingsun->netdev); in ksdazzle_resume()