From patchwork Mon Oct 24 21:03:37 2011 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Benoit Canet X-Patchwork-Id: 121440 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.gnu.org (lists.gnu.org [140.186.70.17]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (Client did not present a certificate) by ozlabs.org (Postfix) with ESMTPS id B8F76B6F72 for ; Tue, 25 Oct 2011 09:24:54 +1100 (EST) Received: from localhost ([::1]:55241 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1RIRfd-0004LZ-Ty for incoming@patchwork.ozlabs.org; Mon, 24 Oct 2011 17:02:57 -0400 Received: from eggs.gnu.org ([140.186.70.92]:48873) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1RIReu-00033L-G6 for qemu-devel@nongnu.org; Mon, 24 Oct 2011 17:02:14 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1RIRer-0001JY-5f for qemu-devel@nongnu.org; Mon, 24 Oct 2011 17:02:12 -0400 Received: from mail-ww0-f53.google.com ([74.125.82.53]:50477) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1RIReq-0001FN-St for qemu-devel@nongnu.org; Mon, 24 Oct 2011 17:02:09 -0400 Received: by mail-ww0-f53.google.com with SMTP id 36so8739277wwi.10 for ; Mon, 24 Oct 2011 14:02:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=from:to:cc:subject:date:message-id:x-mailer:in-reply-to:references; bh=NqLOV1BMNAGV0RgUhrZV+bak/68J68DjuVRcbUTxafg=; b=amTbJzJf2DyM0m6TKKIUfcCkpKp/JrFeQ4YRXXet4IzA4XLpuEcHYg2nEYAMl+znsn xgoofbG3z7R+I0eEGwL2a9zHZft1zMO2UThAgPVMjXn/RMtpDZYPvuj6rMBQrNsC0k4/ yBGvGgFYXM9nKCI4ulWjK7WZEt8GY0aRxB8ag= Received: by 10.216.229.68 with SMTP id g46mr3685491weq.44.1319490128309; Mon, 24 Oct 2011 14:02:08 -0700 (PDT) Received: from localhost.localdomain ([78.250.84.36]) by mx.google.com with ESMTPS id x40sm34963853wbn.19.2011.10.24.14.02.06 (version=TLSv1/SSLv3 cipher=OTHER); Mon, 24 Oct 2011 14:02:07 -0700 (PDT) From: =?UTF-8?q?Beno=C3=AEt=20Canet?= To: qemu-devel@nongnu.org Date: Mon, 24 Oct 2011 23:03:37 +0200 Message-Id: <1319490221-5854-13-git-send-email-benoit.canet@gmail.com> X-Mailer: git-send-email 1.7.4.1 In-Reply-To: <1319490221-5854-1-git-send-email-benoit.canet@gmail.com> References: <1319490221-5854-1-git-send-email-benoit.canet@gmail.com> X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6 (newer, 2) X-Received-From: 74.125.82.53 Cc: peter.maydell@linaro.org, =?UTF-8?q?Beno=C3=AEt=20Canet?= Subject: [Qemu-devel] [PATCH 11/15] pl181: add vmstate 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 Signed-off-by: Benoit Canet --- hw/pl181.c | 40 ++++++++++++++++++++++++++++++++++++---- 1 files changed, 36 insertions(+), 4 deletions(-) diff --git a/hw/pl181.c b/hw/pl181.c index e13ea8e..cef2530 100644 --- a/hw/pl181.c +++ b/hw/pl181.c @@ -38,20 +38,45 @@ typedef struct { uint32_t datacnt; uint32_t status; uint32_t mask[2]; - int fifo_pos; - int fifo_len; + int32_t fifo_pos; + int32_t fifo_len; /* The linux 2.6.21 driver is buggy, and misbehaves if new data arrives while it is reading the FIFO. We hack around this be defering subsequent transfers until after the driver polls the status word. http://www.arm.linux.org.uk/developer/patches/viewpatch.php?id=4446/1 */ - int linux_hack; + int32_t linux_hack; uint32_t fifo[PL181_FIFO_LEN]; qemu_irq irq[2]; /* GPIO outputs for 'card is readonly' and 'card inserted' */ qemu_irq cardstatus[2]; } pl181_state; +static const VMStateDescription vmstate_pl181 = { + .name = "pl181", + .version_id = 1, + .minimum_version_id = 1, + .fields = (VMStateField[]) { + VMSTATE_UINT32(clock, pl181_state), + VMSTATE_UINT32(power, pl181_state), + VMSTATE_UINT32(cmdarg, pl181_state), + VMSTATE_UINT32(cmd, pl181_state), + VMSTATE_UINT32(datatimer, pl181_state), + VMSTATE_UINT32(datalength, pl181_state), + VMSTATE_UINT32(respcmd, pl181_state), + VMSTATE_UINT32_ARRAY(response, pl181_state, 4), + VMSTATE_UINT32(datactrl, pl181_state), + VMSTATE_UINT32(datacnt, pl181_state), + VMSTATE_UINT32(status, pl181_state), + VMSTATE_UINT32_ARRAY(mask, pl181_state, 2), + VMSTATE_INT32(fifo_pos, pl181_state), + VMSTATE_INT32(fifo_len, pl181_state), + VMSTATE_INT32(linux_hack, pl181_state), + VMSTATE_UINT32_ARRAY(fifo, pl181_state, PL181_FIFO_LEN), + VMSTATE_END_OF_LIST() + } +}; + #define PL181_CMD_INDEX 0x3f #define PL181_CMD_RESPONSE (1 << 6) #define PL181_CMD_LONGRESP (1 << 7) @@ -465,9 +490,16 @@ static int pl181_init(SysBusDevice *dev) return 0; } +static SysBusDeviceInfo pl181_info = { + .init = pl181_init, + .qdev.name = "pl181", + .qdev.size = sizeof(pl181_state), + .qdev.vmsd = &vmstate_pl181, +}; + static void pl181_register_devices(void) { - sysbus_register_dev("pl181", sizeof(pl181_state), pl181_init); + sysbus_register_withprop(&pl181_info); } device_init(pl181_register_devices)