diff options
Diffstat (limited to 'drivers/video/fbcon.c')
-rw-r--r-- | drivers/video/fbcon.c | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/drivers/video/fbcon.c b/drivers/video/fbcon.c index dfb019fdd..a78843085 100644 --- a/drivers/video/fbcon.c +++ b/drivers/video/fbcon.c @@ -311,6 +311,10 @@ void set_con2fb_map(int unit, int newidx) fb_display[unit]._fontheightlog = fontheightlog; fb_display[unit].userfont = userfont; fb_display[unit].fb_info = newfb; + if (conp) + conp->vc_display_fg = &newfb->display_fg; + if (!newfb->display_fg) + newfb->display_fg = conp; if (!newfb->changevar) newfb->changevar = oldfb->changevar; /* tell console var has changed */ @@ -683,7 +687,7 @@ static void fbcon_setup(int con, int init, int logo) } if (save) { q = (unsigned short *)(conp->vc_origin + conp->vc_size_row * old_rows); - memcpy(q, save, logo_lines * nr_cols * 2); + scr_memcpyw(q, save, logo_lines * nr_cols * 2); conp->vc_y += logo_lines; conp->vc_pos += logo_lines * conp->vc_size_row; kfree(save); @@ -1167,8 +1171,12 @@ void fbcon_redraw_bmove(struct display *p, int sy, int sx, int dy, int dx, int h static inline void fbcon_softback_note(struct vc_data *conp, int t, int count) { - unsigned short *p = (unsigned short *) - (conp->vc_origin + t * conp->vc_size_row); + unsigned short *p; + + if (conp->vc_num != fg_console) + return; + p = (unsigned short *)(conp->vc_origin + t * conp->vc_size_row); + while (count) { scr_memcpyw((u16 *)softback_in, p, conp->vc_size_row); count--; |