Re: PATCH: move soft_cursor into fbconsole
From: James Simmons <hidden>
Date: 2005-07-06 23:28:11
Yes please send me a proper patch. On Sat, 2 Jul 2005, Sylvain Meyer wrote:
quoted hunk ↗ jump to hunk
James, In the intelfb driver, the hw cursor is decoupled from the graphic hw acceleration. So, this code is incorrect@@ -1328,9 +1317,10 @@ if (ACCEL(dinfo, info)) { info->flags = FBINFO_DEFAULT | FBINFO_HWACCEL_YPAN | FBINFO_HWACCEL_COPYAREA | FBINFO_HWACCEL_FILLRECT | - FBINFO_HWACCEL_IMAGEBLIT; + FBINFO_HWACCEL_IMAGEBLIT | FBINFO_HWACCEL_CURSOR; } else { - info->flags = FBINFO_DEFAULT | FBINFO_HWACCEL_YPAN; + info->flags = FBINFO_DEFAULT | FBINFO_HWACCEL_YPAN | + FBINFO_HWACCEL_CURSOR; } kfree(hw); return 0;should be something like this. I can come with a good patch if you want (now it's just a mail hack) if (ACCEL(dinfo, info)) { info->flags = FBINFO_DEFAULT | FBINFO_HWACCEL_YPAN | FBINFO_HWACCEL_COPYAREA | FBINFO_HWACCEL_FILLRECT | FBINFO_HWACCEL_IMAGEBLIT; } else { info->flags = FBINFO_DEFAULT | FBINFO_HWACCEL_YPAN; } + if (dinfo->hwcursor) + info->flags |= FBINFO_HWACCEL_CURSOR; Regards Sylvain James Simmons a écrit:quoted
quoted
Why are you trying to preserve all of the ".fb_cursor = soft_cursor," assignments in the drivers? What purpose do they serve that can't be handled by a simple test like this: Then any in-kernel user does this: /* First try the hardware cursor */ if (info->fbops->fb_cursor) err = info->fbops->fb_cursor(info, &cursor); /* if that doesn't exist or didn't work, use the software one */ if (err) soft_cursor(info, &cursor);I don't want to make a patch that touches all the drivers. Th epatch I posted is a nice simple patch. If there are no other arguments against it I like to submit it to Andrew. diff -urN -X /home/jsimmons/dontdiff linus-2.6/drivers/video/aty/mach64_cursor.c fbdev-2.6/drivers/video/aty/mach64_cursor.c--- linus-2.6/drivers/video/aty/mach64_cursor.c 2005-05-10 08:39:33.000000000 -0700 +++ fbdev-2.6/drivers/video/aty/mach64_cursor.c 2005-06-24 09:04:12.000000000 -0700@@ -219,8 +219,8 @@info->sprite.buf_align = 16; /* and 64 lines tall. */ info->sprite.flags = FB_PIXMAP_IO; + info->flags |= FBINFO_HWACCEL_CURSOR; info->fbops->fb_cursor = atyfb_cursor; - return 0; } diff -urN -X /home/jsimmons/dontdiff linus-2.6/drivers/video/fbsysfs.c fbdev-2.6/drivers/video/fbsysfs.c--- linus-2.6/drivers/video/fbsysfs.c 2005-06-14 11:51:24.000000000 -0700 +++ fbdev-2.6/drivers/video/fbsysfs.c 2005-06-24 09:46:33.000000000 -0700@@ -311,13 +311,19 @@static ssize_t store_cursor(struct class_device *class_device, const char * buf, size_t count) { -// struct fb_info *fb_info = (struct fb_info *)class_get_devdata(class_device); + struct fb_info *fb_info = (struct fb_info *)class_get_devdata(class_device); + + if (!(fb_info->flags & FBINFO_HWACCEL_CURSOR)) + return -ENXIO; return 0; } static ssize_t show_cursor(struct class_device *class_device, char *buf) { -// struct fb_info *fb_info = (struct fb_info *)class_get_devdata(class_device); + struct fb_info *fb_info = (struct fb_info *)class_get_devdata(class_device); + + if (!(fb_info->flags & FBINFO_HWACCEL_CURSOR)) + return -ENXIO; return 0; } diff -urN -X /home/jsimmons/dontdiff linus-2.6/drivers/video/i810/i810.h fbdev-2.6/drivers/video/i810/i810.h--- linus-2.6/drivers/video/i810/i810.h 2005-05-10 08:39:33.000000000 -0700 +++ fbdev-2.6/drivers/video/i810/i810.h 2005-06-24 09:04:12.000000000 -0700@@ -201,7 +201,6 @@#define HAS_ACCELERATION 2 #define ALWAYS_SYNC 4 #define LOCKUP 8 -#define USE_HWCUR 16 struct gtt_data { struct agp_memory *i810_fb_memory; diff -urN -X /home/jsimmons/dontdiff linus-2.6/drivers/video/i810/i810_main.c fbdev-2.6/drivers/video/i810/i810_main.c--- linus-2.6/drivers/video/i810/i810_main.c 2005-06-22 17:09:52.000000000 -0700 +++ fbdev-2.6/drivers/video/i810/i810_main.c 2005-06-24 09:04:12.000000000 -0700@@ -1375,7 +1375,6 @@decode_var(&info->var, par); i810_load_regs(par); i810_init_cursor(par); - encode_fix(&info->fix, info); if (info->var.accel_flags && !(par->dev_flags & LOCKUP)) {@@ -1387,6 +1386,7 @@info->pixmap.scan_align = 1; info->flags = FBINFO_DEFAULT | FBINFO_HWACCEL_YPAN; } + info->flags |= FBINFO_HWACCEL_CURSOR; return 0; }@@ -1418,9 +1418,8 @@struct i810fb_par *par = (struct i810fb_par *)info->par; u8 __iomem *mmio = par->mmio_start_virtual; - if (!(par->dev_flags & USE_HWCUR) || !info->var.accel_flags || - par->dev_flags & LOCKUP) - return soft_cursor(info, cursor); + if (!par->dev_flags & LOCKUP) + return -ENXIO; if (cursor->image.width > 64 || cursor->image.height > 64) return -ENXIO; diff -urN -X /home/jsimmons/dontdiff linus-2.6/drivers/video/intelfb/intelfbdrv.c fbdev-2.6/drivers/video/intelfb/intelfbdrv.c--- linus-2.6/drivers/video/intelfb/intelfbdrv.c 2005-06-22 17:09:52.000000000 -0700 +++ fbdev-2.6/drivers/video/intelfb/intelfbdrv.c 2005-06-24 09:04:12.000000000 -0700@@ -117,14 +117,10 @@#include <linux/slab.h> #include <linux/delay.h> #include <linux/fb.h> -#include <linux/console.h> -#include <linux/selection.h> #include <linux/ioport.h> #include <linux/init.h> #include <linux/pci.h> #include <linux/vmalloc.h> -#include <linux/kd.h> -#include <linux/vt_kern.h> #include <linux/pagemap.h> #include <linux/version.h>@@ -242,7 +238,7 @@static char *mode = NULL; module_param(accel, bool, S_IRUGO); -MODULE_PARM_DESC(accel, "Enable console acceleration"); +MODULE_PARM_DESC(accel, "Enable hardware acceleration"); module_param(vram, int, S_IRUGO); MODULE_PARM_DESC(vram, "System RAM to allocate to framebuffer in MiB"); module_param(voffset, int, S_IRUGO);@@ -498,7 +494,7 @@{ struct fb_info *info; struct intelfb_info *dinfo; - int i, j, err, dvo; + int i, err, dvo; int aperture_size, stolen_size; struct agp_kern_info gtt_info; int agp_memtype;@@ -841,13 +837,6 @@if (bailearly == 5) bailout(dinfo); - for (i = 0; i < 16; i++) { - j = color_table[i]; - dinfo->palette[i].red = default_red[j]; - dinfo->palette[i].green = default_grn[j]; - dinfo->palette[i].blue = default_blu[j]; - } - if (bailearly == 6) bailout(dinfo);@@ -1328,9 +1317,10 @@if (ACCEL(dinfo, info)) { info->flags = FBINFO_DEFAULT | FBINFO_HWACCEL_YPAN | FBINFO_HWACCEL_COPYAREA | FBINFO_HWACCEL_FILLRECT | - FBINFO_HWACCEL_IMAGEBLIT; + FBINFO_HWACCEL_IMAGEBLIT | FBINFO_HWACCEL_CURSOR; } else { - info->flags = FBINFO_DEFAULT | FBINFO_HWACCEL_YPAN; + info->flags = FBINFO_DEFAULT | FBINFO_HWACCEL_YPAN | + FBINFO_HWACCEL_CURSOR; } kfree(hw); return 0;@@ -1359,10 +1349,6 @@green >>= 8; blue >>= 8; - dinfo->palette[regno].red = red; - dinfo->palette[regno].green = green; - dinfo->palette[regno].blue = blue; - intelfbhw_setcolreg(dinfo, regno, red, green, blue, transp); } diff -urN -X /home/jsimmons/dontdiff linus-2.6/drivers/video/intelfb/intelfb.h fbdev-2.6/drivers/video/intelfb/intelfb.h--- linus-2.6/drivers/video/intelfb/intelfb.h 2005-05-10 08:39:33.000000000 -0700 +++ fbdev-2.6/drivers/video/intelfb/intelfb.h 2005-06-24 09:04:12.000000000 -0700@@ -234,7 +234,6 @@/* palette */ u32 pseudo_palette[17]; - struct { u8 red, green, blue, pad; } palette[256]; /* chip info */ int pci_chipset; diff -urN -X /home/jsimmons/dontdiff linus-2.6/drivers/video/intelfb/intelfbhw.c fbdev-2.6/drivers/video/intelfb/intelfbhw.c--- linus-2.6/drivers/video/intelfb/intelfbhw.c 2005-05-10 08:39:33.000000000 -0700 +++ fbdev-2.6/drivers/video/intelfb/intelfbhw.c 2005-06-24 09:04:13.000000000 -0700@@ -29,14 +29,10 @@#include <linux/slab.h> #include <linux/delay.h> #include <linux/fb.h> -#include <linux/console.h> -#include <linux/selection.h> #include <linux/ioport.h> #include <linux/init.h> #include <linux/pci.h> #include <linux/vmalloc.h> -#include <linux/kd.h> -#include <linux/vt_kern.h> #include <linux/pagemap.h> #include <linux/version.h> diff -urN -X /home/jsimmons/dontdiff linus-2.6/drivers/video/nvidia/nvidia.c fbdev-2.6/drivers/video/nvidia/nvidia.c--- linus-2.6/drivers/video/nvidia/nvidia.c 2005-06-22 17:09:52.000000000 -0700 +++ fbdev-2.6/drivers/video/nvidia/nvidia.c 2005-06-24 09:04:13.000000000 -0700@@ -1300,6 +1300,7 @@| FBINFO_HWACCEL_IMAGEBLIT | FBINFO_HWACCEL_FILLRECT | FBINFO_HWACCEL_COPYAREA + | FBINFO_HWACCEL_CURSOR | FBINFO_HWACCEL_YPAN; fb_videomode_to_modelist(info->monspecs.modedb, diff -urN -X /home/jsimmons/dontdiff linus-2.6/drivers/video/riva/fbdev.c fbdev-2.6/drivers/video/riva/fbdev.c--- linus-2.6/drivers/video/riva/fbdev.c 2005-06-22 17:09:52.000000000 -0700 +++ fbdev-2.6/drivers/video/riva/fbdev.c 2005-06-24 09:04:13.000000000 -0700@@ -1704,7 +1704,8 @@| FBINFO_HWACCEL_YPAN | FBINFO_HWACCEL_COPYAREA | FBINFO_HWACCEL_FILLRECT - | FBINFO_HWACCEL_IMAGEBLIT; + | FBINFO_HWACCEL_IMAGEBLIT + | FBINFO_HWACCEL_CURSOR; /* Accel seems to not work properly on NV30 yet...*/ if ((par->riva.Architecture == NV_ARCH_30) || noaccel) { diff -urN -X /home/jsimmons/dontdiff linus-2.6/include/linux/fb.h fbdev-2.6/include/linux/fb.h--- linus-2.6/include/linux/fb.h 2005-06-22 17:09:52.000000000 -0700 +++ fbdev-2.6/include/linux/fb.h 2005-06-24 09:04:13.000000000 -0700@@ -702,6 +702,7 @@#define FBINFO_HWACCEL_XPAN 0x1000 /* optional */ #define FBINFO_HWACCEL_YPAN 0x2000 /* optional */ #define FBINFO_HWACCEL_YWRAP 0x4000 /* optional */ +#define FBINFO_HWACCEL_CURSOR 0x8000 /* required */ #define FBINFO_MISC_USEREVENT 0x10000 /* event request from userspace */ ------------------------------------------------------- SF.Net email is sponsored by: Discover Easy Linux Migration Strategies from IBM. Find simple to follow Roadmaps, straightforward articles, informative Webcasts and more! Get everything you need to get up to speed, fast. http://ads.osdn.com/?ad_id=7477&alloc_id=16492&op=click _______________________________________________ Linux-fbdev-devel mailing list Linux-fbdev-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/linux-fbdev-devel
------------------------------------------------------- SF.Net email is sponsored by: Discover Easy Linux Migration Strategies from IBM. Find simple to follow Roadmaps, straightforward articles, informative Webcasts and more! Get everything you need to get up to speed, fast. http://ads.osdn.com/?ad_idt77&alloc_id492&op=click