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 .
*
* This program is free software ; you can redistribute it and / or modify
* it under the terms of the GNU General Public License v2 .0 as published by
* the Free Software Foundation .
*
* This program is distributed in the hope that it will be useful ,
* but WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
* GNU General Public License for more details .
2011-04-29 17:39:25 -07:00
*/
# include <linux/init.h>
# 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
2017-05-02 15:16:29 -07:00
static ssize_t ( * memconsole_read_func ) ( char * , loff_t , size_t ) ;
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 )
{
2017-05-02 15:16:29 -07:00
if ( WARN_ON_ONCE ( ! memconsole_read_func ) )
return - EIO ;
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
{
2017-05-02 15:16:29 -07:00
memconsole_read_func = 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 " ) ;