soundwire: bus: introduce controller_id
[platform/kernel/linux-rpi.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         unsigned int used;
16         unsigned int size;
17         unsigned int commit;
18         unsigned int lookahead;         /* Lazy update on recv, can become less than "read" */
19         unsigned int read;
20         bool flags;
21         /* Data points here */
22         u8 data[] __aligned(sizeof(unsigned long));
23 };
24
25 static inline u8 *char_buf_ptr(struct tty_buffer *b, unsigned int ofs)
26 {
27         return b->data + ofs;
28 }
29
30 static inline u8 *flag_buf_ptr(struct tty_buffer *b, unsigned int ofs)
31 {
32         return 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