Lines Matching refs:line

21 	struct line *line = chan->line;  in line_interrupt()  local
23 if (line) in line_interrupt()
24 chan_interrupt(line, irq); in line_interrupt()
34 static int write_room(struct line *line) in write_room() argument
38 if (line->buffer == NULL) in write_room()
42 n = line->head - line->tail; in write_room()
51 struct line *line = tty->driver_data; in line_write_room() local
55 spin_lock_irqsave(&line->lock, flags); in line_write_room()
56 room = write_room(line); in line_write_room()
57 spin_unlock_irqrestore(&line->lock, flags); in line_write_room()
64 struct line *line = tty->driver_data; in line_chars_in_buffer() local
68 spin_lock_irqsave(&line->lock, flags); in line_chars_in_buffer()
70 ret = LINE_BUFSIZE - (write_room(line) + 1); in line_chars_in_buffer()
71 spin_unlock_irqrestore(&line->lock, flags); in line_chars_in_buffer()
85 static int buffer_data(struct line *line, const char *buf, int len) in buffer_data() argument
89 if (line->buffer == NULL) { in buffer_data()
90 line->buffer = kmalloc(LINE_BUFSIZE, GFP_ATOMIC); in buffer_data()
91 if (line->buffer == NULL) { in buffer_data()
96 line->head = line->buffer; in buffer_data()
97 line->tail = line->buffer; in buffer_data()
100 room = write_room(line); in buffer_data()
103 end = line->buffer + LINE_BUFSIZE - line->tail; in buffer_data()
106 memcpy(line->tail, buf, len); in buffer_data()
107 line->tail += len; in buffer_data()
111 memcpy(line->tail, buf, end); in buffer_data()
113 memcpy(line->buffer, buf, len - end); in buffer_data()
114 line->tail = line->buffer + len - end; in buffer_data()
129 static int flush_buffer(struct line *line) in flush_buffer() argument
133 if ((line->buffer == NULL) || (line->head == line->tail)) in flush_buffer()
136 if (line->tail < line->head) { in flush_buffer()
138 count = line->buffer + LINE_BUFSIZE - line->head; in flush_buffer()
140 n = write_chan(line->chan_out, line->head, count, in flush_buffer()
141 line->driver->write_irq); in flush_buffer()
149 line->head = line->buffer; in flush_buffer()
151 line->head += n; in flush_buffer()
156 count = line->tail - line->head; in flush_buffer()
157 n = write_chan(line->chan_out, line->head, count, in flush_buffer()
158 line->driver->write_irq); in flush_buffer()
163 line->head += n; in flush_buffer()
164 return line->head == line->tail; in flush_buffer()
169 struct line *line = tty->driver_data; in line_flush_buffer() local
172 spin_lock_irqsave(&line->lock, flags); in line_flush_buffer()
173 flush_buffer(line); in line_flush_buffer()
174 spin_unlock_irqrestore(&line->lock, flags); in line_flush_buffer()
193 struct line *line = tty->driver_data; in line_write() local
197 spin_lock_irqsave(&line->lock, flags); in line_write()
198 if (line->head != line->tail) in line_write()
199 ret = buffer_data(line, buf, len); in line_write()
201 n = write_chan(line->chan_out, buf, len, in line_write()
202 line->driver->write_irq); in line_write()
211 ret += buffer_data(line, buf + n, len); in line_write()
214 spin_unlock_irqrestore(&line->lock, flags); in line_write()
225 struct line *line = tty->driver_data; in line_throttle() local
227 deactivate_chan(line->chan_in, line->driver->read_irq); in line_throttle()
228 line->throttled = 1; in line_throttle()
233 struct line *line = tty->driver_data; in line_unthrottle() local
235 line->throttled = 0; in line_unthrottle()
236 chan_interrupt(line, line->driver->read_irq); in line_unthrottle()
243 if (!line->throttled) in line_unthrottle()
244 reactivate_chan(line->chan_in, line->driver->read_irq); in line_unthrottle()
250 struct line *line = chan->line; in line_write_interrupt() local
258 spin_lock(&line->lock); in line_write_interrupt()
259 err = flush_buffer(line); in line_write_interrupt()
261 spin_unlock(&line->lock); in line_write_interrupt()
264 line->head = line->buffer; in line_write_interrupt()
265 line->tail = line->buffer; in line_write_interrupt()
267 spin_unlock(&line->lock); in line_write_interrupt()
269 tty_port_tty_wakeup(&line->port); in line_write_interrupt()
274 int line_setup_irq(int fd, int input, int output, struct line *line, void *data) in line_setup_irq() argument
276 const struct line_driver *driver = line->driver; in line_setup_irq()
295 struct line *line = tty->driver_data; in line_activate() local
297 ret = enable_chan(line); in line_activate()
301 if (!line->sigio) { in line_activate()
302 chan_enable_winch(line->chan_out, port); in line_activate()
303 line->sigio = 1; in line_activate()
306 chan_window_size(line, &tty->winsize.ws_row, in line_activate()
317 struct line *line = tty->driver_data; in line_destruct() local
319 if (line->sigio) { in line_destruct()
321 line->sigio = 0; in line_destruct()
332 struct line *line = tty->driver_data; in line_open() local
334 return tty_port_open(&line->port, tty, filp); in line_open()
338 struct line *line) in line_install() argument
346 tty->driver_data = line; in line_install()
353 struct line *line = tty->driver_data; in line_close() local
355 tty_port_close(&line->port, tty, filp); in line_close()
360 struct line *line = tty->driver_data; in line_hangup() local
362 tty_port_hangup(&line->port); in line_hangup()
365 void close_lines(struct line *lines, int nlines) in close_lines()
373 int setup_one_line(struct line *lines, int n, char *init, in setup_one_line()
376 struct line *line = &lines[n]; in setup_one_line() local
377 struct tty_driver *driver = line->driver->driver; in setup_one_line()
380 if (line->port.count) { in setup_one_line()
386 if (line->valid) { in setup_one_line()
387 line->valid = 0; in setup_one_line()
388 kfree(line->init_str); in setup_one_line()
390 parse_chan_pair(NULL, line, n, opts, error_out); in setup_one_line()
399 if (line->valid) { in setup_one_line()
401 kfree(line->init_str); in setup_one_line()
403 line->init_str = new; in setup_one_line()
404 line->valid = 1; in setup_one_line()
405 err = parse_chan_pair(new, line, n, opts, error_out); in setup_one_line()
407 struct device *d = tty_port_register_device(&line->port, in setup_one_line()
412 parse_chan_pair(NULL, line, n, opts, error_out); in setup_one_line()
416 line->init_str = NULL; in setup_one_line()
417 line->valid = 0; in setup_one_line()
465 int line_config(struct line *lines, unsigned int num, char *str, in line_config()
489 int line_get_config(char *name, struct line *lines, unsigned int num, char *str, in line_get_config()
492 struct line *line; in line_get_config() local
507 line = &lines[dev]; in line_get_config()
509 if (!line->valid) in line_get_config()
512 struct tty_struct *tty = tty_port_tty_get(&line->port); in line_get_config()
514 CONFIG_CHUNK(str, size, n, line->init_str, 1); in line_get_config()
516 n = chan_config_string(line, str, size, error_out); in line_get_config()
539 int line_remove(struct line *lines, unsigned int num, int n, char **error_out) in line_remove()
550 struct line *lines, int nlines) in register_lines()
631 struct line *line; in winch_interrupt() local
657 line = tty->driver_data; in winch_interrupt()
658 if (line != NULL) { in winch_interrupt()
659 chan_window_size(line, &tty->winsize.ws_row, in winch_interrupt()