From: Jon S. <jon...@gm...> - 2005-06-11 04:57:29
Attachments:
patch
|
James has indicated that the soft_cursor only works with fbconsole and it won't work from user space. This means that soft_cursor is in the way of using a hardware cursor from user space. This patch removes soft_cursor from all of the drivers. So if the driver doesn't support a hardware cursor fb_cursor is NULL. I also fixed the three drivers with hardware implementation. These drivers had cases where the hardware cursor had an error and then returned the software one instead. Now they return -ENODEV when they can't use the hardware one. In console/bitlbt.c I made this change: =09/* First try the hardware cursor */ =09if (info->fbops->fb_cursor) =09=09err =3D info->fbops->fb_cursor(info, &cursor); =09/* if that doesn't exist or didn't work, use the software one */ =09if (err) =09=09soft_cursor(info, &cursor); The effect of all of this is the make a clear path for getting to hardware cursors without triggering the soft_cursor fallback. Triggering of the fallback was moved into fb_console. This also lets me remove the softcursor module from memory when fb_console is not loaded. Give this a try and let me know what you think.=20 --=20 Jon Smirl jon...@gm... |
From: James S. <jsi...@ww...> - 2005-06-11 06:15:41
|
Ug no. I see in the future more drivers using hardware cursors instead. We would be carry around extra software cursor code in the the framebuffer console all the time. We need to properly fix the cursor code. Unfortunely that will take more work. In the mean time please encourage people to support hardware cursors. Even crappy cards have hardware cursors most of the time. On Sat, 11 Jun 2005, Jon Smirl wrote: > James has indicated that the soft_cursor only works with fbconsole and > it won't work from user space. This means that soft_cursor is in the > way of using a hardware cursor from user space. This patch removes > soft_cursor from all of the drivers. So if the driver doesn't support > a hardware cursor fb_cursor is NULL. > > I also fixed the three drivers with hardware implementation. These > drivers had cases where the hardware cursor had an error and then > returned the software one instead. Now they return -ENODEV when they > can't use the hardware one. > > In console/bitlbt.c I made this change: > /* 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); > > The effect of all of this is the make a clear path for getting to > hardware cursors without triggering the soft_cursor fallback. > Triggering of the fallback was moved into fb_console. This also lets > me remove the softcursor module from memory when fb_console is not > loaded. > > Give this a try and let me know what you think. > > -- > Jon Smirl > jon...@gm... > |
From: Jon S. <jon...@gm...> - 2005-06-11 13:10:28
|
On 6/11/05, James Simmons <jsi...@ww...> wrote: >=20 > Ug no. I see in the future more drivers using hardware cursors instead. > We would be carry around extra software cursor code in the the framebuffe= r > console all the time. We need to properly fix the cursor code. Unfortunel= y > that will take more work. In the mean time please encourage people to > support hardware cursors. Even crappy cards have hardware cursors most of > the time. The way things are now I can't use the hardware cursors without triggering the software one. The way I changed it user space (when the interface is finished) will get hardware or nothing. fbconsole will get the same hardware or nothing, but if nothing it implements a software cursor. The question here is who is responsible for generating a software cursor, is it the hardware driver's responsibility or the app using the system? fbconsole would be considered an app using the system. --=20 Jon Smirl jon...@gm... |
From: Jon S. <jon...@gm...> - 2005-06-11 13:23:26
|
On 6/11/05, James Simmons <jsi...@ww...> wrote: >=20 > Ug no. I see in the future more drivers using hardware cursors instead. > We would be carry around extra software cursor code in the the framebuffe= r > console all the time. We need to properly fix the cursor code. Unfortunel= y > that will take more work. In the mean time please encourage people to > support hardware cursors. Even crappy cards have hardware cursors most of > the time. Also, I didn't delete the fb_cursor field. I just removed all of the assignments of .fb_cursor =3D soft_cursor. The field is still there and defaulting to null, except in the three drivers with hardware cursors where it is set. For a driver to implement software cursors it has to know the location of the scanout buffer, scanbuffer format, etc. I not sure if all of this is always know for user space apps. The hardware cursor doesn't need as much info about the framebuffer. --=20 Jon Smirl jon...@gm... |
From: Geert U. <ge...@li...> - 2005-06-11 20:35:37
|
On Sat, 11 Jun 2005, Jon Smirl wrote: > James has indicated that the soft_cursor only works with fbconsole and > it won't work from user space. This means that soft_cursor is in the > way of using a hardware cursor from user space. This patch removes > soft_cursor from all of the drivers. So if the driver doesn't support > a hardware cursor fb_cursor is NULL. > > I also fixed the three drivers with hardware implementation. These > drivers had cases where the hardware cursor had an error and then > returned the software one instead. Now they return -ENODEV when they > can't use the hardware one. > > In console/bitlbt.c I made this change: > /* 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); > > The effect of all of this is the make a clear path for getting to > hardware cursors without triggering the soft_cursor fallback. > Triggering of the fallback was moved into fb_console. This also lets > me remove the softcursor module from memory when fb_console is not > loaded. > > Give this a try and let me know what you think. This patch corrupts some comments in drivers/video/amifb.c. Gr{oetje,eeting}s, Geert -- Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- ge...@li... In personal conversations with technical people, I call myself a hacker. But when I'm talking to journalists I just say "programmer" or something like that. -- Linus Torvalds |
From: Jon S. <jon...@gm...> - 2005-06-11 22:01:50
Attachments:
soft_cursor.patch
|
On 6/11/05, Geert Uytterhoeven <ge...@li...> wrote: > This patch corrupts some comments in drivers/video/amifb.c. This should fix it. I touched up a few other places with unintended changes. I don't think all of the fbdev files have been authored using the same codepage. --=20 Jon Smirl jon...@gm... |
From: Geert U. <ge...@li...> - 2005-06-12 07:43:48
|
On Sat, 11 Jun 2005, Jon Smirl wrote: > On 6/11/05, Geert Uytterhoeven <ge...@li...> wrote: > > This patch corrupts some comments in drivers/video/amifb.c. > > This should fix it. I touched up a few other places with unintended Thx! > changes. I don't think all of the fbdev files have been authored using > the same codepage. The original ones were ISO-8859-1 or -15 (anyone who puts EURO-signs in GPLed source code? :-). But these days the preferred encoding is UTF-8. Gr{oetje,eeting}s, Geert -- Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- ge...@li... In personal conversations with technical people, I call myself a hacker. But when I'm talking to journalists I just say "programmer" or something like that. -- Linus Torvalds |
From: Jon S. <jon...@gm...> - 2005-06-16 01:34:07
|
Are there still issues with this patch? --=20 Jon Smirl jon...@gm... |
From: Antonino A. D. <ad...@ho...> - 2005-06-16 03:26:45
|
On Thursday 16 June 2005 09:34, Jon Smirl wrote: > Are there still issues with this patch? Maybe. A few drivers will set the fb_cursor field to either soft_cursor or the driver-specific cursor function, depending on the kernel boot options or setting of the var.accel flag. The changes required are probably minor. Tony |
From: Jon S. <jon...@gm...> - 2005-06-16 03:37:20
|
On 6/15/05, Antonino A. Daplas <ad...@ho...> wrote: > On Thursday 16 June 2005 09:34, Jon Smirl wrote: > > Are there still issues with this patch? >=20 > Maybe. A few drivers will set the fb_cursor field to either > soft_cursor or the driver-specific cursor function, depending > on the kernel boot options or setting of the var.accel flag. I think there were three driver implementing hardware cursors.=20 I tried to keep them working, they only needed minor touchups. If they had fallbacks to the software cursor I removed those and returned an error instead. Instead fbconsole will get the error and switch to software cursor. If HW cursors are going to work from user space they can't contain SW cursor fallbacks. The patch should move softcursor.c into the fbconsole subdirectory but I can't figure out how to do that with git yet. >=20 > The changes required are probably minor. >=20 > Tony >=20 >=20 >=20 >=20 --=20 Jon Smirl jon...@gm... |
From: James S. <jsi...@ww...> - 2005-06-21 00:08:04
|
> On 6/15/05, Antonino A. Daplas <ad...@ho...> wrote: > > On Thursday 16 June 2005 09:34, Jon Smirl wrote: > > > Are there still issues with this patch? > > > > Maybe. A few drivers will set the fb_cursor field to either > > soft_cursor or the driver-specific cursor function, depending > > on the kernel boot options or setting of the var.accel flag. > > I think there were three driver implementing hardware cursors. > I tried to keep them working, they only needed minor touchups. > > If they had fallbacks to the software cursor I removed those and > returned an error instead. Instead fbconsole will get the error and > switch to software cursor. If HW cursors are going to work from user > space they can't contain SW cursor fallbacks. > > The patch should move softcursor.c into the fbconsole subdirectory but > I can't figure out how to do that with git yet. > > > > > The changes required are probably minor. > > > > Tony I agree we should not fall back to the software cursor when the hardware cursor fails. Do we really want to eliminate the cursor from the device interface if it is not a hardware cursor? Shouldn't the cursor always work? That is the question. |
From: Jon S. <jon...@gm...> - 2005-06-21 00:31:52
|
On 6/20/05, James Simmons <jsi...@ww...> wrote: > I agree we should not fall back to the software cursor when the hardware > cursor fails. Do we really want to eliminate the cursor from the device > interface if it is not a hardware cursor? Shouldn't the cursor always > work? That is the question. I don't think there really is a choice here. Fbdev has to implement the hardware cursor. The software one is application specific. fbconsole and X implement it completely differently. I don't think there is a way to implement a general software cursor. fbdev provides hardware or nothing if no hardware cursor, cursor is up to app fbconsole and X then provide two different fallback schemes. For example I don't think we have enough info to implement X's software cursor in the fbdev driver. We would need some way to know when X is updating the screen via paint or buffer swaps. Wouldn't that be a total mess for fbdev to track and a new API would be needed. We just never noticed the problem before since only one client (fbconsole) was using the cursor. Current X is programming the hardware cursor from user space. After this change it would probably be cleaner to just eliminate the softcursor module and compile softcursor into fbconsole. softcursor.c would be moved to the fbconsole subdir if you can figure out how to tell git to do a mv. But we can always save these changes for later. --=20 Jon Smirl jon...@gm... |
From: James S. <jsi...@ww...> - 2005-06-24 00:10:07
|
> For example I don't think we have enough info to implement X's > software cursor in the fbdev driver. We would need some way to know > when X is updating the screen via paint or buffer swaps. Wouldn't that > be a total mess for fbdev to track and a new API would be needed. I was pondering this and you are right. For the software cursor you need to blend the cursor image with what data is in the framebuffer at that location. If we have a concurrent thread that updates that area of the framebuffer then we would have to notify the cursor of the change to update that region of the screen with proper data. There is no clean way to do this. Now I was thinking instead of a massive move of the the software cursor we add a flag FBINFO_HWACCEL_CURSOR to tell us if we are using a hardware cursor. This way for the sysfs interface you can test to see if it is a hardware cursor and only allow userland to access a hardware cursor. Here is a patch for that. People please try it out. 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-23 16:45:21.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/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-23 16:47:50.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; } @@ -1420,7 +1420,7 @@ if (!(par->dev_flags & USE_HWCUR) || !info->var.accel_flags || par->dev_flags & LOCKUP) - return soft_cursor(info, cursor); + 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-23 17:04:24.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-23 17:03:59.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-23 16:32:22.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-23 16:51:38.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-23 16:51:14.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-23 16:44:55.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 /* optional */ #define FBINFO_MISC_USEREVENT 0x10000 /* event request from userspace */ |
From: Jon S. <jon...@gm...> - 2005-06-24 12:26:21
|
On 6/23/05, James Simmons <jsi...@ww...> wrote: > Now I was thinking instead of a massive move of the the software > cursor we add a flag FBINFO_HWACCEL_CURSOR to tell us if we are using a > hardware cursor. This way for the sysfs interface you can test to see if > it is a hardware cursor and only allow userland to access a hardware > cursor. Here is a patch for that. People please try it out. Your code will work, but it is conceptually what we want to do? Software cursors are application specific. The soft cursor implemented in fbdev really belongs to fbconsole. If we get another in-kernel user with a different update pattern (maybe they use the GPU) they will want a different soft cursor. Shouldn't we just move the current soft cursor into fbconsole? Given that software cursors are application specific fbdev should not contain one. --=20 Jon Smirl jon...@gm... |
From: James S. <jsi...@ww...> - 2005-06-24 16:17:29
|
> > Now I was thinking instead of a massive move of the the software > > cursor we add a flag FBINFO_HWACCEL_CURSOR to tell us if we are using a > > hardware cursor. This way for the sysfs interface you can test to see if > > it is a hardware cursor and only allow userland to access a hardware > > cursor. Here is a patch for that. People please try it out. > > Your code will work, but it is conceptually what we want to do? > Software cursors are application specific. The soft cursor implemented > in fbdev really belongs to fbconsole. If we get another in-kernel > user with a different update pattern (maybe they use the GPU) they > will want a different soft cursor. Shouldn't we just move the current > soft cursor into fbconsole? Given that software cursors are > application specific fbdev should not contain one. The only reason I'm against that is then when the developer with the different update pattern will create a new fbconsole. We could end up with several fbconsoles. I really like to keep it down to one. So I rather deal with several cursor implementation instead of several fbconsoles. Also remember that the software cursor is generically wrapped around the the imageblit function. Since imageblit is independent of the update pattern we will be okay. |
From: Jon S. <jon...@gm...> - 2005-06-24 16:27:36
|
On 6/24/05, James Simmons <jsi...@ww...> wrote: >=20 > > > Now I was thinking instead of a massive move of the the softw= are > > > cursor we add a flag FBINFO_HWACCEL_CURSOR to tell us if we are using= a > > > hardware cursor. This way for the sysfs interface you can test to see= if > > > it is a hardware cursor and only allow userland to access a hardware > > > cursor. Here is a patch for that. People please try it out. > > > > Your code will work, but it is conceptually what we want to do? > > Software cursors are application specific. The soft cursor implemented > > in fbdev really belongs to fbconsole. If we get another in-kernel > > user with a different update pattern (maybe they use the GPU) they > > will want a different soft cursor. Shouldn't we just move the current > > soft cursor into fbconsole? Given that software cursors are > > application specific fbdev should not contain one. >=20 > The only reason I'm against that is then when the developer with the > different update pattern will create a new fbconsole. We could end up > with several fbconsoles. I really like to keep it down to one. So I rathe= r > deal with several cursor implementation instead of several fbconsoles. > Also remember that the software cursor is generically wrapped around the > the imageblit function. Since imageblit is independent of the update > pattern we will be okay. To address your concern, leave softcursor as an fbdev module. But we do need to remove all of those .fb_cursor =3D softcursor from all of the fbdev modules. As long as those are there we can only have one softcursor implementation. Then any in-kernel user does this: /* First try the hardware cursor */ if (info->fbops->fb_cursor) err =3D 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 want to remove the fallback to softcursor logic from fbdev, I don't care if the softcursor modules stays part of fbdev, it's the fallback logic that doesn't belong in the drivers. There is no need for all of the drivers to reference softcursor. --=20 Jon Smirl jon...@gm... |
From: James S. <jsi...@ww...> - 2005-06-24 17:13:30
|
> To address your concern, leave softcursor as an fbdev module. But we > do need to remove all of those .fb_cursor = softcursor from all of the > fbdev modules. As long as those are there we can only have one > softcursor implementation. Does this patch work for you? It reports to userland that no cursor is avaiable if the fbdev driver is using the software cursor. 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 */ |
From: Jon S. <jon...@gm...> - 2005-06-24 17:25:59
|
Why are you trying to preserve all of the ".fb_cursor =3D 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 =3D 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); --=20 Jon Smirl jon...@gm... |
From: James S. <jsi...@ww...> - 2005-07-01 23:32:30
|
> 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 */ |
From: Jon S. <jon...@gm...> - 2005-07-02 00:28:54
|
On 7/1/05, James Simmons <jsi...@ww...> wrote: > 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. But we agreed that having the drivers fallback to the softcursor is the wrong general thing to do since it only works for fbconsole. Why do we want to keep code in place when we agree that it is not needed? All it does is add clutter to the driver code. You don't need to make the patch, I already made it for you. --=20 Jon Smirl jon...@gm... |
From: Jon S. <jon...@gm...> - 2005-07-02 00:56:57
|
Another way to think of this, let's make another member variable .fb_hwcursor. When the driver has a hardware cusor is sets .fb_hwcursor. If you want to use the software cursor use the exisiting .fb_cursor. If you think about it every driver is going to have the exact same assignment .fb_cursor =3D soft_cursor. If every driver is going to have exactly the same assignment, why do we need the variable? It's the existence of the hardware cursor that varies from driver to driver, that's the one we need the variable for. --=20 Jon Smirl jon...@gm... |
From: Sylvain M. <syl...@wo...> - 2005-07-01 23:54:37
|
James, In the intelfb driver, the hw cursor is decoupled from the graphic=20 hw acceleration. So, this code is incorrect @@ -1328,9 +1317,10 @@ if (ACCEL(dinfo, info)) { info->flags =3D FBINFO_DEFAULT | FBINFO_HWACCEL_YPAN | FBINFO_HWACCEL_COPYAREA | FBINFO_HWACCEL_FILLRECT | - FBINFO_HWACCEL_IMAGEBLIT; + FBINFO_HWACCEL_IMAGEBLIT | FBINFO_HWACCEL_CURSOR; } else { - info->flags =3D FBINFO_DEFAULT | FBINFO_HWACCEL_YPAN; + info->flags =3D FBINFO_DEFAULT | FBINFO_HWACCEL_YPAN |=20 + FBINFO_HWACCEL_CURSOR; } kfree(hw); return 0; should be something like this. I can come with a good patch if you want=20 (now it's just a mail hack) if (ACCEL(dinfo, info)) { info->flags =3D FBINFO_DEFAULT | FBINFO_HWACCEL_YPAN | FBINFO_HWACCEL_COPYAREA | FBINFO_HWACCEL_FILLRECT | FBINFO_HWACCEL_IMAGEBLIT; } else { info->flags =3D FBINFO_DEFAULT | FBINFO_HWACCEL_YPAN; } + if (dinfo->hwcursor) + info->flags |=3D FBINFO_HWACCEL_CURSOR; Regards Sylvain James Simmons a =E9crit: >>Why are you trying to preserve all of the ".fb_cursor =3D 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 =3D 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); >> =20 >> > >I don't want to make a patch that touches all the drivers. Th epatch I=20 >posted is a nice simple patch. If there are no other arguments against i= t=20 >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.0000= 00000 -0700 >+++ fbdev-2.6/drivers/video/aty/mach64_cursor.c 2005-06-24 09:04:12.0000= 00000 -0700 >@@ -219,8 +219,8 @@ > info->sprite.buf_align =3D 16; /* and 64 lines tall. */ > info->sprite.flags =3D FB_PIXMAP_IO; >=20 >+ info->flags |=3D FBINFO_HWACCEL_CURSOR; > info->fbops->fb_cursor =3D atyfb_cursor; >- > return 0; > } >=20 >diff -urN -X /home/jsimmons/dontdiff linus-2.6/drivers/video/fbsysfs.c f= bdev-2.6/drivers/video/fbsysfs.c >--- linus-2.6/drivers/video/fbsysfs.c 2005-06-14 11:51:24.000000000 -070= 0 >+++ fbdev-2.6/drivers/video/fbsysfs.c 2005-06-24 09:46:33.000000000 -070= 0 >@@ -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 =3D (struct fb_info *)class_get_devdata(clas= s_device); >+ struct fb_info *fb_info =3D (struct fb_info *)class_get_devdata(class_= device); >+ >+ if (!(fb_info->flags & FBINFO_HWACCEL_CURSOR)) >+ return -ENXIO; > return 0; > } >=20 > static ssize_t show_cursor(struct class_device *class_device, char *buf= ) > { >-// struct fb_info *fb_info =3D (struct fb_info *)class_get_devdata(clas= s_device); >+ struct fb_info *fb_info =3D (struct fb_info *)class_get_devdata(class_= device); >+ >+ if (!(fb_info->flags & FBINFO_HWACCEL_CURSOR)) >+ return -ENXIO; > return 0; > } >=20 >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 -0= 700 >+++ fbdev-2.6/drivers/video/i810/i810.h 2005-06-24 09:04:12.000000000 -0= 700 >@@ -201,7 +201,6 @@ > #define HAS_ACCELERATION 2 > #define ALWAYS_SYNC 4 > #define LOCKUP 8 >-#define USE_HWCUR 16 >=20 > struct gtt_data { > struct agp_memory *i810_fb_memory; >diff -urN -X /home/jsimmons/dontdiff linus-2.6/drivers/video/i810/i810_m= ain.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.0000000= 00 -0700 >+++ fbdev-2.6/drivers/video/i810/i810_main.c 2005-06-24 09:04:12.0000000= 00 -0700 >@@ -1375,7 +1375,6 @@ > decode_var(&info->var, par); > i810_load_regs(par); > i810_init_cursor(par); >- > encode_fix(&info->fix, info); >=20 > if (info->var.accel_flags && !(par->dev_flags & LOCKUP)) { >@@ -1387,6 +1386,7 @@ > info->pixmap.scan_align =3D 1; > info->flags =3D FBINFO_DEFAULT | FBINFO_HWACCEL_YPAN; > } >+ info->flags |=3D FBINFO_HWACCEL_CURSOR; > return 0; > } >=20 >@@ -1418,9 +1418,8 @@ > struct i810fb_par *par =3D (struct i810fb_par *)info->par; > u8 __iomem *mmio =3D par->mmio_start_virtual; >=20 >- 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; >=20 > if (cursor->image.width > 64 || cursor->image.height > 64) > return -ENXIO; >diff -urN -X /home/jsimmons/dontdiff linus-2.6/drivers/video/intelfb/int= elfbdrv.c fbdev-2.6/drivers/video/intelfb/intelfbdrv.c >--- linus-2.6/drivers/video/intelfb/intelfbdrv.c 2005-06-22 17:09:52.000= 000000 -0700 >+++ fbdev-2.6/drivers/video/intelfb/intelfbdrv.c 2005-06-24 09:04:12.000= 000000 -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> >=20 >@@ -242,7 +238,7 @@ > static char *mode =3D NULL; >=20 > 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 =3D=3D 5) > bailout(dinfo); >=20 >- for (i =3D 0; i < 16; i++) { >- j =3D color_table[i]; >- dinfo->palette[i].red =3D default_red[j]; >- dinfo->palette[i].green =3D default_grn[j]; >- dinfo->palette[i].blue =3D default_blu[j]; >- } >- > if (bailearly =3D=3D 6) > bailout(dinfo); >=20 >@@ -1328,9 +1317,10 @@ > if (ACCEL(dinfo, info)) { > info->flags =3D FBINFO_DEFAULT | FBINFO_HWACCEL_YPAN | > FBINFO_HWACCEL_COPYAREA | FBINFO_HWACCEL_FILLRECT | >- FBINFO_HWACCEL_IMAGEBLIT; >+ FBINFO_HWACCEL_IMAGEBLIT | FBINFO_HWACCEL_CURSOR; > } else { >- info->flags =3D FBINFO_DEFAULT | FBINFO_HWACCEL_YPAN; >+ info->flags =3D FBINFO_DEFAULT | FBINFO_HWACCEL_YPAN |=20 >+ FBINFO_HWACCEL_CURSOR; > } > kfree(hw); > return 0; >@@ -1359,10 +1349,6 @@ > green >>=3D 8; > blue >>=3D 8; >=20 >- dinfo->palette[regno].red =3D red; >- dinfo->palette[regno].green =3D green; >- dinfo->palette[regno].blue =3D blue; >- > intelfbhw_setcolreg(dinfo, regno, red, green, blue, > transp); > } >diff -urN -X /home/jsimmons/dontdiff linus-2.6/drivers/video/intelfb/int= elfb.h fbdev-2.6/drivers/video/intelfb/intelfb.h >--- linus-2.6/drivers/video/intelfb/intelfb.h 2005-05-10 08:39:33.000000= 000 -0700 >+++ fbdev-2.6/drivers/video/intelfb/intelfb.h 2005-06-24 09:04:12.000000= 000 -0700 >@@ -234,7 +234,6 @@ >=20 > /* palette */ > u32 pseudo_palette[17]; >- struct { u8 red, green, blue, pad; } palette[256]; >=20 > /* chip info */ > int pci_chipset; >diff -urN -X /home/jsimmons/dontdiff linus-2.6/drivers/video/intelfb/int= elfbhw.c fbdev-2.6/drivers/video/intelfb/intelfbhw.c >--- linus-2.6/drivers/video/intelfb/intelfbhw.c 2005-05-10 08:39:33.0000= 00000 -0700 >+++ fbdev-2.6/drivers/video/intelfb/intelfbhw.c 2005-06-24 09:04:13.0000= 00000 -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> >=20 >diff -urN -X /home/jsimmons/dontdiff linus-2.6/drivers/video/nvidia/nvid= ia.c fbdev-2.6/drivers/video/nvidia/nvidia.c >--- linus-2.6/drivers/video/nvidia/nvidia.c 2005-06-22 17:09:52.00000000= 0 -0700 >+++ fbdev-2.6/drivers/video/nvidia/nvidia.c 2005-06-24 09:04:13.00000000= 0 -0700 >@@ -1300,6 +1300,7 @@ > | FBINFO_HWACCEL_IMAGEBLIT > | FBINFO_HWACCEL_FILLRECT > | FBINFO_HWACCEL_COPYAREA >+ | FBINFO_HWACCEL_CURSOR > | FBINFO_HWACCEL_YPAN; >=20 > 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; >=20 > /* Accel seems to not work properly on NV30 yet...*/ > if ((par->riva.Architecture =3D=3D 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 */ >=20 > #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=3D7477&alloc_id=3D16492&op=3Dcli= ck >_______________________________________________ >Linux-fbdev-devel mailing list >Lin...@li... >https://lists.sourceforge.net/lists/listinfo/linux-fbdev-devel > > =20 > |
From: James S. <jsi...@ww...> - 2005-07-06 23:28:12
|
Yes please send me a proper patch. On Sat, 2 Jul 2005, Sylvain Meyer wrote: > James, >=20 > In the intelfb driver, the hw cursor is decoupled from the graphic=20 > hw acceleration. So, this code is incorrect >=20 > @@ -1328,9 +1317,10 @@ > =09if (ACCEL(dinfo, info)) { > =09=09info->flags =3D FBINFO_DEFAULT | FBINFO_HWACCEL_YPAN | > =09=09FBINFO_HWACCEL_COPYAREA | FBINFO_HWACCEL_FILLRECT | > -=09=09FBINFO_HWACCEL_IMAGEBLIT; > +=09=09FBINFO_HWACCEL_IMAGEBLIT | FBINFO_HWACCEL_CURSOR; > =09} else { > -=09=09info->flags =3D FBINFO_DEFAULT | FBINFO_HWACCEL_YPAN; > +=09=09info->flags =3D FBINFO_DEFAULT | FBINFO_HWACCEL_YPAN |=20 > +=09=09FBINFO_HWACCEL_CURSOR; > =09} > =09kfree(hw); > =09return 0; >=20 > should be something like this. I can come with a good patch if you want= =20 > (now it's just a mail hack) >=20 > =09if (ACCEL(dinfo, info)) { > =09=09info->flags =3D FBINFO_DEFAULT | FBINFO_HWACCEL_YPAN | > =09=09FBINFO_HWACCEL_COPYAREA | FBINFO_HWACCEL_FILLRECT | > =09=09FBINFO_HWACCEL_IMAGEBLIT; > =09} else { > =09=09info->flags =3D FBINFO_DEFAULT | FBINFO_HWACCEL_YPAN; > =09} > + if (dinfo->hwcursor) > + info->flags |=3D FBINFO_HWACCEL_CURSOR; >=20 > Regards > Sylvain >=20 > James Simmons a =E9crit: >=20 > >>Why are you trying to preserve all of the ".fb_cursor =3D 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 =3D 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); > >> =20 > >> > > > >I don't want to make a patch that touches all the drivers. Th epatch I= =20 > >posted is a nice simple patch. If there are no other arguments against i= t=20 > >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=092005-05-10 08:39:33.00= 0000000 -0700 > >+++ fbdev-2.6/drivers/video/aty/mach64_cursor.c=092005-06-24 09:04:12.00= 0000000 -0700 > >@@ -219,8 +219,8 @@ > > =09info->sprite.buf_align =3D 16; =09/* and 64 lines tall. */ > > =09info->sprite.flags =3D FB_PIXMAP_IO; > >=20 > >+=09info->flags |=3D FBINFO_HWACCEL_CURSOR; > > =09info->fbops->fb_cursor =3D atyfb_cursor; > >- > > =09return 0; > > } > >=20 > >diff -urN -X /home/jsimmons/dontdiff linus-2.6/drivers/video/fbsysfs.c f= bdev-2.6/drivers/video/fbsysfs.c > >--- linus-2.6/drivers/video/fbsysfs.c=092005-06-14 11:51:24.000000000 -0= 700 > >+++ fbdev-2.6/drivers/video/fbsysfs.c=092005-06-24 09:46:33.000000000 -0= 700 > >@@ -311,13 +311,19 @@ > > static ssize_t store_cursor(struct class_device *class_device, > > =09=09=09 const char * buf, size_t count) > > { > >-//=09struct fb_info *fb_info =3D (struct fb_info *)class_get_devdata(cl= ass_device); > >+=09struct fb_info *fb_info =3D (struct fb_info *)class_get_devdata(clas= s_device); > >+ > >+=09if (!(fb_info->flags & FBINFO_HWACCEL_CURSOR)) > >+=09=09return -ENXIO; > > =09return 0; > > } > >=20 > > static ssize_t show_cursor(struct class_device *class_device, char *buf= ) > > { > >-//=09struct fb_info *fb_info =3D (struct fb_info *)class_get_devdata(cl= ass_device); > >+=09struct fb_info *fb_info =3D (struct fb_info *)class_get_devdata(clas= s_device); > >+ > >+=09if (!(fb_info->flags & FBINFO_HWACCEL_CURSOR)) > >+=09=09return -ENXIO; > > =09return 0; > > } > >=20 > >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=092005-05-10 08:39:33.000000000 = -0700 > >+++ fbdev-2.6/drivers/video/i810/i810.h=092005-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 > >=20 > > struct gtt_data { > > =09struct agp_memory *i810_fb_memory; > >diff -urN -X /home/jsimmons/dontdiff linus-2.6/drivers/video/i810/i810_m= ain.c fbdev-2.6/drivers/video/i810/i810_main.c > >--- linus-2.6/drivers/video/i810/i810_main.c=092005-06-22 17:09:52.00000= 0000 -0700 > >+++ fbdev-2.6/drivers/video/i810/i810_main.c=092005-06-24 09:04:12.00000= 0000 -0700 > >@@ -1375,7 +1375,6 @@ > > =09decode_var(&info->var, par); > > =09i810_load_regs(par); > > =09i810_init_cursor(par); > >- > > =09encode_fix(&info->fix, info); > >=20 > > =09if (info->var.accel_flags && !(par->dev_flags & LOCKUP)) { > >@@ -1387,6 +1386,7 @@ > > =09=09info->pixmap.scan_align =3D 1; > > =09=09info->flags =3D FBINFO_DEFAULT | FBINFO_HWACCEL_YPAN; > > =09} > >+=09info->flags |=3D FBINFO_HWACCEL_CURSOR; > > =09return 0; > > } > >=20 > >@@ -1418,9 +1418,8 @@ > > =09struct i810fb_par *par =3D (struct i810fb_par *)info->par; > > =09u8 __iomem *mmio =3D par->mmio_start_virtual; > >=20 > >-=09if (!(par->dev_flags & USE_HWCUR) || !info->var.accel_flags || > >-=09 par->dev_flags & LOCKUP) > >-=09=09return soft_cursor(info, cursor); > >+=09if (!par->dev_flags & LOCKUP) > >+=09=09return -ENXIO; > >=20 > > =09if (cursor->image.width > 64 || cursor->image.height > 64) > > =09=09return -ENXIO; > >diff -urN -X /home/jsimmons/dontdiff linus-2.6/drivers/video/intelfb/int= elfbdrv.c fbdev-2.6/drivers/video/intelfb/intelfbdrv.c > >--- linus-2.6/drivers/video/intelfb/intelfbdrv.c=092005-06-22 17:09:52.0= 00000000 -0700 > >+++ fbdev-2.6/drivers/video/intelfb/intelfbdrv.c=092005-06-24 09:04:12.0= 00000000 -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> > >=20 > >@@ -242,7 +238,7 @@ > > static char *mode =3D NULL; > >=20 > > 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 @@ > > { > > =09struct fb_info *info; > > =09struct intelfb_info *dinfo; > >-=09int i, j, err, dvo; > >+=09int i, err, dvo; > > =09int aperture_size, stolen_size; > > =09struct agp_kern_info gtt_info; > > =09int agp_memtype; > >@@ -841,13 +837,6 @@ > > =09if (bailearly =3D=3D 5) > > =09=09bailout(dinfo); > >=20 > >-=09for (i =3D 0; i < 16; i++) { > >-=09=09j =3D color_table[i]; > >-=09=09dinfo->palette[i].red =3D default_red[j]; > >-=09=09dinfo->palette[i].green =3D default_grn[j]; > >-=09=09dinfo->palette[i].blue =3D default_blu[j]; > >-=09} > >- > > =09if (bailearly =3D=3D 6) > > =09=09bailout(dinfo); > >=20 > >@@ -1328,9 +1317,10 @@ > > =09if (ACCEL(dinfo, info)) { > > =09=09info->flags =3D FBINFO_DEFAULT | FBINFO_HWACCEL_YPAN | > > =09=09FBINFO_HWACCEL_COPYAREA | FBINFO_HWACCEL_FILLRECT | > >-=09=09FBINFO_HWACCEL_IMAGEBLIT; > >+=09=09FBINFO_HWACCEL_IMAGEBLIT | FBINFO_HWACCEL_CURSOR; > > =09} else { > >-=09=09info->flags =3D FBINFO_DEFAULT | FBINFO_HWACCEL_YPAN; > >+=09=09info->flags =3D FBINFO_DEFAULT | FBINFO_HWACCEL_YPAN |=20 > >+=09=09FBINFO_HWACCEL_CURSOR; > > =09} > > =09kfree(hw); > > =09return 0; > >@@ -1359,10 +1349,6 @@ > > =09=09=09green >>=3D 8; > > =09=09=09blue >>=3D 8; > >=20 > >-=09=09=09dinfo->palette[regno].red =3D red; > >-=09=09=09dinfo->palette[regno].green =3D green; > >-=09=09=09dinfo->palette[regno].blue =3D blue; > >- > > =09=09=09intelfbhw_setcolreg(dinfo, regno, red, green, blue, > > =09=09=09=09=09 transp); > > =09=09} > >diff -urN -X /home/jsimmons/dontdiff linus-2.6/drivers/video/intelfb/int= elfb.h fbdev-2.6/drivers/video/intelfb/intelfb.h > >--- linus-2.6/drivers/video/intelfb/intelfb.h=092005-05-10 08:39:33.0000= 00000 -0700 > >+++ fbdev-2.6/drivers/video/intelfb/intelfb.h=092005-06-24 09:04:12.0000= 00000 -0700 > >@@ -234,7 +234,6 @@ > >=20 > > =09/* palette */ > > =09u32 pseudo_palette[17]; > >-=09struct { u8 red, green, blue, pad; } palette[256]; > >=20 > > =09/* chip info */ > > =09int pci_chipset; > >diff -urN -X /home/jsimmons/dontdiff linus-2.6/drivers/video/intelfb/int= elfbhw.c fbdev-2.6/drivers/video/intelfb/intelfbhw.c > >--- linus-2.6/drivers/video/intelfb/intelfbhw.c=092005-05-10 08:39:33.00= 0000000 -0700 > >+++ fbdev-2.6/drivers/video/intelfb/intelfbhw.c=092005-06-24 09:04:13.00= 0000000 -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> > >=20 > >diff -urN -X /home/jsimmons/dontdiff linus-2.6/drivers/video/nvidia/nvid= ia.c fbdev-2.6/drivers/video/nvidia/nvidia.c > >--- linus-2.6/drivers/video/nvidia/nvidia.c=092005-06-22 17:09:52.000000= 000 -0700 > >+++ fbdev-2.6/drivers/video/nvidia/nvidia.c=092005-06-24 09:04:13.000000= 000 -0700 > >@@ -1300,6 +1300,7 @@ > > =09 | FBINFO_HWACCEL_IMAGEBLIT > > =09 | FBINFO_HWACCEL_FILLRECT > > =09 | FBINFO_HWACCEL_COPYAREA > >+=09 | FBINFO_HWACCEL_CURSOR > > =09 | FBINFO_HWACCEL_YPAN; > >=20 > > =09fb_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=092005-06-22 17:09:52.000000000= -0700 > >+++ fbdev-2.6/drivers/video/riva/fbdev.c=092005-06-24 09:04:13.000000000= -0700 > >@@ -1704,7 +1704,8 @@ > > =09=09 | FBINFO_HWACCEL_YPAN > > =09=09 | FBINFO_HWACCEL_COPYAREA > > =09=09 | FBINFO_HWACCEL_FILLRECT > >-=09 | FBINFO_HWACCEL_IMAGEBLIT; > >+=09 | FBINFO_HWACCEL_IMAGEBLIT > >+=09=09 | FBINFO_HWACCEL_CURSOR; > >=20 > > =09/* Accel seems to not work properly on NV30 yet...*/ > > =09if ((par->riva.Architecture =3D=3D 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=092005-06-22 17:09:52.000000000 -0700 > >+++ fbdev-2.6/include/linux/fb.h=092005-06-24 09:04:13.000000000 -0700 > >@@ -702,6 +702,7 @@ > > #define FBINFO_HWACCEL_XPAN=09=090x1000 /* optional */ > > #define FBINFO_HWACCEL_YPAN=09=090x2000 /* optional */ > > #define FBINFO_HWACCEL_YWRAP=09=090x4000 /* optional */ > >+#define FBINFO_HWACCEL_CURSOR=09=090x8000 /* required */ > >=20 > > #define FBINFO_MISC_USEREVENT 0x10000 /* event request > > =09=09=09=09=09=09 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=3D7477&alloc_id=3D16492&op=3Dcli= ck > >_______________________________________________ > >Linux-fbdev-devel mailing list > >Lin...@li... > >https://lists.sourceforge.net/lists/listinfo/linux-fbdev-devel > > > > =20 > > >=20 >=20 >=20 >=20 |
From: Antonino A. D. <ad...@gm...> - 2005-07-23 05:06:24
|
On Saturday 02 July 2005 08:56, Jon Smirl wrote: > Another way to think of this, let's make another member variable > .fb_hwcursor. When the driver has a hardware cusor is sets > .fb_hwcursor. If you want to use the software cursor use the exisiting > .fb_cursor. > > If you think about it every driver is going to have the exact same > assignment .fb_cursor = soft_cursor. If every driver is going to have > exactly the same assignment, why do we need the variable? > > It's the existence of the hardware cursor that varies from driver to > driver, that's the one we need the variable for. Is this resolved? I tend to agree with Jon. Let's just remove all references to soft_cursor from all drivers, and let fbcon_cursor() fall back to soft_cursor when xxxfb_cursor() is absent. It is a lot cleaner and saner this way, and although it touches all drivers, it is a singe logical change, so it's acceptable. Also, I think it might be preferable to have 2 cursor hooks, one is fbcon-specific, and the other is for use only in userspace, which needs to be more comprehensive. Or if a single but comprehensive cursor API is preferred, then we just adapt fbcon_cursor to use the more powerful cursor API. So, anyone want to propose a cursor API for fbdev, that is both usable by fbcon and userspace? Tony |
From: Jon S. <jon...@gm...> - 2005-07-23 15:41:32
|
This not currently resolved. From user space we can have two interfaces 1) the current ioctl one 2) the new stuff in sysfs. If the hardware cursor is there you get a sysfs= =20 attribute named cursor. write x,y to it to move the cursor around. I'll add= =20 the sysfs support as soon as we decide on the interface. I'm still at OLS. Missed seeing both of you at KS. fbdev was discussed and= =20 Linus went with Benh's proposal to move the modesetting API to user space.= =20 Obviously this will have a lot of impact on fbdev. On 7/23/05, Antonino A. Daplas <ad...@gm...> wrote: >=20 > On Saturday 02 July 2005 08:56, Jon Smirl wrote: > > Another way to think of this, let's make another member variable > > .fb_hwcursor. When the driver has a hardware cusor is sets > > .fb_hwcursor. If you want to use the software cursor use the exisiting > > .fb_cursor. > > > > If you think about it every driver is going to have the exact same > > assignment .fb_cursor =3D soft_cursor. If every driver is going to have > > exactly the same assignment, why do we need the variable? > > > > It's the existence of the hardware cursor that varies from driver to > > driver, that's the one we need the variable for. >=20 > Is this resolved? I tend to agree with Jon. Let's just remove all > references to soft_cursor from all drivers, and let fbcon_cursor() fall= =20 > back > to soft_cursor when xxxfb_cursor() is absent. It is a lot cleaner and=20 > saner > this way, and although it touches all drivers, it is a singe logical=20 > change, > so it's acceptable. >=20 > Also, I think it might be preferable to have 2 cursor hooks, one > is fbcon-specific, and the other is for use only in userspace, which need= s > to be more comprehensive. Or if a single but comprehensive cursor API is > preferred, then we just adapt fbcon_cursor to use the more powerful > cursor API. >=20 > So, anyone want to propose a cursor API for fbdev, that is both usable by > fbcon and userspace? >=20 > Tony >=20 >=20 >=20 --=20 Jon Smirl jon...@gm... |