<!DOCTYPE HTML PUBLIC "-//FreeBSD//DTD HTML 4.01 Transitional-Based Extension//EN" [
<!ENTITY base CDATA "../..">
<!ENTITY date "$FreeBSD$">
<!ENTITY title "FreeBSD ACPI project">
<!ENTITY email 'marks'>
<!ENTITY acpi-mail 'freebsd-acpi@FreeBSD.org'>
<!ENTITY % navinclude.developers "INCLUDE">

<!-- 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 PUBLIC "-//FreeBSD//ENTITIES FreeBSD Developers Entities//EN"> %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 (superseding
    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&amp;sektion=4&amp;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> Save/Restore PCI capabilities lists and MSI config space </td>
          <td> &a.njl; </td>
	  <td> August 3, 2006 </td>
	  <td> &status.wip; </td>
	  <td> &nbsp; </td>
        </tr>

	<tr>
	  <td> Investigate disabling the LAPIC timer when using ACPI C2-3
	    states.  Otherwise, the system hangs and no timer interrupts
	    occur while idle.</td>
	  <td> &nbsp; </td>
	  <td> August 3, 2006 </td>
	  <td> &status.new; </td>
	  <td> &nbsp; </td>
	</tr>
      </tbody>

      <tbody>
	<tr>
	  <th scope="rowgroup" colspan="0"> <em>acpi_cpu &mdash; 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> &nbsp; </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 &mdash;  implement eject and dynamic
	    reprobing of acpi namespace </td>
          <td> &a.njl; </td>
	  <td> December 4, 2004 </td>
	  <td> &status.untested; </td>
	  <td> &nbsp; </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> &nbsp; </td>
	  <td> &nbsp; </td>
	  <td> &status.new; </td>
	  <td> &nbsp; </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> &nbsp; </td>
	  <td> &nbsp; </td>
	  <td> &status.new; </td>
	  <td> &nbsp; </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.  Investigate
	    integrate the techniques used by the <a
	    href="http://www.freebsd.org/cgi/url.cgi?ports/sysutils/radeontool/pkg-descr">Radeontool
	    port</a> in video resume.</td>
	  <td> &nbsp; </td>
	  <td> &nbsp; </td>
	  <td> &status.new; </td>
	  <td> &nbsp; </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> &nbsp; </td>
	  <td> &nbsp; </td>
	  <td> &status.new; </td>
	  <td> &nbsp; </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> &nbsp; </td>
	  <td> &nbsp; </td>
	  <td> &status.new; </td>
	  <td> &nbsp; </td>
	</tr>

	<tr>
	  <td> For systems that fail to power off, try using the suspend code
	    (acpi_SetSleepState) instead. </td>
	  <td> &nbsp; </td>
	  <td> &nbsp; </td>
	  <td> &status.new; </td>
	  <td> &nbsp; </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> &nbsp; </td>
	  <td> &nbsp; </td>
	  <td> &status.new; </td>
	  <td> &nbsp; </td>
	</tr>

	<tr>
	  <td> Implement reset register functionality for rebooting systems
	    that lack a keyboard controller (see ACPI v2 FADT->ResetRegister). </td>
	  <td> &nbsp; </td>
	  <td> &nbsp; </td>
	  <td> &status.new; </td>
	  <td> &nbsp; </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> &nbsp; </td>
	  <td> &nbsp; </td>
	  <td> &status.new; </td>
	  <td> &nbsp; </td>
	</tr>

	<tr>
	  <td> Check our implementation of AcpiOsDerivePciId().
	    It is probably not quite right.  Compare against Linux. </td>
	  <td> &nbsp; </td>
	  <td> &nbsp; </td>
	  <td> &status.new; </td>
	  <td> &nbsp; </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> &nbsp; </td>
	  <td> &nbsp; </td>
	  <td> &status.new; </td>
	  <td> &nbsp; </td>
	</tr>

	<tr>
	  <td> Traverse local reference (scope) types in namespace when probing
	    devices. </td>
	  <td> &nbsp; </td>
	  <td> &nbsp; </td>
	  <td> &status.new; </td>
	  <td> &nbsp; </td>
	</tr>

	<tr>
	  <td> Implement support for _PRS/_SRS and dependent functions.
	    This will allow serial port configuration to occur. </td>
	  <td> &nbsp; </td>
	  <td> &nbsp; </td>
	  <td> &status.new; </td>
	  <td> &nbsp; </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> &nbsp; </td>
	  <td> &nbsp; </td>
	  <td> &status.new; </td>
	  <td> &nbsp; </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> &nbsp; </td>
	  <td> &nbsp; </td>
	  <td> &status.new; </td>
	  <td> &nbsp; </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> &nbsp; </td>
	  <td> &nbsp; </td>
	  <td> &status.new; </td>
	  <td> &nbsp; </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> &nbsp; </td>
	  <td> &nbsp; </td>
	  <td> &status.new; </td>
	  <td> &nbsp; </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> &nbsp; </td>
	  <td> &status.wip; </td>
	  <td> &nbsp; </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> &nbsp; </td>
	  <td> &nbsp; </td>
	  <td> &status.new; </td>
	  <td> &nbsp; </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> &nbsp; </td>
	  <td> &nbsp; </td>
	  <td> &status.new; </td>
	  <td> &nbsp; </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 &gt; machine.asl and dmesg &gt; 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> &nbsp; </td>
	  <td> &nbsp; </td>
	  <td> &status.new; </td>
	  <td> &nbsp; </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> &nbsp; </td>
	  <td> &nbsp; </td>
	  <td> &status.new; </td>
	  <td> &nbsp; </td>
	</tr>

	<tr>
	  <td> Document acpi kernel interfaces -- Document the interfaces
	    for drivers found in acpivar.h. </td>
	  <td> &nbsp; </td>
	  <td> &nbsp; </td>
	  <td> &status.new; </td>
	  <td> &nbsp; </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> &nbsp; </td>
	  <td> &nbsp; </td>
	  <td> &status.new; </td>
	  <td> &nbsp; </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> &nbsp; </td>
	  <td> &nbsp; </td>
	  <td> &status.new; </td>
	  <td> &nbsp; </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> &nbsp; </td>
	  <td> &nbsp; </td>
	  <td> &status.new; </td>
	  <td> &nbsp; </td>
	</tr>

      </tbody>
    </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>
