提交 67f82cad 编写于 作者: Y Yang Yingliang

Revert "vt: Fix character height handling with VT_RESIZEX"

hulk inclusion
category: bugfix
bugzilla: NA
CVE: NA

--------------------------------

This reverts commit cb173fc2
to avoid kabi broken.
Signed-off-by: NYang Yingliang <yangyingliang@huawei.com>
Reviewed-by: NJian Cheng <cj.chengjian@huawei.com>
Signed-off-by: NYang Yingliang <yangyingliang@huawei.com>
上级 b73ecd88
...@@ -895,17 +895,17 @@ int vt_ioctl(struct tty_struct *tty, ...@@ -895,17 +895,17 @@ int vt_ioctl(struct tty_struct *tty,
if (vcp) { if (vcp) {
int ret; int ret;
int save_scan_lines = vcp->vc_scan_lines; int save_scan_lines = vcp->vc_scan_lines;
int save_cell_height = vcp->vc_cell_height; int save_font_height = vcp->vc_font.height;
if (v.v_vlin) if (v.v_vlin)
vcp->vc_scan_lines = v.v_vlin; vcp->vc_scan_lines = v.v_vlin;
if (v.v_clin) if (v.v_clin)
vcp->vc_cell_height = v.v_clin; vcp->vc_font.height = v.v_clin;
vcp->vc_resize_user = 1; vcp->vc_resize_user = 1;
ret = vc_resize(vcp, v.v_cols, v.v_rows); ret = vc_resize(vcp, v.v_cols, v.v_rows);
if (ret) { if (ret) {
vcp->vc_scan_lines = save_scan_lines; vcp->vc_scan_lines = save_scan_lines;
vcp->vc_cell_height = save_cell_height; vcp->vc_font.height = save_font_height;
console_unlock(); console_unlock();
return ret; return ret;
} }
......
...@@ -384,7 +384,7 @@ static void vgacon_init(struct vc_data *c, int init) ...@@ -384,7 +384,7 @@ static void vgacon_init(struct vc_data *c, int init)
vc_resize(c, vga_video_num_columns, vga_video_num_lines); vc_resize(c, vga_video_num_columns, vga_video_num_lines);
c->vc_scan_lines = vga_scan_lines; c->vc_scan_lines = vga_scan_lines;
c->vc_font.height = c->vc_cell_height = vga_video_font_height; c->vc_font.height = vga_video_font_height;
c->vc_complement_mask = 0x7700; c->vc_complement_mask = 0x7700;
if (vga_512_chars) if (vga_512_chars)
c->vc_hi_font_mask = 0x0800; c->vc_hi_font_mask = 0x0800;
...@@ -517,32 +517,32 @@ static void vgacon_cursor(struct vc_data *c, int mode) ...@@ -517,32 +517,32 @@ static void vgacon_cursor(struct vc_data *c, int mode)
switch (c->vc_cursor_type & 0x0f) { switch (c->vc_cursor_type & 0x0f) {
case CUR_UNDERLINE: case CUR_UNDERLINE:
vgacon_set_cursor_size(c->vc_x, vgacon_set_cursor_size(c->vc_x,
c->vc_cell_height - c->vc_font.height -
(c->vc_cell_height < (c->vc_font.height <
10 ? 2 : 3), 10 ? 2 : 3),
c->vc_cell_height - c->vc_font.height -
(c->vc_cell_height < (c->vc_font.height <
10 ? 1 : 2)); 10 ? 1 : 2));
break; break;
case CUR_TWO_THIRDS: case CUR_TWO_THIRDS:
vgacon_set_cursor_size(c->vc_x, vgacon_set_cursor_size(c->vc_x,
c->vc_cell_height / 3, c->vc_font.height / 3,
c->vc_cell_height - c->vc_font.height -
(c->vc_cell_height < (c->vc_font.height <
10 ? 1 : 2)); 10 ? 1 : 2));
break; break;
case CUR_LOWER_THIRD: case CUR_LOWER_THIRD:
vgacon_set_cursor_size(c->vc_x, vgacon_set_cursor_size(c->vc_x,
(c->vc_cell_height * 2) / 3, (c->vc_font.height * 2) / 3,
c->vc_cell_height - c->vc_font.height -
(c->vc_cell_height < (c->vc_font.height <
10 ? 1 : 2)); 10 ? 1 : 2));
break; break;
case CUR_LOWER_HALF: case CUR_LOWER_HALF:
vgacon_set_cursor_size(c->vc_x, vgacon_set_cursor_size(c->vc_x,
c->vc_cell_height / 2, c->vc_font.height / 2,
c->vc_cell_height - c->vc_font.height -
(c->vc_cell_height < (c->vc_font.height <
10 ? 1 : 2)); 10 ? 1 : 2));
break; break;
case CUR_NONE: case CUR_NONE:
...@@ -553,7 +553,7 @@ static void vgacon_cursor(struct vc_data *c, int mode) ...@@ -553,7 +553,7 @@ static void vgacon_cursor(struct vc_data *c, int mode)
break; break;
default: default:
vgacon_set_cursor_size(c->vc_x, 1, vgacon_set_cursor_size(c->vc_x, 1,
c->vc_cell_height); c->vc_font.height);
break; break;
} }
break; break;
...@@ -564,13 +564,13 @@ static int vgacon_doresize(struct vc_data *c, ...@@ -564,13 +564,13 @@ static int vgacon_doresize(struct vc_data *c,
unsigned int width, unsigned int height) unsigned int width, unsigned int height)
{ {
unsigned long flags; unsigned long flags;
unsigned int scanlines = height * c->vc_cell_height; unsigned int scanlines = height * c->vc_font.height;
u8 scanlines_lo = 0, r7 = 0, vsync_end = 0, mode, max_scan; u8 scanlines_lo = 0, r7 = 0, vsync_end = 0, mode, max_scan;
raw_spin_lock_irqsave(&vga_lock, flags); raw_spin_lock_irqsave(&vga_lock, flags);
vgacon_xres = width * VGA_FONTWIDTH; vgacon_xres = width * VGA_FONTWIDTH;
vgacon_yres = height * c->vc_cell_height; vgacon_yres = height * c->vc_font.height;
if (vga_video_type >= VIDEO_TYPE_VGAC) { if (vga_video_type >= VIDEO_TYPE_VGAC) {
outb_p(VGA_CRTC_MAX_SCAN, vga_video_port_reg); outb_p(VGA_CRTC_MAX_SCAN, vga_video_port_reg);
max_scan = inb_p(vga_video_port_val); max_scan = inb_p(vga_video_port_val);
...@@ -625,9 +625,9 @@ static int vgacon_doresize(struct vc_data *c, ...@@ -625,9 +625,9 @@ static int vgacon_doresize(struct vc_data *c,
static int vgacon_switch(struct vc_data *c) static int vgacon_switch(struct vc_data *c)
{ {
int x = c->vc_cols * VGA_FONTWIDTH; int x = c->vc_cols * VGA_FONTWIDTH;
int y = c->vc_rows * c->vc_cell_height; int y = c->vc_rows * c->vc_font.height;
int rows = screen_info.orig_video_lines * vga_default_font_height/ int rows = screen_info.orig_video_lines * vga_default_font_height/
c->vc_cell_height; c->vc_font.height;
/* /*
* We need to save screen size here as it's the only way * We need to save screen size here as it's the only way
* we can spot the screen has been resized and we need to * we can spot the screen has been resized and we need to
...@@ -1058,7 +1058,7 @@ static int vgacon_adjust_height(struct vc_data *vc, unsigned fontheight) ...@@ -1058,7 +1058,7 @@ static int vgacon_adjust_height(struct vc_data *vc, unsigned fontheight)
cursor_size_lastto = 0; cursor_size_lastto = 0;
c->vc_sw->con_cursor(c, CM_DRAW); c->vc_sw->con_cursor(c, CM_DRAW);
} }
c->vc_font.height = c->vc_cell_height = fontheight; c->vc_font.height = fontheight;
vc_resize(c, 0, rows); /* Adjust console size */ vc_resize(c, 0, rows); /* Adjust console size */
} }
} }
...@@ -1113,12 +1113,12 @@ static int vgacon_resize(struct vc_data *c, unsigned int width, ...@@ -1113,12 +1113,12 @@ static int vgacon_resize(struct vc_data *c, unsigned int width,
*/ */
screen_info.orig_video_cols = width; screen_info.orig_video_cols = width;
screen_info.orig_video_lines = height; screen_info.orig_video_lines = height;
vga_default_font_height = c->vc_cell_height; vga_default_font_height = c->vc_font.height;
return 0; return 0;
} }
if (width % 2 || width > screen_info.orig_video_cols || if (width % 2 || width > screen_info.orig_video_cols ||
height > (screen_info.orig_video_lines * vga_default_font_height)/ height > (screen_info.orig_video_lines * vga_default_font_height)/
c->vc_cell_height) c->vc_font.height)
return -EINVAL; return -EINVAL;
if (con_is_visible(c) && !vga_is_gfx) /* who knows */ if (con_is_visible(c) && !vga_is_gfx) /* who knows */
......
...@@ -62,7 +62,6 @@ struct vc_data { ...@@ -62,7 +62,6 @@ struct vc_data {
unsigned int vc_rows; unsigned int vc_rows;
unsigned int vc_size_row; /* Bytes per row */ unsigned int vc_size_row; /* Bytes per row */
unsigned int vc_scan_lines; /* # of scan lines */ unsigned int vc_scan_lines; /* # of scan lines */
unsigned int vc_cell_height; /* CRTC character cell height */
unsigned long vc_origin; /* [!] Start of real screen */ unsigned long vc_origin; /* [!] Start of real screen */
unsigned long vc_scr_end; /* [!] End of real screen */ unsigned long vc_scr_end; /* [!] End of real screen */
unsigned long vc_visible_origin; /* [!] Top of visible window */ unsigned long vc_visible_origin; /* [!] Top of visible window */
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册