-Index: linux-2.6.23.17/drivers/mtd/Kconfig
-===================================================================
---- linux-2.6.23.17.orig/drivers/mtd/Kconfig
-+++ linux-2.6.23.17/drivers/mtd/Kconfig
-@@ -47,6 +47,16 @@ config MTD_PARTITIONS
+--- a/drivers/mtd/Kconfig
++++ b/drivers/mtd/Kconfig
+@@ -47,6 +47,16 @@
devices. Partitioning on NFTL 'devices' is a different - that's the
'normal' form of partitioning used on a block device.
config MTD_REDBOOT_PARTS
tristate "RedBoot partition table parsing"
depends on MTD_PARTITIONS
-Index: linux-2.6.23.17/drivers/mtd/mtdpart.c
-===================================================================
---- linux-2.6.23.17.orig/drivers/mtd/mtdpart.c
-+++ linux-2.6.23.17/drivers/mtd/mtdpart.c
+--- a/drivers/mtd/mtdpart.c
++++ b/drivers/mtd/mtdpart.c
@@ -20,6 +20,8 @@
#include <linux/mtd/mtd.h>
#include <linux/mtd/partitions.h>
/* Our partition linked list */
static LIST_HEAD(mtd_partitions);
-@@ -39,7 +41,7 @@ struct mtd_part {
+@@ -39,7 +41,7 @@
* the pointer to that structure with this macro.
*/
#define PART(x) ((struct mtd_part *)(x))
/*
* MTD methods which simply translate the effective address and pass through
-@@ -308,6 +310,312 @@ int del_mtd_partitions(struct mtd_info *
+@@ -308,6 +310,312 @@
return 0;
}
/*
* This function, given a master MTD object and a partition table, creates
* and registers slave MTD objects which are bound to the master according to
-@@ -320,168 +628,31 @@ int add_mtd_partitions(struct mtd_info *
+@@ -320,168 +628,31 @@
int nbparts)
{
struct mtd_part *slave;
}
}
-@@ -557,6 +728,32 @@ int parse_mtd_partitions(struct mtd_info
+@@ -557,6 +728,32 @@
return ret;
}
+EXPORT_SYMBOL_GPL(refresh_mtd_partitions);
EXPORT_SYMBOL_GPL(register_mtd_parser);
EXPORT_SYMBOL_GPL(deregister_mtd_parser);
-Index: linux-2.6.23.17/drivers/mtd/devices/block2mtd.c
-===================================================================
---- linux-2.6.23.17.orig/drivers/mtd/devices/block2mtd.c
-+++ linux-2.6.23.17/drivers/mtd/devices/block2mtd.c
-@@ -34,6 +34,8 @@ struct block2mtd_dev {
+--- a/drivers/mtd/devices/block2mtd.c
++++ b/drivers/mtd/devices/block2mtd.c
+@@ -34,6 +34,8 @@
struct block_device *blkdev;
struct mtd_info mtd;
struct mutex write_mutex;
};
-@@ -86,6 +88,12 @@ static int block2mtd_erase(struct mtd_in
+@@ -86,6 +88,12 @@
size_t len = instr->len;
int err;
instr->state = MTD_ERASING;
mutex_lock(&dev->write_mutex);
err = _block2mtd_erase(dev, from, len);
-@@ -98,6 +106,10 @@ static int block2mtd_erase(struct mtd_in
+@@ -98,6 +106,10 @@
instr->state = MTD_ERASE_DONE;
mtd_erase_callback(instr);
return err;
}
-@@ -109,10 +121,14 @@ static int block2mtd_read(struct mtd_inf
+@@ -109,10 +121,14 @@
struct page *page;
int index = from >> PAGE_SHIFT;
int offset = from & (PAGE_SIZE-1);
if (from + len > mtd->size)
len = mtd->size - from;
-@@ -127,10 +143,14 @@ static int block2mtd_read(struct mtd_inf
+@@ -127,10 +143,14 @@
len = len - cpylen;
page = page_read(dev->blkdev->bd_inode->i_mapping, index);
memcpy(buf, page_address(page) + offset, cpylen);
page_cache_release(page);
-@@ -141,7 +161,10 @@ static int block2mtd_read(struct mtd_inf
+@@ -141,7 +161,10 @@
offset = 0;
index++;
}
}
-@@ -193,12 +216,22 @@ static int block2mtd_write(struct mtd_in
+@@ -193,12 +216,22 @@
size_t *retlen, const u_char *buf)
{
struct block2mtd_dev *dev = mtd->priv;
if (to + len > mtd->size)
len = mtd->size - to;
-@@ -207,6 +240,9 @@ static int block2mtd_write(struct mtd_in
+@@ -207,6 +240,9 @@
mutex_unlock(&dev->write_mutex);
if (err > 0)
err = 0;
return err;
}
-@@ -215,51 +251,29 @@ static int block2mtd_write(struct mtd_in
+@@ -215,51 +251,29 @@
static void block2mtd_sync(struct mtd_info *mtd)
{
struct block2mtd_dev *dev = mtd->priv;
if (devt) {
bdev = open_by_devnum(devt, FMODE_WRITE | FMODE_READ);
}
-@@ -267,17 +281,96 @@ static struct block2mtd_dev *add_device(
+@@ -267,17 +281,96 @@
#endif
if (IS_ERR(bdev)) {
/* Setup the MTD structure */
/* make the name contain the block device in */
-@@ -304,6 +397,7 @@ static struct block2mtd_dev *add_device(
+@@ -304,6 +397,7 @@
dev->mtd.read = block2mtd_read;
dev->mtd.priv = dev;
dev->mtd.owner = THIS_MODULE;
part = kzalloc(sizeof(struct mtd_partition), GFP_KERNEL);
part->name = dev->mtd.name;
-Index: linux-2.6.23.17/drivers/mtd/mtdchar.c
-===================================================================
---- linux-2.6.23.17.orig/drivers/mtd/mtdchar.c
-+++ linux-2.6.23.17/drivers/mtd/mtdchar.c
+--- a/drivers/mtd/mtdchar.c
++++ b/drivers/mtd/mtdchar.c
@@ -17,6 +17,7 @@
#include <linux/mtd/mtd.h>
#include <asm/uaccess.h>
-@@ -753,6 +754,13 @@ static int mtd_ioctl(struct inode *inode
+@@ -753,6 +754,13 @@
file->f_pos = 0;
break;
}
default:
ret = -ENOTTY;
-Index: linux-2.6.23.17/include/linux/mtd/mtd.h
-===================================================================
---- linux-2.6.23.17.orig/include/linux/mtd/mtd.h
-+++ linux-2.6.23.17/include/linux/mtd/mtd.h
-@@ -98,6 +98,7 @@ struct mtd_oob_ops {
+--- a/include/linux/mtd/mtd.h
++++ b/include/linux/mtd/mtd.h
+@@ -98,6 +98,7 @@
uint8_t *oobbuf;
};
struct mtd_info {
u_char type;
u_int32_t flags;
-@@ -195,6 +196,9 @@ struct mtd_info {
+@@ -195,6 +196,9 @@
struct module *owner;
int usecount;
/* If the driver is something smart, like UBI, it may need to maintain
* its own reference counting. The below functions are only for driver.
* The driver may register its callbacks. These callbacks are not
-Index: linux-2.6.23.17/include/linux/mtd/partitions.h
-===================================================================
---- linux-2.6.23.17.orig/include/linux/mtd/partitions.h
-+++ linux-2.6.23.17/include/linux/mtd/partitions.h
+--- a/include/linux/mtd/partitions.h
++++ b/include/linux/mtd/partitions.h
@@ -36,6 +36,7 @@
* erasesize aligned (e.g. use MTDPART_OFS_NEXTBLK).
*/
struct mtd_partition {
char *name; /* identifier string */
u_int32_t size; /* partition size */
-@@ -43,6 +44,7 @@ struct mtd_partition {
+@@ -43,6 +44,7 @@
u_int32_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)*/
struct mtd_info **mtdp; /* pointer to store the MTD object */
};
#define MTDPART_OFS_NXTBLK (-2)
-@@ -52,6 +54,7 @@ struct mtd_partition {
+@@ -52,6 +54,7 @@
int add_mtd_partitions(struct mtd_info *, const struct mtd_partition *, int);
int del_mtd_partitions(struct mtd_info *);
/*
* Functions dealing with the various ways of partitioning the space
-Index: linux-2.6.23.17/include/mtd/mtd-abi.h
-===================================================================
---- linux-2.6.23.17.orig/include/mtd/mtd-abi.h
-+++ linux-2.6.23.17/include/mtd/mtd-abi.h
-@@ -95,6 +95,7 @@ struct otp_info {
+--- a/include/mtd/mtd-abi.h
++++ b/include/mtd/mtd-abi.h
+@@ -95,6 +95,7 @@
#define ECCGETLAYOUT _IOR('M', 17, struct nand_ecclayout)
#define ECCGETSTATS _IOR('M', 18, struct mtd_ecc_stats)
#define MTDFILEMODE _IO('M', 19)