Line 34... |
Line 34... |
#include "port.h"
|
#include "port.h"
|
#include "arch.h"
|
#include "arch.h"
|
#include "abstract.h"
|
#include "abstract.h"
|
#include "except.h"
|
#include "except.h"
|
#include "tick.h"
|
#include "tick.h"
|
|
#include "opcode/or32.h"
|
#include "spr_defs.h"
|
#include "spr_defs.h"
|
|
#include "execute.h"
|
#include "pic.h"
|
#include "pic.h"
|
#include "sprs.h"
|
#include "sprs.h"
|
#include "sim-config.h"
|
#include "sim-config.h"
|
#include "sched.h"
|
#include "sched.h"
|
#include "debug.h"
|
#include "debug.h"
|
Line 70... |
Line 72... |
TRACE("tick_job param: %i, mode: %i at %lli (%lli)\n", (int)param, mode,
|
TRACE("tick_job param: %i, mode: %i at %lli (%lli)\n", (int)param, mode,
|
runtime.sim.cycles, runtime.cpu.instructions);
|
runtime.sim.cycles, runtime.cpu.instructions);
|
switch (mode) {
|
switch (mode) {
|
case 1:
|
case 1:
|
if (!param) {
|
if (!param) {
|
sprs[SPR_TTCR] = ttcr = 0;
|
cpu_state.sprs[SPR_TTCR] = ttcr = 0;
|
cycles_start = runtime.sim.cycles - ttcr;
|
cycles_start = runtime.sim.cycles - ttcr;
|
TRACE("Scheduleing timer job for %li\n", (ttmr & SPR_TTMR_PERIOD) - ttcr);
|
TRACE("Scheduleing timer job for %li\n", (ttmr & SPR_TTMR_PERIOD) - ttcr);
|
SCHED_ADD(tick_job, (void *)0, (ttmr & SPR_TTMR_PERIOD) - ttcr);
|
SCHED_ADD(tick_job, (void *)0, (ttmr & SPR_TTMR_PERIOD) - ttcr);
|
}
|
}
|
case 2:
|
case 2:
|
Line 119... |
Line 121... |
TRACE("Removeing scheduled jobs\n");
|
TRACE("Removeing scheduled jobs\n");
|
SCHED_FIND_REMOVE(tick_job, (void *)0);
|
SCHED_FIND_REMOVE(tick_job, (void *)0);
|
SCHED_FIND_REMOVE(tick_job, (void *)1);
|
SCHED_FIND_REMOVE(tick_job, (void *)1);
|
break;
|
break;
|
case 1: /* Timer should auto restart */
|
case 1: /* Timer should auto restart */
|
sprs[SPR_TTCR] = ttcr = 0;
|
cpu_state.sprs[SPR_TTCR] = ttcr = 0;
|
cycles_start = runtime.sim.cycles;
|
cycles_start = runtime.sim.cycles;
|
TRACE("Removeing scheduled jobs\n");
|
TRACE("Removeing scheduled jobs\n");
|
SCHED_FIND_REMOVE(tick_job, (void *)0);
|
SCHED_FIND_REMOVE(tick_job, (void *)0);
|
SCHED_FIND_REMOVE(tick_job, (void *)1);
|
SCHED_FIND_REMOVE(tick_job, (void *)1);
|
TRACE("Scheduleing timer job for %li\n", (ttmr & SPR_TTMR_PERIOD) - ttcr);
|
TRACE("Scheduleing timer job for %li\n", (ttmr & SPR_TTMR_PERIOD) - ttcr);
|