| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | /*
 | 
					
						
							|  |  |  |  * console_struct.h | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * Data structure describing single virtual console except for data | 
					
						
							|  |  |  |  * used by vt.c. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * Fields marked with [#] must be set by the low-level driver. | 
					
						
							|  |  |  |  * Fields marked with [!] can be changed by the low-level driver | 
					
						
							|  |  |  |  * to achieve effects such as fast scrolling by changing the origin. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-06-08 13:47:07 -07:00
										 |  |  | #ifndef _LINUX_CONSOLE_STRUCT_H
 | 
					
						
							|  |  |  | #define _LINUX_CONSOLE_STRUCT_H
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-07-10 04:44:12 -07:00
										 |  |  | #include <linux/wait.h>
 | 
					
						
							| 
									
										
										
										
											2005-11-07 01:00:51 -08:00
										 |  |  | #include <linux/vt.h>
 | 
					
						
							| 
									
										
										
										
											2007-02-10 01:44:34 -08:00
										 |  |  | #include <linux/workqueue.h>
 | 
					
						
							| 
									
										
										
										
											2005-11-07 01:00:51 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | struct vt_struct; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #define NPAR 16
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | struct vc_data { | 
					
						
							| 
									
										
										
										
											2010-06-01 22:52:55 +02:00
										 |  |  | 	struct tty_port port;			/* Upper level data */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 	unsigned short	vc_num;			/* Console number */ | 
					
						
							|  |  |  | 	unsigned int	vc_cols;		/* [#] Console size */ | 
					
						
							|  |  |  | 	unsigned int	vc_rows; | 
					
						
							|  |  |  | 	unsigned int	vc_size_row;		/* Bytes per row */ | 
					
						
							|  |  |  | 	unsigned int	vc_scan_lines;		/* # of scan lines */ | 
					
						
							|  |  |  | 	unsigned long	vc_origin;		/* [!] Start of real screen */ | 
					
						
							|  |  |  | 	unsigned long	vc_scr_end;		/* [!] End of real screen */ | 
					
						
							|  |  |  | 	unsigned long	vc_visible_origin;	/* [!] Top of visible window */ | 
					
						
							|  |  |  | 	unsigned int	vc_top, vc_bottom;	/* Scrolling region */ | 
					
						
							|  |  |  | 	const struct consw *vc_sw; | 
					
						
							|  |  |  | 	unsigned short	*vc_screenbuf;		/* In-memory character/attribute buffer */ | 
					
						
							|  |  |  | 	unsigned int	vc_screenbuf_size; | 
					
						
							|  |  |  | 	unsigned char	vc_mode;		/* KD_TEXT, ... */ | 
					
						
							|  |  |  | 	/* attributes for all characters on screen */ | 
					
						
							|  |  |  | 	unsigned char	vc_attr;		/* Current attributes */ | 
					
						
							|  |  |  | 	unsigned char	vc_def_color;		/* Default colors */ | 
					
						
							|  |  |  | 	unsigned char	vc_color;		/* Foreground & background */ | 
					
						
							|  |  |  | 	unsigned char	vc_s_color;		/* Saved foreground & background */ | 
					
						
							|  |  |  | 	unsigned char	vc_ulcolor;		/* Color for underline mode */ | 
					
						
							| 
									
										
										
										
											2007-05-08 00:38:04 -07:00
										 |  |  | 	unsigned char   vc_itcolor; | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 	unsigned char	vc_halfcolor;		/* Color for half intensity mode */ | 
					
						
							|  |  |  | 	/* cursor */ | 
					
						
							|  |  |  | 	unsigned int	vc_cursor_type; | 
					
						
							|  |  |  | 	unsigned short	vc_complement_mask;	/* [#] Xor mask for mouse pointer */ | 
					
						
							|  |  |  | 	unsigned short	vc_s_complement_mask;	/* Saved mouse pointer mask */ | 
					
						
							|  |  |  | 	unsigned int	vc_x, vc_y;		/* Cursor position */ | 
					
						
							|  |  |  | 	unsigned int	vc_saved_x, vc_saved_y; | 
					
						
							|  |  |  | 	unsigned long	vc_pos;			/* Cursor address */ | 
					
						
							|  |  |  | 	/* fonts */	 | 
					
						
							|  |  |  | 	unsigned short	vc_hi_font_mask;	/* [#] Attribute set for upper 256 chars of font or 0 if not supported */ | 
					
						
							|  |  |  | 	struct console_font vc_font;		/* Current VC font set */ | 
					
						
							|  |  |  | 	unsigned short	vc_video_erase_char;	/* Background erase character */ | 
					
						
							|  |  |  | 	/* VT terminal data */ | 
					
						
							|  |  |  | 	unsigned int	vc_state;		/* Escape sequence parser state */ | 
					
						
							|  |  |  | 	unsigned int	vc_npar,vc_par[NPAR];	/* Parameters of current escape sequence */ | 
					
						
							|  |  |  | 	/* data for manual vt switching */ | 
					
						
							|  |  |  | 	struct vt_mode	vt_mode; | 
					
						
							| 
									
										
										
										
											2006-10-02 02:17:14 -07:00
										 |  |  | 	struct pid 	*vt_pid; | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 	int		vt_newvt; | 
					
						
							|  |  |  | 	wait_queue_head_t paste_wait; | 
					
						
							|  |  |  | 	/* mode flags */ | 
					
						
							|  |  |  | 	unsigned int	vc_charset	: 1;	/* Character set G0 / G1 */ | 
					
						
							|  |  |  | 	unsigned int	vc_s_charset	: 1;	/* Saved character set */ | 
					
						
							|  |  |  | 	unsigned int	vc_disp_ctrl	: 1;	/* Display chars < 32? */ | 
					
						
							|  |  |  | 	unsigned int	vc_toggle_meta	: 1;	/* Toggle high bit? */ | 
					
						
							|  |  |  | 	unsigned int	vc_decscnm	: 1;	/* Screen Mode */ | 
					
						
							|  |  |  | 	unsigned int	vc_decom	: 1;	/* Origin Mode */ | 
					
						
							|  |  |  | 	unsigned int	vc_decawm	: 1;	/* Autowrap Mode */ | 
					
						
							|  |  |  | 	unsigned int	vc_deccm	: 1;	/* Cursor Visible */ | 
					
						
							|  |  |  | 	unsigned int	vc_decim	: 1;	/* Insert Mode */ | 
					
						
							|  |  |  | 	unsigned int	vc_deccolm	: 1;	/* 80/132 Column Mode */ | 
					
						
							|  |  |  | 	/* attribute flags */ | 
					
						
							|  |  |  | 	unsigned int	vc_intensity	: 2;	/* 0=half-bright, 1=normal, 2=bold */ | 
					
						
							| 
									
										
										
										
											2007-05-08 00:38:04 -07:00
										 |  |  | 	unsigned int    vc_italic:1; | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 	unsigned int	vc_underline	: 1; | 
					
						
							|  |  |  | 	unsigned int	vc_blink	: 1; | 
					
						
							|  |  |  | 	unsigned int	vc_reverse	: 1; | 
					
						
							|  |  |  | 	unsigned int	vc_s_intensity	: 2;	/* saved rendition */ | 
					
						
							| 
									
										
										
										
											2007-05-08 00:38:04 -07:00
										 |  |  | 	unsigned int    vc_s_italic:1; | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 	unsigned int	vc_s_underline	: 1; | 
					
						
							|  |  |  | 	unsigned int	vc_s_blink	: 1; | 
					
						
							|  |  |  | 	unsigned int	vc_s_reverse	: 1; | 
					
						
							|  |  |  | 	/* misc */ | 
					
						
							|  |  |  | 	unsigned int	vc_ques		: 1; | 
					
						
							|  |  |  | 	unsigned int	vc_need_wrap	: 1; | 
					
						
							|  |  |  | 	unsigned int	vc_can_do_color	: 1; | 
					
						
							|  |  |  | 	unsigned int	vc_report_mouse : 2; | 
					
						
							|  |  |  | 	unsigned char	vc_utf		: 1;	/* Unicode UTF-8 encoding */ | 
					
						
							|  |  |  | 	unsigned char	vc_utf_count; | 
					
						
							|  |  |  | 		 int	vc_utf_char; | 
					
						
							|  |  |  | 	unsigned int	vc_tab_stop[8];		/* Tab stops. 256 columns. */ | 
					
						
							|  |  |  | 	unsigned char   vc_palette[16*3];       /* Colour palette for VGA+ */ | 
					
						
							|  |  |  | 	unsigned short * vc_translate; | 
					
						
							|  |  |  | 	unsigned char 	vc_G0_charset; | 
					
						
							|  |  |  | 	unsigned char 	vc_G1_charset; | 
					
						
							|  |  |  | 	unsigned char 	vc_saved_G0; | 
					
						
							|  |  |  | 	unsigned char 	vc_saved_G1; | 
					
						
							| 
									
										
											  
											
												vt/vgacon: Check if screen resize request comes from userspace
Various console drivers are able to resize the screen via the con_resize()
hook.  This hook is also visible in userspace via the TIOCWINSZ, VT_RESIZE and
VT_RESIZEX ioctl's.  One particular utility, SVGATextMode, expects that
con_resize() of the VGA console will always return success even if the
resulting screen is not compatible with the hardware.  However, this
particular behavior of the VGA console, as reported in Kernel Bugzilla Bug
7513, can cause undefined behavior if the user starts with a console size
larger than 80x25.
To work around this problem, add an extra parameter to con_resize().  This
parameter is ignored by drivers except for vgacon.  If this parameter is
non-zero, then the resize request came from a VT_RESIZE or VT_RESIZEX ioctl
and vgacon will always return success.  If this parameter is zero, vgacon will
return -EINVAL if the requested size is not compatible with the hardware.  The
latter is the more correct behavior.
With this change, SVGATextMode should still work correctly while in-kernel and
stty resize calls can expect correct behavior from vgacon.
Signed-off-by: Antonino Daplas <adaplas@gmail.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
											
										 
											2007-10-16 01:29:35 -07:00
										 |  |  | 	unsigned int    vc_resize_user;         /* resize request from user */ | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 	unsigned int	vc_bell_pitch;		/* Console bell pitch */ | 
					
						
							|  |  |  | 	unsigned int	vc_bell_duration;	/* Console bell duration */ | 
					
						
							|  |  |  | 	struct vc_data **vc_display_fg;		/* [!] Ptr to var holding fg console for this display */ | 
					
						
							|  |  |  | 	unsigned long	vc_uni_pagedir; | 
					
						
							|  |  |  | 	unsigned long	*vc_uni_pagedir_loc;  /* [!] Location of uni_pagedir variable for this console */ | 
					
						
							| 
									
										
										
										
											2010-06-23 12:56:12 -07:00
										 |  |  | 	bool vc_panic_force_write; /* when oops/panic this VC can accept forced output/blanking */ | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 	/* additional information is in vt_kern.h */ | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | struct vc { | 
					
						
							|  |  |  | 	struct vc_data *d; | 
					
						
							| 
									
										
										
										
											2007-02-10 01:44:34 -08:00
										 |  |  | 	struct work_struct SAK_work; | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	/* might add  scrmem, vt_struct, kbd  at some time,
 | 
					
						
							|  |  |  | 	   to have everything in one place - the disadvantage | 
					
						
							|  |  |  | 	   would be that vc_cons etc can no longer be static */ | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | extern struct vc vc_cons [MAX_NR_CONSOLES]; | 
					
						
							| 
									
										
										
										
											2007-02-10 01:44:34 -08:00
										 |  |  | extern void vc_SAK(struct work_struct *work); | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | #define CUR_DEF		0
 | 
					
						
							|  |  |  | #define CUR_NONE	1
 | 
					
						
							|  |  |  | #define CUR_UNDERLINE	2
 | 
					
						
							|  |  |  | #define CUR_LOWER_THIRD	3
 | 
					
						
							|  |  |  | #define CUR_LOWER_HALF	4
 | 
					
						
							|  |  |  | #define CUR_TWO_THIRDS	5
 | 
					
						
							|  |  |  | #define CUR_BLOCK	6
 | 
					
						
							|  |  |  | #define CUR_HWMASK	0x0f
 | 
					
						
							|  |  |  | #define CUR_SWMASK	0xfff0
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #define CUR_DEFAULT CUR_UNDERLINE
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #define CON_IS_VISIBLE(conp) (*conp->vc_display_fg == conp)
 | 
					
						
							| 
									
										
										
										
											2007-06-08 13:47:07 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | #endif /* _LINUX_CONSOLE_STRUCT_H */
 |