Add Broadcom / Netgear changes from RAXE 1.0.0.48
[project/bcm63xx/u-boot.git] / cmd / gpt.c
index 33cda513969f659c63f0975721eb61831e66fa2b..01137c87615a6ded8c7077ac1dffa02bfd757f18 100644 (file)
--- a/cmd/gpt.c
+++ b/cmd/gpt.c
@@ -342,17 +342,43 @@ static int get_gpt_info(struct blk_desc *dev_desc)
 }
 
 /* a wrapper to test get_gpt_info */
-static int do_get_gpt_info(struct blk_desc *dev_desc)
+static int do_get_gpt_info(struct blk_desc *dev_desc, char * const namestr)
 {
-       int ret;
+       int numparts;
+       numparts = get_gpt_info(dev_desc);
+
+       if (numparts > 0) {
+               if (namestr) {
+                       char disk_guid[UUID_STR_LEN + 1];
+                       char *partitions_list; 
+                       int partlistlen;
+                       int ret = -1;
+                       ret = get_disk_guid(dev_desc, disk_guid);
+                       if (ret < 0)
+                               return ret;
+
+                       partlistlen = calc_parts_list_len(numparts);
+                       partitions_list = malloc(partlistlen);
+                       if (!partitions_list) {
+                               del_gpt_info();
+                               return -ENOMEM;
+                       }
+                       memset(partitions_list, '\0', partlistlen);
 
-       ret = get_gpt_info(dev_desc);
-       if (ret > 0) {
-               print_gpt_info();
+                       ret = create_gpt_partitions_list(numparts, disk_guid, partitions_list);
+                       if (ret < 0) {
+                               printf("Error: Could not create partition list string!\n");
+                       } else {
+                               env_set(namestr, partitions_list);
+                       }
+                       free(partitions_list);
+               } else {
+                       print_gpt_info();
+               }
                del_gpt_info();
                return 0;
        }
-       return ret;
+       return numparts;
 }
 #endif
 
@@ -849,7 +875,7 @@ static int do_gpt(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
                ret = do_disk_guid(blk_dev_desc, argv[4]);
 #ifdef CONFIG_CMD_GPT_RENAME
        } else if (strcmp(argv[1], "read") == 0) {
-               ret = do_get_gpt_info(blk_dev_desc);
+               ret = do_get_gpt_info(blk_dev_desc, argv[4]);
        } else if ((strcmp(argv[1], "swap") == 0) ||
                   (strcmp(argv[1], "rename") == 0)) {
                ret = do_rename_gpt_parts(blk_dev_desc, argv[1], argv[4], argv[5]);
@@ -885,8 +911,9 @@ U_BOOT_CMD(gpt, CONFIG_SYS_MAXARGS, 1, do_gpt,
        " gpt guid mmc 0 varname\n"
 #ifdef CONFIG_CMD_GPT_RENAME
        "gpt partition renaming commands:\n"
-       " gpt read <interface> <dev>\n"
+       " gpt read <interface> <dev> <varname>\n"
        "    - read GPT into a data structure for manipulation\n"
+       "    - read GPT partitions into environment variable\n"
        " gpt swap <interface> <dev> <name1> <name2>\n"
        "    - change all partitions named name1 to name2\n"
        "      and vice-versa\n"
@@ -895,5 +922,7 @@ U_BOOT_CMD(gpt, CONFIG_SYS_MAXARGS, 1, do_gpt,
        " Example usage:\n"
        " gpt swap mmc 0 foo bar\n"
        " gpt rename mmc 0 3 foo\n"
+       " gpt read mmc 0 3 \n"
+       " gpt read mmc 0 3 varname\n"
 #endif
 );