1/*
2 *  linux/include/linux/console.h
3 *
4 *  Copyright (C) 1993        Hamish Macdonald
5 *
6 * This file is subject to the terms and conditions of the GNU General Public
7 * License.  See the file COPYING in the main directory of this archive
8 * for more details.
9 *
10 * Changed:
11 * 10-Mar-94: Arno Griffioen: Conversion for vt100 emulator port from PC LINUX
12 */
13
14#ifndef _LINUX_CONSOLE_H_
15#define _LINUX_CONSOLE_H_ 1
16
17#include <linux/types.h>
18#include <linux/spinlock.h>
19
20struct vc_data;
21struct console_font_op;
22struct console_font;
23struct module;
24struct tty_struct;
25
26/*
27 * this is what the terminal answers to a ESC-Z or csi0c query.
28 */
29#define VT100ID "\033[?1;2c"
30#define VT102ID "\033[?6c"
31
32struct consw {
33	struct module *owner;
34	const char *(*con_startup)(void);
35	void	(*con_init)(struct vc_data *, int);
36	void	(*con_deinit)(struct vc_data *);
37	void	(*con_clear)(struct vc_data *, int, int, int, int);
38	void	(*con_putc)(struct vc_data *, int, int, int);
39	void	(*con_putcs)(struct vc_data *, const unsigned short *, int, int, int);
40	void	(*con_cursor)(struct vc_data *, int);
41	int	(*con_scroll)(struct vc_data *, int, int, int, int);
42	void	(*con_bmove)(struct vc_data *, int, int, int, int, int, int);
43	int	(*con_switch)(struct vc_data *);
44	int	(*con_blank)(struct vc_data *, int, int);
45	int	(*con_font_set)(struct vc_data *, struct console_font *, unsigned);
46	int	(*con_font_get)(struct vc_data *, struct console_font *);
47	int	(*con_font_default)(struct vc_data *, struct console_font *, char *);
48	int	(*con_font_copy)(struct vc_data *, int);
49	int	(*con_resize)(struct vc_data *, unsigned int, unsigned int);
50	int	(*con_set_palette)(struct vc_data *, unsigned char *);
51	int	(*con_scrolldelta)(struct vc_data *, int);
52	int	(*con_set_origin)(struct vc_data *);
53	void	(*con_save_screen)(struct vc_data *);
54	u8	(*con_build_attr)(struct vc_data *, u8, u8, u8, u8, u8, u8);
55	void	(*con_invert_region)(struct vc_data *, u16 *, int);
56	u16    *(*con_screen_pos)(struct vc_data *, int);
57	unsigned long (*con_getxy)(struct vc_data *, unsigned long, int *, int *);
58};
59
60extern const struct consw *conswitchp;
61
62extern const struct consw dummy_con;	/* dummy console buffer */
63extern const struct consw vga_con;	/* VGA text console */
64extern const struct consw newport_con;	/* SGI Newport console  */
65extern const struct consw prom_con;	/* SPARC PROM console */
66
67int con_is_bound(const struct consw *csw);
68int register_con_driver(const struct consw *csw, int first, int last);
69int unregister_con_driver(const struct consw *csw);
70int take_over_console(const struct consw *sw, int first, int last, int deflt);
71void give_up_console(const struct consw *sw);
72/* scroll */
73#define SM_UP       (1)
74#define SM_DOWN     (2)
75
76/* cursor */
77#define CM_DRAW     (1)
78#define CM_ERASE    (2)
79#define CM_MOVE     (3)
80
81/*
82 * The interface for a console, or any other device that wants to capture
83 * console messages (printer driver?)
84 *
85 * If a console driver is marked CON_BOOT then it will be auto-unregistered
86 * when the first real console is registered.  This is for early-printk drivers.
87 */
88
89#define CON_PRINTBUFFER	(1)
90#define CON_CONSDEV	(2) /* Last on the command line */
91#define CON_ENABLED	(4)
92#define CON_BOOT	(8)
93#define CON_ANYTIME	(16) /* Safe to call when cpu is offline */
94
95struct console {
96	char	name[16];
97	void	(*write)(struct console *, const char *, unsigned);
98	int	(*read)(struct console *, char *, unsigned);
99	struct tty_driver *(*device)(struct console *, int *);
100	void	(*unblank)(void);
101	int	(*setup)(struct console *, char *);
102	short	flags;
103	short	index;
104	int	cflag;
105	void	*data;
106	struct	 console *next;
107};
108
109extern int add_preferred_console(char *name, int idx, char *options);
110extern void register_console(struct console *);
111extern int unregister_console(struct console *);
112extern struct console *console_drivers;
113extern void acquire_console_sem(void);
114extern int try_acquire_console_sem(void);
115extern void release_console_sem(void);
116extern void console_conditional_schedule(void);
117extern void console_unblank(void);
118extern struct tty_driver *console_device(int *);
119extern void console_stop(struct console *);
120extern void console_start(struct console *);
121extern int is_console_locked(void);
122
123#ifndef CONFIG_DISABLE_CONSOLE_SUSPEND
124/* Suspend and resume console messages over PM events */
125extern void suspend_console(void);
126extern void resume_console(void);
127#else
128static inline void suspend_console(void) {}
129static inline void resume_console(void) {}
130#endif /* CONFIG_DISABLE_CONSOLE_SUSPEND */
131
132int mda_console_init(void);
133void prom_con_init(void);
134
135void vcs_make_sysfs(struct tty_struct *tty);
136void vcs_remove_sysfs(struct tty_struct *tty);
137
138/* Some debug stub to catch some of the obvious races in the VT code */
139#define WARN_CONSOLE_UNLOCKED()	WARN_ON(!is_console_locked() && !oops_in_progress)
140
141/* VESA Blanking Levels */
142#define VESA_NO_BLANKING        0
143#define VESA_VSYNC_SUSPEND      1
144#define VESA_HSYNC_SUSPEND      2
145#define VESA_POWERDOWN          3
146
147#endif /* _LINUX_CONSOLE_H */
148