20 #include <linux/kernel.h>
21 #include <linux/sched.h>
23 #include <linux/device.h>
25 #include <linux/tty.h>
27 #include <linux/slab.h>
28 #include <linux/export.h>
58 #define PREFIX "ttyGS"
82 #define WRITE_BUF_SIZE 8192
124 static struct portmaster {
128 static unsigned n_ports;
130 #define GS_CLOSE_TIMEOUT 15
135 #define pr_vdebug(fmt, arg...) \
138 #define pr_vdebug(fmt, arg...) \
139 ({ if (0) pr_debug(fmt, ##arg); })
151 static int gs_buf_alloc(
struct gs_buf *gb,
unsigned size)
169 static void gs_buf_free(
struct gs_buf *gb)
180 static void gs_buf_clear(
struct gs_buf *gb)
192 static unsigned gs_buf_data_avail(
struct gs_buf *gb)
203 static unsigned gs_buf_space_avail(
struct gs_buf *gb)
221 len = gs_buf_space_avail(gb);
253 gs_buf_get(
struct gs_buf *gb,
char *buf,
unsigned count)
257 len = gs_buf_data_avail(gb);
295 req = usb_ep_alloc_request(ep, kmalloc_flags);
301 usb_ep_free_request(ep, req);
317 usb_ep_free_request(ep, req);
353 static int gs_start_tx(
struct gs_port *port)
362 bool do_tty_wake =
false;
364 while (!list_empty(pool)) {
400 __func__,
"queue", in->
name, status);
401 list_add(&req->
list, pool);
412 if (do_tty_wake && port->
port.tty)
420 static unsigned gs_start_rx(
struct gs_port *port)
429 while (!list_empty(pool)) {
435 tty = port->
port.tty;
455 __func__,
"queue", out->
name, status);
456 list_add(&req->
list, pool);
478 static void gs_rx_push(
unsigned long _port)
480 struct gs_port *port = (
void *)_port;
484 bool do_push =
false;
488 tty = port->
port.tty;
489 while (!list_empty(queue)) {
520 char *packet = req->
buf;
521 unsigned size = req->
actual;
532 count = tty_insert_flip_string(tty, packet, size);
565 if (!list_empty(queue) && tty) {
568 tasklet_schedule(&port->
push);
589 tasklet_schedule(&port->
push);
626 while (!list_empty(head)) {
635 static int gs_alloc_requests(
struct usb_ep *ep,
struct list_head *head,
647 for (i = 0; i <
n; i++) {
650 return list_empty(head) ? -
ENOMEM : 0;
668 static int gs_start_io(
struct gs_port *port)
681 status = gs_alloc_requests(ep, head, gs_read_complete,
695 started = gs_start_rx(port);
734 if (port->
port.count) {
766 }
while (status != -
EAGAIN);
779 pr_debug(
"gs_open: ttyGS%d (%p,%p) no buffer\n",
782 goto exit_unlock_port;
793 port->
port.tty = tty;
795 port->
port.count = 1;
818 static int gs_writes_finished(
struct gs_port *
p)
830 static void gs_close(
struct tty_struct *tty,
struct file *file)
837 if (port->
port.count != 1) {
838 if (port->
port.count == 0)
851 port->
port.count = 0;
863 gs_writes_finished(port),
883 pr_debug(
"gs_close: ttyGS%d (%p,%p) done!\n",
891 static int gs_write(
struct tty_struct *tty,
const unsigned char *buf,
int count)
897 pr_vdebug(
"gs_write: ttyGS%d (%p) writing %d bytes\n",
905 status = gs_start_tx(port);
906 spin_unlock_irqrestore(&port->
port_lock, flags);
911 static int gs_put_char(
struct tty_struct *tty,
unsigned char ch)
917 pr_vdebug(
"gs_put_char: (%d,%p) char=0x%x, called from %pf\n",
918 port->
port_num, tty, ch, __builtin_return_address(0));
922 spin_unlock_irqrestore(&port->
port_lock, flags);
927 static void gs_flush_chars(
struct tty_struct *tty)
937 spin_unlock_irqrestore(&port->
port_lock, flags);
940 static int gs_write_room(
struct tty_struct *tty)
949 spin_unlock_irqrestore(&port->
port_lock, flags);
951 pr_vdebug(
"gs_write_room: (%d,%p) room=%d\n",
957 static int gs_chars_in_buffer(
struct tty_struct *tty)
965 spin_unlock_irqrestore(&port->
port_lock, flags);
967 pr_vdebug(
"gs_chars_in_buffer: (%d,%p) chars=%d\n",
974 static void gs_unthrottle(
struct tty_struct *tty)
985 tasklet_schedule(&port->
push);
988 spin_unlock_irqrestore(&port->
port_lock, flags);
997 pr_vdebug(
"gs_break_ctl: ttyGS%d, send break (%d) \n",
1013 .put_char = gs_put_char,
1014 .flush_chars = gs_flush_chars,
1015 .write_room = gs_write_room,
1016 .chars_in_buffer = gs_chars_in_buffer,
1017 .unthrottle = gs_unthrottle,
1018 .break_ctl = gs_break_ctl,
1077 if (count == 0 || count >
N_PORTS)
1080 gs_tty_driver = alloc_tty_driver(count);
1110 for (i = 0; i <
count; i++) {
1112 status = gs_port_alloc(i, &coding);
1123 pr_err(
"%s: cannot register, err %d\n",
1129 for (i = 0; i <
count; i++) {
1133 if (IS_ERR(tty_dev))
1134 pr_warning(
"%s: no classdev for port %d, err %ld\n",
1135 __func__, i, PTR_ERR(tty_dev));
1138 pr_debug(
"%s: registered %d ttyGS* device%s\n", __func__,
1139 count, (count == 1) ?
"" :
"s");
1146 gs_tty_driver =
NULL;
1150 static int gs_closed(
struct gs_port *port)
1181 for (i = 0; i < n_ports; i++)
1184 for (i = 0; i < n_ports; i++) {
1204 gs_tty_driver =
NULL;
1206 pr_debug(
"%s: cleaned up ttyGS* support\n", __func__);
1233 unsigned long flags;
1236 if (!gs_tty_driver || port_num >= n_ports)
1243 status = usb_ep_enable(gser->
in);
1246 gser->
in->driver_data =
port;
1248 status = usb_ep_enable(gser->
out);
1251 gser->
out->driver_data =
port;
1268 if (port->
port.count) {
1278 spin_unlock_irqrestore(&port->
port_lock, flags);
1283 usb_ep_disable(gser->
in);
1284 gser->
in->driver_data =
NULL;
1302 unsigned long flags;
1320 spin_unlock_irqrestore(&port->
port_lock, flags);
1323 usb_ep_disable(gser->
out);
1324 gser->
out->driver_data =
NULL;
1326 usb_ep_disable(gser->
in);
1327 gser->
in->driver_data =
NULL;
1340 spin_unlock_irqrestore(&port->
port_lock, flags);