Lines Matching refs:geom
190 #define NS_IS_INITIALIZED(ns) ((ns)->geom.totsz != 0)
200 (((ns)->regs.row * (ns)->geom.pgszoob) + (ns)->regs.column)
203 #define NS_RAW_OFFSET_OOB(ns) (NS_RAW_OFFSET(ns) + ns->geom.pgsz)
329 } geom;
555 BITS_TO_LONGS(ns->geom.pgnum)));
561 ns->file_buf = kmalloc(ns->geom.pgszoob, GFP_KERNEL);
579 ns->pages = vmalloc(array_size(sizeof(union ns_mem), ns->geom.pgnum));
584 for (i = 0; i < ns->geom.pgnum; i++) {
588 ns->geom.pgszoob, 0, 0, NULL);
618 for (i = 0; i < ns->geom.pgnum; i++) {
653 ns->geom.totsz = mtd->size;
654 ns->geom.pgsz = mtd->writesize;
655 ns->geom.oobsz = mtd->oobsize;
656 ns->geom.secsz = mtd->erasesize;
657 ns->geom.pgszoob = ns->geom.pgsz + ns->geom.oobsz;
658 ns->geom.pgnum = div_u64(ns->geom.totsz, ns->geom.pgsz);
659 ns->geom.totszoob = ns->geom.totsz + (uint64_t)ns->geom.pgnum * ns->geom.oobsz;
660 ns->geom.secshift = ffs(ns->geom.secsz) - 1;
661 ns->geom.pgshift = chip->page_shift;
662 ns->geom.pgsec = ns->geom.secsz / ns->geom.pgsz;
663 ns->geom.secszoob = ns->geom.secsz + ns->geom.oobsz * ns->geom.pgsec;
666 if (ns->geom.pgsz == 512) {
670 } else if (ns->geom.pgsz == 2048) {
672 } else if (ns->geom.pgsz == 4096) {
675 NS_ERR("init_nandsim: unknown page size %u\n", ns->geom.pgsz);
680 if (ns->geom.totsz <= (32 << 20)) {
681 ns->geom.pgaddrbytes = 3;
682 ns->geom.secaddrbytes = 2;
684 ns->geom.pgaddrbytes = 4;
685 ns->geom.secaddrbytes = 3;
688 if (ns->geom.totsz <= (128 << 20)) {
689 ns->geom.pgaddrbytes = 4;
690 ns->geom.secaddrbytes = 2;
692 ns->geom.pgaddrbytes = 5;
693 ns->geom.secaddrbytes = 3;
702 remains = ns->geom.totsz;
705 uint64_t part_sz = (uint64_t)parts[i] * ns->geom.secsz;
743 (unsigned long long)ns->geom.totsz >> 20);
744 printk("page size: %u bytes\n", ns->geom.pgsz);
745 printk("OOB area size: %u bytes\n", ns->geom.oobsz);
746 printk("sector size: %u KiB\n", ns->geom.secsz >> 10);
747 printk("pages number: %u\n", ns->geom.pgnum);
748 printk("pages per sector: %u\n", ns->geom.pgsec);
750 printk("bits in sector size: %u\n", ns->geom.secshift);
751 printk("bits in page size: %u\n", ns->geom.pgshift);
752 printk("bits in OOB size: %u\n", ffs(ns->geom.oobsz) - 1);
754 (unsigned long long)ns->geom.totszoob >> 10);
755 printk("page address bytes: %u\n", ns->geom.pgaddrbytes);
756 printk("sector address bytes: %u\n", ns->geom.secaddrbytes);
764 ns->buf.byte = kmalloc(ns->geom.pgszoob, GFP_KERNEL);
767 ns->geom.pgszoob);
771 memset(ns->buf.byte, 0xFF, ns->geom.pgszoob);
817 offset = (loff_t)erase_block_no * ns->geom.secsz;
1147 if (ns->regs.count < (ns->geom.pgaddrbytes - ns->geom.secaddrbytes))
1151 ns->geom.pgaddrbytes +
1152 ns->geom.secaddrbytes));
1479 for (i = 0; i < ns->geom.pgsec; i++)
1488 for (i = 0; i < ns->geom.pgsec; i++) {
1517 memset(ns->file_buf, 0xff, ns->geom.pgszoob);
1529 loff_t pos = (loff_t)ns->regs.row * ns->geom.pgszoob;
1531 ns->geom.pgszoob, pos);
1532 if (tx != ns->geom.pgszoob) {
1561 memset(mypage->byte, 0xFF, ns->geom.pgszoob);
1585 if (action != ACTION_SECERASE && ns->regs.row >= ns->geom.pgnum) {
1598 if (ns->regs.column >= (ns->geom.pgszoob - ns->regs.off)) {
1602 num = ns->geom.pgszoob - ns->regs.off - ns->regs.column;
1610 else if (ns->regs.off < ns->geom.pgsz)
1616 NS_UDELAY(input_cycle * ns->geom.pgsz / 1000 / busdiv);
1630 if (ns->regs.row >= ns->geom.pgnum - ns->geom.pgsec
1631 || (ns->regs.row & ~(ns->geom.secsz - 1))) {
1637 8 * (ns->geom.pgaddrbytes - ns->geom.secaddrbytes)) | ns->regs.column;
1640 erase_block_no = ns->regs.row >> (ns->geom.secshift - ns->geom.pgshift);
1670 num = ns->geom.pgszoob - ns->regs.off - ns->regs.column;
1687 NS_UDELAY(output_cycle * ns->geom.pgsz / 1000 / busdiv);
1707 NS_DBG("do_state_action: set internal offset to %d\n", ns->geom.pgsz/2);
1708 ns->regs.off = ns->geom.pgsz/2;
1712 NS_DBG("do_state_action: set internal offset to %d\n", ns->geom.pgsz);
1713 ns->regs.off = ns->geom.pgsz;
1821 ns->regs.num = ns->geom.pgszoob - ns->regs.off - ns->regs.column;
1825 ns->regs.num = ns->geom.idbytes;
1846 ns->regs.num = ns->geom.pgaddrbytes;
1850 ns->regs.num = ns->geom.secaddrbytes;
1859 ns->regs.num = ns->geom.pgaddrbytes - ns->geom.secaddrbytes;
2020 ns->regs.num = ns->geom.pgaddrbytes;
2023 ns->regs.num = ns->geom.secaddrbytes;
2301 ns->geom.idbytes = 8;
2303 ns->geom.idbytes = 6;
2305 ns->geom.idbytes = 4;
2307 ns->geom.idbytes = 2;