Submitted by: Emily Boyd (emilyboyd at emilyboyd dot com) Sponsored by: Google Summer of Code 2005
640 lines
19 KiB
Text
640 lines
19 KiB
Text
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" [
|
|
<!ENTITY base CDATA "../..">
|
|
<!ENTITY date "$FreeBSD: www/en/projects/acpi/index.sgml,v 1.9 2005/05/07 14:01:37 brueffer Exp $">
|
|
<!ENTITY title "FreeBSD ACPI project">
|
|
<!ENTITY email 'marks'>
|
|
<!ENTITY acpi-mail 'freebsd-acpi@FreeBSD.org'>
|
|
<!ENTITY % navincludes SYSTEM "../../includes.navdevelopers.sgml"> %navincludes;
|
|
<!ENTITY % includes SYSTEM "../../includes.sgml"> %includes;
|
|
|
|
<!-- Status levels -->
|
|
<!ENTITY status.na "<font color=green>N/A</font>">
|
|
<!ENTITY status.done "<font color=green>Done</font>">
|
|
<!ENTITY status.wip "<font color=blue>In progress</font>">
|
|
<!ENTITY status.untested "<font color=orange>Needs testing</font>">
|
|
<!ENTITY status.new "<font color=red>Not done</font>">
|
|
<!ENTITY status.unknown "<font color=red>Unknown</font>">
|
|
|
|
<!ENTITY % developers SYSTEM "../../developers.sgml"> %developers;
|
|
|
|
]>
|
|
|
|
<html>
|
|
&header;
|
|
|
|
<h2>Contents</h2>
|
|
<ul>
|
|
<li><a href="#description">Description</a></li>
|
|
<li><a href="#todo-list">TODO List</a></li>
|
|
<li><a href="#platform-status">Platform Support Status</a></li>
|
|
<li><a href="#references">References</a></li>
|
|
</ul>
|
|
|
|
<a name="description"></a>
|
|
<h2>Description</h2>
|
|
|
|
<p>The acpi driver provides support for the Intel/Microsoft/Compaq/Toshiba
|
|
ACPI standard. This support includes platform hardware discovery (super-
|
|
seding the PnP and PCI BIOS), as well as power management (superseding
|
|
APM) and other features. ACPI core support is provided by the ACPI CA
|
|
reference implementation from Intel.</p>
|
|
|
|
<p>Information on using and debugging ACPI can be found in the
|
|
<a href="/doc/en_US.ISO8859-1/books/handbook/acpi-debug.html">
|
|
handbook entry</a> and
|
|
<a href="/cgi/man.cgi?query=acpi&sektion=4&format=html">man page</a>.</p>
|
|
|
|
<p>If you are looking for the list of completed projects not located
|
|
on this page, it can be found
|
|
<a href="completed.html">here</a>.</p>
|
|
|
|
|
|
<a name="todo-list"></a>
|
|
<h2>TODO List</h2>
|
|
|
|
<a name="high-priority"></a>
|
|
<h3>High Priority Tasks</h3>
|
|
|
|
<table class="tblbasic">
|
|
<thead>
|
|
<tr>
|
|
<th> Task </th>
|
|
<th> Responsible </th>
|
|
<th> Last updated </th>
|
|
<th> Priority </th>
|
|
<th> Notes </th>
|
|
</tr>
|
|
</thead>
|
|
|
|
<tbody>
|
|
<tr>
|
|
<td> Giant-free locking </td>
|
|
<td> &a.njl; </td>
|
|
<td> December 4, 2004 </td> <!-- XXX not right -->
|
|
<td> &status.done; </td>
|
|
<td> Done. Some complaints of boot-time battery read hang
|
|
remain. </td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td> newbus attachments for cpu — get cpu devices under
|
|
newbus so drivers like cpufreq can probe/attach </td>
|
|
<td> &a.njl; </td>
|
|
<td> December 4, 2004 </td>
|
|
<td> &status.done; </td>
|
|
<td> </td>
|
|
</tr>
|
|
</tbody>
|
|
|
|
<tbody>
|
|
<tr>
|
|
<th scope="rowgroup" colspan="0"> <em>cpufreq — Common CPU
|
|
frequency/voltage driver</em> </th>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td> Write initial drivers: ICH SpeedStep, ACPI performance,
|
|
ACPI throttling, Enhanced SpeedStep, P4 TCC </td>
|
|
<td> &a.njl; </td>
|
|
<td> February 20, 2005 </td>
|
|
<td> &status.done; </td>
|
|
<td> </td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td> Add bus methods/ivars for child attachments to both acpi
|
|
and legacy cpu devices </td>
|
|
<td> &a.njl; </td>
|
|
<td> February 15, 2005 </td>
|
|
<td> &status.done; </td>
|
|
<td> </td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td> Design sysctl interface </td>
|
|
<td> &a.njl; </td>
|
|
<td> December 4, 2004 </td>
|
|
<td> &status.done; </td>
|
|
<td> </td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td> Design notify interface for Px changes </td>
|
|
<td> &a.njl; </td>
|
|
<td> December 4, 2004 </td>
|
|
<td> &status.done; </td>
|
|
<td> We may need an interface to notify external users of changes
|
|
to the bus and CPU frequency separately.</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td> Update power_profile to use cpufreq </td>
|
|
<td> &a.njl; </td>
|
|
<td> February 15, 2005 </td>
|
|
<td> &status.done; </td>
|
|
<td> </td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td> Import powerd </td>
|
|
<td> &a.njl; </td>
|
|
<td> February 20, 2005 </td>
|
|
<td> &status.done; </td>
|
|
<td> Mostly based on Colin Percival's estctrl. </td>
|
|
</tr>
|
|
</tbody>
|
|
|
|
<tbody>
|
|
<tr>
|
|
<th scope="rowgroup" colspan="0"> <em>acpi_cpu — Finish
|
|
work on CPU driver</em> </th>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td> _CST re-evaluation </td>
|
|
<td> &a.njl; </td>
|
|
<td> December 4, 2004 </td>
|
|
<td> &status.new; </td>
|
|
<td> Needs testing/debugging </td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td> Fix shared user of a P_BLK (refcount) </td>
|
|
<td> &a.njl; </td>
|
|
<td> December 4, 2004 </td>
|
|
<td> &status.new; </td>
|
|
<td> </td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td> Disable acpi_cpu taking over idling if only
|
|
C1 available </td>
|
|
<td> &a.njl; </td>
|
|
<td> December 4, 2004 </td>
|
|
<td> &status.new; </td>
|
|
<td> I still want to keep acpi_cpu in the loop on SMP systems
|
|
so we should leave this as-is for now. </td>
|
|
</tr>
|
|
</tbody>
|
|
|
|
<tbody>
|
|
<tr>
|
|
<td> eject methods — implement eject and dynamic
|
|
reprobing of acpi namespace </td>
|
|
<td> &a.njl; </td>
|
|
<td> December 4, 2004 </td>
|
|
<td> &status.untested; </td>
|
|
<td> </td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
|
|
<a name="medium-priority"></a>
|
|
<h3>Medium Priority Tasks</h3>
|
|
|
|
<table class="tblbasic">
|
|
<tbody>
|
|
<tr>
|
|
<td> Hotkey/backlight/sound generic driver -- Add a driver
|
|
that generalizes the various device-specific ways of
|
|
adjusting backlight, sound volume, hotkey support, etc.
|
|
It should provide generic sysctls for these and attach to
|
|
the hw-specific drivers (acpi_video, acpi_asus, acpi_toshiba,
|
|
etc.) </td>
|
|
<td> </td>
|
|
<td> </td>
|
|
<td> &status.wip; </td>
|
|
<td> </td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td> Fujitsu driver -- Driver for Fujitsu laptop extras. Just needs
|
|
to be cleaned up (use acpi_UserNotify instead of the signal
|
|
stuff) and imported. </td>
|
|
<td> &a.marks; </td>
|
|
<td> </td>
|
|
<td> &status.done; </td>
|
|
<td> See <a href="http://www.stalker.org/~sean/freebsd-p2040/FujiApp/index.html">
|
|
Seans driver</a>. </td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<a name="low-priority"></a>
|
|
<h3>Low Priority Tasks</h3>
|
|
|
|
<table class="tblbasic">
|
|
<tbody>
|
|
<tr>
|
|
<td> 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).
|
|
<a href="http://www.root.org/~nate/freebsd/bsd_apm.diff">Here is a
|
|
patch</a> 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.</td>
|
|
<td> </td>
|
|
<td> </td>
|
|
<td> &status.new; </td>
|
|
<td> </td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td> 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. </td>
|
|
<td> </td>
|
|
<td> </td>
|
|
<td> &status.new; </td>
|
|
<td> </td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td> 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. </td>
|
|
<td> </td>
|
|
<td> </td>
|
|
<td> &status.new; </td>
|
|
<td> </td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td> 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.) </td>
|
|
<td> </td>
|
|
<td> </td>
|
|
<td> &status.new; </td>
|
|
<td> </td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td> 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. </td>
|
|
<td> </td>
|
|
<td> </td>
|
|
<td> &status.new; </td>
|
|
<td> </td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td> For systems that fail to power off, try using the suspend code
|
|
(acpi_SetSleepState) instead. </td>
|
|
<td> </td>
|
|
<td> </td>
|
|
<td> &status.new; </td>
|
|
<td> </td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td> 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. </td>
|
|
<td> </td>
|
|
<td> </td>
|
|
<td> &status.new; </td>
|
|
<td> </td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td> Implement reset register functionality for rebooting systems
|
|
that lack a keyboard controller (see ACPI v2 FADT->ResetRegister). </td>
|
|
<td> </td>
|
|
<td> </td>
|
|
<td> &status.new; </td>
|
|
<td> </td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td> 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. </td>
|
|
<td> </td>
|
|
<td> </td>
|
|
<td> &status.new; </td>
|
|
<td> </td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td> Check our implementation of AcpiOsDerivePciId().
|
|
It is probably not quite right. Compare against Linux. </td>
|
|
<td> </td>
|
|
<td> </td>
|
|
<td> &status.new; </td>
|
|
<td> </td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td> 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. </td>
|
|
<td> </td>
|
|
<td> </td>
|
|
<td> &status.new; </td>
|
|
<td> </td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td> 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. </td>
|
|
<td> </td>
|
|
<td> </td>
|
|
<td> &status.new; </td>
|
|
<td> </td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td> Traverse local reference (scope) types in namespace when probing
|
|
devices. </td>
|
|
<td> </td>
|
|
<td> </td>
|
|
<td> &status.new; </td>
|
|
<td> </td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td> IBM Thinkpad extras driver -- Driver for Thinkpad hotkeys. </td>
|
|
<td> &a.takawata; </td>
|
|
<td> </td>
|
|
<td> &status.done; </td>
|
|
<td> </td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td> Call _S0D on resume (power up?) </td>
|
|
<td> </td>
|
|
<td> </td>
|
|
<td> &status.done; </td>
|
|
<td> </td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td> Implement support for _PRS/_SRS and dependent functions.
|
|
This will allow serial port configuration to occur. </td>
|
|
<td> </td>
|
|
<td> </td>
|
|
<td> &status.new; </td>
|
|
<td> </td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td> 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. </td>
|
|
<td> &a.njl; </td>
|
|
<td> </td>
|
|
<td> &status.wip; </td>
|
|
<td> </td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td> 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. </td>
|
|
<td> </td>
|
|
<td> </td>
|
|
<td> &status.new; </td>
|
|
<td> </td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td> 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.) </td>
|
|
<td> </td>
|
|
<td> </td>
|
|
<td> &status.new; </td>
|
|
<td> </td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td> 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"
|
|
(<a href="https://sourceforge.net/mailarchive/message.php?msg_id=6923358">
|
|
msg</a>). 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. </td>
|
|
<td> </td>
|
|
<td> </td>
|
|
<td> &status.new; </td>
|
|
<td> </td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td>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. </td>
|
|
<td> </td>
|
|
<td> </td>
|
|
<td> &status.new; </td>
|
|
<td> </td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td> device_power -- Add a "power" argument to devctl(8)
|
|
that allows a device to be set into various low power or
|
|
off states. </td>
|
|
<td> </td>
|
|
<td> </td>
|
|
<td> &status.new; </td>
|
|
<td> </td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td> 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.</td>
|
|
<td> &a.imp;, &a.jhb;, and &a.takawata; </td>
|
|
<td> </td>
|
|
<td> &status.wip; </td>
|
|
<td> </td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td> 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. </td>
|
|
<td> </td>
|
|
<td> </td>
|
|
<td> &status.new; </td>
|
|
<td> </td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td> 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 <a href="http://sourceforge.net/projects/omke/">Linux OMKE project
|
|
</a>. </td>
|
|
<td> </td>
|
|
<td> </td>
|
|
<td> &status.new; </td>
|
|
<td> </td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td> 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. </td>
|
|
<td> </td>
|
|
<td> </td>
|
|
<td> &status.new; </td>
|
|
<td> </td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td> ASL Explorer -- Graphical utility for examining the output
|
|
of acpidump(8). Contact &a.njl; for info about the design if you
|
|
are interested in implementing this. </td>
|
|
<td> </td>
|
|
<td> </td>
|
|
<td> &status.new; </td>
|
|
<td> </td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td> Document acpi kernel interfaces -- Document the interfaces
|
|
for drivers found in acpivar.h. </td>
|
|
<td> </td>
|
|
<td> </td>
|
|
<td> &status.new; </td>
|
|
<td> </td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td> 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. </td>
|
|
<td> </td>
|
|
<td> </td>
|
|
<td> &status.new; </td>
|
|
<td> </td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td> Add support for the real-time clock (RTC) to use to wake
|
|
or power-on systems at a certain time of day. </td>
|
|
<td> </td>
|
|
<td> </td>
|
|
<td> &status.new; </td>
|
|
<td> </td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td> 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. </td>
|
|
<td> </td>
|
|
<td> </td>
|
|
<td> &status.new; </td>
|
|
<td> </td>
|
|
</tr>
|
|
|
|
</tbody>
|
|
</table>
|
|
|
|
<a name="platform-status"></a>
|
|
<h2>Platform Support Status</h2>
|
|
|
|
<table class="tblbasic">
|
|
<tr>
|
|
<th> Task </th>
|
|
<th> Responsible </th>
|
|
<th> Last updated </th>
|
|
<th> Status </th>
|
|
<th> Details </th>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td> amd64 </td>
|
|
<td> &acpi-mail; </td>
|
|
<td> April 14, 2004 </td>
|
|
<td> &status.wip; </td>
|
|
<td> </td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td> i386 </td>
|
|
<td> &acpi-mail; </td>
|
|
<td> April 14, 2004 </td>
|
|
<td> &status.wip; </td>
|
|
<td> </td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td> ia64 </td>
|
|
<td> &acpi-mail; </td>
|
|
<td> April 14, 2004 </td>
|
|
<td> &status.wip; </td>
|
|
<td> </td>
|
|
</tr>
|
|
|
|
</table>
|
|
|
|
<a name="references"></a>
|
|
<h2>References</h2>
|
|
|
|
<ul>
|
|
<li><a href="http://acpi.info/spec.htm">Advanced
|
|
Configuration and Power Interface Specification</a></li>
|
|
</ul>
|
|
|
|
&footer;
|
|
</body>
|
|
</html>
|