cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

mtdblock_ro.c (1813B)


      1// SPDX-License-Identifier: GPL-2.0-or-later
      2/*
      3 * Simple read-only (writable only for RAM) mtdblock driver
      4 *
      5 * Copyright © 2001-2010 David Woodhouse <dwmw2@infradead.org>
      6 */
      7
      8#include <linux/init.h>
      9#include <linux/slab.h>
     10#include <linux/mtd/mtd.h>
     11#include <linux/mtd/blktrans.h>
     12#include <linux/module.h>
     13#include <linux/major.h>
     14
     15static int mtdblock_readsect(struct mtd_blktrans_dev *dev,
     16			      unsigned long block, char *buf)
     17{
     18	size_t retlen;
     19
     20	if (mtd_read(dev->mtd, (block * 512), 512, &retlen, buf))
     21		return 1;
     22	return 0;
     23}
     24
     25static int mtdblock_writesect(struct mtd_blktrans_dev *dev,
     26			      unsigned long block, char *buf)
     27{
     28	size_t retlen;
     29
     30	if (mtd_write(dev->mtd, (block * 512), 512, &retlen, buf))
     31		return 1;
     32	return 0;
     33}
     34
     35static void mtdblock_add_mtd(struct mtd_blktrans_ops *tr, struct mtd_info *mtd)
     36{
     37	struct mtd_blktrans_dev *dev = kzalloc(sizeof(*dev), GFP_KERNEL);
     38
     39	if (!dev)
     40		return;
     41
     42	dev->mtd = mtd;
     43	dev->devnum = mtd->index;
     44
     45	dev->size = mtd->size >> 9;
     46	dev->tr = tr;
     47	dev->readonly = 1;
     48
     49	if (mtd_type_is_nand(mtd))
     50		pr_warn("%s: MTD device '%s' is NAND, please consider using UBI block devices instead.\n",
     51			tr->name, mtd->name);
     52
     53	if (add_mtd_blktrans_dev(dev))
     54		kfree(dev);
     55}
     56
     57static void mtdblock_remove_dev(struct mtd_blktrans_dev *dev)
     58{
     59	del_mtd_blktrans_dev(dev);
     60}
     61
     62static struct mtd_blktrans_ops mtdblock_tr = {
     63	.name		= "mtdblock",
     64	.major		= MTD_BLOCK_MAJOR,
     65	.part_bits	= 0,
     66	.blksize 	= 512,
     67	.readsect	= mtdblock_readsect,
     68	.writesect	= mtdblock_writesect,
     69	.add_mtd	= mtdblock_add_mtd,
     70	.remove_dev	= mtdblock_remove_dev,
     71	.owner		= THIS_MODULE,
     72};
     73
     74module_mtd_blktrans(mtdblock_tr);
     75
     76MODULE_LICENSE("GPL");
     77MODULE_AUTHOR("David Woodhouse <dwmw2@infradead.org>");
     78MODULE_DESCRIPTION("Simple read-only block device emulation access to MTD devices");