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