^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1) // SPDX-License-Identifier: GPL-2.0-only
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4) * Linux logo to be displayed on boot
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6) * Copyright (C) 1996 Larry Ewing (lewing@isc.tamu.edu)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7) * Copyright (C) 1996,1998 Jakub Jelinek (jj@sunsite.mff.cuni.cz)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 8) * Copyright (C) 2001 Greg Banks <gnb@alphalink.com.au>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 9) * Copyright (C) 2001 Jan-Benedict Glaw <jbglaw@lug-owl.de>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10) * Copyright (C) 2003 Geert Uytterhoeven <geert@linux-m68k.org>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13) #include <linux/linux_logo.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14) #include <linux/stddef.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15) #include <linux/module.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17) #ifdef CONFIG_M68K
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18) #include <asm/setup.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21) static bool nologo;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) module_param(nologo, bool, 0);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23) MODULE_PARM_DESC(nologo, "Disables startup logo");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26) * Logos are located in the initdata, and will be freed in kernel_init.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27) * Use late_init to mark the logos as freed to prevent any further use.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30) static bool logos_freed;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32) static int __init fb_logo_late_init(void)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34) logos_freed = true;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35) return 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38) late_initcall_sync(fb_logo_late_init);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40) /* logo's are marked __initdata. Use __ref to tell
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41) * modpost that it is intended that this function uses data
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42) * marked __initdata.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44) const struct linux_logo * __ref fb_find_logo(int depth)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46) const struct linux_logo *logo = NULL;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 47)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 48) if (nologo || logos_freed)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 49) return NULL;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 50)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 51) if (depth >= 1) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 52) #ifdef CONFIG_LOGO_LINUX_MONO
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 53) /* Generic Linux logo */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 54) logo = &logo_linux_mono;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 55) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 56) #ifdef CONFIG_LOGO_SUPERH_MONO
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 57) /* SuperH Linux logo */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 58) logo = &logo_superh_mono;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 59) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 60) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 61)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 62) if (depth >= 4) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 63) #ifdef CONFIG_LOGO_LINUX_VGA16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 64) /* Generic Linux logo */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 65) logo = &logo_linux_vga16;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 66) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 67) #ifdef CONFIG_LOGO_SUPERH_VGA16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 68) /* SuperH Linux logo */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 69) logo = &logo_superh_vga16;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 70) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 71) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 72)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 73) if (depth >= 8) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 74) #ifdef CONFIG_LOGO_LINUX_CLUT224
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 75) /* Generic Linux logo */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 76) logo = &logo_linux_clut224;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 77) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 78) #ifdef CONFIG_LOGO_DEC_CLUT224
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 79) /* DEC Linux logo on MIPS/MIPS64 or ALPHA */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 80) logo = &logo_dec_clut224;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 81) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 82) #ifdef CONFIG_LOGO_MAC_CLUT224
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 83) /* Macintosh Linux logo on m68k */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 84) if (MACH_IS_MAC)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 85) logo = &logo_mac_clut224;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 86) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 87) #ifdef CONFIG_LOGO_PARISC_CLUT224
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 88) /* PA-RISC Linux logo */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 89) logo = &logo_parisc_clut224;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 90) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 91) #ifdef CONFIG_LOGO_SGI_CLUT224
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 92) /* SGI Linux logo on MIPS/MIPS64 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 93) logo = &logo_sgi_clut224;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 94) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 95) #ifdef CONFIG_LOGO_SUN_CLUT224
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 96) /* Sun Linux logo */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 97) logo = &logo_sun_clut224;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 98) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 99) #ifdef CONFIG_LOGO_SUPERH_CLUT224
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100) /* SuperH Linux logo */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101) logo = &logo_superh_clut224;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 104) return logo;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 105) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 106) EXPORT_SYMBOL_GPL(fb_find_logo);