Lines Matching +full:timer +full:-

31 #include "qemu/timer.h"
41 CPUSPARCState *env = &cpu->env; in cpu_kick_irq()
43 cs->halted = 0; in cpu_kick_irq()
51 CPUSPARCState *env = &cpu->env; in sparc64_cpu_set_ivec_irq()
55 if (!(env->ivec_status & 0x20)) { in sparc64_cpu_set_ivec_irq()
58 cs->halted = 0; in sparc64_cpu_set_ivec_irq()
59 env->interrupt_index = TT_IVEC; in sparc64_cpu_set_ivec_irq()
60 env->ivec_status |= 0x20; in sparc64_cpu_set_ivec_irq()
61 env->ivec_data[0] = (0x1f << 6) | irq; in sparc64_cpu_set_ivec_irq()
62 env->ivec_data[1] = 0; in sparc64_cpu_set_ivec_irq()
63 env->ivec_data[2] = 0; in sparc64_cpu_set_ivec_irq()
67 if (env->ivec_status & 0x20) { in sparc64_cpu_set_ivec_irq()
70 env->ivec_status &= ~0x20; in sparc64_cpu_set_ivec_irq()
85 CPUTimer *timer = g_new0(CPUTimer, 1); in cpu_timer_create() local
87 timer->name = name; in cpu_timer_create()
88 timer->frequency = frequency; in cpu_timer_create()
89 timer->disabled_mask = disabled_mask; in cpu_timer_create()
90 timer->npt_mask = npt_mask; in cpu_timer_create()
92 timer->disabled = 1; in cpu_timer_create()
93 timer->npt = 1; in cpu_timer_create()
94 timer->clock_offset = qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL); in cpu_timer_create()
96 timer->qtimer = timer_new_ns(QEMU_CLOCK_VIRTUAL, cb, cpu); in cpu_timer_create()
98 return timer; in cpu_timer_create()
101 static void cpu_timer_reset(CPUTimer *timer) in cpu_timer_reset() argument
103 timer->disabled = 1; in cpu_timer_reset()
104 timer->clock_offset = qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL); in cpu_timer_reset()
106 timer_del(timer->qtimer); in cpu_timer_reset()
112 CPUSPARCState *env = &s->cpu->env; in main_cpu_reset()
115 cpu_reset(CPU(s->cpu)); in main_cpu_reset()
117 cpu_timer_reset(env->tick); in main_cpu_reset()
118 cpu_timer_reset(env->stick); in main_cpu_reset()
119 cpu_timer_reset(env->hstick); in main_cpu_reset()
121 env->gregs[1] = 0; /* Memory start */ in main_cpu_reset()
122 env->gregs[2] = current_machine->ram_size; /* Memory size */ in main_cpu_reset()
123 env->gregs[3] = 0; /* Machine description XXX */ in main_cpu_reset()
126 env->pc = s->prom_addr + 0x20ULL; in main_cpu_reset()
128 env->pc = s->prom_addr + 0x40ULL; in main_cpu_reset()
130 env->npc = env->pc + 4; in main_cpu_reset()
136 CPUSPARCState *env = &cpu->env; in tick_irq()
138 CPUTimer *timer = env->tick; in tick_irq() local
140 if (timer->disabled) { in tick_irq()
147 env->softint |= SOFTINT_TIMER; in tick_irq()
154 CPUSPARCState *env = &cpu->env; in stick_irq()
156 CPUTimer *timer = env->stick; in stick_irq() local
158 if (timer->disabled) { in stick_irq()
165 env->softint |= SOFTINT_STIMER; in stick_irq()
172 CPUSPARCState *env = &cpu->env; in hstick_irq()
174 CPUTimer *timer = env->hstick; in hstick_irq() local
176 if (timer->disabled) { in hstick_irq()
183 env->softint |= SOFTINT_STIMER; in hstick_irq()
197 void cpu_tick_set_count(CPUTimer *timer, uint64_t count) in cpu_tick_set_count() argument
199 uint64_t real_count = count & ~timer->npt_mask; in cpu_tick_set_count()
200 uint64_t npt_bit = count & timer->npt_mask; in cpu_tick_set_count()
202 int64_t vm_clock_offset = qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL) - in cpu_tick_set_count()
203 cpu_to_timer_ticks(real_count, timer->frequency); in cpu_tick_set_count()
205 trace_sparc64_cpu_tick_set_count(timer->name, real_count, in cpu_tick_set_count()
206 timer->npt ? "disabled" : "enabled", in cpu_tick_set_count()
207 timer); in cpu_tick_set_count()
209 timer->npt = npt_bit ? 1 : 0; in cpu_tick_set_count()
210 timer->clock_offset = vm_clock_offset; in cpu_tick_set_count()
213 uint64_t cpu_tick_get_count(CPUTimer *timer) in cpu_tick_get_count() argument
216 qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL) - timer->clock_offset, in cpu_tick_get_count()
217 timer->frequency); in cpu_tick_get_count()
219 trace_sparc64_cpu_tick_get_count(timer->name, real_count, in cpu_tick_get_count()
220 timer->npt ? "disabled" : "enabled", in cpu_tick_get_count()
221 timer); in cpu_tick_get_count()
223 if (timer->npt) { in cpu_tick_get_count()
224 real_count |= timer->npt_mask; in cpu_tick_get_count()
230 void cpu_tick_set_limit(CPUTimer *timer, uint64_t limit) in cpu_tick_set_limit() argument
234 uint64_t real_limit = limit & ~timer->disabled_mask; in cpu_tick_set_limit()
235 timer->disabled = (limit & timer->disabled_mask) ? 1 : 0; in cpu_tick_set_limit()
237 int64_t expires = cpu_to_timer_ticks(real_limit, timer->frequency) + in cpu_tick_set_limit()
238 timer->clock_offset; in cpu_tick_set_limit()
244 trace_sparc64_cpu_tick_set_limit(timer->name, real_limit, in cpu_tick_set_limit()
245 timer->disabled ? "disabled" : "enabled", in cpu_tick_set_limit()
246 timer, limit, in cpu_tick_set_limit()
248 now - timer->clock_offset, in cpu_tick_set_limit()
249 timer->frequency in cpu_tick_set_limit()
252 expires - now, timer->frequency in cpu_tick_set_limit()
256 trace_sparc64_cpu_tick_set_limit_zero(timer->name); in cpu_tick_set_limit()
257 timer_del(timer->qtimer); in cpu_tick_set_limit()
258 } else if (timer->disabled) { in cpu_tick_set_limit()
259 timer_del(timer->qtimer); in cpu_tick_set_limit()
261 timer_mod(timer->qtimer, expires); in cpu_tick_set_limit()
277 "ivec-irq", IVEC_MAX); in sparc64_cpu_devinit()
279 env = &cpu->env; in sparc64_cpu_devinit()
281 env->tick = cpu_timer_create("tick", cpu, tick_irq, in sparc64_cpu_devinit()
285 env->stick = cpu_timer_create("stick", cpu, stick_irq, in sparc64_cpu_devinit()
289 env->hstick = cpu_timer_create("hstick", cpu, hstick_irq, in sparc64_cpu_devinit()
294 reset_info->cpu = cpu; in sparc64_cpu_devinit()
295 reset_info->prom_addr = prom_addr; in sparc64_cpu_devinit()