Lines Matching refs:ldata
135 static inline size_t read_cnt(struct n_tty_data *ldata) in read_cnt() argument
137 return ldata->read_head - ldata->read_tail; in read_cnt()
140 static inline unsigned char read_buf(struct n_tty_data *ldata, size_t i) in read_buf() argument
142 return ldata->read_buf[i & (N_TTY_BUF_SIZE - 1)]; in read_buf()
145 static inline unsigned char *read_buf_addr(struct n_tty_data *ldata, size_t i) in read_buf_addr() argument
147 return &ldata->read_buf[i & (N_TTY_BUF_SIZE - 1)]; in read_buf_addr()
150 static inline unsigned char echo_buf(struct n_tty_data *ldata, size_t i) in echo_buf() argument
153 return ldata->echo_buf[i & (N_TTY_BUF_SIZE - 1)]; in echo_buf()
156 static inline unsigned char *echo_buf_addr(struct n_tty_data *ldata, size_t i) in echo_buf_addr() argument
158 return &ldata->echo_buf[i & (N_TTY_BUF_SIZE - 1)]; in echo_buf_addr()
173 struct n_tty_data *ldata = tty->disc_data; in tty_copy() local
175 void *from = read_buf_addr(ldata, tail); in tty_copy()
183 from = ldata->read_buf; in tty_copy()
204 struct n_tty_data *ldata = tty->disc_data; in n_tty_kick_worker() local
207 if (unlikely(ldata->no_room)) { in n_tty_kick_worker()
208 ldata->no_room = 0; in n_tty_kick_worker()
224 struct n_tty_data *ldata = tty->disc_data; in chars_in_buffer() local
227 if (!ldata->icanon) in chars_in_buffer()
228 n = ldata->commit_head - ldata->read_tail; in chars_in_buffer()
230 n = ldata->canon_head - ldata->read_tail; in chars_in_buffer()
249 struct n_tty_data *ldata = tty->disc_data; in n_tty_check_throttle() local
256 if (ldata->icanon && ldata->canon_head == ldata->read_tail) in n_tty_check_throttle()
262 if (N_TTY_BUF_SIZE - read_cnt(ldata) >= TTY_THRESHOLD_THROTTLE) in n_tty_check_throttle()
313 static inline void put_tty_queue(unsigned char c, struct n_tty_data *ldata) in put_tty_queue() argument
315 *read_buf_addr(ldata, ldata->read_head) = c; in put_tty_queue()
316 ldata->read_head++; in put_tty_queue()
330 static void reset_buffer_flags(struct n_tty_data *ldata) in reset_buffer_flags() argument
332 ldata->read_head = ldata->canon_head = ldata->read_tail = 0; in reset_buffer_flags()
333 ldata->commit_head = 0; in reset_buffer_flags()
334 ldata->line_start = 0; in reset_buffer_flags()
336 ldata->erasing = 0; in reset_buffer_flags()
337 bitmap_zero(ldata->read_flags, N_TTY_BUF_SIZE); in reset_buffer_flags()
338 ldata->push = 0; in reset_buffer_flags()
340 ldata->lookahead_count = 0; in reset_buffer_flags()
426 struct n_tty_data *ldata = tty->disc_data; in do_output_char() local
435 ldata->column = 0; in do_output_char()
439 ldata->canon_column = ldata->column = 0; in do_output_char()
443 ldata->canon_column = ldata->column; in do_output_char()
446 if (O_ONOCR(tty) && ldata->column == 0) in do_output_char()
451 ldata->canon_column = ldata->column = 0; in do_output_char()
454 ldata->canon_column = ldata->column = 0; in do_output_char()
457 spaces = 8 - (ldata->column & 7); in do_output_char()
461 ldata->column += spaces; in do_output_char()
465 ldata->column += spaces; in do_output_char()
468 if (ldata->column > 0) in do_output_char()
469 ldata->column--; in do_output_char()
476 ldata->column++; in do_output_char()
500 struct n_tty_data *ldata = tty->disc_data; in process_output() local
503 mutex_lock(&ldata->output_lock); in process_output()
508 mutex_unlock(&ldata->output_lock); in process_output()
536 struct n_tty_data *ldata = tty->disc_data; in process_output_block() local
541 mutex_lock(&ldata->output_lock); in process_output_block()
545 mutex_unlock(&ldata->output_lock); in process_output_block()
557 ldata->column = 0; in process_output_block()
560 ldata->canon_column = ldata->column; in process_output_block()
563 if (O_ONOCR(tty) && ldata->column == 0) in process_output_block()
567 ldata->canon_column = ldata->column = 0; in process_output_block()
572 if (ldata->column > 0) in process_output_block()
573 ldata->column--; in process_output_block()
580 ldata->column++; in process_output_block()
588 mutex_unlock(&ldata->output_lock); in process_output_block()
616 struct n_tty_data *ldata = tty->disc_data; in __process_echoes() local
623 tail = ldata->echo_tail; in __process_echoes()
624 while (MASK(ldata->echo_commit) != MASK(tail)) { in __process_echoes()
625 c = echo_buf(ldata, tail); in __process_echoes()
635 if (MASK(ldata->echo_commit) == MASK(tail + 1)) in __process_echoes()
642 op = echo_buf(ldata, tail + 1); in __process_echoes()
648 if (MASK(ldata->echo_commit) == MASK(tail + 2)) in __process_echoes()
650 num_chars = echo_buf(ldata, tail + 2); in __process_echoes()
663 num_chars += ldata->canon_column; in __process_echoes()
673 if (ldata->column > 0) in __process_echoes()
674 ldata->column--; in __process_echoes()
680 ldata->canon_column = ldata->column; in __process_echoes()
685 if (ldata->column > 0) in __process_echoes()
686 ldata->column--; in __process_echoes()
697 ldata->column++; in __process_echoes()
718 ldata->column += 2; in __process_echoes()
744 while (ldata->echo_commit > tail && in __process_echoes()
745 ldata->echo_commit - tail >= ECHO_DISCARD_WATERMARK) { in __process_echoes()
746 if (echo_buf(ldata, tail) == ECHO_OP_START) { in __process_echoes()
747 if (echo_buf(ldata, tail + 1) == ECHO_OP_ERASE_TAB) in __process_echoes()
756 ldata->echo_tail = tail; in __process_echoes()
762 struct n_tty_data *ldata = tty->disc_data; in commit_echoes() local
766 mutex_lock(&ldata->output_lock); in commit_echoes()
767 head = ldata->echo_head; in commit_echoes()
768 ldata->echo_mark = head; in commit_echoes()
769 old = ldata->echo_commit - ldata->echo_tail; in commit_echoes()
774 nr = head - ldata->echo_tail; in commit_echoes()
777 mutex_unlock(&ldata->output_lock); in commit_echoes()
781 ldata->echo_commit = head; in commit_echoes()
783 mutex_unlock(&ldata->output_lock); in commit_echoes()
791 struct n_tty_data *ldata = tty->disc_data; in process_echoes() local
794 if (ldata->echo_mark == ldata->echo_tail) in process_echoes()
797 mutex_lock(&ldata->output_lock); in process_echoes()
798 ldata->echo_commit = ldata->echo_mark; in process_echoes()
800 mutex_unlock(&ldata->output_lock); in process_echoes()
809 struct n_tty_data *ldata = tty->disc_data; in flush_echoes() local
812 ldata->echo_commit == ldata->echo_head) in flush_echoes()
815 mutex_lock(&ldata->output_lock); in flush_echoes()
816 ldata->echo_commit = ldata->echo_head; in flush_echoes()
818 mutex_unlock(&ldata->output_lock); in flush_echoes()
828 static inline void add_echo_byte(unsigned char c, struct n_tty_data *ldata) in add_echo_byte() argument
830 *echo_buf_addr(ldata, ldata->echo_head) = c; in add_echo_byte()
832 ldata->echo_head++; in add_echo_byte()
841 static void echo_move_back_col(struct n_tty_data *ldata) in echo_move_back_col() argument
843 add_echo_byte(ECHO_OP_START, ldata); in echo_move_back_col()
844 add_echo_byte(ECHO_OP_MOVE_BACK_COL, ldata); in echo_move_back_col()
854 static void echo_set_canon_col(struct n_tty_data *ldata) in echo_set_canon_col() argument
856 add_echo_byte(ECHO_OP_START, ldata); in echo_set_canon_col()
857 add_echo_byte(ECHO_OP_SET_CANON_COL, ldata); in echo_set_canon_col()
874 struct n_tty_data *ldata) in echo_erase_tab() argument
876 add_echo_byte(ECHO_OP_START, ldata); in echo_erase_tab()
877 add_echo_byte(ECHO_OP_ERASE_TAB, ldata); in echo_erase_tab()
886 add_echo_byte(num_chars, ldata); in echo_erase_tab()
899 static void echo_char_raw(unsigned char c, struct n_tty_data *ldata) in echo_char_raw() argument
902 add_echo_byte(ECHO_OP_START, ldata); in echo_char_raw()
903 add_echo_byte(ECHO_OP_START, ldata); in echo_char_raw()
905 add_echo_byte(c, ldata); in echo_char_raw()
922 struct n_tty_data *ldata = tty->disc_data; in echo_char() local
925 add_echo_byte(ECHO_OP_START, ldata); in echo_char()
926 add_echo_byte(ECHO_OP_START, ldata); in echo_char()
929 add_echo_byte(ECHO_OP_START, ldata); in echo_char()
930 add_echo_byte(c, ldata); in echo_char()
938 static inline void finish_erasing(struct n_tty_data *ldata) in finish_erasing() argument
940 if (ldata->erasing) { in finish_erasing()
941 echo_char_raw('/', ldata); in finish_erasing()
942 ldata->erasing = 0; in finish_erasing()
960 struct n_tty_data *ldata = tty->disc_data; in eraser() local
966 if (ldata->read_head == ldata->canon_head) { in eraser()
976 ldata->read_head = ldata->canon_head; in eraser()
980 ldata->read_head = ldata->canon_head; in eraser()
981 finish_erasing(ldata); in eraser()
985 echo_char_raw('\n', ldata); in eraser()
992 while (MASK(ldata->read_head) != MASK(ldata->canon_head)) { in eraser()
993 head = ldata->read_head; in eraser()
998 c = read_buf(ldata, head); in eraser()
1000 MASK(head) != MASK(ldata->canon_head)); in eraser()
1013 cnt = ldata->read_head - head; in eraser()
1014 ldata->read_head = head; in eraser()
1017 if (!ldata->erasing) { in eraser()
1018 echo_char_raw('\\', ldata); in eraser()
1019 ldata->erasing = 1; in eraser()
1025 echo_char_raw(read_buf(ldata, head), ldata); in eraser()
1026 echo_move_back_col(ldata); in eraser()
1033 size_t tail = ldata->read_head; in eraser()
1042 while (MASK(tail) != MASK(ldata->canon_head)) { in eraser()
1044 c = read_buf(ldata, tail); in eraser()
1055 echo_erase_tab(num_chars, after_tab, ldata); in eraser()
1058 echo_char_raw('\b', ldata); in eraser()
1059 echo_char_raw(' ', ldata); in eraser()
1060 echo_char_raw('\b', ldata); in eraser()
1063 echo_char_raw('\b', ldata); in eraser()
1064 echo_char_raw(' ', ldata); in eraser()
1065 echo_char_raw('\b', ldata); in eraser()
1072 if (ldata->read_head == ldata->canon_head && L_ECHO(tty)) in eraser()
1073 finish_erasing(ldata); in eraser()
1102 struct n_tty_data *ldata = tty->disc_data; in isig() local
1115 mutex_lock(&ldata->output_lock); in isig()
1116 ldata->echo_head = ldata->echo_tail = 0; in isig()
1117 ldata->echo_mark = ldata->echo_commit = 0; in isig()
1118 mutex_unlock(&ldata->output_lock); in isig()
1149 struct n_tty_data *ldata = tty->disc_data; in n_tty_receive_break() local
1158 put_tty_queue('\377', ldata); in n_tty_receive_break()
1159 put_tty_queue('\0', ldata); in n_tty_receive_break()
1161 put_tty_queue('\0', ldata); in n_tty_receive_break()
1176 struct n_tty_data *ldata = tty->disc_data; in n_tty_receive_overrun() local
1178 ldata->num_overrun++; in n_tty_receive_overrun()
1179 if (time_after(jiffies, ldata->overrun_time + HZ) || in n_tty_receive_overrun()
1180 time_after(ldata->overrun_time, jiffies)) { in n_tty_receive_overrun()
1181 tty_warn(tty, "%d input overrun(s)\n", ldata->num_overrun); in n_tty_receive_overrun()
1182 ldata->overrun_time = jiffies; in n_tty_receive_overrun()
1183 ldata->num_overrun = 0; in n_tty_receive_overrun()
1200 struct n_tty_data *ldata = tty->disc_data; in n_tty_receive_parity_error() local
1206 put_tty_queue('\377', ldata); in n_tty_receive_parity_error()
1207 put_tty_queue('\0', ldata); in n_tty_receive_parity_error()
1208 put_tty_queue(c, ldata); in n_tty_receive_parity_error()
1210 put_tty_queue('\0', ldata); in n_tty_receive_parity_error()
1212 put_tty_queue(c, ldata); in n_tty_receive_parity_error()
1271 struct n_tty_data *ldata = tty->disc_data; in n_tty_receive_char_special() local
1302 if (ldata->icanon) { in n_tty_receive_char_special()
1310 ldata->lnext = 1; in n_tty_receive_char_special()
1312 finish_erasing(ldata); in n_tty_receive_char_special()
1314 echo_char_raw('^', ldata); in n_tty_receive_char_special()
1315 echo_char_raw('\b', ldata); in n_tty_receive_char_special()
1322 size_t tail = ldata->canon_head; in n_tty_receive_char_special()
1324 finish_erasing(ldata); in n_tty_receive_char_special()
1326 echo_char_raw('\n', ldata); in n_tty_receive_char_special()
1327 while (MASK(tail) != MASK(ldata->read_head)) { in n_tty_receive_char_special()
1328 echo_char(read_buf(ldata, tail), tty); in n_tty_receive_char_special()
1336 echo_char_raw('\n', ldata); in n_tty_receive_char_special()
1352 if (ldata->canon_head == ldata->read_head) in n_tty_receive_char_special()
1353 echo_set_canon_col(ldata); in n_tty_receive_char_special()
1362 put_tty_queue(c, ldata); in n_tty_receive_char_special()
1365 set_bit(ldata->read_head & (N_TTY_BUF_SIZE - 1), ldata->read_flags); in n_tty_receive_char_special()
1366 put_tty_queue(c, ldata); in n_tty_receive_char_special()
1367 smp_store_release(&ldata->canon_head, ldata->read_head); in n_tty_receive_char_special()
1375 finish_erasing(ldata); in n_tty_receive_char_special()
1377 echo_char_raw('\n', ldata); in n_tty_receive_char_special()
1380 if (ldata->canon_head == ldata->read_head) in n_tty_receive_char_special()
1381 echo_set_canon_col(ldata); in n_tty_receive_char_special()
1389 put_tty_queue(c, ldata); in n_tty_receive_char_special()
1391 put_tty_queue(c, ldata); in n_tty_receive_char_special()
1408 struct n_tty_data *ldata = tty->disc_data; in n_tty_receive_char() local
1415 finish_erasing(ldata); in n_tty_receive_char()
1417 if (ldata->canon_head == ldata->read_head) in n_tty_receive_char()
1418 echo_set_canon_col(ldata); in n_tty_receive_char()
1424 put_tty_queue(c, ldata); in n_tty_receive_char()
1425 put_tty_queue(c, ldata); in n_tty_receive_char()
1470 struct n_tty_data *ldata = tty->disc_data; in n_tty_receive_char_lnext() local
1472 ldata->lnext = 0; in n_tty_receive_char_lnext()
1487 struct n_tty_data *ldata = tty->disc_data; in n_tty_lookahead_flow_ctrl() local
1490 ldata->lookahead_count += count; in n_tty_lookahead_flow_ctrl()
1508 struct n_tty_data *ldata = tty->disc_data; in n_tty_receive_buf_real_raw() local
1511 head = ldata->read_head & (N_TTY_BUF_SIZE - 1); in n_tty_receive_buf_real_raw()
1513 memcpy(read_buf_addr(ldata, head), cp, n); in n_tty_receive_buf_real_raw()
1514 ldata->read_head += n; in n_tty_receive_buf_real_raw()
1518 head = ldata->read_head & (N_TTY_BUF_SIZE - 1); in n_tty_receive_buf_real_raw()
1520 memcpy(read_buf_addr(ldata, head), cp, n); in n_tty_receive_buf_real_raw()
1521 ldata->read_head += n; in n_tty_receive_buf_real_raw()
1528 struct n_tty_data *ldata = tty->disc_data; in n_tty_receive_buf_raw() local
1535 put_tty_queue(*cp++, ldata); in n_tty_receive_buf_raw()
1558 struct n_tty_data *ldata = tty->disc_data; in n_tty_receive_buf_standard() local
1567 if (ldata->lnext) { in n_tty_receive_buf_standard()
1582 put_tty_queue(c, ldata); in n_tty_receive_buf_standard()
1586 if (test_bit(c, ldata->char_map)) in n_tty_receive_buf_standard()
1596 struct n_tty_data *ldata = tty->disc_data; in __receive_buf() local
1598 size_t la_count = min_t(size_t, ldata->lookahead_count, count); in __receive_buf()
1600 if (ldata->real_raw) in __receive_buf()
1602 else if (ldata->raw || (L_EXTPROC(tty) && !preops)) in __receive_buf()
1620 ldata->lookahead_count -= la_count; in __receive_buf()
1622 if (ldata->icanon && !L_EXTPROC(tty)) in __receive_buf()
1626 smp_store_release(&ldata->commit_head, ldata->read_head); in __receive_buf()
1628 if (read_cnt(ldata)) { in __receive_buf()
1671 struct n_tty_data *ldata = tty->disc_data; in n_tty_receive_buf_common() local
1690 size_t tail = smp_load_acquire(&ldata->read_tail); in n_tty_receive_buf_common()
1692 room = N_TTY_BUF_SIZE - (ldata->read_head - tail); in n_tty_receive_buf_common()
1697 overflow = ldata->icanon && ldata->canon_head == tail; in n_tty_receive_buf_common()
1699 ldata->read_head--; in n_tty_receive_buf_common()
1701 ldata->no_room = flow && !room; in n_tty_receive_buf_common()
1763 struct n_tty_data *ldata = tty->disc_data; in n_tty_set_termios() local
1766 bitmap_zero(ldata->read_flags, N_TTY_BUF_SIZE); in n_tty_set_termios()
1767 ldata->line_start = ldata->read_tail; in n_tty_set_termios()
1768 if (!L_ICANON(tty) || !read_cnt(ldata)) { in n_tty_set_termios()
1769 ldata->canon_head = ldata->read_tail; in n_tty_set_termios()
1770 ldata->push = 0; in n_tty_set_termios()
1772 set_bit((ldata->read_head - 1) & (N_TTY_BUF_SIZE - 1), in n_tty_set_termios()
1773 ldata->read_flags); in n_tty_set_termios()
1774 ldata->canon_head = ldata->read_head; in n_tty_set_termios()
1775 ldata->push = 1; in n_tty_set_termios()
1777 ldata->commit_head = ldata->read_head; in n_tty_set_termios()
1778 ldata->erasing = 0; in n_tty_set_termios()
1779 ldata->lnext = 0; in n_tty_set_termios()
1782 ldata->icanon = (L_ICANON(tty) != 0); in n_tty_set_termios()
1788 bitmap_zero(ldata->char_map, 256); in n_tty_set_termios()
1791 set_bit('\r', ldata->char_map); in n_tty_set_termios()
1793 set_bit('\n', ldata->char_map); in n_tty_set_termios()
1796 set_bit(ERASE_CHAR(tty), ldata->char_map); in n_tty_set_termios()
1797 set_bit(KILL_CHAR(tty), ldata->char_map); in n_tty_set_termios()
1798 set_bit(EOF_CHAR(tty), ldata->char_map); in n_tty_set_termios()
1799 set_bit('\n', ldata->char_map); in n_tty_set_termios()
1800 set_bit(EOL_CHAR(tty), ldata->char_map); in n_tty_set_termios()
1802 set_bit(WERASE_CHAR(tty), ldata->char_map); in n_tty_set_termios()
1803 set_bit(LNEXT_CHAR(tty), ldata->char_map); in n_tty_set_termios()
1804 set_bit(EOL2_CHAR(tty), ldata->char_map); in n_tty_set_termios()
1807 ldata->char_map); in n_tty_set_termios()
1811 set_bit(START_CHAR(tty), ldata->char_map); in n_tty_set_termios()
1812 set_bit(STOP_CHAR(tty), ldata->char_map); in n_tty_set_termios()
1815 set_bit(INTR_CHAR(tty), ldata->char_map); in n_tty_set_termios()
1816 set_bit(QUIT_CHAR(tty), ldata->char_map); in n_tty_set_termios()
1817 set_bit(SUSP_CHAR(tty), ldata->char_map); in n_tty_set_termios()
1819 clear_bit(__DISABLED_CHAR, ldata->char_map); in n_tty_set_termios()
1820 ldata->raw = 0; in n_tty_set_termios()
1821 ldata->real_raw = 0; in n_tty_set_termios()
1823 ldata->raw = 1; in n_tty_set_termios()
1827 ldata->real_raw = 1; in n_tty_set_termios()
1829 ldata->real_raw = 0; in n_tty_set_termios()
1855 struct n_tty_data *ldata = tty->disc_data; in n_tty_close() local
1861 vfree(ldata); in n_tty_close()
1876 struct n_tty_data *ldata; in n_tty_open() local
1879 ldata = vzalloc(sizeof(*ldata)); in n_tty_open()
1880 if (!ldata) in n_tty_open()
1883 ldata->overrun_time = jiffies; in n_tty_open()
1884 mutex_init(&ldata->atomic_read_lock); in n_tty_open()
1885 mutex_init(&ldata->output_lock); in n_tty_open()
1887 tty->disc_data = ldata; in n_tty_open()
1898 struct n_tty_data *ldata = tty->disc_data; in input_available_p() local
1901 if (ldata->icanon && !L_EXTPROC(tty)) in input_available_p()
1902 return ldata->canon_head != ldata->read_tail; in input_available_p()
1904 return ldata->commit_head - ldata->read_tail >= amt; in input_available_p()
1930 struct n_tty_data *ldata = tty->disc_data; in copy_from_read_buf() local
1933 size_t head = smp_load_acquire(&ldata->commit_head); in copy_from_read_buf()
1934 size_t tail = ldata->read_tail & (N_TTY_BUF_SIZE - 1); in copy_from_read_buf()
1936 n = min(head - ldata->read_tail, N_TTY_BUF_SIZE - tail); in copy_from_read_buf()
1939 unsigned char *from = read_buf_addr(ldata, tail); in copy_from_read_buf()
1944 smp_store_release(&ldata->read_tail, ldata->read_tail + n); in copy_from_read_buf()
1946 if (L_EXTPROC(tty) && ldata->icanon && is_eof && in copy_from_read_buf()
1947 (head == ldata->read_tail)) in copy_from_read_buf()
1953 return head != ldata->read_tail; in copy_from_read_buf()
1984 struct n_tty_data *ldata = tty->disc_data; in canon_copy_from_read_buf() local
1994 canon_head = smp_load_acquire(&ldata->canon_head); in canon_copy_from_read_buf()
1995 n = min(*nr, canon_head - ldata->read_tail); in canon_copy_from_read_buf()
1997 tail = ldata->read_tail & (N_TTY_BUF_SIZE - 1); in canon_copy_from_read_buf()
2003 eol = find_next_bit(ldata->read_flags, size, tail); in canon_copy_from_read_buf()
2007 eol = find_first_bit(ldata->read_flags, more); in canon_copy_from_read_buf()
2017 if (!found || read_buf(ldata, eol) != __DISABLED_CHAR) in canon_copy_from_read_buf()
2028 clear_bit(eol, ldata->read_flags); in canon_copy_from_read_buf()
2029 smp_store_release(&ldata->read_tail, ldata->read_tail + c); in canon_copy_from_read_buf()
2032 if (!ldata->push) in canon_copy_from_read_buf()
2033 ldata->line_start = ldata->read_tail; in canon_copy_from_read_buf()
2035 ldata->push = 0; in canon_copy_from_read_buf()
2041 return ldata->read_tail != canon_head; in canon_copy_from_read_buf()
2051 struct n_tty_data *ldata = tty->disc_data; in canon_skip_eof() local
2054 canon_head = smp_load_acquire(&ldata->canon_head); in canon_skip_eof()
2055 tail = ldata->read_tail; in canon_skip_eof()
2063 if (!test_bit(tail, ldata->read_flags)) in canon_skip_eof()
2065 if (read_buf(ldata, tail) != __DISABLED_CHAR) in canon_skip_eof()
2069 clear_bit(tail, ldata->read_flags); in canon_skip_eof()
2070 smp_store_release(&ldata->read_tail, ldata->read_tail + 1); in canon_skip_eof()
2125 struct n_tty_data *ldata = tty->disc_data; in n_tty_read() local
2142 if (ldata->icanon && !L_EXTPROC(tty)) { in n_tty_read()
2161 mutex_unlock(&ldata->atomic_read_lock); in n_tty_read()
2174 if (!mutex_trylock(&ldata->atomic_read_lock)) in n_tty_read()
2177 if (mutex_lock_interruptible(&ldata->atomic_read_lock)) in n_tty_read()
2185 if (!ldata->icanon) { in n_tty_read()
2196 tail = ldata->read_tail; in n_tty_read()
2251 if (ldata->icanon && !L_EXTPROC(tty)) { in n_tty_read()
2285 if (tail != ldata->read_tail) in n_tty_read()
2290 mutex_unlock(&ldata->atomic_read_lock); in n_tty_read()
2369 struct n_tty_data *ldata = tty->disc_data; in n_tty_write() local
2372 mutex_lock(&ldata->output_lock); in n_tty_write()
2374 mutex_unlock(&ldata->output_lock); in n_tty_write()
2446 static unsigned long inq_canon(struct n_tty_data *ldata) in inq_canon() argument
2450 if (ldata->canon_head == ldata->read_tail) in inq_canon()
2452 head = ldata->canon_head; in inq_canon()
2453 tail = ldata->read_tail; in inq_canon()
2457 if (test_bit(tail & (N_TTY_BUF_SIZE - 1), ldata->read_flags) && in inq_canon()
2458 read_buf(ldata, tail) == __DISABLED_CHAR) in inq_canon()
2468 struct n_tty_data *ldata = tty->disc_data; in n_tty_ioctl() local
2477 retval = inq_canon(ldata); in n_tty_ioctl()
2479 retval = read_cnt(ldata); in n_tty_ioctl()