void fb_nand_erase(const char *cmd) { struct part_info *part; struct mtd_info *mtd = NULL; int ret; ret = fb_nand_lookup(cmd, &mtd, &part); if (ret) { error("invalid NAND device"); fastboot_fail("invalid NAND device"); return; } ret = board_fastboot_erase_partition_setup(part->name); if (ret) return; ret = _fb_nand_erase(mtd, part); if (ret) { error("failed erasing from device %s", mtd->name); fastboot_fail("failed erasing from device"); return; } fastboot_okay(""); }
void fb_nand_erase(const char *partname, char *response) { struct part_info *part; nand_info_t *nand = NULL; int ret; /* initialize the response buffer */ response_str = response; ret = fb_nand_lookup(partname, response, &nand, &part); if (ret) { error("invalid NAND device"); fastboot_fail(response_str, "invalid NAND device"); return; } ret = board_fastboot_erase_partition_setup(part->name); if (ret) return; ret = _fb_nand_erase(nand, part); if (ret) { error("failed erasing from device %s", nand->name); fastboot_fail(response_str, "failed erasing from device"); return; } fastboot_okay(response_str, ""); }
void fb_nand_flash_write(const char *cmd, void *download_buffer, unsigned int download_bytes) { struct part_info *part; struct mtd_info *mtd = NULL; int ret; ret = fb_nand_lookup(cmd, &mtd, &part); if (ret) { error("invalid NAND device"); fastboot_fail("invalid NAND device"); return; } ret = board_fastboot_write_partition_setup(part->name); if (ret) return; if (is_sparse_image(download_buffer)) { struct fb_nand_sparse sparse_priv; struct sparse_storage sparse; sparse_priv.mtd = mtd; sparse_priv.part = part; sparse.blksz = mtd->writesize; sparse.start = part->offset / sparse.blksz; sparse.size = part->size / sparse.blksz; sparse.write = fb_nand_sparse_write; sparse.reserve = fb_nand_sparse_reserve; printf("Flashing sparse image at offset " LBAFU "\n", sparse.start); sparse.priv = &sparse_priv; write_sparse_image(&sparse, cmd, download_buffer, download_bytes); } else { printf("Flashing raw image at offset 0x%llx\n", part->offset); ret = _fb_nand_write(mtd, part, download_buffer, part->offset, download_bytes, NULL); printf("........ wrote %u bytes to '%s'\n", download_bytes, part->name); } if (ret) { fastboot_fail("error writing the image"); return; } fastboot_okay(""); }
void fb_nand_flash_write(const char *partname, unsigned int session_id, void *download_buffer, unsigned int download_bytes, char *response) { struct part_info *part; nand_info_t *nand = NULL; int ret; /* initialize the response buffer */ response_str = response; ret = fb_nand_lookup(partname, response, &nand, &part); if (ret) { error("invalid NAND device"); fastboot_fail(response_str, "invalid NAND device"); return; } ret = board_fastboot_write_partition_setup(part->name); if (ret) return; if (is_sparse_image(download_buffer)) { struct fb_nand_sparse sparse_priv; sparse_storage_t sparse; sparse_priv.nand = nand; sparse_priv.part = part; sparse.block_sz = nand->writesize; sparse.start = part->offset / sparse.block_sz; sparse.size = part->size / sparse.block_sz; sparse.name = part->name; sparse.write = fb_nand_sparse_write; ret = store_sparse_image(&sparse, &sparse_priv, session_id, download_buffer); } else { printf("Flashing raw image at offset 0x%llx\n", part->offset); ret = _fb_nand_write(nand, part, download_buffer, part->offset, download_bytes, NULL); printf("........ wrote %u bytes to '%s'\n", download_bytes, part->name); } if (ret) { fastboot_fail(response_str, "error writing the image"); return; } fastboot_okay(response_str, ""); }