Lines Matching full:this
44 * This may be due to the different revisions of the ASIC controller built-in or
46 * this:
108 /* This is inline, to optimise the common case, where it's ready instantly */ in DoC_WaitReady()
245 /* This is needed for correctly ECC calculation */ in DoC_ReadBuf()
373 return 1; /* This is the same as the first */ in DoC_IdentChip()
418 static void DoC_ScanChips(struct DiskOnChip *this, int maxchips) in DoC_ScanChips() argument
424 this->numchips = 0; in DoC_ScanChips()
425 this->mfr = 0; in DoC_ScanChips()
426 this->id = 0; in DoC_ScanChips()
434 ret = DoC_IdentChip(this, floor, chip); in DoC_ScanChips()
437 this->numchips++; in DoC_ScanChips()
443 if (!this->numchips) { in DoC_ScanChips()
449 this->chips = kmalloc(sizeof(struct Nand) * this->numchips, GFP_KERNEL); in DoC_ScanChips()
450 if (!this->chips) { in DoC_ScanChips()
461 this->chips[ret].floor = floor; in DoC_ScanChips()
462 this->chips[ret].chip = chip; in DoC_ScanChips()
463 this->chips[ret].curadr = 0; in DoC_ScanChips()
464 this->chips[ret].curmode = 0x50; in DoC_ScanChips()
470 this->totlen = this->numchips * (1 << this->chipshift); in DoC_ScanChips()
473 this->numchips, this->totlen >> 20); in DoC_ScanChips()
482 /* Use the alias resolution register which was set aside for this in DoC2k_is_alias()
485 * the other. It's unclear if this register is usuable in the in DoC2k_is_alias()
506 /* This routine is found from the docprobe code by symbol_get(),
507 * which will bump the use count of this module. */
510 struct DiskOnChip *this = mtd->priv; in DoC2k_init() local
520 if (DoC2k_is_alias(old, this)) { in DoC2k_init()
523 this->physadr); in DoC2k_init()
524 iounmap(this->virtadr); in DoC2k_init()
535 switch (this->ChipID) { in DoC2k_init()
538 this->ioreg = DoC_Mil_CDSN_IO; in DoC2k_init()
540 this->ChipID = DOC_ChipID_DocMil; in DoC2k_init()
545 this->ioreg = DoC_2k_CDSN_IO; in DoC2k_init()
550 this->ioreg = DoC_Mil_CDSN_IO; in DoC2k_init()
554 printk("Unknown ChipID 0x%02x\n", this->ChipID); in DoC2k_init()
556 iounmap(this->virtadr); in DoC2k_init()
561 this->physadr); in DoC2k_init()
573 this->curfloor = -1; in DoC2k_init()
574 this->curchip = -1; in DoC2k_init()
575 mutex_init(&this->lock); in DoC2k_init()
578 DoC_ScanChips(this, maxchips); in DoC2k_init()
580 if (!this->totlen) { in DoC2k_init()
582 iounmap(this->virtadr); in DoC2k_init()
584 this->nextdoc = doc2klist; in DoC2k_init()
586 mtd->size = this->totlen; in DoC2k_init()
587 mtd->erasesize = this->erasesize; in DoC2k_init()
597 struct DiskOnChip *this = mtd->priv; in doc_read() local
598 void __iomem *docptr = this->virtadr; in doc_read()
606 if (from >= this->totlen) in doc_read()
609 mutex_lock(&this->lock); in doc_read()
629 mychip = &this->chips[from >> (this->chipshift)]; in doc_read()
631 if (this->curfloor != mychip->floor) { in doc_read()
632 DoC_SelectFloor(this, mychip->floor); in doc_read()
633 DoC_SelectChip(this, mychip->chip); in doc_read()
634 } else if (this->curchip != mychip->chip) { in doc_read()
635 DoC_SelectChip(this, mychip->chip); in doc_read()
638 this->curfloor = mychip->floor; in doc_read()
639 this->curchip = mychip->chip; in doc_read()
641 DoC_Command(this, in doc_read()
642 (!this->page256 in doc_read()
645 DoC_Address(this, ADDR_COLUMN_PAGE, from, CDSN_CTRL_WP, in doc_read()
653 if (this->page256 && from + len > (from | 0xff) + 1) { in doc_read()
655 DoC_ReadBuf(this, buf, len256); in doc_read()
657 DoC_Command(this, NAND_CMD_READ0, CDSN_CTRL_WP); in doc_read()
658 DoC_Address(this, ADDR_COLUMN_PAGE, from + len256, in doc_read()
662 DoC_ReadBuf(this, &buf[len256], len - len256); in doc_read()
668 /* Note: this will work even with 2M x 8bit devices as */ in doc_read()
670 DoC_ReadBuf(this, eccbuf, 6); in doc_read()
673 if (DoC_is_Millennium(this)) { in doc_read()
704 read. Not that this can be told to in doc_read()
725 DoC_WaitReady(this); in doc_read()
733 mutex_unlock(&this->lock); in doc_read()
741 struct DiskOnChip *this = mtd->priv; in doc_write() local
743 void __iomem *docptr = this->virtadr; in doc_write()
752 if (to >= this->totlen) in doc_write()
755 mutex_lock(&this->lock); in doc_write()
776 mychip = &this->chips[to >> (this->chipshift)]; in doc_write()
778 if (this->curfloor != mychip->floor) { in doc_write()
779 DoC_SelectFloor(this, mychip->floor); in doc_write()
780 DoC_SelectChip(this, mychip->chip); in doc_write()
781 } else if (this->curchip != mychip->chip) { in doc_write()
782 DoC_SelectChip(this, mychip->chip); in doc_write()
785 this->curfloor = mychip->floor; in doc_write()
786 this->curchip = mychip->chip; in doc_write()
789 DoC_Command(this, NAND_CMD_RESET, CDSN_CTRL_WP); in doc_write()
790 DoC_Command(this, in doc_write()
791 (!this->page256 in doc_write()
795 DoC_Command(this, NAND_CMD_SEQIN, 0); in doc_write()
796 DoC_Address(this, ADDR_COLUMN_PAGE, to, 0, CDSN_CTRL_ECC_IO); in doc_write()
803 if (this->page256 && to + len > (to | 0xff) + 1) { in doc_write()
805 DoC_WriteBuf(this, buf, len256); in doc_write()
807 DoC_Command(this, NAND_CMD_PAGEPROG, 0); in doc_write()
809 DoC_Command(this, NAND_CMD_STATUS, CDSN_CTRL_WP); in doc_write()
813 DoC_Delay(this, 2); in doc_write()
815 if (ReadDOC_(docptr, this->ioreg) & 1) { in doc_write()
819 mutex_unlock(&this->lock); in doc_write()
823 DoC_Command(this, NAND_CMD_SEQIN, 0); in doc_write()
824 DoC_Address(this, ADDR_COLUMN_PAGE, to + len256, 0, in doc_write()
828 DoC_WriteBuf(this, &buf[len256], len - len256); in doc_write()
832 if (DoC_is_Millennium(this)) { in doc_write()
837 WriteDOC_(0, docptr, this->ioreg); in doc_write()
838 WriteDOC_(0, docptr, this->ioreg); in doc_write()
839 WriteDOC_(0, docptr, this->ioreg); in doc_write()
859 DoC_Command(this, NAND_CMD_PAGEPROG, 0); in doc_write()
861 DoC_Command(this, NAND_CMD_STATUS, CDSN_CTRL_WP); in doc_write()
864 if (DoC_is_Millennium(this)) { in doc_write()
869 DoC_Delay(this, 2); in doc_write()
870 status = ReadDOC_(docptr, this->ioreg); in doc_write()
877 mutex_unlock(&this->lock); in doc_write()
898 mutex_unlock(&this->lock); in doc_write()
908 mutex_unlock(&this->lock); in doc_write()
915 struct DiskOnChip *this = mtd->priv; in doc_read_oob() local
925 mutex_lock(&this->lock); in doc_read_oob()
927 mychip = &this->chips[ofs >> this->chipshift]; in doc_read_oob()
929 if (this->curfloor != mychip->floor) { in doc_read_oob()
930 DoC_SelectFloor(this, mychip->floor); in doc_read_oob()
931 DoC_SelectChip(this, mychip->chip); in doc_read_oob()
932 } else if (this->curchip != mychip->chip) { in doc_read_oob()
933 DoC_SelectChip(this, mychip->chip); in doc_read_oob()
935 this->curfloor = mychip->floor; in doc_read_oob()
936 this->curchip = mychip->chip; in doc_read_oob()
940 if (this->page256) { in doc_read_oob()
947 DoC_Command(this, NAND_CMD_READOOB, CDSN_CTRL_WP); in doc_read_oob()
948 DoC_Address(this, ADDR_COLUMN_PAGE, ofs, CDSN_CTRL_WP, 0); in doc_read_oob()
953 if (this->page256 && ofs + len > (ofs | 0x7) + 1) { in doc_read_oob()
955 DoC_ReadBuf(this, buf, len256); in doc_read_oob()
957 DoC_Command(this, NAND_CMD_READOOB, CDSN_CTRL_WP); in doc_read_oob()
958 DoC_Address(this, ADDR_COLUMN_PAGE, ofs & (~0x1ff), in doc_read_oob()
962 DoC_ReadBuf(this, &buf[len256], len - len256); in doc_read_oob()
969 ret = DoC_WaitReady(this); in doc_read_oob()
971 mutex_unlock(&this->lock); in doc_read_oob()
979 struct DiskOnChip *this = mtd->priv; in doc_write_oob_nolock() local
981 void __iomem *docptr = this->virtadr; in doc_write_oob_nolock()
982 struct Nand *mychip = &this->chips[ofs >> this->chipshift]; in doc_write_oob_nolock()
990 if (this->curfloor != mychip->floor) { in doc_write_oob_nolock()
991 DoC_SelectFloor(this, mychip->floor); in doc_write_oob_nolock()
992 DoC_SelectChip(this, mychip->chip); in doc_write_oob_nolock()
993 } else if (this->curchip != mychip->chip) { in doc_write_oob_nolock()
994 DoC_SelectChip(this, mychip->chip); in doc_write_oob_nolock()
996 this->curfloor = mychip->floor; in doc_write_oob_nolock()
997 this->curchip = mychip->chip; in doc_write_oob_nolock()
1004 DoC_Command(this, NAND_CMD_RESET, CDSN_CTRL_WP); in doc_write_oob_nolock()
1007 DoC_Command(this, NAND_CMD_READOOB, CDSN_CTRL_WP); in doc_write_oob_nolock()
1011 if (this->page256) { in doc_write_oob_nolock()
1019 DoC_Command(this, NAND_CMD_SEQIN, 0); in doc_write_oob_nolock()
1020 DoC_Address(this, ADDR_COLUMN_PAGE, ofs, 0, 0); in doc_write_oob_nolock()
1025 if (this->page256 && ofs + len > (ofs | 0x7) + 1) { in doc_write_oob_nolock()
1027 DoC_WriteBuf(this, buf, len256); in doc_write_oob_nolock()
1029 DoC_Command(this, NAND_CMD_PAGEPROG, 0); in doc_write_oob_nolock()
1030 DoC_Command(this, NAND_CMD_STATUS, 0); in doc_write_oob_nolock()
1033 if (DoC_is_Millennium(this)) { in doc_write_oob_nolock()
1038 DoC_Delay(this, 2); in doc_write_oob_nolock()
1039 status = ReadDOC_(docptr, this->ioreg); in doc_write_oob_nolock()
1048 DoC_Command(this, NAND_CMD_SEQIN, 0); in doc_write_oob_nolock()
1049 DoC_Address(this, ADDR_COLUMN_PAGE, ofs & (~0x1ff), 0, 0); in doc_write_oob_nolock()
1052 DoC_WriteBuf(this, &buf[len256], len - len256); in doc_write_oob_nolock()
1054 DoC_Command(this, NAND_CMD_PAGEPROG, 0); in doc_write_oob_nolock()
1055 DoC_Command(this, NAND_CMD_STATUS, 0); in doc_write_oob_nolock()
1058 if (DoC_is_Millennium(this)) { in doc_write_oob_nolock()
1063 DoC_Delay(this, 2); in doc_write_oob_nolock()
1064 status = ReadDOC_(docptr, this->ioreg); in doc_write_oob_nolock()
1082 struct DiskOnChip *this = mtd->priv; in doc_write_oob() local
1087 mutex_lock(&this->lock); in doc_write_oob()
1091 mutex_unlock(&this->lock); in doc_write_oob()
1097 struct DiskOnChip *this = mtd->priv; in doc_erase() local
1101 void __iomem *docptr = this->virtadr; in doc_erase()
1105 mutex_lock(&this->lock); in doc_erase()
1108 mutex_unlock(&this->lock); in doc_erase()
1114 /* FIXME: Do this in the background. Use timers or schedule_task() */ in doc_erase()
1116 mychip = &this->chips[ofs >> this->chipshift]; in doc_erase()
1118 if (this->curfloor != mychip->floor) { in doc_erase()
1119 DoC_SelectFloor(this, mychip->floor); in doc_erase()
1120 DoC_SelectChip(this, mychip->chip); in doc_erase()
1121 } else if (this->curchip != mychip->chip) { in doc_erase()
1122 DoC_SelectChip(this, mychip->chip); in doc_erase()
1124 this->curfloor = mychip->floor; in doc_erase()
1125 this->curchip = mychip->chip; in doc_erase()
1127 DoC_Command(this, NAND_CMD_ERASE1, 0); in doc_erase()
1128 DoC_Address(this, ADDR_PAGE, ofs, 0, 0); in doc_erase()
1129 DoC_Command(this, NAND_CMD_ERASE2, 0); in doc_erase()
1131 DoC_Command(this, NAND_CMD_STATUS, CDSN_CTRL_WP); in doc_erase()
1133 if (DoC_is_Millennium(this)) { in doc_erase()
1138 DoC_Delay(this, 2); in doc_erase()
1139 status = ReadDOC_(docptr, this->ioreg); in doc_erase()
1156 mutex_unlock(&this->lock); in doc_erase()
1170 struct DiskOnChip *this; in cleanup_doc2000() local
1173 this = mtd->priv; in cleanup_doc2000()
1174 doc2klist = this->nextdoc; in cleanup_doc2000()
1178 iounmap(this->virtadr); in cleanup_doc2000()
1179 kfree(this->chips); in cleanup_doc2000()