Linux kernel mirror (for testing)
git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel
os
linux
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
10struct 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
28static inline unsigned char *char_buf_ptr(struct tty_buffer *b, int ofs)
29{
30 return ((unsigned char *)b->data) + ofs;
31}
32
33static inline char *flag_buf_ptr(struct tty_buffer *b, int ofs)
34{
35 return (char *)char_buf_ptr(b, ofs) + b->size;
36}
37
38struct 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