|
15 | 15 | #define _LINUX_CONSOLE_H_ 1
|
16 | 16 |
|
17 | 17 | #include <linux/atomic.h>
|
| 18 | +#include <linux/bits.h> |
18 | 19 | #include <linux/rculist.h>
|
19 | 20 | #include <linux/types.h>
|
20 | 21 |
|
@@ -125,37 +126,82 @@ static inline int con_debug_leave(void)
|
125 | 126 | /*
|
126 | 127 | * The interface for a console, or any other device that wants to capture
|
127 | 128 | * console messages (printer driver?)
|
128 |
| - * |
129 |
| - * If a console driver is marked CON_BOOT then it will be auto-unregistered |
130 |
| - * when the first real console is registered. This is for early-printk drivers. |
131 | 129 | */
|
132 | 130 |
|
133 |
| -#define CON_PRINTBUFFER (1) |
134 |
| -#define CON_CONSDEV (2) /* Preferred console, /dev/console */ |
135 |
| -#define CON_ENABLED (4) |
136 |
| -#define CON_BOOT (8) |
137 |
| -#define CON_ANYTIME (16) /* Safe to call when cpu is offline */ |
138 |
| -#define CON_BRL (32) /* Used for a braille device */ |
139 |
| -#define CON_EXTENDED (64) /* Use the extended output format a la /dev/kmsg */ |
| 131 | +/** |
| 132 | + * cons_flags - General console flags |
| 133 | + * @CON_PRINTBUFFER: Used by newly registered consoles to avoid duplicate |
| 134 | + * output of messages that were already shown by boot |
| 135 | + * consoles or read by userspace via syslog() syscall. |
| 136 | + * @CON_CONSDEV: Indicates that the console driver is backing |
| 137 | + * /dev/console. |
| 138 | + * @CON_ENABLED: Indicates if a console is allowed to print records. If |
| 139 | + * false, the console also will not advance to later |
| 140 | + * records. |
| 141 | + * @CON_BOOT: Marks the console driver as early console driver which |
| 142 | + * is used during boot before the real driver becomes |
| 143 | + * available. It will be automatically unregistered |
| 144 | + * when the real console driver is registered unless |
| 145 | + * "keep_bootcon" parameter is used. |
| 146 | + * @CON_ANYTIME: A misnomed historical flag which tells the core code |
| 147 | + * that the legacy @console::write callback can be invoked |
| 148 | + * on a CPU which is marked OFFLINE. That is misleading as |
| 149 | + * it suggests that there is no contextual limit for |
| 150 | + * invoking the callback. The original motivation was |
| 151 | + * readiness of the per-CPU areas. |
| 152 | + * @CON_BRL: Indicates a braille device which is exempt from |
| 153 | + * receiving the printk spam for obvious reasons. |
| 154 | + * @CON_EXTENDED: The console supports the extended output format of |
| 155 | + * /dev/kmesg which requires a larger output buffer. |
| 156 | + */ |
| 157 | +enum cons_flags { |
| 158 | + CON_PRINTBUFFER = BIT(0), |
| 159 | + CON_CONSDEV = BIT(1), |
| 160 | + CON_ENABLED = BIT(2), |
| 161 | + CON_BOOT = BIT(3), |
| 162 | + CON_ANYTIME = BIT(4), |
| 163 | + CON_BRL = BIT(5), |
| 164 | + CON_EXTENDED = BIT(6), |
| 165 | +}; |
140 | 166 |
|
| 167 | +/** |
| 168 | + * struct console - The console descriptor structure |
| 169 | + * @name: The name of the console driver |
| 170 | + * @write: Write callback to output messages (Optional) |
| 171 | + * @read: Read callback for console input (Optional) |
| 172 | + * @device: The underlying TTY device driver (Optional) |
| 173 | + * @unblank: Callback to unblank the console (Optional) |
| 174 | + * @setup: Callback for initializing the console (Optional) |
| 175 | + * @exit: Callback for teardown of the console (Optional) |
| 176 | + * @match: Callback for matching a console (Optional) |
| 177 | + * @flags: Console flags. See enum cons_flags |
| 178 | + * @index: Console index, e.g. port number |
| 179 | + * @cflag: TTY control mode flags |
| 180 | + * @ispeed: TTY input speed |
| 181 | + * @ospeed: TTY output speed |
| 182 | + * @seq: Sequence number of the next ringbuffer record to print |
| 183 | + * @dropped: Number of unreported dropped ringbuffer records |
| 184 | + * @data: Driver private data |
| 185 | + * @node: hlist node for the console list |
| 186 | + */ |
141 | 187 | struct console {
|
142 |
| - char name[16]; |
143 |
| - void (*write)(struct console *, const char *, unsigned); |
144 |
| - int (*read)(struct console *, char *, unsigned); |
145 |
| - struct tty_driver *(*device)(struct console *, int *); |
146 |
| - void (*unblank)(void); |
147 |
| - int (*setup)(struct console *, char *); |
148 |
| - int (*exit)(struct console *); |
149 |
| - int (*match)(struct console *, char *name, int idx, char *options); |
150 |
| - short flags; |
151 |
| - short index; |
152 |
| - int cflag; |
153 |
| - uint ispeed; |
154 |
| - uint ospeed; |
155 |
| - u64 seq; |
156 |
| - unsigned long dropped; |
157 |
| - void *data; |
158 |
| - struct hlist_node node; |
| 188 | + char name[16]; |
| 189 | + void (*write)(struct console *co, const char *s, unsigned int count); |
| 190 | + int (*read)(struct console *co, char *s, unsigned int count); |
| 191 | + struct tty_driver *(*device)(struct console *co, int *index); |
| 192 | + void (*unblank)(void); |
| 193 | + int (*setup)(struct console *co, char *options); |
| 194 | + int (*exit)(struct console *co); |
| 195 | + int (*match)(struct console *co, char *name, int idx, char *options); |
| 196 | + short flags; |
| 197 | + short index; |
| 198 | + int cflag; |
| 199 | + uint ispeed; |
| 200 | + uint ospeed; |
| 201 | + u64 seq; |
| 202 | + unsigned long dropped; |
| 203 | + void *data; |
| 204 | + struct hlist_node node; |
159 | 205 | };
|
160 | 206 |
|
161 | 207 | #ifdef CONFIG_LOCKDEP
|
|
0 commit comments