]> git.kernelconcepts.de Git - karo-tx-uboot.git/blobdiff - disk/part.c
karo: configs: Update the tx6*_defconfig files from defconfigs generated with 'make...
[karo-tx-uboot.git] / disk / part.c
index 2827089d8d5f74eeb0d0a6b12863bf30e110f63e..18fcc7b15633fdb3813152875e6f1b3ba4eb602c 100644 (file)
@@ -29,6 +29,9 @@ static const struct block_drvr block_drvr[] = {
 #if defined(CONFIG_CMD_IDE)
        { .name = "ide", .get_dev = ide_get_dev, },
 #endif
+#if defined(CONFIG_CMD_PATA)
+       { .name = "pata", .get_dev = pata_get_dev, },
+#endif
 #if defined(CONFIG_CMD_SATA)
        {.name = "sata", .get_dev = sata_get_dev, },
 #endif
@@ -57,7 +60,7 @@ static const struct block_drvr block_drvr[] = {
 DECLARE_GLOBAL_DATA_PTR;
 
 #ifdef HAVE_BLOCK_DEVICE
-block_dev_desc_t *get_dev_hwpart(const char *ifname, int dev, int hwpart)
+static block_dev_desc_t *get_dev_hwpart(const char *ifname, int dev, int hwpart)
 {
        const struct block_drvr *drvr = block_drvr;
        block_dev_desc_t* (*reloc_get_dev)(int dev);
@@ -86,7 +89,7 @@ block_dev_desc_t *get_dev_hwpart(const char *ifname, int dev, int hwpart)
                        block_dev_desc_t *dev_desc = reloc_get_dev(dev);
                        if (!dev_desc)
                                return NULL;
-                       if (hwpart == -1)
+                       if (hwpart == 0 && !select_hwpart)
                                return dev_desc;
                        if (!select_hwpart)
                                return NULL;
@@ -102,7 +105,7 @@ block_dev_desc_t *get_dev_hwpart(const char *ifname, int dev, int hwpart)
 
 block_dev_desc_t *get_dev(const char *ifname, int dev)
 {
-       return get_dev_hwpart(ifname, dev, -1);
+       return get_dev_hwpart(ifname, dev, 0);
 }
 #else
 block_dev_desc_t *get_dev_hwpart(const char *ifname, int dev, int hwpart)
@@ -133,7 +136,7 @@ typedef lbaint_t lba512_t;
  * Overflowless variant of (block_count * mul_by / div_by)
  * when div_by > mul_by
  */
-static lba512_t lba512_muldiv (lba512_t block_count, lba512_t mul_by, lba512_t div_by)
+static lba512_t lba512_muldiv(lba512_t block_count, lba512_t mul_by, lba512_t div_by)
 {
        lba512_t bc_quot, bc_rem;
 
@@ -215,7 +218,8 @@ void dev_print (block_dev_desc_t *dev_desc)
 
                lba512 = (lba * (dev_desc->blksz/512));
                /* round to 1 digit */
-               mb = lba512_muldiv(lba512, 10, 2048);   /* 2048 = (1024 * 1024) / 512 MB */
+               /* 2048 = (1024 * 1024) / 512 MB */
+               mb = lba512_muldiv(lba512, 10, 2048);
 
                mb_quot = mb / 10;
                mb_rem  = mb - (10 * mb_quot);
@@ -248,7 +252,7 @@ void dev_print (block_dev_desc_t *dev_desc)
 
 #ifdef HAVE_BLOCK_DEVICE
 
-void init_part (block_dev_desc_t * dev_desc)
+void init_part(block_dev_desc_t *dev_desc)
 {
 #ifdef CONFIG_ISO_PARTITION
        if (test_part_iso(dev_desc) == 0) {
@@ -295,7 +299,7 @@ void init_part (block_dev_desc_t * dev_desc)
        defined(CONFIG_AMIGA_PARTITION) || \
        defined(CONFIG_EFI_PARTITION)
 
-static void print_part_header (const char *type, block_dev_desc_t * dev_desc)
+static void print_part_header(const char *type, block_dev_desc_t *dev_desc)
 {
        puts ("\nPartition Map for ");
        switch (dev_desc->if_type) {
@@ -333,7 +337,7 @@ static void print_part_header (const char *type, block_dev_desc_t * dev_desc)
 
 #endif /* any CONFIG_..._PARTITION */
 
-void print_part (block_dev_desc_t * dev_desc)
+void print_part(block_dev_desc_t * dev_desc)
 {
 
                switch (dev_desc->part_type) {
@@ -381,8 +385,8 @@ void print_part (block_dev_desc_t * dev_desc)
 
 #endif /* HAVE_BLOCK_DEVICE */
 
-int get_partition_info(block_dev_desc_t *dev_desc, int part
-                                       , disk_partition_t *info)
+int get_partition_info(block_dev_desc_t *dev_desc, int part,
+                      disk_partition_t *info)
 {
 #ifdef HAVE_BLOCK_DEVICE
 
@@ -460,7 +464,7 @@ int get_device(const char *ifname, const char *dev_hwpart_str,
                hwpart_str++;
        } else {
                dev_str = dev_hwpart_str;
-               hwpart = -1;
+               hwpart = 0;
        }
 
        dev = simple_strtoul(dev_str, &ep, 16);
@@ -510,6 +514,25 @@ int get_device_and_partition(const char *ifname, const char *dev_part_str,
        int part;
        disk_partition_t tmpinfo;
 
+       /*
+        * Special-case a pseudo block device "hostfs", to allow access to the
+        * host's own filesystem.
+        */
+       if (0 == strcmp(ifname, "hostfs")) {
+               *dev_desc = NULL;
+               info->start = 0;
+               info->size = 0;
+               info->blksz = 0;
+               info->bootable = 0;
+               strcpy((char *)info->type, BOOT_PART_TYPE);
+               strcpy((char *)info->name, "Sandbox host");
+#ifdef CONFIG_PARTITION_UUIDS
+               info->uuid[0] = 0;
+#endif
+
+               return 0;
+       }
+
        /* If no dev_part_str, use bootdevice environment variable */
        if (!dev_part_str || !strlen(dev_part_str) ||
            !strcmp(dev_part_str, "-"))