Line data Source code
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 0 : return ((unsigned char *)b->data) + ofs; 28 : } 29 : 30 : static inline char *flag_buf_ptr(struct tty_buffer *b, int ofs) 31 : { 32 0 : 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