From 12375d1d3aa41f7d277a9af584c7b810b636ec95 Mon Sep 17 00:00:00 2001 From: Michael Sevakis Date: Wed, 2 Mar 2011 08:49:38 +0000 Subject: Merge functionality of wakeups and semaphores-- fewer APIs and object types. semaphore_wait takes a timeout now so codecs and plugins have to be made incompatible. Don't make semaphores for targets not using them. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@29492 a1c6a512-1295-4272-9138-f99709370657 --- firmware/target/arm/imx31/ata-imx31.c | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) (limited to 'firmware/target/arm/imx31/ata-imx31.c') diff --git a/firmware/target/arm/imx31/ata-imx31.c b/firmware/target/arm/imx31/ata-imx31.c index d539282e70..8a40c924ff 100644 --- a/firmware/target/arm/imx31/ata-imx31.c +++ b/firmware/target/arm/imx31/ata-imx31.c @@ -246,7 +246,7 @@ static const struct ata_udma_timings /** Threading **/ /* Signal to tell thread when DMA is done */ -static struct wakeup ata_dma_wakeup; +static struct semaphore ata_dma_complete; /** SDMA **/ /* Array of buffer descriptors for large transfers and alignnment */ @@ -445,7 +445,7 @@ static void ata_dma_callback(void) ATA_INTERRUPT_CLEAR = ATA_INTERRUPT_PENDING; ata_set_intrq(false); /* Return INTRQ to MCU */ - wakeup_signal(&ata_dma_wakeup); /* Signal waiting thread */ + semaphore_release(&ata_dma_complete); /* Signal waiting thread */ } bool ata_dma_setup(void *addr, unsigned long bytes, bool write) @@ -580,7 +580,8 @@ bool ata_dma_finish(void) { int oldirq; - if (LIKELY(wakeup_wait(&ata_dma_wakeup, HZ/2) == OBJ_WAIT_SUCCEEDED)) + if (LIKELY(semaphore_wait(&ata_dma_complete, HZ/2) + == OBJ_WAIT_SUCCEEDED)) break; ata_keep_active(); @@ -594,7 +595,8 @@ bool ata_dma_finish(void) sdma_channel_stop(channel); /* Stop DMA */ restore_irq(oldirq); - if (wakeup_wait(&ata_dma_wakeup, TIMEOUT_NOBLOCK) == OBJ_WAIT_SUCCEEDED) + if (semaphore_wait(&ata_dma_complete, TIMEOUT_NOBLOCK) + == OBJ_WAIT_SUCCEEDED) break; /* DMA really did finish after timeout */ sdma_channel_reset(channel); /* Reset everything + clear error */ @@ -716,7 +718,7 @@ void ata_device_init(void) ata_dma_selected = ATA_DMA_PIO; /* Called for first time at startup */ - wakeup_init(&ata_dma_wakeup); + semaphore_init(&ata_dma_complete, 1, 0); if (!sdma_channel_init(ATA_DMA_CH_NUM_RD, &ata_cd_rd, ata_bda) || !sdma_channel_init(ATA_DMA_CH_NUM_WR, &ata_cd_wr, ata_bda)) -- cgit v1.2.3