diff options
author | Sascha Hauer <s.hauer@pengutronix.de> | 2019-02-13 20:31:47 +0100 |
---|---|---|
committer | Sascha Hauer <s.hauer@pengutronix.de> | 2019-02-13 20:31:47 +0100 |
commit | 314ad8e28161be580af1271bdaf05a4c6e7f6bd1 (patch) | |
tree | a98f1b35cddef99c60fc255bc1ae5408974fc19f /drivers | |
parent | 3fe0effd52c960dc3dce0b731ef266113f2d1893 (diff) | |
parent | 504ac299a531a0bd601e6db05dc1c2d3b86a9700 (diff) | |
download | barebox-314ad8e28161be580af1271bdaf05a4c6e7f6bd1.tar.gz barebox-314ad8e28161be580af1271bdaf05a4c6e7f6bd1.tar.xz |
Merge branch 'for-next/lseek'
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/base/regmap/regmap.c | 1 | ||||
-rw-r--r-- | drivers/eeprom/at24.c | 1 | ||||
-rw-r--r-- | drivers/eeprom/at25.c | 1 | ||||
-rw-r--r-- | drivers/hw_random/core.c | 1 | ||||
-rw-r--r-- | drivers/mfd/act8846.c | 1 | ||||
-rw-r--r-- | drivers/mfd/lp3972.c | 1 | ||||
-rw-r--r-- | drivers/mfd/mc34704.c | 1 | ||||
-rw-r--r-- | drivers/mfd/mc9sdz60.c | 1 | ||||
-rw-r--r-- | drivers/mfd/stmpe-i2c.c | 1 | ||||
-rw-r--r-- | drivers/mfd/twl-core.c | 1 | ||||
-rw-r--r-- | drivers/misc/Kconfig | 3 | ||||
-rw-r--r-- | drivers/misc/Makefile | 1 | ||||
-rw-r--r-- | drivers/misc/mem.c | 73 | ||||
-rw-r--r-- | drivers/misc/sram.c | 1 | ||||
-rw-r--r-- | drivers/mtd/core.c | 1 | ||||
-rw-r--r-- | drivers/mtd/mtdoob.c | 1 | ||||
-rw-r--r-- | drivers/mtd/mtdraw.c | 1 | ||||
-rw-r--r-- | drivers/mtd/nand/nand-bb.c | 7 | ||||
-rw-r--r-- | drivers/mtd/ubi/barebox.c | 4 | ||||
-rw-r--r-- | drivers/net/e1000/eeprom.c | 2 | ||||
-rw-r--r-- | drivers/net/ksz8864rmn.c | 1 | ||||
-rw-r--r-- | drivers/net/phy/mdio_bus.c | 1 | ||||
-rw-r--r-- | drivers/nvmem/core.c | 2 | ||||
-rw-r--r-- | drivers/video/fb.c | 1 | ||||
-rw-r--r-- | drivers/w1/slaves/w1_ds2431.c | 1 | ||||
-rw-r--r-- | drivers/w1/slaves/w1_ds2433.c | 1 |
26 files changed, 82 insertions, 29 deletions
diff --git a/drivers/base/regmap/regmap.c b/drivers/base/regmap/regmap.c index 8bbc2373fc..d2f8ec70e4 100644 --- a/drivers/base/regmap/regmap.c +++ b/drivers/base/regmap/regmap.c @@ -353,7 +353,6 @@ static ssize_t regmap_cdev_write(struct cdev *cdev, const void *buf, size_t coun } static struct cdev_operations regmap_fops = { - .lseek = dev_lseek_default, .read = regmap_cdev_read, .write = regmap_cdev_write, }; diff --git a/drivers/eeprom/at24.c b/drivers/eeprom/at24.c index e79031a2d3..1fd4aeaba6 100644 --- a/drivers/eeprom/at24.c +++ b/drivers/eeprom/at24.c @@ -447,7 +447,6 @@ static int at24_probe(struct device_d *dev) at24->cdev.priv = at24; at24->cdev.dev = dev; at24->cdev.ops = &at24->fops; - at24->fops.lseek = dev_lseek_default; at24->fops.read = at24_cdev_read, at24->fops.protect = at24_cdev_protect, at24->cdev.size = chip.byte_len; diff --git a/drivers/eeprom/at25.c b/drivers/eeprom/at25.c index a9050d6c16..1c9ef12321 100644 --- a/drivers/eeprom/at25.c +++ b/drivers/eeprom/at25.c @@ -235,7 +235,6 @@ static ssize_t at25_ee_write(struct cdev *cdev, static struct cdev_operations at25_fops = { .read = at25_ee_read, .write = at25_ee_write, - .lseek = dev_lseek_default, }; static int at25_np_to_chip(struct device_d *dev, diff --git a/drivers/hw_random/core.c b/drivers/hw_random/core.c index 1c68a379f7..ee3d5a52dd 100644 --- a/drivers/hw_random/core.c +++ b/drivers/hw_random/core.c @@ -63,7 +63,6 @@ static ssize_t rng_dev_read(struct cdev *cdev, void *buf, size_t size, static struct cdev_operations rng_chrdev_ops = { .read = rng_dev_read, - .lseek = dev_lseek_default, }; static int hwrng_register_cdev(struct hwrng *rng) diff --git a/drivers/mfd/act8846.c b/drivers/mfd/act8846.c index 53ab70f5cc..b7a64c739c 100644 --- a/drivers/mfd/act8846.c +++ b/drivers/mfd/act8846.c @@ -117,7 +117,6 @@ static ssize_t act8846_write(struct cdev *cdev, const void *_buf, size_t count, } static struct cdev_operations act8846_fops = { - .lseek = dev_lseek_default, .read = act8846_read, .write = act8846_write, }; diff --git a/drivers/mfd/lp3972.c b/drivers/mfd/lp3972.c index 42b28070ad..3ae9d1ac64 100644 --- a/drivers/mfd/lp3972.c +++ b/drivers/mfd/lp3972.c @@ -70,7 +70,6 @@ static ssize_t lp_read(struct cdev *cdev, void *_buf, size_t count, loff_t offse } static struct cdev_operations lp_fops = { - .lseek = dev_lseek_default, .read = lp_read, }; diff --git a/drivers/mfd/mc34704.c b/drivers/mfd/mc34704.c index f15f37ef6e..4aa02b74ff 100644 --- a/drivers/mfd/mc34704.c +++ b/drivers/mfd/mc34704.c @@ -100,7 +100,6 @@ static ssize_t mc34704_write(struct cdev *cdev, const void *_buf, size_t count, } static struct cdev_operations mc34704_fops = { - .lseek = dev_lseek_default, .read = mc34704_read, .write = mc34704_write, }; diff --git a/drivers/mfd/mc9sdz60.c b/drivers/mfd/mc9sdz60.c index 2cb38d9784..408d746450 100644 --- a/drivers/mfd/mc9sdz60.c +++ b/drivers/mfd/mc9sdz60.c @@ -112,7 +112,6 @@ static ssize_t mc_write(struct cdev *cdev, const void *_buf, size_t count, loff_ } static struct cdev_operations mc_fops = { - .lseek = dev_lseek_default, .read = mc_read, .write = mc_write, }; diff --git a/drivers/mfd/stmpe-i2c.c b/drivers/mfd/stmpe-i2c.c index 084e4b43bb..f140f1bbc4 100644 --- a/drivers/mfd/stmpe-i2c.c +++ b/drivers/mfd/stmpe-i2c.c @@ -101,7 +101,6 @@ static ssize_t stmpe_write(struct cdev *cdev, const void *_buf, size_t count, lo } static struct cdev_operations stmpe_fops = { - .lseek = dev_lseek_default, .read = stmpe_read, .write = stmpe_write, }; diff --git a/drivers/mfd/twl-core.c b/drivers/mfd/twl-core.c index fb435f510f..c3240b8542 100644 --- a/drivers/mfd/twl-core.c +++ b/drivers/mfd/twl-core.c @@ -150,7 +150,6 @@ static ssize_t twl_write(struct cdev *cdev, const void *_buf, size_t count, } struct cdev_operations twl_fops = { - .lseek = dev_lseek_default, .read = twl_read, .write = twl_write, }; 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..6dd7f687c9 --- /dev/null +++ b/drivers/misc/mem.c @@ -0,0 +1,73 @@ +// 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; + if (dev->resource[0].start == 0 && dev->resource[0].end == ~0) { + /* + * Special case for /dev/mem. We can't express it's size as it's + * outside of our address range. Set DEVFS_IS_CHARACTER_DEV to + * bypass size checks. + */ + cdev->size = 0; + cdev->flags = DEVFS_IS_CHARACTER_DEV; + } else { + cdev->size = resource_size(&dev->resource[0]); + } + + 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) +{ + struct device_d *dev; + struct resource res = { + .start = 0, + .end = ~0, + .flags = IORESOURCE_MEM, + .name = "mem", + }; + int ret; + + dev = device_alloc("mem", DEVICE_ID_DYNAMIC); + if (!dev) + return -ENOMEM; + + dev->resource = xmemdup(&res, sizeof(res)); + dev->num_resources = 1; + + ret = platform_device_register(dev); + if (ret) + return ret; + + return platform_driver_register(&mem_drv); +} +device_initcall(mem_init); diff --git a/drivers/misc/sram.c b/drivers/misc/sram.c index 27b4c681fd..053b35150c 100644 --- a/drivers/misc/sram.c +++ b/drivers/misc/sram.c @@ -29,7 +29,6 @@ static struct cdev_operations memops = { .read = mem_read, .write = mem_write, .memmap = generic_memmap_rw, - .lseek = dev_lseek_default, }; static int sram_probe(struct device_d *dev) diff --git a/drivers/mtd/core.c b/drivers/mtd/core.c index f44c6cfc69..881b5f4864 100644 --- a/drivers/mtd/core.c +++ b/drivers/mtd/core.c @@ -462,7 +462,6 @@ static struct cdev_operations mtd_ops = { .protect = mtd_op_protect, #endif .ioctl = mtd_ioctl, - .lseek = dev_lseek_default, }; static int mtd_partition_set(struct param_d *p, void *priv) diff --git a/drivers/mtd/mtdoob.c b/drivers/mtd/mtdoob.c index ffaf9506f3..4aef844485 100644 --- a/drivers/mtd/mtdoob.c +++ b/drivers/mtd/mtdoob.c @@ -66,7 +66,6 @@ static ssize_t mtd_op_read_oob(struct cdev *cdev, void *buf, size_t count, static struct cdev_operations mtd_ops_oob = { .read = mtd_op_read_oob, .ioctl = mtd_ioctl, - .lseek = dev_lseek_default, }; static int add_mtdoob_device(struct mtd_info *mtd, const char *devname, void **priv) diff --git a/drivers/mtd/mtdraw.c b/drivers/mtd/mtdraw.c index 6e36dc5337..f63da7b3b2 100644 --- a/drivers/mtd/mtdraw.c +++ b/drivers/mtd/mtdraw.c @@ -291,7 +291,6 @@ static const struct cdev_operations mtd_raw_fops = { .read = mtdraw_read, .write = mtdraw_write, .erase = mtdraw_erase, - .lseek = dev_lseek_default, }; static int add_mtdraw_device(struct mtd_info *mtd, const char *devname, void **priv) diff --git a/drivers/mtd/nand/nand-bb.c b/drivers/mtd/nand/nand-bb.c index 012163ebb2..e578d72a49 100644 --- a/drivers/mtd/nand/nand-bb.c +++ b/drivers/mtd/nand/nand-bb.c @@ -236,17 +236,16 @@ static int nand_bb_calc_size(struct nand_bb *bb) return 0; } -static loff_t nand_bb_lseek(struct cdev *cdev, loff_t __offset) +static int nand_bb_lseek(struct cdev *cdev, loff_t offset) { struct nand_bb *bb = cdev->priv; loff_t raw_pos = 0; - uint32_t offset = __offset; /* lseek only in readonly mode */ if (bb->flags & O_ACCMODE) return -ENOSYS; while (raw_pos < bb->mtd->size) { - off_t now = min(offset, bb->mtd->erasesize); + off_t now = min_t(loff_t, offset, bb->mtd->erasesize); if (mtd_block_isbad(bb->mtd, raw_pos)) { raw_pos += bb->mtd->erasesize; @@ -257,7 +256,7 @@ static loff_t nand_bb_lseek(struct cdev *cdev, loff_t __offset) if (!offset) { bb->offset = raw_pos; - return __offset; + return 0; } } diff --git a/drivers/mtd/ubi/barebox.c b/drivers/mtd/ubi/barebox.c index 65f5456455..781061d9a7 100644 --- a/drivers/mtd/ubi/barebox.c +++ b/drivers/mtd/ubi/barebox.c @@ -151,7 +151,7 @@ static int ubi_volume_cdev_close(struct cdev *cdev) return 0; } -static loff_t ubi_volume_cdev_lseek(struct cdev *cdev, loff_t ofs) +static int ubi_volume_cdev_lseek(struct cdev *cdev, loff_t ofs) { struct ubi_volume_cdev_priv *priv = cdev->priv; @@ -159,7 +159,7 @@ static loff_t ubi_volume_cdev_lseek(struct cdev *cdev, loff_t ofs) if (priv->written) return -EINVAL; - return ofs; + return 0; } static int ubi_volume_cdev_truncate(struct cdev *cdev, size_t size) diff --git a/drivers/net/e1000/eeprom.c b/drivers/net/e1000/eeprom.c index 36d818b3f3..5b34e9b8d1 100644 --- a/drivers/net/e1000/eeprom.c +++ b/drivers/net/e1000/eeprom.c @@ -1326,7 +1326,6 @@ exit: static struct cdev_operations e1000_invm_ops = { .read = e1000_invm_cdev_read, .write = e1000_invm_cdev_write, - .lseek = dev_lseek_default, }; static ssize_t e1000_eeprom_cdev_read(struct cdev *cdev, void *buf, @@ -1351,7 +1350,6 @@ static ssize_t e1000_eeprom_cdev_read(struct cdev *cdev, void *buf, static struct cdev_operations e1000_eeprom_ops = { .read = e1000_eeprom_cdev_read, - .lseek = dev_lseek_default, }; static int e1000_mtd_read_or_write(bool read, diff --git a/drivers/net/ksz8864rmn.c b/drivers/net/ksz8864rmn.c index 4a19dd8734..85063ff0d8 100644 --- a/drivers/net/ksz8864rmn.c +++ b/drivers/net/ksz8864rmn.c @@ -113,7 +113,6 @@ static ssize_t micel_switch_write(struct cdev *cdev, const void *_buf, size_t co static struct cdev_operations micrel_switch_ops = { .read = micel_switch_read, .write = micel_switch_write, - .lseek = dev_lseek_default, }; static int micrel_switch_probe(struct device_d *dev) diff --git a/drivers/net/phy/mdio_bus.c b/drivers/net/phy/mdio_bus.c index e1dd8f0ae3..3480e2ffb4 100644 --- a/drivers/net/phy/mdio_bus.c +++ b/drivers/net/phy/mdio_bus.c @@ -392,7 +392,6 @@ static ssize_t phydev_write(struct cdev *cdev, const void *_buf, size_t count, l static struct cdev_operations phydev_ops = { .read = phydev_read, .write = phydev_write, - .lseek = dev_lseek_default, }; static void of_set_phy_supported(struct phy_device *phydev) diff --git a/drivers/nvmem/core.c b/drivers/nvmem/core.c index 63c0f997b3..6cf98f62af 100644 --- a/drivers/nvmem/core.c +++ b/drivers/nvmem/core.c @@ -85,7 +85,6 @@ static ssize_t nvmem_cdev_write(struct cdev *cdev, const void *buf, size_t count static struct cdev_operations nvmem_chrdev_ops = { .read = nvmem_cdev_read, .write = nvmem_cdev_write, - .lseek = dev_lseek_default, }; static int nvmem_register_cdev(struct nvmem_device *nvmem, const char *name) @@ -96,7 +95,6 @@ static int nvmem_register_cdev(struct nvmem_device *nvmem, const char *name) alias = of_alias_get(dev->device_node); nvmem->cdev.name = xstrdup(alias ?: name); - nvmem->cdev.flags = DEVFS_IS_CHARACTER_DEV; nvmem->cdev.ops = &nvmem_chrdev_ops; nvmem->cdev.dev = &nvmem->dev; nvmem->cdev.size = nvmem->size; diff --git a/drivers/video/fb.c b/drivers/video/fb.c index 72f33a6db6..2d82bc01fa 100644 --- a/drivers/video/fb.c +++ b/drivers/video/fb.c @@ -228,7 +228,6 @@ static struct cdev_operations fb_ops = { .read = mem_read, .write = mem_write, .memmap = generic_memmap_rw, - .lseek = dev_lseek_default, .ioctl = fb_ioctl, .close = fb_close, .flush = fb_op_flush, diff --git a/drivers/w1/slaves/w1_ds2431.c b/drivers/w1/slaves/w1_ds2431.c index 13691d7bab..6446f4ba05 100644 --- a/drivers/w1/slaves/w1_ds2431.c +++ b/drivers/w1/slaves/w1_ds2431.c @@ -260,7 +260,6 @@ out_up: static struct cdev_operations ds2431_ops = { .read = ds2431_cdev_read, .write = ds2431_cdev_write, - .lseek = dev_lseek_default, }; static int ds2431_probe(struct w1_device *dev) diff --git a/drivers/w1/slaves/w1_ds2433.c b/drivers/w1/slaves/w1_ds2433.c index f521a46a75..b24fb5b3b5 100644 --- a/drivers/w1/slaves/w1_ds2433.c +++ b/drivers/w1/slaves/w1_ds2433.c @@ -159,7 +159,6 @@ out_up: static struct cdev_operations ds2433_ops = { .read = ds2433_cdev_read, .write = ds2433_cdev_write, - .lseek = dev_lseek_default, }; static int ds2433_cdev_create(struct w1_device *dev, int size, int id) |