usb: dwc3: add dis_del_phy_power_chg_quirk
[oweals/u-boot.git] / drivers / fastboot / fb_getvar.c
index 63fd38ddee1325a3cb37f6244003a03bdfd41b0a..95cb4341895fcbc3938a035aaa1463f822abd0a5 100644 (file)
@@ -4,6 +4,7 @@
  */
 
 #include <common.h>
+#include <env.h>
 #include <fastboot.h>
 #include <fastboot-internal.h>
 #include <fb_mmc.h>
 #include <version.h>
 
 static void getvar_version(char *var_parameter, char *response);
-static void getvar_bootloader_version(char *var_parameter, char *response);
+static void getvar_version_bootloader(char *var_parameter, char *response);
 static void getvar_downloadsize(char *var_parameter, char *response);
 static void getvar_serialno(char *var_parameter, char *response);
 static void getvar_version_baseband(char *var_parameter, char *response);
 static void getvar_product(char *var_parameter, char *response);
 static void getvar_platform(char *var_parameter, char *response);
 static void getvar_current_slot(char *var_parameter, char *response);
-static void getvar_slot_suffixes(char *var_parameter, char *response);
+#if CONFIG_IS_ENABLED(FASTBOOT_FLASH)
 static void getvar_has_slot(char *var_parameter, char *response);
+#endif
 #if CONFIG_IS_ENABLED(FASTBOOT_FLASH_MMC)
 static void getvar_partition_type(char *part_name, char *response);
 #endif
 #if CONFIG_IS_ENABLED(FASTBOOT_FLASH)
 static void getvar_partition_size(char *part_name, char *response);
 #endif
+static void getvar_is_userspace(char *var_parameter, char *response);
 
 static const struct {
        const char *variable;
@@ -35,12 +38,9 @@ static const struct {
        {
                .variable = "version",
                .dispatch = getvar_version
-       }, {
-               .variable = "bootloader-version",
-               .dispatch = getvar_bootloader_version
        }, {
                .variable = "version-bootloader",
-               .dispatch = getvar_bootloader_version
+               .dispatch = getvar_version_bootloader
        }, {
                .variable = "downloadsize",
                .dispatch = getvar_downloadsize
@@ -62,12 +62,11 @@ static const struct {
        }, {
                .variable = "current-slot",
                .dispatch = getvar_current_slot
-       }, {
-               .variable = "slot-suffixes",
-               .dispatch = getvar_slot_suffixes
+#if CONFIG_IS_ENABLED(FASTBOOT_FLASH)
        }, {
                .variable = "has-slot",
                .dispatch = getvar_has_slot
+#endif
 #if CONFIG_IS_ENABLED(FASTBOOT_FLASH_MMC)
        }, {
                .variable = "partition-type",
@@ -78,6 +77,9 @@ static const struct {
                .variable = "partition-size",
                .dispatch = getvar_partition_size
 #endif
+       }, {
+               .variable = "is-userspace",
+               .dispatch = getvar_is_userspace
        }
 };
 
@@ -127,7 +129,7 @@ static void getvar_version(char *var_parameter, char *response)
        fastboot_okay(FASTBOOT_VERSION, response);
 }
 
-static void getvar_bootloader_version(char *var_parameter, char *response)
+static void getvar_version_bootloader(char *var_parameter, char *response)
 {
        fastboot_okay(U_BOOT_VERSION, response);
 }
@@ -178,19 +180,39 @@ static void getvar_current_slot(char *var_parameter, char *response)
        fastboot_okay("a", response);
 }
 
-static void getvar_slot_suffixes(char *var_parameter, char *response)
-{
-       fastboot_okay("a,b", response);
-}
-
+#if CONFIG_IS_ENABLED(FASTBOOT_FLASH)
 static void getvar_has_slot(char *part_name, char *response)
 {
-       if (part_name && (!strcmp(part_name, "boot") ||
-                         !strcmp(part_name, "system")))
-               fastboot_okay("yes", response);
-       else
-               fastboot_okay("no", response);
+       char part_name_wslot[PART_NAME_LEN];
+       size_t len;
+       int r;
+
+       if (!part_name || part_name[0] == '\0')
+               goto fail;
+
+       /* part_name_wslot = part_name + "_a" */
+       len = strlcpy(part_name_wslot, part_name, PART_NAME_LEN - 3);
+       if (len > PART_NAME_LEN - 3)
+               goto fail;
+       strcat(part_name_wslot, "_a");
+
+       r = getvar_get_part_info(part_name_wslot, response, NULL);
+       if (r >= 0) {
+               fastboot_okay("yes", response); /* part exists and slotted */
+               return;
+       }
+
+       r = getvar_get_part_info(part_name, response, NULL);
+       if (r >= 0)
+               fastboot_okay("no", response); /* part exists but not slotted */
+
+       /* At this point response is filled with okay or fail string */
+       return;
+
+fail:
+       fastboot_fail("invalid partition name", response);
 }
+#endif
 
 #if CONFIG_IS_ENABLED(FASTBOOT_FLASH_MMC)
 static void getvar_partition_type(char *part_name, char *response)
@@ -223,6 +245,11 @@ static void getvar_partition_size(char *part_name, char *response)
 }
 #endif
 
+static void getvar_is_userspace(char *var_parameter, char *response)
+{
+       fastboot_okay("no", response);
+}
+
 /**
  * fastboot_getvar() - Writes variable indicated by cmd_parameter to response.
  *