Lines Matching full:ar

364     ACPIREGS *ar = container_of(notifier, ACPIREGS, wakeup);  in acpi_notify_wakeup()  local
369 ar->pm1.evt.sts |= in acpi_notify_wakeup()
373 ar->pm1.evt.sts |= in acpi_notify_wakeup()
379 ar->pm1.evt.sts |= in acpi_notify_wakeup()
388 uint16_t acpi_pm1_evt_get_sts(ACPIREGS *ar) in acpi_pm1_evt_get_sts() argument
393 if (d >= muldiv64(ar->tmr.overflow_time, in acpi_pm1_evt_get_sts()
395 ar->pm1.evt.sts |= ACPI_BITMASK_TIMER_STATUS; in acpi_pm1_evt_get_sts()
397 return ar->pm1.evt.sts; in acpi_pm1_evt_get_sts()
400 static void acpi_pm1_evt_write_sts(ACPIREGS *ar, uint16_t val) in acpi_pm1_evt_write_sts() argument
402 uint16_t pm1_sts = acpi_pm1_evt_get_sts(ar); in acpi_pm1_evt_write_sts()
405 acpi_pm_tmr_calc_overflow_time(ar); in acpi_pm1_evt_write_sts()
407 ar->pm1.evt.sts &= ~val; in acpi_pm1_evt_write_sts()
410 static void acpi_pm1_evt_write_en(ACPIREGS *ar, uint16_t val) in acpi_pm1_evt_write_en() argument
412 ar->pm1.evt.en = val; in acpi_pm1_evt_write_en()
419 void acpi_pm1_evt_power_down(ACPIREGS *ar) in acpi_pm1_evt_power_down() argument
421 if (ar->pm1.evt.en & ACPI_BITMASK_POWER_BUTTON_ENABLE) { in acpi_pm1_evt_power_down()
422 ar->pm1.evt.sts |= ACPI_BITMASK_POWER_BUTTON_STATUS; in acpi_pm1_evt_power_down()
423 ar->tmr.update_sci(ar); in acpi_pm1_evt_power_down()
427 void acpi_pm1_evt_reset(ACPIREGS *ar) in acpi_pm1_evt_reset() argument
429 ar->pm1.evt.sts = 0; in acpi_pm1_evt_reset()
430 ar->pm1.evt.en = 0; in acpi_pm1_evt_reset()
437 ACPIREGS *ar = opaque; in acpi_pm_evt_read() local
440 return acpi_pm1_evt_get_sts(ar); in acpi_pm_evt_read()
442 return ar->pm1.evt.en; in acpi_pm_evt_read()
451 ACPIREGS *ar = opaque; in acpi_pm_evt_write() local
454 acpi_pm1_evt_write_sts(ar, val); in acpi_pm_evt_write()
455 ar->pm1.evt.update_sci(ar); in acpi_pm_evt_write()
458 acpi_pm1_evt_write_en(ar, val); in acpi_pm_evt_write()
459 ar->pm1.evt.update_sci(ar); in acpi_pm_evt_write()
473 void acpi_pm1_evt_init(ACPIREGS *ar, acpi_update_sci_fn update_sci, in acpi_pm1_evt_init() argument
476 ar->pm1.evt.update_sci = update_sci; in acpi_pm1_evt_init()
477 memory_region_init_io(&ar->pm1.evt.io, memory_region_owner(parent), in acpi_pm1_evt_init()
478 &acpi_pm_evt_ops, ar, "acpi-evt", 4); in acpi_pm1_evt_init()
479 memory_region_add_subregion(parent, 0, &ar->pm1.evt.io); in acpi_pm1_evt_init()
483 void acpi_pm_tmr_update(ACPIREGS *ar, bool enable) in acpi_pm_tmr_update() argument
489 expire_time = muldiv64(ar->tmr.overflow_time, NANOSECONDS_PER_SECOND, in acpi_pm_tmr_update()
491 timer_mod(ar->tmr.timer, expire_time); in acpi_pm_tmr_update()
493 timer_del(ar->tmr.timer); in acpi_pm_tmr_update()
503 void acpi_pm_tmr_calc_overflow_time(ACPIREGS *ar) in acpi_pm_tmr_calc_overflow_time() argument
506 ar->tmr.overflow_time = (d + 0x800000LL) & ~0x7fffffLL; in acpi_pm_tmr_calc_overflow_time()
509 static uint32_t acpi_pm_tmr_get(ACPIREGS *ar) in acpi_pm_tmr_get() argument
517 ACPIREGS *ar = opaque; in acpi_pm_tmr_timer() local
520 ar->tmr.update_sci(ar); in acpi_pm_tmr_timer()
543 void acpi_pm_tmr_init(ACPIREGS *ar, acpi_update_sci_fn update_sci, in acpi_pm_tmr_init() argument
546 ar->tmr.update_sci = update_sci; in acpi_pm_tmr_init()
547 ar->tmr.timer = timer_new_ns(QEMU_CLOCK_VIRTUAL, acpi_pm_tmr_timer, ar); in acpi_pm_tmr_init()
548 memory_region_init_io(&ar->tmr.io, memory_region_owner(parent), in acpi_pm_tmr_init()
549 &acpi_pm_tmr_ops, ar, "acpi-tmr", 4); in acpi_pm_tmr_init()
550 memory_region_add_subregion(parent, 8, &ar->tmr.io); in acpi_pm_tmr_init()
553 void acpi_pm_tmr_reset(ACPIREGS *ar) in acpi_pm_tmr_reset() argument
555 ar->tmr.overflow_time = 0; in acpi_pm_tmr_reset()
556 timer_del(ar->tmr.timer); in acpi_pm_tmr_reset()
560 void acpi_pm1_cnt_update(ACPIREGS *ar, in acpi_pm1_cnt_update() argument
564 if (ar->pm1.cnt.acpi_only) { in acpi_pm1_cnt_update()
569 ar->pm1.cnt.cnt |= ACPI_BITMASK_SCI_ENABLE; in acpi_pm1_cnt_update()
571 ar->pm1.cnt.cnt &= ~ACPI_BITMASK_SCI_ENABLE; in acpi_pm1_cnt_update()
577 ACPIREGS *ar = opaque; in acpi_pm_cnt_read() local
578 return ar->pm1.cnt.cnt >> addr * 8; in acpi_pm_cnt_read()
584 ACPIREGS *ar = opaque; in acpi_pm_cnt_write() local
587 val = val << 8 | (ar->pm1.cnt.cnt & 0xff); in acpi_pm_cnt_write()
589 ar->pm1.cnt.cnt = val & ~(ACPI_BITMASK_SLEEP_ENABLE); in acpi_pm_cnt_write()
602 if (sus_typ == ar->pm1.cnt.s4_val) { /* S4 request */ in acpi_pm_cnt_write()
620 void acpi_pm1_cnt_init(ACPIREGS *ar, MemoryRegion *parent, in acpi_pm1_cnt_init() argument
626 ar->pm1.cnt.s4_val = s4_val; in acpi_pm1_cnt_init()
627 ar->pm1.cnt.acpi_only = acpi_only; in acpi_pm1_cnt_init()
628 ar->wakeup.notify = acpi_notify_wakeup; in acpi_pm1_cnt_init()
629 qemu_register_wakeup_notifier(&ar->wakeup); in acpi_pm1_cnt_init()
636 memory_region_init_io(&ar->pm1.cnt.io, memory_region_owner(parent), in acpi_pm1_cnt_init()
637 &acpi_pm_cnt_ops, ar, "acpi-cnt", 2); in acpi_pm1_cnt_init()
638 memory_region_add_subregion(parent, 4, &ar->pm1.cnt.io); in acpi_pm1_cnt_init()
650 void acpi_pm1_cnt_reset(ACPIREGS *ar) in acpi_pm1_cnt_reset() argument
652 ar->pm1.cnt.cnt = 0; in acpi_pm1_cnt_reset()
653 if (ar->pm1.cnt.acpi_only) { in acpi_pm1_cnt_reset()
654 ar->pm1.cnt.cnt |= ACPI_BITMASK_SCI_ENABLE; in acpi_pm1_cnt_reset()
659 void acpi_gpe_init(ACPIREGS *ar, uint8_t len) in acpi_gpe_init() argument
661 ar->gpe.len = len; in acpi_gpe_init()
666 ar->gpe.sts = g_malloc0(len); in acpi_gpe_init()
667 ar->gpe.en = g_malloc0(len); in acpi_gpe_init()
670 void acpi_gpe_reset(ACPIREGS *ar) in acpi_gpe_reset() argument
672 memset(ar->gpe.sts, 0, ar->gpe.len / 2); in acpi_gpe_reset()
673 memset(ar->gpe.en, 0, ar->gpe.len / 2); in acpi_gpe_reset()
676 static uint8_t *acpi_gpe_ioport_get_ptr(ACPIREGS *ar, uint32_t addr) in acpi_gpe_ioport_get_ptr() argument
680 if (addr < ar->gpe.len / 2) { in acpi_gpe_ioport_get_ptr()
681 cur = ar->gpe.sts + addr; in acpi_gpe_ioport_get_ptr()
682 } else if (addr < ar->gpe.len) { in acpi_gpe_ioport_get_ptr()
683 cur = ar->gpe.en + addr - ar->gpe.len / 2; in acpi_gpe_ioport_get_ptr()
691 void acpi_gpe_ioport_writeb(ACPIREGS *ar, uint32_t addr, uint32_t val) in acpi_gpe_ioport_writeb() argument
695 cur = acpi_gpe_ioport_get_ptr(ar, addr); in acpi_gpe_ioport_writeb()
696 if (addr < ar->gpe.len / 2) { in acpi_gpe_ioport_writeb()
700 } else if (addr < ar->gpe.len) { in acpi_gpe_ioport_writeb()
701 trace_acpi_gpe_en_ioport_writeb(addr - (ar->gpe.len / 2), val); in acpi_gpe_ioport_writeb()
709 uint32_t acpi_gpe_ioport_readb(ACPIREGS *ar, uint32_t addr) in acpi_gpe_ioport_readb() argument
714 cur = acpi_gpe_ioport_get_ptr(ar, addr); in acpi_gpe_ioport_readb()
720 if (addr < ar->gpe.len / 2) { in acpi_gpe_ioport_readb()
723 trace_acpi_gpe_en_ioport_readb(addr - (ar->gpe.len / 2), val); in acpi_gpe_ioport_readb()
729 void acpi_send_gpe_event(ACPIREGS *ar, qemu_irq irq, in acpi_send_gpe_event() argument
732 ar->gpe.sts[0] |= status; in acpi_send_gpe_event()
733 acpi_update_sci(ar, irq); in acpi_send_gpe_event()