2019-05-23 12:14:39 +03:00
// SPDX-License-Identifier: GPL-2.0-or-later
2005-04-17 02:20:36 +04:00
/*
* Simple read - only ( writable only for RAM ) mtdblock driver
2010-08-08 23:58:20 +04:00
*
* Copyright © 2001 - 2010 David Woodhouse < dwmw2 @ infradead . org >
2005-04-17 02:20:36 +04:00
*/
# include <linux/init.h>
# include <linux/slab.h>
# include <linux/mtd/mtd.h>
# include <linux/mtd/blktrans.h>
2011-07-03 23:17:31 +04:00
# include <linux/module.h>
2013-10-14 01:05:23 +04:00
# include <linux/major.h>
2005-04-17 02:20:36 +04:00
static int mtdblock_readsect ( struct mtd_blktrans_dev * dev ,
unsigned long block , char * buf )
{
size_t retlen ;
2011-12-23 19:30:16 +04:00
if ( mtd_read ( dev - > mtd , ( block * 512 ) , 512 , & retlen , buf ) )
2005-04-17 02:20:36 +04:00
return 1 ;
return 0 ;
}
static int mtdblock_writesect ( struct mtd_blktrans_dev * dev ,
unsigned long block , char * buf )
{
size_t retlen ;
2011-12-23 19:35:41 +04:00
if ( mtd_write ( dev - > mtd , ( block * 512 ) , 512 , & retlen , buf ) )
2005-04-17 02:20:36 +04:00
return 1 ;
return 0 ;
}
static void mtdblock_add_mtd ( struct mtd_blktrans_ops * tr , struct mtd_info * mtd )
{
2006-11-15 22:10:29 +03:00
struct mtd_blktrans_dev * dev = kzalloc ( sizeof ( * dev ) , GFP_KERNEL ) ;
2005-04-17 02:20:36 +04:00
if ( ! dev )
return ;
dev - > mtd = mtd ;
dev - > devnum = mtd - > index ;
2006-10-27 12:09:33 +04:00
2005-04-17 02:20:36 +04:00
dev - > size = mtd - > size > > 9 ;
dev - > tr = tr ;
2006-04-13 20:53:55 +04:00
dev - > readonly = 1 ;
2005-04-17 02:20:36 +04:00
2010-02-22 21:39:31 +03:00
if ( add_mtd_blktrans_dev ( dev ) )
kfree ( dev ) ;
2005-04-17 02:20:36 +04:00
}
static void mtdblock_remove_dev ( struct mtd_blktrans_dev * dev )
{
del_mtd_blktrans_dev ( dev ) ;
}
static struct mtd_blktrans_ops mtdblock_tr = {
. name = " mtdblock " ,
2013-10-09 03:59:08 +04:00
. major = MTD_BLOCK_MAJOR ,
2005-04-17 02:20:36 +04:00
. part_bits = 0 ,
2006-10-27 12:09:33 +04:00
. blksize = 512 ,
2005-04-17 02:20:36 +04:00
. readsect = mtdblock_readsect ,
. writesect = mtdblock_writesect ,
. add_mtd = mtdblock_add_mtd ,
. remove_dev = mtdblock_remove_dev ,
. owner = THIS_MODULE ,
} ;
2021-02-13 19:45:57 +03:00
module_mtd_blktrans ( mtdblock_tr ) ;
2005-04-17 02:20:36 +04:00
MODULE_LICENSE ( " GPL " ) ;
MODULE_AUTHOR ( " David Woodhouse <dwmw2@infradead.org> " ) ;
MODULE_DESCRIPTION ( " Simple read-only block device emulation access to MTD devices " ) ;