Lines Matching +full:bi +full:- +full:directional

4 /*-
5 * SPDX-License-Identifier: BSD-2-Clause
175 USETW(req.wIndex, sc->sc_iface_no); in ulpt_reset()
185 mtx_lock(&sc->sc_mtx); in ulpt_reset()
187 if (usbd_do_request_flags(sc->sc_udev, &sc->sc_mtx, in ulpt_reset()
190 if (usbd_do_request_flags(sc->sc_udev, &sc->sc_mtx, in ulpt_reset()
195 mtx_unlock(&sc->sc_mtx); in ulpt_reset()
202 struct usb_fifo *f = sc->sc_fifo_open[USB_FIFO_TX]; in ulpt_write_callback()
241 struct usb_fifo *f = sc->sc_fifo_open[USB_FIFO_RX]; in ulpt_read_callback()
258 if (sc->sc_zlps == 4) { in ulpt_read_callback()
262 sc->sc_zlps++; in ulpt_read_callback()
268 sc->sc_zlps = 0; in ulpt_read_callback()
285 sc->sc_zlps = 0; in ulpt_read_callback()
312 new_status = cur_status & ~sc->sc_last_status; in ulpt_status_callback()
313 sc->sc_last_status = cur_status; in ulpt_status_callback()
317 device_get_nameunit(sc->sc_dev)); in ulpt_status_callback()
320 device_get_nameunit(sc->sc_dev)); in ulpt_status_callback()
323 device_get_nameunit(sc->sc_dev)); in ulpt_status_callback()
330 req.wIndex[0] = sc->sc_iface_no; in ulpt_status_callback()
386 usbd_transfer_start(sc->sc_xfer[ULPT_BULK_DT_RD]); in ulpt_start_read()
394 usbd_transfer_stop(sc->sc_xfer[ULPT_BULK_DT_RD]); in ulpt_stop_read()
402 usbd_transfer_start(sc->sc_xfer[ULPT_BULK_DT_WR]); in ulpt_start_write()
410 usbd_transfer_stop(sc->sc_xfer[ULPT_BULK_DT_WR]); in ulpt_stop_write()
420 if (sc->sc_fflags == 0) { in ulpt_open()
433 if (sc->sc_fflags & fflags) { in unlpt_open()
438 mtx_lock(&sc->sc_mtx); in unlpt_open()
439 usbd_xfer_set_stall(sc->sc_xfer[ULPT_BULK_DT_RD]); in unlpt_open()
440 mtx_unlock(&sc->sc_mtx); in unlpt_open()
442 usbd_xfer_max_len(sc->sc_xfer[ULPT_BULK_DT_RD]), in unlpt_open()
447 sc->sc_fifo_open[USB_FIFO_RX] = fifo; in unlpt_open()
451 mtx_lock(&sc->sc_mtx); in unlpt_open()
452 usbd_xfer_set_stall(sc->sc_xfer[ULPT_BULK_DT_WR]); in unlpt_open()
453 mtx_unlock(&sc->sc_mtx); in unlpt_open()
455 usbd_xfer_max_len(sc->sc_xfer[ULPT_BULK_DT_WR]), in unlpt_open()
460 sc->sc_fifo_open[USB_FIFO_TX] = fifo; in unlpt_open()
462 sc->sc_fflags |= fflags & (FREAD | FWRITE); in unlpt_open()
471 sc->sc_fflags &= ~(fflags & (FREAD | FWRITE)); in ulpt_close()
486 /* Uni-directional USB printer */
491 /* Bi-directional USB printer */
517 if (uaa->usb_mode != USB_MODE_HOST) in ulpt_probe()
535 uint8_t iface_index = uaa->info.bIfaceIndex; in ulpt_attach()
540 sc->sc_dev = dev; in ulpt_attach()
541 sc->sc_udev = uaa->device; in ulpt_attach()
545 mtx_init(&sc->sc_mtx, "ulpt lock", NULL, MTX_DEF | MTX_RECURSE); in ulpt_attach()
547 usb_callout_init_mtx(&sc->sc_watchdog, &sc->sc_mtx, 0); in ulpt_attach()
551 id = usbd_get_interface_descriptor(uaa->iface); in ulpt_attach()
557 if ((id->bDescriptorType == UDESC_INTERFACE) && in ulpt_attach()
558 (id->bLength >= sizeof(*id))) { in ulpt_attach()
559 if (id->bInterfaceNumber != uaa->info.bIfaceNum) { in ulpt_attach()
563 if ((id->bInterfaceClass == UICLASS_PRINTER || in ulpt_attach()
564 id->bInterfaceClass == UICLASS_VENDOR) && in ulpt_attach()
565 (id->bInterfaceSubClass == UISUBCLASS_PRINTER || in ulpt_attach()
566 id->bInterfaceSubClass == UISUBCLASS_VENDOR) && in ulpt_attach()
567 (id->bInterfaceProtocol == UIPROTO_PRINTER_BI)) { in ulpt_attach()
573 usbd_get_config_descriptor(uaa->device), (void *)id); in ulpt_attach()
584 (uaa->device, iface_index, alt_index); in ulpt_attach()
592 sc->sc_iface_no = id->bInterfaceNumber; in ulpt_attach()
594 error = usbd_transfer_setup(uaa->device, &iface_index, in ulpt_attach()
595 sc->sc_xfer, ulpt_config, ULPT_N_TRANSFER, in ulpt_attach()
596 sc, &sc->sc_mtx); in ulpt_attach()
601 device_printf(sc->sc_dev, "using bi-directional mode\n"); in ulpt_attach()
616 USETW(req.wValue, cd->bConfigurationValue); in ulpt_attach()
617 USETW2(req.wIndex, id->bInterfaceNumber, id->bAlternateSetting); in ulpt_attach()
618 USETW(req.wLength, sizeof devinfo - 1); in ulpt_attach()
622 device_printf(sc->sc_dev, "cannot get device id\n"); in ulpt_attach()
624 device_printf(sc->sc_dev, "empty device id, no " in ulpt_attach()
627 /* devinfo now contains an IEEE-1284 device ID */ in ulpt_attach()
629 if (len > sizeof devinfo - 3) in ulpt_attach()
630 len = sizeof devinfo - 3; in ulpt_attach()
632 printf("%s: device id <", device_get_nameunit(sc->sc_dev)); in ulpt_attach()
639 error = usb_fifo_attach(uaa->device, sc, &sc->sc_mtx, in ulpt_attach()
640 &ulpt_fifo_methods, &sc->sc_fifo, in ulpt_attach()
641 unit, -1, uaa->info.bIfaceIndex, in ulpt_attach()
646 error = usb_fifo_attach(uaa->device, sc, &sc->sc_mtx, in ulpt_attach()
647 &unlpt_fifo_methods, &sc->sc_fifo_noreset, in ulpt_attach()
648 unit, -1, uaa->info.bIfaceIndex, in ulpt_attach()
655 mtx_lock(&sc->sc_mtx); in ulpt_attach()
657 mtx_unlock(&sc->sc_mtx); in ulpt_attach()
672 usb_fifo_detach(&sc->sc_fifo); in ulpt_detach()
673 usb_fifo_detach(&sc->sc_fifo_noreset); in ulpt_detach()
675 mtx_lock(&sc->sc_mtx); in ulpt_detach()
676 usb_callout_stop(&sc->sc_watchdog); in ulpt_detach()
677 mtx_unlock(&sc->sc_mtx); in ulpt_detach()
679 usbd_transfer_unsetup(sc->sc_xfer, ULPT_N_TRANSFER); in ulpt_detach()
680 usb_callout_drain(&sc->sc_watchdog); in ulpt_detach()
681 mtx_destroy(&sc->sc_mtx); in ulpt_detach()
717 for (p = str - 1; p; p = strchr(p, ';')) {
725 printf("%.*s", (int)(q - p + 1), p);
737 mtx_assert(&sc->sc_mtx, MA_OWNED); in ulpt_watchdog()
743 if (sc->sc_fflags == 0) in ulpt_watchdog()
744 usbd_transfer_start(sc->sc_xfer[ULPT_INTR_DT_RD]); in ulpt_watchdog()
746 usb_callout_reset(&sc->sc_watchdog, in ulpt_watchdog()