Merge tag 'modules-6.0-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/mcgrof...
[linux-2.6-microblaze.git] / include / linux / tty_buffer.h
1 /* SPDX-License-Identifier: GPL-2.0 */
2 #ifndef _LINUX_TTY_BUFFER_H
3 #define _LINUX_TTY_BUFFER_H
4
5 #include <linux/atomic.h>
6 #include <linux/llist.h>
7 #include <linux/mutex.h>
8 #include <linux/workqueue.h>
9
10 struct tty_buffer {
11         union {
12                 struct tty_buffer *next;
13                 struct llist_node free;
14         };
15         int used;
16         int size;
17         int commit;
18         int lookahead;          /* Lazy update on recv, can become less than "read" */
19         int read;
20         int flags;
21         /* Data points here */
22         unsigned long data[];
23 };
24
25 /* Values for .flags field of tty_buffer */
26 #define TTYB_NORMAL     1       /* buffer has no flags buffer */
27
28 static inline unsigned char *char_buf_ptr(struct tty_buffer *b, int ofs)
29 {
30         return ((unsigned char *)b->data) + ofs;
31 }
32
33 static inline char *flag_buf_ptr(struct tty_buffer *b, int ofs)
34 {
35         return (char *)char_buf_ptr(b, ofs) + b->size;
36 }
37
38 struct tty_bufhead {
39         struct tty_buffer *head;        /* Queue head */
40         struct work_struct work;
41         struct mutex       lock;
42         atomic_t           priority;
43         struct tty_buffer sentinel;
44         struct llist_head free;         /* Free queue head */
45         atomic_t           mem_used;    /* In-use buffers excluding free list */
46         int                mem_limit;
47         struct tty_buffer *tail;        /* Active buffer */
48 };
49
50 /*
51  * When a break, frame error, or parity error happens, these codes are
52  * stuffed into the flags buffer.
53  */
54 #define TTY_NORMAL      0
55 #define TTY_BREAK       1
56 #define TTY_FRAME       2
57 #define TTY_PARITY      3
58 #define TTY_OVERRUN     4
59
60 #endif