diff options
| author | Björn Stenberg <bjorn@haxx.se> | 2002-08-14 16:37:28 +0000 |
|---|---|---|
| committer | Björn Stenberg <bjorn@haxx.se> | 2002-08-14 16:37:28 +0000 |
| commit | 63457c5c638e52349eebdce8ce16bba84723118b (patch) | |
| tree | 9927d0ed62fdc27890fa8d5b7cb7196c29508565 | |
| parent | 9ab90eabd1053a7ba8fbbd0ace579b519f2338fa (diff) | |
| download | rockbox-63457c5c638e52349eebdce8ce16bba84723118b.zip rockbox-63457c5c638e52349eebdce8ce16bba84723118b.tar.gz rockbox-63457c5c638e52349eebdce8ce16bba84723118b.tar.bz2 rockbox-63457c5c638e52349eebdce8ce16bba84723118b.tar.xz | |
Added support for reading/writing 256 sectors
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@1736 a1c6a512-1295-4272-9138-f99709370657
| -rw-r--r-- | firmware/drivers/ata.c | 17 | ||||
| -rw-r--r-- | firmware/drivers/ata.h | 4 |
2 files changed, 14 insertions, 7 deletions
diff --git a/firmware/drivers/ata.c b/firmware/drivers/ata.c index 8e2aa48..ebe9602 100644 --- a/firmware/drivers/ata.c +++ b/firmware/drivers/ata.c @@ -136,10 +136,10 @@ static int wait_for_end_of_transfer(void) } int ata_read_sectors(unsigned long start, - unsigned char count, + int count, void* buf) __attribute__ ((section (".icode"))); int ata_read_sectors(unsigned long start, - unsigned char count, + int count, void* buf) { int i; @@ -169,7 +169,11 @@ int ata_read_sectors(unsigned long start, led(true); - ATA_NSECTOR = count; + if ( count == 256 ) + ATA_NSECTOR = 0; /* 0 means 256 sectors */ + else + ATA_NSECTOR = (unsigned char)count; + ATA_SECTOR = start & 0xff; ATA_LCYL = (start >> 8) & 0xff; ATA_HCYL = (start >> 16) & 0xff; @@ -215,7 +219,7 @@ int ata_read_sectors(unsigned long start, } int ata_write_sectors(unsigned long start, - unsigned char count, + int count, void* buf) { int i; @@ -242,7 +246,10 @@ int ata_write_sectors(unsigned long start, led(true); - ATA_NSECTOR = count; + if ( count == 256 ) + ATA_NSECTOR = 0; /* 0 means 256 sectors */ + else + ATA_NSECTOR = (unsigned char)count; ATA_SECTOR = start & 0xff; ATA_LCYL = (start >> 8) & 0xff; ATA_HCYL = (start >> 16) & 0xff; diff --git a/firmware/drivers/ata.h b/firmware/drivers/ata.h index aa9c767..4209fdc 100644 --- a/firmware/drivers/ata.h +++ b/firmware/drivers/ata.h @@ -40,10 +40,10 @@ extern int ata_hard_reset(void); extern int ata_soft_reset(void); extern int ata_init(void); extern int ata_read_sectors(unsigned long start, - unsigned char count, + int count, void* buf); extern int ata_write_sectors(unsigned long start, - unsigned char count, + int count, void* buf); #endif |