diff options
author | Sascha Hauer <s.hauer@pengutronix.de> | 2007-07-15 13:50:04 +0200 |
---|---|---|
committer | Sascha Hauer <s.hauer@pengutronix.de> | 2007-07-15 13:50:04 +0200 |
commit | 665291e693efd1fd2955c6f8bfb89956711b0aef (patch) | |
tree | 0c9d871da372b4a640a9760f8946a8a57e3fbbba /common/partition.c | |
parent | 9b3761c4459167a335d3a1c30543824afa2d654d (diff) | |
download | barebox-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.c | 17 |
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) |