From 63457c5c638e52349eebdce8ce16bba84723118b Mon Sep 17 00:00:00 2001 From: Björn Stenberg Date: Wed, 14 Aug 2002 16:37:28 +0000 Subject: Added support for reading/writing 256 sectors git-svn-id: svn://svn.rockbox.org/rockbox/trunk@1736 a1c6a512-1295-4272-9138-f99709370657 --- firmware/drivers/ata.c | 17 ++++++++++++----- firmware/drivers/ata.h | 4 ++-- 2 files changed, 14 insertions(+), 7 deletions(-) (limited to 'firmware/drivers') diff --git a/firmware/drivers/ata.c b/firmware/drivers/ata.c index 8e2aa48017..ebe9602f01 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 aa9c767cbb..4209fdcd1e 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 -- cgit v1.2.3