diff options
Diffstat (limited to 'common/cmd_ide.c')
| -rw-r--r-- | common/cmd_ide.c | 37 | 
1 files changed, 22 insertions, 15 deletions
| diff --git a/common/cmd_ide.c b/common/cmd_ide.c index a4155029a..ce99a41ab 100644 --- a/common/cmd_ide.c +++ b/common/cmd_ide.c @@ -31,20 +31,26 @@  #include <command.h>  #include <image.h>  #include <asm/byteorder.h> +  #if defined(CONFIG_IDE_8xx_DIRECT) || defined(CONFIG_IDE_PCMCIA)  # include <pcmcia.h>  #endif +  #ifdef CONFIG_8xx  # include <mpc8xx.h>  #endif +  #ifdef CONFIG_MPC5xxx  #include <mpc5xxx.h>  #endif +  #include <ide.h>  #include <ata.h> +  #ifdef CONFIG_STATUS_LED  # include <status_led.h>  #endif +  #ifndef __PPC__  #include <asm/io.h>  #ifdef __MIPS__ @@ -182,7 +188,7 @@ static void ident_cpy (unsigned char *dest, unsigned char *src, unsigned int len  #ifdef CONFIG_ATAPI  static void	atapi_inquiry(block_dev_desc_t *dev_desc); -ulong atapi_read (int device, lbaint_t blknr, ulong blkcnt, ulong *buffer); +ulong atapi_read (int device, lbaint_t blknr, ulong blkcnt, void *buffer);  #endif @@ -417,7 +423,7 @@ int do_diskboot (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])  		}  		part = simple_strtoul(++ep, NULL, 16);  	} -	if (get_partition_info (ide_dev_desc, part, &info)) { +	if (get_partition_info (&ide_dev_desc[dev], part, &info)) {  		SHOW_BOOT_PROGRESS (-1);  		return 1;  	} @@ -507,9 +513,11 @@ void ide_init (void)  #endif  	unsigned char c;  	int i, bus; +#if defined(CONFIG_AMIGAONEG3SE) || defined(CONFIG_SC3) +	unsigned int ata_reset_time; +#endif  #ifdef CONFIG_AMIGAONEG3SE  	unsigned int max_bus_scan; -	unsigned int ata_reset_time;  	char *s;  #endif  #ifdef CONFIG_IDE_8xx_PCCARD @@ -611,10 +619,9 @@ void ide_init (void)  		udelay (100000);		/* 100 ms */  		ide_outb (dev, ATA_DEV_HD, ATA_LBA | ATA_DEVICE(dev));  		udelay (100000);		/* 100 ms */ -#ifdef CONFIG_AMIGAONEG3SE -		ata_reset_time = ATA_RESET_TIME; -		s = getenv("ide_reset_timeout"); -		if (s) ata_reset_time = 2*simple_strtol(s, NULL, 10); +#if defined(CONFIG_AMIGAONEG3SE) || defined(CONFIG_SC3) +		if ((s = getenv("ide_reset_timeout")) != NULL) +			ata_reset_time = simple_strtol(s, NULL, 10);  #endif  		i = 0;  		do { @@ -622,7 +629,7 @@ void ide_init (void)  			c = ide_inb (dev, ATA_STATUS);  			i++; -#ifdef CONFIG_AMIGAONEG3SE +#if defined(CONFIG_AMIGAONEG3SE) || defined(CONFIG_SC3)  			if (i > (ata_reset_time * 100)) {  #else  			if (i > (ATA_RESET_TIME * 100)) { @@ -697,7 +704,7 @@ void ide_init (void)  block_dev_desc_t * ide_get_dev(int dev)  { -	return ((block_dev_desc_t *)&ide_dev_desc[dev]); +	return (dev < CFG_IDE_MAXDEVICE) ? &ide_dev_desc[dev] : NULL;  } @@ -1227,7 +1234,7 @@ static void ide_ident (block_dev_desc_t *dev_desc)  /* ------------------------------------------------------------------------- */ -ulong ide_read (int device, lbaint_t blknr, ulong blkcnt, ulong *buffer) +ulong ide_read (int device, lbaint_t blknr, ulong blkcnt, void *buffer)  {  	ulong n = 0;  	unsigned char c; @@ -1337,7 +1344,7 @@ ulong ide_read (int device, lbaint_t blknr, ulong blkcnt, ulong *buffer)  		++n;  		++blknr; -		buffer += ATA_SECTORWORDS; +		buffer += ATA_BLOCKSIZE;  	}  IDE_READ_E:  	ide_led (DEVICE_LED(device), 0);	/* LED off	*/ @@ -1347,7 +1354,7 @@ IDE_READ_E:  /* ------------------------------------------------------------------------- */ -ulong ide_write (int device, lbaint_t blknr, ulong blkcnt, ulong *buffer) +ulong ide_write (int device, lbaint_t blknr, ulong blkcnt, void *buffer)  {  	ulong n = 0;  	unsigned char c; @@ -1421,7 +1428,7 @@ ulong ide_write (int device, lbaint_t blknr, ulong blkcnt, ulong *buffer)  		c = ide_inb (device, ATA_STATUS);	/* clear IRQ */  		++n;  		++blknr; -		buffer += ATA_SECTORWORDS; +		buffer += ATA_BLOCKSIZE;  	}  WR_OUT:  	ide_led (DEVICE_LED(device), 0);	/* LED off	*/ @@ -2009,7 +2016,7 @@ static void	atapi_inquiry(block_dev_desc_t * dev_desc)  #define ATAPI_READ_BLOCK_SIZE	2048	/* assuming CD part */  #define ATAPI_READ_MAX_BLOCK ATAPI_READ_MAX_BYTES/ATAPI_READ_BLOCK_SIZE	/* max blocks */ -ulong atapi_read (int device, lbaint_t blknr, ulong blkcnt, ulong *buffer) +ulong atapi_read (int device, lbaint_t blknr, ulong blkcnt, void *buffer)  {  	ulong n = 0;  	unsigned char ccb[12]; /* Command descriptor block */ @@ -2045,7 +2052,7 @@ ulong atapi_read (int device, lbaint_t blknr, ulong blkcnt, ulong *buffer)  		n+=cnt;  		blkcnt-=cnt;  		blknr+=cnt; -		buffer+=cnt*(ATAPI_READ_BLOCK_SIZE/4); /* ulong blocksize in ulong */ +		buffer+=(cnt*ATAPI_READ_BLOCK_SIZE);  	} while (blkcnt > 0);  	return (n);  } |