fbdev: extract fb_show_logo_line()
The Cell Broadband Engine contains a 64-bit PowerPC core with 2 hardware threads (called PPEs) and 8 Synergistic Processing Engines (called SPEs). When booting Linux, 2 penguins logos are shown on the graphical console by the standard frame buffer console logo code. To emphasize the existence of the SPEs (which can be used under Linux), we added a second row of (smaller) helper penguin logos, one for each SPE. A sample screenshot can be found at http://www.kernel.org/pub/linux/kernel/people/geoff/cell/debian-penguin-shot.png (or on the ps3linux T-shirts we wore at OLS :-) This patch: Extract the code to draw one line of logos into fb_show_logo_line() Signed-off-by: Geert Uytterhoeven <Geert.Uytterhoeven@sonycom.com> Signed-off-by: Geoff Levand <geoffrey.levand@am.sony.com> Acked-By: James Simmons <jsimmons@infradead.org> Cc: "Antonino A. Daplas" <adaplas@pol.net> Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org> Cc: Paul Mackerras <paulus@samba.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
b6e8f00fcd
commit
90da63e546
1 changed files with 23 additions and 16 deletions
|
@ -470,22 +470,24 @@ int fb_prepare_logo(struct fb_info *info, int rotate)
|
||||||
return fb_logo.logo->height;
|
return fb_logo.logo->height;
|
||||||
}
|
}
|
||||||
|
|
||||||
int fb_show_logo(struct fb_info *info, int rotate)
|
static int fb_show_logo_line(struct fb_info *info, int rotate,
|
||||||
|
const struct linux_logo *logo, int y,
|
||||||
|
unsigned int n)
|
||||||
{
|
{
|
||||||
u32 *palette = NULL, *saved_pseudo_palette = NULL;
|
u32 *palette = NULL, *saved_pseudo_palette = NULL;
|
||||||
unsigned char *logo_new = NULL, *logo_rotate = NULL;
|
unsigned char *logo_new = NULL, *logo_rotate = NULL;
|
||||||
struct fb_image image;
|
struct fb_image image;
|
||||||
|
|
||||||
/* Return if the frame buffer is not mapped or suspended */
|
/* Return if the frame buffer is not mapped or suspended */
|
||||||
if (fb_logo.logo == NULL || info->state != FBINFO_STATE_RUNNING ||
|
if (logo == NULL || info->state != FBINFO_STATE_RUNNING ||
|
||||||
info->flags & FBINFO_MODULE)
|
info->flags & FBINFO_MODULE)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
image.depth = 8;
|
image.depth = 8;
|
||||||
image.data = fb_logo.logo->data;
|
image.data = logo->data;
|
||||||
|
|
||||||
if (fb_logo.needs_cmapreset)
|
if (fb_logo.needs_cmapreset)
|
||||||
fb_set_logocmap(info, fb_logo.logo);
|
fb_set_logocmap(info, logo);
|
||||||
|
|
||||||
if (fb_logo.needs_truepalette ||
|
if (fb_logo.needs_truepalette ||
|
||||||
fb_logo.needs_directpalette) {
|
fb_logo.needs_directpalette) {
|
||||||
|
@ -494,17 +496,16 @@ int fb_show_logo(struct fb_info *info, int rotate)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
if (fb_logo.needs_truepalette)
|
if (fb_logo.needs_truepalette)
|
||||||
fb_set_logo_truepalette(info, fb_logo.logo, palette);
|
fb_set_logo_truepalette(info, logo, palette);
|
||||||
else
|
else
|
||||||
fb_set_logo_directpalette(info, fb_logo.logo, palette);
|
fb_set_logo_directpalette(info, logo, palette);
|
||||||
|
|
||||||
saved_pseudo_palette = info->pseudo_palette;
|
saved_pseudo_palette = info->pseudo_palette;
|
||||||
info->pseudo_palette = palette;
|
info->pseudo_palette = palette;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (fb_logo.depth <= 4) {
|
if (fb_logo.depth <= 4) {
|
||||||
logo_new = kmalloc(fb_logo.logo->width * fb_logo.logo->height,
|
logo_new = kmalloc(logo->width * logo->height, GFP_KERNEL);
|
||||||
GFP_KERNEL);
|
|
||||||
if (logo_new == NULL) {
|
if (logo_new == NULL) {
|
||||||
kfree(palette);
|
kfree(palette);
|
||||||
if (saved_pseudo_palette)
|
if (saved_pseudo_palette)
|
||||||
|
@ -512,29 +513,35 @@ int fb_show_logo(struct fb_info *info, int rotate)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
image.data = logo_new;
|
image.data = logo_new;
|
||||||
fb_set_logo(info, fb_logo.logo, logo_new, fb_logo.depth);
|
fb_set_logo(info, logo, logo_new, fb_logo.depth);
|
||||||
}
|
}
|
||||||
|
|
||||||
image.dx = 0;
|
image.dx = 0;
|
||||||
image.dy = 0;
|
image.dy = y;
|
||||||
image.width = fb_logo.logo->width;
|
image.width = logo->width;
|
||||||
image.height = fb_logo.logo->height;
|
image.height = logo->height;
|
||||||
|
|
||||||
if (rotate) {
|
if (rotate) {
|
||||||
logo_rotate = kmalloc(fb_logo.logo->width *
|
logo_rotate = kmalloc(logo->width *
|
||||||
fb_logo.logo->height, GFP_KERNEL);
|
logo->height, GFP_KERNEL);
|
||||||
if (logo_rotate)
|
if (logo_rotate)
|
||||||
fb_rotate_logo(info, logo_rotate, &image, rotate);
|
fb_rotate_logo(info, logo_rotate, &image, rotate);
|
||||||
}
|
}
|
||||||
|
|
||||||
fb_do_show_logo(info, &image, rotate, num_online_cpus());
|
fb_do_show_logo(info, &image, rotate, n);
|
||||||
|
|
||||||
kfree(palette);
|
kfree(palette);
|
||||||
if (saved_pseudo_palette != NULL)
|
if (saved_pseudo_palette != NULL)
|
||||||
info->pseudo_palette = saved_pseudo_palette;
|
info->pseudo_palette = saved_pseudo_palette;
|
||||||
kfree(logo_new);
|
kfree(logo_new);
|
||||||
kfree(logo_rotate);
|
kfree(logo_rotate);
|
||||||
return fb_logo.logo->height;
|
return logo->height;
|
||||||
|
}
|
||||||
|
|
||||||
|
int fb_show_logo(struct fb_info *info, int rotate)
|
||||||
|
{
|
||||||
|
return fb_show_logo_line(info, rotate, fb_logo.logo, 0,
|
||||||
|
num_online_cpus());
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
int fb_prepare_logo(struct fb_info *info, int rotate) { return 0; }
|
int fb_prepare_logo(struct fb_info *info, int rotate) { return 0; }
|
||||||
|
|
Loading…
Reference in a new issue