qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Qemu-devel] [PATCH] add function DMA_set_return and delete bh_schedule


From: Li Zhi Hui
Subject: [Qemu-devel] [PATCH] add function DMA_set_return and delete bh_schedule in dma.c
Date: Mon, 16 Apr 2012 13:29:21 +0800

add function DMA_set_return and delete bh_schedule in dma.c

Signed-off-by: Li Zhi Hui <address@hidden>
---
 hw/dma.c |   21 ++++++++++++++-------
 hw/isa.h |    1 +
 2 files changed, 15 insertions(+), 7 deletions(-)

diff --git a/hw/dma.c b/hw/dma.c
index 0a9322d..48e153a 100644
--- a/hw/dma.c
+++ b/hw/dma.c
@@ -357,12 +357,10 @@ static void DMA_run (void)
 {
     struct dma_cont *d;
     int icont, ichan;
-    int rearm = 0;
     static int running = 0;
 
     if (running) {
-        rearm = 1;
-        goto out;
+        return;
     } else {
         running = 1;
     }
@@ -377,15 +375,11 @@ static void DMA_run (void)
 
             if ((0 == (d->mask & mask)) && (0 != (d->status & (mask << 4)))) {
                 channel_run (icont, ichan);
-                rearm = 1;
             }
         }
     }
 
     running = 0;
-out:
-    if (rearm)
-        qemu_bh_schedule_idle(dma_bh);
 }
 
 static void DMA_run_bh(void *unused)
@@ -460,6 +454,19 @@ void DMA_schedule(int nchan)
     qemu_irq_pulse(*d->cpu_request_exit);
 }
 
+void DMA_set_return(int nret, int nchan)
+{
+    struct dma_regs *r;
+    struct dma_cont *d;
+    int icont, ichan;
+
+    icont = nchan > 3;
+    ichan = nchan & 3;
+    d = dma_controllers;
+    r = &d[icont].regs[ichan];
+    r->now[COUNT] = nret;
+}
+
 static void dma_reset(void *opaque)
 {
     struct dma_cont *d = opaque;
diff --git a/hw/isa.h b/hw/isa.h
index 40373fb..277f54c 100644
--- a/hw/isa.h
+++ b/hw/isa.h
@@ -92,4 +92,5 @@ void DMA_init(int high_page_enable, qemu_irq 
*cpu_request_exit);
 void DMA_register_channel (int nchan,
                            DMA_transfer_handler transfer_handler,
                            void *opaque);
+void DMA_set_return(int nret, int nchan);
 #endif
-- 
1.7.4.1




reply via email to

[Prev in Thread] Current Thread [Next in Thread]