Loading boot_control/Android.bp +1 −0 Original line number Diff line number Diff line Loading @@ -28,6 +28,7 @@ cc_defaults { ], shared_libs: [ "android.hardware.boot@1.1", "libbase", "liblog", ], Loading boot_control/include/libboot_control/libboot_control.h +8 −0 Original line number Diff line number Diff line Loading @@ -18,11 +18,15 @@ #include <string> #include <android/hardware/boot/1.1/IBootControl.h> namespace android { namespace bootable { // Helper library to implement the IBootControl HAL using the misc partition. class BootControl { using MergeStatus = ::android::hardware::boot::V1_1::MergeStatus; public: bool Init(); unsigned int GetNumberSlots(); Loading @@ -34,6 +38,10 @@ class BootControl { bool IsSlotBootable(unsigned int slot); const char* GetSuffix(unsigned int slot); bool IsSlotMarkedSuccessful(unsigned int slot); bool SetSnapshotMergeStatus(MergeStatus status); MergeStatus GetSnapshotMergeStatus(); bool IsValidSlot(unsigned int slot); const std::string& misc_device() const { return misc_device_; Loading boot_control/libboot_control.cpp +21 −0 Original line number Diff line number Diff line Loading @@ -34,6 +34,8 @@ namespace android { namespace bootable { using ::android::hardware::boot::V1_1::MergeStatus; // The number of boot attempts that should be made from a new slot before // rolling back to the previous slot. constexpr unsigned int kDefaultBootAttempts = 7; Loading Loading @@ -327,6 +329,25 @@ bool BootControl::IsSlotMarkedSuccessful(unsigned int slot) { return bootctrl.slot_info[slot].successful_boot && bootctrl.slot_info[slot].tries_remaining; } bool BootControl::IsValidSlot(unsigned int slot) { return slot < kMaxNumSlots && slot < num_slots_; } bool BootControl::SetSnapshotMergeStatus(MergeStatus status) { bootloader_control bootctrl; if (!LoadBootloaderControl(misc_device_, &bootctrl)) return false; bootctrl.merge_status = (unsigned int)status; return UpdateAndSaveBootloaderControl(misc_device_, &bootctrl); } MergeStatus BootControl::GetSnapshotMergeStatus() { bootloader_control bootctrl; if (!LoadBootloaderControl(misc_device_, &bootctrl)) return MergeStatus::UNKNOWN; return (MergeStatus)bootctrl.merge_status; } const char* BootControl::GetSuffix(unsigned int slot) { if (slot >= kMaxNumSlots || slot >= num_slots_) { return nullptr; Loading bootloader_message/include/bootloader_message/bootloader_message.h +3 −1 Original line number Diff line number Diff line Loading @@ -163,8 +163,10 @@ struct bootloader_control { uint8_t nb_slot : 3; // Number of times left attempting to boot recovery. uint8_t recovery_tries_remaining : 3; // Status of any pending snapshot merge of dynamic partitions. uint8_t merge_status : 3; // Ensure 4-bytes alignment for slot_info field. uint8_t reserved0[2]; uint8_t reserved0[1]; // Per-slot information. Up to 4 slots. struct slot_metadata slot_info[4]; // Reserved for further use. Loading Loading
boot_control/Android.bp +1 −0 Original line number Diff line number Diff line Loading @@ -28,6 +28,7 @@ cc_defaults { ], shared_libs: [ "android.hardware.boot@1.1", "libbase", "liblog", ], Loading
boot_control/include/libboot_control/libboot_control.h +8 −0 Original line number Diff line number Diff line Loading @@ -18,11 +18,15 @@ #include <string> #include <android/hardware/boot/1.1/IBootControl.h> namespace android { namespace bootable { // Helper library to implement the IBootControl HAL using the misc partition. class BootControl { using MergeStatus = ::android::hardware::boot::V1_1::MergeStatus; public: bool Init(); unsigned int GetNumberSlots(); Loading @@ -34,6 +38,10 @@ class BootControl { bool IsSlotBootable(unsigned int slot); const char* GetSuffix(unsigned int slot); bool IsSlotMarkedSuccessful(unsigned int slot); bool SetSnapshotMergeStatus(MergeStatus status); MergeStatus GetSnapshotMergeStatus(); bool IsValidSlot(unsigned int slot); const std::string& misc_device() const { return misc_device_; Loading
boot_control/libboot_control.cpp +21 −0 Original line number Diff line number Diff line Loading @@ -34,6 +34,8 @@ namespace android { namespace bootable { using ::android::hardware::boot::V1_1::MergeStatus; // The number of boot attempts that should be made from a new slot before // rolling back to the previous slot. constexpr unsigned int kDefaultBootAttempts = 7; Loading Loading @@ -327,6 +329,25 @@ bool BootControl::IsSlotMarkedSuccessful(unsigned int slot) { return bootctrl.slot_info[slot].successful_boot && bootctrl.slot_info[slot].tries_remaining; } bool BootControl::IsValidSlot(unsigned int slot) { return slot < kMaxNumSlots && slot < num_slots_; } bool BootControl::SetSnapshotMergeStatus(MergeStatus status) { bootloader_control bootctrl; if (!LoadBootloaderControl(misc_device_, &bootctrl)) return false; bootctrl.merge_status = (unsigned int)status; return UpdateAndSaveBootloaderControl(misc_device_, &bootctrl); } MergeStatus BootControl::GetSnapshotMergeStatus() { bootloader_control bootctrl; if (!LoadBootloaderControl(misc_device_, &bootctrl)) return MergeStatus::UNKNOWN; return (MergeStatus)bootctrl.merge_status; } const char* BootControl::GetSuffix(unsigned int slot) { if (slot >= kMaxNumSlots || slot >= num_slots_) { return nullptr; Loading
bootloader_message/include/bootloader_message/bootloader_message.h +3 −1 Original line number Diff line number Diff line Loading @@ -163,8 +163,10 @@ struct bootloader_control { uint8_t nb_slot : 3; // Number of times left attempting to boot recovery. uint8_t recovery_tries_remaining : 3; // Status of any pending snapshot merge of dynamic partitions. uint8_t merge_status : 3; // Ensure 4-bytes alignment for slot_info field. uint8_t reserved0[2]; uint8_t reserved0[1]; // Per-slot information. Up to 4 slots. struct slot_metadata slot_info[4]; // Reserved for further use. Loading