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

📄 sis_accel.c

📁 优龙2410linux2.6.8内核源代码
💻 C
📖 第 1 页 / 共 2 页
字号:
   u32 col = 0;   u32 vxres = info->var.xres_virtual;   u32 vyres = info->var.yres_virtual;   int width, height;   CRITFLAGS   if(info->state != FBINFO_STATE_RUNNING) {	return;   }   if(!ivideo->accel) {	cfb_fillrect(info, rect);	return;   }      if(!rect->width || !rect->height || rect->dx >= vxres || rect->dy >= vyres) {	return;   }   /* Clipping */   width = ((rect->dx + rect->width) > vxres) ? (vxres - rect->dx) : rect->width;   height = ((rect->dy + rect->height) > vyres) ? (vyres - rect->dy) : rect->height;   switch(info->var.bits_per_pixel) {	case 8:  col = rect->color;		 break;	case 16:	case 32: col = ((u32 *)(info->pseudo_palette))[rect->color];		 break;   }   if(ivideo->sisvga_engine == SIS_300_VGA) {#ifdef CONFIG_FB_SIS_300      CRITBEGIN      SiS300SetupForSolidFill(ivideo, col, myrops[rect->rop]);      SiS300SubsequentSolidFillRect(ivideo, rect->dx, rect->dy, width, height);      CRITEND      SiS300Sync(ivideo);#endif   } else {#ifdef CONFIG_FB_SIS_315      CRITBEGIN      SiS310SetupForSolidFill(ivideo, col, myrops[rect->rop]);      SiS310SubsequentSolidFillRect(ivideo, rect->dx, rect->dy, width, height);      CRITEND      SiS310Sync(ivideo);#endif   }}void fbcon_sis_copyarea(struct fb_info *info, const struct fb_copyarea *area){   struct sis_video_info *ivideo = (struct sis_video_info *)info->par;   u32 vxres = info->var.xres_virtual;   u32 vyres = info->var.yres_virtual;   int width = area->width;   int height = area->height;   CRITFLAGS   if(info->state != FBINFO_STATE_RUNNING) {	return;   }   if(!ivideo->accel) {   	cfb_copyarea(info, area);	return;   }   if(!width || !height ||      area->sx >= vxres || area->sy >= vyres ||      area->dx >= vxres || area->dy >= vyres) {   	return;   }   /* Clipping */   if((area->sx + width) > vxres) width = vxres - area->sx;   if((area->dx + width) > vxres) width = vxres - area->dx;   if((area->sy + height) > vyres) height = vyres - area->sy;   if((area->dy + height) > vyres) height = vyres - area->dy;   if(ivideo->sisvga_engine == SIS_300_VGA) {#ifdef CONFIG_FB_SIS_300      int xdir, ydir;      if(area->sx < area->dx) xdir = 0;      else                    xdir = 1;      if(area->sy < area->dy) ydir = 0;      else                    ydir = 1;      CRITBEGIN      SiS300SetupForScreenToScreenCopy(ivideo, xdir, ydir, 3, -1);      SiS300SubsequentScreenToScreenCopy(ivideo, area->sx, area->sy, area->dx, area->dy,      					 width, height);      CRITEND      SiS300Sync(ivideo);#endif   } else {#ifdef CONFIG_FB_SIS_315      CRITBEGIN      SiS310SetupForScreenToScreenCopy(ivideo, 3, -1);      SiS310SubsequentScreenToScreenCopy(ivideo, area->sx, area->sy, area->dx, area->dy,      					 width, height);      CRITEND      SiS310Sync(ivideo);#endif   }}#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){	struct sis_video_info *ivideo = (struct sis_video_info *)p->fb_info->par;	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(ivideo->sisvga_engine == SIS_300_VGA) {#ifdef CONFIG_FB_SIS_300	   int xdir, ydir;	   if(srcx < dstx) xdir = 0;	   else            xdir = 1;	   if(srcy < dsty) ydir = 0;	   else            ydir = 1;	   CRITBEGIN	   SiS300SetupForScreenToScreenCopy(ivideo, xdir, ydir, 3, -1);	   SiS300SubsequentScreenToScreenCopy(ivideo, srcx, srcy, dstx, dsty, width, height);	   CRITEND	   SiS300Sync(ivideo);#endif	} else {#ifdef CONFIG_FB_SIS_315	   CRITBEGIN	   SiS310SetupForScreenToScreenCopy(ivideo, 3, -1);	   SiS310SubsequentScreenToScreenCopy(ivideo, srcx, srcy, dstx, dsty, width, height);	   CRITEND	   SiS310Sync(ivideo);#endif	}}static void fbcon_sis_clear(struct vc_data *conp, struct display *p,			int srcy, int srcx, int height, int width, int color){        struct sis_video_info *ivideo = (struct sis_video_info *)p->fb_info->par;	CRITFLAGS	srcx *= fontwidth(p);	srcy *= fontheight(p);	width *= fontwidth(p);	height *= fontheight(p);	if(ivideo->sisvga_engine == SIS_300_VGA) {#ifdef CONFIG_FB_SIS_300	   CRITBEGIN	   SiS300SetupForSolidFill(ivideo, color, 3);	   SiS300SubsequentSolidFillRect(ivideo, srcx, srcy, width, height);	   CRITEND	   SiS300Sync(ivideo);#endif	} else {#ifdef CONFIG_FB_SIS_315	   CRITBEGIN	   SiS310SetupForSolidFill(ivideo, color, 3);	   SiS310SubsequentSolidFillRect(ivideo, srcx, srcy, width, height);	   CRITEND	   SiS310Sync(ivideo);#endif	}}void fbcon_sis_clear8(struct vc_data *conp, struct display *p,			int srcy, int srcx, int height, int width){	struct sis_video_info *ivideo = (struct sis_video_info *)p->fb_info->par;	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){        struct sis_video_info *ivideo = (struct sis_video_info *)p->fb_info->par;	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){	struct sis_video_info *ivideo = (struct sis_video_info *)p->fb_info->par;	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){	struct sis_video_info *ivideo = (struct sis_video_info *)p->fb_info->par;	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(ivideo->sisvga_engine == SIS_300_VGA) {#ifdef CONFIG_FB_SIS_300	   CRITBEGIN	   SiS300SetupForSolidFill(ivideo, 0, 0x0a);	   SiS300SubsequentSolidFillRect(ivideo, srcx, srcy, fontwidth(p), fontheight(p));	   CRITEND	   SiS300Sync(ivideo);#endif	} else {#ifdef CONFIG_FB_SIS_315	   CRITBEGIN	   SiS310SetupForSolidFill(ivideo, 0, 0x0a);	   SiS310SubsequentSolidFillRect(ivideo, srcx, srcy, fontwidth(p), fontheight(p));	   CRITEND	   SiS310Sync(ivideo);#endif	}}#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 + -