From patchwork Mon Apr 16 05:29:21 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Zhi Hui Li X-Patchwork-Id: 152757 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (Client did not present a certificate) by ozlabs.org (Postfix) with ESMTPS id 5C187B7002 for ; Mon, 16 Apr 2012 15:30:28 +1000 (EST) Received: from localhost ([::1]:48863 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1SJeWA-0005uX-5A for incoming@patchwork.ozlabs.org; Mon, 16 Apr 2012 01:30:26 -0400 Received: from eggs.gnu.org ([208.118.235.92]:51623) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1SJeW2-0005uH-Ek for qemu-devel@nongnu.org; Mon, 16 Apr 2012 01:30:20 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1SJeW0-0004vL-QD for qemu-devel@nongnu.org; Mon, 16 Apr 2012 01:30:18 -0400 Received: from e23smtp01.au.ibm.com ([202.81.31.143]:52373) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1SJeVp-0004Wm-5g for qemu-devel@nongnu.org; Mon, 16 Apr 2012 01:30:16 -0400 Received: from /spool/local by e23smtp01.au.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Mon, 16 Apr 2012 05:21:51 +1000 Received: from d23relay03.au.ibm.com (202.81.31.245) by e23smtp01.au.ibm.com (202.81.31.207) with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted; Mon, 16 Apr 2012 05:21:49 +1000 Received: from d23av01.au.ibm.com (d23av01.au.ibm.com [9.190.234.96]) by d23relay03.au.ibm.com (8.13.8/8.13.8/NCO v10.0) with ESMTP id q3G5TPVc18219104 for ; Mon, 16 Apr 2012 15:29:27 +1000 Received: from d23av01.au.ibm.com (loopback [127.0.0.1]) by d23av01.au.ibm.com (8.14.4/8.13.1/NCO v10.0 AVout) with ESMTP id q3G5TPsP007505 for ; Mon, 16 Apr 2012 15:29:25 +1000 Received: from mm.cn.ibm.com (mm.cn.ibm.com [9.115.116.105] (may be forged)) by d23av01.au.ibm.com (8.14.4/8.13.1/NCO v10.0 AVin) with ESMTP id q3G5TOci007342; Mon, 16 Apr 2012 15:29:24 +1000 From: Li Zhi Hui To: qemu-devel@nongnu.org Date: Mon, 16 Apr 2012 13:29:21 +0800 Message-Id: <1334554162-18540-1-git-send-email-zhihuili@linux.vnet.ibm.com> X-Mailer: git-send-email 1.7.4.1 x-cbid: 12041519-1618-0000-0000-0000015087C7 X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 202.81.31.143 Cc: Li Zhi Hui Subject: [Qemu-devel] [PATCH] add function DMA_set_return and delete bh_schedule in dma.c X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org add function DMA_set_return and delete bh_schedule in dma.c Signed-off-by: Li Zhi Hui --- 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