Statistics
| Branch: | Revision:

root / target-ppc / machine.c @ 94909d9f

History | View | Annotate | Download (5.8 kB)

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