Lines Matching refs:ldata
131 static inline size_t read_cnt(struct n_tty_data *ldata) in read_cnt() argument
133 return ldata->read_head - ldata->read_tail; in read_cnt()
136 static inline unsigned char read_buf(struct n_tty_data *ldata, size_t i) in read_buf() argument
138 return ldata->read_buf[i & (N_TTY_BUF_SIZE - 1)]; in read_buf()
141 static inline unsigned char *read_buf_addr(struct n_tty_data *ldata, size_t i) in read_buf_addr() argument
143 return &ldata->read_buf[i & (N_TTY_BUF_SIZE - 1)]; in read_buf_addr()
146 static inline unsigned char echo_buf(struct n_tty_data *ldata, size_t i) in echo_buf() argument
148 return ldata->echo_buf[i & (N_TTY_BUF_SIZE - 1)]; in echo_buf()
151 static inline unsigned char *echo_buf_addr(struct n_tty_data *ldata, size_t i) in echo_buf_addr() argument
153 return &ldata->echo_buf[i & (N_TTY_BUF_SIZE - 1)]; in echo_buf_addr()
159 struct n_tty_data *ldata = tty->disc_data; in tty_put_user() local
161 tty_audit_add_data(tty, &x, 1, ldata->icanon); in tty_put_user()
170 struct n_tty_data *ldata = tty->disc_data; in tty_copy_to_user() local
172 tty_audit_add_data(tty, from, n, ldata->icanon); in tty_copy_to_user()
190 struct n_tty_data *ldata = tty->disc_data; in n_tty_kick_worker() local
193 if (unlikely(ldata->no_room)) { in n_tty_kick_worker()
194 ldata->no_room = 0; in n_tty_kick_worker()
210 struct n_tty_data *ldata = tty->disc_data; in chars_in_buffer() local
213 if (!ldata->icanon) in chars_in_buffer()
214 n = ldata->commit_head - ldata->read_tail; in chars_in_buffer()
216 n = ldata->canon_head - ldata->read_tail; in chars_in_buffer()
237 struct n_tty_data *ldata = tty->disc_data; in n_tty_check_throttle() local
244 if (ldata->icanon && ldata->canon_head == ldata->read_tail) in n_tty_check_throttle()
250 if (N_TTY_BUF_SIZE - read_cnt(ldata) >= TTY_THRESHOLD_THROTTLE) in n_tty_check_throttle()
305 static inline void put_tty_queue(unsigned char c, struct n_tty_data *ldata) in put_tty_queue() argument
307 *read_buf_addr(ldata, ldata->read_head) = c; in put_tty_queue()
308 ldata->read_head++; in put_tty_queue()
322 static void reset_buffer_flags(struct n_tty_data *ldata) in reset_buffer_flags() argument
324 ldata->read_head = ldata->canon_head = ldata->read_tail = 0; in reset_buffer_flags()
325 ldata->echo_head = ldata->echo_tail = ldata->echo_commit = 0; in reset_buffer_flags()
326 ldata->commit_head = 0; in reset_buffer_flags()
327 ldata->echo_mark = 0; in reset_buffer_flags()
328 ldata->line_start = 0; in reset_buffer_flags()
330 ldata->erasing = 0; in reset_buffer_flags()
331 bitmap_zero(ldata->read_flags, N_TTY_BUF_SIZE); in reset_buffer_flags()
332 ldata->push = 0; in reset_buffer_flags()
445 struct n_tty_data *ldata = tty->disc_data; in do_output_char() local
454 ldata->column = 0; in do_output_char()
458 ldata->canon_column = ldata->column = 0; in do_output_char()
462 ldata->canon_column = ldata->column; in do_output_char()
465 if (O_ONOCR(tty) && ldata->column == 0) in do_output_char()
470 ldata->canon_column = ldata->column = 0; in do_output_char()
473 ldata->canon_column = ldata->column = 0; in do_output_char()
476 spaces = 8 - (ldata->column & 7); in do_output_char()
480 ldata->column += spaces; in do_output_char()
484 ldata->column += spaces; in do_output_char()
487 if (ldata->column > 0) in do_output_char()
488 ldata->column--; in do_output_char()
495 ldata->column++; in do_output_char()
520 struct n_tty_data *ldata = tty->disc_data; in process_output() local
523 mutex_lock(&ldata->output_lock); in process_output()
528 mutex_unlock(&ldata->output_lock); in process_output()
557 struct n_tty_data *ldata = tty->disc_data; in process_output_block() local
562 mutex_lock(&ldata->output_lock); in process_output_block()
566 mutex_unlock(&ldata->output_lock); in process_output_block()
578 ldata->column = 0; in process_output_block()
581 ldata->canon_column = ldata->column; in process_output_block()
584 if (O_ONOCR(tty) && ldata->column == 0) in process_output_block()
588 ldata->canon_column = ldata->column = 0; in process_output_block()
593 if (ldata->column > 0) in process_output_block()
594 ldata->column--; in process_output_block()
601 ldata->column++; in process_output_block()
609 mutex_unlock(&ldata->output_lock); in process_output_block()
640 struct n_tty_data *ldata = tty->disc_data; in __process_echoes() local
647 tail = ldata->echo_tail; in __process_echoes()
648 while (ldata->echo_commit != tail) { in __process_echoes()
649 c = echo_buf(ldata, tail); in __process_echoes()
659 op = echo_buf(ldata, tail + 1); in __process_echoes()
665 num_chars = echo_buf(ldata, tail + 2); in __process_echoes()
678 num_chars += ldata->canon_column; in __process_echoes()
688 if (ldata->column > 0) in __process_echoes()
689 ldata->column--; in __process_echoes()
695 ldata->canon_column = ldata->column; in __process_echoes()
700 if (ldata->column > 0) in __process_echoes()
701 ldata->column--; in __process_echoes()
712 ldata->column++; in __process_echoes()
733 ldata->column += 2; in __process_echoes()
759 while (ldata->echo_commit - tail >= ECHO_DISCARD_WATERMARK) { in __process_echoes()
760 if (echo_buf(ldata, tail) == ECHO_OP_START) { in __process_echoes()
761 if (echo_buf(ldata, tail + 1) == ECHO_OP_ERASE_TAB) in __process_echoes()
769 ldata->echo_tail = tail; in __process_echoes()
775 struct n_tty_data *ldata = tty->disc_data; in commit_echoes() local
779 head = ldata->echo_head; in commit_echoes()
780 ldata->echo_mark = head; in commit_echoes()
781 old = ldata->echo_commit - ldata->echo_tail; in commit_echoes()
786 nr = head - ldata->echo_tail; in commit_echoes()
790 mutex_lock(&ldata->output_lock); in commit_echoes()
791 ldata->echo_commit = head; in commit_echoes()
793 mutex_unlock(&ldata->output_lock); in commit_echoes()
801 struct n_tty_data *ldata = tty->disc_data; in process_echoes() local
804 if (ldata->echo_mark == ldata->echo_tail) in process_echoes()
807 mutex_lock(&ldata->output_lock); in process_echoes()
808 ldata->echo_commit = ldata->echo_mark; in process_echoes()
810 mutex_unlock(&ldata->output_lock); in process_echoes()
819 struct n_tty_data *ldata = tty->disc_data; in flush_echoes() local
822 ldata->echo_commit == ldata->echo_head) in flush_echoes()
825 mutex_lock(&ldata->output_lock); in flush_echoes()
826 ldata->echo_commit = ldata->echo_head; in flush_echoes()
828 mutex_unlock(&ldata->output_lock); in flush_echoes()
839 static inline void add_echo_byte(unsigned char c, struct n_tty_data *ldata) in add_echo_byte() argument
841 *echo_buf_addr(ldata, ldata->echo_head++) = c; in add_echo_byte()
851 static void echo_move_back_col(struct n_tty_data *ldata) in echo_move_back_col() argument
853 add_echo_byte(ECHO_OP_START, ldata); in echo_move_back_col()
854 add_echo_byte(ECHO_OP_MOVE_BACK_COL, ldata); in echo_move_back_col()
865 static void echo_set_canon_col(struct n_tty_data *ldata) in echo_set_canon_col() argument
867 add_echo_byte(ECHO_OP_START, ldata); in echo_set_canon_col()
868 add_echo_byte(ECHO_OP_SET_CANON_COL, ldata); in echo_set_canon_col()
887 struct n_tty_data *ldata) in echo_erase_tab() argument
889 add_echo_byte(ECHO_OP_START, ldata); in echo_erase_tab()
890 add_echo_byte(ECHO_OP_ERASE_TAB, ldata); in echo_erase_tab()
899 add_echo_byte(num_chars, ldata); in echo_erase_tab()
913 static void echo_char_raw(unsigned char c, struct n_tty_data *ldata) in echo_char_raw() argument
916 add_echo_byte(ECHO_OP_START, ldata); in echo_char_raw()
917 add_echo_byte(ECHO_OP_START, ldata); in echo_char_raw()
919 add_echo_byte(c, ldata); in echo_char_raw()
937 struct n_tty_data *ldata = tty->disc_data; in echo_char() local
940 add_echo_byte(ECHO_OP_START, ldata); in echo_char()
941 add_echo_byte(ECHO_OP_START, ldata); in echo_char()
944 add_echo_byte(ECHO_OP_START, ldata); in echo_char()
945 add_echo_byte(c, ldata); in echo_char()
954 static inline void finish_erasing(struct n_tty_data *ldata) in finish_erasing() argument
956 if (ldata->erasing) { in finish_erasing()
957 echo_char_raw('/', ldata); in finish_erasing()
958 ldata->erasing = 0; in finish_erasing()
977 struct n_tty_data *ldata = tty->disc_data; in eraser() local
983 if (ldata->read_head == ldata->canon_head) { in eraser()
993 ldata->read_head = ldata->canon_head; in eraser()
997 ldata->read_head = ldata->canon_head; in eraser()
998 finish_erasing(ldata); in eraser()
1002 echo_char_raw('\n', ldata); in eraser()
1009 while (ldata->read_head != ldata->canon_head) { in eraser()
1010 head = ldata->read_head; in eraser()
1015 c = read_buf(ldata, head); in eraser()
1016 } while (is_continuation(c, tty) && head != ldata->canon_head); in eraser()
1029 cnt = ldata->read_head - head; in eraser()
1030 ldata->read_head = head; in eraser()
1033 if (!ldata->erasing) { in eraser()
1034 echo_char_raw('\\', ldata); in eraser()
1035 ldata->erasing = 1; in eraser()
1041 echo_char_raw(read_buf(ldata, head), ldata); in eraser()
1042 echo_move_back_col(ldata); in eraser()
1049 size_t tail = ldata->read_head; in eraser()
1058 while (tail != ldata->canon_head) { in eraser()
1060 c = read_buf(ldata, tail); in eraser()
1071 echo_erase_tab(num_chars, after_tab, ldata); in eraser()
1074 echo_char_raw('\b', ldata); in eraser()
1075 echo_char_raw(' ', ldata); in eraser()
1076 echo_char_raw('\b', ldata); in eraser()
1079 echo_char_raw('\b', ldata); in eraser()
1080 echo_char_raw(' ', ldata); in eraser()
1081 echo_char_raw('\b', ldata); in eraser()
1088 if (ldata->read_head == ldata->canon_head && L_ECHO(tty)) in eraser()
1089 finish_erasing(ldata); in eraser()
1118 struct n_tty_data *ldata = tty->disc_data; in isig() local
1131 mutex_lock(&ldata->output_lock); in isig()
1132 ldata->echo_head = ldata->echo_tail = 0; in isig()
1133 ldata->echo_mark = ldata->echo_commit = 0; in isig()
1134 mutex_unlock(&ldata->output_lock); in isig()
1166 struct n_tty_data *ldata = tty->disc_data; in n_tty_receive_break() local
1175 put_tty_queue('\377', ldata); in n_tty_receive_break()
1176 put_tty_queue('\0', ldata); in n_tty_receive_break()
1178 put_tty_queue('\0', ldata); in n_tty_receive_break()
1198 struct n_tty_data *ldata = tty->disc_data; in n_tty_receive_overrun() local
1201 ldata->num_overrun++; in n_tty_receive_overrun()
1202 if (time_after(jiffies, ldata->overrun_time + HZ) || in n_tty_receive_overrun()
1203 time_after(ldata->overrun_time, jiffies)) { in n_tty_receive_overrun()
1206 ldata->num_overrun); in n_tty_receive_overrun()
1207 ldata->overrun_time = jiffies; in n_tty_receive_overrun()
1208 ldata->num_overrun = 0; in n_tty_receive_overrun()
1225 struct n_tty_data *ldata = tty->disc_data; in n_tty_receive_parity_error() local
1231 put_tty_queue('\377', ldata); in n_tty_receive_parity_error()
1232 put_tty_queue('\0', ldata); in n_tty_receive_parity_error()
1233 put_tty_queue(c, ldata); in n_tty_receive_parity_error()
1235 put_tty_queue('\0', ldata); in n_tty_receive_parity_error()
1237 put_tty_queue(c, ldata); in n_tty_receive_parity_error()
1275 struct n_tty_data *ldata = tty->disc_data; in n_tty_receive_char_special() local
1315 if (ldata->icanon) { in n_tty_receive_char_special()
1323 ldata->lnext = 1; in n_tty_receive_char_special()
1325 finish_erasing(ldata); in n_tty_receive_char_special()
1327 echo_char_raw('^', ldata); in n_tty_receive_char_special()
1328 echo_char_raw('\b', ldata); in n_tty_receive_char_special()
1335 size_t tail = ldata->canon_head; in n_tty_receive_char_special()
1337 finish_erasing(ldata); in n_tty_receive_char_special()
1339 echo_char_raw('\n', ldata); in n_tty_receive_char_special()
1340 while (tail != ldata->read_head) { in n_tty_receive_char_special()
1341 echo_char(read_buf(ldata, tail), tty); in n_tty_receive_char_special()
1349 echo_char_raw('\n', ldata); in n_tty_receive_char_special()
1365 if (ldata->canon_head == ldata->read_head) in n_tty_receive_char_special()
1366 echo_set_canon_col(ldata); in n_tty_receive_char_special()
1375 put_tty_queue(c, ldata); in n_tty_receive_char_special()
1378 set_bit(ldata->read_head & (N_TTY_BUF_SIZE - 1), ldata->read_flags); in n_tty_receive_char_special()
1379 put_tty_queue(c, ldata); in n_tty_receive_char_special()
1380 smp_store_release(&ldata->canon_head, ldata->read_head); in n_tty_receive_char_special()
1388 finish_erasing(ldata); in n_tty_receive_char_special()
1390 echo_char_raw('\n', ldata); in n_tty_receive_char_special()
1393 if (ldata->canon_head == ldata->read_head) in n_tty_receive_char_special()
1394 echo_set_canon_col(ldata); in n_tty_receive_char_special()
1402 put_tty_queue(c, ldata); in n_tty_receive_char_special()
1404 put_tty_queue(c, ldata); in n_tty_receive_char_special()
1411 struct n_tty_data *ldata = tty->disc_data; in n_tty_receive_char_inline() local
1418 finish_erasing(ldata); in n_tty_receive_char_inline()
1420 if (ldata->canon_head == ldata->read_head) in n_tty_receive_char_inline()
1421 echo_set_canon_col(ldata); in n_tty_receive_char_inline()
1427 put_tty_queue(c, ldata); in n_tty_receive_char_inline()
1428 put_tty_queue(c, ldata); in n_tty_receive_char_inline()
1439 struct n_tty_data *ldata = tty->disc_data; in n_tty_receive_char_fast() local
1446 finish_erasing(ldata); in n_tty_receive_char_fast()
1448 if (ldata->canon_head == ldata->read_head) in n_tty_receive_char_fast()
1449 echo_set_canon_col(ldata); in n_tty_receive_char_fast()
1453 put_tty_queue(c, ldata); in n_tty_receive_char_fast()
1502 struct n_tty_data *ldata = tty->disc_data; in n_tty_receive_char_lnext() local
1504 ldata->lnext = 0; in n_tty_receive_char_lnext()
1519 struct n_tty_data *ldata = tty->disc_data; in n_tty_receive_buf_real_raw() local
1522 head = ldata->read_head & (N_TTY_BUF_SIZE - 1); in n_tty_receive_buf_real_raw()
1524 memcpy(read_buf_addr(ldata, head), cp, n); in n_tty_receive_buf_real_raw()
1525 ldata->read_head += n; in n_tty_receive_buf_real_raw()
1529 head = ldata->read_head & (N_TTY_BUF_SIZE - 1); in n_tty_receive_buf_real_raw()
1531 memcpy(read_buf_addr(ldata, head), cp, n); in n_tty_receive_buf_real_raw()
1532 ldata->read_head += n; in n_tty_receive_buf_real_raw()
1539 struct n_tty_data *ldata = tty->disc_data; in n_tty_receive_buf_raw() local
1546 put_tty_queue(*cp++, ldata); in n_tty_receive_buf_raw()
1572 struct n_tty_data *ldata = tty->disc_data; in n_tty_receive_buf_standard() local
1586 put_tty_queue(c, ldata); in n_tty_receive_buf_standard()
1589 if (!test_bit(c, ldata->char_map)) in n_tty_receive_buf_standard()
1606 struct n_tty_data *ldata = tty->disc_data; in n_tty_receive_buf_fast() local
1615 if (!test_bit(c, ldata->char_map)) in n_tty_receive_buf_fast()
1631 struct n_tty_data *ldata = tty->disc_data; in __receive_buf() local
1634 if (ldata->real_raw) in __receive_buf()
1636 else if (ldata->raw || (L_EXTPROC(tty) && !preops)) in __receive_buf()
1641 if (ldata->lnext) { in __receive_buf()
1660 if (ldata->icanon && !L_EXTPROC(tty)) in __receive_buf()
1664 smp_store_release(&ldata->commit_head, ldata->read_head); in __receive_buf()
1666 if ((read_cnt(ldata) >= ldata->minimum_to_wake) || L_EXTPROC(tty)) { in __receive_buf()
1709 struct n_tty_data *ldata = tty->disc_data; in n_tty_receive_buf_common() local
1728 size_t tail = smp_load_acquire(&ldata->read_tail); in n_tty_receive_buf_common()
1730 room = N_TTY_BUF_SIZE - (ldata->read_head - tail); in n_tty_receive_buf_common()
1735 overflow = ldata->icanon && ldata->canon_head == tail; in n_tty_receive_buf_common()
1737 ldata->read_head--; in n_tty_receive_buf_common()
1739 ldata->no_room = flow && !room; in n_tty_receive_buf_common()
1809 struct n_tty_data *ldata = tty->disc_data; in n_tty_set_termios() local
1812 bitmap_zero(ldata->read_flags, N_TTY_BUF_SIZE); in n_tty_set_termios()
1813 ldata->line_start = ldata->read_tail; in n_tty_set_termios()
1814 if (!L_ICANON(tty) || !read_cnt(ldata)) { in n_tty_set_termios()
1815 ldata->canon_head = ldata->read_tail; in n_tty_set_termios()
1816 ldata->push = 0; in n_tty_set_termios()
1818 set_bit((ldata->read_head - 1) & (N_TTY_BUF_SIZE - 1), in n_tty_set_termios()
1819 ldata->read_flags); in n_tty_set_termios()
1820 ldata->canon_head = ldata->read_head; in n_tty_set_termios()
1821 ldata->push = 1; in n_tty_set_termios()
1823 ldata->commit_head = ldata->read_head; in n_tty_set_termios()
1824 ldata->erasing = 0; in n_tty_set_termios()
1825 ldata->lnext = 0; in n_tty_set_termios()
1828 ldata->icanon = (L_ICANON(tty) != 0); in n_tty_set_termios()
1834 bitmap_zero(ldata->char_map, 256); in n_tty_set_termios()
1837 set_bit('\r', ldata->char_map); in n_tty_set_termios()
1839 set_bit('\n', ldata->char_map); in n_tty_set_termios()
1842 set_bit(ERASE_CHAR(tty), ldata->char_map); in n_tty_set_termios()
1843 set_bit(KILL_CHAR(tty), ldata->char_map); in n_tty_set_termios()
1844 set_bit(EOF_CHAR(tty), ldata->char_map); in n_tty_set_termios()
1845 set_bit('\n', ldata->char_map); in n_tty_set_termios()
1846 set_bit(EOL_CHAR(tty), ldata->char_map); in n_tty_set_termios()
1848 set_bit(WERASE_CHAR(tty), ldata->char_map); in n_tty_set_termios()
1849 set_bit(LNEXT_CHAR(tty), ldata->char_map); in n_tty_set_termios()
1850 set_bit(EOL2_CHAR(tty), ldata->char_map); in n_tty_set_termios()
1853 ldata->char_map); in n_tty_set_termios()
1857 set_bit(START_CHAR(tty), ldata->char_map); in n_tty_set_termios()
1858 set_bit(STOP_CHAR(tty), ldata->char_map); in n_tty_set_termios()
1861 set_bit(INTR_CHAR(tty), ldata->char_map); in n_tty_set_termios()
1862 set_bit(QUIT_CHAR(tty), ldata->char_map); in n_tty_set_termios()
1863 set_bit(SUSP_CHAR(tty), ldata->char_map); in n_tty_set_termios()
1865 clear_bit(__DISABLED_CHAR, ldata->char_map); in n_tty_set_termios()
1866 ldata->raw = 0; in n_tty_set_termios()
1867 ldata->real_raw = 0; in n_tty_set_termios()
1869 ldata->raw = 1; in n_tty_set_termios()
1873 ldata->real_raw = 1; in n_tty_set_termios()
1875 ldata->real_raw = 0; in n_tty_set_termios()
1903 struct n_tty_data *ldata = tty->disc_data; in n_tty_close() local
1908 vfree(ldata); in n_tty_close()
1924 struct n_tty_data *ldata; in n_tty_open() local
1927 ldata = vmalloc(sizeof(*ldata)); in n_tty_open()
1928 if (!ldata) in n_tty_open()
1931 ldata->overrun_time = jiffies; in n_tty_open()
1932 mutex_init(&ldata->atomic_read_lock); in n_tty_open()
1933 mutex_init(&ldata->output_lock); in n_tty_open()
1935 tty->disc_data = ldata; in n_tty_open()
1937 ldata->column = 0; in n_tty_open()
1938 ldata->canon_column = 0; in n_tty_open()
1939 ldata->minimum_to_wake = 1; in n_tty_open()
1940 ldata->num_overrun = 0; in n_tty_open()
1941 ldata->no_room = 0; in n_tty_open()
1942 ldata->lnext = 0; in n_tty_open()
1956 struct n_tty_data *ldata = tty->disc_data; in input_available_p() local
1959 if (ldata->icanon && !L_EXTPROC(tty)) in input_available_p()
1960 return ldata->canon_head != ldata->read_tail; in input_available_p()
1962 return ldata->commit_head - ldata->read_tail >= amt; in input_available_p()
1990 struct n_tty_data *ldata = tty->disc_data; in copy_from_read_buf() local
1994 size_t head = smp_load_acquire(&ldata->commit_head); in copy_from_read_buf()
1995 size_t tail = ldata->read_tail & (N_TTY_BUF_SIZE - 1); in copy_from_read_buf()
1998 n = min(head - ldata->read_tail, N_TTY_BUF_SIZE - tail); in copy_from_read_buf()
2001 retval = copy_to_user(*b, read_buf_addr(ldata, tail), n); in copy_from_read_buf()
2003 is_eof = n == 1 && read_buf(ldata, tail) == EOF_CHAR(tty); in copy_from_read_buf()
2004 tty_audit_add_data(tty, read_buf_addr(ldata, tail), n, in copy_from_read_buf()
2005 ldata->icanon); in copy_from_read_buf()
2006 smp_store_release(&ldata->read_tail, ldata->read_tail + n); in copy_from_read_buf()
2008 if (L_EXTPROC(tty) && ldata->icanon && is_eof && in copy_from_read_buf()
2009 (head == ldata->read_tail)) in copy_from_read_buf()
2044 struct n_tty_data *ldata = tty->disc_data; in canon_copy_from_read_buf() local
2052 n = min(*nr, smp_load_acquire(&ldata->canon_head) - ldata->read_tail); in canon_copy_from_read_buf()
2056 tail = ldata->read_tail & (N_TTY_BUF_SIZE - 1); in canon_copy_from_read_buf()
2062 eol = find_next_bit(ldata->read_flags, size, tail); in canon_copy_from_read_buf()
2066 eol = find_next_bit(ldata->read_flags, more, 0); in canon_copy_from_read_buf()
2079 if (found && !ldata->push && read_buf(ldata, eol) == __DISABLED_CHAR) { in canon_copy_from_read_buf()
2081 eof_push = !n && ldata->read_tail != ldata->line_start; in canon_copy_from_read_buf()
2088 ret = tty_copy_to_user(tty, *b, read_buf_addr(ldata, tail), size); in canon_copy_from_read_buf()
2091 ret = tty_copy_to_user(tty, *b + size, ldata->read_buf, n - size); in canon_copy_from_read_buf()
2093 ret = tty_copy_to_user(tty, *b, read_buf_addr(ldata, tail), n); in canon_copy_from_read_buf()
2101 clear_bit(eol, ldata->read_flags); in canon_copy_from_read_buf()
2102 smp_store_release(&ldata->read_tail, ldata->read_tail + c); in canon_copy_from_read_buf()
2105 if (!ldata->push) in canon_copy_from_read_buf()
2106 ldata->line_start = ldata->read_tail; in canon_copy_from_read_buf()
2108 ldata->push = 0; in canon_copy_from_read_buf()
2180 struct n_tty_data *ldata = tty->disc_data; in n_tty_read() local
2198 if (!mutex_trylock(&ldata->atomic_read_lock)) in n_tty_read()
2201 if (mutex_lock_interruptible(&ldata->atomic_read_lock)) in n_tty_read()
2209 if (!ldata->icanon) { in n_tty_read()
2214 ldata->minimum_to_wake = 1; in n_tty_read()
2216 (ldata->minimum_to_wake > minimum)) in n_tty_read()
2217 ldata->minimum_to_wake = minimum; in n_tty_read()
2220 ldata->minimum_to_wake = minimum = 1; in n_tty_read()
2225 tail = ldata->read_tail; in n_tty_read()
2247 if (((minimum - (b - buf)) < ldata->minimum_to_wake) && in n_tty_read()
2249 ldata->minimum_to_wake = (minimum - (b - buf)); in n_tty_read()
2282 if (ldata->icanon && !L_EXTPROC(tty)) { in n_tty_read()
2317 if (tail != ldata->read_tail) in n_tty_read()
2323 ldata->minimum_to_wake = minimum; in n_tty_read()
2325 mutex_unlock(&ldata->atomic_read_lock); in n_tty_read()
2406 struct n_tty_data *ldata = tty->disc_data; in n_tty_write() local
2409 mutex_lock(&ldata->output_lock); in n_tty_write()
2411 mutex_unlock(&ldata->output_lock); in n_tty_write()
2459 struct n_tty_data *ldata = tty->disc_data; in n_tty_poll() local
2479 ldata->minimum_to_wake = MIN_CHAR(tty); in n_tty_poll()
2481 ldata->minimum_to_wake = 1; in n_tty_poll()
2490 static unsigned long inq_canon(struct n_tty_data *ldata) in inq_canon() argument
2494 if (ldata->canon_head == ldata->read_tail) in inq_canon()
2496 head = ldata->canon_head; in inq_canon()
2497 tail = ldata->read_tail; in inq_canon()
2501 if (test_bit(tail & (N_TTY_BUF_SIZE - 1), ldata->read_flags) && in inq_canon()
2502 read_buf(ldata, tail) == __DISABLED_CHAR) in inq_canon()
2512 struct n_tty_data *ldata = tty->disc_data; in n_tty_ioctl() local
2521 retval = inq_canon(ldata); in n_tty_ioctl()
2523 retval = read_cnt(ldata); in n_tty_ioctl()
2533 struct n_tty_data *ldata = tty->disc_data; in n_tty_fasync() local
2537 ldata->minimum_to_wake = 1; in n_tty_fasync()
2539 ldata->minimum_to_wake = N_TTY_BUF_SIZE; in n_tty_fasync()