diff options
author | Andrey Smirnov <andrew.smirnov@gmail.com> | 2019-01-28 22:55:33 -0800 |
---|---|---|
committer | Sascha Hauer <s.hauer@pengutronix.de> | 2019-01-29 09:27:03 +0100 |
commit | 6f37d9efd9183ff06e65438e349ac2341d459290 (patch) | |
tree | 90ae6874b7a4b11c4665432b2efc1016464c600f /drivers/misc | |
parent | 184d75a9dee979bf044649bff2854bc66172c9ff (diff) | |
download | barebox-6f37d9efd9183ff06e65438e349ac2341d459290.tar.gz barebox-6f37d9efd9183ff06e65438e349ac2341d459290.tar.xz |
commands: Move /dev/mem driver to drivers/misc
With all other code gone from commands/mem.c, move it into
driver/misc, where it fits better. While at it, expose it directly via
a Kconfig options instead of relying on CONFIG_COMPILE_MEMORY
Signed-off-by: Andrey Smirnov <andrew.smirnov@gmail.com>
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Diffstat (limited to 'drivers/misc')
-rw-r--r-- | drivers/misc/Kconfig | 3 | ||||
-rw-r--r-- | drivers/misc/Makefile | 1 | ||||
-rw-r--r-- | drivers/misc/mem.c | 44 |
3 files changed, 48 insertions, 0 deletions
diff --git a/drivers/misc/Kconfig b/drivers/misc/Kconfig index 6640a70792..4c8a769c4c 100644 --- a/drivers/misc/Kconfig +++ b/drivers/misc/Kconfig @@ -20,4 +20,7 @@ config STATE_DRV depends on OFDEVICE depends on STATE +config DEV_MEM + bool "Generic memory I/O device (/dev/mem)" + endmenu diff --git a/drivers/misc/Makefile b/drivers/misc/Makefile index 487e4b8ba2..d4e616d51a 100644 --- a/drivers/misc/Makefile +++ b/drivers/misc/Makefile @@ -5,3 +5,4 @@ obj-$(CONFIG_JTAG) += jtag.o obj-$(CONFIG_SRAM) += sram.o obj-$(CONFIG_STATE_DRV) += state.o +obj-$(CONFIG_DEV_MEM) += mem.o diff --git a/drivers/misc/mem.c b/drivers/misc/mem.c new file mode 100644 index 0000000000..60981a3e98 --- /dev/null +++ b/drivers/misc/mem.c @@ -0,0 +1,44 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Copyright (c) 2011 Sascha Hauer <s.hauer@pengutronix.de>, Pengutronix + */ + +#include <common.h> +#include <driver.h> +#include <init.h> + +static struct cdev_operations memops = { + .read = mem_read, + .write = mem_write, + .memmap = generic_memmap_rw, +}; + +static int mem_probe(struct device_d *dev) +{ + struct cdev *cdev; + + cdev = xzalloc(sizeof (*cdev)); + dev->priv = cdev; + + cdev->name = (char*)dev->resource[0].name; + cdev->size = min_t(unsigned long long, resource_size(&dev->resource[0]), + S64_MAX); + cdev->ops = &memops; + cdev->dev = dev; + + devfs_create(cdev); + + return 0; +} + +static struct driver_d mem_drv = { + .name = "mem", + .probe = mem_probe, +}; + +static int mem_init(void) +{ + add_mem_device("mem", 0, ~0, IORESOURCE_MEM_WRITEABLE); + return platform_driver_register(&mem_drv); +} +device_initcall(mem_init); |