On Thu, 2007-05-31 at 09:17 +0200, Geert Uytterhoeven wrote: > On Thu, 31 May 2007, Antonino A. Daplas wrote: > > On Wed, 2007-05-30 at 22:04 +0400, Alexey Dobriyan wrote: > > > 2) palette in neofb_par is "u32 palette[16];" which is 4x16 = 64 bytes. > > > struct fb_info::pseudo_palette is assigned to it in > > > neo_alloc_fb_info(). > > > Yet, we check at the beginning of neofb_setcolreg() for color map > > > length which neofb advertises as 256 which seems too many. > > > > > > > Yes, 256 is too many. the pseudo_palette is used for the 16-color > > console only. > > > > I'm impressed that this bug has escaped notice for this long. That bug > > is present since the 2.5.x era. > > > > Probably, the best thing to do is hide the pseudo_palette from the > > drivers and move it to the console layer where it belongs to spare > > future driver writers from palette usage confusion. That will be a > > thankless job. > > The console layer doesn't know how to fill in the pseudo palette in all > cases, that's why the driver have to do it. >
I have actually started working on that. It involves breaking down fb_setcolreg() so it deals only with writing to the actual hardware registers. The part of fb_setcolreg() that adds entries to the pseudo_palette can be separated as a new method, fb_get_pixel(), which given red, blue, green, transp, the driver returns a u32 pixel value that can be written to the pseudo_palette. So fbcon can hold a copy of the pseudo_palette and fills it up by calling info->fbops->fb_get_pixel() successively. This will touch the logo code, the drawing libraries, each driver, etc so it's a lot of work. During the conversion period, we support having info->pseudo_palette and fbcon->pseudo_palette at the same time. Once all drivers are converted, we can remove info->pseudo_palette. One use for having an fb_get_pixel() method is we can use this as an rgb888-image-to-raw-framebuffer-format converter. Currently, I have only converted vesafb. Once the core code is done, I'll start converting the rest of the drivers one by one. Tony - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/