2019-05-29 07:18:01 -07:00
// SPDX-License-Identifier: GPL-2.0-only
2011-04-29 17:39:25 -07:00
/*
* memconsole . c
*
2017-03-28 18:11:26 +02:00
* Architecture - independent parts of the memory based BIOS console .
2011-04-29 17:39:25 -07:00
*
2017-03-28 18:11:26 +02:00
* Copyright 2017 Google Inc .
2011-04-29 17:39:25 -07:00
*/
# include <linux/sysfs.h>
# include <linux/kobject.h>
# include <linux/module.h>
2017-03-28 18:11:26 +02:00
# include "memconsole.h"
2011-04-29 17:39:25 -07:00
static ssize_t memconsole_read ( struct file * filp , struct kobject * kobp ,
struct bin_attribute * bin_attr , char * buf ,
loff_t pos , size_t count )
{
2019-05-10 11:01:50 -07:00
ssize_t ( * memconsole_read_func ) ( char * , loff_t , size_t ) ;
memconsole_read_func = bin_attr - > private ;
2017-05-02 15:16:29 -07:00
if ( WARN_ON_ONCE ( ! memconsole_read_func ) )
return - EIO ;
2019-05-10 11:01:50 -07:00
2017-05-02 15:16:29 -07:00
return memconsole_read_func ( buf , pos , count ) ;
2011-04-29 17:39:25 -07:00
}
static struct bin_attribute memconsole_bin_attr = {
. attr = { . name = " log " , . mode = 0444 } ,
. read = memconsole_read ,
} ;
2017-05-02 15:16:29 -07:00
void memconsole_setup ( ssize_t ( * read_func ) ( char * , loff_t , size_t ) )
2011-04-29 17:39:25 -07:00
{
2019-05-10 11:01:50 -07:00
memconsole_bin_attr . private = read_func ;
2011-04-29 17:39:25 -07:00
}
2017-03-28 18:11:26 +02:00
EXPORT_SYMBOL ( memconsole_setup ) ;
2011-04-29 17:39:25 -07:00
2017-03-28 18:11:26 +02:00
int memconsole_sysfs_init ( void )
2011-04-29 17:39:25 -07:00
{
2014-01-28 05:06:22 -08:00
return sysfs_create_bin_file ( firmware_kobj , & memconsole_bin_attr ) ;
2011-04-29 17:39:25 -07:00
}
2017-03-28 18:11:26 +02:00
EXPORT_SYMBOL ( memconsole_sysfs_init ) ;
2011-04-29 17:39:25 -07:00
2017-03-28 18:11:26 +02:00
void memconsole_exit ( void )
2011-04-29 17:39:25 -07:00
{
sysfs_remove_bin_file ( firmware_kobj , & memconsole_bin_attr ) ;
}
2017-03-28 18:11:26 +02:00
EXPORT_SYMBOL ( memconsole_exit ) ;
2011-04-29 17:39:25 -07:00
MODULE_AUTHOR ( " Google, Inc. " ) ;
MODULE_LICENSE ( " GPL " ) ;