| 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 | 
|---|
| 58 |  | 
|---|