ar71xx: routerboot: export extended wlan data via sysfs

Export the data to make it accessible from user-space.

Signed-off-by: Gabor Juhos <juhosg@openwrt.org>

SVN-Revision: 45298
v19.07.3_mercusys_ac12_duma
Gabor Juhos 9 years ago
parent 76b5a9aa7d
commit 96b006eb32

@ -11,6 +11,7 @@
#define pr_fmt(fmt) "rb: " fmt
#include <linux/kernel.h>
#include <linux/kobject.h>
#include <linux/slab.h>
#include <linux/errno.h>
#include <linux/routerboot.h>
@ -298,3 +299,60 @@ rb_init_info(void *data, unsigned int size)
return &rb_info;
}
static char *rb_ext_wlan_data;
static ssize_t
rb_ext_wlan_data_read(struct file *filp, struct kobject *kobj,
struct bin_attribute *attr, char *buf,
loff_t off, size_t count)
{
if (off + count > attr->size)
return -EFBIG;
memcpy(buf, &rb_ext_wlan_data[off], count);
return count;
}
static const struct bin_attribute rb_ext_wlan_data_attr = {
.attr = {
.name = "ext_wlan_data",
.mode = S_IRUSR | S_IWUSR,
},
.read = rb_ext_wlan_data_read,
.size = RB_ART_SIZE,
};
static int __init rb_sysfs_init(void)
{
struct kobject *rb_kobj;
int ret;
rb_ext_wlan_data = rb_get_ext_wlan_data(1);
if (rb_ext_wlan_data == NULL)
return -ENOENT;
rb_kobj = kobject_create_and_add("routerboot", firmware_kobj);
if (rb_kobj == NULL) {
ret = -ENOMEM;
pr_err("unable to create sysfs entry\n");
goto err_free_wlan_data;
}
ret = sysfs_create_bin_file(rb_kobj, &rb_ext_wlan_data_attr);
if (ret) {
pr_err("unable to create sysfs file, %d\n", ret);
goto err_put_kobj;
}
return 0;
err_put_kobj:
kobject_put(rb_kobj);
err_free_wlan_data:
kfree(rb_ext_wlan_data);
return ret;
}
late_initcall(rb_sysfs_init);

Loading…
Cancel
Save