Lines Matching refs:vatpit
61 #define VATPIT_LOCK(vatpit) mutex_enter(&((vatpit)->lock)) argument
62 #define VATPIT_UNLOCK(vatpit) mutex_exit(&((vatpit)->lock)) argument
63 #define VATPIT_LOCKED(vatpit) MUTEX_HELD(&((vatpit)->lock)) argument
87 struct vatpit *vatpit; member
113 struct vatpit { struct
120 static void pit_timer_start_cntr0(struct vatpit *vatpit); argument
123 vatpit_delta_ticks(struct vatpit *vatpit, struct channel *c) in vatpit_delta_ticks() argument
131 vatpit_get_out(struct vatpit *vatpit, int channel) in vatpit_get_out() argument
137 c = &vatpit->channel[channel]; in vatpit_get_out()
141 delta_ticks = vatpit_delta_ticks(vatpit, c); in vatpit_get_out()
156 struct vatpit *vatpit; in vatpit_callout_handler() local
160 vatpit = arg->vatpit; in vatpit_callout_handler()
161 c = &vatpit->channel[arg->channel_num]; in vatpit_callout_handler()
164 VATPIT_LOCK(vatpit); in vatpit_callout_handler()
175 pit_timer_start_cntr0(vatpit); in vatpit_callout_handler()
185 (void) vatpic_pulse_irq(vatpit->vm, 0); in vatpit_callout_handler()
186 (void) vioapic_pulse_irq(vatpit->vm, 2); in vatpit_callout_handler()
189 VATPIT_UNLOCK(vatpit); in vatpit_callout_handler()
193 vatpit_callout_reset(struct vatpit *vatpit) in vatpit_callout_reset() argument
195 struct channel *c = &vatpit->channel[0]; in vatpit_callout_reset()
197 ASSERT(VATPIT_LOCKED(vatpit)); in vatpit_callout_reset()
203 pit_timer_start_cntr0(struct vatpit *vatpit) in pit_timer_start_cntr0() argument
205 struct channel *c = &vatpit->channel[0]; in pit_timer_start_cntr0()
229 vatpit_callout_reset(vatpit); in pit_timer_start_cntr0()
233 pit_update_counter(struct vatpit *vatpit, struct channel *c, bool latch) in pit_update_counter() argument
255 delta_ticks = vatpit_delta_ticks(vatpit, c); in pit_update_counter()
269 pit_readback1(struct vatpit *vatpit, int channel, uint8_t cmd) in pit_readback1() argument
273 c = &vatpit->channel[channel]; in pit_readback1()
280 (void) pit_update_counter(vatpit, c, true); in pit_readback1()
290 if (c->mode == TIMER_INTTC && vatpit_get_out(vatpit, channel)) in pit_readback1()
300 pit_readback(struct vatpit *vatpit, uint8_t cmd) in pit_readback() argument
309 error = pit_readback1(vatpit, 0, cmd); in pit_readback()
311 error = pit_readback1(vatpit, 1, cmd); in pit_readback()
313 error = pit_readback1(vatpit, 2, cmd); in pit_readback()
319 vatpit_update_mode(struct vatpit *vatpit, uint8_t val) in vatpit_update_mode() argument
335 return (pit_readback(vatpit, val)); in vatpit_update_mode()
352 c = &vatpit->channel[sel >> 6]; in vatpit_update_mode()
354 (void) pit_update_counter(vatpit, c, true); in vatpit_update_mode()
367 struct vatpit *vatpit = arg; in vatpit_handler() local
383 VATPIT_LOCK(vatpit); in vatpit_handler()
384 error = vatpit_update_mode(vatpit, val); in vatpit_handler()
385 VATPIT_UNLOCK(vatpit); in vatpit_handler()
393 c = &vatpit->channel[port - TIMER_CNTR0]; in vatpit_handler()
395 VATPIT_LOCK(vatpit); in vatpit_handler()
412 tmp = pit_update_counter(vatpit, c, false); in vatpit_handler()
444 pit_timer_start_cntr0(vatpit); in vatpit_handler()
450 VATPIT_UNLOCK(vatpit); in vatpit_handler()
459 struct vatpit *vatpit = arg; in vatpit_nmisc_handler() local
462 VATPIT_LOCK(vatpit); in vatpit_nmisc_handler()
463 if (vatpit_get_out(vatpit, 2)) in vatpit_nmisc_handler()
468 VATPIT_UNLOCK(vatpit); in vatpit_nmisc_handler()
474 struct vatpit *
477 struct vatpit *vatpit; in vatpit_init() local
481 vatpit = kmem_zalloc(sizeof (struct vatpit), KM_SLEEP); in vatpit_init()
482 vatpit->vm = vm; in vatpit_init()
484 mutex_init(&vatpit->lock, NULL, MUTEX_ADAPTIVE, NULL); in vatpit_init()
487 callout_init(&vatpit->channel[i].callout, 1); in vatpit_init()
488 arg = &vatpit->channel[i].callout_arg; in vatpit_init()
489 arg->vatpit = vatpit; in vatpit_init()
493 return (vatpit); in vatpit_init()
497 vatpit_cleanup(struct vatpit *vatpit) in vatpit_cleanup() argument
502 callout_drain(&vatpit->channel[i].callout); in vatpit_cleanup()
504 mutex_destroy(&vatpit->lock); in vatpit_cleanup()
505 kmem_free(vatpit, sizeof (*vatpit)); in vatpit_cleanup()
509 vatpit_localize_resources(struct vatpit *vatpit) in vatpit_localize_resources() argument
513 if (vatpit->channel[i].mode != 0) { in vatpit_localize_resources()
514 vmm_glue_callout_localize(&vatpit->channel[i].callout); in vatpit_localize_resources()
520 vatpit_pause(struct vatpit *vatpit) in vatpit_pause() argument
522 struct channel *c = &vatpit->channel[0]; in vatpit_pause()
524 VATPIT_LOCK(vatpit); in vatpit_pause()
526 VATPIT_UNLOCK(vatpit); in vatpit_pause()
530 vatpit_resume(struct vatpit *vatpit) in vatpit_resume() argument
532 struct channel *c = &vatpit->channel[0]; in vatpit_resume()
534 VATPIT_LOCK(vatpit); in vatpit_resume()
537 vatpit_callout_reset(vatpit); in vatpit_resume()
539 VATPIT_UNLOCK(vatpit); in vatpit_resume()
549 struct vatpit *vatpit = datap; in vatpit_data_read() local
552 VATPIT_LOCK(vatpit); in vatpit_data_read()
554 const struct channel *src = &vatpit->channel[i]; in vatpit_data_read()
573 vm_normalize_hrtime(vatpit->vm, src->time_target); in vatpit_data_read()
578 VATPIT_UNLOCK(vatpit); in vatpit_data_read()
603 struct vatpit *vatpit = datap; in vatpit_data_write() local
609 VATPIT_LOCK(vatpit); in vatpit_data_write()
612 struct channel *out = &vatpit->channel[i]; in vatpit_data_write()
645 vm_denormalize_hrtime(vatpit->vm, chan->vac_time_target); in vatpit_data_write()
651 if (!vm_is_paused(vatpit->vm)) { in vatpit_data_write()
652 vatpit_callout_reset(vatpit); in vatpit_data_write()
655 VATPIT_UNLOCK(vatpit); in vatpit_data_write()