Branch data Line data Source code
1 : : /* 2 : : * linux/drivers/video/fb_cmdline.c 3 : : * 4 : : * Copyright (C) 2014 Intel Corp 5 : : * Copyright (C) 1994 Martin Schaller 6 : : * 7 : : * 2001 - Documented with DocBook 8 : : * - Brad Douglas <brad@neruo.com> 9 : : * 10 : : * This file is subject to the terms and conditions of the GNU General Public 11 : : * License. See the file COPYING in the main directory of this archive 12 : : * for more details. 13 : : * 14 : : * Authors: 15 : : * Vetter <danie.vetter@ffwll.ch> 16 : : */ 17 : : #include <linux/init.h> 18 : : #include <linux/fb.h> 19 : : 20 : : static char *video_options[FB_MAX] __read_mostly; 21 : : static int ofonly __read_mostly; 22 : : 23 : : const char *fb_mode_option; 24 : : EXPORT_SYMBOL_GPL(fb_mode_option); 25 : : 26 : : /** 27 : : * fb_get_options - get kernel boot parameters 28 : : * @name: framebuffer name as it would appear in 29 : : * the boot parameter line 30 : : * (video=<name>:<options>) 31 : : * @option: the option will be stored here 32 : : * 33 : : * NOTE: Needed to maintain backwards compatibility 34 : : */ 35 : 0 : int fb_get_options(const char *name, char **option) 36 : : { 37 : 0 : char *opt, *options = NULL; 38 : 0 : int retval = 0; 39 : 0 : int name_len = strlen(name), i; 40 : : 41 [ # # # # : 0 : if (name_len && ofonly && strncmp(name, "offb", 4)) # # ] 42 : 0 : retval = 1; 43 : : 44 [ # # ]: 0 : if (name_len && !retval) { 45 [ # # ]: 0 : for (i = 0; i < FB_MAX; i++) { 46 [ # # ]: 0 : if (video_options[i] == NULL) 47 : 0 : continue; 48 [ # # ]: 0 : if (!video_options[i][0]) 49 : 0 : continue; 50 : 0 : opt = video_options[i]; 51 [ # # ]: 0 : if (!strncmp(name, opt, name_len) && 52 [ # # ]: 0 : opt[name_len] == ':') 53 : 0 : options = opt + name_len + 1; 54 : : } 55 : : } 56 : : /* No match, pass global option */ 57 [ # # # # ]: 0 : if (!options && option && fb_mode_option) 58 : 0 : options = kstrdup(fb_mode_option, GFP_KERNEL); 59 [ # # # # ]: 0 : if (options && !strncmp(options, "off", 3)) 60 : 0 : retval = 1; 61 : : 62 [ # # ]: 0 : if (option) 63 : 0 : *option = options; 64 : : 65 : 0 : return retval; 66 : : } 67 : : EXPORT_SYMBOL(fb_get_options); 68 : : 69 : : /** 70 : : * video_setup - process command line options 71 : : * @options: string of options 72 : : * 73 : : * Process command line options for frame buffer subsystem. 74 : : * 75 : : * NOTE: This function is a __setup and __init function. 76 : : * It only stores the options. Drivers have to call 77 : : * fb_get_options() as necessary. 78 : : */ 79 : 0 : static int __init video_setup(char *options) 80 : : { 81 [ # # # # ]: 0 : if (!options || !*options) 82 : 0 : goto out; 83 : : 84 [ # # ]: 0 : if (!strncmp(options, "ofonly", 6)) { 85 : 0 : ofonly = 1; 86 : 0 : goto out; 87 : : } 88 : : 89 [ # # ]: 0 : if (strchr(options, ':')) { 90 : : /* named */ 91 : : int i; 92 : : 93 [ # # ]: 0 : for (i = 0; i < FB_MAX; i++) { 94 [ # # ]: 0 : if (video_options[i] == NULL) { 95 : 0 : video_options[i] = options; 96 : 0 : break; 97 : : } 98 : : } 99 : : } else { 100 : : /* global */ 101 : 0 : fb_mode_option = options; 102 : : } 103 : : 104 : 0 : out: 105 : 0 : return 1; 106 : : } 107 : : __setup("video=", video_setup);