diff options
Diffstat (limited to 'drivers/acpi/bgrt.c')
| -rw-r--r-- | drivers/acpi/bgrt.c | 76 | 
1 files changed, 9 insertions, 67 deletions
diff --git a/drivers/acpi/bgrt.c b/drivers/acpi/bgrt.c index 6680df36b96..be603995854 100644 --- a/drivers/acpi/bgrt.c +++ b/drivers/acpi/bgrt.c @@ -1,5 +1,6 @@  /*   * Copyright 2012 Red Hat, Inc <mjg@redhat.com> + * Copyright 2012 Intel Corporation   *   * This program is free software; you can redistribute it and/or modify   * it under the terms of the GNU General Public License version 2 as @@ -11,20 +12,10 @@  #include <linux/init.h>  #include <linux/device.h>  #include <linux/sysfs.h> -#include <linux/io.h> -#include <acpi/acpi.h> -#include <acpi/acpi_bus.h> +#include <linux/efi-bgrt.h> -static struct acpi_table_bgrt *bgrt_tab;  static struct kobject *bgrt_kobj; -struct bmp_header { -	u16 id; -	u32 size; -} __attribute ((packed)); - -static struct bmp_header bmp_header; -  static ssize_t show_version(struct device *dev,  			    struct device_attribute *attr, char *buf)  { @@ -63,18 +54,7 @@ static DEVICE_ATTR(yoffset, S_IRUGO, show_yoffset, NULL);  static ssize_t show_image(struct file *file, struct kobject *kobj,  	       struct bin_attribute *attr, char *buf, loff_t off, size_t count)  { -	int size = attr->size; -	void __iomem *image = attr->private; - -	if (off >= size) { -		count = 0; -	} else { -		if (off + count > size) -			count = size - off; - -		memcpy_fromio(buf, image+off, count); -	} - +	memcpy(buf, attr->private + off, count);  	return count;  } @@ -101,45 +81,18 @@ static struct attribute_group bgrt_attribute_group = {  static int __init bgrt_init(void)  { -	acpi_status status;  	int ret; -	void __iomem *bgrt; -	if (acpi_disabled) -		return -ENODEV; - -	status = acpi_get_table("BGRT", 0, -				(struct acpi_table_header **)&bgrt_tab); - -	if (ACPI_FAILURE(status)) +	if (!bgrt_image)  		return -ENODEV;  	sysfs_bin_attr_init(&image_attr); - -	bgrt = ioremap(bgrt_tab->image_address, sizeof(struct bmp_header)); - -	if (!bgrt) { -		ret = -EINVAL; -		goto out_err; -	} - -	memcpy_fromio(&bmp_header, bgrt, sizeof(bmp_header)); -	image_attr.size = bmp_header.size; -	iounmap(bgrt); - -	image_attr.private = ioremap(bgrt_tab->image_address, image_attr.size); - -	if (!image_attr.private) { -		ret = -EINVAL; -		goto out_err; -	} - +	image_attr.private = bgrt_image; +	image_attr.size = bgrt_image_size;  	bgrt_kobj = kobject_create_and_add("bgrt", acpi_kobj); -	if (!bgrt_kobj) { -		ret = -EINVAL; -		goto out_iounmap; -	} +	if (!bgrt_kobj) +		return -EINVAL;  	ret = sysfs_create_group(bgrt_kobj, &bgrt_attribute_group);  	if (ret) @@ -155,22 +108,11 @@ out_group:  	sysfs_remove_group(bgrt_kobj, &bgrt_attribute_group);  out_kobject:  	kobject_put(bgrt_kobj); -out_iounmap: -	iounmap(image_attr.private); -out_err:  	return ret;  } -static void __exit bgrt_exit(void) -{ -	iounmap(image_attr.private); -	sysfs_remove_group(bgrt_kobj, &bgrt_attribute_group); -	sysfs_remove_bin_file(bgrt_kobj, &image_attr); -} -  module_init(bgrt_init); -module_exit(bgrt_exit); -MODULE_AUTHOR("Matthew Garrett"); +MODULE_AUTHOR("Matthew Garrett, Josh Triplett <josh@joshtriplett.org>");  MODULE_DESCRIPTION("BGRT boot graphic support");  MODULE_LICENSE("GPL");  |