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 | static int __init fb_logo_late_init(void) |
33 | { |
34 | logos_freed = true; |
35 | 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 | const struct linux_logo * __ref fb_find_logo(int depth) |
45 | { |
46 | const struct linux_logo *logo = NULL; |
47 | |
48 | 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 | 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 | return logo; |
105 | } |
106 | EXPORT_SYMBOL_GPL(fb_find_logo); |
107 | |