- uint8_t *page = NULL;
- uint32_t page_size = 0;
- uint8_t *oob = NULL;
- uint32_t oob_size = 0;
- const int *eccpos = NULL;
-
- COMMAND_PARSE_NUMBER(u32, args[2], offset);
-
- if (argc > 3)
- {
- for (unsigned i = 3; i < argc; i++)
- {
- if (!strcmp(args[i], "oob_raw"))
- oob_format |= NAND_OOB_RAW;
- else if (!strcmp(args[i], "oob_only"))
- oob_format |= NAND_OOB_RAW | NAND_OOB_ONLY;
- else if (!strcmp(args[i], "oob_softecc"))
- oob_format |= NAND_OOB_SW_ECC;
- else if (!strcmp(args[i], "oob_softecc_kw"))
- oob_format |= NAND_OOB_SW_ECC_KW;
- else
- {
- command_print(cmd_ctx, "unknown option: %s", args[i]);
- return ERROR_COMMAND_SYNTAX_ERROR;
- }
- }
- }
-
- struct duration bench;
- duration_start(&bench);
-
- if (fileio_open(&fileio, args[1], FILEIO_READ, FILEIO_BINARY) != ERROR_OK)
- {
- return ERROR_OK;
- }
-
- buf_cnt = binary_size = fileio.size;
-
- if (!(oob_format & NAND_OOB_ONLY))
- {
- page_size = p->page_size;
- page = malloc(p->page_size);
- }
-
- if (oob_format & (NAND_OOB_RAW | NAND_OOB_SW_ECC | NAND_OOB_SW_ECC_KW))
- {
- if (p->page_size == 512) {
- oob_size = 16;
- eccpos = nand_oob_16.eccpos;
- } else if (p->page_size == 2048) {
- oob_size = 64;
- eccpos = nand_oob_64.eccpos;
- }
- oob = malloc(oob_size);
- }
-
- if (offset % p->page_size)
- {
- command_print(cmd_ctx, "only page size aligned offsets and sizes are supported");
- fileio_close(&fileio);
- free(oob);
- free(page);
- return ERROR_OK;
- }
-
- while (buf_cnt > 0)