Lines Matching refs:ucs
324 static inline int update_basstate(struct bas_cardstate *ucs, in update_basstate() argument
330 spin_lock_irqsave(&ucs->lock, flags); in update_basstate()
331 state = ucs->basstate; in update_basstate()
332 ucs->basstate = (state & ~clear) | set; in update_basstate()
333 spin_unlock_irqrestore(&ucs->lock, flags); in update_basstate()
375 static void check_pending(struct bas_cardstate *ucs) in check_pending() argument
379 spin_lock_irqsave(&ucs->lock, flags); in check_pending()
380 switch (ucs->pending) { in check_pending()
384 if (ucs->basstate & BS_ATOPEN) in check_pending()
385 ucs->pending = 0; in check_pending()
388 if (ucs->basstate & BS_B1OPEN) in check_pending()
389 ucs->pending = 0; in check_pending()
392 if (ucs->basstate & BS_B2OPEN) in check_pending()
393 ucs->pending = 0; in check_pending()
396 if (!(ucs->basstate & BS_ATOPEN)) in check_pending()
397 ucs->pending = 0; in check_pending()
400 if (!(ucs->basstate & BS_B1OPEN)) in check_pending()
401 ucs->pending = 0; in check_pending()
404 if (!(ucs->basstate & BS_B2OPEN)) in check_pending()
405 ucs->pending = 0; in check_pending()
408 ucs->pending = 0; in check_pending()
411 if (!(ucs->basstate & BS_RESETTING)) in check_pending()
412 ucs->pending = 0; in check_pending()
419 dev_warn(&ucs->interface->dev, in check_pending()
421 ucs->pending); in check_pending()
422 ucs->pending = 0; in check_pending()
425 if (!ucs->pending) in check_pending()
426 del_timer(&ucs->timer_ctrl); in check_pending()
428 spin_unlock_irqrestore(&ucs->lock, flags); in check_pending()
439 struct bas_cardstate *ucs = cs->hw.bas; in cmd_in_timeout() local
442 if (!ucs->rcvbuf_size) { in cmd_in_timeout()
447 if (ucs->retry_cmd_in++ >= BAS_RETRY) { in cmd_in_timeout()
450 ucs->retry_cmd_in); in cmd_in_timeout()
451 kfree(ucs->rcvbuf); in cmd_in_timeout()
452 ucs->rcvbuf = NULL; in cmd_in_timeout()
453 ucs->rcvbuf_size = 0; in cmd_in_timeout()
459 __func__, ucs->retry_cmd_in); in cmd_in_timeout()
462 kfree(ucs->rcvbuf); in cmd_in_timeout()
463 ucs->rcvbuf = NULL; in cmd_in_timeout()
464 ucs->rcvbuf_size = 0; in cmd_in_timeout()
481 struct bas_cardstate *ucs = cs->hw.bas; in read_ctrl_callback() local
486 update_basstate(ucs, 0, BS_ATRDPEND); in read_ctrl_callback()
487 wake_up(&ucs->waitqueue); in read_ctrl_callback()
488 del_timer(&ucs->timer_cmd_in); in read_ctrl_callback()
493 if (unlikely(numbytes != ucs->rcvbuf_size)) { in read_ctrl_callback()
496 numbytes, ucs->rcvbuf_size); in read_ctrl_callback()
497 if (numbytes > ucs->rcvbuf_size) in read_ctrl_callback()
498 numbytes = ucs->rcvbuf_size; in read_ctrl_callback()
502 if (gigaset_fill_inbuf(inbuf, ucs->rcvbuf, numbytes)) { in read_ctrl_callback()
519 if (ucs->retry_cmd_in++ < BAS_RETRY) { in read_ctrl_callback()
521 get_usb_statmsg(status), ucs->retry_cmd_in); in read_ctrl_callback()
531 get_usb_statmsg(status), ucs->retry_cmd_in); in read_ctrl_callback()
536 kfree(ucs->rcvbuf); in read_ctrl_callback()
537 ucs->rcvbuf = NULL; in read_ctrl_callback()
538 ucs->rcvbuf_size = 0; in read_ctrl_callback()
553 struct bas_cardstate *ucs = cs->hw.bas; in atread_submit() local
558 ucs->rcvbuf_size); in atread_submit()
560 basstate = update_basstate(ucs, BS_ATRDPEND, 0); in atread_submit()
571 update_basstate(ucs, 0, BS_ATRDPEND); in atread_submit()
576 ucs->dr_cmd_in.bRequestType = IN_VENDOR_REQ; in atread_submit()
577 ucs->dr_cmd_in.bRequest = HD_READ_ATMESSAGE; in atread_submit()
578 ucs->dr_cmd_in.wValue = 0; in atread_submit()
579 ucs->dr_cmd_in.wIndex = 0; in atread_submit()
580 ucs->dr_cmd_in.wLength = cpu_to_le16(ucs->rcvbuf_size); in atread_submit()
581 usb_fill_control_urb(ucs->urb_cmd_in, ucs->udev, in atread_submit()
582 usb_rcvctrlpipe(ucs->udev, 0), in atread_submit()
583 (unsigned char *) &ucs->dr_cmd_in, in atread_submit()
584 ucs->rcvbuf, ucs->rcvbuf_size, in atread_submit()
587 ret = usb_submit_urb(ucs->urb_cmd_in, GFP_ATOMIC); in atread_submit()
589 update_basstate(ucs, 0, BS_ATRDPEND); in atread_submit()
597 mod_timer(&ucs->timer_cmd_in, jiffies + timeout * HZ / 10); in atread_submit()
608 struct bas_cardstate *ucs = in int_in_work() local
610 struct urb *urb = ucs->urb_int_in; in int_in_work()
615 rc = usb_clear_halt(ucs->udev, urb->pipe); in int_in_work()
628 rc = usb_lock_device_for_reset(ucs->udev, ucs->interface); in int_in_work()
630 rc = usb_reset_device(ucs->udev); in int_in_work()
631 usb_unlock_device(ucs->udev); in int_in_work()
634 ucs->retry_int_in = 0; in int_in_work()
645 struct bas_cardstate *ucs = cs->hw.bas; in int_in_resubmit() local
648 if (ucs->retry_int_in++ >= BAS_RETRY) { in int_in_resubmit()
650 ucs->retry_int_in); in int_in_resubmit()
651 usb_queue_reset_device(ucs->interface); in int_in_resubmit()
655 gig_dbg(DEBUG_USBREQ, "%s: retry %d", __func__, ucs->retry_int_in); in int_in_resubmit()
656 rc = usb_submit_urb(ucs->urb_int_in, GFP_ATOMIC); in int_in_resubmit()
660 usb_queue_reset_device(ucs->interface); in int_in_resubmit()
674 struct bas_cardstate *ucs = cs->hw.bas; in read_int_callback() local
684 ucs->retry_int_in = 0; in read_int_callback()
687 schedule_work(&ucs->int_in_wq); in read_int_callback()
704 mod_timer(&ucs->timer_int_in, jiffies + HZ / 10); in read_int_callback()
719 l = (unsigned) ucs->int_in_buf[1] + in read_int_callback()
720 (((unsigned) ucs->int_in_buf[2]) << 8); in read_int_callback()
723 urb->actual_length, (int)ucs->int_in_buf[0], l, in read_int_callback()
724 (int)ucs->int_in_buf[1], (int)ucs->int_in_buf[2]); in read_int_callback()
728 switch (ucs->int_in_buf[0]) { in read_int_callback()
730 update_basstate(ucs, BS_INIT, 0); in read_int_callback()
734 del_timer(&ucs->timer_atrdy); in read_int_callback()
735 update_basstate(ucs, BS_ATREADY, BS_ATTIMER); in read_int_callback()
743 update_basstate(ucs, BS_B1OPEN << channel, 0); in read_int_callback()
748 update_basstate(ucs, BS_ATOPEN, 0); in read_int_callback()
756 update_basstate(ucs, 0, BS_B1OPEN << channel); in read_int_callback()
762 update_basstate(ucs, 0, BS_ATOPEN); in read_int_callback()
784 if (ucs->basstate & BS_ATRDPEND) { in read_int_callback()
788 l, ucs->rcvbuf_size); in read_int_callback()
791 if (ucs->rcvbuf_size) { in read_int_callback()
795 ucs->rcvbuf_size); in read_int_callback()
796 kfree(ucs->rcvbuf); in read_int_callback()
797 ucs->rcvbuf_size = 0; in read_int_callback()
799 ucs->rcvbuf = kmalloc(l, GFP_ATOMIC); in read_int_callback()
800 if (ucs->rcvbuf == NULL) { in read_int_callback()
805 ucs->rcvbuf_size = l; in read_int_callback()
806 ucs->retry_cmd_in = 0; in read_int_callback()
809 kfree(ucs->rcvbuf); in read_int_callback()
810 ucs->rcvbuf = NULL; in read_int_callback()
811 ucs->rcvbuf_size = 0; in read_int_callback()
819 update_basstate(ucs, 0, BS_RESETTING); in read_int_callback()
830 (int) ucs->int_in_buf[0], l); in read_int_callback()
833 check_pending(ucs); in read_int_callback()
834 wake_up(&ucs->waitqueue); in read_int_callback()
1447 struct bas_cardstate *ucs = cs->hw.bas; in req_timeout() local
1451 check_pending(ucs); in req_timeout()
1453 spin_lock_irqsave(&ucs->lock, flags); in req_timeout()
1454 pending = ucs->pending; in req_timeout()
1455 ucs->pending = 0; in req_timeout()
1456 spin_unlock_irqrestore(&ucs->lock, flags); in req_timeout()
1497 usb_queue_reset_device(ucs->interface); in req_timeout()
1505 wake_up(&ucs->waitqueue); in req_timeout()
1517 struct bas_cardstate *ucs = urb->context; in write_ctrl_callback() local
1525 spin_lock_irqsave(&ucs->lock, flags); in write_ctrl_callback()
1526 switch (ucs->pending) { in write_ctrl_callback()
1528 del_timer(&ucs->timer_ctrl); in write_ctrl_callback()
1529 ucs->pending = 0; in write_ctrl_callback()
1532 spin_unlock_irqrestore(&ucs->lock, flags); in write_ctrl_callback()
1547 if (++ucs->retry_ctrl > BAS_RETRY || in write_ctrl_callback()
1548 (ucs->basstate & BS_SUSPEND)) { in write_ctrl_callback()
1549 dev_err(&ucs->interface->dev, in write_ctrl_callback()
1551 ucs->dr_ctrl.bRequest, in write_ctrl_callback()
1555 dev_notice(&ucs->interface->dev, in write_ctrl_callback()
1557 ucs->dr_ctrl.bRequest, get_usb_statmsg(status), in write_ctrl_callback()
1558 ucs->retry_ctrl); in write_ctrl_callback()
1560 urb->dev = ucs->udev; in write_ctrl_callback()
1563 dev_err(&ucs->interface->dev, in write_ctrl_callback()
1565 ucs->dr_ctrl.bRequest, get_usb_rcmsg(rc)); in write_ctrl_callback()
1573 spin_lock_irqsave(&ucs->lock, flags); in write_ctrl_callback()
1574 del_timer(&ucs->timer_ctrl); in write_ctrl_callback()
1575 ucs->pending = 0; in write_ctrl_callback()
1576 spin_unlock_irqrestore(&ucs->lock, flags); in write_ctrl_callback()
1577 wake_up(&ucs->waitqueue); in write_ctrl_callback()
1595 struct bas_cardstate *ucs = bcs->cs->hw.bas; in req_submit() local
1601 spin_lock_irqsave(&ucs->lock, flags); in req_submit()
1602 if (ucs->pending) { in req_submit()
1603 spin_unlock_irqrestore(&ucs->lock, flags); in req_submit()
1607 req, ucs->pending); in req_submit()
1611 ucs->dr_ctrl.bRequestType = OUT_VENDOR_REQ; in req_submit()
1612 ucs->dr_ctrl.bRequest = req; in req_submit()
1613 ucs->dr_ctrl.wValue = cpu_to_le16(val); in req_submit()
1614 ucs->dr_ctrl.wIndex = 0; in req_submit()
1615 ucs->dr_ctrl.wLength = 0; in req_submit()
1616 usb_fill_control_urb(ucs->urb_ctrl, ucs->udev, in req_submit()
1617 usb_sndctrlpipe(ucs->udev, 0), in req_submit()
1618 (unsigned char *) &ucs->dr_ctrl, NULL, 0, in req_submit()
1619 write_ctrl_callback, ucs); in req_submit()
1620 ucs->retry_ctrl = 0; in req_submit()
1621 ret = usb_submit_urb(ucs->urb_ctrl, GFP_ATOMIC); in req_submit()
1625 spin_unlock_irqrestore(&ucs->lock, flags); in req_submit()
1628 ucs->pending = req; in req_submit()
1632 mod_timer(&ucs->timer_ctrl, jiffies + timeout * HZ / 10); in req_submit()
1635 spin_unlock_irqrestore(&ucs->lock, flags); in req_submit()
1777 struct bas_cardstate *ucs = cs->hw.bas; in write_command_callback() local
1781 update_basstate(ucs, 0, BS_ATWRPEND); in write_command_callback()
1782 wake_up(&ucs->waitqueue); in write_command_callback()
1798 if (++ucs->retry_cmd_out > BAS_RETRY) { in write_command_callback()
1803 ucs->retry_cmd_out); in write_command_callback()
1806 if (ucs->basstate & BS_SUSPEND) { in write_command_callback()
1821 get_usb_statmsg(status), ucs->retry_cmd_out); in write_command_callback()
1826 update_basstate(ucs, BS_ATREADY, 0); in write_command_callback()
1843 struct bas_cardstate *ucs = cs->hw.bas; in atrdy_timeout() local
1848 update_basstate(ucs, BS_ATREADY, BS_ATTIMER); in atrdy_timeout()
1865 struct bas_cardstate *ucs = cs->hw.bas; in atwrite_submit() local
1870 if (update_basstate(ucs, BS_ATWRPEND, 0) & BS_ATWRPEND) { in atwrite_submit()
1876 ucs->dr_cmd_out.bRequestType = OUT_VENDOR_REQ; in atwrite_submit()
1877 ucs->dr_cmd_out.bRequest = HD_WRITE_ATMESSAGE; in atwrite_submit()
1878 ucs->dr_cmd_out.wValue = 0; in atwrite_submit()
1879 ucs->dr_cmd_out.wIndex = 0; in atwrite_submit()
1880 ucs->dr_cmd_out.wLength = cpu_to_le16(len); in atwrite_submit()
1881 usb_fill_control_urb(ucs->urb_cmd_out, ucs->udev, in atwrite_submit()
1882 usb_sndctrlpipe(ucs->udev, 0), in atwrite_submit()
1883 (unsigned char *) &ucs->dr_cmd_out, buf, len, in atwrite_submit()
1885 rc = usb_submit_urb(ucs->urb_cmd_out, GFP_ATOMIC); in atwrite_submit()
1887 update_basstate(ucs, 0, BS_ATWRPEND); in atwrite_submit()
1894 if (!(update_basstate(ucs, BS_ATTIMER, BS_ATREADY) & BS_ATTIMER)) { in atwrite_submit()
1897 mod_timer(&ucs->timer_atrdy, jiffies + ATRDY_TIMEOUT * HZ / 10); in atwrite_submit()
1913 struct bas_cardstate *ucs = cs->hw.bas; in start_cbsend() local
1919 if (ucs->basstate & BS_SUSPEND) { in start_cbsend()
1925 if (!(ucs->basstate & BS_ATOPEN)) { in start_cbsend()
1941 while ((cb = cs->cmdbuf) != NULL && (ucs->basstate & BS_ATREADY)) { in start_cbsend()
1942 ucs->retry_cmd_out = 0; in start_cbsend()
2201 struct bas_cardstate *ucs; in gigaset_initcshw() local
2203 cs->hw.bas = ucs = kmalloc(sizeof *ucs, GFP_KERNEL); in gigaset_initcshw()
2204 if (!ucs) { in gigaset_initcshw()
2208 ucs->int_in_buf = kmalloc(IP_MSGSIZE, GFP_KERNEL); in gigaset_initcshw()
2209 if (!ucs->int_in_buf) { in gigaset_initcshw()
2210 kfree(ucs); in gigaset_initcshw()
2215 ucs->urb_cmd_in = NULL; in gigaset_initcshw()
2216 ucs->urb_cmd_out = NULL; in gigaset_initcshw()
2217 ucs->rcvbuf = NULL; in gigaset_initcshw()
2218 ucs->rcvbuf_size = 0; in gigaset_initcshw()
2220 spin_lock_init(&ucs->lock); in gigaset_initcshw()
2221 ucs->pending = 0; in gigaset_initcshw()
2223 ucs->basstate = 0; in gigaset_initcshw()
2224 setup_timer(&ucs->timer_ctrl, req_timeout, (unsigned long) cs); in gigaset_initcshw()
2225 setup_timer(&ucs->timer_atrdy, atrdy_timeout, (unsigned long) cs); in gigaset_initcshw()
2226 setup_timer(&ucs->timer_cmd_in, cmd_in_timeout, (unsigned long) cs); in gigaset_initcshw()
2227 setup_timer(&ucs->timer_int_in, int_in_resubmit, (unsigned long) cs); in gigaset_initcshw()
2228 init_waitqueue_head(&ucs->waitqueue); in gigaset_initcshw()
2229 INIT_WORK(&ucs->int_in_wq, int_in_work); in gigaset_initcshw()
2242 struct bas_cardstate *ucs = cs->hw.bas; in freeurbs() local
2260 usb_kill_urb(ucs->urb_int_in); in freeurbs()
2261 usb_free_urb(ucs->urb_int_in); in freeurbs()
2262 ucs->urb_int_in = NULL; in freeurbs()
2263 usb_kill_urb(ucs->urb_cmd_out); in freeurbs()
2264 usb_free_urb(ucs->urb_cmd_out); in freeurbs()
2265 ucs->urb_cmd_out = NULL; in freeurbs()
2266 usb_kill_urb(ucs->urb_cmd_in); in freeurbs()
2267 usb_free_urb(ucs->urb_cmd_in); in freeurbs()
2268 ucs->urb_cmd_in = NULL; in freeurbs()
2269 usb_kill_urb(ucs->urb_ctrl); in freeurbs()
2270 usb_free_urb(ucs->urb_ctrl); in freeurbs()
2271 ucs->urb_ctrl = NULL; in freeurbs()
2284 struct bas_cardstate *ucs = NULL; in gigaset_probe() local
2330 ucs = cs->hw.bas; in gigaset_probe()
2334 ucs->udev = udev; in gigaset_probe()
2335 ucs->interface = interface; in gigaset_probe()
2343 if (!(ucs->urb_int_in = usb_alloc_urb(0, GFP_KERNEL)) || in gigaset_probe()
2344 !(ucs->urb_cmd_in = usb_alloc_urb(0, GFP_KERNEL)) || in gigaset_probe()
2345 !(ucs->urb_cmd_out = usb_alloc_urb(0, GFP_KERNEL)) || in gigaset_probe()
2346 !(ucs->urb_ctrl = usb_alloc_urb(0, GFP_KERNEL))) in gigaset_probe()
2361 ucs->rcvbuf = NULL; in gigaset_probe()
2362 ucs->rcvbuf_size = 0; in gigaset_probe()
2366 usb_fill_int_urb(ucs->urb_int_in, udev, in gigaset_probe()
2369 ucs->int_in_buf, IP_MSGSIZE, read_int_callback, cs, in gigaset_probe()
2371 rc = usb_submit_urb(ucs->urb_int_in, GFP_KERNEL); in gigaset_probe()
2377 ucs->retry_int_in = 0; in gigaset_probe()
2414 struct bas_cardstate *ucs; in gigaset_disconnect() local
2419 ucs = cs->hw.bas; in gigaset_disconnect()
2424 ucs->basstate = 0; in gigaset_disconnect()
2434 del_timer_sync(&ucs->timer_ctrl); in gigaset_disconnect()
2435 del_timer_sync(&ucs->timer_atrdy); in gigaset_disconnect()
2436 del_timer_sync(&ucs->timer_cmd_in); in gigaset_disconnect()
2437 del_timer_sync(&ucs->timer_int_in); in gigaset_disconnect()
2438 cancel_work_sync(&ucs->int_in_wq); in gigaset_disconnect()
2441 kfree(ucs->rcvbuf); in gigaset_disconnect()
2442 ucs->rcvbuf = NULL; in gigaset_disconnect()
2443 ucs->rcvbuf_size = 0; in gigaset_disconnect()
2444 usb_put_dev(ucs->udev); in gigaset_disconnect()
2445 ucs->interface = NULL; in gigaset_disconnect()
2446 ucs->udev = NULL; in gigaset_disconnect()
2459 struct bas_cardstate *ucs = cs->hw.bas; in gigaset_suspend() local
2463 if (update_basstate(ucs, BS_SUSPEND, 0) & BS_SUSPEND) { in gigaset_suspend()
2469 rc = wait_event_timeout(ucs->waitqueue, in gigaset_suspend()
2470 !(ucs->basstate & in gigaset_suspend()
2476 if (ucs->basstate & (BS_B1OPEN | BS_B2OPEN | BS_ATRDPEND | BS_ATWRPEND)) { in gigaset_suspend()
2478 if (ucs->basstate & BS_B1OPEN) in gigaset_suspend()
2480 if (ucs->basstate & BS_B2OPEN) in gigaset_suspend()
2482 if (ucs->basstate & BS_ATRDPEND) in gigaset_suspend()
2484 if (ucs->basstate & BS_ATWRPEND) in gigaset_suspend()
2486 update_basstate(ucs, 0, BS_SUSPEND); in gigaset_suspend()
2491 if (ucs->basstate & BS_ATOPEN) { in gigaset_suspend()
2495 update_basstate(ucs, 0, BS_SUSPEND); in gigaset_suspend()
2498 wait_event_timeout(ucs->waitqueue, !ucs->pending, in gigaset_suspend()
2504 usb_kill_urb(ucs->urb_ctrl); in gigaset_suspend()
2505 usb_kill_urb(ucs->urb_int_in); in gigaset_suspend()
2506 del_timer_sync(&ucs->timer_ctrl); in gigaset_suspend()
2507 del_timer_sync(&ucs->timer_atrdy); in gigaset_suspend()
2508 del_timer_sync(&ucs->timer_cmd_in); in gigaset_suspend()
2509 del_timer_sync(&ucs->timer_int_in); in gigaset_suspend()
2515 cancel_work_sync(&ucs->int_in_wq); in gigaset_suspend()
2527 struct bas_cardstate *ucs = cs->hw.bas; in gigaset_resume() local
2531 rc = usb_submit_urb(ucs->urb_int_in, GFP_KERNEL); in gigaset_resume()
2537 ucs->retry_int_in = 0; in gigaset_resume()
2540 update_basstate(ucs, 0, BS_SUSPEND); in gigaset_resume()
2622 struct bas_cardstate *ucs; in bas_gigaset_exit() local
2636 ucs = driver->cs[i].hw.bas; in bas_gigaset_exit()
2637 if (ucs->basstate & BS_B1OPEN) { in bas_gigaset_exit()
2639 usb_control_msg(ucs->udev, in bas_gigaset_exit()
2640 usb_sndctrlpipe(ucs->udev, 0), in bas_gigaset_exit()
2644 if (ucs->basstate & BS_B2OPEN) { in bas_gigaset_exit()
2646 usb_control_msg(ucs->udev, in bas_gigaset_exit()
2647 usb_sndctrlpipe(ucs->udev, 0), in bas_gigaset_exit()
2651 if (ucs->basstate & BS_ATOPEN) { in bas_gigaset_exit()
2653 usb_control_msg(ucs->udev, in bas_gigaset_exit()
2654 usb_sndctrlpipe(ucs->udev, 0), in bas_gigaset_exit()
2658 ucs->basstate = 0; in bas_gigaset_exit()