summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBjörn Stenberg <bjorn@haxx.se>2002-08-14 16:37:28 +0000
committerBjörn Stenberg <bjorn@haxx.se>2002-08-14 16:37:28 +0000
commit63457c5c638e52349eebdce8ce16bba84723118b (patch)
tree9927d0ed62fdc27890fa8d5b7cb7196c29508565
parent9ab90eabd1053a7ba8fbbd0ace579b519f2338fa (diff)
downloadrockbox-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.c17
-rw-r--r--firmware/drivers/ata.h4
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