Implement X suspend/resume notification. Currently, the X server on FreeBSD is not
notified of a suspend. We explicitly switch to a VTY on syscons before resume to get the
server to save and then restore all the registers. This works for many systems but not if
the display is left in less initialized at resume than the VTY switch code can handle.
There is an interface (in the X server bsd_apm.c) for doing ioctls to find out about the
suspend. First, check if this file is built on FreeBSD as it appears to only be built on
NetBSD. Then implement the ioctls in both apm and acpi (on the apm compat device). Here is a patch to help the X
file compile. For acpi, we do not want a user process dying to hold up the suspend
process so implement the notification with a timeout. That is, if the kernel generates a
APM_STANDBY_REQ notification and it doesn't receive a APM_IOC_STANDBY within say 5
seconds, continue the suspend process. This is needed for standby when X is not running,
for instance, or when an emergency suspend is generated by a battery going critical. |
|
|
Not done |
|
Examine the two video resume hacks (int 0x10, lcall 0xc000). Linux has begun to test
calling the "lcall" VESA reset after PCI devices (including the video card) have been
fully resumed, including power state set to PS0. This works for many Radeon cards but
fails for others. We could implement this in vm86 calls from a proper video driver resume
method. Also, implement the int 10h resume hack that Linux has since we do not have that
yet. It is unclear how effective it is but some systems do require it. |
|
|
Not done |
|
Check our DWORD access to EC regions, including endianness. Currently, we treat DWORD
access as little-endian, which makes sense on PCs. It's really not correct to do use
access other than BYTE for EC space but some ASL uses DWORD. Also, we should test what
happens for AnyAccess reads/writes to EC space since some ASL does this too. |
|
|
Not done |
|
ACPI-CA should really enable GPEs before calling \_WAK. Currently it does the
opposite. This does not match the ACPI spec where \_WAK should be called after the system
is up and running (\_BFS is what should be called as soon as possible after waking.) |
|
|
Not done |
|
Potential ASL bug: We may need to work around some systems having the S3 object
listed under the LPC bus device (PNP0A03) instead of root (\). This is ACPI-CA's
responsibility. |
|
|
Not done |
|
For systems that fail to power off, try using the suspend code (acpi_SetSleepState)
instead. |
|
|
Not done |
|
See if we can enable EC access early even if an ECDT is not present. The _INI method
for some ECs accesses the EC region even though _REG has not been called since the region
is not initialized yet. It is likely that Windows hard-codes the EC resources and enables
the region before initializing the device even though this is not allowed by the
spec. |
|
|
Not done |
|
Implement reset register functionality for rebooting systems that lack a keyboard
controller (see ACPI v2 FADT->ResetRegister). |
|
|
Not done |
|
Be sure not to try to disable ACPI on systems that do not have SMI_CMD or
ACPI_ENABLE/DISABLE values in the FADT. The ia64 machines specify ACPI-only (no legacy
mode) so they have 0 for these values and we should not enable/disable ACPI on them.
Doing so gives a "failed to switch modes" warning but no real problems, apparently. |
|
|
Not done |
|
Check our implementation of AcpiOsDerivePciId(). It is probably not quite right.
Compare against Linux. |
|
|
Not done |
|
Run instructions on cpu0 for suspend/resume. We currently do this for shutdown in
kern_shutdown.c:boot(). This will also be required for SMP cpufreq drivers that set the
frequency via a CPU-specific MSR. |
|
|
Not done |
|
Implement passive cooling in ACPI thermal. It should use the cpufreq interface to
cool the processor, based on the various _PSV settings. Also, we need to implement
variable polling intervals for thermal zones based on both the passive settings and
polling explicitly specified in the ASL. |
|
|
Not done |
|
Traverse local reference (scope) types in namespace when probing devices. |
|
|
Not done |
|
IBM Thinkpad extras driver -- Driver for Thinkpad hotkeys. |
Takanori Watanabe |
|
Done |
|
Call _S0D on resume (power up?) |
|
|
Done |
|
Implement support for _PRS/_SRS and dependent functions. This will allow serial port
configuration to occur. |
|
|
Not done |
|
Fix stray irq 9 on reboot -- AcpiTerminate -> AcpiEvTerminate unhooks the SCI and
then we get a stray irq. Debug why. Also, disable/ re-enable acpi gives "SCI already
attached". Check flags for AcpiDisable vs. AcpiTerminate. This looks uncommon and does
not cause any problems so it will be ignored for now. |
Nate Lawson |
|
In progress |
|
Add EC burst mode -- Code was written before to add burst mode to the EC.
Unfortunately, it had to be disabled since it did not appear to work on all systems.
Perhaps on some systems do not function correctly without burst mode, so it will be added
back with some logic to fallback if it fails. |
|
|
Not done |
|
Add smart battery support -- Smart batteries use the SMBus to communicate data
instead of the embedded controller for control-method batteries. Newer ACER laptops have
this and it will be needed for battery status on them. This is rather difficult since it
involves interfacing with the SMBus drivers (likely need some kobj methods for
this.) |
|
|
Not done |
|
Intel firmware seems to describe the PCI root bridge where chipset configuration
space lives with _STA==0x8. The spec says this means "functional, but not present". The
current code ignores things that are "not present" ( msg). It is
suggested that this should be handled by not attaching a driver to the device (i.e.
bridge) but probe its children. Present on Big Sur and Bull systems. |
|
|
Not done |
|
Re-work device wake setup to not be recursive. The acpi_wake_sysctl_walk() syscall
has to call itself to handle child devices on other busses (PCI). This should probably be
changed to be a DEVMETHOD. |
|
|
Not done |
|
device_power -- Add a "power" argument to devctl(8) that allows a device to be set
into various low power or off states. |
|
|
Not done |
|
device_eject -- Add a devctl(8) program that has an "eject" argument. Allow users to
eject various object names ("/dev/cdrom", "/mnt/flashdrive", "wi0", "pci0:2:0"). Call the
appropriate _EJD and _EJx methods if appropriate. |
Warner Losh, John Baldwin, and Takanori Watanabe |
|
In progress |
|
suspend to disk -- Implement a suspend/resume from disk mechanism. Possibly use the
dump functions to dump pages to disk, then use ACPI to put the system in S4 or power-off.
Resume would require changes to the loader to load the memory image directly and then
begin executing again. |
|
|
Not done |
|
HP/Toshiba Satellite driver -- Enabling the extra one-touch/multimedia keys, console
blanking, battery and temperature reporting, etc. Get an idea of what is needed from the
Linux OMKE project . |
|
|
Not done |
|
ASL capture bootable CD-R -- Build a set of scripts to generate a bootable CD-R. It
should have a GENERIC kernel and acpidump/iasl as well as all support libraries. Replace
init with a script such that booting the CD generates an acpidump -t -d > machine.asl
and dmesg > machine.dmesg in an MFS partition. Then burn this info to a second track
on the CD-R. This will make an easy way to take a batch of CDRWs to the local computer
store, place them in the CDRW drive, boot FreeBSD and get the ASL. |
|
|
Not done |
|
ASL Explorer -- Graphical utility for examining the output of acpidump(8). Contact
Nate Lawson for info about the design if you are interested in implementing this. |
|
|
Not done |
|
Document acpi kernel interfaces -- Document the interfaces for drivers found in
acpivar.h. |
|
|
Not done |
|
KTR support for ACPI debug messages -- Use the KTR logging facility instead of printf
for ACPI debugging messages. This would allow more verbose messages and fast
dumping. |
|
|
Not done |
|
Add support for the real-time clock (RTC) to use to wake or power-on systems at a
certain time of day. |
|
|
Not done |
|
Quiesce USB when no device is attached (see Linux UHCI) -- this would help such
systems use C3 more, saving power with USB loaded. While at it, fix uhci
suspend/resume. |
|
|
Not done |
|