Linux Audio

Check our new training course

Yocto / OpenEmbedded training

Feb 10-13, 2025
Register
Loading...
Note: File does not exist in v3.1.
  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");