aboutsummaryrefslogtreecommitdiff
path: root/bootloader_message/bootloader_message.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'bootloader_message/bootloader_message.cpp')
-rw-r--r--bootloader_message/bootloader_message.cpp28
1 files changed, 28 insertions, 0 deletions
diff --git a/bootloader_message/bootloader_message.cpp b/bootloader_message/bootloader_message.cpp
index e9dd0d4d..2d743e73 100644
--- a/bootloader_message/bootloader_message.cpp
+++ b/bootloader_message/bootloader_message.cpp
@@ -26,6 +26,7 @@
#include <vector>
#include <android-base/file.h>
+#include <android-base/hex.h>
#include <android-base/properties.h>
#include <android-base/stringprintf.h>
#include <android-base/unique_fd.h>
@@ -324,6 +325,33 @@ bool WriteMiscKcmdlineMessage(const misc_kcmdline_message& message, std::string*
offsetof(misc_system_space_layout, kcmdline_message), err);
}
+bool ReadMiscControlMessage(misc_control_message* message, std::string* err) {
+ return ReadMiscPartitionSystemSpace(message, sizeof(*message),
+ offsetof(misc_system_space_layout, control_message), err);
+}
+
+bool WriteMiscControlMessage(const misc_control_message& message, std::string* err) {
+ return WriteMiscPartitionSystemSpace(&message, sizeof(message),
+ offsetof(misc_system_space_layout, control_message), err);
+}
+
+bool CheckReservedSystemSpaceEmpty(bool* empty, std::string* err) {
+ constexpr size_t kReservedSize = SYSTEM_SPACE_SIZE_IN_MISC - sizeof(misc_system_space_layout);
+
+ uint8_t space[kReservedSize];
+ if (!ReadMiscPartitionSystemSpace(&space, kReservedSize, sizeof(misc_system_space_layout), err)) {
+ return false;
+ }
+
+ *empty = space[0] == 0 && 0 == memcmp(space, space + 1, kReservedSize - 1);
+
+ if (!*empty) {
+ *err = android::base::HexString(space, kReservedSize);
+ }
+
+ return true;
+}
+
extern "C" bool write_reboot_bootloader(void) {
std::string err;
return write_reboot_bootloader(&err);