Lines Matching full:port

120 int usb_serial_generic_open(struct tty_struct *tty, struct usb_serial_port *port)  in usb_serial_generic_open()  argument
125 dbg("%s - port %d", __func__, port->number); in usb_serial_generic_open()
128 spin_lock_irqsave(&port->lock, flags); in usb_serial_generic_open()
129 port->throttled = 0; in usb_serial_generic_open()
130 port->throttle_req = 0; in usb_serial_generic_open()
131 spin_unlock_irqrestore(&port->lock, flags); in usb_serial_generic_open()
134 if (port->bulk_in_size) in usb_serial_generic_open()
135 result = usb_serial_generic_submit_read_urbs(port, GFP_KERNEL); in usb_serial_generic_open()
141 static void generic_cleanup(struct usb_serial_port *port) in generic_cleanup() argument
143 struct usb_serial *serial = port->serial; in generic_cleanup()
147 dbg("%s - port %d", __func__, port->number); in generic_cleanup()
151 if (port->bulk_out_size) { in generic_cleanup()
152 usb_kill_urb(port->write_urb); in generic_cleanup()
153 for (i = 0; i < ARRAY_SIZE(port->write_urbs); ++i) in generic_cleanup()
154 usb_kill_urb(port->write_urbs[i]); in generic_cleanup()
156 spin_lock_irqsave(&port->lock, flags); in generic_cleanup()
157 kfifo_reset_out(&port->write_fifo); in generic_cleanup()
158 spin_unlock_irqrestore(&port->lock, flags); in generic_cleanup()
160 if (port->bulk_in_size) { in generic_cleanup()
161 for (i = 0; i < ARRAY_SIZE(port->read_urbs); ++i) in generic_cleanup()
162 usb_kill_urb(port->read_urbs[i]); in generic_cleanup()
167 void usb_serial_generic_close(struct usb_serial_port *port) in usb_serial_generic_close() argument
169 dbg("%s - port %d", __func__, port->number); in usb_serial_generic_close()
170 generic_cleanup(port); in usb_serial_generic_close()
174 int usb_serial_generic_prepare_write_buffer(struct usb_serial_port *port, in usb_serial_generic_prepare_write_buffer() argument
177 return kfifo_out_locked(&port->write_fifo, dest, size, &port->lock); in usb_serial_generic_prepare_write_buffer()
182 * @port: Pointer to the &struct usb_serial_port data
186 static int usb_serial_generic_write_start(struct usb_serial_port *port) in usb_serial_generic_write_start() argument
193 if (test_and_set_bit_lock(USB_SERIAL_WRITE_BUSY, &port->flags)) in usb_serial_generic_write_start()
196 spin_lock_irqsave(&port->lock, flags); in usb_serial_generic_write_start()
197 if (!port->write_urbs_free || !kfifo_len(&port->write_fifo)) { in usb_serial_generic_write_start()
198 clear_bit_unlock(USB_SERIAL_WRITE_BUSY, &port->flags); in usb_serial_generic_write_start()
199 spin_unlock_irqrestore(&port->lock, flags); in usb_serial_generic_write_start()
202 i = (int)find_first_bit(&port->write_urbs_free, in usb_serial_generic_write_start()
203 ARRAY_SIZE(port->write_urbs)); in usb_serial_generic_write_start()
204 spin_unlock_irqrestore(&port->lock, flags); in usb_serial_generic_write_start()
206 urb = port->write_urbs[i]; in usb_serial_generic_write_start()
207 count = port->serial->type->prepare_write_buffer(port, in usb_serial_generic_write_start()
209 port->bulk_out_size); in usb_serial_generic_write_start()
211 usb_serial_debug_data(debug, &port->dev, __func__, count, in usb_serial_generic_write_start()
213 spin_lock_irqsave(&port->lock, flags); in usb_serial_generic_write_start()
214 port->tx_bytes += count; in usb_serial_generic_write_start()
215 spin_unlock_irqrestore(&port->lock, flags); in usb_serial_generic_write_start()
217 clear_bit(i, &port->write_urbs_free); in usb_serial_generic_write_start()
220 dev_err(&port->dev, "%s - error submitting urb: %d\n", in usb_serial_generic_write_start()
222 set_bit(i, &port->write_urbs_free); in usb_serial_generic_write_start()
223 spin_lock_irqsave(&port->lock, flags); in usb_serial_generic_write_start()
224 port->tx_bytes -= count; in usb_serial_generic_write_start()
225 spin_unlock_irqrestore(&port->lock, flags); in usb_serial_generic_write_start()
227 clear_bit_unlock(USB_SERIAL_WRITE_BUSY, &port->flags); in usb_serial_generic_write_start()
236 clear_bit_unlock(USB_SERIAL_WRITE_BUSY, &port->flags); in usb_serial_generic_write_start()
244 * @port: Pointer to the &usb_serial_port structure for the device
253 struct usb_serial_port *port, const unsigned char *buf, int count) in usb_serial_generic_write() argument
257 dbg("%s - port %d", __func__, port->number); in usb_serial_generic_write()
260 if (!port->bulk_out_size) in usb_serial_generic_write()
266 count = kfifo_in_locked(&port->write_fifo, buf, count, &port->lock); in usb_serial_generic_write()
267 result = usb_serial_generic_write_start(port); in usb_serial_generic_write()
277 struct usb_serial_port *port = tty->driver_data; in usb_serial_generic_write_room() local
281 dbg("%s - port %d", __func__, port->number); in usb_serial_generic_write_room()
283 if (!port->bulk_out_size) in usb_serial_generic_write_room()
286 spin_lock_irqsave(&port->lock, flags); in usb_serial_generic_write_room()
287 room = kfifo_avail(&port->write_fifo); in usb_serial_generic_write_room()
288 spin_unlock_irqrestore(&port->lock, flags); in usb_serial_generic_write_room()
296 struct usb_serial_port *port = tty->driver_data; in usb_serial_generic_chars_in_buffer() local
300 dbg("%s - port %d", __func__, port->number); in usb_serial_generic_chars_in_buffer()
302 if (!port->bulk_out_size) in usb_serial_generic_chars_in_buffer()
305 spin_lock_irqsave(&port->lock, flags); in usb_serial_generic_chars_in_buffer()
306 chars = kfifo_len(&port->write_fifo) + port->tx_bytes; in usb_serial_generic_chars_in_buffer()
307 spin_unlock_irqrestore(&port->lock, flags); in usb_serial_generic_chars_in_buffer()
313 static int usb_serial_generic_submit_read_urb(struct usb_serial_port *port, in usb_serial_generic_submit_read_urb() argument
318 if (!test_and_clear_bit(index, &port->read_urbs_free)) in usb_serial_generic_submit_read_urb()
321 dbg("%s - port %d, urb %d\n", __func__, port->number, index); in usb_serial_generic_submit_read_urb()
323 res = usb_submit_urb(port->read_urbs[index], mem_flags); in usb_serial_generic_submit_read_urb()
326 dev_err(&port->dev, in usb_serial_generic_submit_read_urb()
330 set_bit(index, &port->read_urbs_free); in usb_serial_generic_submit_read_urb()
337 int usb_serial_generic_submit_read_urbs(struct usb_serial_port *port, in usb_serial_generic_submit_read_urbs() argument
343 dbg("%s - port %d", __func__, port->number); in usb_serial_generic_submit_read_urbs()
345 for (i = 0; i < ARRAY_SIZE(port->read_urbs); ++i) { in usb_serial_generic_submit_read_urbs()
346 res = usb_serial_generic_submit_read_urb(port, i, mem_flags); in usb_serial_generic_submit_read_urbs()
354 usb_kill_urb(port->read_urbs[i]); in usb_serial_generic_submit_read_urbs()
362 struct usb_serial_port *port = urb->context; in usb_serial_generic_process_read_urb() local
370 tty = tty_port_tty_get(&port->port); in usb_serial_generic_process_read_urb()
377 if (!port->port.console || !port->sysrq) in usb_serial_generic_process_read_urb()
381 if (!usb_serial_handle_sysrq_char(port, *ch)) in usb_serial_generic_process_read_urb()
392 struct usb_serial_port *port = urb->context; in usb_serial_generic_read_bulk_callback() local
397 for (i = 0; i < ARRAY_SIZE(port->read_urbs); ++i) { in usb_serial_generic_read_bulk_callback()
398 if (urb == port->read_urbs[i]) in usb_serial_generic_read_bulk_callback()
401 set_bit(i, &port->read_urbs_free); in usb_serial_generic_read_bulk_callback()
403 dbg("%s - port %d, urb %d, len %d\n", __func__, port->number, i, in usb_serial_generic_read_bulk_callback()
410 usb_serial_debug_data(debug, &port->dev, __func__, in usb_serial_generic_read_bulk_callback()
412 port->serial->type->process_read_urb(urb); in usb_serial_generic_read_bulk_callback()
415 spin_lock_irqsave(&port->lock, flags); in usb_serial_generic_read_bulk_callback()
416 port->throttled = port->throttle_req; in usb_serial_generic_read_bulk_callback()
417 if (!port->throttled) { in usb_serial_generic_read_bulk_callback()
418 spin_unlock_irqrestore(&port->lock, flags); in usb_serial_generic_read_bulk_callback()
419 usb_serial_generic_submit_read_urb(port, i, GFP_ATOMIC); in usb_serial_generic_read_bulk_callback()
421 spin_unlock_irqrestore(&port->lock, flags); in usb_serial_generic_read_bulk_callback()
428 struct usb_serial_port *port = urb->context; in usb_serial_generic_write_bulk_callback() local
432 dbg("%s - port %d", __func__, port->number); in usb_serial_generic_write_bulk_callback()
434 for (i = 0; i < ARRAY_SIZE(port->write_urbs); ++i) in usb_serial_generic_write_bulk_callback()
435 if (port->write_urbs[i] == urb) in usb_serial_generic_write_bulk_callback()
438 spin_lock_irqsave(&port->lock, flags); in usb_serial_generic_write_bulk_callback()
439 port->tx_bytes -= urb->transfer_buffer_length; in usb_serial_generic_write_bulk_callback()
440 set_bit(i, &port->write_urbs_free); in usb_serial_generic_write_bulk_callback()
441 spin_unlock_irqrestore(&port->lock, flags); in usb_serial_generic_write_bulk_callback()
446 spin_lock_irqsave(&port->lock, flags); in usb_serial_generic_write_bulk_callback()
447 kfifo_reset_out(&port->write_fifo); in usb_serial_generic_write_bulk_callback()
448 spin_unlock_irqrestore(&port->lock, flags); in usb_serial_generic_write_bulk_callback()
450 usb_serial_generic_write_start(port); in usb_serial_generic_write_bulk_callback()
453 usb_serial_port_softint(port); in usb_serial_generic_write_bulk_callback()
459 struct usb_serial_port *port = tty->driver_data; in usb_serial_generic_throttle() local
462 dbg("%s - port %d", __func__, port->number); in usb_serial_generic_throttle()
466 spin_lock_irqsave(&port->lock, flags); in usb_serial_generic_throttle()
467 port->throttle_req = 1; in usb_serial_generic_throttle()
468 spin_unlock_irqrestore(&port->lock, flags); in usb_serial_generic_throttle()
474 struct usb_serial_port *port = tty->driver_data; in usb_serial_generic_unthrottle() local
477 dbg("%s - port %d", __func__, port->number); in usb_serial_generic_unthrottle()
480 spin_lock_irq(&port->lock); in usb_serial_generic_unthrottle()
481 was_throttled = port->throttled; in usb_serial_generic_unthrottle()
482 port->throttled = port->throttle_req = 0; in usb_serial_generic_unthrottle()
483 spin_unlock_irq(&port->lock); in usb_serial_generic_unthrottle()
486 usb_serial_generic_submit_read_urbs(port, GFP_KERNEL); in usb_serial_generic_unthrottle()
491 int usb_serial_handle_sysrq_char(struct usb_serial_port *port, unsigned int ch) in usb_serial_handle_sysrq_char() argument
493 if (port->sysrq && port->port.console) { in usb_serial_handle_sysrq_char()
494 if (ch && time_before(jiffies, port->sysrq)) { in usb_serial_handle_sysrq_char()
496 port->sysrq = 0; in usb_serial_handle_sysrq_char()
499 port->sysrq = 0; in usb_serial_handle_sysrq_char()
504 int usb_serial_handle_sysrq_char(struct usb_serial_port *port, unsigned int ch) in usb_serial_handle_sysrq_char() argument
511 int usb_serial_handle_break(struct usb_serial_port *port) in usb_serial_handle_break() argument
513 if (!port->sysrq) { in usb_serial_handle_break()
514 port->sysrq = jiffies + HZ*5; in usb_serial_handle_break()
517 port->sysrq = 0; in usb_serial_handle_break()
524 * @port: usb_serial_port structure for the open port
525 * @tty: tty_struct structure for the port
531 struct tty_port *port = &usb_port->port; in usb_serial_handle_dcd_change() local
533 dbg("%s - port %d, status %d", __func__, usb_port->number, status); in usb_serial_handle_dcd_change()
536 wake_up_interruptible(&port->open_wait); in usb_serial_handle_dcd_change()
544 struct usb_serial_port *port; in usb_serial_generic_resume() local
548 port = serial->port[i]; in usb_serial_generic_resume()
549 if (!test_bit(ASYNCB_INITIALIZED, &port->port.flags)) in usb_serial_generic_resume()
552 if (port->bulk_in_size) { in usb_serial_generic_resume()
553 r = usb_serial_generic_submit_read_urbs(port, in usb_serial_generic_resume()
559 if (port->bulk_out_size) { in usb_serial_generic_resume()
560 r = usb_serial_generic_write_start(port); in usb_serial_generic_resume()
578 generic_cleanup(serial->port[i]); in usb_serial_generic_disconnect()