Statistics
| Branch: | Revision:

root / target-ppc / machine.c @ 53116ebf

History | View | Annotate | Download (5.7 kB)

1 8dd3dca3 aurel32
#include "hw/hw.h"
2 8dd3dca3 aurel32
#include "hw/boards.h"
3 9c17d615 Paolo Bonzini
#include "sysemu/kvm.h"
4 8dd3dca3 aurel32
5 8dd3dca3 aurel32
void cpu_save(QEMUFile *f, void *opaque)
6 8dd3dca3 aurel32
{
7 1328c2bf Andreas Färber
    CPUPPCState *env = (CPUPPCState *)opaque;
8 a456d59c blueswir1
    unsigned int i, j;
9 30304420 David Gibson
    uint32_t fpscr;
10 da91a00f Richard Henderson
    target_ulong xer;
11 a456d59c blueswir1
12 a456d59c blueswir1
    for (i = 0; i < 32; i++)
13 a456d59c blueswir1
        qemu_put_betls(f, &env->gpr[i]);
14 a456d59c blueswir1
#if !defined(TARGET_PPC64)
15 a456d59c blueswir1
    for (i = 0; i < 32; i++)
16 a456d59c blueswir1
        qemu_put_betls(f, &env->gprh[i]);
17 a456d59c blueswir1
#endif
18 a456d59c blueswir1
    qemu_put_betls(f, &env->lr);
19 a456d59c blueswir1
    qemu_put_betls(f, &env->ctr);
20 a456d59c blueswir1
    for (i = 0; i < 8; i++)
21 a456d59c blueswir1
        qemu_put_be32s(f, &env->crf[i]);
22 da91a00f Richard Henderson
    xer = cpu_read_xer(env);
23 da91a00f Richard Henderson
    qemu_put_betls(f, &xer);
24 18b21a2f Nathan Froyd
    qemu_put_betls(f, &env->reserve_addr);
25 a456d59c blueswir1
    qemu_put_betls(f, &env->msr);
26 a456d59c blueswir1
    for (i = 0; i < 4; i++)
27 a456d59c blueswir1
        qemu_put_betls(f, &env->tgpr[i]);
28 a456d59c blueswir1
    for (i = 0; i < 32; i++) {
29 a456d59c blueswir1
        union {
30 a456d59c blueswir1
            float64 d;
31 a456d59c blueswir1
            uint64_t l;
32 a456d59c blueswir1
        } u;
33 a456d59c blueswir1
        u.d = env->fpr[i];
34 a456d59c blueswir1
        qemu_put_be64(f, u.l);
35 a456d59c blueswir1
    }
36 30304420 David Gibson
    fpscr = env->fpscr;
37 30304420 David Gibson
    qemu_put_be32s(f, &fpscr);
38 a456d59c blueswir1
    qemu_put_sbe32s(f, &env->access_type);
39 a456d59c blueswir1
#if defined(TARGET_PPC64)
40 a456d59c blueswir1
    qemu_put_betls(f, &env->asr);
41 a456d59c blueswir1
    qemu_put_sbe32s(f, &env->slb_nr);
42 a456d59c blueswir1
#endif
43 bb593904 David Gibson
    qemu_put_betls(f, &env->spr[SPR_SDR1]);
44 a456d59c blueswir1
    for (i = 0; i < 32; i++)
45 a456d59c blueswir1
        qemu_put_betls(f, &env->sr[i]);
46 a456d59c blueswir1
    for (i = 0; i < 2; i++)
47 a456d59c blueswir1
        for (j = 0; j < 8; j++)
48 a456d59c blueswir1
            qemu_put_betls(f, &env->DBAT[i][j]);
49 a456d59c blueswir1
    for (i = 0; i < 2; i++)
50 a456d59c blueswir1
        for (j = 0; j < 8; j++)
51 a456d59c blueswir1
            qemu_put_betls(f, &env->IBAT[i][j]);
52 a456d59c blueswir1
    qemu_put_sbe32s(f, &env->nb_tlb);
53 a456d59c blueswir1
    qemu_put_sbe32s(f, &env->tlb_per_way);
54 a456d59c blueswir1
    qemu_put_sbe32s(f, &env->nb_ways);
55 a456d59c blueswir1
    qemu_put_sbe32s(f, &env->last_way);
56 a456d59c blueswir1
    qemu_put_sbe32s(f, &env->id_tlbs);
57 a456d59c blueswir1
    qemu_put_sbe32s(f, &env->nb_pids);
58 1c53accc Alexander Graf
    if (env->tlb.tlb6) {
59 a456d59c blueswir1
        // XXX assumes 6xx
60 a456d59c blueswir1
        for (i = 0; i < env->nb_tlb; i++) {
61 1c53accc Alexander Graf
            qemu_put_betls(f, &env->tlb.tlb6[i].pte0);
62 1c53accc Alexander Graf
            qemu_put_betls(f, &env->tlb.tlb6[i].pte1);
63 1c53accc Alexander Graf
            qemu_put_betls(f, &env->tlb.tlb6[i].EPN);
64 a456d59c blueswir1
        }
65 a456d59c blueswir1
    }
66 a456d59c blueswir1
    for (i = 0; i < 4; i++)
67 a456d59c blueswir1
        qemu_put_betls(f, &env->pb[i]);
68 a456d59c blueswir1
    for (i = 0; i < 1024; i++)
69 a456d59c blueswir1
        qemu_put_betls(f, &env->spr[i]);
70 a456d59c blueswir1
    qemu_put_be32s(f, &env->vscr);
71 a456d59c blueswir1
    qemu_put_be64s(f, &env->spe_acc);
72 a456d59c blueswir1
    qemu_put_be32s(f, &env->spe_fscr);
73 a456d59c blueswir1
    qemu_put_betls(f, &env->msr_mask);
74 a456d59c blueswir1
    qemu_put_be32s(f, &env->flags);
75 a456d59c blueswir1
    qemu_put_sbe32s(f, &env->error_code);
76 a456d59c blueswir1
    qemu_put_be32s(f, &env->pending_interrupts);
77 a456d59c blueswir1
    qemu_put_be32s(f, &env->irq_input_state);
78 a456d59c blueswir1
    for (i = 0; i < POWERPC_EXCP_NB; i++)
79 a456d59c blueswir1
        qemu_put_betls(f, &env->excp_vectors[i]);
80 a456d59c blueswir1
    qemu_put_betls(f, &env->excp_prefix);
81 fc1c67bc Blue Swirl
    qemu_put_betls(f, &env->hreset_excp_prefix);
82 a456d59c blueswir1
    qemu_put_betls(f, &env->ivor_mask);
83 a456d59c blueswir1
    qemu_put_betls(f, &env->ivpr_mask);
84 a456d59c blueswir1
    qemu_put_betls(f, &env->hreset_vector);
85 a456d59c blueswir1
    qemu_put_betls(f, &env->nip);
86 a456d59c blueswir1
    qemu_put_betls(f, &env->hflags);
87 a456d59c blueswir1
    qemu_put_betls(f, &env->hflags_nmsr);
88 a456d59c blueswir1
    qemu_put_sbe32s(f, &env->mmu_idx);
89 011aba24 David Gibson
    qemu_put_sbe32(f, 0);
90 8dd3dca3 aurel32
}
91 8dd3dca3 aurel32
92 8dd3dca3 aurel32
int cpu_load(QEMUFile *f, void *opaque, int version_id)
93 8dd3dca3 aurel32
{
94 1328c2bf Andreas Färber
    CPUPPCState *env = (CPUPPCState *)opaque;
95 a456d59c blueswir1
    unsigned int i, j;
96 bb593904 David Gibson
    target_ulong sdr1;
97 30304420 David Gibson
    uint32_t fpscr;
98 da91a00f Richard Henderson
    target_ulong xer;
99 a456d59c blueswir1
100 a456d59c blueswir1
    for (i = 0; i < 32; i++)
101 a456d59c blueswir1
        qemu_get_betls(f, &env->gpr[i]);
102 a456d59c blueswir1
#if !defined(TARGET_PPC64)
103 a456d59c blueswir1
    for (i = 0; i < 32; i++)
104 a456d59c blueswir1
        qemu_get_betls(f, &env->gprh[i]);
105 a456d59c blueswir1
#endif
106 a456d59c blueswir1
    qemu_get_betls(f, &env->lr);
107 a456d59c blueswir1
    qemu_get_betls(f, &env->ctr);
108 a456d59c blueswir1
    for (i = 0; i < 8; i++)
109 a456d59c blueswir1
        qemu_get_be32s(f, &env->crf[i]);
110 da91a00f Richard Henderson
    qemu_get_betls(f, &xer);
111 da91a00f Richard Henderson
    cpu_write_xer(env, xer);
112 18b21a2f Nathan Froyd
    qemu_get_betls(f, &env->reserve_addr);
113 a456d59c blueswir1
    qemu_get_betls(f, &env->msr);
114 a456d59c blueswir1
    for (i = 0; i < 4; i++)
115 a456d59c blueswir1
        qemu_get_betls(f, &env->tgpr[i]);
116 a456d59c blueswir1
    for (i = 0; i < 32; i++) {
117 a456d59c blueswir1
        union {
118 a456d59c blueswir1
            float64 d;
119 a456d59c blueswir1
            uint64_t l;
120 a456d59c blueswir1
        } u;
121 a456d59c blueswir1
        u.l = qemu_get_be64(f);
122 a456d59c blueswir1
        env->fpr[i] = u.d;
123 a456d59c blueswir1
    }
124 30304420 David Gibson
    qemu_get_be32s(f, &fpscr);
125 30304420 David Gibson
    env->fpscr = fpscr;
126 a456d59c blueswir1
    qemu_get_sbe32s(f, &env->access_type);
127 a456d59c blueswir1
#if defined(TARGET_PPC64)
128 a456d59c blueswir1
    qemu_get_betls(f, &env->asr);
129 a456d59c blueswir1
    qemu_get_sbe32s(f, &env->slb_nr);
130 a456d59c blueswir1
#endif
131 bb593904 David Gibson
    qemu_get_betls(f, &sdr1);
132 a456d59c blueswir1
    for (i = 0; i < 32; i++)
133 a456d59c blueswir1
        qemu_get_betls(f, &env->sr[i]);
134 a456d59c blueswir1
    for (i = 0; i < 2; i++)
135 a456d59c blueswir1
        for (j = 0; j < 8; j++)
136 a456d59c blueswir1
            qemu_get_betls(f, &env->DBAT[i][j]);
137 a456d59c blueswir1
    for (i = 0; i < 2; i++)
138 a456d59c blueswir1
        for (j = 0; j < 8; j++)
139 a456d59c blueswir1
            qemu_get_betls(f, &env->IBAT[i][j]);
140 a456d59c blueswir1
    qemu_get_sbe32s(f, &env->nb_tlb);
141 a456d59c blueswir1
    qemu_get_sbe32s(f, &env->tlb_per_way);
142 a456d59c blueswir1
    qemu_get_sbe32s(f, &env->nb_ways);
143 a456d59c blueswir1
    qemu_get_sbe32s(f, &env->last_way);
144 a456d59c blueswir1
    qemu_get_sbe32s(f, &env->id_tlbs);
145 a456d59c blueswir1
    qemu_get_sbe32s(f, &env->nb_pids);
146 1c53accc Alexander Graf
    if (env->tlb.tlb6) {
147 a456d59c blueswir1
        // XXX assumes 6xx
148 a456d59c blueswir1
        for (i = 0; i < env->nb_tlb; i++) {
149 1c53accc Alexander Graf
            qemu_get_betls(f, &env->tlb.tlb6[i].pte0);
150 1c53accc Alexander Graf
            qemu_get_betls(f, &env->tlb.tlb6[i].pte1);
151 1c53accc Alexander Graf
            qemu_get_betls(f, &env->tlb.tlb6[i].EPN);
152 a456d59c blueswir1
        }
153 a456d59c blueswir1
    }
154 a456d59c blueswir1
    for (i = 0; i < 4; i++)
155 a456d59c blueswir1
        qemu_get_betls(f, &env->pb[i]);
156 a456d59c blueswir1
    for (i = 0; i < 1024; i++)
157 a456d59c blueswir1
        qemu_get_betls(f, &env->spr[i]);
158 bb593904 David Gibson
    ppc_store_sdr1(env, sdr1);
159 a456d59c blueswir1
    qemu_get_be32s(f, &env->vscr);
160 a456d59c blueswir1
    qemu_get_be64s(f, &env->spe_acc);
161 a456d59c blueswir1
    qemu_get_be32s(f, &env->spe_fscr);
162 a456d59c blueswir1
    qemu_get_betls(f, &env->msr_mask);
163 a456d59c blueswir1
    qemu_get_be32s(f, &env->flags);
164 a456d59c blueswir1
    qemu_get_sbe32s(f, &env->error_code);
165 a456d59c blueswir1
    qemu_get_be32s(f, &env->pending_interrupts);
166 a456d59c blueswir1
    qemu_get_be32s(f, &env->irq_input_state);
167 a456d59c blueswir1
    for (i = 0; i < POWERPC_EXCP_NB; i++)
168 a456d59c blueswir1
        qemu_get_betls(f, &env->excp_vectors[i]);
169 a456d59c blueswir1
    qemu_get_betls(f, &env->excp_prefix);
170 fc1c67bc Blue Swirl
    qemu_get_betls(f, &env->hreset_excp_prefix);
171 a456d59c blueswir1
    qemu_get_betls(f, &env->ivor_mask);
172 a456d59c blueswir1
    qemu_get_betls(f, &env->ivpr_mask);
173 a456d59c blueswir1
    qemu_get_betls(f, &env->hreset_vector);
174 a456d59c blueswir1
    qemu_get_betls(f, &env->nip);
175 a456d59c blueswir1
    qemu_get_betls(f, &env->hflags);
176 a456d59c blueswir1
    qemu_get_betls(f, &env->hflags_nmsr);
177 a456d59c blueswir1
    qemu_get_sbe32s(f, &env->mmu_idx);
178 011aba24 David Gibson
    qemu_get_sbe32(f); /* Discard unused power_mode */
179 a456d59c blueswir1
180 8dd3dca3 aurel32
    return 0;
181 8dd3dca3 aurel32
}