root/drivers/mtd/mtdblock_ro.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. mtdblock_readsect
  2. mtdblock_writesect
  3. mtdblock_add_mtd
  4. mtdblock_remove_dev
  5. mtdblock_init
  6. mtdblock_exit

   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 
  15 static 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 
  25 static 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 
  35 static 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 (add_mtd_blktrans_dev(dev))
  50                 kfree(dev);
  51 }
  52 
  53 static void mtdblock_remove_dev(struct mtd_blktrans_dev *dev)
  54 {
  55         del_mtd_blktrans_dev(dev);
  56 }
  57 
  58 static struct mtd_blktrans_ops mtdblock_tr = {
  59         .name           = "mtdblock",
  60         .major          = MTD_BLOCK_MAJOR,
  61         .part_bits      = 0,
  62         .blksize        = 512,
  63         .readsect       = mtdblock_readsect,
  64         .writesect      = mtdblock_writesect,
  65         .add_mtd        = mtdblock_add_mtd,
  66         .remove_dev     = mtdblock_remove_dev,
  67         .owner          = THIS_MODULE,
  68 };
  69 
  70 static int __init mtdblock_init(void)
  71 {
  72         return register_mtd_blktrans(&mtdblock_tr);
  73 }
  74 
  75 static void __exit mtdblock_exit(void)
  76 {
  77         deregister_mtd_blktrans(&mtdblock_tr);
  78 }
  79 
  80 module_init(mtdblock_init);
  81 module_exit(mtdblock_exit);
  82 
  83 MODULE_LICENSE("GPL");
  84 MODULE_AUTHOR("David Woodhouse <dwmw2@infradead.org>");
  85 MODULE_DESCRIPTION("Simple read-only block device emulation access to MTD devices");

/* [<][>][^][v][top][bottom][index][help] */