From patchwork Wed Dec 2 10:49:37 2009 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Juan Quintela X-Patchwork-Id: 39987 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.gnu.org (lists.gnu.org [199.232.76.165]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (Client did not present a certificate) by ozlabs.org (Postfix) with ESMTPS id 95128B7BE1 for ; Wed, 2 Dec 2009 22:10:03 +1100 (EST) Received: from localhost ([127.0.0.1]:38724 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1NFn5s-00068a-Mz for incoming@patchwork.ozlabs.org; Wed, 02 Dec 2009 06:10:00 -0500 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1NFmn9-00053v-Gm for qemu-devel@nongnu.org; Wed, 02 Dec 2009 05:50:39 -0500 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1NFmn3-0004yg-MW for qemu-devel@nongnu.org; Wed, 02 Dec 2009 05:50:38 -0500 Received: from [199.232.76.173] (port=33731 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1NFmn3-0004yQ-EA for qemu-devel@nongnu.org; Wed, 02 Dec 2009 05:50:33 -0500 Received: from mx1.redhat.com ([209.132.183.28]:46150) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1NFmn3-0005zm-0q for qemu-devel@nongnu.org; Wed, 02 Dec 2009 05:50:33 -0500 Received: from int-mx05.intmail.prod.int.phx2.redhat.com (int-mx05.intmail.prod.int.phx2.redhat.com [10.5.11.18]) by mx1.redhat.com (8.13.8/8.13.8) with ESMTP id nB2AoVIm007695 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK) for ; Wed, 2 Dec 2009 05:50:32 -0500 Received: from localhost.localdomain (ovpn01.gateway.prod.ext.phx2.redhat.com [10.5.9.1]) by int-mx05.intmail.prod.int.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id nB2AoMJK016700; Wed, 2 Dec 2009 05:50:30 -0500 From: Juan Quintela To: qemu-devel@nongnu.org Date: Wed, 2 Dec 2009 11:49:37 +0100 Message-Id: <8189e23cada793d329a2971436e11b9389f50b34.1259750689.git.quintela@redhat.com> In-Reply-To: References: In-Reply-To: References: X-Scanned-By: MIMEDefang 2.67 on 10.5.11.18 X-detected-operating-system: by monty-python.gnu.org: Genre and OS details not recognized. Subject: [Qemu-devel] [PATCH 05/10] c4231a: port to vmstate X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Signed-off-by: Juan Quintela --- hw/cs4231a.c | 58 ++++++++++++++++++++++++++++++---------------------------- 1 files changed, 30 insertions(+), 28 deletions(-) diff --git a/hw/cs4231a.c b/hw/cs4231a.c index e03c5d2..7c29aa8 100644 --- a/hw/cs4231a.c +++ b/hw/cs4231a.c @@ -596,45 +596,47 @@ static int cs_dma_read (void *opaque, int nchan, int dma_pos, int dma_len) return dma_pos; } -static void cs_save (QEMUFile *f, void *opaque) +static int cs4231a_pre_load (void *opaque) { CSState *s = opaque; - unsigned int i; - uint32_t val; - for (i = 0; i < CS_REGS; i++) - qemu_put_be32s (f, &s->regs[i]); - - qemu_put_buffer (f, s->dregs, CS_DREGS); - val = s->dma_running; qemu_put_be32s (f, &val); - val = s->audio_free; qemu_put_be32s (f, &val); - val = s->transferred; qemu_put_be32s (f, &val); - val = s->aci_counter; qemu_put_be32s (f, &val); + if (s->dma_running) { + DMA_release_DREQ (s->dma); + AUD_set_active_out (s->voice, 0); + } + s->dma_running = 0; + return 0; } -static int cs_load (QEMUFile *f, void *opaque, int version_id) +static int cs4231a_post_load (void *opaque, int version_id) { CSState *s = opaque; - unsigned int i; - uint32_t val, dma_running; - - if (version_id > 1) - return -EINVAL; - for (i = 0; i < CS_REGS; i++) - qemu_get_be32s (f, &s->regs[i]); - - qemu_get_buffer (f, s->dregs, CS_DREGS); - - qemu_get_be32s (f, &dma_running); - qemu_get_be32s (f, &val); s->audio_free = val; - qemu_get_be32s (f, &val); s->transferred = val; - qemu_get_be32s (f, &val); s->aci_counter = val; - if (dma_running && (s->dregs[Interface_Configuration] & PEN)) + if (s->dma_running && (s->dregs[Interface_Configuration] & PEN)) { + s->dma_running = 0; cs_reset_voices (s, s->dregs[FS_And_Playback_Data_Format]); + } return 0; } +static const VMStateDescription vmstate_cs4231a = { + .name = "cs4231a", + .version_id = 1, + .minimum_version_id = 1, + .minimum_version_id_old = 1, + .pre_load = cs4231a_pre_load, + .post_load = cs4231a_post_load, + .fields = (VMStateField []) { + VMSTATE_UINT32_ARRAY(regs, CSState, CS_REGS), + VMSTATE_BUFFER(dregs, CSState), + VMSTATE_INT32(dma_running, CSState), + VMSTATE_INT32(audio_free, CSState), + VMSTATE_INT32(transferred, CSState), + VMSTATE_INT32(aci_counter, CSState), + VMSTATE_END_OF_LIST() + } +}; + static int cs4231a_initfn (ISADevice *dev) { CSState *s = DO_UPCAST (CSState, dev, dev); @@ -649,7 +651,7 @@ static int cs4231a_initfn (ISADevice *dev) DMA_register_channel (s->dma, cs_dma_read, s); - register_savevm ("cs4231a", 0, 1, cs_save, cs_load, s); + vmstate_register (0, &vmstate_cs4231a, s); qemu_register_reset (cs_reset, s); cs_reset (s);