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