xref: /openbmc/linux/drivers/video/logo/logo.c (revision 58e16d792a6a8c6b750f637a4649967fcac853dc)
1*457c8996SThomas Gleixner // SPDX-License-Identifier: GPL-2.0-only
21da177e4SLinus Torvalds 
31da177e4SLinus Torvalds /*
41da177e4SLinus Torvalds  *  Linux logo to be displayed on boot
51da177e4SLinus Torvalds  *
61da177e4SLinus Torvalds  *  Copyright (C) 1996 Larry Ewing (lewing@isc.tamu.edu)
71da177e4SLinus Torvalds  *  Copyright (C) 1996,1998 Jakub Jelinek (jj@sunsite.mff.cuni.cz)
81da177e4SLinus Torvalds  *  Copyright (C) 2001 Greg Banks <gnb@alphalink.com.au>
91da177e4SLinus Torvalds  *  Copyright (C) 2001 Jan-Benedict Glaw <jbglaw@lug-owl.de>
101da177e4SLinus Torvalds  *  Copyright (C) 2003 Geert Uytterhoeven <geert@linux-m68k.org>
111da177e4SLinus Torvalds  */
121da177e4SLinus Torvalds 
131da177e4SLinus Torvalds #include <linux/linux_logo.h>
141da177e4SLinus Torvalds #include <linux/stddef.h>
151da177e4SLinus Torvalds #include <linux/module.h>
161da177e4SLinus Torvalds 
171da177e4SLinus Torvalds #ifdef CONFIG_M68K
181da177e4SLinus Torvalds #include <asm/setup.h>
191da177e4SLinus Torvalds #endif
201da177e4SLinus Torvalds 
2190ab5ee9SRusty Russell static bool nologo;
22accaa24cSRandy Dunlap module_param(nologo, bool, 0);
23accaa24cSRandy Dunlap MODULE_PARM_DESC(nologo, "Disables startup logo");
24accaa24cSRandy Dunlap 
2592b004d1STomi Valkeinen /*
2692b004d1STomi Valkeinen  * Logos are located in the initdata, and will be freed in kernel_init.
2792b004d1STomi Valkeinen  * Use late_init to mark the logos as freed to prevent any further use.
2892b004d1STomi Valkeinen  */
2992b004d1STomi Valkeinen 
3092b004d1STomi Valkeinen static bool logos_freed;
3192b004d1STomi Valkeinen 
fb_logo_late_init(void)3292b004d1STomi Valkeinen static int __init fb_logo_late_init(void)
3392b004d1STomi Valkeinen {
3492b004d1STomi Valkeinen 	logos_freed = true;
3592b004d1STomi Valkeinen 	return 0;
3692b004d1STomi Valkeinen }
3792b004d1STomi Valkeinen 
383fc4f2f9STakeshi Kihara late_initcall_sync(fb_logo_late_init);
3992b004d1STomi Valkeinen 
40bd721ea7SFabian Frederick /* logo's are marked __initdata. Use __ref to tell
4192cc6b07SSam Ravnborg  * modpost that it is intended that this function uses data
4292cc6b07SSam Ravnborg  * marked __initdata.
4392cc6b07SSam Ravnborg  */
fb_find_logo(int depth)44bd721ea7SFabian Frederick const struct linux_logo * __ref fb_find_logo(int depth)
451da177e4SLinus Torvalds {
461da177e4SLinus Torvalds 	const struct linux_logo *logo = NULL;
471da177e4SLinus Torvalds 
4892b004d1STomi Valkeinen 	if (nologo || logos_freed)
49accaa24cSRandy Dunlap 		return NULL;
50accaa24cSRandy Dunlap 
511da177e4SLinus Torvalds 	if (depth >= 1) {
521da177e4SLinus Torvalds #ifdef CONFIG_LOGO_LINUX_MONO
531da177e4SLinus Torvalds 		/* Generic Linux logo */
541da177e4SLinus Torvalds 		logo = &logo_linux_mono;
551da177e4SLinus Torvalds #endif
561da177e4SLinus Torvalds #ifdef CONFIG_LOGO_SUPERH_MONO
571da177e4SLinus Torvalds 		/* SuperH Linux logo */
581da177e4SLinus Torvalds 		logo = &logo_superh_mono;
591da177e4SLinus Torvalds #endif
601da177e4SLinus Torvalds 	}
611da177e4SLinus Torvalds 
621da177e4SLinus Torvalds 	if (depth >= 4) {
631da177e4SLinus Torvalds #ifdef CONFIG_LOGO_LINUX_VGA16
641da177e4SLinus Torvalds 		/* Generic Linux logo */
651da177e4SLinus Torvalds 		logo = &logo_linux_vga16;
661da177e4SLinus Torvalds #endif
671da177e4SLinus Torvalds #ifdef CONFIG_LOGO_SUPERH_VGA16
681da177e4SLinus Torvalds 		/* SuperH Linux logo */
691da177e4SLinus Torvalds 		logo = &logo_superh_vga16;
701da177e4SLinus Torvalds #endif
711da177e4SLinus Torvalds 	}
721da177e4SLinus Torvalds 
731da177e4SLinus Torvalds 	if (depth >= 8) {
741da177e4SLinus Torvalds #ifdef CONFIG_LOGO_LINUX_CLUT224
751da177e4SLinus Torvalds 		/* Generic Linux logo */
761da177e4SLinus Torvalds 		logo = &logo_linux_clut224;
771da177e4SLinus Torvalds #endif
781da177e4SLinus Torvalds #ifdef CONFIG_LOGO_DEC_CLUT224
791da177e4SLinus Torvalds 		/* DEC Linux logo on MIPS/MIPS64 or ALPHA */
801da177e4SLinus Torvalds 		logo = &logo_dec_clut224;
811da177e4SLinus Torvalds #endif
821da177e4SLinus Torvalds #ifdef CONFIG_LOGO_MAC_CLUT224
831da177e4SLinus Torvalds 		/* Macintosh Linux logo on m68k */
841da177e4SLinus Torvalds 		if (MACH_IS_MAC)
851da177e4SLinus Torvalds 			logo = &logo_mac_clut224;
861da177e4SLinus Torvalds #endif
871da177e4SLinus Torvalds #ifdef CONFIG_LOGO_PARISC_CLUT224
881da177e4SLinus Torvalds 		/* PA-RISC Linux logo */
891da177e4SLinus Torvalds 		logo = &logo_parisc_clut224;
901da177e4SLinus Torvalds #endif
911da177e4SLinus Torvalds #ifdef CONFIG_LOGO_SGI_CLUT224
92c5f9ee3dSH. Peter Anvin 		/* SGI Linux logo on MIPS/MIPS64 */
931da177e4SLinus Torvalds 		logo = &logo_sgi_clut224;
941da177e4SLinus Torvalds #endif
951da177e4SLinus Torvalds #ifdef CONFIG_LOGO_SUN_CLUT224
961da177e4SLinus Torvalds 		/* Sun Linux logo */
971da177e4SLinus Torvalds 		logo = &logo_sun_clut224;
981da177e4SLinus Torvalds #endif
991da177e4SLinus Torvalds #ifdef CONFIG_LOGO_SUPERH_CLUT224
1001da177e4SLinus Torvalds 		/* SuperH Linux logo */
1011da177e4SLinus Torvalds 		logo = &logo_superh_clut224;
1021da177e4SLinus Torvalds #endif
1031da177e4SLinus Torvalds 	}
1041da177e4SLinus Torvalds 	return logo;
1051da177e4SLinus Torvalds }
1061da177e4SLinus Torvalds EXPORT_SYMBOL_GPL(fb_find_logo);
107