Lines Matching defs:chip
144 struct nor_chip * const chip = &sc->sc_chip;
153 if (nor_scan_media(self, chip))
157 sc->sc_flash_if.erasesize = chip->nc_block_size;
158 sc->sc_flash_if.page_size = chip->nc_page_size;
159 sc->sc_flash_if.writesize = chip->nc_page_size;
163 chip->nc_oob_cache = kmem_alloc(chip->nc_spare_size, KM_SLEEP);
165 chip->nc_page_cache = kmem_alloc(chip->nc_page_size, KM_SLEEP);
192 kmem_free(chip->nc_oob_cache, chip->nc_spare_size);
194 kmem_free(chip->nc_page_cache, chip->nc_page_size);
202 struct nor_chip * const chip = &sc->sc_chip;
209 chip->nc_size - faa.partinfo.part_offset;
237 struct nor_chip * const chip = &sc->sc_chip;
251 kmem_free(chip->nc_oob_cache, chip->nc_spare_size);
253 kmem_free(chip->nc_page_cache, chip->nc_page_size);
333 nor_quirks(device_t self, struct nor_chip * const chip)
336 switch (chip->nc_manf_id) {
338 if (chip->nc_dev_id == 0x00) {
341 /* chip->nc_quirks |= NC_QUIRK_NO_READ_START */
350 * scan media to determine the chip's properties
354 nor_scan_media(device_t self, struct nor_chip * const chip)
361 int error = sc->sc_nor_if->scan_media(self, chip);
368 chip->nc_manf_id,
369 nor_midtoname(chip->nc_manf_id),
370 chip->nc_dev_id);
373 format_bytes(pbuf[0], sizeof(pbuf[0]), chip->nc_page_size);
374 format_bytes(pbuf[1], sizeof(pbuf[1]), chip->nc_spare_size);
375 format_bytes(pbuf[2], sizeof(pbuf[2]), chip->nc_block_size);
380 format_bytes(pbuf[0], sizeof(pbuf[0]), chip->nc_size);
384 chip->nc_lun_blocks, chip->nc_num_luns, pbuf[0]);
392 if (chip->nc_page_size > 512)
393 chip->nc_badmarker_offs = 0;
395 chip->nc_badmarker_offs = 5;
399 chip->nc_page_shift = ffs(chip->nc_page_size) - 1;
400 chip->nc_page_mask = ~(chip->nc_page_size - 1);
402 chip->nc_block_shift = ffs(chip->nc_block_size) - 1;
403 chip->nc_block_mask = ~(chip->nc_block_size - 1);
407 nor_quirks(self, chip);
427 struct nor_chip * const chip = &sc->sc_chip;
435 nor_read_buf_1(self, offset, data, chip->nc_page_size);
438 nor_read_buf_2(self, offset, data, chip->nc_page_size);
441 nor_read_buf_4(self, offset, data, chip->nc_page_size);
445 nor_read_buf_8(self, offset, data, chip->nc_page_size);
454 nor_dump_data("page", data, chip->nc_page_size);
466 struct nor_chip * const chip = &sc->sc_chip;
474 nor_write_buf_1(self, offset, data, chip->nc_page_size);
477 nor_write_buf_2(self, offset, data, chip->nc_page_size);
480 nor_write_buf_4(self, offset, data, chip->nc_page_size);
484 nor_write_buf_8(self, offset, data, chip->nc_page_size);
494 nor_dump_data("page", data, chip->nc_page_size);
501 * nor_flash_erase_all - erase the entire chip
522 struct nor_chip * const chip = &sc->sc_chip;
526 if (ei->ei_addr < 0 || ei->ei_len < chip->nc_block_size)
529 if (ei->ei_addr + ei->ei_len > chip->nc_size) {
535 if ((ei->ei_addr == 0) && (ei->ei_len == chip->nc_size)
540 if (ei->ei_addr % chip->nc_block_size != 0) {
545 (uintmax_t)chip->nc_block_size);
549 if (ei->ei_len % chip->nc_block_size != 0) {
554 (uintmax_t)chip->nc_block_size);
576 addr += chip->nc_block_size;
600 struct nor_chip * const chip = &sc->sc_chip;
607 first = offset & chip->nc_page_mask;
608 firstoff = offset & ~chip->nc_page_mask;
610 last = (offset + len) & chip->nc_page_mask;
628 error = nor_read_page(self, addr, chip->nc_page_cache);
633 memcpy(chip->nc_page_cache + firstoff, buf, len);
635 error = nor_program_page(self, addr, chip->nc_page_cache);
659 error = nor_read_page(self, addr, chip->nc_page_cache);
664 memcpy(chip->nc_page_cache + firstoff,
665 bufp, chip->nc_page_size - firstoff);
669 chip->nc_page_cache);
674 bufp += chip->nc_page_size - firstoff;
675 left -= chip->nc_page_size - firstoff;
676 *retlen += chip->nc_page_size - firstoff;
679 error = nor_read_page(self, addr, chip->nc_page_cache);
684 memcpy(chip->nc_page_cache, bufp, left);
687 chip->nc_page_cache);
693 KASSERT(left < chip->nc_page_size);
697 if (left > chip->nc_page_size) {
701 KASSERT(left > chip->nc_page_size);
708 bufp += chip->nc_page_size;
709 left -= chip->nc_page_size;
710 *retlen += chip->nc_page_size;
713 addr += chip->nc_page_size;
728 struct nor_chip * const chip = &sc->sc_chip;
734 if ((offset + len) > chip->nc_size) {
738 (uintmax_t)chip->nc_size));
742 if (len % chip->nc_page_size != 0 ||
743 offset % chip->nc_page_size != 0) {
748 pages = len / chip->nc_page_size;
773 addr += chip->nc_page_size;
774 bufp += chip->nc_page_size;
775 *retlen += chip->nc_page_size;
792 struct nor_chip * const chip = &sc->sc_chip;
799 first = offset & chip->nc_page_mask;
800 firstoff = offset & ~chip->nc_page_mask;
801 last = (offset + len) & chip->nc_page_mask;
802 count = (last - first) / chip->nc_page_size + 1;
811 error = nor_read_page(self, addr, chip->nc_page_cache);
816 memcpy(bufp, chip->nc_page_cache + firstoff, len);
824 error = nor_read_page(self, addr, chip->nc_page_cache);
830 memcpy(bufp, chip->nc_page_cache + firstoff,
831 chip->nc_page_size - firstoff);
833 bufp += chip->nc_page_size - firstoff;
834 left -= chip->nc_page_size - firstoff;
835 *retlen += chip->nc_page_size - firstoff;
838 memcpy(bufp, chip->nc_page_cache, left);
840 KASSERT(left < chip->nc_page_size);
843 memcpy(bufp, chip->nc_page_cache, chip->nc_page_size);
845 bufp += chip->nc_page_size;
846 left -= chip->nc_page_size;
847 *retlen += chip->nc_page_size;
850 addr += chip->nc_page_size;
864 struct nor_chip * const chip = &sc->sc_chip;
875 if (__predict_false((offset + len) > chip->nc_size)) {
878 (uintmax_t)offset, len, (uintmax_t)chip->nc_size));
888 if (len < chip->nc_page_size)
892 if (len % chip->nc_page_size != 0 ||
893 offset % chip->nc_page_size != 0) {
900 pages = len / chip->nc_page_size;
916 bufp += chip->nc_page_size;
917 addr += chip->nc_page_size;
918 *retlen += chip->nc_page_size;
930 struct nor_chip * const chip = &sc->sc_chip;
935 if (ofs > chip->nc_size) {
938 (uintmax_t)ofs, (uintmax_t)chip->nc_size));
942 if (ofs % chip->nc_block_size != 0) {
945 (uintmax_t)ofs, (uintmax_t)chip->nc_block_size));
966 struct nor_chip * const chip = &sc->sc_chip;
968 if (ofs > chip->nc_size) {
971 ofs, (uintmax_t)chip->nc_size));
975 if (ofs % chip->nc_block_size != 0) {
977 (uintmax_t)ofs, (uintmax_t)chip->nc_block_size);