Lines Matching refs:info
81 static void scramble(const struct image_info *info, in scramble() argument
88 if (info->boot0) { in scramble()
91 unsigned seedmod = info->eraseblock_size / info->page_size; in scramble()
94 if (!info->scramble) in scramble()
113 static int write_page(const struct image_info *info, uint8_t *buffer, in write_page() argument
117 int steps = info->usable_page_size / info->ecc_step_size; in write_page()
118 int eccbytes = DIV_ROUND_UP(info->ecc_strength * 14, 8); in write_page()
126 memset(buffer, 0xff, info->page_size + info->oob_size); in write_page()
127 cnt = fread(buffer, 1, info->usable_page_size, src); in write_page()
138 fwrite(buffer, info->page_size + info->oob_size, 1, dst); in write_page()
140 for (i = 0; i < info->usable_page_size; i++) { in write_page()
146 if (i == info->usable_page_size) in write_page()
153 if (info->scramble) { in write_page()
156 if (info->boot0) { in write_page()
159 offs = steps * (info->ecc_step_size + eccbytes + 4); in write_page()
160 cnt = info->page_size + info->oob_size - offs; in write_page()
168 offs = info->page_size + (steps * (eccbytes + 4)); in write_page()
169 cnt = info->page_size + info->oob_size - offs; in write_page()
171 scramble(info, page, buffer + offs, cnt); in write_page()
181 memset(buffer, 0xff, info->ecc_step_size + eccbytes + 4); in write_page()
182 ecc = buffer + info->ecc_step_size + 4; in write_page()
183 if (info->boot0) { in write_page()
184 data_offs = i * (info->ecc_step_size + eccbytes + 4); in write_page()
185 ecc_offs = data_offs + info->ecc_step_size + 4; in write_page()
187 data_offs = i * info->ecc_step_size; in write_page()
188 ecc_offs = info->page_size + 4 + (i * (eccbytes + 4)); in write_page()
191 cnt = fread(buffer, 1, info->ecc_step_size, src); in write_page()
198 pad = info->ecc_step_size - cnt; in write_page()
200 if (info->scramble && info->boot0) { in write_page()
215 swap_bits(buffer, info->ecc_step_size + 4); in write_page()
216 encode_bch(bch, buffer, info->ecc_step_size + 4, ecc); in write_page()
217 swap_bits(buffer, info->ecc_step_size + 4); in write_page()
219 scramble(info, page, buffer, info->ecc_step_size + 4 + eccbytes); in write_page()
222 fwrite(buffer, info->ecc_step_size, 1, dst); in write_page()
228 fseek(dst, pos + info->page_size, SEEK_SET); in write_page()
233 fseek(dst, pos + info->page_size + info->oob_size, SEEK_SET); in write_page()
238 static int create_image(const struct image_info *info) in create_image() argument
240 off_t page = info->offset / info->page_size; in create_image()
245 bch = init_bch(14, info->ecc_strength, BCH_PRIMITIVE_POLY); in create_image()
251 buffer = malloc(info->page_size + info->oob_size); in create_image()
257 memset(buffer, 0xff, info->page_size + info->oob_size); in create_image()
259 src = fopen(info->source, "r"); in create_image()
262 info->source); in create_image()
266 dst = fopen(info->dest, "w"); in create_image()
268 fprintf(stderr, "Failed to open dest file (%s)\n", info->dest); in create_image()
281 ret = write_page(info, buffer, src, rnd, dst, bch, page++); in create_image()
343 static int check_image_info(struct image_info *info) in check_image_info() argument
349 if (!info->page_size) { in check_image_info()
354 if (!info->page_size) { in check_image_info()
359 if (!info->eraseblock_size) { in check_image_info()
364 if (info->ecc_step_size != 512 && info->ecc_step_size != 1024) { in check_image_info()
366 info->ecc_step_size); in check_image_info()
371 if (valid_ecc_strengths[i] == info->ecc_strength) in check_image_info()
377 info->ecc_strength); in check_image_info()
381 eccbytes = DIV_ROUND_UP(info->ecc_strength * 14, 8); in check_image_info()
386 eccsteps = info->usable_page_size / info->ecc_step_size; in check_image_info()
388 if (info->page_size + info->oob_size < in check_image_info()
389 info->usable_page_size + (eccsteps * eccbytes)) { in check_image_info()
400 struct image_info info; in main() local
402 memset(&info, 0, sizeof(info)); in main()
432 info.scramble = 1; in main()
435 info.ecc_strength = strtol(optarg, &endptr, 0); in main()
437 info.ecc_step_size = strtol(endptr + 1, NULL, 0); in main()
440 info.page_size = strtol(optarg, NULL, 0); in main()
443 info.oob_size = strtol(optarg, NULL, 0); in main()
446 info.usable_page_size = strtol(optarg, NULL, 0); in main()
449 info.eraseblock_size = strtol(optarg, NULL, 0); in main()
452 info.boot0 = 1; in main()
455 info.offset = strtoull(optarg, NULL, 0); in main()
466 info.source = argv[optind]; in main()
467 info.dest = argv[optind + 1]; in main()
469 if (!info.boot0) { in main()
470 info.usable_page_size = info.page_size; in main()
471 } else if (!info.usable_page_size) { in main()
472 if (info.page_size > 8192) in main()
473 info.usable_page_size = 8192; in main()
474 else if (info.page_size > 4096) in main()
475 info.usable_page_size = 4096; in main()
477 info.usable_page_size = 1024; in main()
480 if (check_image_info(&info)) in main()
483 return create_image(&info); in main()