]> git.kernelconcepts.de Git - karo-tx-uboot.git/blobdiff - fs/ext2/dev.c
Merge branch 'master' of git://git.denx.de/u-boot-microblaze
[karo-tx-uboot.git] / fs / ext2 / dev.c
index 35a576daa8136fc3bcc0de7ad8975111102c762a..874e21161e69cca9e6f39e7e57b29b0a21f33dd6 100644 (file)
 
 
 #include <common.h>
-#if (CONFIG_COMMANDS & CFG_CMD_EXT2)
-
 #include <config.h>
 #include <ext2fs.h>
 
 static block_dev_desc_t *ext2fs_block_dev_desc;
 static disk_partition_t part_info;
 
-#undef DEBUG
-int ext2fs_set_blk_dev (block_dev_desc_t * rbdd, int part)
+int ext2fs_set_blk_dev(block_dev_desc_t *rbdd, int part)
 {
        ext2fs_block_dev_desc = rbdd;
 
@@ -49,81 +46,86 @@ int ext2fs_set_blk_dev (block_dev_desc_t * rbdd, int part)
                        return 0;
                }
        }
-       return (part_info.size);
+       return part_info.size;
 }
 
 
-int ext2fs_devread (int sector, int byte_offset, int byte_len, char *buf) {
-       char sec_buf[SECTOR_SIZE];
-       unsigned block_len;
+int ext2fs_devread(int sector, int byte_offset, int byte_len, char *buf)
+{
+       ALLOC_CACHE_ALIGN_BUFFER(char, sec_buf, SECTOR_SIZE);
+       unsigned sectors;
 
-/*
- *  Check partition boundaries
- */
-       if ((sector < 0)
-           || ((sector + ((byte_offset + byte_len - 1) >> SECTOR_BITS)) >=
+       /*
       *  Check partition boundaries
       */
+       if ((sector < 0) ||
+           ((sector + ((byte_offset + byte_len - 1) >> SECTOR_BITS)) >=
                part_info.size)) {
-       /*      errnum = ERR_OUTSIDE_PART; */
-               printf (" ** ext2fs_devread() read outside partition sector %d\n", sector);
-               return (0);
+               /* errnum = ERR_OUTSIDE_PART; */
+               printf(" ** %s read outside partition sector %d\n",
+                      __func__,
+                      sector);
+               return 0;
        }
 
-/*
- *  Get the read to the beginning of a partition.
- */
+       /*
       *  Get the read to the beginning of a partition.
       */
        sector += byte_offset >> SECTOR_BITS;
        byte_offset &= SECTOR_SIZE - 1;
 
-#if defined(DEBUG)
-       printf (" <%d, %d, %d>\n", sector, byte_offset, byte_len);
-#endif
+       debug(" <%d, %d, %d>\n", sector, byte_offset, byte_len);
 
        if (ext2fs_block_dev_desc == NULL) {
-               printf ("** Invalid Block Device Descriptor (NULL)\n");
-               return (0);
+               printf(" ** %s Invalid Block Device Descriptor (NULL)\n",
+                      __func__);
+               return 0;
        }
 
        if (byte_offset != 0) {
                /* read first part which isn't aligned with start of sector */
                if (ext2fs_block_dev_desc->
-                   block_read (ext2fs_block_dev_desc->dev,
-                               part_info.start + sector, 1,
-                               (unsigned long *) sec_buf) != 1) {
-                       printf (" ** ext2fs_devread() read error **\n");
-                       return (0);
+                   block_read(ext2fs_block_dev_desc->dev,
+                              part_info.start + sector, 1,
+                              (unsigned long *) sec_buf) != 1) {
+                       printf(" ** %s read error **\n", __func__);
+                       return 0;
                }
-               memcpy (buf, sec_buf + byte_offset,
-                       min (SECTOR_SIZE - byte_offset, byte_len));
-               buf += min (SECTOR_SIZE - byte_offset, byte_len);
-               byte_len -= min (SECTOR_SIZE - byte_offset, byte_len);
+               memcpy(buf, sec_buf + byte_offset,
+                      min(SECTOR_SIZE - byte_offset, byte_len));
+               buf += min(SECTOR_SIZE - byte_offset, byte_len);
+               byte_len -= min(SECTOR_SIZE - byte_offset, byte_len);
                sector++;
        }
 
        /*  read sector aligned part */
-       block_len = byte_len & ~(SECTOR_SIZE - 1);
-       if (ext2fs_block_dev_desc->block_read (ext2fs_block_dev_desc->dev,
-                                              part_info.start + sector,
-                                              block_len / SECTOR_SIZE,
-                                              (unsigned long *) buf) !=
-           block_len / SECTOR_SIZE) {
-               printf (" ** ext2fs_devread() read error - block\n");
-               return (0);
+       sectors = byte_len / SECTOR_SIZE;
+
+       if (sectors > 0) {
+               if (ext2fs_block_dev_desc->block_read(
+                       ext2fs_block_dev_desc->dev,
+                       part_info.start + sector,
+                       sectors,
+                       (unsigned long *) buf) != sectors) {
+                       printf(" ** %s read error - block\n", __func__);
+                       return 0;
+               }
+
+               buf += sectors * SECTOR_SIZE;
+               byte_len -= sectors * SECTOR_SIZE;
+               sector += sectors;
        }
-       buf += block_len;
-       byte_len -= block_len;
-       sector += block_len / SECTOR_SIZE;
 
        if (byte_len != 0) {
                /* read rest of data which are not in whole sector */
                if (ext2fs_block_dev_desc->
-                   block_read (ext2fs_block_dev_desc->dev,
-                               part_info.start + sector, 1,
-                               (unsigned long *) sec_buf) != 1) {
-                       printf (" ** ext2fs_devread() read error - last part\n");
-                       return (0);
+                   block_read(ext2fs_block_dev_desc->dev,
+                              part_info.start + sector, 1,
+                              (unsigned long *) sec_buf) != 1) {
+                       printf(" ** %s read error - last part\n", __func__);
+                       return 0;
                }
-               memcpy (buf, sec_buf, byte_len);
+               memcpy(buf, sec_buf, byte_len);
        }
-       return (1);
+       return 1;
 }
-#endif /* CFG_CMD_EXT2FS */