Commit | Line | Data |
---|---|---|
b2441318 | 1 | /* SPDX-License-Identifier: GPL-2.0 */ |
1da177e4 LT |
2 | #ifndef _LINUX_TTY_FLIP_H |
3 | #define _LINUX_TTY_FLIP_H | |
4 | ||
52c27f13 JS |
5 | #include <linux/tty_buffer.h> |
6 | #include <linux/tty_port.h> | |
48344460 | 7 | |
56eef46a JS |
8 | struct tty_ldisc; |
9 | ||
78941934 JS |
10 | int tty_buffer_set_limit(struct tty_port *port, int limit); |
11 | unsigned int tty_buffer_space_avail(struct tty_port *port); | |
12 | int tty_buffer_request_room(struct tty_port *port, size_t size); | |
6144922e JSS |
13 | size_t __tty_insert_flip_string_flags(struct tty_port *port, const u8 *chars, |
14 | const u8 *flags, bool mutable_flags, | |
15 | size_t size); | |
2ce2983c | 16 | size_t tty_prepare_flip_string(struct tty_port *port, u8 **chars, size_t size); |
78941934 | 17 | void tty_flip_buffer_push(struct tty_port *port); |
33f0f88f | 18 | |
c26405fd JSS |
19 | /** |
20 | * tty_insert_flip_string_fixed_flag - add characters to the tty buffer | |
21 | * @port: tty port | |
22 | * @chars: characters | |
23 | * @flag: flag value for each character | |
24 | * @size: size | |
25 | * | |
26 | * Queue a series of bytes to the tty buffering. All the characters passed are | |
27 | * marked with the supplied flag. | |
28 | * | |
29 | * Returns: the number added. | |
30 | */ | |
6144922e JSS |
31 | static inline size_t tty_insert_flip_string_fixed_flag(struct tty_port *port, |
32 | const u8 *chars, u8 flag, | |
33 | size_t size) | |
c26405fd JSS |
34 | { |
35 | return __tty_insert_flip_string_flags(port, chars, &flag, false, size); | |
36 | } | |
37 | ||
38 | /** | |
39 | * tty_insert_flip_string_flags - add characters to the tty buffer | |
40 | * @port: tty port | |
41 | * @chars: characters | |
42 | * @flags: flag bytes | |
43 | * @size: size | |
44 | * | |
45 | * Queue a series of bytes to the tty buffering. For each character the flags | |
46 | * array indicates the status of the character. | |
47 | * | |
48 | * Returns: the number added. | |
49 | */ | |
6144922e JSS |
50 | static inline size_t tty_insert_flip_string_flags(struct tty_port *port, |
51 | const u8 *chars, | |
52 | const u8 *flags, size_t size) | |
c26405fd JSS |
53 | { |
54 | return __tty_insert_flip_string_flags(port, chars, flags, true, size); | |
55 | } | |
56 | ||
b49a0ff7 JSS |
57 | /** |
58 | * tty_insert_flip_char - add one character to the tty buffer | |
59 | * @port: tty port | |
60 | * @ch: character | |
61 | * @flag: flag byte | |
62 | * | |
63 | * Queue a single byte @ch to the tty buffering, with an optional flag. | |
64 | */ | |
6144922e | 65 | static inline size_t tty_insert_flip_char(struct tty_port *port, u8 ch, u8 flag) |
1da177e4 | 66 | { |
92a19f9c | 67 | struct tty_buffer *tb = port->buf.tail; |
acc0f67f PH |
68 | int change; |
69 | ||
2e2b4b89 | 70 | change = !tb->flags && (flag != TTY_NORMAL); |
acc0f67f | 71 | if (!change && tb->used < tb->size) { |
2e2b4b89 | 72 | if (tb->flags) |
acc0f67f | 73 | *flag_buf_ptr(tb, tb->used) = flag; |
1fc359fc | 74 | *char_buf_ptr(tb, tb->used++) = ch; |
33f0f88f | 75 | return 1; |
1da177e4 | 76 | } |
b49a0ff7 | 77 | return __tty_insert_flip_string_flags(port, &ch, &flag, false, 1); |
1da177e4 LT |
78 | } |
79 | ||
6144922e JSS |
80 | static inline size_t tty_insert_flip_string(struct tty_port *port, |
81 | const u8 *chars, size_t size) | |
2832fc11 | 82 | { |
05c7cd39 | 83 | return tty_insert_flip_string_fixed_flag(port, chars, TTY_NORMAL, size); |
2832fc11 AC |
84 | } |
85 | ||
892bc209 | 86 | size_t tty_ldisc_receive_buf(struct tty_ldisc *ld, const u8 *p, const u8 *f, |
a8d9cd23 | 87 | size_t count); |
56eef46a | 88 | |
78941934 JS |
89 | void tty_buffer_lock_exclusive(struct tty_port *port); |
90 | void tty_buffer_unlock_exclusive(struct tty_port *port); | |
a7c8d58c | 91 | |
1da177e4 | 92 | #endif /* _LINUX_TTY_FLIP_H */ |