vc->vc_font.data = p->fontdata = data; 
vc->vc_font.data = (void *)(p->fontdata = data); 
static int fbcon_do_set_font(struct vc_data *vc, int w, int h,			     u8 * data, int userfont){	struct fb_info *info = registered_fb[con2fb_map[vc->vc_num]];	struct display *p = &fb_display[vc->vc_num];	int resize;	int cnt;	char *old_data = NULL;	if (CON_IS_VISIBLE(vc) && softback_lines)		fbcon_set_origin(vc);	resize = (w != vc->vc_font.width) || (h != vc->vc_font.height);	if (p->userfont)		old_data = vc->vc_font.data;	if (userfont)		cnt = FNTCHARCNT(data);	else		cnt = 256;	vc->vc_font.data = p->fontdata = data;	if ((p->userfont = userfont))		REFCOUNT(data)++;	vc->vc_font.width = w;	vc->vc_font.height = h;	if (vc->vc_hi_font_mask && cnt == 256) {		vc->vc_hi_font_mask = 0;		if (vc->vc_can_do_color) {			vc->vc_complement_mask >>= 1;			vc->vc_s_complement_mask >>= 1;		}					/* ++Edmund: reorder the attribute bits */		if (vc->vc_can_do_color) {			unsigned short *cp =			    (unsigned short *) vc->vc_origin;			int count = vc->vc_screenbuf_size / 2;			unsigned short c;			for (; count > 0; count--, cp++) {				c = scr_readw(cp);				scr_writew(((c & 0xfe00) >> 1) |					   (c & 0xff), cp);			}			c = vc->vc_video_erase_char;			vc->vc_video_erase_char =			    ((c & 0xfe00) >> 1) | (c & 0xff);			vc->vc_attr >>= 1;		}	} else if (!vc->vc_hi_font_mask && cnt == 512) {		vc->vc_hi_font_mask = 0x100;		if (vc->vc_can_do_color) {			vc->vc_complement_mask <<= 1;			vc->vc_s_complement_mask <<= 1;		}					/* ++Edmund: reorder the attribute bits */		{			unsigned short *cp =			    (unsigned short *) vc->vc_origin;			int count = vc->vc_screenbuf_size / 2;			unsigned short c;			for (; count > 0; count--, cp++) {				unsigned short newc;				c = scr_readw(cp);				if (vc->vc_can_do_color)					newc =					    ((c & 0xff00) << 1) | (c &								   0xff);				else					newc = c & ~0x100;				scr_writew(newc, cp);			}			c = vc->vc_video_erase_char;			if (vc->vc_can_do_color) {				vc->vc_video_erase_char =				    ((c & 0xff00) << 1) | (c & 0xff);				vc->vc_attr <<= 1;			} else				vc->vc_video_erase_char = c & ~0x100;		}	}	if (resize) {		/* reset wrap/pan */		info->var.xoffset = info->var.yoffset = p->yscroll = 0;		vc_resize(vc, info->var.xres / w, info->var.yres / h);		if (CON_IS_VISIBLE(vc) && softback_buf) {			int l = fbcon_softback_size / vc->vc_size_row;			if (l > 5)				softback_end =				    softback_buf + l * vc->vc_size_row;			else {				/* Smaller scrollback makes no sense, and 0 would screw				   the operation totally */				softback_top = 0;			}		}	} else if (CON_IS_VISIBLE(vc)		   && vc->vc_mode == KD_TEXT) {		fbcon_clear_margins(vc, 0);		update_screen(vc);	}	if (old_data && (--REFCOUNT(old_data) == 0))		kfree(old_data - FONT_EXTRA_WORDS * sizeof(int));	return 0;}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/2f4516dbd048f25eba78e115e8e73e1e8f04e7f9/fbcon.c/clean/drivers/video/console/fbcon.c