linux/drivers/acpi/bgrt.c
<<
>>
Prefs
   1/*
   2 * Copyright 2012 Red Hat, Inc <mjg@redhat.com>
   3 * Copyright 2012 Intel Corporation
   4 *
   5 * This program is free software; you can redistribute it and/or modify
   6 * it under the terms of the GNU General Public License version 2 as
   7 * published by the Free Software Foundation.
   8 */
   9
  10#include <linux/kernel.h>
  11#include <linux/module.h>
  12#include <linux/init.h>
  13#include <linux/device.h>
  14#include <linux/sysfs.h>
  15#include <linux/efi-bgrt.h>
  16
  17static struct kobject *bgrt_kobj;
  18
  19static ssize_t show_version(struct device *dev,
  20                            struct device_attribute *attr, char *buf)
  21{
  22        return snprintf(buf, PAGE_SIZE, "%d\n", bgrt_tab->version);
  23}
  24static DEVICE_ATTR(version, S_IRUGO, show_version, NULL);
  25
  26static ssize_t show_status(struct device *dev,
  27                           struct device_attribute *attr, char *buf)
  28{
  29        return snprintf(buf, PAGE_SIZE, "%d\n", bgrt_tab->status);
  30}
  31static DEVICE_ATTR(status, S_IRUGO, show_status, NULL);
  32
  33static ssize_t show_type(struct device *dev,
  34                         struct device_attribute *attr, char *buf)
  35{
  36        return snprintf(buf, PAGE_SIZE, "%d\n", bgrt_tab->image_type);
  37}
  38static DEVICE_ATTR(type, S_IRUGO, show_type, NULL);
  39
  40static ssize_t show_xoffset(struct device *dev,
  41                            struct device_attribute *attr, char *buf)
  42{
  43        return snprintf(buf, PAGE_SIZE, "%d\n", bgrt_tab->image_offset_x);
  44}
  45static DEVICE_ATTR(xoffset, S_IRUGO, show_xoffset, NULL);
  46
  47static ssize_t show_yoffset(struct device *dev,
  48                            struct device_attribute *attr, char *buf)
  49{
  50        return snprintf(buf, PAGE_SIZE, "%d\n", bgrt_tab->image_offset_y);
  51}
  52static DEVICE_ATTR(yoffset, S_IRUGO, show_yoffset, NULL);
  53
  54static ssize_t image_read(struct file *file, struct kobject *kobj,
  55               struct bin_attribute *attr, char *buf, loff_t off, size_t count)
  56{
  57        memcpy(buf, attr->private + off, count);
  58        return count;
  59}
  60
  61static BIN_ATTR_RO(image, 0);   /* size gets filled in later */
  62
  63static struct attribute *bgrt_attributes[] = {
  64        &dev_attr_version.attr,
  65        &dev_attr_status.attr,
  66        &dev_attr_type.attr,
  67        &dev_attr_xoffset.attr,
  68        &dev_attr_yoffset.attr,
  69        NULL,
  70};
  71
  72static struct bin_attribute *bgrt_bin_attributes[] = {
  73        &bin_attr_image,
  74        NULL,
  75};
  76
  77static struct attribute_group bgrt_attribute_group = {
  78        .attrs = bgrt_attributes,
  79        .bin_attrs = bgrt_bin_attributes,
  80};
  81
  82static int __init bgrt_init(void)
  83{
  84        int ret;
  85
  86        if (!bgrt_image)
  87                return -ENODEV;
  88
  89        bin_attr_image.private = bgrt_image;
  90        bin_attr_image.size = bgrt_image_size;
  91
  92        bgrt_kobj = kobject_create_and_add("bgrt", acpi_kobj);
  93        if (!bgrt_kobj)
  94                return -EINVAL;
  95
  96        ret = sysfs_create_group(bgrt_kobj, &bgrt_attribute_group);
  97        if (ret)
  98                goto out_kobject;
  99
 100        return 0;
 101
 102out_kobject:
 103        kobject_put(bgrt_kobj);
 104        return ret;
 105}
 106
 107module_init(bgrt_init);
 108
 109MODULE_AUTHOR("Matthew Garrett, Josh Triplett <josh@joshtriplett.org>");
 110MODULE_DESCRIPTION("BGRT boot graphic support");
 111MODULE_LICENSE("GPL");
 112
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.