static const struct consw fb_con;
+static int blink_flag = 1;
+
#define CM_SOFTBACK (8)
#define advance_row(p, delta) (unsigned short *)((unsigned long)(p) + (delta) * vc->vc_size_row)
struct vc_data *vc = NULL;
int c;
int mode;
+ unsigned short *s;
+ int x = 0, y = 0;
+ static int show_blink = 1;
acquire_console_sem();
if (ops && ops->currcon != -1)
if (!vc || !CON_IS_VISIBLE(vc) ||
fbcon_is_inactive(vc, info) ||
- registered_fb[con2fb_map[vc->vc_num]] != info ||
- vc_cons[ops->currcon].d->vc_deccm != 1) {
+ registered_fb[con2fb_map[vc->vc_num]] != info) {
release_console_sem();
return;
}
p = &fb_display[vc->vc_num];
- c = scr_readw((u16 *) vc->vc_pos);
- mode = (!ops->cursor_flash || ops->cursor_state.enable) ?
- CM_ERASE : CM_DRAW;
- ops->cursor(vc, info, mode, softback_lines, get_color(vc, info, c, 1),
- get_color(vc, info, c, 0));
+ if (vc_cons[ops->currcon].d->vc_deccm == 1) {
+ c = scr_readw((u16 *) vc->vc_pos);
+ mode = (!ops->cursor_flash || ops->cursor_state.enable) ?
+ CM_ERASE : CM_DRAW;
+ ops->cursor(vc, info, mode, softback_lines, get_color(vc, info, c, 1),
+ get_color(vc, info, c, 0));
+ }
+
+ if (vc->vc_hi_font_mask || vc->vc_num != fg_console || !blink_flag) {
+ release_console_sem();
+ return;
+ }
+ if (!softback_lines)
+ s = (u16 *) vc->vc_origin;
+ else
+ s = (u16 *) softback_curr;
+ while (y < vc->vc_rows) {
+ while (x < vc->vc_cols) {
+ c = scr_readw(s);
+ if (attr_blink(c)) {
+ blink_flag = 1;
+ if (!show_blink)
+ c = (c & 0xf4ff) | (attr_bgcol(12, c) << 8);
+ fbcon_putc(vc, c, y, x);
+ }
+ s++;
+ x++;
+ }
+ x = 0;
+ y++;
+ if (s == (u16 *) softback_end)
+ s = (u16 *) softback_buf;
+ if (s == (u16 *) softback_in)
+ s = (u16 *) vc->vc_origin;
+ }
+ show_blink = show_blink ? 0 : 1;
release_console_sem();
}
struct display *p = &fb_display[vc->vc_num];
struct fbcon_ops *ops = info->fbcon_par;
+ if (!vc->vc_hi_font_mask && (vc->vc_attr & 0x80))
+ blink_flag = 1;
if (!fbcon_is_inactive(vc, info))
ops->putcs(vc, info, s, count, real_y(p, ypos), xpos,
get_color(vc, info, scr_readw(s), 1),
struct fb_info *info = registered_fb[con2fb_map[vc->vc_num]];
struct fbcon_ops *ops = info->fbcon_par;
+ blink_flag = 1;
if (!fbcon_is_inactive(vc, info))
ops->clear_margins(vc, info, bottom_only);
}
return -EINVAL;
fbcon_cursor(vc, CM_ERASE);
+ blink_flag = 1;
/*
* ++Geert: Only use ywrap/ypan if the console is in text mode
if (!width || !height)
return;
+ blink_flag = 1;
/* Split blits that cross physical y_wrap case.
* Pathological case involves 4 blits, better to use recursive
* code rather than unrolled case
struct display *p = &fb_display[fg_console];
int offset, limit, scrollback_old;
+ blink_flag = 1;
if (softback_top) {
if (vc->vc_num != fg_console)
return 0;