Merge tag 'tty-4.10-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/tty
Pull tty/serial updates from Greg KH: "Here's the tty/serial patchset for 4.10-rc1. It's been a quiet kernel cycle for this subsystem, just a small number of changes. A few new serial drivers, and some cleanups to the old vgacon logic, and other minor serial driver changes as well. All of these have been in linux-next for a while with no reported issues" * tag 'tty-4.10-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/tty: (54 commits) serial: 8250_mid fix calltrace when hotplug 8250 serial controller console: Move userspace I/O out of console_lock to fix lockdep warning tty: nozomi: avoid sprintf buffer overflow serial: 8250_pci: Detach low-level driver during PCI error recovery serial: core: don't check port twice in a row mxs-auart: count FIFO overrun errors serial: 8250_dw: Add support for IrDA SIR mode serial: 8250: Expose set_ldisc function serial: 8250: Add IrDA to UART capabilities serial: 8250_dma: power off device after TX is done serial: 8250_port: export serial8250_rpm_{get|put}_tx() serial: sunsu: Free memory when probe fails serial: sunhv: Free memory when remove() is called vt: fix Scroll Lock LED trigger name tty: typo in comments in drivers/tty/vt/keyboard.c tty: amba-pl011: Add earlycon support for SBSA UART tty: nozomi: use permission-specific DEVICE_ATTR variants tty: serial: Make the STM32 serial port depend on it's arch serial: ifx6x60: Free memory when probe fails serial: ioc4_serial: Free memory when kzalloc fails during probe ...
This commit is contained in:
@@ -164,8 +164,6 @@ static void fbcon_putcs(struct vc_data *vc, const unsigned short *s,
|
||||
int count, int ypos, int xpos);
|
||||
static void fbcon_clear_margins(struct vc_data *vc, int bottom_only);
|
||||
static void fbcon_cursor(struct vc_data *vc, int mode);
|
||||
static int fbcon_scroll(struct vc_data *vc, int t, int b, int dir,
|
||||
int count);
|
||||
static void fbcon_bmove(struct vc_data *vc, int sy, int sx, int dy, int dx,
|
||||
int height, int width);
|
||||
static int fbcon_switch(struct vc_data *vc);
|
||||
@@ -1795,15 +1793,15 @@ static inline void fbcon_softback_note(struct vc_data *vc, int t,
|
||||
softback_curr = softback_in;
|
||||
}
|
||||
|
||||
static int fbcon_scroll(struct vc_data *vc, int t, int b, int dir,
|
||||
int count)
|
||||
static bool fbcon_scroll(struct vc_data *vc, unsigned int t, unsigned int b,
|
||||
enum con_scroll dir, unsigned int count)
|
||||
{
|
||||
struct fb_info *info = registered_fb[con2fb_map[vc->vc_num]];
|
||||
struct display *p = &fb_display[vc->vc_num];
|
||||
int scroll_partial = info->flags & FBINFO_PARTIAL_PAN_OK;
|
||||
|
||||
if (fbcon_is_inactive(vc, info))
|
||||
return -EINVAL;
|
||||
return true;
|
||||
|
||||
fbcon_cursor(vc, CM_ERASE);
|
||||
|
||||
@@ -1831,7 +1829,7 @@ static int fbcon_scroll(struct vc_data *vc, int t, int b, int dir,
|
||||
(b - count)),
|
||||
vc->vc_video_erase_char,
|
||||
vc->vc_size_row * count);
|
||||
return 1;
|
||||
return true;
|
||||
break;
|
||||
|
||||
case SCROLL_WRAP_MOVE:
|
||||
@@ -1903,7 +1901,7 @@ static int fbcon_scroll(struct vc_data *vc, int t, int b, int dir,
|
||||
(b - count)),
|
||||
vc->vc_video_erase_char,
|
||||
vc->vc_size_row * count);
|
||||
return 1;
|
||||
return true;
|
||||
}
|
||||
break;
|
||||
|
||||
@@ -1922,7 +1920,7 @@ static int fbcon_scroll(struct vc_data *vc, int t, int b, int dir,
|
||||
t),
|
||||
vc->vc_video_erase_char,
|
||||
vc->vc_size_row * count);
|
||||
return 1;
|
||||
return true;
|
||||
break;
|
||||
|
||||
case SCROLL_WRAP_MOVE:
|
||||
@@ -1992,10 +1990,10 @@ static int fbcon_scroll(struct vc_data *vc, int t, int b, int dir,
|
||||
t),
|
||||
vc->vc_video_erase_char,
|
||||
vc->vc_size_row * count);
|
||||
return 1;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
|
@@ -488,12 +488,13 @@ static void mdacon_cursor(struct vc_data *c, int mode)
|
||||
}
|
||||
}
|
||||
|
||||
static int mdacon_scroll(struct vc_data *c, int t, int b, int dir, int lines)
|
||||
static bool mdacon_scroll(struct vc_data *c, unsigned int t, unsigned int b,
|
||||
enum con_scroll dir, unsigned int lines)
|
||||
{
|
||||
u16 eattr = mda_convert_attr(c->vc_video_erase_char);
|
||||
|
||||
if (!lines)
|
||||
return 0;
|
||||
return false;
|
||||
|
||||
if (lines > c->vc_rows) /* maximum realistic size */
|
||||
lines = c->vc_rows;
|
||||
@@ -514,7 +515,7 @@ static int mdacon_scroll(struct vc_data *c, int t, int b, int dir, int lines)
|
||||
break;
|
||||
}
|
||||
|
||||
return 0;
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
|
@@ -574,8 +574,8 @@ static int newport_font_set(struct vc_data *vc, struct console_font *font, unsig
|
||||
return newport_set_font(vc->vc_num, font);
|
||||
}
|
||||
|
||||
static int newport_scroll(struct vc_data *vc, int t, int b, int dir,
|
||||
int lines)
|
||||
static bool newport_scroll(struct vc_data *vc, unsigned int t, unsigned int b,
|
||||
enum con_scroll dir, unsigned int lines)
|
||||
{
|
||||
int count, x, y;
|
||||
unsigned short *s, *d;
|
||||
@@ -595,7 +595,7 @@ static int newport_scroll(struct vc_data *vc, int t, int b, int dir,
|
||||
(vc->vc_color & 0xf0) >> 4);
|
||||
}
|
||||
npregs->cset.topscan = (topscan - 1) & 0x3ff;
|
||||
return 0;
|
||||
return false;
|
||||
}
|
||||
|
||||
count = (b - t - lines) * vc->vc_cols;
|
||||
@@ -670,7 +670,7 @@ static int newport_scroll(struct vc_data *vc, int t, int b, int dir,
|
||||
}
|
||||
}
|
||||
}
|
||||
return 1;
|
||||
return true;
|
||||
}
|
||||
|
||||
static int newport_dummy(struct vc_data *c)
|
||||
|
@@ -153,12 +153,13 @@ static void sticon_cursor(struct vc_data *conp, int mode)
|
||||
}
|
||||
}
|
||||
|
||||
static int sticon_scroll(struct vc_data *conp, int t, int b, int dir, int count)
|
||||
static bool sticon_scroll(struct vc_data *conp, unsigned int t,
|
||||
unsigned int b, enum con_scroll dir, unsigned int count)
|
||||
{
|
||||
struct sti_struct *sti = sticon_sti;
|
||||
|
||||
if (vga_is_gfx)
|
||||
return 0;
|
||||
return false;
|
||||
|
||||
sticon_cursor(conp, CM_ERASE);
|
||||
|
||||
@@ -174,7 +175,7 @@ static int sticon_scroll(struct vc_data *conp, int t, int b, int dir, int count)
|
||||
break;
|
||||
}
|
||||
|
||||
return 0;
|
||||
return false;
|
||||
}
|
||||
|
||||
static void sticon_init(struct vc_data *c, int init)
|
||||
|
@@ -60,15 +60,6 @@ static struct vgastate vgastate;
|
||||
|
||||
#define BLANK 0x0020
|
||||
|
||||
#define CAN_LOAD_EGA_FONTS /* undefine if the user must not do this */
|
||||
#define CAN_LOAD_PALETTE /* undefine if the user must not do this */
|
||||
|
||||
/* You really do _NOT_ want to define this, unless you have buggy
|
||||
* Trident VGA which will resize cursor when moving it between column
|
||||
* 15 & 16. If you define this and your VGA is OK, inverse bug will
|
||||
* appear.
|
||||
*/
|
||||
#undef TRIDENT_GLITCH
|
||||
#define VGA_FONTWIDTH 8 /* VGA does not support fontwidths != 8 */
|
||||
/*
|
||||
* Interface used by the world
|
||||
@@ -83,14 +74,12 @@ static int vgacon_blank(struct vc_data *c, int blank, int mode_switch);
|
||||
static void vgacon_scrolldelta(struct vc_data *c, int lines);
|
||||
static int vgacon_set_origin(struct vc_data *c);
|
||||
static void vgacon_save_screen(struct vc_data *c);
|
||||
static int vgacon_scroll(struct vc_data *c, int t, int b, int dir,
|
||||
int lines);
|
||||
static void vgacon_invert_region(struct vc_data *c, u16 * p, int count);
|
||||
static struct uni_pagedir *vgacon_uni_pagedir;
|
||||
static int vgacon_refcount;
|
||||
|
||||
/* Description of the hardware situation */
|
||||
static int vga_init_done __read_mostly;
|
||||
static bool vga_init_done;
|
||||
static unsigned long vga_vram_base __read_mostly; /* Base of video memory */
|
||||
static unsigned long vga_vram_end __read_mostly; /* End of video memory */
|
||||
static unsigned int vga_vram_size __read_mostly; /* Size of video memory */
|
||||
@@ -98,31 +87,31 @@ static u16 vga_video_port_reg __read_mostly; /* Video register select port */
|
||||
static u16 vga_video_port_val __read_mostly; /* Video register value port */
|
||||
static unsigned int vga_video_num_columns; /* Number of text columns */
|
||||
static unsigned int vga_video_num_lines; /* Number of text lines */
|
||||
static int vga_can_do_color __read_mostly; /* Do we support colors? */
|
||||
static bool vga_can_do_color; /* Do we support colors? */
|
||||
static unsigned int vga_default_font_height __read_mostly; /* Height of default screen font */
|
||||
static unsigned char vga_video_type __read_mostly; /* Card type */
|
||||
static unsigned char vga_hardscroll_enabled __read_mostly;
|
||||
static unsigned char vga_hardscroll_user_enable __read_mostly = 1;
|
||||
static unsigned char vga_font_is_default = 1;
|
||||
static bool vga_font_is_default = true;
|
||||
static int vga_vesa_blanked;
|
||||
static int vga_palette_blanked;
|
||||
static int vga_is_gfx;
|
||||
static int vga_512_chars;
|
||||
static bool vga_palette_blanked;
|
||||
static bool vga_is_gfx;
|
||||
static bool vga_512_chars;
|
||||
static int vga_video_font_height;
|
||||
static int vga_scan_lines __read_mostly;
|
||||
static unsigned int vga_rolled_over;
|
||||
|
||||
static int vgacon_text_mode_force;
|
||||
static bool vgacon_text_mode_force;
|
||||
static bool vga_hardscroll_enabled;
|
||||
static bool vga_hardscroll_user_enable = true;
|
||||
|
||||
bool vgacon_text_force(void)
|
||||
{
|
||||
return vgacon_text_mode_force ? true : false;
|
||||
return vgacon_text_mode_force;
|
||||
}
|
||||
EXPORT_SYMBOL(vgacon_text_force);
|
||||
|
||||
static int __init text_mode(char *str)
|
||||
{
|
||||
vgacon_text_mode_force = 1;
|
||||
vgacon_text_mode_force = true;
|
||||
return 1;
|
||||
}
|
||||
|
||||
@@ -136,7 +125,7 @@ static int __init no_scroll(char *str)
|
||||
* Braille reader made by F.H. Papenmeier (Germany).
|
||||
* Use the "no-scroll" bootflag.
|
||||
*/
|
||||
vga_hardscroll_user_enable = vga_hardscroll_enabled = 0;
|
||||
vga_hardscroll_user_enable = vga_hardscroll_enabled = false;
|
||||
return 1;
|
||||
}
|
||||
|
||||
@@ -159,18 +148,10 @@ static inline void write_vga(unsigned char reg, unsigned int val)
|
||||
* handlers, thus the write has to be IRQ-atomic.
|
||||
*/
|
||||
raw_spin_lock_irqsave(&vga_lock, flags);
|
||||
|
||||
#ifndef SLOW_VGA
|
||||
v1 = reg + (val & 0xff00);
|
||||
v2 = reg + 1 + ((val << 8) & 0xff00);
|
||||
outw(v1, vga_video_port_reg);
|
||||
outw(v2, vga_video_port_reg);
|
||||
#else
|
||||
outb_p(reg, vga_video_port_reg);
|
||||
outb_p(val >> 8, vga_video_port_val);
|
||||
outb_p(reg + 1, vga_video_port_reg);
|
||||
outb_p(val & 0xff, vga_video_port_val);
|
||||
#endif
|
||||
raw_spin_unlock_irqrestore(&vga_lock, flags);
|
||||
}
|
||||
|
||||
@@ -334,31 +315,8 @@ static void vgacon_restore_screen(struct vc_data *c)
|
||||
|
||||
static void vgacon_scrolldelta(struct vc_data *c, int lines)
|
||||
{
|
||||
if (!lines) /* Turn scrollback off */
|
||||
c->vc_visible_origin = c->vc_origin;
|
||||
else {
|
||||
int margin = c->vc_size_row * 4;
|
||||
int ul, we, p, st;
|
||||
|
||||
if (vga_rolled_over >
|
||||
(c->vc_scr_end - vga_vram_base) + margin) {
|
||||
ul = c->vc_scr_end - vga_vram_base;
|
||||
we = vga_rolled_over + c->vc_size_row;
|
||||
} else {
|
||||
ul = 0;
|
||||
we = vga_vram_size;
|
||||
}
|
||||
p = (c->vc_visible_origin - vga_vram_base - ul + we) % we +
|
||||
lines * c->vc_size_row;
|
||||
st = (c->vc_origin - vga_vram_base - ul + we) % we;
|
||||
if (st < 2 * margin)
|
||||
margin = 0;
|
||||
if (p < margin)
|
||||
p = 0;
|
||||
if (p > st - margin)
|
||||
p = st;
|
||||
c->vc_visible_origin = vga_vram_base + (p + ul) % we;
|
||||
}
|
||||
vc_scrolldelta_helper(c, lines, vga_rolled_over, (void *)vga_vram_base,
|
||||
vga_vram_size);
|
||||
vga_set_mem_top(c);
|
||||
}
|
||||
#endif /* CONFIG_VGACON_SOFT_SCROLLBACK */
|
||||
@@ -427,7 +385,7 @@ static const char *vgacon_startup(void)
|
||||
}
|
||||
} else {
|
||||
/* If not, it is color. */
|
||||
vga_can_do_color = 1;
|
||||
vga_can_do_color = true;
|
||||
vga_vram_base = 0xb8000;
|
||||
vga_video_port_reg = VGA_CRT_IC;
|
||||
vga_video_port_val = VGA_CRT_DC;
|
||||
@@ -451,18 +409,6 @@ static const char *vgacon_startup(void)
|
||||
request_resource(&ioport_resource,
|
||||
&vga_console_resource);
|
||||
|
||||
#ifdef VGA_CAN_DO_64KB
|
||||
/*
|
||||
* get 64K rather than 32K of video RAM.
|
||||
* This doesn't actually work on all "VGA"
|
||||
* controllers (it seems like setting MM=01
|
||||
* and COE=1 isn't necessarily a good idea)
|
||||
*/
|
||||
vga_vram_base = 0xa0000;
|
||||
vga_vram_size = 0x10000;
|
||||
outb_p(6, VGA_GFX_I);
|
||||
outb_p(6, VGA_GFX_D);
|
||||
#endif
|
||||
/*
|
||||
* Normalise the palette registers, to point
|
||||
* the 16 screen colours to the first 16
|
||||
@@ -542,7 +488,7 @@ static const char *vgacon_startup(void)
|
||||
|
||||
if (!vga_init_done) {
|
||||
vgacon_scrollback_startup();
|
||||
vga_init_done = 1;
|
||||
vga_init_done = true;
|
||||
}
|
||||
|
||||
return display_desc;
|
||||
@@ -634,7 +580,7 @@ static u8 vgacon_build_attr(struct vc_data *c, u8 color, u8 intensity,
|
||||
|
||||
static void vgacon_invert_region(struct vc_data *c, u16 * p, int count)
|
||||
{
|
||||
int col = vga_can_do_color;
|
||||
const bool col = vga_can_do_color;
|
||||
|
||||
while (count--) {
|
||||
u16 a = scr_readw(p);
|
||||
@@ -652,11 +598,6 @@ static void vgacon_set_cursor_size(int xpos, int from, int to)
|
||||
unsigned long flags;
|
||||
int curs, cure;
|
||||
|
||||
#ifdef TRIDENT_GLITCH
|
||||
if (xpos < 16)
|
||||
from--, to--;
|
||||
#endif
|
||||
|
||||
if ((from == cursor_size_lastfrom) && (to == cursor_size_lastto))
|
||||
return;
|
||||
cursor_size_lastfrom = from;
|
||||
@@ -858,12 +799,10 @@ static void vga_set_palette(struct vc_data *vc, const unsigned char *table)
|
||||
|
||||
static void vgacon_set_palette(struct vc_data *vc, const unsigned char *table)
|
||||
{
|
||||
#ifdef CAN_LOAD_PALETTE
|
||||
if (vga_video_type != VIDEO_TYPE_VGAC || vga_palette_blanked
|
||||
|| !con_is_visible(vc))
|
||||
return;
|
||||
vga_set_palette(vc, table);
|
||||
#endif
|
||||
}
|
||||
|
||||
/* structure holding original VGA register settings */
|
||||
@@ -1006,24 +945,24 @@ static int vgacon_blank(struct vc_data *c, int blank, int mode_switch)
|
||||
}
|
||||
if (vga_palette_blanked) {
|
||||
vga_set_palette(c, color_table);
|
||||
vga_palette_blanked = 0;
|
||||
vga_palette_blanked = false;
|
||||
return 0;
|
||||
}
|
||||
vga_is_gfx = 0;
|
||||
vga_is_gfx = false;
|
||||
/* Tell console.c that it has to restore the screen itself */
|
||||
return 1;
|
||||
case 1: /* Normal blanking */
|
||||
case -1: /* Obsolete */
|
||||
if (!mode_switch && vga_video_type == VIDEO_TYPE_VGAC) {
|
||||
vga_pal_blank(&vgastate);
|
||||
vga_palette_blanked = 1;
|
||||
vga_palette_blanked = true;
|
||||
return 0;
|
||||
}
|
||||
vgacon_set_origin(c);
|
||||
scr_memsetw((void *) vga_vram_base, BLANK,
|
||||
c->vc_screenbuf_size);
|
||||
if (mode_switch)
|
||||
vga_is_gfx = 1;
|
||||
vga_is_gfx = true;
|
||||
return 1;
|
||||
default: /* VESA blanking */
|
||||
if (vga_video_type == VIDEO_TYPE_VGAC) {
|
||||
@@ -1046,15 +985,14 @@ static int vgacon_blank(struct vc_data *c, int blank, int mode_switch)
|
||||
* (sizif@botik.yaroslavl.su).
|
||||
*/
|
||||
|
||||
#ifdef CAN_LOAD_EGA_FONTS
|
||||
|
||||
#define colourmap 0xa0000
|
||||
/* Pauline Middelink <middelin@polyware.iaf.nl> reports that we
|
||||
should use 0xA0000 for the bwmap as well.. */
|
||||
#define blackwmap 0xa0000
|
||||
#define cmapsz 8192
|
||||
|
||||
static int vgacon_do_font_op(struct vgastate *state,char *arg,int set,int ch512)
|
||||
static int vgacon_do_font_op(struct vgastate *state, char *arg, int set,
|
||||
bool ch512)
|
||||
{
|
||||
unsigned short video_port_status = vga_video_port_reg + 6;
|
||||
int font_select = 0x00, beg, i;
|
||||
@@ -1063,10 +1001,6 @@ static int vgacon_do_font_op(struct vgastate *state,char *arg,int set,int ch512)
|
||||
if (vga_video_type != VIDEO_TYPE_EGAM) {
|
||||
charmap = (char *) VGA_MAP_MEM(colourmap, 0);
|
||||
beg = 0x0e;
|
||||
#ifdef VGA_CAN_DO_64KB
|
||||
if (vga_video_type == VIDEO_TYPE_VGAC)
|
||||
beg = 0x06;
|
||||
#endif
|
||||
} else {
|
||||
charmap = (char *) VGA_MAP_MEM(blackwmap, 0);
|
||||
beg = 0x0a;
|
||||
@@ -1080,7 +1014,7 @@ static int vgacon_do_font_op(struct vgastate *state,char *arg,int set,int ch512)
|
||||
if (!arg)
|
||||
return -EINVAL; /* Return to default font not supported */
|
||||
|
||||
vga_font_is_default = 0;
|
||||
vga_font_is_default = false;
|
||||
font_select = ch512 ? 0x04 : 0x00;
|
||||
#else
|
||||
/*
|
||||
@@ -1091,7 +1025,7 @@ static int vgacon_do_font_op(struct vgastate *state,char *arg,int set,int ch512)
|
||||
if (set) {
|
||||
vga_font_is_default = !arg;
|
||||
if (!arg)
|
||||
ch512 = 0; /* Default font is always 256 */
|
||||
ch512 = false; /* Default font is always 256 */
|
||||
font_select = arg ? (ch512 ? 0x0e : 0x0a) : 0x00;
|
||||
}
|
||||
|
||||
@@ -1295,13 +1229,6 @@ static int vgacon_font_get(struct vc_data *c, struct console_font *font)
|
||||
return vgacon_do_font_op(&vgastate, font->data, 0, vga_512_chars);
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
#define vgacon_font_set NULL
|
||||
#define vgacon_font_get NULL
|
||||
|
||||
#endif
|
||||
|
||||
static int vgacon_resize(struct vc_data *c, unsigned int width,
|
||||
unsigned int height, unsigned int user)
|
||||
{
|
||||
@@ -1350,17 +1277,17 @@ static void vgacon_save_screen(struct vc_data *c)
|
||||
c->vc_screenbuf_size > vga_vram_size ? vga_vram_size : c->vc_screenbuf_size);
|
||||
}
|
||||
|
||||
static int vgacon_scroll(struct vc_data *c, int t, int b, int dir,
|
||||
int lines)
|
||||
static bool vgacon_scroll(struct vc_data *c, unsigned int t, unsigned int b,
|
||||
enum con_scroll dir, unsigned int lines)
|
||||
{
|
||||
unsigned long oldo;
|
||||
unsigned int delta;
|
||||
|
||||
if (t || b != c->vc_rows || vga_is_gfx || c->vc_mode != KD_TEXT)
|
||||
return 0;
|
||||
return false;
|
||||
|
||||
if (!vga_hardscroll_enabled || lines >= c->vc_rows / 2)
|
||||
return 0;
|
||||
return false;
|
||||
|
||||
vgacon_restore_screen(c);
|
||||
oldo = c->vc_origin;
|
||||
@@ -1396,7 +1323,7 @@ static int vgacon_scroll(struct vc_data *c, int t, int b, int dir,
|
||||
c->vc_visible_origin = c->vc_origin;
|
||||
vga_set_mem_top(c);
|
||||
c->vc_pos = (c->vc_pos - oldo) + c->vc_origin;
|
||||
return 1;
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user