summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSascha Hauer <s.hauer@pengutronix.de>2008-08-14 10:25:56 +0200
committerSascha Hauer <s.hauer@pengutronix.de>2008-08-14 10:25:56 +0200
commite133ccdda8c351da29404d6f8fe3242b375c9e99 (patch)
tree5d45f606d66e4040f46b7b126423572bc3ae8ffd
parente3dde870301088469300c1ae69c346ed558b6ca8 (diff)
downloadbarebox-e133ccdda8c351da29404d6f8fe3242b375c9e99.tar.gz
barebox-e133ccdda8c351da29404d6f8fe3242b375c9e99.tar.xz
implement memmap for mem driver
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
-rw-r--r--commands/mem.c3
-rw-r--r--fs/fs.c9
-rw-r--r--include/driver.h1
3 files changed, 12 insertions, 1 deletions
diff --git a/commands/mem.c b/commands/mem.c
index b030f2d740..e5aa3453db 100644
--- a/commands/mem.c
+++ b/commands/mem.c
@@ -532,6 +532,7 @@ static struct driver_d mem_drv = {
.close = dev_close_default,
.read = mem_read,
.write = mem_write,
+ .memmap = mem_memmap,
.lseek = dev_lseek_default,
};
@@ -543,6 +544,7 @@ static struct driver_d ram_drv = {
.read = mem_read,
.write = mem_write,
.lseek = dev_lseek_default,
+ .memmap = mem_memmap,
.type = DEVICE_TYPE_DRAM,
};
@@ -552,6 +554,7 @@ static struct driver_d rom_drv = {
.open = dev_open_default,
.close = dev_close_default,
.read = mem_read,
+ .memmap = mem_memmap,
.lseek = dev_lseek_default,
};
diff --git a/fs/fs.c b/fs/fs.c
index d0b008aca1..a2a8ed13f3 100644
--- a/fs/fs.c
+++ b/fs/fs.c
@@ -604,7 +604,7 @@ void *memmap(int fd, int flags)
struct device_d *dev;
struct fs_driver_d *fsdrv;
FILE *f = &files[fd];
- void *ret = NULL;
+ void *ret = (void *)-1;
dev = f->dev;
@@ -962,3 +962,10 @@ ssize_t mem_write(struct device_d *dev, const void *buf, size_t count, ulong off
}
EXPORT_SYMBOL(mem_write);
+int mem_memmap(struct device_d *dev, void **map, int flags)
+{
+ *map = dev->map_base;
+ return 0;
+}
+EXPORT_SYMBOL(mem_memmap);
+
diff --git a/include/driver.h b/include/driver.h
index e2b6d669dc..d4e7c132c9 100644
--- a/include/driver.h
+++ b/include/driver.h
@@ -240,6 +240,7 @@ int dev_memmap(struct device_d *dev, void **map, int flags);
/* These are used by drivers which work with direct memory accesses */
ssize_t mem_read(struct device_d *dev, void *buf, size_t count, ulong offset, ulong flags);
ssize_t mem_write(struct device_d *dev, const void *buf, size_t count, ulong offset, ulong flags);
+int mem_memmap(struct device_d *dev, void **map, int flags);
/* Use this if you have nothing to do in your drivers probe function */
int dummy_probe(struct device_d *);