[MTD] Remove nand writev support
[deliverable/linux.git] / drivers / mtd / nand / nand_base.c
index 778535006c83432ceafeff1e2d8e203bcc4c3417..9aaeb3aa9d4d592baf6c8b403ac4853d8861f41b 100644 (file)
@@ -151,11 +151,6 @@ static int nand_write_ecc(struct mtd_info *mtd, loff_t to, size_t len,
                          struct nand_oobinfo *oobsel);
 static int nand_write_oob(struct mtd_info *mtd, loff_t to, size_t len,
                          size_t *retlen, const uint8_t *buf);
-static int nand_writev(struct mtd_info *mtd, const struct kvec *vecs,
-                      unsigned long count, loff_t to, size_t *retlen);
-static int nand_writev_ecc(struct mtd_info *mtd, const struct kvec *vecs,
-                          unsigned long count, loff_t to, size_t *retlen,
-                          uint8_t *eccbuf, struct nand_oobinfo *oobsel);
 static int nand_erase(struct mtd_info *mtd, struct erase_info *instr);
 static void nand_sync(struct mtd_info *mtd);
 
@@ -1856,187 +1851,6 @@ static int nand_write_oob(struct mtd_info *mtd, loff_t to, size_t len, size_t *r
        return ret;
 }
 
-/**
- * nand_writev - [MTD Interface] compabilty function for nand_writev_ecc
- * @mtd:       MTD device structure
- * @vecs:      the iovectors to write
- * @count:     number of vectors
- * @to:                offset to write to
- * @retlen:    pointer to variable to store the number of written bytes
- *
- * NAND write with kvec. This just calls the ecc function
- */
-static int nand_writev(struct mtd_info *mtd, const struct kvec *vecs, unsigned long count,
-                      loff_t to, size_t *retlen)
-{
-       return (nand_writev_ecc(mtd, vecs, count, to, retlen, NULL, NULL));
-}
-
-/**
- * nand_writev_ecc - [MTD Interface] write with iovec with ecc
- * @mtd:       MTD device structure
- * @vecs:      the iovectors to write
- * @count:     number of vectors
- * @to:                offset to write to
- * @retlen:    pointer to variable to store the number of written bytes
- * @eccbuf:    filesystem supplied oob data buffer
- * @oobsel:    oob selection structure
- *
- * NAND write with iovec with ecc
- */
-static int nand_writev_ecc(struct mtd_info *mtd, const struct kvec *vecs, unsigned long count,
-                          loff_t to, size_t *retlen, uint8_t *eccbuf, struct nand_oobinfo *oobsel)
-{
-       int i, page, len, total_len, ret = -EIO, written = 0, chipnr;
-       int oob, numpages, autoplace = 0, startpage;
-       struct nand_chip *this = mtd->priv;
-       int ppblock = (1 << (this->phys_erase_shift - this->page_shift));
-       uint8_t *oobbuf, *bufstart;
-
-       /* Preset written len for early exit */
-       *retlen = 0;
-
-       /* Calculate total length of data */
-       total_len = 0;
-       for (i = 0; i < count; i++)
-               total_len += (int)vecs[i].iov_len;
-
-       DEBUG(MTD_DEBUG_LEVEL3, "nand_writev: to = 0x%08x, len = %i, count = %ld\n", (unsigned int)to, (unsigned int)total_len, count);
-
-       /* Do not allow write past end of page */
-       if ((to + total_len) > mtd->size) {
-               DEBUG(MTD_DEBUG_LEVEL0, "nand_writev: Attempted write past end of device\n");
-               return -EINVAL;
-       }
-
-       /* reject writes, which are not page aligned */
-       if (NOTALIGNED(to) || NOTALIGNED(total_len)) {
-               printk(KERN_NOTICE "nand_write_ecc: Attempt to write not page aligned data\n");
-               return -EINVAL;
-       }
-
-       /* Grab the lock and see if the device is available */
-       nand_get_device(this, mtd, FL_WRITING);
-
-       /* Get the current chip-nr */
-       chipnr = (int)(to >> this->chip_shift);
-       /* Select the NAND device */
-       this->select_chip(mtd, chipnr);
-
-       /* Check, if it is write protected */
-       if (nand_check_wp(mtd))
-               goto out;
-
-       /* if oobsel is NULL, use chip defaults */
-       if (oobsel == NULL)
-               oobsel = &mtd->oobinfo;
-
-       /* Autoplace of oob data ? Use the default placement scheme */
-       if (oobsel->useecc == MTD_NANDECC_AUTOPLACE) {
-               oobsel = this->autooob;
-               autoplace = 1;
-       }
-       if (oobsel->useecc == MTD_NANDECC_AUTOPL_USR)
-               autoplace = 1;
-
-       /* Setup start page */
-       page = (int)(to >> this->page_shift);
-       /* Invalidate the page cache, if we write to the cached page */
-       if (page <= this->pagebuf && this->pagebuf < ((to + total_len) >> this->page_shift))
-               this->pagebuf = -1;
-
-       startpage = page & this->pagemask;
-
-       /* Loop until all kvec' data has been written */
-       len = 0;
-       while (count) {
-               /* If the given tuple is >= pagesize then
-                * write it out from the iov
-                */
-               if ((vecs->iov_len - len) >= mtd->writesize) {
-                       /* Calc number of pages we can write
-                        * out of this iov in one go */
-                       numpages = (vecs->iov_len - len) >> this->page_shift;
-                       /* Do not cross block boundaries */
-                       numpages = min(ppblock - (startpage & (ppblock - 1)), numpages);
-                       oobbuf = nand_prepare_oobbuf(mtd, NULL, oobsel, autoplace, numpages);
-                       bufstart = (uint8_t *) vecs->iov_base;
-                       bufstart += len;
-                       this->data_poi = bufstart;
-                       oob = 0;
-                       for (i = 1; i <= numpages; i++) {
-                               /* Write one page. If this is the last page to write
-                                * then use the real pageprogram command, else select
-                                * cached programming if supported by the chip.
-                                */
-                               ret = nand_write_page(mtd, this, page & this->pagemask,
-                                                     &oobbuf[oob], oobsel, i != numpages);
-                               if (ret)
-                                       goto out;
-                               this->data_poi += mtd->writesize;
-                               len += mtd->writesize;
-                               oob += mtd->oobsize;
-                               page++;
-                       }
-                       /* Check, if we have to switch to the next tuple */
-                       if (len >= (int)vecs->iov_len) {
-                               vecs++;
-                               len = 0;
-                               count--;
-                       }
-               } else {
-                       /* We must use the internal buffer, read data out of each
-                        * tuple until we have a full page to write
-                        */
-                       int cnt = 0;
-                       while (cnt < mtd->writesize) {
-                               if (vecs->iov_base != NULL && vecs->iov_len)
-                                       this->data_buf[cnt++] = ((uint8_t *) vecs->iov_base)[len++];
-                               /* Check, if we have to switch to the next tuple */
-                               if (len >= (int)vecs->iov_len) {
-                                       vecs++;
-                                       len = 0;
-                                       count--;
-                               }
-                       }
-                       this->pagebuf = page;
-                       this->data_poi = this->data_buf;
-                       bufstart = this->data_poi;
-                       numpages = 1;
-                       oobbuf = nand_prepare_oobbuf(mtd, NULL, oobsel, autoplace, numpages);
-                       ret = nand_write_page(mtd, this, page & this->pagemask, oobbuf, oobsel, 0);
-                       if (ret)
-                               goto out;
-                       page++;
-               }
-
-               this->data_poi = bufstart;
-               ret = nand_verify_pages(mtd, this, startpage, numpages, oobbuf, oobsel, chipnr, 0);
-               if (ret)
-                       goto out;
-
-               written += mtd->writesize * numpages;
-               /* All done ? */
-               if (!count)
-                       break;
-
-               startpage = page & this->pagemask;
-               /* Check, if we cross a chip boundary */
-               if (!startpage) {
-                       chipnr++;
-                       this->select_chip(mtd, -1);
-                       this->select_chip(mtd, chipnr);
-               }
-       }
-       ret = 0;
- out:
-       /* Deselect and wake up anyone waiting on the device */
-       nand_release_device(mtd);
-
-       *retlen = written;
-       return ret;
-}
-
 /**
  * single_erease_cmd - [GENERIC] NAND standard block erase command function
  * @mtd:       MTD device structure
@@ -2718,8 +2532,6 @@ int nand_scan(struct mtd_info *mtd, int maxchips)
        mtd->read_oob = nand_read_oob;
        mtd->write_oob = nand_write_oob;
        mtd->readv = NULL;
-       mtd->writev = nand_writev;
-       mtd->writev_ecc = nand_writev_ecc;
        mtd->sync = nand_sync;
        mtd->lock = NULL;
        mtd->unlock = NULL;
This page took 0.033759 seconds and 5 git commands to generate.