#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/slab.h>
#include <linux/sched.h>
#include <linux/types.h>
#include <linux/backing-dev.h>
#include <linux/mtd/mtd.h>
#include <linux/mtd/concat.h>
#include <asm/div64.h>
struct mtd_concat { … };
#define SIZEOF_STRUCT_MTD_CONCAT(num_subdev) …
#define CONCAT(x) …
static int
concat_read(struct mtd_info *mtd, loff_t from, size_t len,
size_t * retlen, u_char * buf)
{ … }
static int
concat_panic_write(struct mtd_info *mtd, loff_t to, size_t len,
size_t * retlen, const u_char * buf)
{ … }
static int
concat_write(struct mtd_info *mtd, loff_t to, size_t len,
size_t * retlen, const u_char * buf)
{ … }
static int
concat_writev(struct mtd_info *mtd, const struct kvec *vecs,
unsigned long count, loff_t to, size_t * retlen)
{ … }
static int
concat_read_oob(struct mtd_info *mtd, loff_t from, struct mtd_oob_ops *ops)
{ … }
static int
concat_write_oob(struct mtd_info *mtd, loff_t to, struct mtd_oob_ops *ops)
{ … }
static int concat_erase(struct mtd_info *mtd, struct erase_info *instr)
{ … }
static int concat_xxlock(struct mtd_info *mtd, loff_t ofs, uint64_t len,
bool is_lock)
{ … }
static int concat_lock(struct mtd_info *mtd, loff_t ofs, uint64_t len)
{ … }
static int concat_unlock(struct mtd_info *mtd, loff_t ofs, uint64_t len)
{ … }
static int concat_is_locked(struct mtd_info *mtd, loff_t ofs, uint64_t len)
{ … }
static void concat_sync(struct mtd_info *mtd)
{ … }
static int concat_suspend(struct mtd_info *mtd)
{ … }
static void concat_resume(struct mtd_info *mtd)
{ … }
static int concat_block_isbad(struct mtd_info *mtd, loff_t ofs)
{ … }
static int concat_block_markbad(struct mtd_info *mtd, loff_t ofs)
{ … }
struct mtd_info *mtd_concat_create(struct mtd_info *subdev[],
int num_devs,
const char *name)
{ … }
void mtd_concat_destroy(struct mtd_info *mtd)
{ … }
EXPORT_SYMBOL(…);
EXPORT_SYMBOL(…);
MODULE_LICENSE(…) …;
MODULE_AUTHOR(…) …;
MODULE_DESCRIPTION(…) …;