Lines Matching full:cpu
22 #include "cpu.h"
38 void cpu_openrisc_count_set(OpenRISCCPU *cpu, uint32_t val) in cpu_openrisc_count_set() argument
45 uint32_t cpu_openrisc_count_get(OpenRISCCPU *cpu) in cpu_openrisc_count_get() argument
51 void cpu_openrisc_count_update(OpenRISCCPU *cpu) in cpu_openrisc_count_update() argument
55 if (!cpu->env.is_counting) { in cpu_openrisc_count_update()
64 void cpu_openrisc_timer_update(OpenRISCCPU *cpu) in cpu_openrisc_timer_update() argument
69 if (!cpu->env.is_counting) { in cpu_openrisc_timer_update()
73 cpu_openrisc_count_update(cpu); in cpu_openrisc_timer_update()
76 if ((cpu->env.ttmr & TTMR_TP) <= (or1k_timer->ttcr & TTMR_TP)) { in cpu_openrisc_timer_update()
78 wait += cpu->env.ttmr & TTMR_TP; in cpu_openrisc_timer_update()
80 wait = (cpu->env.ttmr & TTMR_TP) - (or1k_timer->ttcr & TTMR_TP); in cpu_openrisc_timer_update()
83 timer_mod(cpu->env.timer, next); in cpu_openrisc_timer_update()
86 void cpu_openrisc_count_start(OpenRISCCPU *cpu) in cpu_openrisc_count_start() argument
88 cpu->env.is_counting = 1; in cpu_openrisc_count_start()
89 cpu_openrisc_count_update(cpu); in cpu_openrisc_count_start()
92 void cpu_openrisc_count_stop(OpenRISCCPU *cpu) in cpu_openrisc_count_stop() argument
94 timer_del(cpu->env.timer); in cpu_openrisc_count_stop()
95 cpu_openrisc_count_update(cpu); in cpu_openrisc_count_stop()
96 cpu->env.is_counting = 0; in cpu_openrisc_count_stop()
101 OpenRISCCPU *cpu = opaque; in openrisc_timer_cb() local
103 if ((cpu->env.ttmr & TTMR_IE) && in openrisc_timer_cb()
104 timer_expired(cpu->env.timer, qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL))) { in openrisc_timer_cb()
105 CPUState *cs = CPU(cpu); in openrisc_timer_cb()
107 cpu->env.ttmr |= TTMR_IP; in openrisc_timer_cb()
111 switch (cpu->env.ttmr & TTMR_M) { in openrisc_timer_cb()
116 or1k_timer->ttcr_offset -= (cpu->env.ttmr & TTMR_TP); in openrisc_timer_cb()
119 cpu_openrisc_count_stop(cpu); in openrisc_timer_cb()
125 cpu_openrisc_timer_update(cpu); in openrisc_timer_cb()
126 qemu_cpu_kick(CPU(cpu)); in openrisc_timer_cb()
129 /* Reset the per CPU counter state. */
132 OpenRISCCPU *cpu = opaque; in openrisc_count_reset() local
134 if (cpu->env.is_counting) { in openrisc_count_reset()
135 cpu_openrisc_count_stop(cpu); in openrisc_count_reset()
137 cpu->env.ttmr = 0x00000000; in openrisc_count_reset()
143 OpenRISCCPU *cpu = opaque; in openrisc_timer_reset() local
144 cpu_openrisc_count_set(cpu, 0); in openrisc_timer_reset()
159 void cpu_openrisc_clock_init(OpenRISCCPU *cpu) in cpu_openrisc_clock_init() argument
161 cpu->env.timer = timer_new_ns(QEMU_CLOCK_VIRTUAL, &openrisc_timer_cb, cpu); in cpu_openrisc_clock_init()
163 qemu_register_reset(openrisc_count_reset, cpu); in cpu_openrisc_clock_init()
166 qemu_register_reset(openrisc_timer_reset, cpu); in cpu_openrisc_clock_init()