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

]>

<html>
  &header;


    <h2>Completed Project List</h2>

    <table class="tblbasic">
      <tr>
	<td>Add methods to get/set ints
	  acpi_EvaluateInteger only gets an int.  Update api to get/set
	  so that every consumer does not end up defining their own.
	<td>&a.marks;</td>
      </tr>

      <tr>
        <td>Fix getenv_string.  Does not seem to work in
	  sys/dev/acpica/Osd/OsdTable.c.  Turned out the name
	  should not end in "_name".</td>
	<td>&a.marks; and &a.grehan;</td>
      </tr>

      <tr>
	<td>acpi_video manpage.  See appendix B of the ACPI 2.0
	  spec for info on what this driver does as well as look
	  at the sysctls it exports.</td>
	<td>&a.marks;</td>
      </tr>

      <tr>
	<td>fd0 not working on Intel boards.  The floppy device did not
	  work due to the _CRS object on some systems splitting the IO
	  port into three 2 port resources (6 ports total).  Fix committed
	  to sys/isa/fd.c to work with this type of resource
	  specification.</td>
	<td>&a.njl; and &a.jhb;</td>
      </tr>

      <tr>
	<td>Some BIOSs use 0x3f2-0x3f5 as the port range
	  -- the real range is 0x3f0-0x3f5, 0x3f7.  Workaround
	  committed.</td>
	<td>&a.imp;</td>
      </tr>

      <tr>
	<td>ACPI Debugging Handbook Page --
	  Introduction to ACPI for new users as well as how to assist
	  us in fixing problems as they arise.</td>
	<td>&a.njl; and &a.trhodes;</td>
      </tr>

      <tr>
	<td>acpi_video driver (njl) -- Imported.</td>
	<td>&a.njl; and Taku YAMAMOTO (driver author)</td>
      </tr>

      <tr>
	<td>BIOS blacklist -- implement a mechanism and specific
	  quirks to disable features or ACPI entirely on known
	  broken systems.  If a custom DSDT is loaded, do not
	  check it against the blacklist (since a user may fix
	  the DSDT without changing the vendor/revision fields.)  Add
	  blacklist option for disabling acpi on certain
	  systems.</td>
	<td>&a.njl</td>
      </tr>

      <tr>
	<td>acpi_toshiba man page -- Driver submitted by Hiroyuki Aizu
	  and committed.  All it needs is someone to try it out and
	  document the sysctls.</td>
	<td>&a.philip;</td>
      </tr>

      <tr>
	<td>Invalid PBLK length workaround -- Accept a PBLK of length 5
	  (spec says 6).  Only enable C2 for this though.  Some people
	  may be using 7 to indicate another C3 state but we do not
	  support the extra state.</td>
	<td>&a.njl;</td>
      </tr>

      <tr>
	<td>Check EcSpacehandler to make sure it is correct for
	  multi-byte access.  Found off-by-one in that the last
	  address (0xff) could never be written or read.</td>
	<td>&nbsp;</td>
      </tr>

      <tr>
	<td>Pick a default MS OS to claim -- Too much ASL depends on
	  a MS OS string so we should masquerade as the most accurate
	  one.  Picked Win2k&trade; ("Microsoft Windows NT&trade;"),
	  then reverted once _OSI support was available.  ACPI-CA still
	  has a default of "Microsoft Windows NT&trade;".</td>
	<td>&a.njl;</td>
      </tr>

      <tr>
	<td>Handle DPF resource types in acpi_pcib.c -- Some _PRS values
	  are bracketed with start/end dependent function resource
	  descriptors.  Parse/skip them to fix PCI IRQ routing.</td>
	<td>&a.njl;</td>
      </tr>

      <tr>
	<td>acpi_toshiba updates -- Implement support for DSSX which
	  appears to be the only way to do display switching (other
	  than acpi_video).</td>
	<td>&a.njl;</td>
      </tr>

      <tr>
	<td>ASUS driver -- Driver for ASUS ACPI extras (hotkeys).
	  Similar to the acpi4asus.sf.net Linux project.</td>
	<td>&a.philip;</td>
      </tr>

      <tr>
	<td>Fix sysctls for debug layer/level -- setting from usermode
	  via a sysctl did not work.</td>
	<td>&a.njl;</td>
      </tr>

      <tr>
	<td>Make lid and sleep button sysctls default to
	  min(supported_states) -- lid switch now defaults to
	  NONE, sleep button to minimum sleep state available.</td>
	<td>&a.njl;</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>
      </tr>

      <tr>
	<td>Make CPU cx_lowest sysctl more readable -- Use C[1-9]
	  instead of the index value.</td>
	<td>&a.njl;</td>
      </tr>

      <tr>
	<td>Update EC GLK check -- Use the handle from the table to
	  read _GLK instead of always defaulting to using the global
	  lock.</td>
	<td>&a.njl;</td>
      </tr>

      <tr>
	<td>Merge ECDT/EC probe</td>
	<td>&a.njl;</td>
      </tr>

      <tr>
	<td>_INI methods -- run for all devices, not just Device
	  objects.  ACPI-CA now calls _INI for Devices,
	  ThermalZones and Processors.</td>
	<td>&nbsp;</td>
      </tr>

      <tr>
	<td>Fix acpidump failing on several systems -- acpidump(8) fails
	  on some systems.  I suspect this may be in how we search low
	  memory for the RSDP.  Changed to only search EBDA (1 KB
	  pointed to by 16 bit pointer at 0x40E) and high memory
	  (0xE0000 - 0xFFFFF) according to the spec
	  (section 5.2.2).</td>
	<td>&a.njl;</td>
      </tr>

      <tr>
	<td>Fix apm compat interface -- Hacked around this in the
	  userland utility by marking values &gt;= 255 as
	  "unknown".</td>
	<td>&a.njl;</td>
      </tr>

      <tr>
	<td>Update GPE code to handle general device wake -- Also,
	  disable GPEs that are not valid when entering a new sleep
	  state.  Without this, GPEs for the lid left enabled on a
	  Thinkpad&trade; X22 restart the system after power off.
	  Add userland interface for enabling device wake (done as
	  per-device sysctls).</td>
	<td>&a.njl;</td>
      </tr>

      <tr>
	<td>Fix shutdown routines to not poke all the events (causes
	  auto power on for some people).  Workaround is to set
	  hw.acpi.disable_on_poweroff=0.  Now that GPEs are properly
	  disabled based on _PRW during suspend and poweroff, we can
	  hopefully remove the call to acpi_Disable() in the poweroff
	  path.  We now handle the reboot case also by hooking
	  device_shutdown().</td>
	<td>&a.njl;</td>
      </tr>

      <tr>
	<td>Cleanup acpidump/boot EBDA lengths.</td>
	<td>&a.njl;</td>
      </tr>

      <tr>
	<td>Fix acpi_cpu busy refcount -- We no longer use a refcount
	  but instead avoid doing any housekeeping after re-enabling
	  interrupts at the end of acpi_cpu_idle().  Otherwise, the
	  context switch after unmasking ints could disrupt device
	  state.</td>
	<td>&a.njl;</td>
      </tr>

      <tr>
	<td>Do not print an error message for _PR0 method -- If not
	  present, do not print an error in switch_consumer.</td>
	<td>&a.njl;</td>
      </tr>

      <tr>
	<td>acpi sysresource probing  -- Probe/attach acpi resources
	  in the acpi bus and then dole it out to children as necessary.
	  Requires rman(9).  Includes more sophisticated handling of
	  device ordering in scan.</td>
	<td>&a.njl;</td>
      </tr>

      <tr>
	<td>Update ACPI blacklist -- Read entries from various OS's
	  and add them to our blacklist table.</td>
	<td>&a.njl;, &a.marks;</td>
      </tr>

      <tr>
	<td>Fix general wake code -- remove use of device_t flags as
	  they may collide with the driver.  Use an acpi ivar
	  instead.  Fix for non-acpi devices as well by using a bus
	  walk routine instead of device_suspend.  Add code to turn
	  on appropriate power resources.  Disable EC in shutdown
	  path.</td>
	<td>&a.njl;</td>
      </tr>

      <tr>
	<td>Fix drivers and the apm compat interface  -- Currently,
	  the apm compat interface expects byte values but the ABI used
	  is a set of u_ints and an int.  Either the apm or acpi battery
	  drivers (or both) are setting the value to -1,
	  which results in 0xffffffff being passed back as the current
	  state.  Really, only 255 should be returned in this case.
	  The apm userland utility marks values &gt;= 255 as "unknown"
	  to work around this.  But really the underlying drivers should
	  be fixed.</td>
	<td>&a.imp;</td>
      </tr>

      <tr>
	<td>Fix EC timeouts -- move to a sx lock to cover EcWait instead
	  of a mutex so we can hold it across msleep.  This fixed the
	  timed out errors that occurred occasionally for some
	  users.</td>
	<td>&a.njl;</td>
      </tr>

      <tr>
	<td>Package all info on how to do an ACPI import -- done and
	  handed off to &a.marks; for inclusion in the acpi projects
	  website.</td>
	<td>&a.njl;</td>
      </tr>

      <tr>
	<td>ACPI floppy driver probing -- Add a fdc_acpi_probe method
	  to enumerate floppies using _FDE, _FDI methods.</td>
	<td>&a.njl;</td>
      </tr>

      <tr>
	<td>Rework ACPI PCI link support -- _DIS all links, ignore
	  invalid _CRS, ignore _STA, assume _SRS succeeds.</td>
	<td>&a.njl;</td>
      </tr>

      <tr>
	<td>Fix EISA probe not to write to registers.  Turns out an
	  inb actually triggers the boot hang.  Patch committed to
	  only probe the first slot; however, this breaks the Adaptec
	  VLB adapter (not EISA).  &a.gibbs; is fixing that device's
	  probe.  Done.</td>
	<td>&a.njl;</td>
      </tr>

      <tr>
	<td>Giant-free locking -- Remove dependency on Giant.</td>
	<td>&a.njl;</td>
      </tr>

      <tr>
	<td>Add SSDT support to acpidump(8) -- Right now we only dump
	  the fixed tables and DSDT.  Change acpidump(8) to dump the
	  SSDT tables.  It currently concatenates them with the
	  DSDT.</td>
	<td>&a.marcel;</td>
      </tr>

      <tr>
	<td>Change shutdown path -- do not use smp_rendezvous() since
	  it acquires a spinlock.  Instead, MI code should run the
	  shutdown path only on the BSP and all other processors should
	  be halted.</td>
	<td>&a.peter;</td>
      </tr>

      <tr>
	<td>Turn ACPI and PCI devices off or to a lower power state in
	  suspend and back on again in resume.  Override the default of
	  D3 with the value the BIOS specifies in _SxD, if present.  Skip
	  serial devices (PNP05xx) since they seem to hang when set to
	  D3 and may require special driver support.  Also skip non-type
	  0 PCI devices (i.e., bridges) since they don't seem to handle
	  being powered off.</td>
	 <td>&a.njl;</td>
      </tr>

      <tr>
	<td>Giant-free locking.</td>
	<td>&a.njl;</td>
      </tr>

      <tr>
	<td>newbus attachments for cpu &mdash; get cpu devices under
	  newbus so drivers like cpufreq can probe/attach.</td>
	<td>&a.njl;</td>
      </tr>

      <tr>
	<td>Write initial drivers: ICH SpeedStep, ACPI performance,
	  ACPI throttling, Enhanced SpeedStep, P4 TCC.</td>
	<td>&a.njl;</td>
      </tr>

      <tr>
	<td>Add bus methods/ivars for child attachments to both acpi
	  and legacy cpu devices</td>
	<td>&a.njl;</td>
      </tr>

      <tr>
	<td>Design sysctl interface.</td>
	<td>&a.njl;</td>
      </tr>

      <tr>
	<td>Design notify interface for Px changes.</td>
	<td>&a.njl;</td>
      </tr>

      <tr>
	<td>Update power_profile to use cpufreq.</td>
	<td>&a.njl;</td>
      </tr>

      <tr>
	<td>Import powerd.</td>
	<td>&a.njl;</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>
      </tr>

      <tr>
	<td>IBM Thinkpad extras driver -- Driver for Thinkpad hotkeys.</td>
	<td>&a.takawata;</td>
      </tr>

      <tr>
	<td>Call _S0D on resume (power up?).</td>
	<td>&a.njl;</td>
      </tr>

      <tr>
	<td>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>&a.njl;</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.  The existing implementation seems correct.</td>
	<td>&a.njl;</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>&a.ume;</td>
      </tr>

      <tr>
	<td>Fix stray irq 9 on reboot --
	  AcpiTerminate -&gt; 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>
      </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>&a.njl;</td>
      </tr>
    </table>


  &footer;
  </body>
</html>
