diff options
Diffstat (limited to 'include/linux/console.h')
| -rw-r--r-- | include/linux/console.h | 105 | 
1 files changed, 76 insertions, 29 deletions
diff --git a/include/linux/console.h b/include/linux/console.h index 9cea254b34b8..d3195664baa5 100644 --- a/include/linux/console.h +++ b/include/linux/console.h @@ -15,6 +15,7 @@  #define _LINUX_CONSOLE_H_ 1  #include <linux/atomic.h> +#include <linux/bits.h>  #include <linux/rculist.h>  #include <linux/types.h> @@ -59,8 +60,9 @@ struct consw {  	int	(*con_switch)(struct vc_data *vc);  	int	(*con_blank)(struct vc_data *vc, int blank, int mode_switch);  	int	(*con_font_set)(struct vc_data *vc, struct console_font *font, -			unsigned int flags); -	int	(*con_font_get)(struct vc_data *vc, struct console_font *font); +			unsigned int vpitch, unsigned int flags); +	int	(*con_font_get)(struct vc_data *vc, struct console_font *font, +			unsigned int vpitch);  	int	(*con_font_default)(struct vc_data *vc,  			struct console_font *font, char *name);  	int     (*con_resize)(struct vc_data *vc, unsigned int width, @@ -125,37 +127,82 @@ static inline int con_debug_leave(void)  /*   * The interface for a console, or any other device that wants to capture   * console messages (printer driver?) - * - * If a console driver is marked CON_BOOT then it will be auto-unregistered - * when the first real console is registered.  This is for early-printk drivers.   */ -#define CON_PRINTBUFFER	(1) -#define CON_CONSDEV	(2) /* Preferred console, /dev/console */ -#define CON_ENABLED	(4) -#define CON_BOOT	(8) -#define CON_ANYTIME	(16) /* Safe to call when cpu is offline */ -#define CON_BRL		(32) /* Used for a braille device */ -#define CON_EXTENDED	(64) /* Use the extended output format a la /dev/kmsg */ +/** + * cons_flags - General console flags + * @CON_PRINTBUFFER:	Used by newly registered consoles to avoid duplicate + *			output of messages that were already shown by boot + *			consoles or read by userspace via syslog() syscall. + * @CON_CONSDEV:	Indicates that the console driver is backing + *			/dev/console. + * @CON_ENABLED:	Indicates if a console is allowed to print records. If + *			false, the console also will not advance to later + *			records. + * @CON_BOOT:		Marks the console driver as early console driver which + *			is used during boot before the real driver becomes + *			available. It will be automatically unregistered + *			when the real console driver is registered unless + *			"keep_bootcon" parameter is used. + * @CON_ANYTIME:	A misnomed historical flag which tells the core code + *			that the legacy @console::write callback can be invoked + *			on a CPU which is marked OFFLINE. That is misleading as + *			it suggests that there is no contextual limit for + *			invoking the callback. The original motivation was + *			readiness of the per-CPU areas. + * @CON_BRL:		Indicates a braille device which is exempt from + *			receiving the printk spam for obvious reasons. + * @CON_EXTENDED:	The console supports the extended output format of + *			/dev/kmesg which requires a larger output buffer. + */ +enum cons_flags { +	CON_PRINTBUFFER		= BIT(0), +	CON_CONSDEV		= BIT(1), +	CON_ENABLED		= BIT(2), +	CON_BOOT		= BIT(3), +	CON_ANYTIME		= BIT(4), +	CON_BRL			= BIT(5), +	CON_EXTENDED		= BIT(6), +}; +/** + * struct console - The console descriptor structure + * @name:		The name of the console driver + * @write:		Write callback to output messages (Optional) + * @read:		Read callback for console input (Optional) + * @device:		The underlying TTY device driver (Optional) + * @unblank:		Callback to unblank the console (Optional) + * @setup:		Callback for initializing the console (Optional) + * @exit:		Callback for teardown of the console (Optional) + * @match:		Callback for matching a console (Optional) + * @flags:		Console flags. See enum cons_flags + * @index:		Console index, e.g. port number + * @cflag:		TTY control mode flags + * @ispeed:		TTY input speed + * @ospeed:		TTY output speed + * @seq:		Sequence number of the next ringbuffer record to print + * @dropped:		Number of unreported dropped ringbuffer records + * @data:		Driver private data + * @node:		hlist node for the console list + */  struct console { -	char	name[16]; -	void	(*write)(struct console *, const char *, unsigned); -	int	(*read)(struct console *, char *, unsigned); -	struct tty_driver *(*device)(struct console *, int *); -	void	(*unblank)(void); -	int	(*setup)(struct console *, char *); -	int	(*exit)(struct console *); -	int	(*match)(struct console *, char *name, int idx, char *options); -	short	flags; -	short	index; -	int	cflag; -	uint	ispeed; -	uint	ospeed; -	u64	seq; -	unsigned long dropped; -	void	*data; -	struct hlist_node node; +	char			name[16]; +	void			(*write)(struct console *co, const char *s, unsigned int count); +	int			(*read)(struct console *co, char *s, unsigned int count); +	struct tty_driver	*(*device)(struct console *co, int *index); +	void			(*unblank)(void); +	int			(*setup)(struct console *co, char *options); +	int			(*exit)(struct console *co); +	int			(*match)(struct console *co, char *name, int idx, char *options); +	short			flags; +	short			index; +	int			cflag; +	uint			ispeed; +	uint			ospeed; +	u64			seq; +	unsigned long		dropped; +	void			*data; +	struct hlist_node	node;  };  #ifdef CONFIG_LOCKDEP  |