From patchwork Tue Aug 18 16:06:42 2009 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Gerd Hoffmann X-Patchwork-Id: 31569 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 bilbo.ozlabs.org (Postfix) with ESMTPS id 31640B6F34 for ; Wed, 19 Aug 2009 02:16:09 +1000 (EST) Received: from localhost ([127.0.0.1]:44996 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1MdRLw-0003XR-Qg for incoming@patchwork.ozlabs.org; Tue, 18 Aug 2009 12:16:04 -0400 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1MdRDP-0005Y8-Ic for qemu-devel@nongnu.org; Tue, 18 Aug 2009 12:07:15 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1MdRDK-0005TW-56 for qemu-devel@nongnu.org; Tue, 18 Aug 2009 12:07:14 -0400 Received: from [199.232.76.173] (port=50793 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1MdRDJ-0005TO-KM for qemu-devel@nongnu.org; Tue, 18 Aug 2009 12:07:09 -0400 Received: from mx2.redhat.com ([66.187.237.31]:47693) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1MdRDI-0003ST-4N for qemu-devel@nongnu.org; Tue, 18 Aug 2009 12:07:09 -0400 Received: from int-mx2.corp.redhat.com (int-mx2.corp.redhat.com [172.16.27.26]) by mx2.redhat.com (8.13.8/8.13.8) with ESMTP id n7IG6sX1024416 for ; Tue, 18 Aug 2009 12:06:54 -0400 Received: from ns3.rdu.redhat.com (ns3.rdu.redhat.com [10.11.255.199]) by int-mx2.corp.redhat.com (8.13.1/8.13.1) with ESMTP id n7IG6qL3022230; Tue, 18 Aug 2009 12:06:53 -0400 Received: from zweiblum.home.kraxel.org (vpn2-8-127.ams2.redhat.com [10.36.8.127]) by ns3.rdu.redhat.com (8.13.8/8.13.8) with SMTP id n7IG6m8P008471; Tue, 18 Aug 2009 12:06:49 -0400 Received: by zweiblum.home.kraxel.org (Postfix, from userid 500) id 02930700D8; Tue, 18 Aug 2009 18:06:47 +0200 (CEST) From: Gerd Hoffmann To: qemu-devel@nongnu.org Date: Tue, 18 Aug 2009 18:06:42 +0200 Message-Id: <1250611607-2441-4-git-send-email-kraxel@redhat.com> In-Reply-To: <1250611607-2441-1-git-send-email-kraxel@redhat.com> References: <1250611607-2441-1-git-send-email-kraxel@redhat.com> X-Scanned-By: MIMEDefang 2.58 on 172.16.27.26 X-detected-operating-system: by monty-python.gnu.org: GNU/Linux 2.6 (newer, 3) Cc: Gerd Hoffmann Subject: [Qemu-devel] [PATCH 3/8] ide: add save/restore support for isa 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: Gerd Hoffmann --- hw/ide-internal.h | 5 +++++ hw/ide-isa.c | 33 +++++++++++++++++++++++++++++---- hw/ide.c | 8 ++++---- 3 files changed, 38 insertions(+), 8 deletions(-) diff --git a/hw/ide-internal.h b/hw/ide-internal.h index c2ccb11..d4a4947 100644 --- a/hw/ide-internal.h +++ b/hw/ide-internal.h @@ -90,6 +90,11 @@ static inline IDEState *idebus_active_if(IDEBus *bus) } /* ide.c */ +void ide_save(QEMUFile* f, IDEState *s); +void ide_load(QEMUFile* f, IDEState *s, int version_id); +void idebus_save(QEMUFile* f, IDEBus *bus); +void idebus_load(QEMUFile* f, IDEBus *bus, int version_id); + void ide_init2(IDEBus *bus, BlockDriverState *hd0, BlockDriverState *hd1, qemu_irq irq); void ide_init_ioport(IDEBus *bus, int iobase, int iobase2); diff --git a/hw/ide-isa.c b/hw/ide-isa.c index 2d65825..38ba6f9 100644 --- a/hw/ide-isa.c +++ b/hw/ide-isa.c @@ -33,13 +33,38 @@ /***********************************************************/ /* ISA IDE definitions */ +typedef struct ISAIDEState { + IDEBus *bus; +} ISAIDEState; + +static void isa_ide_save(QEMUFile* f, void *opaque) +{ + ISAIDEState *s = opaque; + + idebus_save(f, s->bus); + ide_save(f, &s->bus->ifs[0]); + ide_save(f, &s->bus->ifs[1]); +} + +static int isa_ide_load(QEMUFile* f, void *opaque, int version_id) +{ + ISAIDEState *s = opaque; + + idebus_load(f, s->bus, version_id); + ide_load(f, &s->bus->ifs[0], version_id); + ide_load(f, &s->bus->ifs[1], version_id); + return 0; +} + void isa_ide_init(int iobase, int iobase2, qemu_irq irq, BlockDriverState *hd0, BlockDriverState *hd1) { - IDEBus *bus; + ISAIDEState *s; - bus = qemu_mallocz(sizeof(*bus)); + s = qemu_mallocz(sizeof(*s)); + s->bus = qemu_mallocz(sizeof(IDEBus)); - ide_init2(bus, hd0, hd1, irq); - ide_init_ioport(bus, iobase, iobase2); + ide_init2(s->bus, hd0, hd1, irq); + ide_init_ioport(s->bus, iobase, iobase2); + register_savevm("isa-ide", 0, 3, isa_ide_save, isa_ide_load, s); } diff --git a/hw/ide.c b/hw/ide.c index 879196e..5fb42b7 100644 --- a/hw/ide.c +++ b/hw/ide.c @@ -2800,7 +2800,7 @@ void ide_init_ioport(IDEBus *bus, int iobase, int iobase2) } /* save per IDE drive data */ -static void ide_save(QEMUFile* f, IDEState *s) +void ide_save(QEMUFile* f, IDEState *s) { qemu_put_be32(f, s->mult_sectors); qemu_put_be32(f, s->identify_set); @@ -2829,7 +2829,7 @@ static void ide_save(QEMUFile* f, IDEState *s) } /* load per IDE drive data */ -static void ide_load(QEMUFile* f, IDEState *s, int version_id) +void ide_load(QEMUFile* f, IDEState *s, int version_id) { s->mult_sectors=qemu_get_be32(f); s->identify_set=qemu_get_be32(f); @@ -2863,14 +2863,14 @@ static void ide_load(QEMUFile* f, IDEState *s, int version_id) /* XXX: if a transfer is pending, we do not save it yet */ } -static void idebus_save(QEMUFile* f, IDEBus *bus) +void idebus_save(QEMUFile* f, IDEBus *bus) { IDEState *s = idebus_active_if(bus); qemu_put_8s(f, &s->cmd); qemu_put_8s(f, &bus->unit); } -static void idebus_load(QEMUFile* f, IDEBus *bus, int version_id) +void idebus_load(QEMUFile* f, IDEBus *bus, int version_id) { IDEState *s; uint8_t cmd;