summaryrefslogtreecommitdiffstats
path: root/bootloader.cpp
diff options
context:
space:
mode:
authorElliott Hughes <enh@google.com>2016-06-10 02:41:22 +0200
committerElliott Hughes <enh@google.com>2016-06-10 22:45:35 +0200
commit63a319201fc0f5c34c1c62b446527e06f57f8d40 (patch)
treef6cfd2d71ae2a02e04ef3e958990de9c83f9c103 /bootloader.cpp
parentMerge "recovery: Add support to brick a device." (diff)
downloadandroid_bootable_recovery-63a319201fc0f5c34c1c62b446527e06f57f8d40.tar
android_bootable_recovery-63a319201fc0f5c34c1c62b446527e06f57f8d40.tar.gz
android_bootable_recovery-63a319201fc0f5c34c1c62b446527e06f57f8d40.tar.bz2
android_bootable_recovery-63a319201fc0f5c34c1c62b446527e06f57f8d40.tar.lz
android_bootable_recovery-63a319201fc0f5c34c1c62b446527e06f57f8d40.tar.xz
android_bootable_recovery-63a319201fc0f5c34c1c62b446527e06f57f8d40.tar.zst
android_bootable_recovery-63a319201fc0f5c34c1c62b446527e06f57f8d40.zip
Diffstat (limited to 'bootloader.cpp')
-rw-r--r--bootloader.cpp89
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
// ------------------------------------