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