|
|
1.1 ! root 1: #include "hw/hw.h" ! 2: #include "hw/boards.h" ! 3: #include "qemu-timer.h" ! 4: ! 5: #include "exec-all.h" ! 6: ! 7: void register_machines(void) ! 8: { ! 9: #ifdef TARGET_SPARC64 ! 10: qemu_register_machine(&sun4u_machine); ! 11: qemu_register_machine(&sun4v_machine); ! 12: qemu_register_machine(&niagara_machine); ! 13: #else ! 14: qemu_register_machine(&ss5_machine); ! 15: qemu_register_machine(&ss10_machine); ! 16: qemu_register_machine(&ss600mp_machine); ! 17: qemu_register_machine(&ss20_machine); ! 18: qemu_register_machine(&ss2_machine); ! 19: qemu_register_machine(&voyager_machine); ! 20: qemu_register_machine(&ss_lx_machine); ! 21: qemu_register_machine(&ss4_machine); ! 22: qemu_register_machine(&scls_machine); ! 23: qemu_register_machine(&sbook_machine); ! 24: qemu_register_machine(&ss1000_machine); ! 25: qemu_register_machine(&ss2000_machine); ! 26: #endif ! 27: } ! 28: ! 29: void cpu_save(QEMUFile *f, void *opaque) ! 30: { ! 31: CPUState *env = opaque; ! 32: int i; ! 33: uint32_t tmp; ! 34: ! 35: // if env->cwp == env->nwindows - 1, this will set the ins of the last ! 36: // window as the outs of the first window ! 37: cpu_set_cwp(env, env->cwp); ! 38: ! 39: for(i = 0; i < 8; i++) ! 40: qemu_put_betls(f, &env->gregs[i]); ! 41: qemu_put_be32s(f, &env->nwindows); ! 42: for(i = 0; i < env->nwindows * 16; i++) ! 43: qemu_put_betls(f, &env->regbase[i]); ! 44: ! 45: /* FPU */ ! 46: for(i = 0; i < TARGET_FPREGS; i++) { ! 47: union { ! 48: float32 f; ! 49: uint32_t i; ! 50: } u; ! 51: u.f = env->fpr[i]; ! 52: qemu_put_be32(f, u.i); ! 53: } ! 54: ! 55: qemu_put_betls(f, &env->pc); ! 56: qemu_put_betls(f, &env->npc); ! 57: qemu_put_betls(f, &env->y); ! 58: tmp = GET_PSR(env); ! 59: qemu_put_be32(f, tmp); ! 60: qemu_put_betls(f, &env->fsr); ! 61: qemu_put_betls(f, &env->tbr); ! 62: tmp = env->interrupt_index; ! 63: qemu_put_be32(f, tmp); ! 64: qemu_put_be32s(f, &env->pil_in); ! 65: #ifndef TARGET_SPARC64 ! 66: qemu_put_be32s(f, &env->wim); ! 67: /* MMU */ ! 68: for (i = 0; i < 32; i++) ! 69: qemu_put_be32s(f, &env->mmuregs[i]); ! 70: #else ! 71: qemu_put_be64s(f, &env->lsu); ! 72: for (i = 0; i < 16; i++) { ! 73: qemu_put_be64s(f, &env->immuregs[i]); ! 74: qemu_put_be64s(f, &env->dmmuregs[i]); ! 75: } ! 76: for (i = 0; i < 64; i++) { ! 77: qemu_put_be64s(f, &env->itlb_tag[i]); ! 78: qemu_put_be64s(f, &env->itlb_tte[i]); ! 79: qemu_put_be64s(f, &env->dtlb_tag[i]); ! 80: qemu_put_be64s(f, &env->dtlb_tte[i]); ! 81: } ! 82: qemu_put_be32s(f, &env->mmu_version); ! 83: for (i = 0; i < MAXTL_MAX; i++) { ! 84: qemu_put_be64s(f, &env->ts[i].tpc); ! 85: qemu_put_be64s(f, &env->ts[i].tnpc); ! 86: qemu_put_be64s(f, &env->ts[i].tstate); ! 87: qemu_put_be32s(f, &env->ts[i].tt); ! 88: } ! 89: qemu_put_be32s(f, &env->xcc); ! 90: qemu_put_be32s(f, &env->asi); ! 91: qemu_put_be32s(f, &env->pstate); ! 92: qemu_put_be32s(f, &env->tl); ! 93: qemu_put_be32s(f, &env->cansave); ! 94: qemu_put_be32s(f, &env->canrestore); ! 95: qemu_put_be32s(f, &env->otherwin); ! 96: qemu_put_be32s(f, &env->wstate); ! 97: qemu_put_be32s(f, &env->cleanwin); ! 98: for (i = 0; i < 8; i++) ! 99: qemu_put_be64s(f, &env->agregs[i]); ! 100: for (i = 0; i < 8; i++) ! 101: qemu_put_be64s(f, &env->bgregs[i]); ! 102: for (i = 0; i < 8; i++) ! 103: qemu_put_be64s(f, &env->igregs[i]); ! 104: for (i = 0; i < 8; i++) ! 105: qemu_put_be64s(f, &env->mgregs[i]); ! 106: qemu_put_be64s(f, &env->fprs); ! 107: qemu_put_be64s(f, &env->tick_cmpr); ! 108: qemu_put_be64s(f, &env->stick_cmpr); ! 109: qemu_put_ptimer(f, env->tick); ! 110: qemu_put_ptimer(f, env->stick); ! 111: qemu_put_be64s(f, &env->gsr); ! 112: qemu_put_be32s(f, &env->gl); ! 113: qemu_put_be64s(f, &env->hpstate); ! 114: for (i = 0; i < MAXTL_MAX; i++) ! 115: qemu_put_be64s(f, &env->htstate[i]); ! 116: qemu_put_be64s(f, &env->hintp); ! 117: qemu_put_be64s(f, &env->htba); ! 118: qemu_put_be64s(f, &env->hver); ! 119: qemu_put_be64s(f, &env->hstick_cmpr); ! 120: qemu_put_be64s(f, &env->ssr); ! 121: qemu_put_ptimer(f, env->hstick); ! 122: #endif ! 123: } ! 124: ! 125: int cpu_load(QEMUFile *f, void *opaque, int version_id) ! 126: { ! 127: CPUState *env = opaque; ! 128: int i; ! 129: uint32_t tmp; ! 130: ! 131: if (version_id != 5) ! 132: return -EINVAL; ! 133: for(i = 0; i < 8; i++) ! 134: qemu_get_betls(f, &env->gregs[i]); ! 135: qemu_get_be32s(f, &env->nwindows); ! 136: for(i = 0; i < env->nwindows * 16; i++) ! 137: qemu_get_betls(f, &env->regbase[i]); ! 138: ! 139: /* FPU */ ! 140: for(i = 0; i < TARGET_FPREGS; i++) { ! 141: union { ! 142: float32 f; ! 143: uint32_t i; ! 144: } u; ! 145: u.i = qemu_get_be32(f); ! 146: env->fpr[i] = u.f; ! 147: } ! 148: ! 149: qemu_get_betls(f, &env->pc); ! 150: qemu_get_betls(f, &env->npc); ! 151: qemu_get_betls(f, &env->y); ! 152: tmp = qemu_get_be32(f); ! 153: env->cwp = 0; /* needed to ensure that the wrapping registers are ! 154: correctly updated */ ! 155: PUT_PSR(env, tmp); ! 156: qemu_get_betls(f, &env->fsr); ! 157: qemu_get_betls(f, &env->tbr); ! 158: tmp = qemu_get_be32(f); ! 159: env->interrupt_index = tmp; ! 160: qemu_get_be32s(f, &env->pil_in); ! 161: #ifndef TARGET_SPARC64 ! 162: qemu_get_be32s(f, &env->wim); ! 163: /* MMU */ ! 164: for (i = 0; i < 32; i++) ! 165: qemu_get_be32s(f, &env->mmuregs[i]); ! 166: #else ! 167: qemu_get_be64s(f, &env->lsu); ! 168: for (i = 0; i < 16; i++) { ! 169: qemu_get_be64s(f, &env->immuregs[i]); ! 170: qemu_get_be64s(f, &env->dmmuregs[i]); ! 171: } ! 172: for (i = 0; i < 64; i++) { ! 173: qemu_get_be64s(f, &env->itlb_tag[i]); ! 174: qemu_get_be64s(f, &env->itlb_tte[i]); ! 175: qemu_get_be64s(f, &env->dtlb_tag[i]); ! 176: qemu_get_be64s(f, &env->dtlb_tte[i]); ! 177: } ! 178: qemu_get_be32s(f, &env->mmu_version); ! 179: for (i = 0; i < MAXTL_MAX; i++) { ! 180: qemu_get_be64s(f, &env->ts[i].tpc); ! 181: qemu_get_be64s(f, &env->ts[i].tnpc); ! 182: qemu_get_be64s(f, &env->ts[i].tstate); ! 183: qemu_get_be32s(f, &env->ts[i].tt); ! 184: } ! 185: qemu_get_be32s(f, &env->xcc); ! 186: qemu_get_be32s(f, &env->asi); ! 187: qemu_get_be32s(f, &env->pstate); ! 188: qemu_get_be32s(f, &env->tl); ! 189: env->tsptr = &env->ts[env->tl & MAXTL_MASK]; ! 190: qemu_get_be32s(f, &env->cansave); ! 191: qemu_get_be32s(f, &env->canrestore); ! 192: qemu_get_be32s(f, &env->otherwin); ! 193: qemu_get_be32s(f, &env->wstate); ! 194: qemu_get_be32s(f, &env->cleanwin); ! 195: for (i = 0; i < 8; i++) ! 196: qemu_get_be64s(f, &env->agregs[i]); ! 197: for (i = 0; i < 8; i++) ! 198: qemu_get_be64s(f, &env->bgregs[i]); ! 199: for (i = 0; i < 8; i++) ! 200: qemu_get_be64s(f, &env->igregs[i]); ! 201: for (i = 0; i < 8; i++) ! 202: qemu_get_be64s(f, &env->mgregs[i]); ! 203: qemu_get_be64s(f, &env->fprs); ! 204: qemu_get_be64s(f, &env->tick_cmpr); ! 205: qemu_get_be64s(f, &env->stick_cmpr); ! 206: qemu_get_ptimer(f, env->tick); ! 207: qemu_get_ptimer(f, env->stick); ! 208: qemu_get_be64s(f, &env->gsr); ! 209: qemu_get_be32s(f, &env->gl); ! 210: qemu_get_be64s(f, &env->hpstate); ! 211: for (i = 0; i < MAXTL_MAX; i++) ! 212: qemu_get_be64s(f, &env->htstate[i]); ! 213: qemu_get_be64s(f, &env->hintp); ! 214: qemu_get_be64s(f, &env->htba); ! 215: qemu_get_be64s(f, &env->hver); ! 216: qemu_get_be64s(f, &env->hstick_cmpr); ! 217: qemu_get_be64s(f, &env->ssr); ! 218: qemu_get_ptimer(f, env->hstick); ! 219: #endif ! 220: tlb_flush(env, 1); ! 221: return 0; ! 222: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.