Message ID | 201010012116.o91LGRGn021118@imap1.linux-foundation.org |
---|---|
State | New, archived |
Headers | show |
On Fri, 2010-10-01 at 14:16 -0700, akpm@linux-foundation.org wrote: > From: Sudhakar Rajashekhara <sudhakar.raj@ti.com> > > Implement a memory accessor interface in the MTD layer which enables the > kernel to access flash data. > > This patch adds two new members to the mtd_partition structure, a function > handler which will be called during setup of the partition and an argument > to be passed to this setup function. This patch does not apply to my l2-mtd-2.6.git tree - many confilicts. Sudhakar, you can refresh your patch against my tree and re-send: http://git.infradead.org/users/dedekind/l2-mtd-2.6.git
On Sat, 2010-10-02 at 17:09 +0300, Artem Bityutskiy wrote: > > > Implement a memory accessor interface in the MTD layer which enables > the > > kernel to access flash data. > > > > This patch adds two new members to the mtd_partition structure, a > function > > handler which will be called during setup of the partition and an > argument > > to be passed to this setup function. > > This patch does not apply to my l2-mtd-2.6.git tree Wasn't there going to be a much nicer version of this patch coming anyway?
On Sat, 02 Oct 2010 17:09:52 +0300 Artem Bityutskiy <dedekind1@gmail.com> wrote: > On Fri, 2010-10-01 at 14:16 -0700, akpm@linux-foundation.org wrote: > > From: Sudhakar Rajashekhara <sudhakar.raj@ti.com> > > > > Implement a memory accessor interface in the MTD layer which enables the > > kernel to access flash data. > > > > This patch adds two new members to the mtd_partition structure, a function > > handler which will be called during setup of the partition and an argument > > to be passed to this setup function. > > This patch does not apply to my l2-mtd-2.6.git tree - many confilicts. It applies against linux-next. For heavens sake guys, please fix this.
All, On Sat, Oct 02, 2010 at 20:14:32, David Woodhouse wrote: > On Sat, 2010-10-02 at 17:09 +0300, Artem Bityutskiy wrote: > > > > > Implement a memory accessor interface in the MTD layer which enables > > the > > > kernel to access flash data. > > > > > > This patch adds two new members to the mtd_partition structure, a > > function > > > handler which will be called during setup of the partition and an > > argument > > > to be passed to this setup function. > > > > This patch does not apply to my l2-mtd-2.6.git tree > > Wasn't there going to be a much nicer version of this patch coming > anyway? > This patch can be dropped. Please see the discussion at [1] regarding this. [1] http://lists.infradead.org/pipermail/linux-mtd/2010-August/031483.html Thanks, Sudhakar
diff -puN drivers/mtd/mtdpart.c~mtdpart-memory-accessor-interface-for-mtd-layer drivers/mtd/mtdpart.c --- a/drivers/mtd/mtdpart.c~mtdpart-memory-accessor-interface-for-mtd-layer +++ a/drivers/mtd/mtdpart.c @@ -37,6 +37,7 @@ static LIST_HEAD(mtd_partitions); struct mtd_part { struct mtd_info mtd; struct mtd_info *master; + struct memory_accessor macc; uint64_t offset; struct list_head list; }; @@ -346,6 +347,39 @@ int del_mtd_partitions(struct mtd_info * } EXPORT_SYMBOL(del_mtd_partitions); +/* + * This lets other kernel code access the flash data. For example, it + * might hold a board's Ethernet address, or board-specific calibration + * data generated on the manufacturing floor. + */ +static ssize_t mtd_macc_read(struct memory_accessor *macc, char *buf, + off_t offset, size_t count) +{ + struct mtd_part *part = container_of(macc, struct mtd_part, macc); + ssize_t ret = -EIO; + size_t retlen; + + if (part_read((struct mtd_info *)part, offset, count, + &retlen, buf) == 0) + ret = retlen; + + return ret; +} + +static ssize_t mtd_macc_write(struct memory_accessor *macc, const char *buf, + off_t offset, size_t count) +{ + struct mtd_part *part = container_of(macc, struct mtd_part, macc); + ssize_t ret = -EIO; + size_t retlen; + + if (part_write((struct mtd_info *)part, offset, count, + &retlen, buf) == 0) + ret = retlen; + + return ret; +} + static struct mtd_part *add_one_partition(struct mtd_info *master, const struct mtd_partition *part, int partno, uint64_t cur_offset) @@ -383,6 +417,9 @@ static struct mtd_part *add_one_partitio slave->mtd.read = part_read; slave->mtd.write = part_write; + slave->macc.read = mtd_macc_read; + slave->macc.write = mtd_macc_write; + if (master->panic_write) slave->mtd.panic_write = part_panic_write; @@ -449,6 +486,9 @@ static struct mtd_part *add_one_partitio printk(KERN_NOTICE "0x%012llx-0x%012llx : \"%s\"\n", (unsigned long long)slave->offset, (unsigned long long)(slave->offset + slave->mtd.size), slave->mtd.name); + if (part->setup) + part->setup(&slave->macc, (void *)part->context); + /* let's do some sanity checks */ if (slave->offset >= master->size) { /* let's register it anyway to preserve ordering */ diff -puN include/linux/mtd/partitions.h~mtdpart-memory-accessor-interface-for-mtd-layer include/linux/mtd/partitions.h --- a/include/linux/mtd/partitions.h~mtdpart-memory-accessor-interface-for-mtd-layer +++ a/include/linux/mtd/partitions.h @@ -10,6 +10,7 @@ #define MTD_PARTITIONS_H #include <linux/types.h> +#include <linux/memory.h> /* @@ -40,6 +41,8 @@ struct mtd_partition { uint64_t offset; /* offset within the master MTD space */ uint32_t mask_flags; /* master MTD flags to mask out for this partition */ struct nand_ecclayout *ecclayout; /* out of band layout for this partition (NAND only)*/ + void (*setup)(struct memory_accessor *, void *context); + void *context; }; #define MTDPART_OFS_NXTBLK (-2)