Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 6442153c authored by Pat Tjin's avatar Pat Tjin Committed by Android (Google) Code Review
Browse files

Merge "fastboot: add flashing bootloader commands" into mnc-dr-dev

parents 3f5c5a1e 51e8b03f
Loading
Loading
Loading
Loading
+44 −12
Original line number Diff line number Diff line
@@ -279,17 +279,22 @@ void usage(void)
            "  flashall                                 flash boot, system, vendor and if found,\n"
            "                                           recovery\n"
            "  flash <partition> [ <filename> ]         write a file to a flash partition\n"
            "  flashing lock                            locks the device. Prevents flashing"
            "  flashing lock                            locks the device. Prevents flashing\n"
            "                                           partitions\n"
            "  flashing unlock                          unlocks the device. Allows user to"
            "                                           flash any partition except the ones"
            "  flashing unlock                          unlocks the device. Allows user to\n"
            "                                           flash any partition except the ones\n"
            "                                           that are related to bootloader\n"
            "  flashing lock_critical                   Prevents flashing bootloader related"
            "  flashing lock_critical                   Prevents flashing bootloader related\n"
            "                                           partitions\n"
            "  flashing unlock_critical                 Enables flashing bootloader related"
            "  flashing unlock_critical                 Enables flashing bootloader related\n"
            "                                           partitions\n"
            "  flashing get_unlock_ability              Queries bootloader to see if the"
            "  flashing get_unlock_ability              Queries bootloader to see if the\n"
            "                                           device is unlocked\n"
            "  flashing get_unlock_bootloader_nonce     Queries the bootloader to get the\n"
            "                                           unlock nonce\n"
            "  flashing unlock_bootloader <request>     Issue unlock bootloader using request\n"
            "  flashing lock_bootloader                 Locks the bootloader to prevent\n"
            "                                           bootloader version rollback\n"
            "  erase <partition>                        erase a flash partition\n"
            "  format[:[<fs type>][:[<size>]] <partition> format a flash partition.\n"
            "                                           Can override the fs type and/or\n"
@@ -831,6 +836,27 @@ void do_flashall(usb_handle *usb, int erase_first)
#define skip(n) do { argc -= (n); argv += (n); } while (0)
#define require(n) do { if (argc < (n)) {usage(); exit(1);}} while (0)

int do_bypass_unlock_command(int argc, char **argv)
{
    unsigned sz;
    void *data;

    if (argc <= 2) return 0;
    skip(2);

    /*
     * Process unlock_bootloader, we have to load the message file
     * and send that to the remote device.
     */
    require(1);
    data = load_file(*argv, &sz);
    if (data == 0) die("could not load '%s': %s", *argv, strerror(errno));
    fb_queue_download("unlock_message", data, sz);
    fb_queue_command("flashing unlock_bootloader", "unlocking bootloader");
    skip(1);
    return 0;
}

int do_oem_command(int argc, char **argv)
{
    char command[256];
@@ -1230,12 +1256,18 @@ int main(int argc, char **argv)
            wants_reboot = 1;
        } else if(!strcmp(*argv, "oem")) {
            argc = do_oem_command(argc, argv);
        } else if(!strcmp(*argv, "flashing") && argc == 2) {
            if(!strcmp(*(argv+1), "unlock") || !strcmp(*(argv+1), "lock")
               || !strcmp(*(argv+1), "unlock_critical")
               || !strcmp(*(argv+1), "lock_critical")
               || !strcmp(*(argv+1), "get_unlock_ability")) {
        } else if(!strcmp(*argv, "flashing")) {
            if (argc == 2 && (!strcmp(*(argv+1), "unlock") ||
                              !strcmp(*(argv+1), "lock") ||
                              !strcmp(*(argv+1), "unlock_critical") ||
                              !strcmp(*(argv+1), "lock_critical") ||
                              !strcmp(*(argv+1), "get_unlock_ability") ||
                              !strcmp(*(argv+1), "get_unlock_bootloader_nonce") ||
                              !strcmp(*(argv+1), "lock_bootloader"))) {
                argc = do_oem_command(argc, argv);
            } else
            if (argc == 3 && !strcmp(*(argv+1), "unlock_bootloader")) {
                argc = do_bypass_unlock_command(argc, argv);
            } else {
              usage();
              return 1;