TTY: synclink, remove unneeded tests
[cascardo/linux.git] / drivers / tty / synclink_gt.c
index aba1e59..ac8599a 100644 (file)
@@ -317,8 +317,7 @@ struct slgt_info {
        unsigned char *tx_buf;
        int tx_count;
 
-       char flag_buf[MAX_ASYNC_BUFFER_SIZE];
-       char char_buf[MAX_ASYNC_BUFFER_SIZE];
+       char *flag_buf;
        bool drop_rts_on_tx_done;
        struct  _input_signal_events    input_signal_events;
 
@@ -683,7 +682,7 @@ static int open(struct tty_struct *tty, struct file *filp)
        }
 
        mutex_lock(&info->port.mutex);
-       info->port.tty->low_latency = (info->port.flags & ASYNC_LOW_LATENCY) ? 1 : 0;
+       info->port.low_latency = (info->port.flags & ASYNC_LOW_LATENCY) ? 1 : 0;
 
        spin_lock_irqsave(&info->netlock, flags);
        if (info->netcount) {
@@ -1855,7 +1854,6 @@ static void hdlcdev_exit(struct slgt_info *info)
  */
 static void rx_async(struct slgt_info *info)
 {
-       struct tty_struct *tty = info->port.tty;
        struct mgsl_icount *icount = &info->icount;
        unsigned int start, end;
        unsigned char *p;
@@ -1894,10 +1892,8 @@ static void rx_async(struct slgt_info *info)
                                else if (status & BIT0)
                                        stat = TTY_FRAME;
                        }
-                       if (tty) {
-                               tty_insert_flip_char(tty, ch, stat);
-                               chars++;
-                       }
+                       tty_insert_flip_char(&info->port, ch, stat);
+                       chars++;
                }
 
                if (i < count) {
@@ -1918,8 +1914,8 @@ static void rx_async(struct slgt_info *info)
                        break;
        }
 
-       if (tty && chars)
-               tty_flip_buffer_push(tty);
+       if (chars)
+               tty_flip_buffer_push(&info->port);
 }
 
 /*
@@ -1961,8 +1957,6 @@ static void bh_handler(struct work_struct *work)
        struct slgt_info *info = container_of(work, struct slgt_info, task);
        int action;
 
-       if (!info)
-               return;
        info->bh_running = true;
 
        while((action = bh_action(info))) {
@@ -2183,7 +2177,7 @@ static void isr_serial(struct slgt_info *info)
                        if (info->port.tty) {
                                if (!(status & info->ignore_status_mask)) {
                                        if (info->read_status_mask & MASK_BREAK) {
-                                               tty_insert_flip_char(info->port.tty, 0, TTY_BREAK);
+                                               tty_insert_flip_char(&info->port, 0, TTY_BREAK);
                                                if (info->port.flags & ASYNC_SAK)
                                                        do_SAK(info->port.tty);
                                        }
@@ -3355,11 +3349,24 @@ static int block_til_ready(struct tty_struct *tty, struct file *filp,
        return retval;
 }
 
+/*
+ * allocate buffers used for calling line discipline receive_buf
+ * directly in synchronous mode
+ * note: add 5 bytes to max frame size to allow appending
+ * 32-bit CRC and status byte when configured to do so
+ */
 static int alloc_tmp_rbuf(struct slgt_info *info)
 {
        info->tmp_rbuf = kmalloc(info->max_frame_size + 5, GFP_KERNEL);
        if (info->tmp_rbuf == NULL)
                return -ENOMEM;
+       /* unused flag buffer to satisfy receive_buf calling interface */
+       info->flag_buf = kzalloc(info->max_frame_size + 5, GFP_KERNEL);
+       if (!info->flag_buf) {
+               kfree(info->tmp_rbuf);
+               info->tmp_rbuf = NULL;
+               return -ENOMEM;
+       }
        return 0;
 }
 
@@ -3367,6 +3374,8 @@ static void free_tmp_rbuf(struct slgt_info *info)
 {
        kfree(info->tmp_rbuf);
        info->tmp_rbuf = NULL;
+       kfree(info->flag_buf);
+       info->flag_buf = NULL;
 }
 
 /*