diff options
Diffstat (limited to 'nuttx/drivers/mtd/rammtd.c')
-rw-r--r-- | nuttx/drivers/mtd/rammtd.c | 55 |
1 files changed, 35 insertions, 20 deletions
diff --git a/nuttx/drivers/mtd/rammtd.c b/nuttx/drivers/mtd/rammtd.c index 461cd7d99..137f91f73 100644 --- a/nuttx/drivers/mtd/rammtd.c +++ b/nuttx/drivers/mtd/rammtd.c @@ -228,7 +228,7 @@ static int ram_erase(FAR struct mtd_dev_s *dev, off_t startblock, size_t nblocks * Name: ram_readbytes ****************************************************************************/ -#ifdef CONFIG_RAMMTD_SMART +#ifdef CONFIG_MTD_SMART static ssize_t ram_read_bytes(FAR struct mtd_dev_s *dev, off_t offset, size_t nbytes, FAR uint8_t *buf) { @@ -329,6 +329,34 @@ static ssize_t ram_bwrite(FAR struct mtd_dev_s *dev, off_t startblock, } /**************************************************************************** + * Name: ram_bytewrite + ****************************************************************************/ + +#ifdef CONFIG_MTD_BYTE_WRITE +static ssize_t ram_bytewrite(FAR struct mtd_dev_s *dev, off_t offset, + size_t nbytes, FAR const uint8_t *buf) +{ + FAR struct ram_dev_s *priv = (FAR struct ram_dev_s *)dev; + off_t maxaddr; + + DEBUGASSERT(dev && buf); + + /* Don't let the write exceed the size of the ram buffer */ + + maxaddr = priv->nblocks * CONFIG_RAMMTD_ERASESIZE; + if (offset + nbytes > maxaddr) + { + return 0; + } + + /* Then write the data to RAM */ + + ram_write(&priv->start[offset], buf, nbytes); + return nbytes; +} +#endif + +/**************************************************************************** * Name: ram_ioctl ****************************************************************************/ @@ -380,24 +408,6 @@ static int ram_ioctl(FAR struct mtd_dev_s *dev, int cmd, unsigned long arg) } break; -#ifdef CONFIG_RAMMTD_SMART - case MTDIOC_GETCAPS: - { - ret = MTDIOC_CAPS_BYTEWRITE; - break; - } - - case MTDIOC_BYTEWRITE: - { - struct mtd_byte_write_s *bytewrite = (struct mtd_byte_write_s *) arg; - - ram_write(&priv->start[bytewrite->offset], bytewrite->buffer, - bytewrite->count); - ret = OK; - break; - } -#endif - default: ret = -ENOTTY; /* Bad command */ break; @@ -454,9 +464,14 @@ FAR struct mtd_dev_s *rammtd_initialize(FAR uint8_t *start, size_t size) priv->mtd.bwrite = ram_bwrite; priv->mtd.ioctl = ram_ioctl; priv->mtd.erase = ram_erase; +#ifdef CONFIG_MTD_BYTE_WRITE + priv->mtd.write = ram_bytewrite; +#endif -#ifdef CONFIG_RAMMTD_SMART +#ifdef CONFIG_MTD_SMART priv->mtd.read = ram_read_bytes; +#else + priv->mtd.read = NULL; #endif priv->start = start; |