]> git.ipfire.org Git - thirdparty/grub.git/commitdiff
2008-05-28 Robert Millan <rmh@aybabtu.com>
authorrobertmh <robertmh@localhost>
Wed, 28 May 2008 19:53:25 +0000 (19:53 +0000)
committerrobertmh <robertmh@localhost>
Wed, 28 May 2008 19:53:25 +0000 (19:53 +0000)
        * util/biosdisk.c (linux_find_partition, get_os_disk): Handle MMC
        devices.
        * util/grub-mkdevicemap.c (get_mmc_disk_name)
        (make_device_map): Likewise.

ChangeLog
util/biosdisk.c
util/grub-mkdevicemap.c

index d4dcd590780aec9fea280e4cac150482ee735dbb..2f6b3f6974734e4bbcf4b74d5fdb32d3ddd9b3d5 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2008-05-28  Robert Millan  <rmh@aybabtu.com>
+
+       * util/biosdisk.c (linux_find_partition, get_os_disk): Handle MMC
+       devices.
+       * util/grub-mkdevicemap.c (get_mmc_disk_name)
+       (make_device_map): Likewise.
+
 2008-05-20  Bean  <bean123ch@gmail.com>
 
        * fs/fshelp.c (grub_fshelp_map_block): New function.
index ddb3718c04688f04b2af1dc0d522ff5b90b9631f..651677f02c4c6cbcf150ef8df037fd90689b50a2 100644 (file)
@@ -239,7 +239,7 @@ linux_find_partition (char *dev, unsigned long sector)
            || strncmp (real_dev + 5, "sd", 2) == 0)
           && real_dev[7] >= 'a' && real_dev[7] <= 'z')
     {
-      p = real_dev + 8;
+      p = real_dev + sizeof("/dev/hda")-1;
       format = "%d";
     }
   else if (strncmp (real_dev + 5, "rd/c", 4) == 0)     /* dac960 */
@@ -266,6 +266,11 @@ linux_find_partition (char *dev, unsigned long sector)
 
       format = "p%d";
     }
+  else if (strncmp (real_dev + 5, "mmcblk", sizeof("mmcblk")-1) == 0)
+    {
+      p = real_dev + sizeof("/dev/mmcblk0")-1;
+      format = "p%d";
+    }
   else
     return 0;
 
@@ -675,6 +680,17 @@ get_os_disk (const char *os_dev)
          return path;
        }
       
+      /* If this is a MultiMediaCard (MMC).  */
+      if (strncmp ("mmcblk", p, sizeof ("mmcblk") - 1) == 0)
+       {
+         /* /dev/mmcblk[0-9]+(p[0-9]+)? */
+         p = strchr (p, 'p');
+         if (p)
+           *p = '\0';
+
+         return path;
+       }
+      
       /* If this is an IDE, SCSI or Virtio disk.  */
       if ((strncmp ("hd", p, 2) == 0
           || strncmp ("vd", p, 2) == 0
index d24d844163ae47171b9198416c1069d3a567a043..2e8e82dba34997dd0091f33e4770be112bb1d8dc 100644 (file)
@@ -296,6 +296,12 @@ get_cciss_disk_name (char *name, int controller, int drive)
   sprintf (name, "/dev/cciss/c%dd%d", controller, drive);
 }
 
+static void
+get_mmc_disk_name (char *name, int unit)
+{
+  sprintf (name, "/dev/mmcblk%d", unit);
+}
+
 static void
 get_xvd_disk_name (char *name, int unit)
 {
@@ -598,6 +604,22 @@ make_device_map (const char *device_map, int floppy_disks)
       }
   }
 
+  /* MultiMediaCard (MMC).  */
+  for (i = 0; i < 10; i++)
+    {
+      char name[16];
+      
+      get_mmc_disk_name (name, i);
+      if (check_device (name))
+       {
+         char *p;
+         p = grub_util_get_disk_name (num_hd, name);
+         fprintf (fp, "(%s)\t%s\n", p, name);
+         free (p);
+         num_hd++;
+       }
+    }
+
  finish:
 #endif /* __linux__ */