680
681
682
683static int digi_write_inb_command(struct usb_serial_port *port,
684 unsigned char *buf, int count, unsigned long timeout)
685{
686 int ret = 0;
687 int len;
688 struct digi_port *priv = usb_get_serial_port_data(port);
689 unsigned char *data = port->write_urb->transfer_buffer;
690 unsigned long flags = 0;
691
692 dbg("digi_write_inb_command: TOP: port=%d, count=%d",
693 priv->dp_port_num, count);
694
695 if (timeout)
696 timeout += jiffies;
697 else
698 timeout = ULONG_MAX;
699
700 spin_lock_irqsave(&priv->dp_port_lock, flags);
701 while (count > 0 && ret == 0) {
702 while ((port->write_urb->status == -EINPROGRESS
703 || priv->dp_write_urb_in_use)
704 && time_before(jiffies, timeout)) {
705 cond_wait_interruptible_timeout_irqrestore(
706 &port->write_wait, DIGI_RETRY_TIMEOUT,
707 &priv->dp_port_lock, flags);
708 if (signal_pending(current))
709 return -EINTR;
710 spin_lock_irqsave(&priv->dp_port_lock, flags);
711 }
712
713
714
715
716 len = min(count, port->bulk_out_size-2-priv->dp_out_buf_len);
717 if (len > 4)
718 len &= ~3;
719
720