firmware: google: memconsole: Make memconsole interface more flexible
This patch redesigns the interface between the generic memconsole driver and its implementations to become more flexible than a flat memory buffer with unchanging bounds. This allows memconsoles like coreboot's to include lines that were added by runtime firmware after the driver was initialized. Since the console log size is thus no longer static, this means that the /sys/firmware/log file has to become unseekable. Signed-off-by: Julius Werner <jwerner@chromium.org> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:

committed by
Greg Kroah-Hartman

parent
acec09e67d
commit
7918cfc46c
@@ -22,15 +22,15 @@
|
||||
|
||||
#include "memconsole.h"
|
||||
|
||||
static char *memconsole_baseaddr;
|
||||
static size_t memconsole_length;
|
||||
static ssize_t (*memconsole_read_func)(char *, loff_t, size_t);
|
||||
|
||||
static ssize_t memconsole_read(struct file *filp, struct kobject *kobp,
|
||||
struct bin_attribute *bin_attr, char *buf,
|
||||
loff_t pos, size_t count)
|
||||
{
|
||||
return memory_read_from_buffer(buf, count, &pos, memconsole_baseaddr,
|
||||
memconsole_length);
|
||||
if (WARN_ON_ONCE(!memconsole_read_func))
|
||||
return -EIO;
|
||||
return memconsole_read_func(buf, pos, count);
|
||||
}
|
||||
|
||||
static struct bin_attribute memconsole_bin_attr = {
|
||||
@@ -38,16 +38,14 @@ static struct bin_attribute memconsole_bin_attr = {
|
||||
.read = memconsole_read,
|
||||
};
|
||||
|
||||
void memconsole_setup(void *baseaddr, size_t length)
|
||||
void memconsole_setup(ssize_t (*read_func)(char *, loff_t, size_t))
|
||||
{
|
||||
memconsole_baseaddr = baseaddr;
|
||||
memconsole_length = length;
|
||||
memconsole_read_func = read_func;
|
||||
}
|
||||
EXPORT_SYMBOL(memconsole_setup);
|
||||
|
||||
int memconsole_sysfs_init(void)
|
||||
{
|
||||
memconsole_bin_attr.size = memconsole_length;
|
||||
return sysfs_create_bin_file(firmware_kobj, &memconsole_bin_attr);
|
||||
}
|
||||
EXPORT_SYMBOL(memconsole_sysfs_init);
|
||||
|
Reference in New Issue
Block a user