From patchwork Wed Oct 14 17:34:54 2009 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Juan Quintela X-Patchwork-Id: 36002 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 E3426B7B6F for ; Thu, 15 Oct 2009 04:41:23 +1100 (EST) Received: from localhost ([127.0.0.1]:51958 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1My7qj-00067S-3f for incoming@patchwork.ozlabs.org; Wed, 14 Oct 2009 13:41:21 -0400 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1My7lJ-0002Iy-98 for qemu-devel@nongnu.org; Wed, 14 Oct 2009 13:35:45 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1My7lD-0002G0-LP for qemu-devel@nongnu.org; Wed, 14 Oct 2009 13:35:44 -0400 Received: from [199.232.76.173] (port=55242 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1My7lD-0002Fx-Ff for qemu-devel@nongnu.org; Wed, 14 Oct 2009 13:35:39 -0400 Received: from mx1.redhat.com ([209.132.183.28]:46657) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1My7lC-0008MV-UG for qemu-devel@nongnu.org; Wed, 14 Oct 2009 13:35:39 -0400 Received: from int-mx03.intmail.prod.int.phx2.redhat.com (int-mx03.intmail.prod.int.phx2.redhat.com [10.5.11.16]) by mx1.redhat.com (8.13.8/8.13.8) with ESMTP id n9EHZcNq004106 for ; Wed, 14 Oct 2009 13:35:38 -0400 Received: from localhost.localdomain (ovpn01.gateway.prod.ext.phx2.redhat.com [10.5.9.1]) by int-mx03.intmail.prod.int.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id n9EHZXFo001016; Wed, 14 Oct 2009 13:35:37 -0400 From: Juan Quintela To: qemu-devel@nongnu.org Date: Wed, 14 Oct 2009 19:34:54 +0200 Message-Id: <1dbb1c3eb48eaac4e87db8d7775f3698aa962e7c.1255541443.git.quintela@redhat.com> In-Reply-To: References: In-Reply-To: References: X-Scanned-By: MIMEDefang 2.67 on 10.5.11.16 X-detected-operating-system: by monty-python.gnu.org: Genre and OS details not recognized. Subject: [Qemu-devel] [PATCH 03/16] vga: port vga_common_save/load 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/vga.c | 131 ++++++++++++++++++++++----------------------------------- hw/vga_int.h | 4 ++ 2 files changed, 55 insertions(+), 80 deletions(-) diff --git a/hw/vga.c b/hw/vga.c index 99edf25..706cb98 100644 --- a/hw/vga.c +++ b/hw/vga.c @@ -2131,94 +2131,65 @@ CPUWriteMemoryFunc * const vga_mem_write[3] = { vga_mem_writel, }; -void vga_common_save(QEMUFile *f, void *opaque) +static int vga_common_post_load(void *opaque, int version_id) { VGACommonState *s = opaque; - int i; - - qemu_put_be32s(f, &s->latch); - qemu_put_8s(f, &s->sr_index); - qemu_put_buffer(f, s->sr, 8); - qemu_put_8s(f, &s->gr_index); - qemu_put_buffer(f, s->gr, 16); - qemu_put_8s(f, &s->ar_index); - qemu_put_buffer(f, s->ar, 21); - qemu_put_be32(f, s->ar_flip_flop); - qemu_put_8s(f, &s->cr_index); - qemu_put_buffer(f, s->cr, 256); - qemu_put_8s(f, &s->msr); - qemu_put_8s(f, &s->fcr); - qemu_put_byte(f, s->st00); - qemu_put_8s(f, &s->st01); - - qemu_put_8s(f, &s->dac_state); - qemu_put_8s(f, &s->dac_sub_index); - qemu_put_8s(f, &s->dac_read_index); - qemu_put_8s(f, &s->dac_write_index); - qemu_put_buffer(f, s->dac_cache, 3); - qemu_put_buffer(f, s->palette, 768); - - qemu_put_be32(f, s->bank_offset); - qemu_put_byte(f, s->is_vbe_vmstate); + + /* force refresh */ + s->graphic_mode = -1; + return 0; +} + +const VMStateDescription vmstate_vga_common = { + .name = "vga", + .version_id = 2, + .minimum_version_id = 2, + .minimum_version_id_old = 2, + .post_load = vga_common_post_load, + .fields = (VMStateField []) { + VMSTATE_UINT32(latch, VGACommonState), + VMSTATE_UINT8(sr_index, VGACommonState), + VMSTATE_PARTIAL_BUFFER(sr, VGACommonState, 0, 8), + VMSTATE_UINT8(gr_index, VGACommonState), + VMSTATE_PARTIAL_BUFFER(gr, VGACommonState, 0, 16), + VMSTATE_UINT8(ar_index, VGACommonState), + VMSTATE_BUFFER(ar, VGACommonState), + VMSTATE_INT32(ar_flip_flop, VGACommonState), + VMSTATE_UINT8(cr_index, VGACommonState), + VMSTATE_BUFFER(cr, VGACommonState), + VMSTATE_UINT8(msr, VGACommonState), + VMSTATE_UINT8(fcr, VGACommonState), + VMSTATE_UINT8(st00, VGACommonState), + VMSTATE_UINT8(st01, VGACommonState), + + VMSTATE_UINT8(dac_state, VGACommonState), + VMSTATE_UINT8(dac_sub_index, VGACommonState), + VMSTATE_UINT8(dac_read_index, VGACommonState), + VMSTATE_UINT8(dac_write_index, VGACommonState), + VMSTATE_BUFFER(dac_cache, VGACommonState), + VMSTATE_BUFFER(palette, VGACommonState), + + VMSTATE_INT32(bank_offset, VGACommonState), + VMSTATE_UINT8_EQUAL(is_vbe_vmstate, VGACommonState), #ifdef CONFIG_BOCHS_VBE - qemu_put_be16s(f, &s->vbe_index); - for(i = 0; i < VBE_DISPI_INDEX_NB; i++) - qemu_put_be16s(f, &s->vbe_regs[i]); - qemu_put_be32s(f, &s->vbe_start_addr); - qemu_put_be32s(f, &s->vbe_line_offset); - qemu_put_be32s(f, &s->vbe_bank_mask); + VMSTATE_UINT16(vbe_index, VGACommonState), + VMSTATE_UINT16_ARRAY(vbe_regs, VGACommonState, VBE_DISPI_INDEX_NB), + VMSTATE_UINT32(vbe_start_addr, VGACommonState), + VMSTATE_UINT32(vbe_line_offset, VGACommonState), + VMSTATE_UINT32(vbe_bank_mask, VGACommonState), #endif + VMSTATE_END_OF_LIST() + } +}; + +void vga_common_save(QEMUFile *f, void *opaque) +{ + vmstate_save_state(f, &vmstate_vga_common, opaque); } int vga_common_load(QEMUFile *f, void *opaque, int version_id) { - VGACommonState *s = opaque; - int i; - - if (version_id > 2) - return -EINVAL; - - qemu_get_be32s(f, &s->latch); - qemu_get_8s(f, &s->sr_index); - qemu_get_buffer(f, s->sr, 8); - qemu_get_8s(f, &s->gr_index); - qemu_get_buffer(f, s->gr, 16); - qemu_get_8s(f, &s->ar_index); - qemu_get_buffer(f, s->ar, 21); - s->ar_flip_flop=qemu_get_be32(f); - qemu_get_8s(f, &s->cr_index); - qemu_get_buffer(f, s->cr, 256); - qemu_get_8s(f, &s->msr); - qemu_get_8s(f, &s->fcr); - qemu_get_8s(f, &s->st00); - qemu_get_8s(f, &s->st01); - - qemu_get_8s(f, &s->dac_state); - qemu_get_8s(f, &s->dac_sub_index); - qemu_get_8s(f, &s->dac_read_index); - qemu_get_8s(f, &s->dac_write_index); - qemu_get_buffer(f, s->dac_cache, 3); - qemu_get_buffer(f, s->palette, 768); - - s->bank_offset=qemu_get_be32(f); - s->is_vbe_vmstate = qemu_get_byte(f); -#ifdef CONFIG_BOCHS_VBE - if (!s->is_vbe_vmstate) - return -EINVAL; - qemu_get_be16s(f, &s->vbe_index); - for(i = 0; i < VBE_DISPI_INDEX_NB; i++) - qemu_get_be16s(f, &s->vbe_regs[i]); - qemu_get_be32s(f, &s->vbe_start_addr); - qemu_get_be32s(f, &s->vbe_line_offset); - qemu_get_be32s(f, &s->vbe_bank_mask); -#else - if (s->is_vbe_vmstate) - return -EINVAL; -#endif - - /* force refresh */ - s->graphic_mode = -1; - return 0; + return vmstate_load_state(f, &vmstate_vga_common, opaque, vmstate_vga_common.version_id); } void vga_common_init(VGACommonState *s, int vga_ram_size) diff --git a/hw/vga_int.h b/hw/vga_int.h index 4d5232f..46c326d 100644 --- a/hw/vga_int.h +++ b/hw/vga_int.h @@ -21,6 +21,9 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ + +#include + #define MSR_COLOR_EMULATION 0x01 #define MSR_PAGE_SELECT 0x20 @@ -193,6 +196,7 @@ void vga_common_reset(VGACommonState *s); void vga_dirty_log_start(VGACommonState *s); +extern const VMStateDescription vmstate_vga_common; void vga_common_save(QEMUFile *f, void *opaque); int vga_common_load(QEMUFile *f, void *opaque, int version_id); uint32_t vga_ioport_read(void *opaque, uint32_t addr);