Statistics
| Branch: | Revision:

root / target-ppc / machine.c @ 136be99e

History | View | Annotate | Download (5.5 kB)

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