mbr: move mbr related codes / add mbr default command
authorMinkyu Kang <mk7.kang@samsung.com>
Wed, 5 Jan 2011 06:05:28 +0000 (15:05 +0900)
committerMinkyu Kang <mk7.kang@samsung.com>
Wed, 5 Jan 2011 06:05:28 +0000 (15:05 +0900)
Signed-off-by: Minkyu Kang <mk7.kang@samsung.com>
common/cmd_usbd.c
drivers/misc/mbr.c
include/mbr.h

index 4cd6804..95c7f9f 100644 (file)
@@ -628,63 +628,6 @@ static int write_file_mmc_part(struct usbd_ops *usbd, u32 len)
 }
 #endif
 
-static unsigned int mbr_offset[16];
-static int mbr_parts = 0;
-
-static unsigned long memsize_parse (const char *const ptr, const char **retptr)
-{
-       unsigned long ret = simple_strtoul(ptr, (char **)retptr, 0);
-
-       switch (**retptr) {
-               case 'G':
-               case 'g':
-                       ret <<= 10;
-               case 'M':
-               case 'm':
-                       ret <<= 10;
-               case 'K':
-               case 'k':
-                       ret <<= 10;
-                       (*retptr)++;
-               default:
-                       break;
-       }
-
-       return ret;
-}
-
-static void set_mbr_info(struct usbd_ops *usbd, char *ramaddr, u32 len)
-{
-       char mbr_str[256];
-       char save[16][16];
-       char *p;
-       char *tok;
-       unsigned int size[16];
-       int i = 0;
-
-       strncpy(mbr_str, ramaddr, len);
-       p = mbr_str;
-
-       for (i = 0; ; i++, p = NULL) {
-               tok = strtok(p, ",");
-               if (tok == NULL)
-                       break;
-               strcpy(save[i], tok);
-               printf("part%d: %s\n", i, save[i]);
-       }
-
-       mbr_parts = i;
-       printf("find %d partitions\n", mbr_parts);
-
-       for (i = 0; i < mbr_parts; i++) {
-               p = save[i];
-               size[i] = memsize_parse(p, (const char **)&p) / 512;
-       }
-
-       puts("save the MBR Table...\n");
-       set_mbr_table(0x800, mbr_parts, size, mbr_offset);
-}
-
 static int write_mmc_image(struct usbd_ops *usbd, unsigned int len, int part_num)
 {
        int ret = 0;
@@ -1036,7 +979,7 @@ static int write_v2_image(struct usbd_ops *usbd, int img_type,
 
        case IMG_MBR:
 #ifdef CONFIG_CMD_MBR
-               set_mbr_info(usbd, (char *)down_ram_addr, len);
+               set_mbr_info((char *)down_ram_addr, len);
 #endif
                break;
 
@@ -1438,14 +1381,8 @@ int do_usbd_down(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 #ifdef CONFIG_CMD_MBR
        /* get mbr info */
        mbr_parts = get_mbr_table(mbr_offset);
-       if (!mbr_parts) {
-               char *mbrparts;
-
-               puts("using default MBR\n");
-
-               mbrparts = getenv("mbrparts");
-               set_mbr_info(usbd, mbrparts, strlen(mbrparts));
-       }
+       if (!mbr_parts)
+               run_command("mbr default", 0);
 #endif
 
        /* init the usb controller */
index 885c20f..8083ada 100644 (file)
@@ -9,6 +9,9 @@
 
 #define SIGNATURE      ((unsigned short) 0xAA55)
 
+unsigned int mbr_offset[16];
+unsigned int mbr_parts = 0;
+
 static int logical = 4;
 static int extended_lba;
 
@@ -311,14 +314,79 @@ static void mbr_show(void)
        }
 }
 
+static unsigned long memsize_parse (const char *const ptr, const char **retptr)
+{
+       unsigned long ret = simple_strtoul(ptr, (char **)retptr, 0);
+
+       switch (**retptr) {
+               case 'G':
+               case 'g':
+                       ret <<= 10;
+               case 'M':
+               case 'm':
+                       ret <<= 10;
+               case 'K':
+               case 'k':
+                       ret <<= 10;
+                       (*retptr)++;
+               default:
+                       break;
+       }
+
+       return ret;
+}
+
+void set_mbr_info(char *ramaddr, unsigned int len)
+{
+       char mbr_str[256];
+       char save[16][16];
+       char *p;
+       char *tok;
+       unsigned int size[16];
+       int i = 0;
+
+       strncpy(mbr_str, ramaddr, len);
+       p = mbr_str;
+
+       for (i = 0; ; i++, p = NULL) {
+               tok = strtok(p, ",");
+               if (tok == NULL)
+                       break;
+               strcpy(save[i], tok);
+               printf("part%d: %s\n", i, save[i]);
+       }
+
+       mbr_parts = i;
+       printf("find %d partitions\n", mbr_parts);
+
+       for (i = 0; i < mbr_parts; i++) {
+               p = save[i];
+               size[i] = memsize_parse(p, (const char **)&p) / 512;
+       }
+
+       puts("save the MBR Table...\n");
+       set_mbr_table(0x800, mbr_parts, size, mbr_offset);
+}
+
+static void mbr_default(void)
+{
+       char *mbrparts;
+
+       puts("using default MBR\n");
+
+       mbrparts = getenv("mbrparts");
+       set_mbr_info(mbrparts, strlen(mbrparts));
+}
+
 static int do_mbr(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 {
        switch (argc) {
        case 2:
-               if (strncmp(argv[1], "show", 2) == 0) {
+               if (strncmp(argv[1], "show", 2) == 0)
                        mbr_show();
-                       break;
-               }
+               else if (strncmp(argv[1], "default", 3) == 0)
+                       mbr_default();
+               break;
        default:
                cmd_usage(cmdtp);
                return 1;
@@ -331,4 +399,5 @@ U_BOOT_CMD(
        mbr,    CONFIG_SYS_MAXARGS,     1, do_mbr,
        "Master Boot Record",
        "show - show MBR\n"
+       "mbr default - reset MBR partition to defaults\n"
 );
index 09c8e63..e2c29e8 100644 (file)
@@ -19,6 +19,10 @@ struct mbr {
        unsigned short signature;
 };
 
+extern unsigned int mbr_offset[16];
+extern unsigned int mbr_parts;
+
+void set_mbr_info(char *ramaddr, unsigned int len);
 void set_mbr_table(unsigned int start_addr, int parts,
                unsigned int *blocks, unsigned int *part_offset);
 int get_mbr_table(unsigned int *part_offset);