linux/drivers/video/fbdev/core/fb_cmdline.c
<<
>>
Prefs
   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
  20static char *video_options[FB_MAX] __read_mostly;
  21static int ofonly __read_mostly;
  22
  23const char *fb_mode_option;
  24EXPORT_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 */
  35int fb_get_options(const char *name, char **option)
  36{
  37        char *opt, *options = NULL;
  38        int retval = 0;
  39        int name_len = strlen(name), i;
  40
  41        if (name_len && ofonly && strncmp(name, "offb", 4))
  42                retval = 1;
  43
  44        if (name_len && !retval) {
  45                for (i = 0; i < FB_MAX; i++) {
  46                        if (video_options[i] == NULL)
  47                                continue;
  48                        if (!video_options[i][0])
  49                                continue;
  50                        opt = video_options[i];
  51                        if (!strncmp(name, opt, name_len) &&
  52                            opt[name_len] == ':')
  53                                options = opt + name_len + 1;
  54                }
  55        }
  56        /* No match, pass global option */
  57        if (!options && option && fb_mode_option)
  58                options = kstrdup(fb_mode_option, GFP_KERNEL);
  59        if (options && !strncmp(options, "off", 3))
  60                retval = 1;
  61
  62        if (option)
  63                *option = options;
  64
  65        return retval;
  66}
  67EXPORT_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 */
  79static int __init video_setup(char *options)
  80{
  81        if (!options || !*options)
  82                goto out;
  83
  84        if (!strncmp(options, "ofonly", 6)) {
  85                ofonly = 1;
  86                goto out;
  87        }
  88
  89        if (strchr(options, ':')) {
  90                /* named */
  91                int i;
  92
  93                for (i = 0; i < FB_MAX; i++) {
  94                        if (video_options[i] == NULL) {
  95                                video_options[i] = options;
  96                                break;
  97                        }
  98                }
  99        } else {
 100                /* global */
 101                fb_mode_option = options;
 102        }
 103
 104out:
 105        return 1;
 106}
 107__setup("video=", video_setup);
 108