Author: rpaulo
Date: Tue Jun 23 13:17:25 2009
New Revision: 194701
URL: http://svn.freebsd.org/changeset/base/194701

Log:
  * Driver for ACPI WMI (Windows Management Instrumentation)
  * Driver for ACPI HP extra functionations, which required
    ACPI WMI driver.
  
  Submitted by: Michael <freebsdusb at bindone.de>
  Approved by:  re
  MFC after:    2 weeks

Added:
  head/share/man/man4/acpi_hp.4   (contents, props changed)
  head/share/man/man4/acpi_wmi.4   (contents, props changed)
  head/sys/dev/acpi_support/acpi_hp.c   (contents, props changed)
  head/sys/dev/acpi_support/acpi_wmi.c   (contents, props changed)
  head/sys/dev/acpi_support/acpi_wmi_if.m   (contents, props changed)
  head/sys/modules/acpi/acpi_hp/
  head/sys/modules/acpi/acpi_hp/Makefile   (contents, props changed)
  head/sys/modules/acpi/acpi_wmi/
  head/sys/modules/acpi/acpi_wmi/Makefile   (contents, props changed)
Modified:
  head/share/man/man4/Makefile
  head/sys/conf/files
  head/sys/conf/files.amd64
  head/sys/conf/files.i386
  head/sys/conf/kmod.mk
  head/sys/i386/conf/NOTES
  head/sys/modules/acpi/Makefile

Modified: head/share/man/man4/Makefile
==============================================================================
--- head/share/man/man4/Makefile        Tue Jun 23 13:16:16 2009        
(r194700)
+++ head/share/man/man4/Makefile        Tue Jun 23 13:17:25 2009        
(r194701)
@@ -7,12 +7,14 @@ MAN=  aac.4 \
        ${_acpi_asus.4} \
        ${_acpi_dock.4} \
        ${_acpi_fujitsu.4} \
+       ${_acpi_hp.4} \
        ${_acpi_ibm.4} \
        ${_acpi_panasonic.4} \
        ${_acpi_sony.4} \
        acpi_thermal.4 \
        ${_acpi_toshiba.4} \
        acpi_video.4 \
+       ${_acpi_wmi.4} \
        adv.4 \
        adw.4 \
        ae.4 \
@@ -594,10 +596,12 @@ _acpi_aiboost.4=acpi_aiboost.4
 _acpi_asus.4=  acpi_asus.4
 _acpi_dock.4=  acpi_dock.4
 _acpi_fujitsu.4=acpi_fujitsu.4
+_acpi_hp.4=    acpi_hp.4
 _acpi_ibm.4=   acpi_ibm.4
 _acpi_panasonic.4=acpi_panasonic.4
 _acpi_sony.4=  acpi_sony.4
 _acpi_toshiba.4=acpi_toshiba.4
+_acpi_wmi.4=   acpi_wmi.4
 _amdsmb.4=     amdsmb.4
 _amdtemp.4=    amdtemp.4
 _asmc.4=       asmc.4

Added: head/share/man/man4/acpi_hp.4
==============================================================================
--- /dev/null   00:00:00 1970   (empty, because file is newly added)
+++ head/share/man/man4/acpi_hp.4       Tue Jun 23 13:17:25 2009        
(r194701)
@@ -0,0 +1,546 @@
+.\" Copyright (c) 2009 Michael Gmelin
+.\" All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\"    notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\"    notice, this list of conditions and the following disclaimer in the
+.\"    documentation and/or other materials provided with the distribution.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+.\" SUCH DAMAGE.
+.\"
+.\" $FreeBSD$
+.\"
+.Dd June 21, 2009
+.Dt ACPI_HP 4 i386
+.Os
+.Sh NAME
+.Nm acpi_hp
+.Nd "ACPI extras driver for HP laptops"
+.Sh SYNOPSIS
+To compile this driver into the kernel,
+place the following line in your
+kernel configuration file:
+.Bd -ragged -offset indent
+.Cd "device acpi_hp"
+.Ed
+.Pp
+Alternatively, to load the driver as a
+module at boot time, place the following line in
+.Xr loader.conf 5 :
+.Bd -literal -offset indent
+acpi_hp_load="YES"
+.Ed
+.Sh DESCRIPTION
+The
+.Nm
+driver provides support for ACPI-controlled features found on HP laptops
+that use a WMI enabled BIOS (e.g. HP Compaq 8510p and 6510p).
+.Pp
+The main purpose of this driver is to provide an interface,
+accessible via
+.Xr sysctl 8 ,
+.Xr devd 8 and
+.Xr devfs 8 ,
+through which applications can determine and change the status of
+various laptop components and BIOS settings.
+.Pp
+.Ss Xr devd 8 Ss Events
+Devd events received by
+.Xr devd 8
+provide the following information:
+.Pp
+.Bl -tag -width "subsystem" -offset indent -compact
+.It system
+.Qq Li ACPI
+.It subsystem
+.Qq Li HP
+.It type
+The source of the event in the ACPI namespace.
+The value depends on the model.
+.It notify
+Event code (see below).
+.El
+.Pp
+Event codes:
+.Pp
+.Bl -tag -width "0xc0" -offset indent -compact
+.It Li 0xc0
+WLAN on air status changed to 0 (not on air)
+.It Li 0xc1
+WLAN on air status changed to 1 (on air)
+.It Li 0xd0
+Bluetooth on air status changed to 0 (not on air)
+.It Li 0xd1
+Bluetooth on air status changed to 1 (on air)
+.It Li 0xe0
+WWAN on air status changed to 0 (not on air)
+.It Li 0xe1
+WWAN on air status changed to 1 (on air)
+.El
+.Ss Xr devfs 8 Ss Device
+You can read /dev/hpcmi to see your current BIOS settings. The detail level
+can be adjusted by setting the sysctl 
+.Va cmi_detail
+as described below.
+.Sh SYSCTL VARIABLES
+The following sysctls are currently implemented:
+.Ss WLAN:
+.Bl -tag -width indent
+.It Va dev.acpi_hp.0.wlan_enabled
+Toggle WLAN chip activity. 
+.It Va dev.acpi_hp.0.wlan_radio
+(read-only)
+WLAN radio status (controlled by hardware switch)
+.It Va dev.acpi_hp.0.wlan_on_air
+(read-only)
+WLAN on air (chip enabled, hardware switch enabled + enabled in BIOS)
+.It Va dev.acpi_hp.0.wlan_enabled_if_radio_on
+If set to 1, the WLAN chip will be enabled if the radio is turned on
+.It Va dev.acpi_hp.0.wlan_disable_if_radio_off
+If set to 1, the WLAN chip will be disabled if the radio is turned off
+.El
+.Ss Bluetooth:
+.Bl -tag -width indent
+.It Va dev.acpi_hp.0.bt_enabled
+Toggle Bluetooth chip activity. 
+.It Va dev.acpi_hp.0.bt_radio
+(read-only)
+Bluetooth radio status (controlled by hardware switch)
+.It Va dev.acpi_hp.0.bt_on_air
+(read-only)
+Bluetooth on air (chip enabled, hardware switch enabled + enabled in BIOS)
+.It Va dev.acpi_hp.0.bt_enabled_if_radio_on
+If set to 1, the Bluetooth chip will be enabled if the radio is turned on
+.It Va dev.acpi_hp.0.bt_disable_if_radio_off
+If set to 1, the Bluetooth chip will be disabled if the radio is turned off
+.El
+.Ss WWAN:
+.Bl -tag -width indent
+.It Va dev.acpi_hp.0.wwan_enabled
+Toggle WWAN chip activity. 
+.It Va dev.acpi_hp.0.wwan_radio
+(read-only)
+WWAN radio status (controlled by hardware switch)
+.It Va dev.acpi_hp.0.wwan_on_air
+(read-only)
+WWAN on air (chip enabled, hardware switch enabled + enabled in BIOS)
+.It Va dev.acpi_hp.0.wwan_enabled_if_radio_on
+If set to 1, the WWAN chip will be enabled if the radio is turned on
+.It Va dev.acpi_hp.0.wwan_disable_if_radio_off
+If set to 1, the WWAN chip will be disabled if the radio is turned off
+.El
+.Ss Misc:
+.Bl -tag -width indent
+.It Va dev.acpi_hp.0.als_enabled
+Toggle ambient light sensor (ALS)
+.It Va dev.acpi_hp.0.display
+(read-only)
+Display status (bitmask)
+.It Va dev.acpi_hp.0.hdd_temperature
+(read-only)
+HDD temperature
+.It Va dev.acpi_hp.0.is_docked
+(read-only)
+Docking station status (1 if docked)
+.It Va dev.acpi_hp.0.cmi_detail
+Bitmask to control detail level in /dev/hpcmi output (values can be ORed).
+.Bl -tag -width "0x01" -offset indent -compact
+.It Li 0x01
+Show path component of BIOS setting
+.It Li 0x02
+Show a list of valid options for the BIOS setting
+.It Li 0x04
+Show additional flags of BIOS setting (ReadOnly etc.)
+.El
+.El
+.Pp
+Defaults for these sysctls can be set in
+.Xr sysctl.conf 5 .
+.Sh FILES
+.Bl -tag -width ".Pa /dev/hpcmi"
+.It Pa /dev/hpcmi
+Interface to read BIOS settings
+.El
+.Sh EXAMPLES
+The following can be added to
+.Xr devd.conf 5
+in order disable the LAN interface when WLAN on air and reenable if it's
+not:
+.Bd -literal -offset indent
+notify 0 {
+       match "system"          "ACPI";
+       match "subsystem"       "HP";
+       match "notify"          "0xc0";
+       action                  "ifconfig em0 up";
+};
+
+notify 0 {
+       match "system"          "ACPI";
+       match "subsystem"       "HP";
+       match "notify"          "0xc1";
+       action                  "ifconfig em0 down";
+};
+.Ed
+.Pp
+Enable the ambient light sensor:
+.Bd -literal -offset indent
+sysctl dev.acpi_hp.0.als_enabled=1
+.Ed
+.Pp
+Enable Bluetooth:
+.Bd -literal -offset indent
+sysctl dev.acpi_hp.0.bt_enabled=1
+.Ed
+.Pp
+Get BIOS settings:
+.Bd -literal -offset indent
+cat /dev/hpcmi
+
+Serial Port                                Disable              
+Infrared Port                              Enable               
+Parallel Port                              Disable              
+Flash Media Reader                         Disable              
+USB Ports including Express Card slot      Enable               
+1394 Port                                  Enable               
+Cardbus Slot                               Disable              
+Express Card Slot                          Disable   
+(...)
+.Ed
+.Pp
+Set maximum detail level for /dev/hpcmi output:
+.Bd -literal -offset indent
+sysctl dev.acpi_hp.0.cmi_detail=7
+.Ed
+.Pp
+
+
+
+.Sh SEE ALSO
+.Xr acpi 4 ,
+.Xr acpi_wmi 4 ,
+.Xr sysctl.conf 5 ,
+.Xr devd 8 ,
+.Xr devfs 8 ,
+.Xr sysctl 8
+.Sh HISTORY
+The
+.Nm
+device driver first appeared in
+.Fx CURRENT .
+.Sh AUTHORS
+.An -nosplit
+The
+.Nm
+driver was written by
+.An Michael Gmelin Aq free...@grem.de
+.Pp
+It has been inspired by hp-wmi driver, which implements a subset of these   
+features (hotkeys) on Linux.
+.Pp
+.Bl -tag -width indent
+.It HP CMI whitepaper:
+http://h20331.www2.hp.com/Hpsub/downloads/cmi_whitepaper.pdf
+.It wmi-hp for Linux:
+http://www.kernel.org
+.It WMI and ACPI:
+http://www.microsoft.com/whdc/system/pnppwr/wmi/wmi-acpi.mspx
+.El
+.Pp
+This manual page was written by
+.An Michael Gmelin Aq free...@grem.de
+.Sh BUGS
+This driver is experimental and has only been tested on CURRENT i386 on an
+HP Compaq 8510p which featured all supported wireless devices (WWAN/BT/WLAN).
+Expect undefined results when operating on different hardware.
+.Pp
+Loading the driver is slow. Reading from /dev/hpcmi is even slower.
+.Pp
+Additional features like HP specific sensor readings or writing BIOS
+settings are not supported.
+.\" Copyright (c) 2009 Michael Gmelin
+.\" All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\"    notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\"    notice, this list of conditions and the following disclaimer in the
+.\"    documentation and/or other materials provided with the distribution.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+.\" SUCH DAMAGE.
+.\"
+.\" $FreeBSD$
+.\"
+.Dd June 21, 2009
+.Dt ACPI_HP 4 i386
+.Os
+.Sh NAME
+.Nm acpi_hp
+.Nd "ACPI extras driver for HP laptops"
+.Sh SYNOPSIS
+To compile this driver into the kernel,
+place the following line in your
+kernel configuration file:
+.Bd -ragged -offset indent
+.Cd "device acpi_hp"
+.Ed
+.Pp
+Alternatively, to load the driver as a
+module at boot time, place the following line in
+.Xr loader.conf 5 :
+.Bd -literal -offset indent
+acpi_hp_load="YES"
+.Ed
+.Sh DESCRIPTION
+The
+.Nm
+driver provides support for ACPI-controlled features found on HP laptops
+that use a WMI enabled BIOS (e.g. HP Compaq 8510p and 6510p).
+.Pp
+The main purpose of this driver is to provide an interface,
+accessible via
+.Xr sysctl 8 ,
+.Xr devd 8 and
+.Xr devfs 8 ,
+through which applications can determine and change the status of
+various laptop components and BIOS settings.
+.Pp
+.Ss Xr devd 8 Ss Events
+Devd events received by
+.Xr devd 8
+provide the following information:
+.Pp
+.Bl -tag -width "subsystem" -offset indent -compact
+.It system
+.Qq Li ACPI
+.It subsystem
+.Qq Li HP
+.It type
+The source of the event in the ACPI namespace.
+The value depends on the model.
+.It notify
+Event code (see below).
+.El
+.Pp
+Event codes:
+.Pp
+.Bl -tag -width "0xc0" -offset indent -compact
+.It Li 0xc0
+WLAN on air status changed to 0 (not on air)
+.It Li 0xc1
+WLAN on air status changed to 1 (on air)
+.It Li 0xd0
+Bluetooth on air status changed to 0 (not on air)
+.It Li 0xd1
+Bluetooth on air status changed to 1 (on air)
+.It Li 0xe0
+WWAN on air status changed to 0 (not on air)
+.It Li 0xe1
+WWAN on air status changed to 1 (on air)
+.El
+.Ss Xr devfs 8 Ss Device
+You can read /dev/hpcmi to see your current BIOS settings. The detail level
+can be adjusted by setting the sysctl 
+.Va cmi_detail
+as described below.
+.Sh SYSCTL VARIABLES
+The following sysctls are currently implemented:
+.Ss WLAN:
+.Bl -tag -width indent
+.It Va dev.acpi_hp.0.wlan_enabled
+Toggle WLAN chip activity. 
+.It Va dev.acpi_hp.0.wlan_radio
+(read-only)
+WLAN radio status (controlled by hardware switch)
+.It Va dev.acpi_hp.0.wlan_on_air
+(read-only)
+WLAN on air (chip enabled, hardware switch enabled + enabled in BIOS)
+.It Va dev.acpi_hp.0.wlan_enabled_if_radio_on
+If set to 1, the WLAN chip will be enabled if the radio is turned on
+.It Va dev.acpi_hp.0.wlan_disable_if_radio_off
+If set to 1, the WLAN chip will be disabled if the radio is turned off
+.El
+.Ss Bluetooth:
+.Bl -tag -width indent
+.It Va dev.acpi_hp.0.bt_enabled
+Toggle Bluetooth chip activity. 
+.It Va dev.acpi_hp.0.bt_radio
+(read-only)
+Bluetooth radio status (controlled by hardware switch)
+.It Va dev.acpi_hp.0.bt_on_air
+(read-only)
+Bluetooth on air (chip enabled, hardware switch enabled + enabled in BIOS)
+.It Va dev.acpi_hp.0.bt_enabled_if_radio_on
+If set to 1, the Bluetooth chip will be enabled if the radio is turned on
+.It Va dev.acpi_hp.0.bt_disable_if_radio_off
+If set to 1, the Bluetooth chip will be disabled if the radio is turned off
+.El
+.Ss WWAN:
+.Bl -tag -width indent
+.It Va dev.acpi_hp.0.wwan_enabled
+Toggle WWAN chip activity. 
+.It Va dev.acpi_hp.0.wwan_radio
+(read-only)
+WWAN radio status (controlled by hardware switch)
+.It Va dev.acpi_hp.0.wwan_on_air
+(read-only)
+WWAN on air (chip enabled, hardware switch enabled + enabled in BIOS)
+.It Va dev.acpi_hp.0.wwan_enabled_if_radio_on
+If set to 1, the WWAN chip will be enabled if the radio is turned on
+.It Va dev.acpi_hp.0.wwan_disable_if_radio_off
+If set to 1, the WWAN chip will be disabled if the radio is turned off
+.El
+.Ss Misc:
+.Bl -tag -width indent
+.It Va dev.acpi_hp.0.als_enabled
+Toggle ambient light sensor (ALS)
+.It Va dev.acpi_hp.0.display
+(read-only)
+Display status (bitmask)
+.It Va dev.acpi_hp.0.hdd_temperature
+(read-only)
+HDD temperature
+.It Va dev.acpi_hp.0.is_docked
+(read-only)
+Docking station status (1 if docked)
+.It Va dev.acpi_hp.0.cmi_detail
+Bitmask to control detail level in /dev/hpcmi output (values can be ORed).
+.Bl -tag -width "0x01" -offset indent -compact
+.It Li 0x01
+Show path component of BIOS setting
+.It Li 0x02
+Show a list of valid options for the BIOS setting
+.It Li 0x04
+Show additional flags of BIOS setting (ReadOnly etc.)
+.El
+.El
+.Pp
+Defaults for these sysctls can be set in
+.Xr sysctl.conf 5 .
+.Sh FILES
+.Bl -tag -width ".Pa /dev/hpcmi"
+.It Pa /dev/hpcmi
+Interface to read BIOS settings
+.El
+.Sh EXAMPLES
+The following can be added to
+.Xr devd.conf 5
+in order disable the LAN interface when WLAN on air and reenable if it's
+not:
+.Bd -literal -offset indent
+notify 0 {
+       match "system"          "ACPI";
+       match "subsystem"       "HP";
+       match "notify"          "0xc0";
+       action                  "ifconfig em0 up";
+};
+
+notify 0 {
+       match "system"          "ACPI";
+       match "subsystem"       "HP";
+       match "notify"          "0xc1";
+       action                  "ifconfig em0 down";
+};
+.Ed
+.Pp
+Enable the ambient light sensor:
+.Bd -literal -offset indent
+sysctl dev.acpi_hp.0.als_enabled=1
+.Ed
+.Pp
+Enable Bluetooth:
+.Bd -literal -offset indent
+sysctl dev.acpi_hp.0.bt_enabled=1
+.Ed
+.Pp
+Get BIOS settings:
+.Bd -literal -offset indent
+cat /dev/hpcmi
+
+Serial Port                                Disable              
+Infrared Port                              Enable               
+Parallel Port                              Disable              
+Flash Media Reader                         Disable              
+USB Ports including Express Card slot      Enable               
+1394 Port                                  Enable               
+Cardbus Slot                               Disable              
+Express Card Slot                          Disable   
+(...)
+.Ed
+.Pp
+Set maximum detail level for /dev/hpcmi output:
+.Bd -literal -offset indent
+sysctl dev.acpi_hp.0.cmi_detail=7
+.Ed
+.Pp
+
+
+
+.Sh SEE ALSO
+.Xr acpi 4 ,
+.Xr acpi_wmi 4 ,
+.Xr sysctl.conf 5 ,
+.Xr devd 8 ,
+.Xr devfs 8 ,
+.Xr sysctl 8
+.Sh HISTORY
+The
+.Nm
+device driver first appeared in
+.Fx CURRENT .
+.Sh AUTHORS
+.An -nosplit
+The
+.Nm
+driver was written by
+.An Michael Gmelin Aq free...@grem.de
+.Pp
+It has been inspired by hp-wmi driver, which implements a subset of these   
+features (hotkeys) on Linux.
+.Pp
+.Bl -tag -width indent
+.It HP CMI whitepaper:
+http://h20331.www2.hp.com/Hpsub/downloads/cmi_whitepaper.pdf
+.It wmi-hp for Linux:
+http://www.kernel.org
+.It WMI and ACPI:
+http://www.microsoft.com/whdc/system/pnppwr/wmi/wmi-acpi.mspx
+.El
+.Pp
+This manual page was written by
+.An Michael Gmelin Aq free...@grem.de
+.Sh BUGS
+This driver is experimental and has only been tested on CURRENT i386 on an
+HP Compaq 8510p which featured all supported wireless devices (WWAN/BT/WLAN).
+Expect undefined results when operating on different hardware.
+.Pp
+Loading the driver is slow. Reading from /dev/hpcmi is even slower.
+.Pp
+Additional features like HP specific sensor readings or writing BIOS
+settings are not supported.

Added: head/share/man/man4/acpi_wmi.4
==============================================================================
--- /dev/null   00:00:00 1970   (empty, because file is newly added)
+++ head/share/man/man4/acpi_wmi.4      Tue Jun 23 13:17:25 2009        
(r194701)
@@ -0,0 +1,194 @@
+.\" Copyright (c) 2009 Michael Gmelin
+.\" All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\"    notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\"    notice, this list of conditions and the following disclaimer in the
+.\"    documentation and/or other materials provided with the distribution.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+.\" SUCH DAMAGE.
+.\"
+.\" $FreeBSD$
+.\"
+.Dd June 21, 2009
+.Dt ACPI_WMI 4 i386
+.Os
+.Sh NAME
+.Nm acpi_wmi
+.Nd "ACPI to WMI mapping driver"
+.Sh SYNOPSIS
+To compile this driver into the kernel,
+place the following line in your
+kernel configuration file:
+.Bd -ragged -offset indent
+.Cd "device acpi_wmi"
+.Ed
+.Pp
+Alternatively, to load the driver as a
+module at boot time, place the following line in
+.Xr loader.conf 5 :
+.Bd -literal -offset indent
+acpi_wmi_load="YES"
+.Ed
+.Sh DESCRIPTION
+The
+.Nm
+driver provides an interface for vendor specific WMI implementations 
+(e.g. HP and Acer laptops). It creates /dev/wmistat, which can be read to get
+information about GUIDs found in the system.
+.Sh FILES
+.Bl -tag -width /dev/wmistat -compact
+.It Pa /dev/wmistat
+WMI status device.
+.El
+.Sh EXAMPLES
+.Bd Literal
+root# cat /dev/wmistat
+
+GUID                                  INST EXPE METH STR EVENT OID
+{5FB7F034-2C63-45E9-BE91-3D44E2C707E4}   1 NO   WMAA NO  NO    AA
+{95F24279-4D7B-4334-9387-ACCDC67EF61C}   1 NO   NO   NO  0x80+ -
+{2B814318-4BE8-4707-9D84-A190A859B5D0}   1 NO   NO   NO  0xA0  -
+{05901221-D566-11D1-B2F0-00A0C9062910}   1 NO   NO   NO  NO    AB
+{1F4C91EB-DC5C-460B-951D-C7CB9B4B8D5E}   1 NO   WMBA NO  NO    BA
+{2D114B49-2DFB-4130-B8FE-4A3C09E75133}  57 NO   NO   NO  NO    BC
+{988D08E3-68F4-4C35-AF3E-6A1B8106F83C}  20 NO   NO   NO  NO    BD
+{14EA9746-CE1F-4098-A0E0-7045CB4DA745}   1 NO   NO   NO  NO    BE
+{322F2028-0F84-4901-988E-015176049E2D}   2 NO   NO   NO  NO    BF
+{8232DE3D-663D-4327-A8F4-E293ADB9BF05}   0 NO   NO   NO  NO    BG
+{8F1F6436-9F42-42C8-BADC-0E9424F20C9A}   0 NO   NO   NO  NO    BH
+{8F1F6435-9F42-42C8-BADC-0E9424F20C9A}   0 NO   NO   NO  NO    BI
+.Ed
+
+.Sh SEE ALSO
+.Xr acpi 4 ,
+.Sh HISTORY
+The
+.Nm
+device driver first appeared in
+.Fx CURRENT .
+.Sh AUTHORS
+.An -nosplit
+The
+.Nm
+driver was written by
+.An Michael Gmelin Aq free...@grem.de
+.Pp
+Work has been inspired by the Linux acpi-wmi driver written by Carlos Corbacho
+.Pp
+See http://www.microsoft.com/whdc/system/pnppwr/wmi/wmi-acpi.mspx for
+the specification of ACPI-WMI.
+.Pp
+This manual page was written by
+.An Michael Gmelin Aq free...@grem.de
+.\" Copyright (c) 2009 Michael Gmelin
+.\" All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\"    notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\"    notice, this list of conditions and the following disclaimer in the
+.\"    documentation and/or other materials provided with the distribution.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+.\" SUCH DAMAGE.
+.\"
+.\" $FreeBSD$
+.\"
+.Dd June 21, 2009
+.Dt ACPI_WMI 4 i386
+.Os
+.Sh NAME
+.Nm acpi_wmi
+.Nd "ACPI to WMI mapping driver"
+.Sh SYNOPSIS
+To compile this driver into the kernel,
+place the following line in your
+kernel configuration file:
+.Bd -ragged -offset indent
+.Cd "device acpi_wmi"
+.Ed
+.Pp
+Alternatively, to load the driver as a
+module at boot time, place the following line in
+.Xr loader.conf 5 :
+.Bd -literal -offset indent
+acpi_wmi_load="YES"
+.Ed
+.Sh DESCRIPTION
+The
+.Nm
+driver provides an interface for vendor specific WMI implementations 
+(e.g. HP and Acer laptops). It creates /dev/wmistat, which can be read to get
+information about GUIDs found in the system.
+.Sh FILES
+.Bl -tag -width /dev/wmistat -compact
+.It Pa /dev/wmistat
+WMI status device.
+.El
+.Sh EXAMPLES
+.Bd Literal
+root# cat /dev/wmistat
+
+GUID                                  INST EXPE METH STR EVENT OID
+{5FB7F034-2C63-45E9-BE91-3D44E2C707E4}   1 NO   WMAA NO  NO    AA
+{95F24279-4D7B-4334-9387-ACCDC67EF61C}   1 NO   NO   NO  0x80+ -
+{2B814318-4BE8-4707-9D84-A190A859B5D0}   1 NO   NO   NO  0xA0  -
+{05901221-D566-11D1-B2F0-00A0C9062910}   1 NO   NO   NO  NO    AB
+{1F4C91EB-DC5C-460B-951D-C7CB9B4B8D5E}   1 NO   WMBA NO  NO    BA
+{2D114B49-2DFB-4130-B8FE-4A3C09E75133}  57 NO   NO   NO  NO    BC
+{988D08E3-68F4-4C35-AF3E-6A1B8106F83C}  20 NO   NO   NO  NO    BD
+{14EA9746-CE1F-4098-A0E0-7045CB4DA745}   1 NO   NO   NO  NO    BE
+{322F2028-0F84-4901-988E-015176049E2D}   2 NO   NO   NO  NO    BF
+{8232DE3D-663D-4327-A8F4-E293ADB9BF05}   0 NO   NO   NO  NO    BG
+{8F1F6436-9F42-42C8-BADC-0E9424F20C9A}   0 NO   NO   NO  NO    BH
+{8F1F6435-9F42-42C8-BADC-0E9424F20C9A}   0 NO   NO   NO  NO    BI
+.Ed
+
+.Sh SEE ALSO
+.Xr acpi 4 ,
+.Sh HISTORY
+The
+.Nm
+device driver first appeared in
+.Fx CURRENT .
+.Sh AUTHORS
+.An -nosplit
+The
+.Nm
+driver was written by
+.An Michael Gmelin Aq free...@grem.de
+.Pp
+Work has been inspired by the Linux acpi-wmi driver written by Carlos Corbacho
+.Pp
+See http://www.microsoft.com/whdc/system/pnppwr/wmi/wmi-acpi.mspx for
+the specification of ACPI-WMI.
+.Pp
+This manual page was written by
+.An Michael Gmelin Aq free...@grem.de

Modified: head/sys/conf/files
==============================================================================
--- head/sys/conf/files Tue Jun 23 13:16:16 2009        (r194700)
+++ head/sys/conf/files Tue Jun 23 13:17:25 2009        (r194701)
@@ -398,9 +398,11 @@ dev/aac/aac_debug.c                optional aac
 dev/aac/aac_disk.c             optional aac
 dev/aac/aac_linux.c            optional aac compat_linux
 dev/aac/aac_pci.c              optional aac pci
+dev/acpi_support/acpi_wmi.c    optional acpi_wmi acpi
 dev/acpi_support/acpi_aiboost.c        optional acpi_aiboost acpi
 dev/acpi_support/acpi_asus.c   optional acpi_asus acpi
 dev/acpi_support/acpi_fujitsu.c        optional acpi_fujitsu acpi
+dev/acpi_support/acpi_hp.c     optional acpi_hp acpi
 dev/acpi_support/acpi_ibm.c    optional acpi_ibm acpi
 dev/acpi_support/acpi_panasonic.c optional acpi_panasonic acpi
 dev/acpi_support/acpi_sony.c   optional acpi_sony acpi

Modified: head/sys/conf/files.amd64
==============================================================================
--- head/sys/conf/files.amd64   Tue Jun 23 13:16:16 2009        (r194700)
+++ head/sys/conf/files.amd64   Tue Jun 23 13:17:25 2009        (r194701)
@@ -146,6 +146,7 @@ crypto/via/padlock.c                optional        padlock
 crypto/via/padlock_cipher.c    optional        padlock
 crypto/via/padlock_hash.c      optional        padlock
 dev/acpica/acpi_if.m           standard
+dev/acpi_support/acpi_wmi_if.m standard
 dev/agp/agp_amd64.c            optional        agp
 dev/agp/agp_i810.c             optional        agp
 dev/agp/agp_intel.c            optional        agp

Modified: head/sys/conf/files.i386
==============================================================================
--- head/sys/conf/files.i386    Tue Jun 23 13:16:16 2009        (r194700)
+++ head/sys/conf/files.i386    Tue Jun 23 13:17:25 2009        (r194701)
@@ -223,6 +223,7 @@ dev/syscons/scvtb.c         optional sc
 dev/syscons/teken/teken.c      optional sc
 dev/uart/uart_cpu_i386.c       optional uart
 dev/acpica/acpi_if.m           standard
+dev/acpi_support/acpi_wmi_if.m standard
 dev/wpi/if_wpi.c               optional wpi
 i386/acpica/OsdEnvironment.c   optional acpi
 i386/acpica/acpi_machdep.c     optional acpi

Modified: head/sys/conf/kmod.mk
==============================================================================
--- head/sys/conf/kmod.mk       Tue Jun 23 13:16:16 2009        (r194700)
+++ head/sys/conf/kmod.mk       Tue Jun 23 13:17:25 2009        (r194701)
@@ -320,7 +320,8 @@ ${_src}:
 .endfor
 .endif
 
-MFILES?= dev/acpica/acpi_if.m dev/agp/agp_if.m dev/ata/ata_if.m 
dev/eisa/eisa_if.m \
+MFILES?= dev/acpica/acpi_if.m dev/acpi_support/acpi_wmi_if.m \
+       dev/agp/agp_if.m dev/ata/ata_if.m dev/eisa/eisa_if.m \
        dev/iicbus/iicbb_if.m dev/iicbus/iicbus_if.m \
        dev/mmc/mmcbr_if.m dev/mmc/mmcbus_if.m \
        dev/mii/miibus_if.m dev/ofw/ofw_bus_if.m \

Added: head/sys/dev/acpi_support/acpi_hp.c
==============================================================================
--- /dev/null   00:00:00 1970   (empty, because file is newly added)
+++ head/sys/dev/acpi_support/acpi_hp.c Tue Jun 23 13:17:25 2009        
(r194701)
@@ -0,0 +1,1183 @@
+/*-
+ * Copyright (c) 2009 Michael Gmelin <free...@grem.de>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+/*
+ * Driver for extra ACPI-controlled features found on HP laptops
+ * that use a WMI enabled BIOS (e.g. HP Compaq 8510p and 6510p).
+ * Allows to control and read status of integrated hardware and read
+ * BIOS settings through CMI.
+ * Inspired by the hp-wmi driver, which implements a subset of these
+ * features (hotkeys) on Linux.
+ *
+ * HP CMI whitepaper:
+ *     http://h20331.www2.hp.com/Hpsub/downloads/cmi_whitepaper.pdf
+ * wmi-hp for Linux:
+ *     http://www.kernel.org
+ * WMI and ACPI:
+ *     http://www.microsoft.com/whdc/system/pnppwr/wmi/wmi-acpi.mspx
+ */
+
+#include "opt_acpi.h"
+#include <sys/param.h>
+#include <sys/conf.h>
+#include <sys/uio.h>
+#include <sys/proc.h>
+#include <sys/kernel.h>
+#include <sys/bus.h>
+#include <sys/sbuf.h>
+#include <sys/module.h>
+#include <sys/sysctl.h>
+
+#include <contrib/dev/acpica/include/acpi.h>
+#include <contrib/dev/acpica/include/accommon.h>                               
 
+#include <dev/acpica/acpivar.h>
+#include "acpi_wmi_if.h"
+
+#define _COMPONENT     ACPI_OEM
+ACPI_MODULE_NAME("HP")
+
+#define ACPI_HP_WMI_EVENT_GUID         "95F24279-4D7B-4334-9387-ACCDC67EF61C"
+#define ACPI_HP_WMI_BIOS_GUID          "5FB7F034-2C63-45E9-BE91-3D44E2C707E4"
+#define ACPI_HP_WMI_CMI_GUID           "2D114B49-2DFB-4130-B8FE-4A3C09E75133"
+
+#define ACPI_HP_WMI_DISPLAY_COMMAND    0x1
+#define ACPI_HP_WMI_HDDTEMP_COMMAND    0x2
+#define ACPI_HP_WMI_ALS_COMMAND                0x3
+#define ACPI_HP_WMI_DOCK_COMMAND       0x4
+#define ACPI_HP_WMI_WIRELESS_COMMAND   0x5
+
+#define ACPI_HP_METHOD_WLAN_ENABLED                    1
+#define ACPI_HP_METHOD_WLAN_RADIO                      2
+#define ACPI_HP_METHOD_WLAN_ON_AIR                     3
+#define ACPI_HP_METHOD_WLAN_ENABLE_IF_RADIO_ON         4
+#define ACPI_HP_METHOD_WLAN_DISABLE_IF_RADIO_OFF       5
+#define ACPI_HP_METHOD_BLUETOOTH_ENABLED               6
+#define ACPI_HP_METHOD_BLUETOOTH_RADIO                 7
+#define ACPI_HP_METHOD_BLUETOOTH_ON_AIR                        8
+#define ACPI_HP_METHOD_BLUETOOTH_ENABLE_IF_RADIO_ON    9
+#define ACPI_HP_METHOD_BLUETOOTH_DISABLE_IF_RADIO_OFF  10
+#define ACPI_HP_METHOD_WWAN_ENABLED                    11
+#define ACPI_HP_METHOD_WWAN_RADIO                      12
+#define ACPI_HP_METHOD_WWAN_ON_AIR                     13
+#define ACPI_HP_METHOD_WWAN_ENABLE_IF_RADIO_ON         14
+#define ACPI_HP_METHOD_WWAN_DISABLE_IF_RADIO_OFF       15
+#define ACPI_HP_METHOD_ALS                             16
+#define ACPI_HP_METHOD_DISPLAY                         17
+#define ACPI_HP_METHOD_HDDTEMP                         18
+#define ACPI_HP_METHOD_DOCK                            19
+#define ACPI_HP_METHOD_CMI_DETAIL                      20
+
+#define HP_MASK_WWAN_ON_AIR                    0x1000000
+#define HP_MASK_BLUETOOTH_ON_AIR               0x10000
+#define HP_MASK_WLAN_ON_AIR                    0x100
+#define HP_MASK_WWAN_RADIO                     0x8000000
+#define HP_MASK_BLUETOOTH_RADIO                        0x80000
+#define HP_MASK_WLAN_RADIO                     0x800
+#define HP_MASK_WWAN_ENABLED                   0x2000000
+#define HP_MASK_BLUETOOTH_ENABLED              0x20000
+#define HP_MASK_WLAN_ENABLED                   0x200
+
+#define ACPI_HP_CMI_DETAIL_PATHS               0x01
+#define ACPI_HP_CMI_DETAIL_ENUMS               0x02
+#define ACPI_HP_CMI_DETAIL_FLAGS               0x04
+
+struct acpi_hp_inst_seq_pair {
+       UINT32  sequence;       /* sequence number as suggested by cmi bios */
+       UINT8   instance;       /* object instance on guid */
+};
+
+struct acpi_hp_softc {
+       device_t        dev;
+       ACPI_HANDLE     handle;
+       device_t        wmi_dev;
+       int             has_notify;             /* notification GUID found */
+       int             has_cmi;                /* CMI GUID found */
+       int             cmi_detail;             /* CMI detail level
+                                                  (set by sysctl) */
+       int             wlan_enable_if_radio_on;        /* set by sysctl */
+       int             wlan_disable_if_radio_off;      /* set by sysctl */
+       int             bluetooth_enable_if_radio_on;   /* set by sysctl */
+       int             bluetooth_disable_if_radio_off; /* set by sysctl */
+       int             wwan_enable_if_radio_on;        /* set by sysctl */
+       int             wwan_disable_if_radio_off;      /* set by sysctl */
+       int             was_wlan_on_air;                /* last known WLAN
+                                                          on air status */
+       int             was_bluetooth_on_air;           /* last known BT
+                                                          on air status */
+       int             was_wwan_on_air;                /* last known WWAN
+                                                          on air status */
+       struct sysctl_ctx_list  *sysctl_ctx;
+       struct sysctl_oid       *sysctl_tree;
+       struct cdev     *hpcmi_dev_t;           /* hpcmi device handle */
+       struct sbuf     hpcmi_sbuf;             /* /dev/hpcmi output sbuf */
+       pid_t           hpcmi_open_pid;         /* pid operating on
+                                                  /dev/hpcmi */
+       int             hpcmi_bufptr;           /* current pointer position
+                                                  in /dev/hpcmi output buffer
+                                                */
+       int             cmi_order_size;         /* size of cmi_order list */
+       struct acpi_hp_inst_seq_pair cmi_order[128];    /* list of CMI
+                            instances ordered by BIOS suggested sequence */
+};
+
+static struct {
+       char    *name;
+       int     method;
+       char    *description;
+       int     access;
+} acpi_hp_sysctls[] = {
+       {
+               .name           = "wlan_enabled",
+               .method         = ACPI_HP_METHOD_WLAN_ENABLED,
+               .description    = "Enable/Disable WLAN (WiFi)",
+               .access         = CTLTYPE_INT | CTLFLAG_RW
+       },
+       {
+               .name           = "wlan_radio",
+               .method         = ACPI_HP_METHOD_WLAN_RADIO,
+               .description    = "WLAN radio status",
+               .access         = CTLTYPE_INT | CTLFLAG_RD
+       },
+       {
+               .name           = "wlan_on_air",
+               .method         = ACPI_HP_METHOD_WLAN_ON_AIR,
+               .description    = "WLAN radio ready to use (enabled and radio)",
+               .access         = CTLTYPE_INT | CTLFLAG_RD
+       },
+       {
+               .name           = "wlan_enable_if_radio_on",
+               .method         = ACPI_HP_METHOD_WLAN_ENABLE_IF_RADIO_ON,

*** DIFF OUTPUT TRUNCATED AT 1000 LINES ***
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to