Lines Matching refs:pit

59 static int pit_get_count(PITState *pit, int channel)  in pit_get_count()  argument
63 struct hvm_hw_pit_channel *c = &pit->hw.channels[channel]; in pit_get_count()
64 struct vcpu *v = vpit_vcpu(pit); in pit_get_count()
66 ASSERT(spin_is_locked(&pit->lock)); in pit_get_count()
68 d = muldiv64(get_guest_time(v) - pit->count_load_time[channel], in pit_get_count()
90 static int pit_get_out(PITState *pit, int channel) in pit_get_out() argument
92 struct hvm_hw_pit_channel *s = &pit->hw.channels[channel]; in pit_get_out()
95 struct vcpu *v = vpit_vcpu(pit); in pit_get_out()
97 ASSERT(spin_is_locked(&pit->lock)); in pit_get_out()
99 d = muldiv64(get_guest_time(v) - pit->count_load_time[channel], in pit_get_out()
126 static void pit_set_gate(PITState *pit, int channel, int val) in pit_set_gate() argument
128 struct hvm_hw_pit_channel *s = &pit->hw.channels[channel]; in pit_set_gate()
129 struct vcpu *v = vpit_vcpu(pit); in pit_set_gate()
131 ASSERT(spin_is_locked(&pit->lock)); in pit_set_gate()
146 pit->count_load_time[channel] = get_guest_time(v); in pit_set_gate()
153 static int pit_get_gate(PITState *pit, int channel) in pit_get_gate() argument
155 ASSERT(spin_is_locked(&pit->lock)); in pit_get_gate()
156 return pit->hw.channels[channel].gate; in pit_get_gate()
166 static void pit_load_count(PITState *pit, int channel, int val) in pit_load_count() argument
169 struct hvm_hw_pit_channel *s = &pit->hw.channels[channel]; in pit_load_count()
170 struct vcpu *v = vpit_vcpu(pit); in pit_load_count()
172 ASSERT(spin_is_locked(&pit->lock)); in pit_load_count()
178 pit->count_load_time[channel] = 0; in pit_load_count()
180 pit->count_load_time[channel] = get_guest_time(v); in pit_load_count()
193 create_periodic_time(v, &pit->pt0, period, period, 0, pit_time_fired, in pit_load_count()
194 &pit->count_load_time[channel]); in pit_load_count()
200 create_periodic_time(v, &pit->pt0, period, 0, 0, pit_time_fired, in pit_load_count()
201 &pit->count_load_time[channel]); in pit_load_count()
205 destroy_periodic_time(&pit->pt0); in pit_load_count()
210 static void pit_latch_count(PITState *pit, int channel) in pit_latch_count() argument
212 struct hvm_hw_pit_channel *c = &pit->hw.channels[channel]; in pit_latch_count()
214 ASSERT(spin_is_locked(&pit->lock)); in pit_latch_count()
218 c->latched_count = pit_get_count(pit, channel); in pit_latch_count()
223 static void pit_latch_status(PITState *pit, int channel) in pit_latch_status() argument
225 struct hvm_hw_pit_channel *c = &pit->hw.channels[channel]; in pit_latch_status()
227 ASSERT(spin_is_locked(&pit->lock)); in pit_latch_status()
232 c->status = ((pit_get_out(pit, channel) << 7) | in pit_latch_status()
240 static void pit_ioport_write(struct PITState *pit, uint32_t addr, uint32_t val) in pit_ioport_write() argument
248 spin_lock(&pit->lock); in pit_ioport_write()
258 s = &pit->hw.channels[channel]; in pit_ioport_write()
262 pit_latch_count(pit, channel); in pit_ioport_write()
264 pit_latch_status(pit, channel); in pit_ioport_write()
271 s = &pit->hw.channels[channel]; in pit_ioport_write()
275 pit_latch_count(pit, channel); in pit_ioport_write()
293 s = &pit->hw.channels[addr]; in pit_ioport_write()
298 pit_load_count(pit, addr, val); in pit_ioport_write()
301 pit_load_count(pit, addr, val << 8); in pit_ioport_write()
308 pit_load_count(pit, addr, s->write_latch | (val << 8)); in pit_ioport_write()
314 spin_unlock(&pit->lock); in pit_ioport_write()
317 static uint32_t pit_ioport_read(struct PITState *pit, uint32_t addr) in pit_ioport_read() argument
323 s = &pit->hw.channels[addr]; in pit_ioport_read()
325 spin_lock(&pit->lock); in pit_ioport_read()
357 count = pit_get_count(pit, addr); in pit_ioport_read()
361 count = pit_get_count(pit, addr); in pit_ioport_read()
365 count = pit_get_count(pit, addr); in pit_ioport_read()
370 count = pit_get_count(pit, addr); in pit_ioport_read()
377 spin_unlock(&pit->lock); in pit_ioport_read()
382 void pit_stop_channel0_irq(PITState *pit) in pit_stop_channel0_irq() argument
388 spin_lock(&pit->lock); in pit_stop_channel0_irq()
389 destroy_periodic_time(&pit->pt0); in pit_stop_channel0_irq()
390 spin_unlock(&pit->lock); in pit_stop_channel0_irq()
395 PITState *pit = domain_vpit(d); in pit_save() local
401 spin_lock(&pit->lock); in pit_save()
403 rc = hvm_save_entry(PIT, 0, h, &pit->hw); in pit_save()
405 spin_unlock(&pit->lock); in pit_save()
412 PITState *pit = domain_vpit(d); in pit_load() local
418 spin_lock(&pit->lock); in pit_load()
420 if ( hvm_load_entry(PIT, h, &pit->hw) ) in pit_load()
422 spin_unlock(&pit->lock); in pit_load()
431 pit->pt0.last_plt_gtime = get_guest_time(d->vcpu[0]); in pit_load()
433 pit_load_count(pit, i, pit->hw.channels[i].count); in pit_load()
435 spin_unlock(&pit->lock); in pit_load()
444 PITState *pit = domain_vpit(d); in pit_reset() local
452 destroy_periodic_time(&pit->pt0); in pit_reset()
453 pit->pt0.source = PTSRC_isa; in pit_reset()
455 spin_lock(&pit->lock); in pit_reset()
459 s = &pit->hw.channels[i]; in pit_reset()
462 pit_load_count(pit, i, 0); in pit_reset()
465 spin_unlock(&pit->lock); in pit_reset()
470 PITState *pit = domain_vpit(d); in pit_init() local
475 spin_lock_init(&pit->lock); in pit_init()
488 PITState *pit = domain_vpit(d); in pit_deinit() local
494 destroy_periodic_time(&pit->pt0); in pit_deinit()
526 struct PITState *pit, uint32_t addr, uint32_t val) in speaker_ioport_write() argument
528 pit->hw.speaker_data_on = (val >> 1) & 1; in speaker_ioport_write()
529 pit_set_gate(pit, 2, val & 1); in speaker_ioport_write()
533 struct PITState *pit, uint32_t addr) in speaker_ioport_read() argument
537 return ((pit->hw.speaker_data_on << 1) | pit_get_gate(pit, 2) | in speaker_ioport_read()
538 (pit_get_out(pit, 2) << 5) | (refresh_clock << 4)); in speaker_ioport_read()