|
@@ -517,8 +517,20 @@ __ide_outb(int dev, int port, unsigned char val)
|
|
|
{
|
|
|
debug ("ide_outb (dev= %d, port= 0x%x, val= 0x%02x) : @ 0x%08lx\n",
|
|
|
dev, port, val, (ATA_CURR_BASE(dev)+CONFIG_SYS_ATA_PORT_ADDR(port)));
|
|
|
+
|
|
|
+#if defined(CONFIG_IDE_AHB)
|
|
|
+ if (port) {
|
|
|
+ /* write command */
|
|
|
+ ide_write_register(dev, port, val);
|
|
|
+ } else {
|
|
|
+ /* write data */
|
|
|
+ outb(val, (ATA_CURR_BASE(dev)));
|
|
|
+ }
|
|
|
+#else
|
|
|
outb(val, (ATA_CURR_BASE(dev)+CONFIG_SYS_ATA_PORT_ADDR(port)));
|
|
|
+#endif
|
|
|
}
|
|
|
+
|
|
|
void ide_outb (int dev, int port, unsigned char val)
|
|
|
__attribute__((weak, alias("__ide_outb")));
|
|
|
|
|
@@ -526,7 +538,13 @@ unsigned char inline
|
|
|
__ide_inb(int dev, int port)
|
|
|
{
|
|
|
uchar val;
|
|
|
+
|
|
|
+#if defined(CONFIG_IDE_AHB)
|
|
|
+ val = ide_read_register(dev, port);
|
|
|
+#else
|
|
|
val = inb((ATA_CURR_BASE(dev)+CONFIG_SYS_ATA_PORT_ADDR(port)));
|
|
|
+#endif
|
|
|
+
|
|
|
debug ("ide_inb (dev= %d, port= 0x%x) : @ 0x%08lx -> 0x%02x\n",
|
|
|
dev, port, (ATA_CURR_BASE(dev)+CONFIG_SYS_ATA_PORT_ADDR(port)), val);
|
|
|
return val;
|
|
@@ -695,6 +713,7 @@ void ide_init (void)
|
|
|
ide_dev_desc[i].blksz=0;
|
|
|
ide_dev_desc[i].lba=0;
|
|
|
ide_dev_desc[i].block_read=ide_read;
|
|
|
+ ide_dev_desc[i].block_write = ide_write;
|
|
|
if (!ide_bus_ok[IDE_BUS(i)])
|
|
|
continue;
|
|
|
ide_led (led, 1); /* LED on */
|
|
@@ -902,7 +921,11 @@ output_data(int dev, ulong *sect_buf, int words)
|
|
|
static void
|
|
|
output_data(int dev, ulong *sect_buf, int words)
|
|
|
{
|
|
|
- outsw(ATA_CURR_BASE(dev)+ATA_DATA_REG, sect_buf, words<<1);
|
|
|
+#if defined(CONFIG_IDE_AHB)
|
|
|
+ ide_write_data(dev, sect_buf, words);
|
|
|
+#else
|
|
|
+ outsw(ATA_CURR_BASE(dev)+ATA_DATA_REG, sect_buf, words << 1);
|
|
|
+#endif
|
|
|
}
|
|
|
#endif /* CONFIG_IDE_SWAP_IO */
|
|
|
|
|
@@ -960,7 +983,11 @@ input_data(int dev, ulong *sect_buf, int words)
|
|
|
static void
|
|
|
input_data(int dev, ulong *sect_buf, int words)
|
|
|
{
|
|
|
+#if defined(CONFIG_IDE_AHB)
|
|
|
+ ide_read_data(dev, sect_buf, words);
|
|
|
+#else
|
|
|
insw(ATA_CURR_BASE(dev)+ATA_DATA_REG, sect_buf, words << 1);
|
|
|
+#endif
|
|
|
}
|
|
|
|
|
|
#endif /* CONFIG_IDE_SWAP_IO */
|