⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sis_accel.c

📁 一个2.4.21版本的嵌入式linux内核
💻 C
📖 第 1 页 / 共 2 页
字号:
#endif    return(0);}void sisfb_syncaccel(void){    if(sisvga_engine == SIS_300_VGA) {    	SiS300Sync();    } else {    	SiS310Sync();    }}#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,0)  /* --------------- 2.5 --------------- */int fbcon_sis_sync(struct fb_info *info){   if(!ivideo.accel)   	return 0;      CRITFLAGS   if(sisvga_engine == SIS_300_VGA) {      SiS300Sync();   } else {      SiS310Sync();   }   CRITEND   return 0;}void fbcon_sis_fillrect(struct fb_info *info, const struct fb_fillrect *rect){   int col=0;   CRITFLAGS   TWDEBUG("Inside sis_fillrect");   if(!rect->width || !rect->height)   	return;   if(!ivideo.accel) {	cfb_fillrect(info, rect);	return;   }      switch(info->var.bits_per_pixel) {		case 8: col = rect->color;			break;		case 16: col = ((u32 *)(info->pseudo_palette))[rect->color];			 break;		case 32: col = ((u32 *)(info->pseudo_palette))[rect->color];			 break;	}	   if(sisvga_engine == SIS_300_VGA) {	   CRITBEGIN	   SiS300SetupForSolidFill(col, myrops[rect->rop], 0);	   SiS300SubsequentSolidFillRect(rect->dx, rect->dy, rect->width, rect->height);	   CRITEND	   SiS300Sync();   } else {	   CRITBEGIN	   SiS310SetupForSolidFill(col, myrops[rect->rop], 0);	   SiS310SubsequentSolidFillRect(rect->dx, rect->dy, rect->width, rect->height);	   CRITEND	   SiS310Sync();   }}void fbcon_sis_copyarea(struct fb_info *info, const struct fb_copyarea *area){   int xdir, ydir;   CRITFLAGS   TWDEBUG("Inside sis_copyarea");   if(!ivideo.accel) {   	cfb_copyarea(info, area);	return;   }   if(!area->width || !area->height)   	return;   if(area->sx < area->dx) xdir = 0;   else                    xdir = 1;   if(area->sy < area->dy) ydir = 0;   else                    ydir = 1;   if(sisvga_engine == SIS_300_VGA) {      CRITBEGIN      SiS300SetupForScreenToScreenCopy(xdir, ydir, 3, 0, -1);      SiS300SubsequentScreenToScreenCopy(area->sx, area->sy, area->dx, area->dy, area->width, area->height);      CRITEND      SiS300Sync();   } else {      CRITBEGIN      SiS310SetupForScreenToScreenCopy(xdir, ydir, 3, 0, -1);      SiS310SubsequentScreenToScreenCopy(area->sx, area->sy, area->dx, area->dy, area->width, area->height);      CRITEND      SiS310Sync();   }}#endif#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)  /* -------------- 2.4 --------------- */void fbcon_sis_bmove(struct display *p, int srcy, int srcx,			    int dsty, int dstx, int height, int width){        int xdir, ydir;	CRITFLAGS	if(!ivideo.accel) {	    switch(ivideo.video_bpp) {	    case 8:#ifdef FBCON_HAS_CFB8	       fbcon_cfb8_bmove(p, srcy, srcx, dsty, dstx, height, width);#endif	       break;	    case 16:#ifdef FBCON_HAS_CFB16	       fbcon_cfb16_bmove(p, srcy, srcx, dsty, dstx, height, width);#endif	       break;	    case 32:#ifdef FBCON_HAS_CFB32	       fbcon_cfb32_bmove(p, srcy, srcx, dsty, dstx, height, width);#endif	       break;            }	    return;	}	srcx *= fontwidth(p);	srcy *= fontheight(p);	dstx *= fontwidth(p);	dsty *= fontheight(p);	width *= fontwidth(p);	height *= fontheight(p);	if(srcx < dstx) xdir = 0;	else            xdir = 1;	if(srcy < dsty) ydir = 0;	else            ydir = 1;	if(sisvga_engine == SIS_300_VGA) {	   CRITBEGIN	   SiS300SetupForScreenToScreenCopy(xdir, ydir, 3, 0, -1);	   SiS300SubsequentScreenToScreenCopy(srcx, srcy, dstx, dsty, width, height);	   CRITEND	   SiS300Sync();	} else {	   CRITBEGIN	   SiS310SetupForScreenToScreenCopy(xdir, ydir, 3, 0, -1);	   SiS310SubsequentScreenToScreenCopy(srcx, srcy, dstx, dsty, width, height);	   CRITEND	   SiS310Sync();#if 0	   	   printk(KERN_INFO "sis_bmove sx %d sy %d dx %d dy %d w %d h %d\n",		srcx, srcy, dstx, dsty, width, height);#endif			}}static void fbcon_sis_clear(struct vc_data *conp, struct display *p,			int srcy, int srcx, int height, int width, int color){	CRITFLAGS	srcx *= fontwidth(p);	srcy *= fontheight(p);	width *= fontwidth(p);	height *= fontheight(p);	if(sisvga_engine == SIS_300_VGA) {	   CRITBEGIN	   SiS300SetupForSolidFill(color, 3, 0);	   SiS300SubsequentSolidFillRect(srcx, srcy, width, height);	   CRITEND	   SiS300Sync();	} else {	   CRITBEGIN	   SiS310SetupForSolidFill(color, 3, 0);	   SiS310SubsequentSolidFillRect(srcx, srcy, width, height);	   CRITEND	   SiS310Sync();	}}void fbcon_sis_clear8(struct vc_data *conp, struct display *p,			int srcy, int srcx, int height, int width){	u32 bgx;	if(!ivideo.accel) {#ifdef FBCON_HAS_CFB8	    fbcon_cfb8_clear(conp, p, srcy, srcx, height, width);#endif	    return;	}	bgx = attr_bgcol_ec(p, conp);	fbcon_sis_clear(conp, p, srcy, srcx, height, width, bgx);}void fbcon_sis_clear16(struct vc_data *conp, struct display *p,			int srcy, int srcx, int height, int width){	u32 bgx;	if(!ivideo.accel) {#ifdef FBCON_HAS_CFB16	    fbcon_cfb16_clear(conp, p, srcy, srcx, height, width);#endif	    return;	}	bgx = ((u_int16_t*)p->dispsw_data)[attr_bgcol_ec(p, conp)];	fbcon_sis_clear(conp, p, srcy, srcx, height, width, bgx);}void fbcon_sis_clear32(struct vc_data *conp, struct display *p,			int srcy, int srcx, int height, int width){	u32 bgx;	if(!ivideo.accel) {#ifdef FBCON_HAS_CFB32	    fbcon_cfb32_clear(conp, p, srcy, srcx, height, width);#endif	    return;	}	bgx = ((u_int32_t*)p->dispsw_data)[attr_bgcol_ec(p, conp)];	fbcon_sis_clear(conp, p, srcy, srcx, height, width, bgx);}void fbcon_sis_revc(struct display *p, int srcx, int srcy){	CRITFLAGS	if(!ivideo.accel) {	    switch(ivideo.video_bpp) {	    case 16:#ifdef FBCON_HAS_CFB16	       fbcon_cfb16_revc(p, srcx, srcy);#endif	       break;	    case 32:#ifdef FBCON_HAS_CFB32	       fbcon_cfb32_revc(p, srcx, srcy);#endif	       break;            }	    return;	}	srcx *= fontwidth(p);	srcy *= fontheight(p);	if(sisvga_engine == SIS_300_VGA) {	   CRITBEGIN	   SiS300SetupForSolidFill(0, 0x0a, 0);	   SiS300SubsequentSolidFillRect(srcx, srcy, fontwidth(p), fontheight(p));	   CRITEND	   SiS300Sync();	} else {	   CRITBEGIN	   SiS310SetupForSolidFill(0, 0x0a, 0);	   SiS310SubsequentSolidFillRect(srcx, srcy, fontwidth(p), fontheight(p));	   CRITEND	   SiS310Sync();	}}#ifdef FBCON_HAS_CFB8struct display_switch fbcon_sis8 = {	setup:			fbcon_cfb8_setup,	bmove:			fbcon_sis_bmove,	clear:			fbcon_sis_clear8,	putc:			fbcon_cfb8_putc,	putcs:			fbcon_cfb8_putcs,	revc:			fbcon_cfb8_revc,	clear_margins:		fbcon_cfb8_clear_margins,	fontwidthmask:		FONTWIDTH(4)|FONTWIDTH(8)|FONTWIDTH(12)|FONTWIDTH(16)};#endif#ifdef FBCON_HAS_CFB16struct display_switch fbcon_sis16 = {	setup:			fbcon_cfb16_setup,	bmove:			fbcon_sis_bmove,	clear:			fbcon_sis_clear16,	putc:			fbcon_cfb16_putc,	putcs:			fbcon_cfb16_putcs,	revc:			fbcon_sis_revc,	clear_margins:		fbcon_cfb16_clear_margins,	fontwidthmask:		FONTWIDTH(4)|FONTWIDTH(8)|FONTWIDTH(12)|FONTWIDTH(16)};#endif#ifdef FBCON_HAS_CFB32struct display_switch fbcon_sis32 = {	setup:			fbcon_cfb32_setup,	bmove:			fbcon_sis_bmove,	clear:			fbcon_sis_clear32,	putc:			fbcon_cfb32_putc,	putcs:			fbcon_cfb32_putcs,	revc:			fbcon_sis_revc,	clear_margins:		fbcon_cfb32_clear_margins,	fontwidthmask:		FONTWIDTH(4)|FONTWIDTH(8)|FONTWIDTH(12)|FONTWIDTH(16)};#endif#endif /* KERNEL VERSION */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -