[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[tyndur-devel] [PATCH 2/4] ata: cdi_wait_irq() benuzten und nicht selbst warten
* ata: cdi_wait_irq() benuzten und nicht selbst warten
Signed-off-by: Antoine Kaufmann <toni@xxxxxxxxxx>
---
src/modules/cdi/ata/device.c | 22 +++++++---------------
src/modules/cdi/ata/request.c | 2 +-
2 files changed, 8 insertions(+), 16 deletions(-)
diff --git a/src/modules/cdi/ata/device.c b/src/modules/cdi/ata/device.c
index 4bf4a14..7c896b8 100644
--- a/src/modules/cdi/ata/device.c
+++ b/src/modules/cdi/ata/device.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2007 The tyndur Project. All rights reserved.
+ * Copyright (c) 2007-2009 The tyndur Project. All rights reserved.
*
* This code is derived from software contributed to the tyndur Project
* by Antoine Kaufmann.
@@ -142,10 +142,10 @@ static int ata_bus_responsive_drv(struct ata_controller* controller)
*/
static void ata_controller_irq(struct cdi_device* dev)
{
- struct ata_device* ata_dev = (struct ata_device*) dev;
- struct ata_controller* ctrl = ata_dev->controller;
-
- ctrl->irq_cnt++;
+ // Hier muessen wir eigentlich garnichts tun, da wir immer nur auf IRQs
+ // warten wollen, und dafuer stellt CDI Funktionen zur Verfuegung. Doch
+ // registriert muss der IRQ dennoch werden, und dort muessen wir einen
+ // Handler angeben, sonst fliegt uns das beim ersten IRQ um die Ohren.
}
/**
@@ -157,16 +157,8 @@ static void ata_controller_irq(struct cdi_device* dev)
*/
int ata_wait_irq(struct ata_controller* controller, uint32_t timeout)
{
- uint32_t time = 0;
-
- // Warten bis der IRQ-Zaehler vom Handler erhoeht wird
- while (controller->irq_cnt == 0) {
- cdi_sleep_ms(20);
- time += 20;
-
- if (timeout <= time) {
- return 0;
- }
+ if (cdi_wait_irq(controller->irq, timeout)) {
+ return 0;
}
return 1;
diff --git a/src/modules/cdi/ata/request.c b/src/modules/cdi/ata/request.c
index 3d506df..1d5f4fb 100644
--- a/src/modules/cdi/ata/request.c
+++ b/src/modules/cdi/ata/request.c
@@ -96,7 +96,7 @@ static int ata_request_command(struct ata_request* request)
// IRQ-Zaehler zuruecksetzen, egal ob er gebraucht wird oder nicht, stoert
// ja niemanden
- ctrl->irq_cnt = 0;
+ cdi_reset_wait_irq(ctrl->irq);
ata_drv_select(dev);
--
1.6.0.6