summaryrefslogtreecommitdiffstats
path: root/firmware
diff options
context:
space:
mode:
authorJörg Hohensohn <hohensoh@rockbox.org>2005-01-03 23:20:31 +0000
committerJörg Hohensohn <hohensoh@rockbox.org>2005-01-03 23:20:31 +0000
commit81f2a4a6cae10d62a698cd8bc857a0d602769cc9 (patch)
treea5f2a1ea9dbade0e315490e4f8b255dcc9a91e6f /firmware
parentdcdffe828c110adc42c08f32be4fe0acf70a86c1 (diff)
downloadrockbox-81f2a4a6cae10d62a698cd8bc857a0d602769cc9.tar.gz
rockbox-81f2a4a6cae10d62a698cd8bc857a0d602769cc9.zip
select the card within the mutex, seems more safe
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@5530 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'firmware')
-rw-r--r--firmware/drivers/ata_mmc.c26
1 files changed, 17 insertions, 9 deletions
diff --git a/firmware/drivers/ata_mmc.c b/firmware/drivers/ata_mmc.c
index ba79cc516a..a62f778cfd 100644
--- a/firmware/drivers/ata_mmc.c
+++ b/firmware/drivers/ata_mmc.c
@@ -110,7 +110,9 @@ static unsigned char sector_buffer[2][(SECTOR_SIZE+4)];
static int current_buffer = 0;
static tCardInfo card_info[2];
+#ifndef HAVE_MULTIVOLUME
static int current_card = 0;
+#endif
static bool last_mmc_status = false;
static int countdown; /* for mmc switch debouncing */
@@ -620,15 +622,17 @@ int ata_read_sectors(
unsigned char response;
void *inbuf_prev = NULL;
tCardInfo *card;
-#ifdef HAVE_MULTIVOLUME
- current_card = drive;
-#endif
- card = &card_info[current_card];
+
addr = start * SECTOR_SIZE;
mutex_lock(&mmc_mutex);
+#ifdef HAVE_MULTIVOLUME
+ card = &card_info[drive];
+ ret = select_card(drive);
+#else
+ card = &card_info[current_card];
ret = select_card(current_card);
-
+#endif
if (ret == 0)
{
if (incount == 1)
@@ -678,10 +682,6 @@ int ata_write_sectors(IF_MV2(int drive,)
unsigned long addr;
unsigned char response;
tCardInfo *card;
-#ifdef HAVE_MULTIVOLUME
- current_card = drive;
-#endif
- card = &card_info[current_card];
if (start == 0)
panicf("Writing on sector 0\n");
@@ -689,7 +689,13 @@ int ata_write_sectors(IF_MV2(int drive,)
addr = start * SECTOR_SIZE;
mutex_lock(&mmc_mutex);
+#ifdef HAVE_MULTIVOLUME
+ card = &card_info[drive];
+ ret = select_card(drive);
+#else
+ card = &card_info[current_card];
ret = select_card(current_card);
+#endif
if (ret == 0)
{
@@ -859,6 +865,7 @@ int ata_init(void)
PBIOR &= ~0x0C00; /* TxD1, RxD1 input */
last_mmc_status = mmc_detect();
+#ifndef HAVE_MULTIVOLUME
if (last_mmc_status)
{ /* MMC inserted */
current_card = 1;
@@ -867,6 +874,7 @@ int ata_init(void)
{ /* no MMC, use internal memory */
current_card = 0;
}
+#endif
ata_enable(true);