• Home
  • Raw
  • Download

Lines Matching +full:buffered +full:- +full:negative

1 // SPDX-License-Identifier: GPL-2.0
5 * Copyright (C) 2010 - 2013 Johan Hovold (jhovold@gmail.com)
6 * Copyright (C) 1999 - 2002 Greg Kroah-Hartman (greg@kroah.com)
40 struct device *dev = &serial->interface->dev; in usb_serial_generic_probe()
42 dev_info(dev, "The \"generic\" usb-serial driver is only for testing and one-off prototypes.\n"); in usb_serial_generic_probe()
43 dev_info(dev, "Tell linux-usb@vger.kernel.org to add your device to a proper driver.\n"); in usb_serial_generic_probe()
51 struct device *dev = &serial->interface->dev; in usb_serial_generic_calc_num_ports()
54 num_ports = max(epds->num_bulk_in, epds->num_bulk_out); in usb_serial_generic_calc_num_ports()
58 return -ENODEV; in usb_serial_generic_calc_num_ports()
111 spin_lock_irqsave(&port->lock, flags); in usb_serial_generic_open()
112 port->throttled = 0; in usb_serial_generic_open()
113 port->throttle_req = 0; in usb_serial_generic_open()
114 spin_unlock_irqrestore(&port->lock, flags); in usb_serial_generic_open()
116 if (port->bulk_in_size) in usb_serial_generic_open()
128 if (port->bulk_out_size) { in usb_serial_generic_close()
129 for (i = 0; i < ARRAY_SIZE(port->write_urbs); ++i) in usb_serial_generic_close()
130 usb_kill_urb(port->write_urbs[i]); in usb_serial_generic_close()
132 spin_lock_irqsave(&port->lock, flags); in usb_serial_generic_close()
133 kfifo_reset_out(&port->write_fifo); in usb_serial_generic_close()
134 spin_unlock_irqrestore(&port->lock, flags); in usb_serial_generic_close()
136 if (port->bulk_in_size) { in usb_serial_generic_close()
137 for (i = 0; i < ARRAY_SIZE(port->read_urbs); ++i) in usb_serial_generic_close()
138 usb_kill_urb(port->read_urbs[i]); in usb_serial_generic_close()
146 return kfifo_out_locked(&port->write_fifo, dest, size, &port->lock); in usb_serial_generic_prepare_write_buffer()
150 * usb_serial_generic_write_start - start writing buffered data
151 * @port: usb-serial port
156 * Return: Zero on success or if busy, otherwise a negative errno value.
166 if (test_and_set_bit_lock(USB_SERIAL_WRITE_BUSY, &port->flags)) in usb_serial_generic_write_start()
169 spin_lock_irqsave(&port->lock, flags); in usb_serial_generic_write_start()
170 if (!port->write_urbs_free || !kfifo_len(&port->write_fifo)) { in usb_serial_generic_write_start()
171 clear_bit_unlock(USB_SERIAL_WRITE_BUSY, &port->flags); in usb_serial_generic_write_start()
172 spin_unlock_irqrestore(&port->lock, flags); in usb_serial_generic_write_start()
175 i = (int)find_first_bit(&port->write_urbs_free, in usb_serial_generic_write_start()
176 ARRAY_SIZE(port->write_urbs)); in usb_serial_generic_write_start()
177 spin_unlock_irqrestore(&port->lock, flags); in usb_serial_generic_write_start()
179 urb = port->write_urbs[i]; in usb_serial_generic_write_start()
180 count = port->serial->type->prepare_write_buffer(port, in usb_serial_generic_write_start()
181 urb->transfer_buffer, in usb_serial_generic_write_start()
182 port->bulk_out_size); in usb_serial_generic_write_start()
183 urb->transfer_buffer_length = count; in usb_serial_generic_write_start()
184 usb_serial_debug_data(&port->dev, __func__, count, urb->transfer_buffer); in usb_serial_generic_write_start()
185 spin_lock_irqsave(&port->lock, flags); in usb_serial_generic_write_start()
186 port->tx_bytes += count; in usb_serial_generic_write_start()
187 spin_unlock_irqrestore(&port->lock, flags); in usb_serial_generic_write_start()
189 clear_bit(i, &port->write_urbs_free); in usb_serial_generic_write_start()
192 dev_err_console(port, "%s - error submitting urb: %d\n", in usb_serial_generic_write_start()
194 set_bit(i, &port->write_urbs_free); in usb_serial_generic_write_start()
195 spin_lock_irqsave(&port->lock, flags); in usb_serial_generic_write_start()
196 port->tx_bytes -= count; in usb_serial_generic_write_start()
197 spin_unlock_irqrestore(&port->lock, flags); in usb_serial_generic_write_start()
199 clear_bit_unlock(USB_SERIAL_WRITE_BUSY, &port->flags); in usb_serial_generic_write_start()
208 * usb_serial_generic_write - generic write function
210 * @port: usb-serial port
214 * Return: The number of characters buffered, which may be anything from
215 * zero to @count, or a negative errno value.
222 if (!port->bulk_out_size) in usb_serial_generic_write()
223 return -ENODEV; in usb_serial_generic_write()
228 count = kfifo_in_locked(&port->write_fifo, buf, count, &port->lock); in usb_serial_generic_write()
239 struct usb_serial_port *port = tty->driver_data; in usb_serial_generic_write_room()
243 if (!port->bulk_out_size) in usb_serial_generic_write_room()
246 spin_lock_irqsave(&port->lock, flags); in usb_serial_generic_write_room()
247 room = kfifo_avail(&port->write_fifo); in usb_serial_generic_write_room()
248 spin_unlock_irqrestore(&port->lock, flags); in usb_serial_generic_write_room()
250 dev_dbg(&port->dev, "%s - returns %d\n", __func__, room); in usb_serial_generic_write_room()
256 struct usb_serial_port *port = tty->driver_data; in usb_serial_generic_chars_in_buffer()
260 if (!port->bulk_out_size) in usb_serial_generic_chars_in_buffer()
263 spin_lock_irqsave(&port->lock, flags); in usb_serial_generic_chars_in_buffer()
264 chars = kfifo_len(&port->write_fifo) + port->tx_bytes; in usb_serial_generic_chars_in_buffer()
265 spin_unlock_irqrestore(&port->lock, flags); in usb_serial_generic_chars_in_buffer()
267 dev_dbg(&port->dev, "%s - returns %d\n", __func__, chars); in usb_serial_generic_chars_in_buffer()
274 struct usb_serial_port *port = tty->driver_data; in usb_serial_generic_wait_until_sent()
283 * Use a poll-period of roughly the time it takes to send one in usb_serial_generic_wait_until_sent()
290 dev_dbg(&port->dev, "%s - timeout = %u ms, period = %u ms\n", in usb_serial_generic_wait_until_sent()
294 while (!port->serial->type->tx_empty(port)) { in usb_serial_generic_wait_until_sent()
309 if (!test_and_clear_bit(index, &port->read_urbs_free)) in usb_serial_generic_submit_read_urb()
312 dev_dbg(&port->dev, "%s - urb %d\n", __func__, index); in usb_serial_generic_submit_read_urb()
314 res = usb_submit_urb(port->read_urbs[index], mem_flags); in usb_serial_generic_submit_read_urb()
316 if (res != -EPERM && res != -ENODEV) { in usb_serial_generic_submit_read_urb()
317 dev_err(&port->dev, in usb_serial_generic_submit_read_urb()
318 "%s - usb_submit_urb failed: %d\n", in usb_serial_generic_submit_read_urb()
321 set_bit(index, &port->read_urbs_free); in usb_serial_generic_submit_read_urb()
334 for (i = 0; i < ARRAY_SIZE(port->read_urbs); ++i) { in usb_serial_generic_submit_read_urbs()
342 for (; i >= 0; --i) in usb_serial_generic_submit_read_urbs()
343 usb_kill_urb(port->read_urbs[i]); in usb_serial_generic_submit_read_urbs()
351 struct usb_serial_port *port = urb->context; in usb_serial_generic_process_read_urb()
352 char *ch = (char *)urb->transfer_buffer; in usb_serial_generic_process_read_urb()
355 if (!urb->actual_length) in usb_serial_generic_process_read_urb()
362 if (!port->port.console || !port->sysrq) { in usb_serial_generic_process_read_urb()
363 tty_insert_flip_string(&port->port, ch, urb->actual_length); in usb_serial_generic_process_read_urb()
365 for (i = 0; i < urb->actual_length; i++, ch++) { in usb_serial_generic_process_read_urb()
367 tty_insert_flip_char(&port->port, *ch, TTY_NORMAL); in usb_serial_generic_process_read_urb()
370 tty_flip_buffer_push(&port->port); in usb_serial_generic_process_read_urb()
376 struct usb_serial_port *port = urb->context; in usb_serial_generic_read_bulk_callback()
377 unsigned char *data = urb->transfer_buffer; in usb_serial_generic_read_bulk_callback()
380 int status = urb->status; in usb_serial_generic_read_bulk_callback()
383 for (i = 0; i < ARRAY_SIZE(port->read_urbs); ++i) { in usb_serial_generic_read_bulk_callback()
384 if (urb == port->read_urbs[i]) in usb_serial_generic_read_bulk_callback()
388 dev_dbg(&port->dev, "%s - urb %d, len %d\n", __func__, i, in usb_serial_generic_read_bulk_callback()
389 urb->actual_length); in usb_serial_generic_read_bulk_callback()
392 usb_serial_debug_data(&port->dev, __func__, urb->actual_length, in usb_serial_generic_read_bulk_callback()
394 port->serial->type->process_read_urb(urb); in usb_serial_generic_read_bulk_callback()
396 case -ENOENT: in usb_serial_generic_read_bulk_callback()
397 case -ECONNRESET: in usb_serial_generic_read_bulk_callback()
398 case -ESHUTDOWN: in usb_serial_generic_read_bulk_callback()
399 dev_dbg(&port->dev, "%s - urb stopped: %d\n", in usb_serial_generic_read_bulk_callback()
403 case -EPIPE: in usb_serial_generic_read_bulk_callback()
404 dev_err(&port->dev, "%s - urb stopped: %d\n", in usb_serial_generic_read_bulk_callback()
409 dev_dbg(&port->dev, "%s - nonzero urb status: %d\n", in usb_serial_generic_read_bulk_callback()
421 set_bit(i, &port->read_urbs_free); in usb_serial_generic_read_bulk_callback()
433 spin_lock_irqsave(&port->lock, flags); in usb_serial_generic_read_bulk_callback()
434 port->throttled = port->throttle_req; in usb_serial_generic_read_bulk_callback()
435 if (!port->throttled) { in usb_serial_generic_read_bulk_callback()
436 spin_unlock_irqrestore(&port->lock, flags); in usb_serial_generic_read_bulk_callback()
439 spin_unlock_irqrestore(&port->lock, flags); in usb_serial_generic_read_bulk_callback()
447 struct usb_serial_port *port = urb->context; in usb_serial_generic_write_bulk_callback()
448 int status = urb->status; in usb_serial_generic_write_bulk_callback()
451 for (i = 0; i < ARRAY_SIZE(port->write_urbs); ++i) { in usb_serial_generic_write_bulk_callback()
452 if (port->write_urbs[i] == urb) in usb_serial_generic_write_bulk_callback()
455 spin_lock_irqsave(&port->lock, flags); in usb_serial_generic_write_bulk_callback()
456 port->tx_bytes -= urb->transfer_buffer_length; in usb_serial_generic_write_bulk_callback()
457 set_bit(i, &port->write_urbs_free); in usb_serial_generic_write_bulk_callback()
458 spin_unlock_irqrestore(&port->lock, flags); in usb_serial_generic_write_bulk_callback()
463 case -ENOENT: in usb_serial_generic_write_bulk_callback()
464 case -ECONNRESET: in usb_serial_generic_write_bulk_callback()
465 case -ESHUTDOWN: in usb_serial_generic_write_bulk_callback()
466 dev_dbg(&port->dev, "%s - urb stopped: %d\n", in usb_serial_generic_write_bulk_callback()
469 case -EPIPE: in usb_serial_generic_write_bulk_callback()
470 dev_err_console(port, "%s - urb stopped: %d\n", in usb_serial_generic_write_bulk_callback()
474 dev_err_console(port, "%s - nonzero urb status: %d\n", in usb_serial_generic_write_bulk_callback()
487 struct usb_serial_port *port = tty->driver_data; in usb_serial_generic_throttle()
490 spin_lock_irqsave(&port->lock, flags); in usb_serial_generic_throttle()
491 port->throttle_req = 1; in usb_serial_generic_throttle()
492 spin_unlock_irqrestore(&port->lock, flags); in usb_serial_generic_throttle()
498 struct usb_serial_port *port = tty->driver_data; in usb_serial_generic_unthrottle()
501 spin_lock_irq(&port->lock); in usb_serial_generic_unthrottle()
502 was_throttled = port->throttled; in usb_serial_generic_unthrottle()
503 port->throttled = port->throttle_req = 0; in usb_serial_generic_unthrottle()
504 spin_unlock_irq(&port->lock); in usb_serial_generic_unthrottle()
520 struct usb_serial_port *port = tty->driver_data; in usb_serial_generic_msr_changed()
526 * Use tty-port initialised flag to detect all hangups including the in usb_serial_generic_msr_changed()
527 * one generated at USB-device disconnect. in usb_serial_generic_msr_changed()
529 if (!tty_port_initialized(&port->port)) in usb_serial_generic_msr_changed()
532 spin_lock_irqsave(&port->lock, flags); in usb_serial_generic_msr_changed()
533 cnow = port->icount; /* atomic copy*/ in usb_serial_generic_msr_changed()
534 spin_unlock_irqrestore(&port->lock, flags); in usb_serial_generic_msr_changed()
536 ret = ((arg & TIOCM_RNG) && (cnow.rng != cprev->rng)) || in usb_serial_generic_msr_changed()
537 ((arg & TIOCM_DSR) && (cnow.dsr != cprev->dsr)) || in usb_serial_generic_msr_changed()
538 ((arg & TIOCM_CD) && (cnow.dcd != cprev->dcd)) || in usb_serial_generic_msr_changed()
539 ((arg & TIOCM_CTS) && (cnow.cts != cprev->cts)); in usb_serial_generic_msr_changed()
548 struct usb_serial_port *port = tty->driver_data; in usb_serial_generic_tiocmiwait()
553 spin_lock_irqsave(&port->lock, flags); in usb_serial_generic_tiocmiwait()
554 cnow = port->icount; /* atomic copy */ in usb_serial_generic_tiocmiwait()
555 spin_unlock_irqrestore(&port->lock, flags); in usb_serial_generic_tiocmiwait()
557 ret = wait_event_interruptible(port->port.delta_msr_wait, in usb_serial_generic_tiocmiwait()
559 if (!ret && !tty_port_initialized(&port->port)) in usb_serial_generic_tiocmiwait()
560 ret = -EIO; in usb_serial_generic_tiocmiwait()
569 struct usb_serial_port *port = tty->driver_data; in usb_serial_generic_get_icount()
573 spin_lock_irqsave(&port->lock, flags); in usb_serial_generic_get_icount()
574 cnow = port->icount; /* atomic copy */ in usb_serial_generic_get_icount()
575 spin_unlock_irqrestore(&port->lock, flags); in usb_serial_generic_get_icount()
577 icount->cts = cnow.cts; in usb_serial_generic_get_icount()
578 icount->dsr = cnow.dsr; in usb_serial_generic_get_icount()
579 icount->rng = cnow.rng; in usb_serial_generic_get_icount()
580 icount->dcd = cnow.dcd; in usb_serial_generic_get_icount()
581 icount->tx = cnow.tx; in usb_serial_generic_get_icount()
582 icount->rx = cnow.rx; in usb_serial_generic_get_icount()
583 icount->frame = cnow.frame; in usb_serial_generic_get_icount()
584 icount->parity = cnow.parity; in usb_serial_generic_get_icount()
585 icount->overrun = cnow.overrun; in usb_serial_generic_get_icount()
586 icount->brk = cnow.brk; in usb_serial_generic_get_icount()
587 icount->buf_overrun = cnow.buf_overrun; in usb_serial_generic_get_icount()
596 if (port->sysrq && port->port.console) { in usb_serial_handle_sysrq_char()
597 if (ch && time_before(jiffies, port->sysrq)) { in usb_serial_handle_sysrq_char()
599 port->sysrq = 0; in usb_serial_handle_sysrq_char()
602 port->sysrq = 0; in usb_serial_handle_sysrq_char()
616 if (!port->sysrq) { in usb_serial_handle_break()
617 port->sysrq = jiffies + HZ*5; in usb_serial_handle_break()
620 port->sysrq = 0; in usb_serial_handle_break()
626 * usb_serial_handle_dcd_change - handle a change of carrier detect state
627 * @port: usb-serial port
634 struct tty_port *port = &usb_port->port; in usb_serial_handle_dcd_change()
636 dev_dbg(&usb_port->dev, "%s - status %d\n", __func__, status); in usb_serial_handle_dcd_change()
642 if (ld->ops->dcd_change) in usb_serial_handle_dcd_change()
643 ld->ops->dcd_change(tty, status); in usb_serial_handle_dcd_change()
649 wake_up_interruptible(&port->open_wait); in usb_serial_handle_dcd_change()
660 for (i = 0; i < serial->num_ports; i++) { in usb_serial_generic_resume()
661 port = serial->port[i]; in usb_serial_generic_resume()
662 if (!tty_port_initialized(&port->port)) in usb_serial_generic_resume()
665 if (port->bulk_in_size) { in usb_serial_generic_resume()
672 if (port->bulk_out_size) { in usb_serial_generic_resume()
679 return c ? -EIO : 0; in usb_serial_generic_resume()