#define pr_fmt(fmt) …
#include <asm/div64.h>
#include <linux/init.h>
#include <linux/module.h>
#include <linux/moduleparam.h>
#include <linux/err.h>
#include <linux/mtd/mtd.h>
#include <linux/slab.h>
#include <linux/sched.h>
#include <linux/random.h>
#include "mtd_test.h"
static int dev = …;
static int bitflip_limit;
module_param(dev, int, S_IRUGO);
MODULE_PARM_DESC(…) …;
module_param(bitflip_limit, int, S_IRUGO);
MODULE_PARM_DESC(…) …;
static struct mtd_info *mtd;
static unsigned char *readbuf;
static unsigned char *writebuf;
static unsigned char *bbt;
static int ebcnt;
static int pgcnt;
static int errcnt;
static int use_offset;
static int use_len;
static int use_len_max;
static int vary_offset;
static struct rnd_state rnd_state;
static void do_vary_offset(void)
{ … }
static int write_eraseblock(int ebnum)
{ … }
static int write_whole_device(void)
{ … }
static size_t memcmpshowoffset(loff_t addr, loff_t offset, const void *cs,
const void *ct, size_t count)
{ … }
#define memcmpshow(addr, cs, ct, count) …
static size_t memffshow(loff_t addr, loff_t offset, const void *cs,
size_t count)
{ … }
static int verify_eraseblock(int ebnum)
{ … }
static int verify_eraseblock_in_one_go(int ebnum)
{ … }
static int verify_all_eraseblocks(void)
{ … }
static int __init mtd_oobtest_init(void)
{ … }
module_init(mtd_oobtest_init);
static void __exit mtd_oobtest_exit(void)
{ … }
module_exit(mtd_oobtest_exit);
MODULE_DESCRIPTION(…) …;
MODULE_AUTHOR(…) …;
MODULE_LICENSE(…) …;