On 09/15/2011 07:05 PM, Alan Cox wrote:
What is your problem with discontigous framebuffers? (I assume discontigous refers to the pages the framebuffer is composed of) Sounds to me like you should implement your own fb_mmap and either map it contigous to screen_base or implement your own fb_read/write. In theory you could even have each pixel at a completely different memory location although some userspace wouldn't be happy when it could no longer mmap the framebuffer.
The mmap side is trivial, the problem is that the fb layer default implementations of blits, fills etc only work on a kernel linear frame buffer. And (for example) there is not enough linear stolen memory on some Intel video for a 1080p console on HDMI even though the hardware is perfectly capable of using an HDTV as its monitor. Nor - on a 32bit box- is there enough space to vremap it.
Okay, I see your problem. It's a bit strange you don't have acceleration. I guess you need either your own implementation of those or adding function pointers like fb_read/write just without the __user and use those instead of direct memory access in the cfb* implementation if screen_base is NULL. Does not sound like a big problem to me, but pretty inefficient, so probably copying the existing ones and adjusting it to your needs would be preferred (just like the sys* implementations exist).
Best regards,
Florian Tobias Schandinat