📄 sis_accel.c
字号:
#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 + -