Merge tag 'xfs-6.4-rc1-fixes' of git://git.kernel.org/pub/scm/fs/xfs/xfs-linux
[linux-block.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         bool flags;
21         /* Data points here */
22         unsigned long data[];
23 };
24
25 static inline unsigned char *char_buf_ptr(struct tty_buffer *b, int ofs)
26 {
27         return ((unsigned char *)b->data) + ofs;
28 }
29
30 static inline char *flag_buf_ptr(struct tty_buffer *b, int ofs)
31 {
32         return (char *)char_buf_ptr(b, ofs) + b->size;
33 }
34
35 struct tty_bufhead {
36         struct tty_buffer *head;        /* Queue head */
37         struct work_struct work;
38         struct mutex       lock;
39         atomic_t           priority;
40         struct tty_buffer sentinel;
41         struct llist_head free;         /* Free queue head */
42         atomic_t           mem_used;    /* In-use buffers excluding free list */
43         int                mem_limit;
44         struct tty_buffer *tail;        /* Active buffer */
45 };
46
47 /*
48  * When a break, frame error, or parity error happens, these codes are
49  * stuffed into the flags buffer.
50  */
51 #define TTY_NORMAL      0
52 #define TTY_BREAK       1
53 #define TTY_FRAME       2
54 #define TTY_PARITY      3
55 #define TTY_OVERRUN     4
56
57 #endif