• Home
  • Raw
  • Download

Lines Matching refs:ldata

133 static inline size_t read_cnt(struct n_tty_data *ldata)  in read_cnt()  argument
135 return ldata->read_head - ldata->read_tail; in read_cnt()
138 static inline unsigned char read_buf(struct n_tty_data *ldata, size_t i) in read_buf() argument
140 return ldata->read_buf[i & (N_TTY_BUF_SIZE - 1)]; in read_buf()
143 static inline unsigned char *read_buf_addr(struct n_tty_data *ldata, size_t i) in read_buf_addr() argument
145 return &ldata->read_buf[i & (N_TTY_BUF_SIZE - 1)]; in read_buf_addr()
148 static inline unsigned char echo_buf(struct n_tty_data *ldata, size_t i) in echo_buf() argument
151 return ldata->echo_buf[i & (N_TTY_BUF_SIZE - 1)]; in echo_buf()
154 static inline unsigned char *echo_buf_addr(struct n_tty_data *ldata, size_t i) in echo_buf_addr() argument
156 return &ldata->echo_buf[i & (N_TTY_BUF_SIZE - 1)]; in echo_buf_addr()
162 struct n_tty_data *ldata = tty->disc_data; in tty_put_user() local
164 tty_audit_add_data(tty, &x, 1, ldata->icanon); in tty_put_user()
183 struct n_tty_data *ldata = tty->disc_data; in tty_copy_to_user() local
186 tty_audit_add_data(tty, from, n, ldata->icanon); in tty_copy_to_user()
207 struct n_tty_data *ldata = tty->disc_data; in n_tty_kick_worker() local
210 if (unlikely(ldata->no_room)) { in n_tty_kick_worker()
211 ldata->no_room = 0; in n_tty_kick_worker()
227 struct n_tty_data *ldata = tty->disc_data; in chars_in_buffer() local
230 if (!ldata->icanon) in chars_in_buffer()
231 n = ldata->commit_head - ldata->read_tail; in chars_in_buffer()
233 n = ldata->canon_head - ldata->read_tail; in chars_in_buffer()
254 struct n_tty_data *ldata = tty->disc_data; in n_tty_check_throttle() local
261 if (ldata->icanon && ldata->canon_head == ldata->read_tail) in n_tty_check_throttle()
267 if (N_TTY_BUF_SIZE - read_cnt(ldata) >= TTY_THRESHOLD_THROTTLE) in n_tty_check_throttle()
322 static inline void put_tty_queue(unsigned char c, struct n_tty_data *ldata) in put_tty_queue() argument
324 *read_buf_addr(ldata, ldata->read_head) = c; in put_tty_queue()
325 ldata->read_head++; in put_tty_queue()
339 static void reset_buffer_flags(struct n_tty_data *ldata) in reset_buffer_flags() argument
341 ldata->read_head = ldata->canon_head = ldata->read_tail = 0; in reset_buffer_flags()
342 ldata->commit_head = 0; in reset_buffer_flags()
343 ldata->line_start = 0; in reset_buffer_flags()
345 ldata->erasing = 0; in reset_buffer_flags()
346 bitmap_zero(ldata->read_flags, N_TTY_BUF_SIZE); in reset_buffer_flags()
347 ldata->push = 0; in reset_buffer_flags()
460 struct n_tty_data *ldata = tty->disc_data; in do_output_char() local
469 ldata->column = 0; in do_output_char()
473 ldata->canon_column = ldata->column = 0; in do_output_char()
477 ldata->canon_column = ldata->column; in do_output_char()
480 if (O_ONOCR(tty) && ldata->column == 0) in do_output_char()
485 ldata->canon_column = ldata->column = 0; in do_output_char()
488 ldata->canon_column = ldata->column = 0; in do_output_char()
491 spaces = 8 - (ldata->column & 7); in do_output_char()
495 ldata->column += spaces; in do_output_char()
499 ldata->column += spaces; in do_output_char()
502 if (ldata->column > 0) in do_output_char()
503 ldata->column--; in do_output_char()
510 ldata->column++; in do_output_char()
535 struct n_tty_data *ldata = tty->disc_data; in process_output() local
538 mutex_lock(&ldata->output_lock); in process_output()
543 mutex_unlock(&ldata->output_lock); in process_output()
572 struct n_tty_data *ldata = tty->disc_data; in process_output_block() local
577 mutex_lock(&ldata->output_lock); in process_output_block()
581 mutex_unlock(&ldata->output_lock); in process_output_block()
593 ldata->column = 0; in process_output_block()
596 ldata->canon_column = ldata->column; in process_output_block()
599 if (O_ONOCR(tty) && ldata->column == 0) in process_output_block()
603 ldata->canon_column = ldata->column = 0; in process_output_block()
608 if (ldata->column > 0) in process_output_block()
609 ldata->column--; in process_output_block()
616 ldata->column++; in process_output_block()
624 mutex_unlock(&ldata->output_lock); in process_output_block()
655 struct n_tty_data *ldata = tty->disc_data; in __process_echoes() local
662 tail = ldata->echo_tail; in __process_echoes()
663 while (MASK(ldata->echo_commit) != MASK(tail)) { in __process_echoes()
664 c = echo_buf(ldata, tail); in __process_echoes()
674 if (MASK(ldata->echo_commit) == MASK(tail + 1)) in __process_echoes()
681 op = echo_buf(ldata, tail + 1); in __process_echoes()
687 if (MASK(ldata->echo_commit) == MASK(tail + 2)) in __process_echoes()
689 num_chars = echo_buf(ldata, tail + 2); in __process_echoes()
702 num_chars += ldata->canon_column; in __process_echoes()
712 if (ldata->column > 0) in __process_echoes()
713 ldata->column--; in __process_echoes()
719 ldata->canon_column = ldata->column; in __process_echoes()
724 if (ldata->column > 0) in __process_echoes()
725 ldata->column--; in __process_echoes()
736 ldata->column++; in __process_echoes()
757 ldata->column += 2; in __process_echoes()
783 while (ldata->echo_commit > tail && in __process_echoes()
784 ldata->echo_commit - tail >= ECHO_DISCARD_WATERMARK) { in __process_echoes()
785 if (echo_buf(ldata, tail) == ECHO_OP_START) { in __process_echoes()
786 if (echo_buf(ldata, tail + 1) == ECHO_OP_ERASE_TAB) in __process_echoes()
795 ldata->echo_tail = tail; in __process_echoes()
801 struct n_tty_data *ldata = tty->disc_data; in commit_echoes() local
805 mutex_lock(&ldata->output_lock); in commit_echoes()
806 head = ldata->echo_head; in commit_echoes()
807 ldata->echo_mark = head; in commit_echoes()
808 old = ldata->echo_commit - ldata->echo_tail; in commit_echoes()
813 nr = head - ldata->echo_tail; in commit_echoes()
816 mutex_unlock(&ldata->output_lock); in commit_echoes()
820 ldata->echo_commit = head; in commit_echoes()
822 mutex_unlock(&ldata->output_lock); in commit_echoes()
830 struct n_tty_data *ldata = tty->disc_data; in process_echoes() local
833 if (ldata->echo_mark == ldata->echo_tail) in process_echoes()
836 mutex_lock(&ldata->output_lock); in process_echoes()
837 ldata->echo_commit = ldata->echo_mark; in process_echoes()
839 mutex_unlock(&ldata->output_lock); in process_echoes()
848 struct n_tty_data *ldata = tty->disc_data; in flush_echoes() local
851 ldata->echo_commit == ldata->echo_head) in flush_echoes()
854 mutex_lock(&ldata->output_lock); in flush_echoes()
855 ldata->echo_commit = ldata->echo_head; in flush_echoes()
857 mutex_unlock(&ldata->output_lock); in flush_echoes()
868 static inline void add_echo_byte(unsigned char c, struct n_tty_data *ldata) in add_echo_byte() argument
870 *echo_buf_addr(ldata, ldata->echo_head) = c; in add_echo_byte()
872 ldata->echo_head++; in add_echo_byte()
882 static void echo_move_back_col(struct n_tty_data *ldata) in echo_move_back_col() argument
884 add_echo_byte(ECHO_OP_START, ldata); in echo_move_back_col()
885 add_echo_byte(ECHO_OP_MOVE_BACK_COL, ldata); in echo_move_back_col()
896 static void echo_set_canon_col(struct n_tty_data *ldata) in echo_set_canon_col() argument
898 add_echo_byte(ECHO_OP_START, ldata); in echo_set_canon_col()
899 add_echo_byte(ECHO_OP_SET_CANON_COL, ldata); in echo_set_canon_col()
918 struct n_tty_data *ldata) in echo_erase_tab() argument
920 add_echo_byte(ECHO_OP_START, ldata); in echo_erase_tab()
921 add_echo_byte(ECHO_OP_ERASE_TAB, ldata); in echo_erase_tab()
930 add_echo_byte(num_chars, ldata); in echo_erase_tab()
944 static void echo_char_raw(unsigned char c, struct n_tty_data *ldata) in echo_char_raw() argument
947 add_echo_byte(ECHO_OP_START, ldata); in echo_char_raw()
948 add_echo_byte(ECHO_OP_START, ldata); in echo_char_raw()
950 add_echo_byte(c, ldata); in echo_char_raw()
968 struct n_tty_data *ldata = tty->disc_data; in echo_char() local
971 add_echo_byte(ECHO_OP_START, ldata); in echo_char()
972 add_echo_byte(ECHO_OP_START, ldata); in echo_char()
975 add_echo_byte(ECHO_OP_START, ldata); in echo_char()
976 add_echo_byte(c, ldata); in echo_char()
985 static inline void finish_erasing(struct n_tty_data *ldata) in finish_erasing() argument
987 if (ldata->erasing) { in finish_erasing()
988 echo_char_raw('/', ldata); in finish_erasing()
989 ldata->erasing = 0; in finish_erasing()
1008 struct n_tty_data *ldata = tty->disc_data; in eraser() local
1014 if (ldata->read_head == ldata->canon_head) { in eraser()
1024 ldata->read_head = ldata->canon_head; in eraser()
1028 ldata->read_head = ldata->canon_head; in eraser()
1029 finish_erasing(ldata); in eraser()
1033 echo_char_raw('\n', ldata); in eraser()
1040 while (MASK(ldata->read_head) != MASK(ldata->canon_head)) { in eraser()
1041 head = ldata->read_head; in eraser()
1046 c = read_buf(ldata, head); in eraser()
1048 MASK(head) != MASK(ldata->canon_head)); in eraser()
1061 cnt = ldata->read_head - head; in eraser()
1062 ldata->read_head = head; in eraser()
1065 if (!ldata->erasing) { in eraser()
1066 echo_char_raw('\\', ldata); in eraser()
1067 ldata->erasing = 1; in eraser()
1073 echo_char_raw(read_buf(ldata, head), ldata); in eraser()
1074 echo_move_back_col(ldata); in eraser()
1081 size_t tail = ldata->read_head; in eraser()
1090 while (MASK(tail) != MASK(ldata->canon_head)) { in eraser()
1092 c = read_buf(ldata, tail); in eraser()
1103 echo_erase_tab(num_chars, after_tab, ldata); in eraser()
1106 echo_char_raw('\b', ldata); in eraser()
1107 echo_char_raw(' ', ldata); in eraser()
1108 echo_char_raw('\b', ldata); in eraser()
1111 echo_char_raw('\b', ldata); in eraser()
1112 echo_char_raw(' ', ldata); in eraser()
1113 echo_char_raw('\b', ldata); in eraser()
1120 if (ldata->read_head == ldata->canon_head && L_ECHO(tty)) in eraser()
1121 finish_erasing(ldata); in eraser()
1150 struct n_tty_data *ldata = tty->disc_data; in isig() local
1163 mutex_lock(&ldata->output_lock); in isig()
1164 ldata->echo_head = ldata->echo_tail = 0; in isig()
1165 ldata->echo_mark = ldata->echo_commit = 0; in isig()
1166 mutex_unlock(&ldata->output_lock); in isig()
1198 struct n_tty_data *ldata = tty->disc_data; in n_tty_receive_break() local
1207 put_tty_queue('\377', ldata); in n_tty_receive_break()
1208 put_tty_queue('\0', ldata); in n_tty_receive_break()
1210 put_tty_queue('\0', ldata); in n_tty_receive_break()
1228 struct n_tty_data *ldata = tty->disc_data; in n_tty_receive_overrun() local
1230 ldata->num_overrun++; in n_tty_receive_overrun()
1231 if (time_after(jiffies, ldata->overrun_time + HZ) || in n_tty_receive_overrun()
1232 time_after(ldata->overrun_time, jiffies)) { in n_tty_receive_overrun()
1235 ldata->num_overrun); in n_tty_receive_overrun()
1236 ldata->overrun_time = jiffies; in n_tty_receive_overrun()
1237 ldata->num_overrun = 0; in n_tty_receive_overrun()
1254 struct n_tty_data *ldata = tty->disc_data; in n_tty_receive_parity_error() local
1260 put_tty_queue('\377', ldata); in n_tty_receive_parity_error()
1261 put_tty_queue('\0', ldata); in n_tty_receive_parity_error()
1262 put_tty_queue(c, ldata); in n_tty_receive_parity_error()
1264 put_tty_queue('\0', ldata); in n_tty_receive_parity_error()
1266 put_tty_queue(c, ldata); in n_tty_receive_parity_error()
1302 struct n_tty_data *ldata = tty->disc_data; in n_tty_receive_char_special() local
1342 if (ldata->icanon) { in n_tty_receive_char_special()
1350 ldata->lnext = 1; in n_tty_receive_char_special()
1352 finish_erasing(ldata); in n_tty_receive_char_special()
1354 echo_char_raw('^', ldata); in n_tty_receive_char_special()
1355 echo_char_raw('\b', ldata); in n_tty_receive_char_special()
1362 size_t tail = ldata->canon_head; in n_tty_receive_char_special()
1364 finish_erasing(ldata); in n_tty_receive_char_special()
1366 echo_char_raw('\n', ldata); in n_tty_receive_char_special()
1367 while (MASK(tail) != MASK(ldata->read_head)) { in n_tty_receive_char_special()
1368 echo_char(read_buf(ldata, tail), tty); in n_tty_receive_char_special()
1376 echo_char_raw('\n', ldata); in n_tty_receive_char_special()
1392 if (ldata->canon_head == ldata->read_head) in n_tty_receive_char_special()
1393 echo_set_canon_col(ldata); in n_tty_receive_char_special()
1402 put_tty_queue(c, ldata); in n_tty_receive_char_special()
1405 set_bit(ldata->read_head & (N_TTY_BUF_SIZE - 1), ldata->read_flags); in n_tty_receive_char_special()
1406 put_tty_queue(c, ldata); in n_tty_receive_char_special()
1407 smp_store_release(&ldata->canon_head, ldata->read_head); in n_tty_receive_char_special()
1415 finish_erasing(ldata); in n_tty_receive_char_special()
1417 echo_char_raw('\n', ldata); in n_tty_receive_char_special()
1420 if (ldata->canon_head == ldata->read_head) in n_tty_receive_char_special()
1421 echo_set_canon_col(ldata); in n_tty_receive_char_special()
1429 put_tty_queue(c, ldata); in n_tty_receive_char_special()
1431 put_tty_queue(c, ldata); in n_tty_receive_char_special()
1438 struct n_tty_data *ldata = tty->disc_data; in n_tty_receive_char_inline() local
1445 finish_erasing(ldata); in n_tty_receive_char_inline()
1447 if (ldata->canon_head == ldata->read_head) in n_tty_receive_char_inline()
1448 echo_set_canon_col(ldata); in n_tty_receive_char_inline()
1454 put_tty_queue(c, ldata); in n_tty_receive_char_inline()
1455 put_tty_queue(c, ldata); in n_tty_receive_char_inline()
1466 struct n_tty_data *ldata = tty->disc_data; in n_tty_receive_char_fast() local
1473 finish_erasing(ldata); in n_tty_receive_char_fast()
1475 if (ldata->canon_head == ldata->read_head) in n_tty_receive_char_fast()
1476 echo_set_canon_col(ldata); in n_tty_receive_char_fast()
1480 put_tty_queue(c, ldata); in n_tty_receive_char_fast()
1527 struct n_tty_data *ldata = tty->disc_data; in n_tty_receive_char_lnext() local
1529 ldata->lnext = 0; in n_tty_receive_char_lnext()
1544 struct n_tty_data *ldata = tty->disc_data; in n_tty_receive_buf_real_raw() local
1547 head = ldata->read_head & (N_TTY_BUF_SIZE - 1); in n_tty_receive_buf_real_raw()
1549 memcpy(read_buf_addr(ldata, head), cp, n); in n_tty_receive_buf_real_raw()
1550 ldata->read_head += n; in n_tty_receive_buf_real_raw()
1554 head = ldata->read_head & (N_TTY_BUF_SIZE - 1); in n_tty_receive_buf_real_raw()
1556 memcpy(read_buf_addr(ldata, head), cp, n); in n_tty_receive_buf_real_raw()
1557 ldata->read_head += n; in n_tty_receive_buf_real_raw()
1564 struct n_tty_data *ldata = tty->disc_data; in n_tty_receive_buf_raw() local
1571 put_tty_queue(*cp++, ldata); in n_tty_receive_buf_raw()
1597 struct n_tty_data *ldata = tty->disc_data; in n_tty_receive_buf_standard() local
1611 put_tty_queue(c, ldata); in n_tty_receive_buf_standard()
1614 if (!test_bit(c, ldata->char_map)) in n_tty_receive_buf_standard()
1631 struct n_tty_data *ldata = tty->disc_data; in n_tty_receive_buf_fast() local
1640 if (!test_bit(c, ldata->char_map)) in n_tty_receive_buf_fast()
1656 struct n_tty_data *ldata = tty->disc_data; in __receive_buf() local
1659 if (ldata->real_raw) in __receive_buf()
1661 else if (ldata->raw || (L_EXTPROC(tty) && !preops)) in __receive_buf()
1666 if (ldata->lnext) { in __receive_buf()
1685 if (ldata->icanon && !L_EXTPROC(tty)) in __receive_buf()
1689 smp_store_release(&ldata->commit_head, ldata->read_head); in __receive_buf()
1691 if ((read_cnt(ldata) >= ldata->minimum_to_wake) || L_EXTPROC(tty)) { in __receive_buf()
1734 struct n_tty_data *ldata = tty->disc_data; in n_tty_receive_buf_common() local
1753 size_t tail = smp_load_acquire(&ldata->read_tail); in n_tty_receive_buf_common()
1755 room = N_TTY_BUF_SIZE - (ldata->read_head - tail); in n_tty_receive_buf_common()
1760 overflow = ldata->icanon && ldata->canon_head == tail; in n_tty_receive_buf_common()
1762 ldata->read_head--; in n_tty_receive_buf_common()
1764 ldata->no_room = flow && !room; in n_tty_receive_buf_common()
1834 struct n_tty_data *ldata = tty->disc_data; in n_tty_set_termios() local
1837 bitmap_zero(ldata->read_flags, N_TTY_BUF_SIZE); in n_tty_set_termios()
1838 ldata->line_start = ldata->read_tail; in n_tty_set_termios()
1839 if (!L_ICANON(tty) || !read_cnt(ldata)) { in n_tty_set_termios()
1840 ldata->canon_head = ldata->read_tail; in n_tty_set_termios()
1841 ldata->push = 0; in n_tty_set_termios()
1843 set_bit((ldata->read_head - 1) & (N_TTY_BUF_SIZE - 1), in n_tty_set_termios()
1844 ldata->read_flags); in n_tty_set_termios()
1845 ldata->canon_head = ldata->read_head; in n_tty_set_termios()
1846 ldata->push = 1; in n_tty_set_termios()
1848 ldata->commit_head = ldata->read_head; in n_tty_set_termios()
1849 ldata->erasing = 0; in n_tty_set_termios()
1850 ldata->lnext = 0; in n_tty_set_termios()
1853 ldata->icanon = (L_ICANON(tty) != 0); in n_tty_set_termios()
1859 bitmap_zero(ldata->char_map, 256); in n_tty_set_termios()
1862 set_bit('\r', ldata->char_map); in n_tty_set_termios()
1864 set_bit('\n', ldata->char_map); in n_tty_set_termios()
1867 set_bit(ERASE_CHAR(tty), ldata->char_map); in n_tty_set_termios()
1868 set_bit(KILL_CHAR(tty), ldata->char_map); in n_tty_set_termios()
1869 set_bit(EOF_CHAR(tty), ldata->char_map); in n_tty_set_termios()
1870 set_bit('\n', ldata->char_map); in n_tty_set_termios()
1871 set_bit(EOL_CHAR(tty), ldata->char_map); in n_tty_set_termios()
1873 set_bit(WERASE_CHAR(tty), ldata->char_map); in n_tty_set_termios()
1874 set_bit(LNEXT_CHAR(tty), ldata->char_map); in n_tty_set_termios()
1875 set_bit(EOL2_CHAR(tty), ldata->char_map); in n_tty_set_termios()
1878 ldata->char_map); in n_tty_set_termios()
1882 set_bit(START_CHAR(tty), ldata->char_map); in n_tty_set_termios()
1883 set_bit(STOP_CHAR(tty), ldata->char_map); in n_tty_set_termios()
1886 set_bit(INTR_CHAR(tty), ldata->char_map); in n_tty_set_termios()
1887 set_bit(QUIT_CHAR(tty), ldata->char_map); in n_tty_set_termios()
1888 set_bit(SUSP_CHAR(tty), ldata->char_map); in n_tty_set_termios()
1890 clear_bit(__DISABLED_CHAR, ldata->char_map); in n_tty_set_termios()
1891 ldata->raw = 0; in n_tty_set_termios()
1892 ldata->real_raw = 0; in n_tty_set_termios()
1894 ldata->raw = 1; in n_tty_set_termios()
1898 ldata->real_raw = 1; in n_tty_set_termios()
1900 ldata->real_raw = 0; in n_tty_set_termios()
1928 struct n_tty_data *ldata = tty->disc_data; in n_tty_close() local
1933 vfree(ldata); in n_tty_close()
1949 struct n_tty_data *ldata; in n_tty_open() local
1952 ldata = vzalloc(sizeof(*ldata)); in n_tty_open()
1953 if (!ldata) in n_tty_open()
1956 ldata->overrun_time = jiffies; in n_tty_open()
1957 mutex_init(&ldata->atomic_read_lock); in n_tty_open()
1958 mutex_init(&ldata->output_lock); in n_tty_open()
1960 tty->disc_data = ldata; in n_tty_open()
1961 ldata->minimum_to_wake = 1; in n_tty_open()
1972 struct n_tty_data *ldata = tty->disc_data; in input_available_p() local
1975 if (ldata->icanon && !L_EXTPROC(tty)) in input_available_p()
1976 return ldata->canon_head != ldata->read_tail; in input_available_p()
1978 return ldata->commit_head - ldata->read_tail >= amt; in input_available_p()
2006 struct n_tty_data *ldata = tty->disc_data; in copy_from_read_buf() local
2010 size_t head = smp_load_acquire(&ldata->commit_head); in copy_from_read_buf()
2011 size_t tail = ldata->read_tail & (N_TTY_BUF_SIZE - 1); in copy_from_read_buf()
2014 n = min(head - ldata->read_tail, N_TTY_BUF_SIZE - tail); in copy_from_read_buf()
2017 retval = copy_to_user(*b, read_buf_addr(ldata, tail), n); in copy_from_read_buf()
2019 is_eof = n == 1 && read_buf(ldata, tail) == EOF_CHAR(tty); in copy_from_read_buf()
2020 tty_audit_add_data(tty, read_buf_addr(ldata, tail), n, in copy_from_read_buf()
2021 ldata->icanon); in copy_from_read_buf()
2022 zero_buffer(tty, read_buf_addr(ldata, tail), n); in copy_from_read_buf()
2023 smp_store_release(&ldata->read_tail, ldata->read_tail + n); in copy_from_read_buf()
2025 if (L_EXTPROC(tty) && ldata->icanon && is_eof && in copy_from_read_buf()
2026 (head == ldata->read_tail)) in copy_from_read_buf()
2061 struct n_tty_data *ldata = tty->disc_data; in canon_copy_from_read_buf() local
2071 n = min(*nr + 1, smp_load_acquire(&ldata->canon_head) - ldata->read_tail); in canon_copy_from_read_buf()
2073 tail = ldata->read_tail & (N_TTY_BUF_SIZE - 1); in canon_copy_from_read_buf()
2079 eol = find_next_bit(ldata->read_flags, size, tail); in canon_copy_from_read_buf()
2083 eol = find_next_bit(ldata->read_flags, more, 0); in canon_copy_from_read_buf()
2095 if (!found || read_buf(ldata, eol) != __DISABLED_CHAR) { in canon_copy_from_read_buf()
2104 ret = tty_copy_to_user(tty, *b, read_buf_addr(ldata, tail), size); in canon_copy_from_read_buf()
2107 ret = tty_copy_to_user(tty, *b + size, ldata->read_buf, n - size); in canon_copy_from_read_buf()
2109 ret = tty_copy_to_user(tty, *b, read_buf_addr(ldata, tail), n); in canon_copy_from_read_buf()
2117 clear_bit(eol, ldata->read_flags); in canon_copy_from_read_buf()
2118 smp_store_release(&ldata->read_tail, ldata->read_tail + c); in canon_copy_from_read_buf()
2121 if (!ldata->push) in canon_copy_from_read_buf()
2122 ldata->line_start = ldata->read_tail; in canon_copy_from_read_buf()
2124 ldata->push = 0; in canon_copy_from_read_buf()
2183 struct n_tty_data *ldata = tty->disc_data; in n_tty_read() local
2201 if (!mutex_trylock(&ldata->atomic_read_lock)) in n_tty_read()
2204 if (mutex_lock_interruptible(&ldata->atomic_read_lock)) in n_tty_read()
2212 if (!ldata->icanon) { in n_tty_read()
2217 ldata->minimum_to_wake = 1; in n_tty_read()
2219 (ldata->minimum_to_wake > minimum)) in n_tty_read()
2220 ldata->minimum_to_wake = minimum; in n_tty_read()
2223 ldata->minimum_to_wake = minimum = 1; in n_tty_read()
2228 tail = ldata->read_tail; in n_tty_read()
2250 if (((minimum - (b - buf)) < ldata->minimum_to_wake) && in n_tty_read()
2252 ldata->minimum_to_wake = (minimum - (b - buf)); in n_tty_read()
2291 if (ldata->icanon && !L_EXTPROC(tty)) { in n_tty_read()
2323 if (tail != ldata->read_tail) in n_tty_read()
2329 ldata->minimum_to_wake = minimum; in n_tty_read()
2331 mutex_unlock(&ldata->atomic_read_lock); in n_tty_read()
2412 struct n_tty_data *ldata = tty->disc_data; in n_tty_write() local
2415 mutex_lock(&ldata->output_lock); in n_tty_write()
2417 mutex_unlock(&ldata->output_lock); in n_tty_write()
2465 struct n_tty_data *ldata = tty->disc_data; in n_tty_poll() local
2485 ldata->minimum_to_wake = MIN_CHAR(tty); in n_tty_poll()
2487 ldata->minimum_to_wake = 1; in n_tty_poll()
2496 static unsigned long inq_canon(struct n_tty_data *ldata) in inq_canon() argument
2500 if (ldata->canon_head == ldata->read_tail) in inq_canon()
2502 head = ldata->canon_head; in inq_canon()
2503 tail = ldata->read_tail; in inq_canon()
2507 if (test_bit(tail & (N_TTY_BUF_SIZE - 1), ldata->read_flags) && in inq_canon()
2508 read_buf(ldata, tail) == __DISABLED_CHAR) in inq_canon()
2518 struct n_tty_data *ldata = tty->disc_data; in n_tty_ioctl() local
2527 retval = inq_canon(ldata); in n_tty_ioctl()
2529 retval = read_cnt(ldata); in n_tty_ioctl()
2539 struct n_tty_data *ldata = tty->disc_data; in n_tty_fasync() local
2543 ldata->minimum_to_wake = 1; in n_tty_fasync()
2545 ldata->minimum_to_wake = N_TTY_BUF_SIZE; in n_tty_fasync()