diff --git a/arch/arm/src/cxd56xx/cxd56_sfc.c b/arch/arm/src/cxd56xx/cxd56_sfc.c index 856a94a3c12..ec81dad34e9 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 f5a92fc8d55..b56e2fd39a2 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 206fb8fa22a..2aa718ab2af 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 70572953262..86ad50c2f83 100644 --- a/arch/arm/src/rtl8720c/ameba_flash.c +++ b/arch/arm/src/rtl8720c/ameba_flash.c @@ -244,6 +244,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: { diff --git a/arch/arm/src/tiva/common/tiva_flash.c b/arch/arm/src/tiva/common/tiva_flash.c index 5b4e2e9a09c..28747b8e764 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 9a146752d51..225f741275a 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 24b48a1e875..a9bfe59a802 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 344e95b94d1..b157e5ec25d 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 07df334ad9e..51d51124334 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 b7852c78aee..b89d04b5033 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 98425f67319..8594064ec7b 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 6166537ef18..04bc4c94b2a 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 f1e3fc9b889..ca800e8f898 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 ee7879b545b..55815beae76 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 e57be578bf9..fb3c4e0bb09 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 d327a7c0e8a..087519f5c02 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 e19b0c989e8..6e2b43d175d 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 e46d8cfc817..614fd348b28 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 4c9ed0d644b..24ba2c20866 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 72ad1b6418a..1a4d3457a26 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 52f700bab13..72bf491e029 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 2b092d33482..19092610ec7 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 d9de59839b3..cdf59fd3aca 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 cb3ca0a391e..3321832a9fd 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 a123d2d7705..b1396bfe865 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 a06b73c27ff..0495af0298b 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 dcf6d2ace87..0688cdf7016 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 0322b1b0aad..b0868c6683f 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 ad8d2118927..681bcb4aed8 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 48905da7620..f319f9d5cf0 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 eb0c88cc804..bfd2f6a94b6 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 ddff19f26ae..1226a3cfca3 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 a1114a86ddf..f4205cf140e 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 44ac3cab161..5533483a9ed 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 b371ce6b606..5c8560c4ece 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 */