From patchwork Tue Jun 14 18:09:37 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michael Rolnik X-Patchwork-Id: 635467 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.gnu.org (lists.gnu.org [IPv6:2001:4830:134:3::11]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 3rTd9t29thz9t1W for ; Wed, 15 Jun 2016 04:15:46 +1000 (AEST) Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b=dz6de+8c; dkim-atps=neutral Received: from localhost ([::1]:37327 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bCssJ-0008D3-V5 for incoming@patchwork.ozlabs.org; Tue, 14 Jun 2016 14:15:44 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:59747) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bCsmr-0002sc-T4 for qemu-devel@nongnu.org; Tue, 14 Jun 2016 14:10:14 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1bCsmq-0001HS-Kc for qemu-devel@nongnu.org; Tue, 14 Jun 2016 14:10:05 -0400 Received: from mail-wm0-x244.google.com ([2a00:1450:400c:c09::244]:36365) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bCsmq-0001H4-7F for qemu-devel@nongnu.org; Tue, 14 Jun 2016 14:10:04 -0400 Received: by mail-wm0-x244.google.com with SMTP id m124so381295wme.3 for ; Tue, 14 Jun 2016 11:10:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=qz0o4gRtpFUH0DaBoC4Wfh+plHNasVZccK5iVGFmoKE=; b=dz6de+8cHM8HcUmIzjO+XR3s+WBIJE1IlLqbdA2/tTCzbFfxjVNwjZTy+2gWWltKHZ 9sRITc1EYLt/W7YzZ5q8AYHuFvaX7UfVyG0xlFgP2kZrrT4mH0Gm3kyzLbUV0kAoH3Qg KWKoH1h92NPCG9PtSmMRMsfZ/s0O7pWGyvZAwmdw/gyGMyghTk6kHo3zmWMYMrVl63Th rU4RFRHkS8u3SV6KRVfswiUPIehpwL3+txz06+q4+mxfXAV/22VUKjs6aqtSqzp6Uc4y xTodKZemUKqj/JMVVkrCmg6D8P92zb/uLNHSBkJmjogzb9sLj6T7XKAg2Xt0EMBnd3v7 kHkQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=qz0o4gRtpFUH0DaBoC4Wfh+plHNasVZccK5iVGFmoKE=; b=B8zG4s1aVkugHUwsjNQ5t7gqMgZ7Zx8zlxnjvskTet6mL0uJVZXXO5pJheE3JqvtiI alfIAioqvqPbja+NC/otNAZmdaUz+DbHjHP53yMWnVrdc7eeBdjM2Djq2VXZ/EKqpUGu q8NSV6IBarTD8klYghuRaHYa87M+PWvpuLLrDvCdH5xanW0rGxfNu7iXJ1xwSNluFv+J 5/iVB0wPRxGGLKGhPuCDBVUfjUPVpWoiK0dg7PDszB6GhSfc5YEr/vtVO/eeM2s/QjAf +vaHgBaAxiR/+Z572Za353UNeaJG5aGISbdt1w3hax0CVkvvyaKorJubpmkukzEcSkVs 1gsQ== X-Gm-Message-State: ALyK8tK197T3PR+WfeSyCyBI0iuBOQ80uePUMoHMiJz5LFuA1kK3BGV/EbedvSz+2wmWeg== X-Received: by 10.28.181.80 with SMTP id e77mr6290555wmf.24.1465927803682; Tue, 14 Jun 2016 11:10:03 -0700 (PDT) Received: from a0999b0126e1.ant.amazon.com ([5.102.195.79]) by smtp.gmail.com with ESMTPSA id el4sm1443037wjd.23.2016.06.14.11.10.02 (version=TLS1 cipher=AES128-SHA bits=128/128); Tue, 14 Jun 2016 11:10:03 -0700 (PDT) From: Michael Rolnik To: qemu-devel@nongnu.org Date: Tue, 14 Jun 2016 21:09:37 +0300 Message-Id: <1465927779-83200-11-git-send-email-mrolnik@gmail.com> X-Mailer: git-send-email 2.4.9 (Apple Git-60) In-Reply-To: <1465927779-83200-1-git-send-email-mrolnik@gmail.com> References: <1465927779-83200-1-git-send-email-mrolnik@gmail.com> X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 2a00:1450:400c:c09::244 Subject: [Qemu-devel] [PATCH v7 10/12] target-avr: saving sreg, rampD, rampX, rampY, rampD, eind in HW representation saving cpu features X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: peter.maydell@linaro.org, Michael Rolnik , rth@twiddle.net Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" Signed-off-by: Michael Rolnik --- target-avr/cpu-qom.h | 2 +- target-avr/cpu.c | 2 +- target-avr/machine.c | 107 ++++++++++++++++++++++++++++++++++++++++----------- 3 files changed, 87 insertions(+), 24 deletions(-) diff --git a/target-avr/cpu-qom.h b/target-avr/cpu-qom.h index bf588ca..c5d4f92 100644 --- a/target-avr/cpu-qom.h +++ b/target-avr/cpu-qom.h @@ -70,7 +70,7 @@ static inline AVRCPU *avr_env_get_cpu(CPUAVRState *env) #define ENV_OFFSET offsetof(AVRCPU, env) #ifndef CONFIG_USER_ONLY -extern const struct VMStateDescription vmstate_avr_cpu; +extern const struct VMStateDescription vms_avr_cpu; #endif void avr_cpu_do_interrupt(CPUState *cpu); diff --git a/target-avr/cpu.c b/target-avr/cpu.c index 197f9ac..64e6f57 100644 --- a/target-avr/cpu.c +++ b/target-avr/cpu.c @@ -187,7 +187,7 @@ static void avr_cpu_class_init(ObjectClass *oc, void *data) cc->handle_mmu_fault = avr_cpu_handle_mmu_fault; #else cc->get_phys_page_debug = avr_cpu_get_phys_page_debug; - cc->vmsd = &vmstate_avr_cpu; + cc->vmsd = &vms_avr_cpu; #endif cc->disas_set_info = avr_cpu_disas_set_info; cc->synchronize_from_tb = avr_cpu_synchronize_from_tb; diff --git a/target-avr/machine.c b/target-avr/machine.c index 39f1ee6..13e10db 100644 --- a/target-avr/machine.c +++ b/target-avr/machine.c @@ -23,31 +23,94 @@ #include "cpu.h" #include "hw/boards.h" #include "machine.h" +#include "migration/qemu-file.h" -const VMStateDescription vmstate_avr_cpu = { +static int get_sreg(QEMUFile *f, void *opaque, size_t size) +{ + CPUAVRState *env = opaque; + uint8_t sreg; + + qemu_get_8s(f, &sreg); + cpu_set_sreg(env, sreg); + return 0; +} + +static void put_sreg(QEMUFile *f, void *opaque, size_t size) +{ + CPUAVRState *env = opaque; + uint8_t sreg = cpu_get_sreg(env); + + qemu_put_8s(f, &sreg); +} + +static const VMStateInfo vms_sreg = { + .name = "sreg", + .get = get_sreg, + .put = put_sreg, +}; + +static int get_segment(QEMUFile *f, void *opaque, size_t size) +{ + uint32_t *ramp = opaque; + uint8_t temp = *ramp >> 16; + + qemu_get_8s(f, &temp); + return 0; +} + +static void put_segment(QEMUFile *f, void *opaque, size_t size) +{ + uint32_t *ramp = opaque; + uint8_t temp; + + qemu_put_8s(f, &temp); + *ramp = ((uint32_t)temp) << 16; +} + +static const VMStateInfo vms_rampD = { + .name = "rampD", + .get = get_segment, + .put = put_segment, +}; +static const VMStateInfo vms_rampX = { + .name = "rampX", + .get = get_segment, + .put = put_segment, +}; +static const VMStateInfo vms_rampY = { + .name = "rampY", + .get = get_segment, + .put = put_segment, +}; +static const VMStateInfo vms_rampZ = { + .name = "rampZ", + .get = get_segment, + .put = put_segment, +}; +static const VMStateInfo vms_eind = { + .name = "eind", + .get = get_segment, + .put = put_segment, +}; + +const VMStateDescription vms_avr_cpu = { .name = "cpu", - .version_id = 1, - .minimum_version_id = 1, + .version_id = 0, + .minimum_version_id = 0, .fields = (VMStateField[]) { - VMSTATE_UINT32_ARRAY(r, CPUAVRState, 32), - - VMSTATE_UINT32(sregC, CPUAVRState), - VMSTATE_UINT32(sregZ, CPUAVRState), - VMSTATE_UINT32(sregN, CPUAVRState), - VMSTATE_UINT32(sregV, CPUAVRState), - VMSTATE_UINT32(sregS, CPUAVRState), - VMSTATE_UINT32(sregH, CPUAVRState), - VMSTATE_UINT32(sregT, CPUAVRState), - VMSTATE_UINT32(sregI, CPUAVRState), - - VMSTATE_UINT32(rampD, CPUAVRState), - VMSTATE_UINT32(rampX, CPUAVRState), - VMSTATE_UINT32(rampY, CPUAVRState), - VMSTATE_UINT32(rampZ, CPUAVRState), - - VMSTATE_UINT32(eind, CPUAVRState), - VMSTATE_UINT32(sp, CPUAVRState), - VMSTATE_UINT32(pc_w, CPUAVRState), + VMSTATE_UINT32(env.features, AVRCPU), + VMSTATE_UINT32(env.pc_w, AVRCPU), + VMSTATE_UINT32(env.sp, AVRCPU), + + VMSTATE_UINT32_ARRAY(env.r, AVRCPU, 32), + VMSTATE_UINT32_ARRAY(env.io, AVRCPU, 64), + + VMSTATE_SINGLE_TEST(env, AVRCPU, NULL, 0, vms_sreg, CPUAVRState), + VMSTATE_SINGLE_TEST(env.rampD, AVRCPU, NULL, 0, vms_rampD, uint32_t), + VMSTATE_SINGLE_TEST(env.rampX, AVRCPU, NULL, 0, vms_rampX, uint32_t), + VMSTATE_SINGLE_TEST(env.rampY, AVRCPU, NULL, 0, vms_rampY, uint32_t), + VMSTATE_SINGLE_TEST(env.rampZ, AVRCPU, NULL, 0, vms_rampZ, uint32_t), + VMSTATE_SINGLE_TEST(env.eind, AVRCPU, NULL, 0, vms_eind, uint32_t), VMSTATE_END_OF_LIST() }