fbcon: Font setting should check limitation of driver
Subsystems (4)
PATCH 28/41 fbcon: Font setting should check limitation of driver
fbcon_set_font() will now check if the new font dimensions can be drawn by the driver (by checking pixmap.blit_x and blit_y). Similarly, add 2 new parameters to get_default_font(), font_w and font_h, to further aid in the font selection process.
Signed-off-by Antonino Daplas <[email protected]>
---
drivers/video/console/fbcon.c | 17 ++++++++++++++--- drivers/video/console/fonts.c | 10 +++++++++- drivers/video/console/sticore.c | 2 +- include/linux/font.h | 3 ++- 4 files changed, 26 insertions(+), 6 deletions(-)
drivers/video/console/fbcon.c +14 -3
@@ -988,7 +988,9 @@ static const char *fbcon_startup(void)if (!p->fontdata) {if (!fontname[0 ] || !(font =find_font (fontname))) font =get_default_font (info->var.xres, - info->var.yres); + info->var.yres, + info->pixmap.blit_x, + info->pixmap.blit_y); vc->vc_font.width = font->width; vc->vc_font.height = font->height; vc->vc_font.data = (void *)(p->fontdata = font->data);
@@ -1108,7 +1110,9 @@ static void fbcon_init(struct vc_data *vif (!fontname[0 ] || !(font =find_font (fontname))) font =get_default_font (info->var.xres, - info->var.yres); + info->var.yres, + info->pixmap.blit_x, + info->pixmap.blit_y); vc->vc_font.width = font->width; vc->vc_font.height = font->height; vc->vc_font.data = (void *)(p->fontdata = font->data);
@@ -2495,6 +2499,7 @@ static int fbcon_copy_font(struct vc_datstatic int fbcon_set_font (struct vc_data *vc,struct console_font *font,unsigned flags) { +struct fb_info *info = registered_fb[con2fb_map[vc->vc_num]];unsigned charcount = font->charcount;int w = font->width;int h = font->height;
@@ -2508,6 +2513,11 @@ static int fbcon_set_font(struct vc_dataif (charcount !=256 && charcount !=512 )return -EINVAL ; +/* Make sure drawing engine can handle the font */ +if (!(info->pixmap.blit_x & (1 << (font->width -1 ))) || + !(info->pixmap.blit_y & (1 << (font->height -1 )))) +return -EINVAL ; + size = h * pitch * charcount; new_data =kmalloc (FONT_EXTRA_WORDS *sizeof (int ) + size,GFP_USER );
@@ -2552,7 +2562,8 @@ static int fbcon_set_def_font(struct vc_const struct font_desc *f;if (!name) - f =get_default_font (info->var.xres, info->var.yres); + f =get_default_font (info->var.xres, info->var.yres, + info->pixmap.blit_x, info->pixmap.blit_y);else if (!(f =find_font (name)))return -ENOENT ;
drivers/video/console/fonts.c +9 -1
@@ -98,6 +98,8 @@ const struct font_desc *find_font(const* get_default_font - get default font * @xres: screen size of X * @yres: screen size of Y +* @font_w: bit array of supported widths (1 - 32) +* @font_h: bit array of supported heights (1 - 32) * * Get the default font for a specified screen size. * Dimensions are in pixels.
@@ -107,7 +109,8 @@ const struct font_desc *find_font(const* */ -const struct font_desc *get_default_font (int xres,int yres) +const struct font_desc *get_default_font (int xres,int yres,u32 font_w, +u32 font_h) {int i, c, cc;const struct font_desc *f, *g;
@@ -129,6 +132,11 @@ #endif#endif if ((yres <400 ) == (f->height <=8 )) c +=1000 ; + +if (!(font_w & (1 << (f->width -1 ))) || + !(font_w & (1 << (f->height -1 )))) + c +=1000 ; +if (c > cc) { cc = c; g = f;
drivers/video/console/sticore.c +1 -1
@@ -495,7 +495,7 @@ sti_select_fbfont(struct sti_cooked_romreturn NULL ; fbfont =find_font (fbfont_name);if (!fbfont) - fbfont =get_default_font (1024 ,768 ); + fbfont =get_default_font (1024 ,768 , ~(u32 )0 , ~(u32 )0 );if (!fbfont)return NULL ;
include/linux/font.h +2 -1
@@ -49,7 +49,8 @@ extern const struct font_desc *find_font/* Get the default font for a specific screen size */ -extern const struct font_desc *get_default_font (int xres,int yres); +extern const struct font_desc *get_default_font (int xres,int yres, +u32 font_w,u32 font_h);/* Max. length for the name of a predefined font */ #define MAX_FONT_NAME 32
-------------------------------------------------------------------------
This SF.net email is sponsored by DB2 Express
Download DB2 Express C - the FREE version of DB2 express and take control of your XML. No limits. Just data. Click to get it now.
http://sourceforge.net/powerbar/db2/