summaryrefslogtreecommitdiffstats
path: root/common/partition.c
diff options
context:
space:
mode:
authorSascha Hauer <s.hauer@pengutronix.de>2007-07-15 13:50:04 +0200
committerSascha Hauer <s.hauer@pengutronix.de>2007-07-15 13:50:04 +0200
commit665291e693efd1fd2955c6f8bfb89956711b0aef (patch)
tree0c9d871da372b4a640a9760f8946a8a57e3fbbba /common/partition.c
parent9b3761c4459167a335d3a1c30543824afa2d654d (diff)
downloadbarebox-665291e693efd1fd2955c6f8bfb89956711b0aef.tar.gz
barebox-665291e693efd1fd2955c6f8bfb89956711b0aef.tar.xz
implement memmap().
With this function we can get a pointer to directly memory mapped devices like nor flash or RAM. Useful for bootm where we save one memcopy when the image is mappable
Diffstat (limited to 'common/partition.c')
-rw-r--r--common/partition.c17
1 files changed, 17 insertions, 0 deletions
diff --git a/common/partition.c b/common/partition.c
index 5e9297df87..b3b27d5ded 100644
--- a/common/partition.c
+++ b/common/partition.c
@@ -44,6 +44,22 @@ static int part_erase(struct device_d *dev, size_t count, unsigned long offset)
return -1;
}
+static int part_memmap(struct device_d *dev, void **map, int flags)
+{
+ struct partition *part = dev->type_data;
+ int ret;
+
+ if (part->physdev->driver->memmap) {
+ ret = part->physdev->driver->memmap(part->physdev, map, flags);
+ if (ret)
+ return ret;
+ *map = (void *)((unsigned long)*map + part->offset);
+ return 0;
+ }
+
+ return -1;
+}
+
static ssize_t part_read(struct device_d *dev, void *buf, size_t count, unsigned long offset, ulong flags)
{
struct partition *part = dev->type_data;
@@ -82,6 +98,7 @@ struct driver_d part_driver = {
.read = part_read,
.write = part_write,
.erase = part_erase,
+ .memmap = part_memmap,
};
static int partition_init(void)