Lines Matching refs:vc

156 #define advance_row(p, delta) (unsigned short *)((unsigned long)(p) + (delta) * vc->vc_size_row)
167 static void fbcon_init(struct vc_data *vc, int init);
168 static void fbcon_deinit(struct vc_data *vc);
169 static void fbcon_clear(struct vc_data *vc, int sy, int sx, int height,
171 static void fbcon_putc(struct vc_data *vc, int c, int ypos, int xpos);
172 static void fbcon_putcs(struct vc_data *vc, const unsigned short *s,
174 static void fbcon_clear_margins(struct vc_data *vc, int bottom_only);
175 static void fbcon_cursor(struct vc_data *vc, int mode);
176 static int fbcon_switch(struct vc_data *vc);
177 static int fbcon_blank(struct vc_data *vc, int blank, int mode_switch);
178 static void fbcon_set_palette(struct vc_data *vc, const unsigned char *table);
228 struct vc_data *vc; in fbcon_rotate_all() local
236 vc = vc_cons[i].d; in fbcon_rotate_all()
237 if (!vc || vc->vc_mode != KD_TEXT || in fbcon_rotate_all()
241 p = &fb_display[vc->vc_num]; in fbcon_rotate_all()
273 static inline int fbcon_is_inactive(struct vc_data *vc, struct fb_info *info) in fbcon_is_inactive() argument
278 vc->vc_mode != KD_TEXT || ops->graphics); in fbcon_is_inactive()
281 static int get_color(struct vc_data *vc, struct fb_info *info, in get_color() argument
288 unsigned short charmask = vc->vc_hi_font_mask ? 0x1ff : 0xff; in get_color()
290 c = vc->vc_video_erase_char & charmask; in get_color()
294 color = (is_fg) ? attr_fgcol((vc->vc_hi_font_mask) ? 9 : 8, c) in get_color()
295 : attr_bgcol((vc->vc_hi_font_mask) ? 13 : 12, c); in get_color()
352 struct vc_data *vc = NULL; in fb_flashcursor() local
365 vc = vc_cons[ops->currcon].d; in fb_flashcursor()
367 if (!vc || !con_is_visible(vc) || in fb_flashcursor()
368 registered_fb[con2fb_map[vc->vc_num]] != info || in fb_flashcursor()
369 vc->vc_deccm != 1) { in fb_flashcursor()
374 c = scr_readw((u16 *) vc->vc_pos); in fb_flashcursor()
377 ops->cursor(vc, info, mode, get_color(vc, info, c, 1), in fb_flashcursor()
378 get_color(vc, info, c, 0)); in fb_flashcursor()
557 static void fbcon_prepare_logo(struct vc_data *vc, struct fb_info *info, in fbcon_prepare_logo() argument
563 static void fbcon_prepare_logo(struct vc_data *vc, struct fb_info *info, in fbcon_prepare_logo() argument
568 int cnt, erase = vc->vc_video_erase_char, step; in fbcon_prepare_logo()
584 logo_lines = DIV_ROUND_UP(logo_height, vc->vc_font.height); in fbcon_prepare_logo()
585 q = (unsigned short *) (vc->vc_origin + in fbcon_prepare_logo()
586 vc->vc_size_row * rows); in fbcon_prepare_logo()
589 if (scr_readw(r) != vc->vc_video_erase_char) in fbcon_prepare_logo()
607 scr_memcpyw(r + step, r, vc->vc_size_row); in fbcon_prepare_logo()
612 if (vc->state.y + logo_lines >= rows) in fbcon_prepare_logo()
613 lines = rows - vc->state.y - 1; in fbcon_prepare_logo()
616 vc->state.y += lines; in fbcon_prepare_logo()
617 vc->vc_pos += lines * vc->vc_size_row; in fbcon_prepare_logo()
620 scr_memsetw((unsigned short *) vc->vc_origin, in fbcon_prepare_logo()
622 vc->vc_size_row * logo_lines); in fbcon_prepare_logo()
624 if (con_is_visible(vc) && vc->vc_mode == KD_TEXT) { in fbcon_prepare_logo()
625 fbcon_clear_margins(vc, 0); in fbcon_prepare_logo()
626 update_screen(vc); in fbcon_prepare_logo()
630 q = (unsigned short *) (vc->vc_origin + in fbcon_prepare_logo()
631 vc->vc_size_row * in fbcon_prepare_logo()
634 vc->state.y += logo_lines; in fbcon_prepare_logo()
635 vc->vc_pos += logo_lines * vc->vc_size_row; in fbcon_prepare_logo()
642 if (logo_lines > vc->vc_bottom) { in fbcon_prepare_logo()
648 vc->vc_top = logo_lines; in fbcon_prepare_logo()
654 static void set_blitting_type(struct vc_data *vc, struct fb_info *info) in set_blitting_type() argument
658 ops->p = &fb_display[vc->vc_num]; in set_blitting_type()
661 fbcon_set_tileops(vc, info); in set_blitting_type()
679 static void set_blitting_type(struct vc_data *vc, struct fb_info *info) in set_blitting_type() argument
684 ops->p = &fb_display[vc->vc_num]; in set_blitting_type()
697 static int con2fb_acquire_newinfo(struct vc_data *vc, struct fb_info *info, in con2fb_acquire_newinfo() argument
721 if (vc) in con2fb_acquire_newinfo()
722 set_blitting_type(vc, info); in con2fb_acquire_newinfo()
733 static int con2fb_release_oldinfo(struct vc_data *vc, struct fb_info *oldinfo, in con2fb_release_oldinfo() argument
779 static void con2fb_init_display(struct vc_data *vc, struct fb_info *info, in con2fb_init_display() argument
826 struct vc_data *vc = vc_cons[unit].d; in set_con2fb_map() local
852 err = con2fb_acquire_newinfo(vc, info, unit, oldidx); in set_con2fb_map()
859 err = con2fb_release_oldinfo(vc, oldinfo, info, unit, oldidx, in set_con2fb_map()
869 con2fb_init_display(vc, info, unit, show_logo); in set_con2fb_map()
929 struct vc_data *vc = vc_cons[fg_console].d; in fbcon_startup() local
977 set_blitting_type(vc, info); in fbcon_startup()
980 if (!p->fontdata && !vc->vc_font.data) { in fbcon_startup()
986 vc->vc_font.width = font->width; in fbcon_startup()
987 vc->vc_font.height = font->height; in fbcon_startup()
988 vc->vc_font.data = (void *)(p->fontdata = font->data); in fbcon_startup()
989 vc->vc_font.charcount = font->charcount; in fbcon_startup()
991 p->fontdata = vc->vc_font.data; in fbcon_startup()
996 cols /= vc->vc_font.width; in fbcon_startup()
997 rows /= vc->vc_font.height; in fbcon_startup()
998 vc_resize(vc, cols, rows); in fbcon_startup()
1010 static void fbcon_init(struct vc_data *vc, int init) in fbcon_init() argument
1014 struct vc_data **default_mode = vc->vc_display_fg; in fbcon_init()
1016 struct fbcon_display *t, *p = &fb_display[vc->vc_num]; in fbcon_init()
1023 if (con2fb_map[vc->vc_num] == -1) in fbcon_init()
1024 con2fb_map[vc->vc_num] = info_idx; in fbcon_init()
1026 info = registered_fb[con2fb_map[vc->vc_num]]; in fbcon_init()
1031 if (vc != svc || logo_shown == FBCON_LOGO_DONTSHOW || in fbcon_init()
1039 con2fb_acquire_newinfo(vc, info, vc->vc_num, -1); in fbcon_init()
1048 vc->vc_font.data = (void *)(p->fontdata = in fbcon_init()
1050 vc->vc_font.width = fvc->vc_font.width; in fbcon_init()
1051 vc->vc_font.height = fvc->vc_font.height; in fbcon_init()
1052 vc->vc_font.charcount = fvc->vc_font.charcount; in fbcon_init()
1065 vc->vc_font.width = font->width; in fbcon_init()
1066 vc->vc_font.height = font->height; in fbcon_init()
1067 vc->vc_font.data = (void *)(p->fontdata = font->data); in fbcon_init()
1068 vc->vc_font.charcount = font->charcount; in fbcon_init()
1072 vc->vc_can_do_color = (fb_get_color_depth(&info->var, &info->fix)!=1); in fbcon_init()
1073 vc->vc_complement_mask = vc->vc_can_do_color ? 0x7700 : 0x0800; in fbcon_init()
1074 if (vc->vc_font.charcount == 256) { in fbcon_init()
1075 vc->vc_hi_font_mask = 0; in fbcon_init()
1077 vc->vc_hi_font_mask = 0x100; in fbcon_init()
1078 if (vc->vc_can_do_color) in fbcon_init()
1079 vc->vc_complement_mask <<= 1; in fbcon_init()
1084 if (!*vc->vc_uni_pagedir_loc) in fbcon_init()
1085 con_copy_unimap(vc, svc); in fbcon_init()
1088 ops->cur_blink_jiffies = msecs_to_jiffies(vc->vc_cur_blink_ms); in fbcon_init()
1096 set_blitting_type(vc, info); in fbcon_init()
1098 cols = vc->vc_cols; in fbcon_init()
1099 rows = vc->vc_rows; in fbcon_init()
1102 new_cols /= vc->vc_font.width; in fbcon_init()
1103 new_rows /= vc->vc_font.height; in fbcon_init()
1112 if (con_is_visible(vc) && vc->vc_mode == KD_TEXT) { in fbcon_init()
1134 vc->vc_cols = new_cols; in fbcon_init()
1135 vc->vc_rows = new_rows; in fbcon_init()
1137 vc_resize(vc, new_cols, new_rows); in fbcon_init()
1140 fbcon_prepare_logo(vc, info, cols, rows, new_cols, new_rows); in fbcon_init()
1142 if (ops->rotate_font && ops->rotate_font(info, vc)) { in fbcon_init()
1144 set_blitting_type(vc, info); in fbcon_init()
1158 static void set_vc_hi_font(struct vc_data *vc, bool set);
1160 static void fbcon_deinit(struct vc_data *vc) in fbcon_deinit() argument
1162 struct fbcon_display *p = &fb_display[vc->vc_num]; in fbcon_deinit()
1168 idx = con2fb_map[vc->vc_num]; in fbcon_deinit()
1185 if (con_is_visible(vc)) in fbcon_deinit()
1193 vc->vc_font.data = NULL; in fbcon_deinit()
1195 if (vc->vc_hi_font_mask && vc->vc_screenbuf) in fbcon_deinit()
1196 set_vc_hi_font(vc, false); in fbcon_deinit()
1201 if (vc->vc_num == logo_shown) in fbcon_deinit()
1231 static void fbcon_clear(struct vc_data *vc, int sy, int sx, int height, in fbcon_clear() argument
1234 struct fb_info *info = registered_fb[con2fb_map[vc->vc_num]]; in fbcon_clear()
1237 struct fbcon_display *p = &fb_display[vc->vc_num]; in fbcon_clear()
1240 if (fbcon_is_inactive(vc, info)) in fbcon_clear()
1246 if (sy < vc->vc_top && vc->vc_top == logo_lines) { in fbcon_clear()
1247 vc->vc_top = 0; in fbcon_clear()
1254 fbcon_clear_margins(vc, 0); in fbcon_clear()
1262 ops->clear(vc, info, real_y(p, sy), sx, b, width); in fbcon_clear()
1263 ops->clear(vc, info, real_y(p, sy + b), sx, height - b, in fbcon_clear()
1266 ops->clear(vc, info, real_y(p, sy), sx, height, width); in fbcon_clear()
1269 static void fbcon_putcs(struct vc_data *vc, const unsigned short *s, in fbcon_putcs() argument
1272 struct fb_info *info = registered_fb[con2fb_map[vc->vc_num]]; in fbcon_putcs()
1273 struct fbcon_display *p = &fb_display[vc->vc_num]; in fbcon_putcs()
1276 if (!fbcon_is_inactive(vc, info)) in fbcon_putcs()
1277 ops->putcs(vc, info, s, count, real_y(p, ypos), xpos, in fbcon_putcs()
1278 get_color(vc, info, scr_readw(s), 1), in fbcon_putcs()
1279 get_color(vc, info, scr_readw(s), 0)); in fbcon_putcs()
1282 static void fbcon_putc(struct vc_data *vc, int c, int ypos, int xpos) in fbcon_putc() argument
1287 fbcon_putcs(vc, &chr, 1, ypos, xpos); in fbcon_putc()
1290 static void fbcon_clear_margins(struct vc_data *vc, int bottom_only) in fbcon_clear_margins() argument
1292 struct fb_info *info = registered_fb[con2fb_map[vc->vc_num]]; in fbcon_clear_margins()
1295 if (!fbcon_is_inactive(vc, info)) in fbcon_clear_margins()
1296 ops->clear_margins(vc, info, margin_color, bottom_only); in fbcon_clear_margins()
1299 static void fbcon_cursor(struct vc_data *vc, int mode) in fbcon_cursor() argument
1301 struct fb_info *info = registered_fb[con2fb_map[vc->vc_num]]; in fbcon_cursor()
1303 int c = scr_readw((u16 *) vc->vc_pos); in fbcon_cursor()
1305 ops->cur_blink_jiffies = msecs_to_jiffies(vc->vc_cur_blink_ms); in fbcon_cursor()
1307 if (fbcon_is_inactive(vc, info) || vc->vc_deccm != 1) in fbcon_cursor()
1310 if (vc->vc_cursor_type & CUR_SW) in fbcon_cursor()
1320 ops->cursor(vc, info, mode, get_color(vc, info, c, 1), in fbcon_cursor()
1321 get_color(vc, info, c, 0)); in fbcon_cursor()
1332 struct vc_data **default_mode, *vc; in fbcon_set_disp() local
1342 vc = vc_cons[unit].d; in fbcon_set_disp()
1344 if (!vc) in fbcon_set_disp()
1347 default_mode = vc->vc_display_fg; in fbcon_set_disp()
1351 if (!vc->vc_font.data) { in fbcon_set_disp()
1352 vc->vc_font.data = (void *)(p->fontdata = t->fontdata); in fbcon_set_disp()
1353 vc->vc_font.width = (*default_mode)->vc_font.width; in fbcon_set_disp()
1354 vc->vc_font.height = (*default_mode)->vc_font.height; in fbcon_set_disp()
1355 vc->vc_font.charcount = (*default_mode)->vc_font.charcount; in fbcon_set_disp()
1367 vc->vc_can_do_color = (fb_get_color_depth(&info->var, &info->fix)!=1); in fbcon_set_disp()
1368 vc->vc_complement_mask = vc->vc_can_do_color ? 0x7700 : 0x0800; in fbcon_set_disp()
1369 if (vc->vc_font.charcount == 256) { in fbcon_set_disp()
1370 vc->vc_hi_font_mask = 0; in fbcon_set_disp()
1372 vc->vc_hi_font_mask = 0x100; in fbcon_set_disp()
1373 if (vc->vc_can_do_color) in fbcon_set_disp()
1374 vc->vc_complement_mask <<= 1; in fbcon_set_disp()
1379 if (!*vc->vc_uni_pagedir_loc) in fbcon_set_disp()
1380 con_copy_unimap(vc, svc); in fbcon_set_disp()
1384 cols /= vc->vc_font.width; in fbcon_set_disp()
1385 rows /= vc->vc_font.height; in fbcon_set_disp()
1386 vc_resize(vc, cols, rows); in fbcon_set_disp()
1388 if (con_is_visible(vc)) { in fbcon_set_disp()
1389 update_screen(vc); in fbcon_set_disp()
1393 static void fbcon_redraw(struct vc_data *vc, struct fbcon_display *p, in fbcon_redraw() argument
1397 (vc->vc_origin + vc->vc_size_row * line); in fbcon_redraw()
1412 fbcon_putcs(vc, start, s - start, in fbcon_redraw()
1420 fbcon_putcs(vc, start, s - start, in fbcon_redraw()
1435 fbcon_putcs(vc, start, s - start, line, x); in fbcon_redraw()
1442 s -= vc->vc_size_row; in fbcon_redraw()
1443 d -= vc->vc_size_row; in fbcon_redraw()
1448 static bool fbcon_scroll(struct vc_data *vc, unsigned int t, unsigned int b, in fbcon_scroll() argument
1451 struct fb_info *info = registered_fb[con2fb_map[vc->vc_num]]; in fbcon_scroll()
1452 struct fbcon_display *p = &fb_display[vc->vc_num]; in fbcon_scroll()
1454 if (fbcon_is_inactive(vc, info)) in fbcon_scroll()
1457 fbcon_cursor(vc, CM_ERASE); in fbcon_scroll()
1467 if (count > vc->vc_rows) /* Maximum realistic size */ in fbcon_scroll()
1468 count = vc->vc_rows; in fbcon_scroll()
1469 fbcon_redraw(vc, p, t, b - t - count, in fbcon_scroll()
1470 count * vc->vc_cols); in fbcon_scroll()
1471 fbcon_clear(vc, b - count, 0, count, vc->vc_cols); in fbcon_scroll()
1472 scr_memsetw((unsigned short *) (vc->vc_origin + in fbcon_scroll()
1473 vc->vc_size_row * in fbcon_scroll()
1475 vc->vc_video_erase_char, in fbcon_scroll()
1476 vc->vc_size_row * count); in fbcon_scroll()
1480 if (count > vc->vc_rows) /* Maximum realistic size */ in fbcon_scroll()
1481 count = vc->vc_rows; in fbcon_scroll()
1482 fbcon_redraw(vc, p, b - 1, b - t - count, in fbcon_scroll()
1483 -count * vc->vc_cols); in fbcon_scroll()
1484 fbcon_clear(vc, t, 0, count, vc->vc_cols); in fbcon_scroll()
1485 scr_memsetw((unsigned short *) (vc->vc_origin + in fbcon_scroll()
1486 vc->vc_size_row * in fbcon_scroll()
1488 vc->vc_video_erase_char, in fbcon_scroll()
1489 vc->vc_size_row * count); in fbcon_scroll()
1497 struct vc_data *vc) in updatescrollmode() argument
1500 int fh = vc->vc_font.height; in updatescrollmode()
1506 if (yres > (fh * (vc->vc_rows + 1))) in updatescrollmode()
1507 p->vrows -= (yres - (fh * vc->vc_rows)) / fh; in updatescrollmode()
1515 static int fbcon_resize(struct vc_data *vc, unsigned int width, in fbcon_resize() argument
1518 struct fb_info *info = registered_fb[con2fb_map[vc->vc_num]]; in fbcon_resize()
1520 struct fbcon_display *p = &fb_display[vc->vc_num]; in fbcon_resize()
1524 if (p->userfont && FNTSIZE(vc->vc_font.data)) { in fbcon_resize()
1526 int pitch = PITCH(vc->vc_font.width); in fbcon_resize()
1537 size = CALC_FONTSZ(vc->vc_font.height, pitch, vc->vc_font.charcount); in fbcon_resize()
1538 if (size > FNTSIZE(vc->vc_font.data)) in fbcon_resize()
1544 virt_fw = FBCON_SWAP(ops->rotate, vc->vc_font.width, in fbcon_resize()
1545 vc->vc_font.height); in fbcon_resize()
1546 virt_fh = FBCON_SWAP(ops->rotate, vc->vc_font.height, in fbcon_resize()
1547 vc->vc_font.width); in fbcon_resize()
1567 if (con_is_visible(vc) && vc->vc_mode == KD_TEXT) { in fbcon_resize()
1575 updatescrollmode(p, info, vc); in fbcon_resize()
1579 static int fbcon_switch(struct vc_data *vc) in fbcon_switch() argument
1583 struct fbcon_display *p = &fb_display[vc->vc_num]; in fbcon_switch()
1587 info = registered_fb[con2fb_map[vc->vc_num]]; in fbcon_switch()
1614 o->currcon = vc->vc_num; in fbcon_switch()
1645 if (fbcon_is_inactive(vc, info) || in fbcon_switch()
1651 set_blitting_type(vc, info); in fbcon_switch()
1654 if (ops->rotate_font && ops->rotate_font(info, vc)) { in fbcon_switch()
1656 set_blitting_type(vc, info); in fbcon_switch()
1659 vc->vc_can_do_color = (fb_get_color_depth(&info->var, &info->fix)!=1); in fbcon_switch()
1660 vc->vc_complement_mask = vc->vc_can_do_color ? 0x7700 : 0x0800; in fbcon_switch()
1662 if (vc->vc_font.charcount > 256) in fbcon_switch()
1663 vc->vc_complement_mask <<= 1; in fbcon_switch()
1665 updatescrollmode(p, info, vc); in fbcon_switch()
1671 if (!fbcon_is_inactive(vc, info)) { in fbcon_switch()
1676 fbcon_set_palette(vc, color_table); in fbcon_switch()
1677 fbcon_clear_margins(vc, 0); in fbcon_switch()
1684 update_region(vc, in fbcon_switch()
1685 vc->vc_origin + vc->vc_size_row * vc->vc_top, in fbcon_switch()
1686 vc->vc_size_row * (vc->vc_bottom - in fbcon_switch()
1687 vc->vc_top) / 2); in fbcon_switch()
1693 static void fbcon_generic_blank(struct vc_data *vc, struct fb_info *info, in fbcon_generic_blank() argument
1697 unsigned short charmask = vc->vc_hi_font_mask ? in fbcon_generic_blank()
1701 oldc = vc->vc_video_erase_char; in fbcon_generic_blank()
1702 vc->vc_video_erase_char &= charmask; in fbcon_generic_blank()
1703 fbcon_clear(vc, 0, 0, vc->vc_rows, vc->vc_cols); in fbcon_generic_blank()
1704 vc->vc_video_erase_char = oldc; in fbcon_generic_blank()
1708 static int fbcon_blank(struct vc_data *vc, int blank, int mode_switch) in fbcon_blank() argument
1710 struct fb_info *info = registered_fb[con2fb_map[vc->vc_num]]; in fbcon_blank()
1727 if (!fbcon_is_inactive(vc, info)) { in fbcon_blank()
1730 fbcon_cursor(vc, blank ? CM_ERASE : CM_DRAW); in fbcon_blank()
1734 fbcon_generic_blank(vc, info, blank); in fbcon_blank()
1738 update_screen(vc); in fbcon_blank()
1741 if (mode_switch || fbcon_is_inactive(vc, info) || in fbcon_blank()
1750 static int fbcon_debug_enter(struct vc_data *vc) in fbcon_debug_enter() argument
1752 struct fb_info *info = registered_fb[con2fb_map[vc->vc_num]]; in fbcon_debug_enter()
1759 fbcon_set_palette(vc, color_table); in fbcon_debug_enter()
1763 static int fbcon_debug_leave(struct vc_data *vc) in fbcon_debug_leave() argument
1765 struct fb_info *info = registered_fb[con2fb_map[vc->vc_num]]; in fbcon_debug_leave()
1774 static int fbcon_get_font(struct vc_data *vc, struct console_font *font) in fbcon_get_font() argument
1776 u8 *fontdata = vc->vc_font.data; in fbcon_get_font()
1780 font->width = vc->vc_font.width; in fbcon_get_font()
1781 font->height = vc->vc_font.height; in fbcon_get_font()
1782 font->charcount = vc->vc_hi_font_mask ? 512 : 256; in fbcon_get_font()
1787 j = vc->vc_font.height; in fbcon_get_font()
1798 j = vc->vc_font.height * 2; in fbcon_get_font()
1809 if (font->charcount * (vc->vc_font.height * sizeof(u32)) > FNTSIZE(fontdata)) in fbcon_get_font()
1813 for (j = 0; j < vc->vc_font.height; j++) { in fbcon_get_font()
1823 j = vc->vc_font.height * 4; in fbcon_get_font()
1838 static void set_vc_hi_font(struct vc_data *vc, bool set) in set_vc_hi_font() argument
1841 vc->vc_hi_font_mask = 0; in set_vc_hi_font()
1842 if (vc->vc_can_do_color) { in set_vc_hi_font()
1843 vc->vc_complement_mask >>= 1; in set_vc_hi_font()
1844 vc->vc_s_complement_mask >>= 1; in set_vc_hi_font()
1848 if (vc->vc_can_do_color) { in set_vc_hi_font()
1850 (unsigned short *) vc->vc_origin; in set_vc_hi_font()
1851 int count = vc->vc_screenbuf_size / 2; in set_vc_hi_font()
1858 c = vc->vc_video_erase_char; in set_vc_hi_font()
1859 vc->vc_video_erase_char = in set_vc_hi_font()
1861 vc->vc_attr >>= 1; in set_vc_hi_font()
1864 vc->vc_hi_font_mask = 0x100; in set_vc_hi_font()
1865 if (vc->vc_can_do_color) { in set_vc_hi_font()
1866 vc->vc_complement_mask <<= 1; in set_vc_hi_font()
1867 vc->vc_s_complement_mask <<= 1; in set_vc_hi_font()
1873 (unsigned short *) vc->vc_origin; in set_vc_hi_font()
1874 int count = vc->vc_screenbuf_size / 2; in set_vc_hi_font()
1879 if (vc->vc_can_do_color) in set_vc_hi_font()
1887 c = vc->vc_video_erase_char; in set_vc_hi_font()
1888 if (vc->vc_can_do_color) { in set_vc_hi_font()
1889 vc->vc_video_erase_char = in set_vc_hi_font()
1891 vc->vc_attr <<= 1; in set_vc_hi_font()
1893 vc->vc_video_erase_char = c & ~0x100; in set_vc_hi_font()
1898 static int fbcon_do_set_font(struct vc_data *vc, int w, int h, int charcount, in fbcon_do_set_font() argument
1901 struct fb_info *info = registered_fb[con2fb_map[vc->vc_num]]; in fbcon_do_set_font()
1903 struct fbcon_display *p = &fb_display[vc->vc_num]; in fbcon_do_set_font()
1907 resize = (w != vc->vc_font.width) || (h != vc->vc_font.height); in fbcon_do_set_font()
1909 old_data = vc->vc_font.data; in fbcon_do_set_font()
1910 vc->vc_font.data = (void *)(p->fontdata = data); in fbcon_do_set_font()
1913 vc->vc_font.width = w; in fbcon_do_set_font()
1914 vc->vc_font.height = h; in fbcon_do_set_font()
1915 vc->vc_font.charcount = charcount; in fbcon_do_set_font()
1916 if (vc->vc_hi_font_mask && charcount == 256) in fbcon_do_set_font()
1917 set_vc_hi_font(vc, false); in fbcon_do_set_font()
1918 else if (!vc->vc_hi_font_mask && charcount == 512) in fbcon_do_set_font()
1919 set_vc_hi_font(vc, true); in fbcon_do_set_font()
1928 vc_resize(vc, cols, rows); in fbcon_do_set_font()
1929 } else if (con_is_visible(vc) in fbcon_do_set_font()
1930 && vc->vc_mode == KD_TEXT) { in fbcon_do_set_font()
1931 fbcon_clear_margins(vc, 0); in fbcon_do_set_font()
1932 update_screen(vc); in fbcon_do_set_font()
1952 static int fbcon_set_font(struct vc_data *vc, struct console_font *font, in fbcon_set_font() argument
1955 struct fb_info *info = registered_fb[con2fb_map[vc->vc_num]]; in fbcon_set_font()
2014 return fbcon_do_set_font(vc, font->width, font->height, charcount, new_data, 1); in fbcon_set_font()
2017 static int fbcon_set_def_font(struct vc_data *vc, struct console_font *font, char *name) in fbcon_set_def_font() argument
2019 struct fb_info *info = registered_fb[con2fb_map[vc->vc_num]]; in fbcon_set_def_font()
2030 return fbcon_do_set_font(vc, f->width, f->height, f->charcount, f->data, 0); in fbcon_set_def_font()
2041 static void fbcon_set_palette(struct vc_data *vc, const unsigned char *table) in fbcon_set_palette() argument
2043 struct fb_info *info = registered_fb[con2fb_map[vc->vc_num]]; in fbcon_set_palette()
2047 if (fbcon_is_inactive(vc, info)) in fbcon_set_palette()
2050 if (!con_is_visible(vc)) in fbcon_set_palette()
2057 val = vc->vc_palette[j++]; in fbcon_set_palette()
2059 val = vc->vc_palette[j++]; in fbcon_set_palette()
2061 val = vc->vc_palette[j++]; in fbcon_set_palette()
2076 static u16 *fbcon_screen_pos(const struct vc_data *vc, int offset) in fbcon_screen_pos() argument
2078 return (u16 *) (vc->vc_origin + offset); in fbcon_screen_pos()
2081 static unsigned long fbcon_getxy(struct vc_data *vc, unsigned long pos, in fbcon_getxy() argument
2087 if (pos >= vc->vc_origin && pos < vc->vc_scr_end) { in fbcon_getxy()
2088 unsigned long offset = (pos - vc->vc_origin) / 2; in fbcon_getxy()
2090 x = offset % vc->vc_cols; in fbcon_getxy()
2091 y = offset / vc->vc_cols; in fbcon_getxy()
2092 ret = pos + (vc->vc_cols - x) * 2; in fbcon_getxy()
2096 ret = vc->vc_origin; in fbcon_getxy()
2107 static void fbcon_invert_region(struct vc_data *vc, u16 * p, int cnt) in fbcon_invert_region() argument
2111 if (!vc->vc_can_do_color) in fbcon_invert_region()
2113 else if (vc->vc_hi_font_mask == 0x100) in fbcon_invert_region()
2125 struct vc_data *vc = NULL; in fbcon_suspended() local
2130 vc = vc_cons[ops->currcon].d; in fbcon_suspended()
2133 fbcon_cursor(vc, CM_ERASE); in fbcon_suspended()
2138 struct vc_data *vc; in fbcon_resumed() local
2143 vc = vc_cons[ops->currcon].d; in fbcon_resumed()
2145 update_screen(vc); in fbcon_resumed()
2151 struct vc_data *vc; in fbcon_modechanged() local
2157 vc = vc_cons[ops->currcon].d; in fbcon_modechanged()
2158 if (vc->vc_mode != KD_TEXT || in fbcon_modechanged()
2162 p = &fb_display[vc->vc_num]; in fbcon_modechanged()
2163 set_blitting_type(vc, info); in fbcon_modechanged()
2165 if (con_is_visible(vc)) { in fbcon_modechanged()
2169 cols /= vc->vc_font.width; in fbcon_modechanged()
2170 rows /= vc->vc_font.height; in fbcon_modechanged()
2171 vc_resize(vc, cols, rows); in fbcon_modechanged()
2172 updatescrollmode(p, info, vc); in fbcon_modechanged()
2176 if (!fbcon_is_inactive(vc, info)) { in fbcon_modechanged()
2181 fbcon_set_palette(vc, color_table); in fbcon_modechanged()
2182 update_screen(vc); in fbcon_modechanged()
2189 struct vc_data *vc; in fbcon_set_all_vcs() local
2197 vc = vc_cons[i].d; in fbcon_set_all_vcs()
2198 if (!vc || vc->vc_mode != KD_TEXT || in fbcon_set_all_vcs()
2202 if (con_is_visible(vc)) { in fbcon_set_all_vcs()
2207 p = &fb_display[vc->vc_num]; in fbcon_set_all_vcs()
2208 set_blitting_type(vc, info); in fbcon_set_all_vcs()
2212 cols /= vc->vc_font.width; in fbcon_set_all_vcs()
2213 rows /= vc->vc_font.height; in fbcon_set_all_vcs()
2214 vc_resize(vc, cols, rows); in fbcon_set_all_vcs()
2455 struct vc_data *vc; in fbcon_fb_blanked() local
2460 vc = vc_cons[ops->currcon].d; in fbcon_fb_blanked()
2461 if (vc->vc_mode != KD_TEXT || in fbcon_fb_blanked()
2465 if (con_is_visible(vc)) { in fbcon_fb_blanked()
2477 struct vc_data *vc; in fbcon_new_modelist() local
2486 vc = vc_cons[i].d; in fbcon_new_modelist()
2491 fbcon_set_disp(info, &var, vc->vc_num); in fbcon_new_modelist()
2498 struct vc_data *vc; in fbcon_get_requirement() local
2504 vc = vc_cons[i].d; in fbcon_get_requirement()
2505 if (vc && vc->vc_mode == KD_TEXT && in fbcon_get_requirement()
2507 caps->x |= 1 << (vc->vc_font.width - 1); in fbcon_get_requirement()
2508 caps->y |= 1 << (vc->vc_font.height - 1); in fbcon_get_requirement()
2509 charcnt = vc->vc_font.charcount; in fbcon_get_requirement()
2515 vc = vc_cons[fg_console].d; in fbcon_get_requirement()
2517 if (vc && vc->vc_mode == KD_TEXT && in fbcon_get_requirement()
2519 caps->x = 1 << (vc->vc_font.width - 1); in fbcon_get_requirement()
2520 caps->y = 1 << (vc->vc_font.height - 1); in fbcon_get_requirement()
2521 caps->len = vc->vc_font.charcount; in fbcon_get_requirement()