diff options
author | randyf <none@none> | 2007-10-20 16:00:42 -0700 |
---|---|---|
committer | randyf <none@none> | 2007-10-20 16:00:42 -0700 |
commit | 2df1fe9ca32bb227b9158c67f5c00b54c20b10fd (patch) | |
tree | 358c576f885c00d42a760d9e35e5b66e77209fe2 /usr/src/uts/i86pc/io/psm/psm_common.c | |
parent | 10b3fbf593a6678eec9b50a01903ef4eb73111e4 (diff) | |
download | illumos-joyent-2df1fe9ca32bb227b9158c67f5c00b54c20b10fd.tar.gz |
PSARC/2005/469 X86 Energy Star compliance
PSARC/2006/632 PSMI extension for state save and restore
6330209 nge needs to support DDI_SUSPEND/DDI_RESUME
6381827 Suspend to RAM on x86
6393154 audio810 needs to support DDI_SUSPEND/DDI_RESUME
6397047 fd, fdc needs to support Suspend/Resume
6401974 cannot enter S3 with ohci PME enable set on Tyan 2865 with Sun or Tyan 2.01 BIOS
6422613 memscrubber doesn't re-acquire lock before CALLB_CPR_EXIT
6455736 ata/dadk/cmdk should support DDI_SUSPEND/DDI_RESUME
6511370 CPR on SPARC regression
6586018 TODOP Macros in i86pc/sys/machclock.h not in sun4u/sun4v equivilent (Sparc only)
6610124 It takes more than 3 minutes after printing "pci_pre_resume nv_sata:0"
6617143 powerd/pmconfig emits a different default message for an existing on or off action.
--HG--
rename : usr/src/cmd/power/power.conf => usr/src/cmd/power/power.conf.sparc
Diffstat (limited to 'usr/src/uts/i86pc/io/psm/psm_common.c')
-rw-r--r-- | usr/src/uts/i86pc/io/psm/psm_common.c | 38 |
1 files changed, 32 insertions, 6 deletions
diff --git a/usr/src/uts/i86pc/io/psm/psm_common.c b/usr/src/uts/i86pc/io/psm/psm_common.c index fd92327093..bfbcfcb1be 100644 --- a/usr/src/uts/i86pc/io/psm/psm_common.c +++ b/usr/src/uts/i86pc/io/psm/psm_common.c @@ -623,9 +623,9 @@ acpi_get_current_irq_resource(acpi_psm_lnk_t *acpipsmlnkp, int *pci_irqp, } intr_flagp->intr_el = psm_acpi_edgelevel( - rp->Data.Irq.Triggering); + rp->Data.Irq.Triggering); intr_flagp->intr_po = psm_acpi_po( - rp->Data.Irq.Polarity); + rp->Data.Irq.Polarity); irq = rp->Data.Irq.Interrupts[0]; status = ACPI_PSM_SUCCESS; } else if (rp->Type == ACPI_RESOURCE_TYPE_EXTENDED_IRQ) { @@ -644,9 +644,9 @@ acpi_get_current_irq_resource(acpi_psm_lnk_t *acpipsmlnkp, int *pci_irqp, } intr_flagp->intr_el = psm_acpi_edgelevel( - rp->Data.ExtendedIrq.Triggering); + rp->Data.ExtendedIrq.Triggering); intr_flagp->intr_po = psm_acpi_po( - rp->Data.ExtendedIrq.Polarity); + rp->Data.ExtendedIrq.Polarity); irq = rp->Data.ExtendedIrq.Interrupts[0]; status = ACPI_PSM_SUCCESS; } @@ -799,7 +799,7 @@ acpi_get_possible_irq_resources(acpi_psm_lnk_t *acpipsmlnkp, /* NEEDSWORK: move this into add_irqlist_entry someday */ irqlist = kmem_zalloc(irqlist_len * sizeof (*irqlist), - KM_SLEEP); + KM_SLEEP); for (i = 0; i < irqlist_len; i++) if (resp->Type == ACPI_RESOURCE_TYPE_IRQ) irqlist[i] = ((uint8_t *)tmplist)[i]; @@ -808,7 +808,7 @@ acpi_get_possible_irq_resources(acpi_psm_lnk_t *acpipsmlnkp, intr_flags.intr_el = psm_acpi_edgelevel(el); intr_flags.intr_po = psm_acpi_po(po); acpi_add_irqlist_entry(irqlistp, irqlist, irqlist_len, - &intr_flags); + &intr_flags); } AcpiOsFree(rsb.Pointer); @@ -925,6 +925,32 @@ acpi_get_irq_lnk_cache_ent(ACPI_HANDLE lnkobj, int *pci_irqp, return (ret); } +/* + * Walk the irq_cache_table and re-configure the link device to + * the saved state. + */ +void +acpi_restore_link_devices(void) +{ + irq_cache_t *irqcachep; + acpi_psm_lnk_t psmlnk; + int i, status; + + /* XXX: may not need to hold this mutex */ + mutex_enter(&acpi_irq_cache_mutex); + for (irqcachep = irq_cache_table, i = 0; i < irq_cache_valid; + irqcachep++, i++) { + /* only field used from psmlnk in set_irq is lnkobj */ + psmlnk.lnkobj = irqcachep->lnkobj; + status = acpi_set_irq_resource(&psmlnk, irqcachep->irq); + /* warn if set_irq failed; soldier on */ + if (status != ACPI_PSM_SUCCESS) + cmn_err(CE_WARN, "restore_link failed for IRQ 0x%x\n", + irqcachep->irq); + } + mutex_exit(&acpi_irq_cache_mutex); +} + int acpi_poweroff(void) { |