diff options
author | Elliott Hughes <enh@google.com> | 2016-06-16 00:28:05 +0200 |
---|---|---|
committer | android-build-merger <android-build-merger@google.com> | 2016-06-16 00:28:05 +0200 |
commit | eaddde6888b1f58d70b338ad7725214781014324 (patch) | |
tree | 95df40add23e127030abe0cb224c606659a33932 /bootloader.cpp | |
parent | Merge \\"Add bootloader_message_ab struct.\\" am: 59f04b9982 (diff) | |
parent | resolve merge conflicts of 179c0d8 to stage-aosp-master (diff) | |
download | android_bootable_recovery-eaddde6888b1f58d70b338ad7725214781014324.tar android_bootable_recovery-eaddde6888b1f58d70b338ad7725214781014324.tar.gz android_bootable_recovery-eaddde6888b1f58d70b338ad7725214781014324.tar.bz2 android_bootable_recovery-eaddde6888b1f58d70b338ad7725214781014324.tar.lz android_bootable_recovery-eaddde6888b1f58d70b338ad7725214781014324.tar.xz android_bootable_recovery-eaddde6888b1f58d70b338ad7725214781014324.tar.zst android_bootable_recovery-eaddde6888b1f58d70b338ad7725214781014324.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 // ------------------------------------ |