Lines Matching +full:io +full:- +full:width

18  * Contributions after 2012-01-13 are licensed under the terms of the
26 #include "qemu/config-file.h"
28 #include "qapi/opts-visitor.h"
29 #include "qapi/qapi-events-run-state.h"
30 #include "qapi/qapi-visit-acpi.h"
31 #include "qemu/error-report.h"
58 static const char unsigned dfl_hdr[ACPI_TABLE_HDR_SIZE - ACPI_TABLE_PFX_SIZE] =
93 return (-sum) & 0xff; in acpi_checksum()
106 * @hdrs->file and @hdrs->data are ignored.
110 * The number of tables that can be installed is not limited, but the 16-bit
157 body_size = bloblen - body_start; in acpi_table_install()
190 /* Update the header fields. The strings need not be NUL-terminated. */ in acpi_table_install()
192 ext_hdr->_length = cpu_to_le16(acpi_payload_size); in acpi_table_install()
194 if (hdrs->sig) { in acpi_table_install()
195 strncpy(ext_hdr->sig, hdrs->sig, sizeof ext_hdr->sig); in acpi_table_install()
199 if (has_header && le32_to_cpu(ext_hdr->length) != acpi_payload_size) { in acpi_table_install()
202 le32_to_cpu(ext_hdr->length), acpi_payload_size); in acpi_table_install()
204 ext_hdr->length = cpu_to_le32(acpi_payload_size); in acpi_table_install()
206 if (hdrs->has_rev) { in acpi_table_install()
207 ext_hdr->revision = hdrs->rev; in acpi_table_install()
211 ext_hdr->checksum = 0; in acpi_table_install()
213 if (hdrs->oem_id) { in acpi_table_install()
214 strncpy(ext_hdr->oem_id, hdrs->oem_id, sizeof ext_hdr->oem_id); in acpi_table_install()
217 if (hdrs->oem_table_id) { in acpi_table_install()
218 strncpy(ext_hdr->oem_table_id, hdrs->oem_table_id, in acpi_table_install()
219 sizeof ext_hdr->oem_table_id); in acpi_table_install()
222 if (hdrs->has_oem_rev) { in acpi_table_install()
223 ext_hdr->oem_revision = cpu_to_le32(hdrs->oem_rev); in acpi_table_install()
226 if (hdrs->asl_compiler_id) { in acpi_table_install()
227 strncpy(ext_hdr->asl_compiler_id, hdrs->asl_compiler_id, in acpi_table_install()
228 sizeof ext_hdr->asl_compiler_id); in acpi_table_install()
231 if (hdrs->has_asl_compiler_rev) { in acpi_table_install()
232 ext_hdr->asl_compiler_revision = cpu_to_le32(hdrs->asl_compiler_rev); in acpi_table_install()
241 ext_hdr->checksum = acpi_checksum((const char unsigned *)ext_hdr + in acpi_table_install()
264 if (!hdrs->file == !hdrs->data) { in acpi_table_add()
265 error_setg(errp, "'-acpitable' requires one of 'data' or 'file'"); in acpi_table_add()
269 pathnames = g_strsplit(hdrs->file ?: hdrs->data, ":", 0); in acpi_table_add()
271 error_setg(errp, "'-acpitable' requires at least one pathname"); in acpi_table_add()
306 acpi_table_install(blob, bloblen, !!hdrs->file, hdrs, errp); in acpi_table_add()
316 struct acpi_table_header *hdr = current - sizeof(hdr->_length); in acpi_table_len()
317 return hdr->_length; in acpi_table_len()
324 return &hdr->sig; in acpi_table_hdr()
339 if (next - acpi_tables >= acpi_tables_len) { in acpi_table_next()
351 struct acpi_table_header *hdr = (void *)(u - sizeof(hdr->_length)); in acpi_get_slic_oem()
353 if (memcmp(hdr->sig, "SLIC", 4) == 0) { in acpi_get_slic_oem()
354 oem->id = g_strndup(hdr->oem_id, 6); in acpi_get_slic_oem()
355 oem->table_id = g_strndup(hdr->oem_table_id, 8); in acpi_get_slic_oem()
359 return -1; in acpi_get_slic_oem()
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()
390 /* Compare ns-clock, not PM timer ticks, because in acpi_pm1_evt_get_sts()
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()
407 ar->pm1.evt.sts &= ~val; in acpi_pm1_evt_write_sts()
412 ar->pm1.evt.en = val; in acpi_pm1_evt_write_en()
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()
429 ar->pm1.evt.sts = 0; in acpi_pm1_evt_reset()
430 ar->pm1.evt.en = 0; in acpi_pm1_evt_reset()
435 static uint64_t acpi_pm_evt_read(void *opaque, hwaddr addr, unsigned width) in acpi_pm_evt_read() argument
442 return ar->pm1.evt.en; in acpi_pm_evt_read()
449 unsigned width) in acpi_pm_evt_write() argument
455 ar->pm1.evt.update_sci(ar); in acpi_pm_evt_write()
459 ar->pm1.evt.update_sci(ar); in acpi_pm_evt_write()
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()
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()
506 ar->tmr.overflow_time = (d + 0x800000LL) & ~0x7fffffLL; in acpi_pm_tmr_calc_overflow_time()
520 ar->tmr.update_sci(ar); in acpi_pm_tmr_timer()
523 static uint64_t acpi_pm_tmr_read(void *opaque, hwaddr addr, unsigned width) in acpi_pm_tmr_read() argument
529 unsigned width) in acpi_pm_tmr_write() 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()
555 ar->tmr.overflow_time = 0; in acpi_pm_tmr_reset()
556 timer_del(ar->tmr.timer); in acpi_pm_tmr_reset()
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()
575 static uint64_t acpi_pm_cnt_read(void *opaque, hwaddr addr, unsigned width) in acpi_pm_cnt_read() argument
578 return ar->pm1.cnt.cnt >> addr * 8; in acpi_pm_cnt_read()
582 unsigned width) in acpi_pm_cnt_write() argument
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()
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()
632 * Register wake-up support in QMP query-current-machine API 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()
646 fw_cfg_add_file(fw_cfg, "etc/system-states", g_memdup(suspend, 6), 6); in acpi_pm1_cnt_init()
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()
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()
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()
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()
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()
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()
732 ar->gpe.sts[0] |= status; in acpi_send_gpe_event()
743 regs->pm1.evt.en & ACPI_BITMASK_PM1_COMMON_ENABLED) != 0) || in acpi_update_sci()
744 ((regs->gpe.sts[0] & regs->gpe.en[0]) != 0); in acpi_update_sci()
750 (regs->pm1.evt.en & ACPI_BITMASK_TIMER_ENABLE) && in acpi_update_sci()