@ -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 " ,
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 ) ) ) ;
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 ) ) ) ;
outb ( val , ( ATA_CURR_BASE ( dev ) + CONFIG_SYS_ATA_PORT_ADDR ( port ) ) ) ;
# endif
}
}
void ide_outb ( int dev , int port , unsigned char val )
void ide_outb ( int dev , int port , unsigned char val )
__attribute__ ( ( weak , alias ( " __ide_outb " ) ) ) ;
__attribute__ ( ( weak , alias ( " __ide_outb " ) ) ) ;
@ -526,7 +538,13 @@ unsigned char inline
__ide_inb ( int dev , int port )
__ide_inb ( int dev , int port )
{
{
uchar val ;
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 ) ) ) ;
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 " ,
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 ) ;
dev , port , ( ATA_CURR_BASE ( dev ) + CONFIG_SYS_ATA_PORT_ADDR ( port ) ) , val ) ;
return val ;
return val ;
@ -695,6 +713,7 @@ void ide_init (void)
ide_dev_desc [ i ] . blksz = 0 ;
ide_dev_desc [ i ] . blksz = 0 ;
ide_dev_desc [ i ] . lba = 0 ;
ide_dev_desc [ i ] . lba = 0 ;
ide_dev_desc [ i ] . block_read = ide_read ;
ide_dev_desc [ i ] . block_read = ide_read ;
ide_dev_desc [ i ] . block_write = ide_write ;
if ( ! ide_bus_ok [ IDE_BUS ( i ) ] )
if ( ! ide_bus_ok [ IDE_BUS ( i ) ] )
continue ;
continue ;
ide_led ( led , 1 ) ; /* LED on */
ide_led ( led , 1 ) ; /* LED on */
@ -902,7 +921,11 @@ output_data(int dev, ulong *sect_buf, int words)
static void
static void
output_data ( int dev , ulong * sect_buf , int words )
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 */
# endif /* CONFIG_IDE_SWAP_IO */
@ -960,7 +983,11 @@ input_data(int dev, ulong *sect_buf, int words)
static void
static void
input_data ( int dev , ulong * sect_buf , int words )
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 ) ;
insw ( ATA_CURR_BASE ( dev ) + ATA_DATA_REG , sect_buf , words < < 1 ) ;
# endif
}
}
# endif /* CONFIG_IDE_SWAP_IO */
# endif /* CONFIG_IDE_SWAP_IO */