You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nuttx.apache.org by gu...@apache.org on 2021/08/16 13:08:32 UTC
[incubator-nuttx] branch master updated: mtd: Implement
BIOC_PARTINFO for all drivers
This is an automated email from the ASF dual-hosted git repository.
gustavonihei pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-nuttx.git
The following commit(s) were added to refs/heads/master by this push:
new 7126981 mtd: Implement BIOC_PARTINFO for all drivers
7126981 is described below
commit 71269811ca8a5289dd3c16838ece33df35a94534
Author: Xiang Xiao <xi...@xiaomi.com>
AuthorDate: Mon Aug 16 02:10:23 2021 +0800
mtd: Implement BIOC_PARTINFO for all drivers
Signed-off-by: Xiang Xiao <xi...@xiaomi.com>
---
arch/arm/src/cxd56xx/cxd56_sfc.c | 15 ++++++++++++++
arch/arm/src/lc823450/lc823450_mtd.c | 16 +++++++++++++++
arch/arm/src/lpc43xx/lpc43_spifi.c | 22 ++++++++++++++++++++
arch/arm/src/rtl8720c/ameba_flash.c | 16 +++++++++++++++
arch/arm/src/tiva/common/tiva_flash.c | 16 +++++++++++++++
arch/risc-v/src/bl602/bl602_spiflash.c | 19 +++++++++++++++--
arch/risc-v/src/esp32c3/esp32c3_spiflash.c | 19 ++++++++++++++---
arch/xtensa/src/esp32/esp32_spiflash.c | 19 +++++++++++++++--
.../imxrt/imxrt1064-evk/src/imxrt_flexspi_nor.c | 16 +++++++++++++++
drivers/mtd/at24xx.c | 22 ++++++++++++++++++++
drivers/mtd/at25.c | 17 +++++++++++++++
drivers/mtd/at45db.c | 18 +++++++++++++++-
drivers/mtd/filemtd.c | 17 +++++++++++++++
drivers/mtd/gd25.c | 17 +++++++++++++++
drivers/mtd/gd5f.c | 17 +++++++++++++++
drivers/mtd/is25xp.c | 17 +++++++++++++++
drivers/mtd/m25px.c | 17 +++++++++++++++
drivers/mtd/mtd_nand.c | 20 +++++++++++++++++-
drivers/mtd/mtd_progmem.c | 17 +++++++++++++++
drivers/mtd/mtd_rwbuffer.c | 16 +++++++++++++++
drivers/mtd/mx25lx.c | 23 +++++++++++++++++++++
drivers/mtd/mx25rxx.c | 23 +++++++++++++++++++++
drivers/mtd/mx35.c | 17 +++++++++++++++
drivers/mtd/n25qxxx.c | 23 +++++++++++++++++++++
drivers/mtd/rammtd.c | 18 ++++++++++++++++
drivers/mtd/ramtron.c | 17 +++++++++++++++
drivers/mtd/s25fl1.c | 23 +++++++++++++++++++++
drivers/mtd/sector512.c | 16 +++++++++++++++
drivers/mtd/skeleton.c | 16 +++++++++++++++
drivers/mtd/sst25.c | 22 ++++++++++++++++++++
drivers/mtd/sst25xx.c | 17 +++++++++++++++
drivers/mtd/sst26.c | 17 +++++++++++++++
drivers/mtd/sst39vf.c | 24 ++++++++++++++++++----
drivers/mtd/w25.c | 23 +++++++++++++++++++++
drivers/mtd/w25qxxxjv.c | 23 +++++++++++++++++++++
35 files changed, 642 insertions(+), 13 deletions(-)
diff --git a/arch/arm/src/cxd56xx/cxd56_sfc.c b/arch/arm/src/cxd56xx/cxd56_sfc.c
index 856a94a..ec81dad 100644
--- a/arch/arm/src/cxd56xx/cxd56_sfc.c
+++ b/arch/arm/src/cxd56xx/cxd56_sfc.c
@@ -212,6 +212,21 @@ static int cxd56_ioctl(FAR struct mtd_dev_s *dev, int cmd, unsigned long arg)
}
break;
+ case BIOC_PARTINFO:
+ {
+ FAR struct partition_info_s *info =
+ (FAR struct partition_info_s *)arg;
+ if (info != NULL)
+ {
+ info->magic = 0;
+ info->numsectors = priv->density / PAGE_SIZE;
+ info->sectorsize = PAGE_SIZE;
+ info->startsector = 0;
+ info->parent[0] = '\0';
+ }
+ }
+ break;
+
case MTDIOC_BULKERASE:
{
/* Erase the entire device */
diff --git a/arch/arm/src/lc823450/lc823450_mtd.c b/arch/arm/src/lc823450/lc823450_mtd.c
index f5a92fc..b56e2fd 100644
--- a/arch/arm/src/lc823450/lc823450_mtd.c
+++ b/arch/arm/src/lc823450/lc823450_mtd.c
@@ -349,6 +349,22 @@ static int lc823450_ioctl(FAR struct mtd_dev_s *dev, int cmd,
geo->erasesize, geo->neraseblocks);
break;
+ case BIOC_PARTINFO:
+ {
+ FAR struct partition_info_s *info =
+ (FAR struct partition_info_s *)arg;
+ if (info != NULL)
+ {
+ info->magic = 0;
+ info->numsectors = priv->nblocks;
+ info->sectorsize = priv->blocksize;
+ info->startsector = 0;
+ info->parent[0] = '\0';
+ ret = OK;
+ }
+ }
+ break;
+
case BIOC_XIPBASE:
finfo("BIOC_XIPBASE\n");
ppv = (FAR void**)arg;
diff --git a/arch/arm/src/lpc43xx/lpc43_spifi.c b/arch/arm/src/lpc43xx/lpc43_spifi.c
index 206fb8f..2aa718a 100644
--- a/arch/arm/src/lpc43xx/lpc43_spifi.c
+++ b/arch/arm/src/lpc43xx/lpc43_spifi.c
@@ -887,6 +887,28 @@ static int lpc43_ioctl(FAR struct mtd_dev_s *dev, int cmd, unsigned long arg)
}
break;
+ case BIOC_PARTINFO:
+ {
+ FAR struct partition_info_s *info =
+ (FAR struct partition_info_s *)arg;
+ if (info != NULL)
+ {
+ info->magic = 0;
+#ifdef CONFIG_SPIFI_SECTOR512
+ info->numsectors = priv->nblocks <<
+ (SPIFI_BLKSHIFT - SPIFI_512SHIFT);
+ info->sectorsize = 512;
+#else
+ info->numsectors = priv->nblocks;
+ info->sectorsize = SPIFI_BLKSIZE;
+#endif
+ info->startsector = 0;
+ info->parent[0] = '\0';
+ ret = OK;
+ }
+ }
+ break;
+
case MTDIOC_BULKERASE:
{
/* Erase the entire device */
diff --git a/arch/arm/src/rtl8720c/ameba_flash.c b/arch/arm/src/rtl8720c/ameba_flash.c
index 7057295..86ad50c 100644
--- a/arch/arm/src/rtl8720c/ameba_flash.c
+++ b/arch/arm/src/rtl8720c/ameba_flash.c
@@ -245,6 +245,22 @@ static int ameba_flash_ioctl(FAR struct mtd_dev_s *dev,
}
break;
+ case BIOC_PARTINFO:
+ {
+ FAR struct partition_info_s *info =
+ (FAR struct partition_info_s *)arg;
+ if (info != NULL)
+ {
+ info->magic = 0;
+ info->numsectors = priv->nsectors *
+ AMEBA_SECTOR_SIZE / AMEBA_PAGE_SIZE;
+ info->sectorsize = AMEBA_PAGE_SIZE;
+ info->startsector = 0;
+ info->parent[0] = '\0';
+ }
+ }
+
+ break;
case MTDIOC_BULKERASE:
{
state = flash_resource_lock();
diff --git a/arch/arm/src/tiva/common/tiva_flash.c b/arch/arm/src/tiva/common/tiva_flash.c
index 5b4e2e9..28747b8 100644
--- a/arch/arm/src/tiva/common/tiva_flash.c
+++ b/arch/arm/src/tiva/common/tiva_flash.c
@@ -394,6 +394,22 @@ static int tiva_ioctl(FAR struct mtd_dev_s *dev, int cmd, unsigned long arg)
}
break;
+ case BIOC_PARTINFO:
+ {
+ FAR struct partition_info_s *info =
+ (FAR struct partition_info_s *)arg;
+ if (info != NULL)
+ {
+ info->magic = 0;
+ info->numsectors = TIVA_VIRTUAL_NPAGES;
+ info->sectorsize = TIVA_FLASH_PAGESIZE;
+ info->startsector = 0;
+ info->parent[0] = '\0';
+ ret = OK;
+ }
+ }
+ break;
+
case BIOC_XIPBASE:
{
FAR void **ppv = (FAR void**)arg;
diff --git a/arch/risc-v/src/bl602/bl602_spiflash.c b/arch/risc-v/src/bl602/bl602_spiflash.c
index 9a14675..225f741 100644
--- a/arch/risc-v/src/bl602/bl602_spiflash.c
+++ b/arch/risc-v/src/bl602/bl602_spiflash.c
@@ -287,14 +287,13 @@ int bl602_ioctl(FAR struct mtd_dev_s *dev, int cmd,
{
int ret = -EINVAL;
FAR struct bl602_spiflash_s *priv = MTD2PRIV(dev);
- FAR struct mtd_geometry_s *geo;
switch (cmd)
{
case MTDIOC_GEOMETRY:
{
finfo("cmd(0x%x) MTDIOC_GEOMETRY.\n", cmd);
- geo = (FAR struct mtd_geometry_s *)arg;
+ FAR struct mtd_geometry_s *geo = (FAR struct mtd_geometry_s *)arg;
if (geo)
{
geo->blocksize = SPIFLASH_BLOCKSIZE;
@@ -308,6 +307,22 @@ int bl602_ioctl(FAR struct mtd_dev_s *dev, int cmd,
}
}
break;
+ case BIOC_PARTINFO:
+ {
+ FAR struct partition_info_s *info =
+ (FAR struct partition_info_s *)arg;
+ if (info != NULL)
+ {
+ info->magic = 0;
+ info->numsectors = priv->config->flash_size /
+ SPIFLASH_BLOCKSIZE;
+ info->sectorsize = SPIFLASH_BLOCKSIZE;
+ info->startsector = 0;
+ info->parent[0] = '\0';
+ ret = OK;
+ }
+ }
+ break;
default:
{
finfo("cmd(0x%x) not support.\n", cmd);
diff --git a/arch/risc-v/src/esp32c3/esp32c3_spiflash.c b/arch/risc-v/src/esp32c3/esp32c3_spiflash.c
index 24b48a1..a9bfe59 100644
--- a/arch/risc-v/src/esp32c3/esp32c3_spiflash.c
+++ b/arch/risc-v/src/esp32c3/esp32c3_spiflash.c
@@ -853,7 +853,6 @@ static int esp32c3_ioctl(struct mtd_dev_s *dev, int cmd,
unsigned long arg)
{
int ret = OK;
- struct mtd_geometry_s *geo;
finfo("cmd: %d \n", cmd);
@@ -861,7 +860,7 @@ static int esp32c3_ioctl(struct mtd_dev_s *dev, int cmd,
{
case MTDIOC_GEOMETRY:
{
- geo = (struct mtd_geometry_s *)arg;
+ struct mtd_geometry_s *geo = (struct mtd_geometry_s *)arg;
if (geo)
{
geo->blocksize = SPI_FLASH_BLK_SIZE;
@@ -876,9 +875,23 @@ static int esp32c3_ioctl(struct mtd_dev_s *dev, int cmd,
}
break;
+ case BIOC_PARTINFO:
+ {
+ struct partition_info_s *info = (struct partition_info_s *)arg;
+ if (info != NULL)
+ {
+ info->magic = 0;
+ info->numsectors = SPI_FLASH_SIZE / SPI_FLASH_BLK_SIZE;
+ info->sectorsize = SPI_FLASH_BLK_SIZE;
+ info->startsector = 0;
+ info->parent[0] = '\0';
+ }
+ }
+ break;
+
case MTDIOC_ERASESTATE:
{
- FAR uint8_t *result = (FAR uint8_t *)arg;
+ uint8_t *result = (uint8_t *)arg;
*result = SPI_FLASH_ERASED_STATE;
ret = OK;
diff --git a/arch/xtensa/src/esp32/esp32_spiflash.c b/arch/xtensa/src/esp32/esp32_spiflash.c
index 344e95b..b157e5e 100644
--- a/arch/xtensa/src/esp32/esp32_spiflash.c
+++ b/arch/xtensa/src/esp32/esp32_spiflash.c
@@ -1909,7 +1909,6 @@ static int esp32_ioctl(FAR struct mtd_dev_s *dev, int cmd,
{
int ret = -EINVAL;
FAR struct esp32_spiflash_s *priv = MTD2PRIV(dev);
- FAR struct mtd_geometry_s *geo;
finfo("cmd: %d \n", cmd);
@@ -1917,7 +1916,7 @@ static int esp32_ioctl(FAR struct mtd_dev_s *dev, int cmd,
{
case MTDIOC_GEOMETRY:
{
- geo = (FAR struct mtd_geometry_s *)arg;
+ FAR struct mtd_geometry_s *geo = (FAR struct mtd_geometry_s *)arg;
if (geo)
{
geo->blocksize = MTD_BLKSIZE(priv);
@@ -1931,6 +1930,22 @@ static int esp32_ioctl(FAR struct mtd_dev_s *dev, int cmd,
}
break;
+ case BIOC_PARTINFO:
+ {
+ FAR struct partition_info_s *info =
+ (FAR struct partition_info_s *)arg;
+ if (info != NULL)
+ {
+ info->magic = 0;
+ info->numsectors = MTD_SIZE(priv) / MTD_BLKSIZE(priv);
+ info->sectorsize = MTD_BLKSIZE(priv);
+ info->startsector = 0;
+ info->parent[0] = '\0';
+ ret = OK;
+ }
+ }
+ break;
+
case MTDIOC_ERASESTATE:
{
FAR uint8_t *result = (FAR uint8_t *)arg;
diff --git a/boards/arm/imxrt/imxrt1064-evk/src/imxrt_flexspi_nor.c b/boards/arm/imxrt/imxrt1064-evk/src/imxrt_flexspi_nor.c
index 07df334..51d5112 100644
--- a/boards/arm/imxrt/imxrt1064-evk/src/imxrt_flexspi_nor.c
+++ b/boards/arm/imxrt/imxrt1064-evk/src/imxrt_flexspi_nor.c
@@ -578,6 +578,22 @@ static int imxrt_flexspi_nor_ioctl(FAR struct mtd_dev_s *dev,
}
break;
+ case BIOC_PARTINFO:
+ {
+ FAR struct partition_info_s *info =
+ (FAR struct partition_info_s *)arg;
+ if (info != NULL)
+ {
+ info->magic = 0;
+ info->numsectors = 32768; /* 8MB only */
+ info->sectorsize = NOR_PAGE_SIZE;
+ info->startsector = 0;
+ info->parent[0] = '\0';
+ ret = OK;
+ }
+ }
+ break;
+
case MTDIOC_BULKERASE:
{
/* Erase the entire device */
diff --git a/drivers/mtd/at24xx.c b/drivers/mtd/at24xx.c
index b7852c7..b89d04b 100644
--- a/drivers/mtd/at24xx.c
+++ b/drivers/mtd/at24xx.c
@@ -632,6 +632,28 @@ static int at24c_ioctl(FAR struct mtd_dev_s *dev, int cmd, unsigned long arg)
}
break;
+ case BIOC_PARTINFO:
+ {
+ FAR struct partition_info_s *info =
+ (FAR struct partition_info_s *)arg;
+ if (info != NULL)
+ {
+ info->magic = 0;
+#if CONFIG_AT24XX_MTD_BLOCKSIZE > AT24XX_PAGESIZE
+ info->numsectors = (CONFIG_AT24XX_SIZE * 1024 / 8) /
+ CONFIG_AT24XX_MTD_BLOCKSIZE;
+ info->sectorsize = CONFIG_AT24XX_MTD_BLOCKSIZE;
+#else
+ info->numsectors = priv->npages;
+ info->sectorsize = priv->pagesize;
+#endif
+ info->startsector = 0;
+ info->parent[0] = '\0';
+ ret = OK;
+ }
+ }
+ break;
+
case MTDIOC_BULKERASE:
ret = at24c_eraseall(priv);
break;
diff --git a/drivers/mtd/at25.c b/drivers/mtd/at25.c
index 98425f6..8594064 100644
--- a/drivers/mtd/at25.c
+++ b/drivers/mtd/at25.c
@@ -639,6 +639,23 @@ static int at25_ioctl(FAR struct mtd_dev_s *dev, int cmd, unsigned long arg)
}
break;
+ case BIOC_PARTINFO:
+ {
+ FAR struct partition_info_s *info =
+ (FAR struct partition_info_s *)arg;
+ if (info != NULL)
+ {
+ info->magic = 0;
+ info->numsectors = priv->nsectors <<
+ (priv->sectorshift - priv->pageshift);
+ info->sectorsize = 1 << priv->pageshift;
+ info->startsector = 0;
+ info->parent[0] = '\0';
+ ret = OK;
+ }
+ }
+ break;
+
case MTDIOC_BULKERASE:
{
/* Erase the entire device */
diff --git a/drivers/mtd/at45db.c b/drivers/mtd/at45db.c
index 6166537..04bc4c9 100644
--- a/drivers/mtd/at45db.c
+++ b/drivers/mtd/at45db.c
@@ -22,7 +22,7 @@
/* Ordering Code Detail:
*
- * AT 45DB 16 1 D � SS U
+ * AT 45DB 16 1 D SS U
* | | | | | | `- Device grade
* | | | | | `- Package Option
* | | | | `- Device revision
@@ -805,6 +805,22 @@ static int at45db_ioctl(FAR struct mtd_dev_s *mtd,
}
break;
+ case BIOC_PARTINFO:
+ {
+ FAR struct partition_info_s *info =
+ (FAR struct partition_info_s *)arg;
+ if (info != NULL)
+ {
+ info->magic = 0;
+ info->numsectors = priv->npages;
+ info->sectorsize = 1 << priv->pageshift;
+ info->startsector = 0;
+ info->parent[0] = '\0';
+ ret = OK;
+ }
+ }
+ break;
+
case MTDIOC_BULKERASE:
{
/* Take the lock so that we have exclusive access to the bus, then
diff --git a/drivers/mtd/filemtd.c b/drivers/mtd/filemtd.c
index f1e3fc9..ca800e8 100644
--- a/drivers/mtd/filemtd.c
+++ b/drivers/mtd/filemtd.c
@@ -436,6 +436,23 @@ static int filemtd_ioctl(FAR struct mtd_dev_s *dev, int cmd,
}
break;
+ case BIOC_PARTINFO:
+ {
+ FAR struct partition_info_s *info =
+ (FAR struct partition_info_s *)arg;
+ if (info != NULL)
+ {
+ info->magic = 0;
+ info->numsectors = priv->nblocks *
+ priv->erasesize / priv->blocksize;
+ info->sectorsize = priv->blocksize;
+ info->startsector = 0;
+ info->parent[0] = '\0';
+ ret = OK;
+ }
+ }
+ break;
+
case MTDIOC_BULKERASE:
{
/* Erase the entire device */
diff --git a/drivers/mtd/gd25.c b/drivers/mtd/gd25.c
index ee7879b..55815be 100644
--- a/drivers/mtd/gd25.c
+++ b/drivers/mtd/gd25.c
@@ -945,6 +945,23 @@ static int gd25_ioctl(FAR struct mtd_dev_s *dev, int cmd, unsigned long arg)
}
break;
+ case BIOC_PARTINFO:
+ {
+ FAR struct partition_info_s *info =
+ (FAR struct partition_info_s *)arg;
+ if (info != NULL)
+ {
+ info->magic = 0;
+ info->numsectors = priv->nsectors *
+ GD25_SECTOR_SIZE / GD25_PAGE_SIZE;
+ info->sectorsize = GD25_PAGE_SIZE;
+ info->startsector = 0;
+ info->parent[0] = '\0';
+ ret = OK;
+ }
+ }
+ break;
+
case MTDIOC_BULKERASE:
{
/* Erase the entire device */
diff --git a/drivers/mtd/gd5f.c b/drivers/mtd/gd5f.c
index e57be57..fb3c4e0 100644
--- a/drivers/mtd/gd5f.c
+++ b/drivers/mtd/gd5f.c
@@ -781,6 +781,23 @@ static int gd5f_ioctl(FAR struct mtd_dev_s *dev, int cmd, unsigned long arg)
}
break;
+ case BIOC_PARTINFO:
+ {
+ FAR struct partition_info_s *info =
+ (FAR struct partition_info_s *)arg;
+ if (info != NULL)
+ {
+ info->magic = 0;
+ info->numsectors = priv->nsectors <<
+ (priv->sectorshift - priv->pageshift);
+ info->sectorsize = 1 << priv->pageshift;
+ info->startsector = 0;
+ info->parent[0] = '\0';
+ ret = OK;
+ }
+ }
+ break;
+
case MTDIOC_BULKERASE:
{
/* Erase the entire device */
diff --git a/drivers/mtd/is25xp.c b/drivers/mtd/is25xp.c
index d327a7c..087519f 100644
--- a/drivers/mtd/is25xp.c
+++ b/drivers/mtd/is25xp.c
@@ -954,6 +954,23 @@ static int is25xp_ioctl(FAR struct mtd_dev_s *dev,
}
break;
+ case BIOC_PARTINFO:
+ {
+ FAR struct partition_info_s *info =
+ (FAR struct partition_info_s *)arg;
+ if (info != NULL)
+ {
+ info->magic = 0;
+ info->numsectors = priv->nsectors <<
+ (priv->sectorshift - priv->pageshift);
+ info->sectorsize = 1 << priv->pageshift;
+ info->startsector = 0;
+ info->parent[0] = '\0';
+ ret = OK;
+ }
+ }
+ break;
+
case MTDIOC_BULKERASE:
{
/* Erase the entire device */
diff --git a/drivers/mtd/m25px.c b/drivers/mtd/m25px.c
index e19b0c9..6e2b43d 100644
--- a/drivers/mtd/m25px.c
+++ b/drivers/mtd/m25px.c
@@ -1036,6 +1036,23 @@ static int m25p_ioctl(FAR struct mtd_dev_s *dev, int cmd, unsigned long arg)
}
break;
+ case BIOC_PARTINFO:
+ {
+ FAR struct partition_info_s *info =
+ (FAR struct partition_info_s *)arg;
+ if (info != NULL)
+ {
+ info->magic = 0;
+ info->numsectors = priv->nsectors <<
+ (priv->sectorshift - priv->pageshift);
+ info->sectorsize = 1 << priv->pageshift;
+ info->startsector = 0;
+ info->parent[0] = '\0';
+ ret = OK;
+ }
+ }
+ break;
+
case MTDIOC_BULKERASE:
{
/* Erase the entire device */
diff --git a/drivers/mtd/mtd_nand.c b/drivers/mtd/mtd_nand.c
index e46d8cf..614fd34 100644
--- a/drivers/mtd/mtd_nand.c
+++ b/drivers/mtd/mtd_nand.c
@@ -787,7 +787,7 @@ static int nand_ioctl(struct mtd_dev_s *dev, int cmd, unsigned long arg)
{
case MTDIOC_GEOMETRY:
{
- struct mtd_geometry_s *geo = (struct mtd_geometry_s *)arg;
+ FAR struct mtd_geometry_s *geo = (struct mtd_geometry_s *)arg;
if (geo)
{
/* Populate the geometry structure with information needed to
@@ -806,6 +806,24 @@ static int nand_ioctl(struct mtd_dev_s *dev, int cmd, unsigned long arg)
}
break;
+ case BIOC_PARTINFO:
+ {
+ FAR struct partition_info_s *info =
+ (FAR struct partition_info_s *)arg;
+ if (info != NULL)
+ {
+ info->magic = 0;
+ info->numsectors = nandmodel_getdevblocks(model) *
+ nandmodel_getbyteblocksize(model) /
+ model->pagesize;
+ info->sectorsize = model->pagesize;
+ info->startsector = 0;
+ info->parent[0] = '\0';
+ ret = OK;
+ }
+ }
+ break;
+
case MTDIOC_BULKERASE:
{
/* Erase the entire device */
diff --git a/drivers/mtd/mtd_progmem.c b/drivers/mtd/mtd_progmem.c
index 4c9ed0d..24ba2c2 100644
--- a/drivers/mtd/mtd_progmem.c
+++ b/drivers/mtd/mtd_progmem.c
@@ -326,6 +326,23 @@ static int progmem_ioctl(FAR struct mtd_dev_s *dev, int cmd,
}
break;
+ case BIOC_PARTINFO:
+ {
+ FAR struct partition_info_s *info =
+ (FAR struct partition_info_s *)arg;
+ if (info != NULL)
+ {
+ info->magic = 0;
+ info->numsectors = up_progmem_neraseblocks() <<
+ (priv->ersshift - priv->blkshift);
+ info->sectorsize = 1 << priv->blkshift;
+ info->startsector = 0;
+ info->parent[0] = '\0';
+ ret = OK;
+ }
+ }
+ break;
+
case BIOC_XIPBASE:
{
FAR void **ppv = (FAR void**)arg;
diff --git a/drivers/mtd/mtd_rwbuffer.c b/drivers/mtd/mtd_rwbuffer.c
index 72ad1b6..1a4d345 100644
--- a/drivers/mtd/mtd_rwbuffer.c
+++ b/drivers/mtd/mtd_rwbuffer.c
@@ -296,6 +296,22 @@ static int mtd_ioctl(FAR struct mtd_dev_s *dev, int cmd, unsigned long arg)
}
break;
+ case BIOC_PARTINFO:
+ {
+ FAR struct partition_info_s *info =
+ (FAR struct partition_info_s *)arg;
+ if (info != NULL)
+ {
+ info->magic = 0;
+ info->numsectors = priv->rwb.nblocks;
+ info->sectorsize = priv->rwb.blocksize;
+ info->startsector = 0;
+ info->parent[0] = '\0';
+ ret = OK;
+ }
+ }
+ break;
+
case MTDIOC_BULKERASE:
{
/* Erase the entire device */
diff --git a/drivers/mtd/mx25lx.c b/drivers/mtd/mx25lx.c
index 52f700b..72bf491 100644
--- a/drivers/mtd/mx25lx.c
+++ b/drivers/mtd/mx25lx.c
@@ -1083,6 +1083,29 @@ static int mx25l_ioctl(FAR struct mtd_dev_s *dev, int cmd, unsigned long arg)
}
break;
+ case BIOC_PARTINFO:
+ {
+ FAR struct partition_info_s *info =
+ (FAR struct partition_info_s *)arg;
+ if (info != NULL)
+ {
+ info->magic = 0;
+#ifdef CONFIG_MX25L_SECTOR512
+ info->numsectors = priv->nsectors <<
+ (priv->sectorshift - MX25L_SECTOR512_SHIFT);
+ info->sectorsize = 1 << MX25L_SECTOR512_SHIFT;
+#else
+ info->numsectors = priv->nsectors <<
+ (priv->sectorshift - priv->pageshift);
+ info->sectorsize = 1 << priv->pageshift;
+#endif
+ info->startsector = 0;
+ info->parent[0] = '\0';
+ ret = OK;
+ }
+ }
+ break;
+
case MTDIOC_BULKERASE:
{
/* Erase the entire device */
diff --git a/drivers/mtd/mx25rxx.c b/drivers/mtd/mx25rxx.c
index 2b092d3..1909261 100644
--- a/drivers/mtd/mx25rxx.c
+++ b/drivers/mtd/mx25rxx.c
@@ -753,6 +753,29 @@ int mx25rxx_ioctl(FAR struct mtd_dev_s *dev, int cmd, unsigned long arg)
}
break;
+ case BIOC_PARTINFO:
+ {
+ FAR struct partition_info_s *info =
+ (FAR struct partition_info_s *)arg;
+ if (info != NULL)
+ {
+ info->magic = 0;
+#ifdef CONFIG_MX25RXX_SECTOR512
+ info->numsectors = priv->nsectors <<
+ (priv->sectorshift - MX25RXX_SECTOR512_SHIFT);
+ info->sectorsize = 1 << MX25RXX_SECTOR512_SHIFT;
+#else
+ info->numsectors = priv->nsectors <<
+ (priv->sectorshift - priv->pageshift);
+ info->sectorsize = 1 << priv->pageshift;
+#endif
+ info->startsector = 0;
+ info->parent[0] = '\0';
+ ret = OK;
+ }
+ }
+ break;
+
case MTDIOC_BULKERASE:
{
/* Erase the entire device */
diff --git a/drivers/mtd/mx35.c b/drivers/mtd/mx35.c
index d9de598..cdf59fd 100644
--- a/drivers/mtd/mx35.c
+++ b/drivers/mtd/mx35.c
@@ -811,6 +811,23 @@ static int mx35_ioctl(FAR struct mtd_dev_s *dev, int cmd, unsigned long arg)
}
break;
+ case BIOC_PARTINFO:
+ {
+ FAR struct partition_info_s *info =
+ (FAR struct partition_info_s *)arg;
+ if (info != NULL)
+ {
+ info->magic = 0;
+ info->numsectors = priv->nsectors <<
+ (priv->sectorshift - priv->pageshift);
+ info->sectorsize = 1 << priv->pageshift;
+ info->startsector = 0;
+ info->parent[0] = '\0';
+ ret = OK;
+ }
+ }
+ break;
+
case MTDIOC_BULKERASE:
{
/* Erase the entire device */
diff --git a/drivers/mtd/n25qxxx.c b/drivers/mtd/n25qxxx.c
index cb3ca0a..3321832 100644
--- a/drivers/mtd/n25qxxx.c
+++ b/drivers/mtd/n25qxxx.c
@@ -1401,6 +1401,29 @@ static int n25qxxx_ioctl(FAR struct mtd_dev_s *dev,
}
break;
+ case BIOC_PARTINFO:
+ {
+ FAR struct partition_info_s *info =
+ (FAR struct partition_info_s *)arg;
+ if (info != NULL)
+ {
+ info->magic = 0;
+#ifdef CONFIG_N25QXXX_SECTOR512
+ info->numsectors = priv->nsectors <<
+ (priv->sectorshift - N25QXXX_SECTOR512_SHIFT);
+ info->sectorsize = 1 << N25QXXX_SECTOR512_SHIFT;
+#else
+ info->numsectors = priv->nsectors <<
+ (priv->sectorshift - priv->pageshift);
+ info->sectorsize = 1 << priv->pageshift;
+#endif
+ info->startsector = 0;
+ info->parent[0] = '\0';
+ ret = OK;
+ }
+ }
+ break;
+
case MTDIOC_BULKERASE:
{
/* Erase the entire device */
diff --git a/drivers/mtd/rammtd.c b/drivers/mtd/rammtd.c
index a123d2d..b1396bfe 100644
--- a/drivers/mtd/rammtd.c
+++ b/drivers/mtd/rammtd.c
@@ -399,6 +399,24 @@ static int ram_ioctl(FAR struct mtd_dev_s *dev, int cmd, unsigned long arg)
}
break;
+ case BIOC_PARTINFO:
+ {
+ FAR struct partition_info_s *info =
+ (FAR struct partition_info_s *)arg;
+ if (info != NULL)
+ {
+ info->magic = 0;
+ info->numsectors = priv->nblocks *
+ CONFIG_RAMMTD_ERASESIZE /
+ CONFIG_RAMMTD_BLOCKSIZE;
+ info->sectorsize = CONFIG_RAMMTD_BLOCKSIZE;
+ info->startsector = 0;
+ info->parent[0] = '\0';
+ ret = OK;
+ }
+ }
+ break;
+
case MTDIOC_BULKERASE:
{
size_t size = priv->nblocks * CONFIG_RAMMTD_ERASESIZE;
diff --git a/drivers/mtd/ramtron.c b/drivers/mtd/ramtron.c
index a06b73c..0495af0 100644
--- a/drivers/mtd/ramtron.c
+++ b/drivers/mtd/ramtron.c
@@ -954,6 +954,23 @@ static int ramtron_ioctl(FAR struct mtd_dev_s *dev,
}
break;
+ case BIOC_PARTINFO:
+ {
+ FAR struct partition_info_s *info =
+ (FAR struct partition_info_s *)arg;
+ if (info != NULL)
+ {
+ info->magic = 0;
+ info->numsectors = priv->nsectors *
+ (priv->sectorshift - priv->pageshift);
+ info->sectorsize = 1 << priv->pageshift;
+ info->startsector = 0;
+ info->parent[0] = '\0';
+ ret = OK;
+ }
+ }
+ break;
+
case MTDIOC_BULKERASE:
finfo("BULDERASE: Makes no sense in ramtron.\n");
finfo("BULDERASE: Let's confirm operation as OK\n");
diff --git a/drivers/mtd/s25fl1.c b/drivers/mtd/s25fl1.c
index dcf6d2a..0688cdf 100644
--- a/drivers/mtd/s25fl1.c
+++ b/drivers/mtd/s25fl1.c
@@ -1447,6 +1447,29 @@ static int s25fl1_ioctl(FAR struct mtd_dev_s *dev,
}
break;
+ case BIOC_PARTINFO:
+ {
+ FAR struct partition_info_s *info =
+ (FAR struct partition_info_s *)arg;
+ if (info != NULL)
+ {
+ info->magic = 0;
+#ifdef CONFIG_S25FL1_SECTOR512
+ info->numsectors = priv->nsectors <<
+ (priv->sectorshift - S25FL1_SECTOR512_SHIFT);
+ info->sectorsize = 1 << S25FL1_SECTOR512_SHIFT;
+#else
+ info->numsectors = priv->nsectors <<
+ (priv->sectorshift - priv->pageshift);
+ info->sectorsize = 1 << priv->pageshift;
+#endif
+ info->startsector = 0;
+ info->parent[0] = '\0';
+ ret = OK;
+ }
+ }
+ break;
+
case MTDIOC_BULKERASE:
{
/* Erase the entire device */
diff --git a/drivers/mtd/sector512.c b/drivers/mtd/sector512.c
index 0322b1b..b0868c6 100644
--- a/drivers/mtd/sector512.c
+++ b/drivers/mtd/sector512.c
@@ -543,6 +543,22 @@ static int s512_ioctl(FAR struct mtd_dev_s *dev, int cmd, unsigned long arg)
}
break;
+ case BIOC_PARTINFO:
+ {
+ FAR struct partition_info_s *info =
+ (FAR struct partition_info_s *)arg;
+ if (info != NULL)
+ {
+ info->magic = 0;
+ info->numsectors = priv->neblocks * priv->stdperblock;
+ info->sectorsize = SECTOR_512;
+ info->startsector = 0;
+ info->parent[0] = '\0';
+ ret = OK;
+ }
+ }
+ break;
+
case MTDIOC_BULKERASE:
{
/* Erase the entire device */
diff --git a/drivers/mtd/skeleton.c b/drivers/mtd/skeleton.c
index ad8d211..681bcb4 100644
--- a/drivers/mtd/skeleton.c
+++ b/drivers/mtd/skeleton.c
@@ -259,6 +259,22 @@ static int skel_ioctl(FAR struct mtd_dev_s *dev, int cmd, unsigned long arg)
}
break;
+ case BIOC_PARTINFO:
+ {
+ FAR struct partition_info_s *info =
+ (FAR struct partition_info_s *)arg;
+ if (info != NULL)
+ {
+ info->magic = 0;
+ info->numsectors = 8192;
+ info->sectorsize = 512;
+ info->startsector = 0;
+ info->parent[0] = '\0';
+ ret = OK;
+ }
+ }
+ break;
+
case BIOC_XIPBASE:
{
FAR void **ppv = (FAR void**)arg;
diff --git a/drivers/mtd/sst25.c b/drivers/mtd/sst25.c
index 48905da..f319f9d 100644
--- a/drivers/mtd/sst25.c
+++ b/drivers/mtd/sst25.c
@@ -1195,6 +1195,28 @@ static int sst25_ioctl(FAR struct mtd_dev_s *dev, int cmd, unsigned long arg)
}
break;
+ case BIOC_PARTINFO:
+ {
+ FAR struct partition_info_s *info =
+ (FAR struct partition_info_s *)arg;
+ if (info != NULL)
+ {
+ info->magic = 0;
+#ifdef CONFIG_SST25_SECTOR512
+ info->numsectors = priv->nsectors <<
+ (priv->sectorshift - SST25_SECTOR_SHIFT);
+ info->sectorsize = 1 << SST25_SECTOR_SHIFT;
+#else
+ info->numsectors = priv->nsectors;
+ info->sectorsize = 1 << priv->sectorshift;
+#endif
+ info->startsector = 0;
+ info->parent[0] = '\0';
+ ret = OK;
+ }
+ }
+ break;
+
case MTDIOC_BULKERASE:
{
/* Erase the entire device */
diff --git a/drivers/mtd/sst25xx.c b/drivers/mtd/sst25xx.c
index eb0c88c..bfd2f6a 100644
--- a/drivers/mtd/sst25xx.c
+++ b/drivers/mtd/sst25xx.c
@@ -893,6 +893,23 @@ static int sst25xx_ioctl(FAR struct mtd_dev_s *dev, int cmd,
}
break;
+ case BIOC_PARTINFO:
+ {
+ FAR struct partition_info_s *info =
+ (FAR struct partition_info_s *)arg;
+ if (info != NULL)
+ {
+ info->magic = 0;
+ info->numsectors = priv->nsectors *
+ (priv->sectorshift - priv->pageshift);
+ info->sectorsize = 1 << priv->pageshift;
+ info->startsector = 0;
+ info->parent[0] = '\0';
+ ret = OK;
+ }
+ }
+ break;
+
case MTDIOC_BULKERASE:
{
/* Erase the entire device */
diff --git a/drivers/mtd/sst26.c b/drivers/mtd/sst26.c
index ddff19f..1226a3c 100644
--- a/drivers/mtd/sst26.c
+++ b/drivers/mtd/sst26.c
@@ -898,6 +898,23 @@ static int sst26_ioctl(FAR struct mtd_dev_s *dev, int cmd, unsigned long arg)
}
break;
+ case BIOC_PARTINFO:
+ {
+ FAR struct partition_info_s *info =
+ (FAR struct partition_info_s *)arg;
+ if (info != NULL)
+ {
+ info->magic = 0;
+ info->numsectors = priv->nsectors *
+ (priv->sectorshift - priv->pageshift);
+ info->sectorsize = 1 << priv->pageshift;
+ info->startsector = 0;
+ info->parent[0] = '\0';
+ ret = OK;
+ }
+ }
+ break;
+
case MTDIOC_BULKERASE:
{
/* Erase the entire device */
diff --git a/drivers/mtd/sst39vf.c b/drivers/mtd/sst39vf.c
index a1114a8..f4205cf 100644
--- a/drivers/mtd/sst39vf.c
+++ b/drivers/mtd/sst39vf.c
@@ -320,12 +320,12 @@ static void sst39vf_writeseq(FAR const struct sst39vf_wrinfo_s *wrinfo,
*
* "Toggle Bits (DQ6 and DQ2). During the internal Program or Erase
* operation, any consecutive attempts to read DQ6 will produce
- * alternating �1�s and �0�s, i.e., toggling between 1 and 0. When
+ * alternating 1s and 0s, i.e., toggling between 1 and 0. When
* the internal Program or Erase operation is completed, the DQ6 bit
* will stop toggling. The device is then ready for the next operation.
* For Sector-, Block-, or Chip-Erase, the toggle bit (DQ6) is valid
* after the rising edge of sixth WE# (or CE#) pulse. DQ6 will be set to
- * �1� if a Read operation is attempted on an Erase-Suspended
+ * 1 if a Read operation is attempted on an Erase-Suspended
* Sector/Block. If Program operation is initiated in a sector/block not
* selected in Erase-Suspend mode, DQ6 will toggle.
*
@@ -377,7 +377,7 @@ static int sst39vf_waittoggle(FAR const struct sst39vf_wrinfo_s *wrinfo,
* Erase the entire chip
*
* "The SST39VF160x/320x provide a Chip-Erase operation, which allows the
- * user to erase the entire memory array to the �1� state. This is
+ * user to erase the entire memory array to the 1 state. This is
* useful when the entire device must be quickly erased. The Chip-Erase
* operation is initiated by executing a six-byte command sequence with
* Chip-Erase command (10H) at address 5555H in the last byte sequence.
@@ -534,7 +534,7 @@ static int sst39vf_sectorerase(FAR struct sst39vf_dev_s *priv,
* CE# or WE#, whichever occurs first. The third step is the internal
* Program operation which is initiated after the rising edge of the
* fourth WE# or CE#, whichever occurs first. The Program operation, once
- * initiated, will be completed within 10 �s. .... During the Program
+ * initiated, will be completed within 10s. .... During the Program
* operation, the only valid reads are Data# Polling and Toggle Bit.
* During the internal Program operation, the host is free to perform
* additional tasks. Any commands issued during the internal Program
@@ -736,6 +736,22 @@ static int sst39vf_ioctl(FAR struct mtd_dev_s *dev,
}
break;
+ case BIOC_PARTINFO:
+ {
+ FAR struct partition_info_s *info =
+ (FAR struct partition_info_s *)arg;
+ if (info != NULL)
+ {
+ info->magic = 0;
+ info->numsectors = priv->chip->nsectors;
+ info->sectorsize = priv->chip->sectorsize;
+ info->startsector = 0;
+ info->parent[0] = '\0';
+ ret = OK;
+ }
+ }
+ break;
+
case MTDIOC_BULKERASE:
{
/* Erase the entire chip */
diff --git a/drivers/mtd/w25.c b/drivers/mtd/w25.c
index 44ac3ca..5533483 100644
--- a/drivers/mtd/w25.c
+++ b/drivers/mtd/w25.c
@@ -1323,6 +1323,29 @@ static int w25_ioctl(FAR struct mtd_dev_s *dev, int cmd, unsigned long arg)
}
break;
+ case BIOC_PARTINFO:
+ {
+ FAR struct partition_info_s *info =
+ (FAR struct partition_info_s *)arg;
+ if (info != NULL)
+ {
+ info->magic = 0;
+#ifdef CONFIG_W25_SECTOR512
+ info->numsectors = priv->nsectors <<
+ (W25_SECTOR_SHIFT - W25_SECTOR512_SHIFT);
+ info->sectorsize = 1 << W25_SECTOR512_SHIFT;
+#else
+ info->numsectors = priv->nsectors *
+ W25_SECTOR_SIZE / W25_PAGE_SIZE;
+ info->sectorsize = W25_PAGE_SIZE;
+#endif
+ info->startsector = 0;
+ info->parent[0] = '\0';
+ ret = OK;
+ }
+ }
+ break;
+
case MTDIOC_BULKERASE:
{
/* Erase the entire device */
diff --git a/drivers/mtd/w25qxxxjv.c b/drivers/mtd/w25qxxxjv.c
index b371ce6..5c8560c 100644
--- a/drivers/mtd/w25qxxxjv.c
+++ b/drivers/mtd/w25qxxxjv.c
@@ -1407,6 +1407,29 @@ static int w25qxxxjv_ioctl(FAR struct mtd_dev_s *dev,
}
break;
+ case BIOC_PARTINFO:
+ {
+ FAR struct partition_info_s *info =
+ (FAR struct partition_info_s *)arg;
+ if (info != NULL)
+ {
+ info->magic = 0;
+#ifdef CONFIG_W25QXXXJV_SECTOR512
+ info->numsectors = priv->nsectors <<
+ (priv->sectorshift - W25QXXXJV_SECTOR512_SHIFT);
+ info->sectorsize = 1 << W25QXXXJV_SECTOR512_SHIFT;
+#else
+ info->numsectors = priv->nsectors <<
+ (priv->sectorshift - priv->pageshift);
+ info->sectorsize = 1 << priv->pageshift;
+#endif
+ info->startsector = 0;
+ info->parent[0] = '\0';
+ ret = OK;
+ }
+ }
+ break;
+
case MTDIOC_BULKERASE:
{
/* Erase the entire device */