Annotation of qemu/target-sparc/machine.c, revision 1.1.1.1

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: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.