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

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

unix.superglobalmegacorp.com

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