• Home
  • Raw
  • Download

Lines Matching refs:port

102 	struct tty_port		port;  member
135 struct gs_port *port; member
206 gs_send_packet(struct gs_port *port, char *packet, unsigned size) in gs_send_packet() argument
210 len = kfifo_len(&port->port_write_buf); in gs_send_packet()
214 size = kfifo_out(&port->port_write_buf, packet, size); in gs_send_packet()
229 static int gs_start_tx(struct gs_port *port) in gs_start_tx() argument
235 struct list_head *pool = &port->write_pool; in gs_start_tx()
240 if (!port->port_usb) in gs_start_tx()
243 in = port->port_usb->in; in gs_start_tx()
245 while (!port->write_busy && !list_empty(pool)) { in gs_start_tx()
249 if (port->write_started >= QUEUE_SIZE) in gs_start_tx()
253 len = gs_send_packet(port, req->buf, in->maxpacket); in gs_start_tx()
255 wake_up_interruptible(&port->drain_wait); in gs_start_tx()
262 req->zero = kfifo_is_empty(&port->port_write_buf); in gs_start_tx()
264 pr_vdebug("ttyGS%d: tx len=%d, %3ph ...\n", port->port_num, len, req->buf); in gs_start_tx()
273 port->write_busy = true; in gs_start_tx()
274 spin_unlock(&port->port_lock); in gs_start_tx()
276 spin_lock(&port->port_lock); in gs_start_tx()
277 port->write_busy = false; in gs_start_tx()
286 port->write_started++; in gs_start_tx()
289 if (!port->port_usb) in gs_start_tx()
293 if (do_tty_wake && port->port.tty) in gs_start_tx()
294 tty_wakeup(port->port.tty); in gs_start_tx()
301 static unsigned gs_start_rx(struct gs_port *port) in gs_start_rx() argument
307 struct list_head *pool = &port->read_pool; in gs_start_rx()
308 struct usb_ep *out = port->port_usb->out; in gs_start_rx()
316 tty = port->port.tty; in gs_start_rx()
320 if (port->read_started >= QUEUE_SIZE) in gs_start_rx()
330 spin_unlock(&port->port_lock); in gs_start_rx()
332 spin_lock(&port->port_lock); in gs_start_rx()
340 port->read_started++; in gs_start_rx()
343 if (!port->port_usb) in gs_start_rx()
346 return port->read_started; in gs_start_rx()
362 struct gs_port *port = container_of(w, struct gs_port, push); in gs_rx_push() local
364 struct list_head *queue = &port->read_queue; in gs_rx_push()
369 spin_lock_irq(&port->port_lock); in gs_rx_push()
370 tty = port->port.tty; in gs_rx_push()
383 pr_vdebug("ttyGS%d: shutdown\n", port->port_num); in gs_rx_push()
389 port->port_num, req->status); in gs_rx_push()
404 n = port->n_read; in gs_rx_push()
410 count = tty_insert_flip_string(&port->port, packet, in gs_rx_push()
416 port->n_read += count; in gs_rx_push()
418 port->port_num, count, req->actual); in gs_rx_push()
421 port->n_read = 0; in gs_rx_push()
424 list_move(&req->list, &port->read_pool); in gs_rx_push()
425 port->read_started--; in gs_rx_push()
432 tty_flip_buffer_push(&port->port); in gs_rx_push()
443 schedule_delayed_work(&port->push, 1); in gs_rx_push()
446 if (!disconnect && port->port_usb) in gs_rx_push()
447 gs_start_rx(port); in gs_rx_push()
449 spin_unlock_irq(&port->port_lock); in gs_rx_push()
454 struct gs_port *port = ep->driver_data; in gs_read_complete() local
457 spin_lock(&port->port_lock); in gs_read_complete()
458 list_add_tail(&req->list, &port->read_queue); in gs_read_complete()
459 schedule_delayed_work(&port->push, 0); in gs_read_complete()
460 spin_unlock(&port->port_lock); in gs_read_complete()
465 struct gs_port *port = ep->driver_data; in gs_write_complete() local
467 spin_lock(&port->port_lock); in gs_write_complete()
468 list_add(&req->list, &port->write_pool); in gs_write_complete()
469 port->write_started--; in gs_write_complete()
479 gs_start_tx(port); in gs_write_complete()
488 spin_unlock(&port->port_lock); in gs_write_complete()
538 static int gs_start_io(struct gs_port *port) in gs_start_io() argument
540 struct list_head *head = &port->read_pool; in gs_start_io()
541 struct usb_ep *ep = port->port_usb->out; in gs_start_io()
552 &port->read_allocated); in gs_start_io()
556 status = gs_alloc_requests(port->port_usb->in, &port->write_pool, in gs_start_io()
557 gs_write_complete, &port->write_allocated); in gs_start_io()
559 gs_free_requests(ep, head, &port->read_allocated); in gs_start_io()
564 port->n_read = 0; in gs_start_io()
565 started = gs_start_rx(port); in gs_start_io()
568 gs_start_tx(port); in gs_start_io()
571 tty_wakeup(port->port.tty); in gs_start_io()
573 gs_free_requests(ep, head, &port->read_allocated); in gs_start_io()
574 gs_free_requests(port->port_usb->in, &port->write_pool, in gs_start_io()
575 &port->write_allocated); in gs_start_io()
594 struct gs_port *port; in gs_open() local
598 port = ports[port_num].port; in gs_open()
599 if (!port) { in gs_open()
604 spin_lock_irq(&port->port_lock); in gs_open()
607 if (!kfifo_initialized(&port->port_write_buf)) { in gs_open()
609 spin_unlock_irq(&port->port_lock); in gs_open()
616 status = kfifo_alloc(&port->port_write_buf, in gs_open()
624 spin_lock_irq(&port->port_lock); in gs_open()
628 if (port->port.count++) in gs_open()
631 tty->driver_data = port; in gs_open()
632 port->port.tty = tty; in gs_open()
635 if (port->port_usb) { in gs_open()
637 if (!port->suspended) { in gs_open()
638 struct gserial *gser = port->port_usb; in gs_open()
640 pr_debug("gs_open: start ttyGS%d\n", port->port_num); in gs_open()
641 gs_start_io(port); in gs_open()
646 pr_debug("delay start of ttyGS%d\n", port->port_num); in gs_open()
647 port->start_delayed = true; in gs_open()
651 pr_debug("gs_open: ttyGS%d (%p,%p)\n", port->port_num, tty, file); in gs_open()
654 spin_unlock_irq(&port->port_lock); in gs_open()
667 p->port.count > 1; in gs_close_flush_done()
675 struct gs_port *port = tty->driver_data; in gs_close() local
678 spin_lock_irq(&port->port_lock); in gs_close()
680 if (port->port.count != 1) { in gs_close()
682 if (port->port.count == 0) in gs_close()
685 --port->port.count; in gs_close()
689 pr_debug("gs_close: ttyGS%d (%p,%p) ...\n", port->port_num, tty, file); in gs_close()
691 gser = port->port_usb; in gs_close()
692 if (gser && !port->suspended && gser->disconnect) in gs_close()
698 if (kfifo_len(&port->port_write_buf) > 0 && gser) { in gs_close()
699 spin_unlock_irq(&port->port_lock); in gs_close()
700 wait_event_interruptible_timeout(port->drain_wait, in gs_close()
701 gs_close_flush_done(port), in gs_close()
703 spin_lock_irq(&port->port_lock); in gs_close()
705 if (port->port.count != 1) in gs_close()
708 gser = port->port_usb; in gs_close()
716 kfifo_free(&port->port_write_buf); in gs_close()
718 kfifo_reset(&port->port_write_buf); in gs_close()
720 port->start_delayed = false; in gs_close()
721 port->port.count = 0; in gs_close()
722 port->port.tty = NULL; in gs_close()
725 port->port_num, tty, file); in gs_close()
727 wake_up(&port->close_wait); in gs_close()
729 spin_unlock_irq(&port->port_lock); in gs_close()
734 struct gs_port *port = tty->driver_data; in gs_write() local
738 port->port_num, tty, count); in gs_write()
740 spin_lock_irqsave(&port->port_lock, flags); in gs_write()
742 count = kfifo_in(&port->port_write_buf, buf, count); in gs_write()
744 if (port->port_usb) in gs_write()
745 gs_start_tx(port); in gs_write()
746 spin_unlock_irqrestore(&port->port_lock, flags); in gs_write()
753 struct gs_port *port = tty->driver_data; in gs_put_char() local
758 port->port_num, tty, ch, __builtin_return_address(0)); in gs_put_char()
760 spin_lock_irqsave(&port->port_lock, flags); in gs_put_char()
761 status = kfifo_put(&port->port_write_buf, ch); in gs_put_char()
762 spin_unlock_irqrestore(&port->port_lock, flags); in gs_put_char()
769 struct gs_port *port = tty->driver_data; in gs_flush_chars() local
772 pr_vdebug("gs_flush_chars: (%d,%p)\n", port->port_num, tty); in gs_flush_chars()
774 spin_lock_irqsave(&port->port_lock, flags); in gs_flush_chars()
775 if (port->port_usb) in gs_flush_chars()
776 gs_start_tx(port); in gs_flush_chars()
777 spin_unlock_irqrestore(&port->port_lock, flags); in gs_flush_chars()
782 struct gs_port *port = tty->driver_data; in gs_write_room() local
786 spin_lock_irqsave(&port->port_lock, flags); in gs_write_room()
787 if (port->port_usb) in gs_write_room()
788 room = kfifo_avail(&port->port_write_buf); in gs_write_room()
789 spin_unlock_irqrestore(&port->port_lock, flags); in gs_write_room()
792 port->port_num, tty, room); in gs_write_room()
799 struct gs_port *port = tty->driver_data; in gs_chars_in_buffer() local
803 spin_lock_irqsave(&port->port_lock, flags); in gs_chars_in_buffer()
804 chars = kfifo_len(&port->port_write_buf); in gs_chars_in_buffer()
805 spin_unlock_irqrestore(&port->port_lock, flags); in gs_chars_in_buffer()
808 port->port_num, tty, chars); in gs_chars_in_buffer()
816 struct gs_port *port = tty->driver_data; in gs_unthrottle() local
819 spin_lock_irqsave(&port->port_lock, flags); in gs_unthrottle()
820 if (port->port_usb) { in gs_unthrottle()
825 pr_vdebug("ttyGS%d: unthrottle\n", port->port_num); in gs_unthrottle()
826 schedule_delayed_work(&port->push, 0); in gs_unthrottle()
828 spin_unlock_irqrestore(&port->port_lock, flags); in gs_unthrottle()
833 struct gs_port *port = tty->driver_data; in gs_break_ctl() local
838 port->port_num, duration); in gs_break_ctl()
840 spin_lock_irq(&port->port_lock); in gs_break_ctl()
841 gser = port->port_usb; in gs_break_ctl()
844 spin_unlock_irq(&port->port_lock); in gs_break_ctl()
961 static int gs_console_connect(struct gs_port *port) in gs_console_connect() argument
963 struct gs_console *cons = port->console; in gs_console_connect()
970 ep = port->port_usb->in; in gs_console_connect()
983 pr_debug("ttyGS%d: console connected!\n", port->port_num); in gs_console_connect()
990 static void gs_console_disconnect(struct gs_port *port) in gs_console_disconnect() argument
992 struct gs_console *cons = port->console; in gs_console_disconnect()
1014 static int gs_console_init(struct gs_port *port) in gs_console_init() argument
1019 if (port->console) in gs_console_init()
1022 cons = kzalloc(sizeof(*port->console), GFP_KERNEL); in gs_console_init()
1030 cons->console.index = port->port_num; in gs_console_init()
1037 pr_err("ttyGS%d: allocate console buffer failed\n", port->port_num); in gs_console_init()
1042 port->console = cons; in gs_console_init()
1045 spin_lock_irq(&port->port_lock); in gs_console_init()
1046 if (port->port_usb) in gs_console_init()
1047 gs_console_connect(port); in gs_console_init()
1048 spin_unlock_irq(&port->port_lock); in gs_console_init()
1053 static void gs_console_exit(struct gs_port *port) in gs_console_exit() argument
1055 struct gs_console *cons = port->console; in gs_console_exit()
1062 spin_lock_irq(&port->port_lock); in gs_console_exit()
1064 gs_console_disconnect(port); in gs_console_exit()
1065 spin_unlock_irq(&port->port_lock); in gs_console_exit()
1070 port->console = NULL; in gs_console_exit()
1075 struct gs_port *port; in gserial_set_console() local
1084 port = ports[port_num].port; in gserial_set_console()
1086 if (WARN_ON(port == NULL)) { in gserial_set_console()
1092 ret = gs_console_init(port); in gserial_set_console()
1094 gs_console_exit(port); in gserial_set_console()
1104 struct gs_port *port; in gserial_get_console() local
1108 port = ports[port_num].port; in gserial_get_console()
1110 if (WARN_ON(port == NULL)) in gserial_get_console()
1113 ret = sprintf(page, "%u\n", !!port->console); in gserial_get_console()
1123 static int gs_console_connect(struct gs_port *port) in gs_console_connect() argument
1128 static void gs_console_disconnect(struct gs_port *port) in gs_console_disconnect() argument
1132 static int gs_console_init(struct gs_port *port) in gs_console_init() argument
1137 static void gs_console_exit(struct gs_port *port) in gs_console_exit() argument
1146 struct gs_port *port; in gs_port_alloc() local
1150 if (ports[port_num].port) { in gs_port_alloc()
1155 port = kzalloc(sizeof(struct gs_port), GFP_KERNEL); in gs_port_alloc()
1156 if (port == NULL) { in gs_port_alloc()
1161 tty_port_init(&port->port); in gs_port_alloc()
1162 spin_lock_init(&port->port_lock); in gs_port_alloc()
1163 init_waitqueue_head(&port->drain_wait); in gs_port_alloc()
1164 init_waitqueue_head(&port->close_wait); in gs_port_alloc()
1166 INIT_DELAYED_WORK(&port->push, gs_rx_push); in gs_port_alloc()
1168 INIT_LIST_HEAD(&port->read_pool); in gs_port_alloc()
1169 INIT_LIST_HEAD(&port->read_queue); in gs_port_alloc()
1170 INIT_LIST_HEAD(&port->write_pool); in gs_port_alloc()
1172 port->port_num = port_num; in gs_port_alloc()
1173 port->port_line_coding = *coding; in gs_port_alloc()
1175 ports[port_num].port = port; in gs_port_alloc()
1181 static int gs_closed(struct gs_port *port) in gs_closed() argument
1185 spin_lock_irq(&port->port_lock); in gs_closed()
1186 cond = port->port.count == 0; in gs_closed()
1187 spin_unlock_irq(&port->port_lock); in gs_closed()
1192 static void gserial_free_port(struct gs_port *port) in gserial_free_port() argument
1194 cancel_delayed_work_sync(&port->push); in gserial_free_port()
1196 wait_event(port->close_wait, gs_closed(port)); in gserial_free_port()
1197 WARN_ON(port->port_usb != NULL); in gserial_free_port()
1198 tty_port_destroy(&port->port); in gserial_free_port()
1199 kfree(port); in gserial_free_port()
1204 struct gs_port *port; in gserial_free_line() local
1207 if (!ports[port_num].port) { in gserial_free_line()
1211 port = ports[port_num].port; in gserial_free_line()
1212 gs_console_exit(port); in gserial_free_line()
1213 ports[port_num].port = NULL; in gserial_free_line()
1216 gserial_free_port(port); in gserial_free_line()
1224 struct gs_port *port; in gserial_alloc_line_no_console() local
1247 port = ports[port_num].port; in gserial_alloc_line_no_console()
1248 tty_dev = tty_port_register_device(&port->port, in gserial_alloc_line_no_console()
1256 ports[port_num].port = NULL; in gserial_alloc_line_no_console()
1258 gserial_free_port(port); in gserial_alloc_line_no_console()
1272 gs_console_init(ports[*line_num].port); in gserial_alloc_line()
1301 struct gs_port *port; in gserial_connect() local
1308 port = ports[port_num].port; in gserial_connect()
1309 if (!port) { in gserial_connect()
1313 if (port->port_usb) { in gserial_connect()
1322 gser->in->driver_data = port; in gserial_connect()
1327 gser->out->driver_data = port; in gserial_connect()
1330 spin_lock_irqsave(&port->port_lock, flags); in gserial_connect()
1331 gser->ioport = port; in gserial_connect()
1332 port->port_usb = gser; in gserial_connect()
1337 gser->port_line_coding = port->port_line_coding; in gserial_connect()
1344 if (port->port.count) { in gserial_connect()
1345 pr_debug("gserial_connect: start ttyGS%d\n", port->port_num); in gserial_connect()
1346 gs_start_io(port); in gserial_connect()
1354 status = gs_console_connect(port); in gserial_connect()
1355 spin_unlock_irqrestore(&port->port_lock, flags); in gserial_connect()
1377 struct gs_port *port = gser->ioport; in gserial_disconnect() local
1380 if (!port) in gserial_disconnect()
1386 spin_lock(&port->port_lock); in gserial_disconnect()
1388 gs_console_disconnect(port); in gserial_disconnect()
1391 port->port_line_coding = gser->port_line_coding; in gserial_disconnect()
1393 port->port_usb = NULL; in gserial_disconnect()
1395 if (port->port.count > 0) { in gserial_disconnect()
1396 wake_up_interruptible(&port->drain_wait); in gserial_disconnect()
1397 if (port->port.tty) in gserial_disconnect()
1398 tty_hangup(port->port.tty); in gserial_disconnect()
1400 port->suspended = false; in gserial_disconnect()
1401 spin_unlock(&port->port_lock); in gserial_disconnect()
1409 spin_lock_irqsave(&port->port_lock, flags); in gserial_disconnect()
1410 if (port->port.count == 0) in gserial_disconnect()
1411 kfifo_free(&port->port_write_buf); in gserial_disconnect()
1412 gs_free_requests(gser->out, &port->read_pool, NULL); in gserial_disconnect()
1413 gs_free_requests(gser->out, &port->read_queue, NULL); in gserial_disconnect()
1414 gs_free_requests(gser->in, &port->write_pool, NULL); in gserial_disconnect()
1416 port->read_allocated = port->read_started = in gserial_disconnect()
1417 port->write_allocated = port->write_started = 0; in gserial_disconnect()
1419 spin_unlock_irqrestore(&port->port_lock, flags); in gserial_disconnect()
1425 struct gs_port *port; in gserial_suspend() local
1429 port = gser->ioport; in gserial_suspend()
1431 if (!port) { in gserial_suspend()
1436 spin_lock(&port->port_lock); in gserial_suspend()
1438 port->suspended = true; in gserial_suspend()
1439 spin_unlock_irqrestore(&port->port_lock, flags); in gserial_suspend()
1445 struct gs_port *port; in gserial_resume() local
1449 port = gser->ioport; in gserial_resume()
1451 if (!port) { in gserial_resume()
1456 spin_lock(&port->port_lock); in gserial_resume()
1458 port->suspended = false; in gserial_resume()
1459 if (!port->start_delayed) { in gserial_resume()
1460 spin_unlock_irqrestore(&port->port_lock, flags); in gserial_resume()
1464 pr_debug("delayed start ttyGS%d\n", port->port_num); in gserial_resume()
1465 gs_start_io(port); in gserial_resume()
1468 port->start_delayed = false; in gserial_resume()
1469 spin_unlock_irqrestore(&port->port_lock, flags); in gserial_resume()