treewide: replace #include <asm/errno.h> with <linux/errno.h>
[platform/kernel/u-boot.git] / common / ide.c
index adc1966..ac5b91c 100644 (file)
@@ -7,6 +7,7 @@
 
 #include <common.h>
 #include <ata.h>
+#include <dm.h>
 #include <ide.h>
 #include <watchdog.h>
 #include <asm/io.h>
@@ -873,8 +874,10 @@ void ide_init(void)
                ide_dev_desc[i].log2blksz =
                        LOG2_INVALID(typeof(ide_dev_desc[i].log2blksz));
                ide_dev_desc[i].lba = 0;
+#ifndef CONFIG_BLK
                ide_dev_desc[i].block_read = ide_read;
                ide_dev_desc[i].block_write = ide_write;
+#endif
                if (!ide_bus_ok[IDE_BUS(i)])
                        continue;
                ide_led(led, 1);        /* LED on       */
@@ -890,13 +893,6 @@ void ide_init(void)
        WATCHDOG_RESET();
 }
 
-#ifdef CONFIG_PARTITIONS
-struct blk_desc *ide_get_dev(int dev)
-{
-       return (dev < CONFIG_SYS_IDE_MAXDEVICE) ? &ide_dev_desc[dev] : NULL;
-}
-#endif
-
 /* We only need to swap data if we are running on a big endian cpu. */
 #if defined(__LITTLE_ENDIAN)
 __weak void ide_input_swap_data(int dev, ulong *sect_buf, int words)
@@ -982,9 +978,17 @@ __weak void ide_input_data(int dev, ulong *sect_buf, int words)
 
 #endif /* CONFIG_IDE_SWAP_IO */
 
+#ifdef CONFIG_BLK
+ulong ide_read(struct udevice *dev, lbaint_t blknr, lbaint_t blkcnt,
+              void *buffer)
+#else
 ulong ide_read(struct blk_desc *block_dev, lbaint_t blknr, lbaint_t blkcnt,
               void *buffer)
+#endif
 {
+#ifdef CONFIG_BLK
+       struct blk_desc *block_dev = dev_get_uclass_platdata(dev);
+#endif
        int device = block_dev->devnum;
        ulong n = 0;
        unsigned char c;
@@ -1104,9 +1108,17 @@ IDE_READ_E:
        return n;
 }
 
+#ifdef CONFIG_BLK
+ulong ide_write(struct udevice *dev, lbaint_t blknr, lbaint_t blkcnt,
+               const void *buffer)
+#else
 ulong ide_write(struct blk_desc *block_dev, lbaint_t blknr, lbaint_t blkcnt,
                const void *buffer)
+#endif
 {
+#ifdef CONFIG_BLK
+       struct blk_desc *block_dev = dev_get_uclass_platdata(dev);
+#endif
        int device = block_dev->devnum;
        ulong n = 0;
        unsigned char c;
@@ -1198,9 +1210,22 @@ int ide_device_present(int dev)
 }
 #endif
 
+#ifdef CONFIG_BLK
+static const struct blk_ops ide_blk_ops = {
+       .read   = ide_read,
+       .write  = ide_write,
+};
+
+U_BOOT_DRIVER(ide_blk) = {
+       .name           = "ide_blk",
+       .id             = UCLASS_BLK,
+       .ops            = &ide_blk_ops,
+};
+#else
 U_BOOT_LEGACY_BLK(ide) = {
        .if_typename    = "ide",
        .if_type        = IF_TYPE_IDE,
        .max_devs       = CONFIG_SYS_IDE_MAXDEVICE,
        .desc           = ide_dev_desc,
 };
+#endif