SD AMSv2: Restore access to the last 0xF000 sectors of internal drive

Fixes FS#11965 and FS#12001.  Backports r29625, r29637, r29638.
Repairs r29169.  Thanks to saratoga and funman!

git-svn-id: svn://svn.rockbox.org/rockbox/branches/v3_8@29641 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
Michael Hohmuth 2011-03-24 16:59:18 +00:00
parent 90df1b4a76
commit 0b2894e2ec

View file

@ -826,6 +826,7 @@ static int sd_transfer_sectors(IF_MD2(int drive,) unsigned long start,
int retry_all = 0;
int const retry_data_max = 100; /* Generous, methinks */
int retry_data;
unsigned int real_numblocks;
mutex_lock(&sd_mtx);
#ifndef BOOTLOADER
@ -855,7 +856,13 @@ sd_transfer_retry_with_reinit:
goto sd_transfer_error_no_dma;
}
if((start+count) > card_info[drive].numblocks)
/* Check the real block size after the card has been initialized */
real_numblocks = card_info[drive].numblocks;
/* 'start' represents the real (physical) starting sector
* so we must compare it to the real (physical) number of sectors */
if (drive == INTERNAL_AS3525)
real_numblocks += AMS_OF_SIZE;
if ((start+count) > real_numblocks)
{
ret = -19;
goto sd_transfer_error_no_dma;