• Home
  • Raw
  • Download

Lines Matching refs:td

98 static int check_pattern_no_oob(uint8_t *buf, struct nand_bbt_descr *td)  in check_pattern_no_oob()  argument
100 if (memcmp(buf, td->pattern, td->len)) in check_pattern_no_oob()
115 static int check_pattern(uint8_t *buf, int len, int paglen, struct nand_bbt_descr *td) in check_pattern() argument
117 if (td->options & NAND_BBT_NO_OOB) in check_pattern()
118 return check_pattern_no_oob(buf, td); in check_pattern()
121 if (memcmp(buf + paglen + td->offs, td->pattern, td->len)) in check_pattern()
136 static int check_short_pattern(uint8_t *buf, struct nand_bbt_descr *td) in check_short_pattern() argument
139 if (memcmp(buf + td->offs, td->pattern, td->len)) in check_short_pattern()
150 static u32 add_marker_len(struct nand_bbt_descr *td) in add_marker_len() argument
154 if (!(td->options & NAND_BBT_NO_OOB)) in add_marker_len()
157 len = td->len; in add_marker_len()
158 if (td->options & NAND_BBT_VERSION) in add_marker_len()
175 struct nand_bbt_descr *td, int offs) in read_bbt() argument
181 int bits = td->options & NAND_BBT_NRBITS_MSK; in read_bbt()
184 int reserved_block_code = td->reserved_block_code; in read_bbt()
187 marker_len = add_marker_len(td); in read_bbt()
267 static int read_abs_bbt(struct mtd_info *mtd, uint8_t *buf, struct nand_bbt_descr *td, int chip) in read_abs_bbt() argument
272 if (td->options & NAND_BBT_PERCHIP) { in read_abs_bbt()
276 res = read_bbt(mtd, buf, td->pages[i], in read_abs_bbt()
278 td, offs); in read_abs_bbt()
284 res = read_bbt(mtd, buf, td->pages[0], in read_abs_bbt()
285 mtd->size >> this->bbt_erase_shift, td, 0); in read_abs_bbt()
294 struct nand_bbt_descr *td) in scan_read_data() argument
299 len = td->len; in scan_read_data()
300 if (td->options & NAND_BBT_VERSION) in scan_read_data()
348 size_t len, struct nand_bbt_descr *td) in scan_read() argument
350 if (td->options & NAND_BBT_NO_OOB) in scan_read()
351 return scan_read_data(mtd, buf, offs, td); in scan_read()
372 static u32 bbt_get_ver_offs(struct mtd_info *mtd, struct nand_bbt_descr *td) in bbt_get_ver_offs() argument
374 u32 ver_offs = td->veroffs; in bbt_get_ver_offs()
376 if (!(td->options & NAND_BBT_NO_OOB)) in bbt_get_ver_offs()
392 struct nand_bbt_descr *td, struct nand_bbt_descr *md) in read_abs_bbts() argument
397 if (td->options & NAND_BBT_VERSION) { in read_abs_bbts()
398 scan_read(mtd, buf, (loff_t)td->pages[0] << this->page_shift, in read_abs_bbts()
399 mtd->writesize, td); in read_abs_bbts()
400 td->version[0] = buf[bbt_get_ver_offs(mtd, td)]; in read_abs_bbts()
402 td->pages[0], td->version[0]); in read_abs_bbts()
527 static int search_bbt(struct mtd_info *mtd, uint8_t *buf, struct nand_bbt_descr *td) in search_bbt() argument
537 if (td->options & NAND_BBT_LASTBLOCK) { in search_bbt()
546 if (td->options & NAND_BBT_PERCHIP) { in search_bbt()
557 td->version[i] = 0; in search_bbt()
558 td->pages[i] = -1; in search_bbt()
560 for (block = 0; block < td->maxblocks; block++) { in search_bbt()
566 scan_read(mtd, buf, offs, mtd->writesize, td); in search_bbt()
567 if (!check_pattern(buf, scanlen, mtd->writesize, td)) { in search_bbt()
568 td->pages[i] = actblock << blocktopage; in search_bbt()
569 if (td->options & NAND_BBT_VERSION) { in search_bbt()
570 offs = bbt_get_ver_offs(mtd, td); in search_bbt()
571 td->version[i] = buf[offs]; in search_bbt()
580 if (td->pages[i] == -1) in search_bbt()
584 td->pages[i], td->version[i]); in search_bbt()
599 struct nand_bbt_descr *td, in search_read_bbts() argument
603 search_bbt(mtd, buf, td); in search_read_bbts()
621 struct nand_bbt_descr *td, struct nand_bbt_descr *md, in write_bbt() argument
630 uint8_t rcode = td->reserved_block_code; in write_bbt()
643 if (td->options & NAND_BBT_PERCHIP) { in write_bbt()
664 if (td->pages[chip] != -1) { in write_bbt()
665 page = td->pages[chip]; in write_bbt()
673 if (td->options & NAND_BBT_LASTBLOCK) { in write_bbt()
681 for (i = 0; i < td->maxblocks; i++) { in write_bbt()
700 bits = td->options & NAND_BBT_NRBITS_MSK; in write_bbt()
721 if (td->options & NAND_BBT_SAVECONTENT) { in write_bbt()
747 } else if (td->options & NAND_BBT_NO_OOB) { in write_bbt()
749 offs = td->len; in write_bbt()
751 if (td->options & NAND_BBT_VERSION) in write_bbt()
761 memcpy(buf, td->pattern, td->len); in write_bbt()
773 memcpy(&buf[ooboffs + td->offs], td->pattern, td->len); in write_bbt()
776 if (td->options & NAND_BBT_VERSION) in write_bbt()
777 buf[ooboffs + td->veroffs] = td->version[chip]; in write_bbt()
797 td->options & NAND_BBT_NO_OOB ? NULL : in write_bbt()
803 (unsigned long long)to, td->version[chip]); in write_bbt()
806 td->pages[chip] = page; in write_bbt()
845 struct nand_bbt_descr *td = this->bbt_td; in check_create() local
850 if (td->options & NAND_BBT_PERCHIP) in check_create()
862 chipsel = (td->options & NAND_BBT_PERCHIP) ? i : -1; in check_create()
865 if (td->pages[i] == -1 && md->pages[i] == -1) { in check_create()
868 } else if (td->pages[i] == -1) { in check_create()
872 rd = td; in check_create()
874 } else if (td->version[i] == md->version[i]) { in check_create()
875 rd = td; in check_create()
876 if (!(td->options & NAND_BBT_VERSION)) in check_create()
878 } else if (((int8_t)(td->version[i] - md->version[i])) > 0) { in check_create()
879 rd = td; in check_create()
886 if (td->pages[i] == -1) { in check_create()
890 rd = td; in check_create()
896 if (!(td->options & NAND_BBT_CREATE)) in check_create()
903 td->version[i] = 1; in check_create()
937 td->version[i] = max(td->version[i], md->version[i]); in check_create()
938 md->version[i] = td->version[i]; in check_create()
942 if ((writeops & 0x01) && (td->options & NAND_BBT_WRITE)) { in check_create()
943 res = write_bbt(mtd, buf, td, md, chipsel); in check_create()
950 res = write_bbt(mtd, buf, md, td, chipsel); in check_create()
966 static void mark_bbt_region(struct mtd_info *mtd, struct nand_bbt_descr *td) in mark_bbt_region() argument
973 if (td->options & NAND_BBT_PERCHIP) { in mark_bbt_region()
982 if ((td->options & NAND_BBT_ABSPAGE) || in mark_bbt_region()
983 !(td->options & NAND_BBT_WRITE)) { in mark_bbt_region()
984 if (td->pages[i] == -1) in mark_bbt_region()
986 block = td->pages[i] >> (this->bbt_erase_shift - this->page_shift); in mark_bbt_region()
990 td->reserved_block_code) in mark_bbt_region()
996 if (td->options & NAND_BBT_LASTBLOCK) in mark_bbt_region()
997 block = ((i + 1) * nrblocks) - td->maxblocks; in mark_bbt_region()
1000 for (j = 0; j < td->maxblocks; j++) { in mark_bbt_region()
1012 if (update && td->reserved_block_code) in mark_bbt_region()
1083 struct nand_bbt_descr *td = this->bbt_td; in nand_scan_bbt() local
1099 if (!td) { in nand_scan_bbt()
1107 verify_bbt_descr(mtd, td); in nand_scan_bbt()
1121 if (td->options & NAND_BBT_ABSPAGE) { in nand_scan_bbt()
1122 read_abs_bbts(mtd, buf, td, md); in nand_scan_bbt()
1125 search_read_bbts(mtd, buf, td, md); in nand_scan_bbt()
1131 mark_bbt_region(mtd, td); in nand_scan_bbt()
1152 struct nand_bbt_descr *td = this->bbt_td; in nand_update_bbt() local
1155 if (!this->bbt || !td) in nand_update_bbt()
1166 if (td->options & NAND_BBT_PERCHIP) { in nand_update_bbt()
1174 td->version[chip]++; in nand_update_bbt()
1179 if (td->options & NAND_BBT_WRITE) { in nand_update_bbt()
1180 res = write_bbt(mtd, buf, td, md, chipsel); in nand_update_bbt()
1186 res = write_bbt(mtd, buf, md, td, chipsel); in nand_update_bbt()