diff options
author | Elliott Hughes <enh@google.com> | 2016-06-15 23:55:15 +0200 |
---|---|---|
committer | Gerrit Code Review <noreply-gerritcodereview@google.com> | 2016-06-15 23:55:15 +0200 |
commit | 179c0d80bccb6451c5552ae76dfe7081c8cf96bb (patch) | |
tree | 9f5a90261cb85217cda931969aefdc04476d9fa2 /bootloader.cpp | |
parent | Merge "Add bootloader_message_ab struct." (diff) | |
parent | Remove obsolete MTD support. (diff) | |
download | android_bootable_recovery-179c0d80bccb6451c5552ae76dfe7081c8cf96bb.tar android_bootable_recovery-179c0d80bccb6451c5552ae76dfe7081c8cf96bb.tar.gz android_bootable_recovery-179c0d80bccb6451c5552ae76dfe7081c8cf96bb.tar.bz2 android_bootable_recovery-179c0d80bccb6451c5552ae76dfe7081c8cf96bb.tar.lz android_bootable_recovery-179c0d80bccb6451c5552ae76dfe7081c8cf96bb.tar.xz android_bootable_recovery-179c0d80bccb6451c5552ae76dfe7081c8cf96bb.tar.zst android_bootable_recovery-179c0d80bccb6451c5552ae76dfe7081c8cf96bb.zip |
Diffstat (limited to 'bootloader.cpp')
-rw-r--r-- | bootloader.cpp | 89 |
1 files changed, 2 insertions, 87 deletions
diff --git a/bootloader.cpp b/bootloader.cpp index a32f8b4c6..783f56ea8 100644 --- a/bootloader.cpp +++ b/bootloader.cpp @@ -27,12 +27,9 @@ #include "bootloader.h" #include "common.h" -#include "mtdutils/mtdutils.h" #include "roots.h" #include <android-base/unique_fd.h> -static int get_bootloader_message_mtd(bootloader_message* out, const Volume* v); -static int set_bootloader_message_mtd(const bootloader_message* in, const Volume* v); static int get_bootloader_message_block(bootloader_message* out, const Volume* v); static int set_bootloader_message_block(const bootloader_message* in, const Volume* v); @@ -42,9 +39,7 @@ int get_bootloader_message(bootloader_message* out) { LOGE("Cannot load volume /misc!\n"); return -1; } - if (strcmp(v->fs_type, "mtd") == 0) { - return get_bootloader_message_mtd(out, v); - } else if (strcmp(v->fs_type, "emmc") == 0) { + if (strcmp(v->fs_type, "emmc") == 0) { return get_bootloader_message_block(out, v); } LOGE("unknown misc partition fs_type \"%s\"\n", v->fs_type); @@ -57,93 +52,13 @@ int set_bootloader_message(const bootloader_message* in) { LOGE("Cannot load volume /misc!\n"); return -1; } - if (strcmp(v->fs_type, "mtd") == 0) { - return set_bootloader_message_mtd(in, v); - } else if (strcmp(v->fs_type, "emmc") == 0) { + if (strcmp(v->fs_type, "emmc") == 0) { return set_bootloader_message_block(in, v); } LOGE("unknown misc partition fs_type \"%s\"\n", v->fs_type); return -1; } -// ------------------------------ -// for misc partitions on MTD -// ------------------------------ - -static const int MISC_PAGES = 3; // number of pages to save -static const int MISC_COMMAND_PAGE = 1; // bootloader command is this page - -static int get_bootloader_message_mtd(bootloader_message* out, - const Volume* v) { - size_t write_size; - mtd_scan_partitions(); - const MtdPartition* part = mtd_find_partition_by_name(v->blk_device); - if (part == nullptr || mtd_partition_info(part, nullptr, nullptr, &write_size)) { - LOGE("failed to find \"%s\"\n", v->blk_device); - return -1; - } - - MtdReadContext* read = mtd_read_partition(part); - if (read == nullptr) { - LOGE("failed to open \"%s\": %s\n", v->blk_device, strerror(errno)); - return -1; - } - - const ssize_t size = write_size * MISC_PAGES; - char data[size]; - ssize_t r = mtd_read_data(read, data, size); - if (r != size) LOGE("failed to read \"%s\": %s\n", v->blk_device, strerror(errno)); - mtd_read_close(read); - if (r != size) return -1; - - memcpy(out, &data[write_size * MISC_COMMAND_PAGE], sizeof(*out)); - return 0; -} -static int set_bootloader_message_mtd(const bootloader_message* in, - const Volume* v) { - size_t write_size; - mtd_scan_partitions(); - const MtdPartition* part = mtd_find_partition_by_name(v->blk_device); - if (part == nullptr || mtd_partition_info(part, nullptr, nullptr, &write_size)) { - LOGE("failed to find \"%s\"\n", v->blk_device); - return -1; - } - - MtdReadContext* read = mtd_read_partition(part); - if (read == nullptr) { - LOGE("failed to open \"%s\": %s\n", v->blk_device, strerror(errno)); - return -1; - } - - ssize_t size = write_size * MISC_PAGES; - char data[size]; - ssize_t r = mtd_read_data(read, data, size); - if (r != size) LOGE("failed to read \"%s\": %s\n", v->blk_device, strerror(errno)); - mtd_read_close(read); - if (r != size) return -1; - - memcpy(&data[write_size * MISC_COMMAND_PAGE], in, sizeof(*in)); - - MtdWriteContext* write = mtd_write_partition(part); - if (write == nullptr) { - LOGE("failed to open \"%s\": %s\n", v->blk_device, strerror(errno)); - return -1; - } - if (mtd_write_data(write, data, size) != size) { - LOGE("failed to write \"%s\": %s\n", v->blk_device, strerror(errno)); - mtd_write_close(write); - return -1; - } - if (mtd_write_close(write)) { - LOGE("failed to finish \"%s\": %s\n", v->blk_device, strerror(errno)); - return -1; - } - - LOGI("Set boot command \"%s\"\n", in->command[0] != 255 ? in->command : ""); - return 0; -} - - // ------------------------------------ // for misc partitions on block devices // ------------------------------------ |