hal: Branch 'master'

David Zeuthen david at kemper.freedesktop.org
Thu Feb 15 16:26:10 PST 2007


 doc/spec/hal-spec-examples.xml              |   43 
 doc/spec/hal-spec.html                      |14901 ++++------------------------
 fdi/policy/10osvendor/20-acl-management.fdi |   16 
 hald/ck-tracker.c                           |    8 
 hald/hald_dbus.c                            |   86 
 hald/hald_dbus.h                            |    6 
 hald/hald_runner.c                          |   98 
 hald/util.c                                 |    6 
 hald/util.h                                 |    3 
 tools/hal-acl-add.c                         |    8 
 tools/hal-acl-remove.c                      |    1 
 11 files changed, 2399 insertions(+), 12777 deletions(-)

New commits:
diff-tree 650e1500b6b170ec3d036966865b9f12316d4016 (from cf5cb809dffe8bbfb25ec90a54c38b0bbe5b4b99)
Author: David Zeuthen <davidz at redhat.com>
Date:   Thu Feb 15 19:26:05 2007 -0500

    more CK and ACL mgmt work
    
    This commit hopefully adds the remaining hooks so work can continue in
    tools/hal-acl-add.c and tools/hal-acl-remove.c.

diff --git a/doc/spec/hal-spec-examples.xml b/doc/spec/hal-spec-examples.xml
index e931631..ee4c79a 100644
--- a/doc/spec/hal-spec-examples.xml
+++ b/doc/spec/hal-spec-examples.xml
@@ -69,6 +69,42 @@
               the callouts from <literal>info.callouts.add</literal> are executed.
             </entry>
           </row>
+          <row>
+            <entry>
+              <literal>info.callouts.session_add</literal> (string list)
+            </entry>
+            <entry/>
+            <entry>No</entry>
+            <entry>
+              A string list with all programs/callouts which should be
+              executed (with <literal>HALD_ACTION=session_add</literal>) when
+              a session is added. Can only be set on the root computer
+	      device object. 
+	      The environment also contains the variables
+	      <literal>HALD_SESSION_ADD_SESSION_ID</literal>, 
+	      <literal>HALD_SESSION_ADD_SESSION_UID</literal> and
+	      <literal>HALD_SESSION_ADD_SESSION_IS_ACTIVE</literal>
+	      to identify the session.
+            </entry>
+          </row>
+          <row>
+            <entry>
+              <literal>info.callouts.session_remove</literal> (string list)
+            </entry>
+            <entry/>
+            <entry>No</entry>
+            <entry>
+              A string list with all programs/callouts which should be
+              executed (with <literal>HALD_ACTION=session_remove</literal>) when
+              a session is removed. Can only be set on the root computer
+	      device object.
+	      The environment also contains the variables
+	      <literal>HALD_SESSION_REMOVE_SESSION_ID</literal>, 
+	      <literal>HALD_SESSION_REMOVE_SESSION_UID</literal> and
+	      <literal>HALD_SESSION_REMOVE_SESSION_IS_ACTIVE</literal>
+	      to identify the session.
+            </entry>
+          </row>
         </tbody>
       </tgroup>
     </informaltable>
@@ -84,6 +120,13 @@
         HALD_SHUTDOWN
       </literal>
       is set to environment.
+      If ConsoleKit support is enabled, the variables
+      <literal>CK_SEATS</literal> (tab sep. list of seat-id's),
+      <literal>CK_SEAT_IS_LOCAL_seat-id</literal> (whether a seat is local),
+      <literal>CK_SEAT_seat-id</literal> (tab sep. list of session-id's for a seat),
+      <literal>CK_SESSION_IS_ACTIVE_session-id</literal> (whether a given session is active) and
+      <literal>CK_SESSION_UID_session-id</literal> (the user of the session)
+      will be exported as well.
     </para>
     <para>
       The HAL daemon isn't suspended while callouts are executing. Thus,
diff --git a/doc/spec/hal-spec.html b/doc/spec/hal-spec.html
index f926cbf..06b7a6d 100644
--- a/doc/spec/hal-spec.html
+++ b/doc/spec/hal-spec.html
@@ -1,800 +1,65 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN""http://www.w3.org/TR/html4/loose.dtd">
-<HTML
-><HEAD
-><TITLE
->HAL 0.5.9 Specification</TITLE
-><META
-NAME="GENERATOR"
-CONTENT="Modular DocBook HTML Stylesheet Version 1.79"></HEAD
-><BODY
-CLASS="book"
-BGCOLOR="#FFFFFF"
-TEXT="#000000"
-LINK="#0000FF"
-VLINK="#840084"
-ALINK="#0000FF"
-><DIV
-CLASS="BOOK"
-><A
-NAME="index"
-></A
-><DIV
-CLASS="TITLEPAGE"
-><H1
-CLASS="title"
-><A
-NAME="AEN2"
->HAL 0.5.9 Specification</A
-></H1
-><H3
-CLASS="author"
-><A
-NAME="AEN7"
-></A
->David Zeuthen</H3
-><DIV
-CLASS="affiliation"
-><DIV
-CLASS="address"
-><P
-CLASS="address"
-><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<CODE
-CLASS="email"
->&#60;<A
-HREF="mailto:david at fubar.dk"
->david at fubar.dk</A
->&#62;</CODE
-><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</P
-></DIV
-></DIV
-><HR></DIV
-><DIV
-CLASS="TOC"
-><DL
-><DT
-><B
->Table of Contents</B
-></DT
-><DT
->1. <A
-HREF="#introduction"
->Introduction</A
-></DT
-><DD
-><DL
-><DT
->1.1. <A
-HREF="#AEN15"
->About</A
-></DT
-><DT
->1.2. <A
-HREF="#AEN24"
->Acknowledgements</A
-></DT
-><DT
->1.3. <A
-HREF="#ov_halarch"
->Architecture of HAL</A
-></DT
-><DT
->1.4. <A
-HREF="#ov_hal_linux26"
->HAL on Linux 2.6</A
-></DT
-><DT
->1.5. <A
-HREF="#AEN84"
->Device Objects</A
-></DT
-><DT
->1.6. <A
-HREF="#device-capabilities"
->Device Capabilities</A
-></DT
-><DT
->1.7. <A
-HREF="#using-devices"
->Using devices</A
-></DT
-></DL
-></DD
-><DT
->2. <A
-HREF="#device-properties"
->Device Properties</A
-></DT
-><DD
-><DL
-><DT
->2.1. <A
-HREF="#properties-metadata"
->Metadata Properties</A
-></DT
-><DD
-><DL
-><DT
->2.1.1. <A
-HREF="#device-properties-info"
-><TT
-CLASS="literal"
->info</TT
-> namespace</A
-></DT
-><DT
->2.1.2. <A
-HREF="#device-properties-linux"
-><TT
-CLASS="literal"
->linux</TT
-> namespace</A
-></DT
-></DL
-></DD
-><DT
->2.2. <A
-HREF="#properties-bus"
->Physical Properties</A
-></DT
-><DD
-><DL
-><DT
->2.2.1. <A
-HREF="#device-properties-pci"
-><TT
-CLASS="literal"
->pci</TT
-> namespace</A
-></DT
-><DT
->2.2.2. <A
-HREF="#device-properties-serialif"
-><TT
-CLASS="literal"
->serial</TT
-> namespace</A
-></DT
-><DT
->2.2.3. <A
-HREF="#device-properties-usb"
-><TT
-CLASS="literal"
->usb_device</TT
-> namespace</A
-></DT
-><DT
->2.2.4. <A
-HREF="#device-properties-usbif"
-><TT
-CLASS="literal"
->usb</TT
-> namespace</A
-></DT
-><DT
->2.2.5. <A
-HREF="#device-properties-platform"
-><TT
-CLASS="literal"
->platform</TT
-> namespace</A
-></DT
-><DT
->2.2.6. <A
-HREF="#device-properties-ide-host"
-><TT
-CLASS="literal"
->ide_host</TT
-> namespace</A
-></DT
-><DT
->2.2.7. <A
-HREF="#device-properties-ide"
-><TT
-CLASS="literal"
->ide</TT
-> namespace</A
-></DT
-><DT
->2.2.8. <A
-HREF="#device-properties-scsi_host"
-><TT
-CLASS="literal"
->scsi_host</TT
-> namespace</A
-></DT
-><DT
->2.2.9. <A
-HREF="#device-properties-scsi"
-><TT
-CLASS="literal"
->scsi</TT
-> namespace</A
-></DT
-><DT
->2.2.10. <A
-HREF="#device-properties-ieee1394_host"
-><TT
-CLASS="literal"
->ieee1394_host</TT
-> namespace</A
-></DT
-><DT
->2.2.11. <A
-HREF="#device-properties-ieee1394_node"
-><TT
-CLASS="literal"
->ieee1394_node</TT
-> namespace</A
-></DT
-><DT
->2.2.12. <A
-HREF="#device-properties-ieee1394"
-><TT
-CLASS="literal"
->ieee1394</TT
-> namespace</A
-></DT
-><DT
->2.2.13. <A
-HREF="#device-properties-mmc_host"
-><TT
-CLASS="literal"
->mmc_host</TT
-> namespace</A
-></DT
-><DT
->2.2.14. <A
-HREF="#device-properties-mmc"
-><TT
-CLASS="literal"
->mmc</TT
-> namespace</A
-></DT
-><DT
->2.2.15. <A
-HREF="#device-properties-ccw"
-><TT
-CLASS="literal"
->ccw</TT
-> namespace</A
-></DT
-><DT
->2.2.16. <A
-HREF="#device-properties-ccwgroup"
-><TT
-CLASS="literal"
->ccwgroup</TT
-> namespace</A
-></DT
-><DT
->2.2.17. <A
-HREF="#device-properties-iucv"
-><TT
-CLASS="literal"
->iucv</TT
-> namespace</A
-></DT
-><DT
->2.2.18. <A
-HREF="#device-properties-block"
-><TT
-CLASS="literal"
->block</TT
-> namespace</A
-></DT
-><DT
->2.2.19. <A
-HREF="#device-properties-xen"
-><TT
-CLASS="literal"
->xen</TT
-> namespace</A
-></DT
-></DL
-></DD
-><DT
->2.3. <A
-HREF="#properties-functional"
->Functional Properties</A
-></DT
-><DD
-><DL
-><DT
->2.3.1. <A
-HREF="#device-properties-volume"
-><TT
-CLASS="literal"
->volume</TT
-> namespace</A
-></DT
-><DT
->2.3.2. <A
-HREF="#device-properties-kernel"
-><TT
-CLASS="literal"
->system</TT
-> namespace</A
-></DT
-><DT
->2.3.3. <A
-HREF="#device-properties-volume-disc"
-><TT
-CLASS="literal"
->volume.disc</TT
-> namespace</A
-></DT
-><DT
->2.3.4. <A
-HREF="#device-properties-storage"
-><TT
-CLASS="literal"
->storage</TT
-> namespace</A
-></DT
-><DT
->2.3.5. <A
-HREF="#device-properties-storage-cdrom"
-><TT
-CLASS="literal"
->storage.cdrom</TT
-> namespace</A
-></DT
-><DT
->2.3.6. <A
-HREF="#device-properties-net"
-><TT
-CLASS="literal"
->net</TT
-> namespace</A
-></DT
-><DT
->2.3.7. <A
-HREF="#device-properties-net-80203"
-><TT
-CLASS="literal"
->net.80203</TT
-> namespace</A
-></DT
-><DT
->2.3.8. <A
-HREF="#device-properties-net-80211"
-><TT
-CLASS="literal"
->net.80211</TT
-> namespace</A
-></DT
-><DT
->2.3.9. <A
-HREF="#device-properties-net-irda"
-><TT
-CLASS="literal"
->net.irda</TT
-> namespace</A
-></DT
-><DT
->2.3.10. <A
-HREF="#device-properties-net-80211control"
-><TT
-CLASS="literal"
->net.80211control</TT
-> namespace</A
-></DT
-><DT
->2.3.11. <A
-HREF="#device-properties-input"
-><TT
-CLASS="literal"
->input</TT
-> namespace</A
-></DT
-><DT
->2.3.12. <A
-HREF="#device-properties-pcmcia_socket"
-><TT
-CLASS="literal"
->pcmcia_socket namespace</TT
-></A
-></DT
-><DT
->2.3.13. <A
-HREF="#device-properties-printer"
-><TT
-CLASS="literal"
->printer</TT
-> namespace</A
-></DT
-><DT
->2.3.14. <A
-HREF="#device-properties-portable_audio_player"
-><TT
-CLASS="literal"
->portable_audio_player</TT
-> namespace</A
-></DT
-><DT
->2.3.15. <A
-HREF="#device-properties-alsa"
-><TT
-CLASS="literal"
->alsa</TT
-> namespace</A
-></DT
-><DT
->2.3.16. <A
-HREF="#device-properties-oss"
-><TT
-CLASS="literal"
->oss</TT
-> namespace</A
-></DT
-><DT
->2.3.17. <A
-HREF="#device-properties-camera"
-><TT
-CLASS="literal"
->camera</TT
-> namespace</A
-></DT
-><DT
->2.3.18. <A
-HREF="#device-properties-laptop-panel"
-><TT
-CLASS="literal"
->laptop_panel</TT
-> namespace</A
-></DT
-><DT
->2.3.19. <A
-HREF="#device-properties-ac_adaptor"
-><TT
-CLASS="literal"
->ac_adaptor</TT
-> namespace</A
-></DT
-><DT
->2.3.20. <A
-HREF="#device-properties-battery"
-><TT
-CLASS="literal"
->battery</TT
-> namespace</A
-></DT
-><DT
->2.3.21. <A
-HREF="#device-properties-button"
-><TT
-CLASS="literal"
->button</TT
-> namespace</A
-></DT
-><DT
->2.3.22. <A
-HREF="#device-properties-processor"
-><TT
-CLASS="literal"
->processor</TT
-> namespace</A
-></DT
-><DT
->2.3.23. <A
-HREF="#device-properties-display_device"
-><TT
-CLASS="literal"
->display_device</TT
-> namespace</A
-></DT
-><DT
->2.3.24. <A
-HREF="#device-properties-sensor"
-><TT
-CLASS="literal"
->sensor</TT
-> namespace</A
-></DT
-><DT
->2.3.25. <A
-HREF="#device-properties-power-management"
-><TT
-CLASS="literal"
->power_management</TT
-> namespace</A
-></DT
-><DT
->2.3.26. <A
-HREF="#device-properties-tape"
-><TT
-CLASS="literal"
->tape</TT
-> namespace</A
-></DT
-></DL
-></DD
-><DT
->2.4. <A
-HREF="#properties-policy"
->Policy Properties</A
-></DT
-><DD
-><DL
-><DT
->2.4.1. <A
-HREF="#device-properties-storage-policy-default"
-><TT
-CLASS="literal"
->storage.policy.default</TT
-> namespace</A
-></DT
-><DT
->2.4.2. <A
-HREF="#device-properties-storage-policy"
-><TT
-CLASS="literal"
->storage.policy</TT
-> namespace</A
-></DT
-><DT
->2.4.3. <A
-HREF="#device-properties-volume-policy"
-><TT
-CLASS="literal"
->volume.policy</TT
-> namespace</A
-></DT
-></DL
-></DD
-></DL
-></DD
-><DT
->3. <A
-HREF="#spec-device-info"
->Device Information Files</A
-></DT
-><DD
-><DL
-><DT
->3.1. <A
-HREF="#fdi-facts"
->Facts about devices</A
-></DT
-><DD
-><DL
-><DT
->3.1.1. <A
-HREF="#fdi-example-mp3player"
->Example: MP3 player</A
-></DT
-><DT
->3.1.2. <A
-HREF="#fdi-example-camera"
->Example: Digital Still Camera</A
-></DT
-><DT
->3.1.3. <A
-HREF="#fdi-example-6in1"
->Example: Card Reader</A
-></DT
-></DL
-></DD
-><DT
->3.2. <A
-HREF="#fdi-policy"
->Policy settings for devices</A
-></DT
-><DD
-><DL
-><DT
->3.2.1. <A
-HREF="#fdi-example-mountsetting"
->Storage Devices</A
-></DT
-></DL
-></DD
-></DL
-></DD
-><DT
->4. <A
-HREF="#examples"
->Examples and other stuff</A
-></DT
-><DD
-><DL
-><DT
->4.1. <A
-HREF="#callouts"
->Callouts</A
-></DT
-><DT
->4.2. <A
-HREF="#dbus-api"
->D-BUS Network API</A
-></DT
-><DD
-><DL
-><DT
->4.2.1. <A
-HREF="#AEN4339"
->Interface org.freedesktop.Hal.Manager</A
-></DT
-><DT
->4.2.2. <A
-HREF="#AEN4358"
->Interface org.freedesktop.Hal.Device</A
-></DT
-><DT
->4.2.3. <A
-HREF="#AEN4367"
->Interface org.freedesktop.Hal.Device.Volume</A
-></DT
-><DT
->4.2.4. <A
-HREF="#AEN4371"
->Interface org.freedesktop.Hal.Device.Storage</A
-></DT
-></DL
-></DD
-><DT
->4.3. <A
-HREF="#enforcing-policy"
->Enforcing Policy</A
-></DT
-><DD
-><DL
-><DT
->4.3.1. <A
-HREF="#enforcing-stor-vol"
->Storage Devices</A
-></DT
-></DL
-></DD
-></DL
-></DD
-></DL
-></DIV
-><DIV
-CLASS="chapter"
-><HR><H1
-><A
-NAME="introduction"
-></A
->Chapter 1. Introduction</H1
-><DIV
-CLASS="sect1"
-><H2
-CLASS="sect1"
-><A
-NAME="AEN15"
->1.1. About</A
-></H2
-><P
->&#13;      This document concerns the specification of HAL which is a
+HAL 0.5.9 SpecificationVersion 0.5.9May 9th, 2006DavidZeuthen
+            david at fubar.dk
+          IntroductionAbout
+      This document concerns the specification of HAL which is a
       piece of software that provides a view of the various hardware
       attached to a system. In addition to this, HAL keeps detailed
       metadata for each piece of hardware and provide hooks such
       that system- and desktop-level software can react to changes
       in the hardware configuration in order to maintain system
       policy.
-    </P
-><P
->&#13;      HAL represents a piece of hardware as a <SPAN
-CLASS="emphasis"
-><I
-CLASS="emphasis"
->device object</I
-></SPAN
->.
+    
+      HAL represents a piece of hardware as a device object.
       A device object is identified by a unique identifer and carries a set of
-      key/value paris referred to as <SPAN
-CLASS="emphasis"
-><I
-CLASS="emphasis"
->device properties</I
-></SPAN
->.
+      key/value paris referred to as device properties.
       Some properties are derived from the actual hardware, some are merged
-      from <SPAN
-CLASS="emphasis"
-><I
-CLASS="emphasis"
->device information files</I
-></SPAN
->
+      from device information files
       and some are related to the
       actual device configuration. This document specifies the set
       of device properties and gives them well-defined meaning. This
       enable system and desktop level components to distinguish
       between the different device objects and discover and
       configure devices based on these properties.
-    </P
-><P
->&#13;      HAL provides an easy-to-use API through D-BUS which is an IPC
+    
+      HAL provides an easy-to-use API through D-BUS which is an IPC
       framework that, among other things, provides a system-wide
       message-bus that allows applications to talk to one
       another. Specifically, D-BUS provides asynchronous
       notification such that HAL can notify other peers on the
       message-bus when devices are added and removed as well as when
       properties on a device are changing.
-    </P
-><P
->&#13;      The most important goal of HAL is to provide plug-and-play
+    
+      The most important goal of HAL is to provide plug-and-play
       facilities for UNIX-like desktops with focus on providing a
       rich and extensible description of device characteristics and
       features. HAL has no other major dependencies apart from D-BUS
       which, given sufficient infrastructure, allows it to be
       implemented on many UNIX-like systems. The major focus,
       initially, is systems running the Linux 2.6 series kernels.
-    </P
-></DIV
-><DIV
-CLASS="sect1"
-><HR><H2
-CLASS="sect1"
-><A
-NAME="AEN24"
->1.2. Acknowledgements</A
-></H2
-><P
->&#13;      Havoc Pennington's article
-      <A
-HREF="http://www.ometer.com/hardware.html"
-TARGET="_top"
->''Making Hardware Just Work''
-      </A
->
+    Acknowledgements
+      Havoc Pennington's article
+      ''Making Hardware Just Work''
+      
       motivated this work. The specification and software would not exist
       without all the useful ideas, suggestions, comments and patches
       from the
-      <A
-HREF="http://freedesktop.org/mailman/listinfo/xdg"
-TARGET="_top"
->Free Desktop</A
-> and
-      <A
-HREF="http://freedesktop.org/mailman/listinfo/hal"
-TARGET="_top"
->HAL</A
->
+      Free Desktop and
+      HAL
       mailing lists.
-    </P
-><P
->&#13;      All trademarks mentioned belong to their respective owners.
-    </P
-></DIV
-><DIV
-CLASS="sect1"
-><HR><H2
-CLASS="sect1"
-><A
-NAME="ov_halarch"
->1.3. Architecture of HAL</A
-></H2
-><P
->&#13;      The HAL consists of a number of components as outlined in the
+    
+      All trademarks mentioned belong to their respective owners.
+    Architecture of HAL
+      The HAL consists of a number of components as outlined in the
       diagram below. Note that this diagram is high-level and doesn't
       capture implementation details.
-    </P
-><P
->&#13;      <IMG
-SRC="hal-arch.png">
-    </P
-><P
->&#13;      Details on each component
-      <P
-></P
-><UL
-><LI
-><P
->&#13;            <SPAN
-CLASS="emphasis"
-><I
-CLASS="emphasis"
->HAL daemon</I
-></SPAN
->
-          </P
-><P
->&#13;            A system-wide daemon that maintains a persistent database of
+    
+      
+    
+      Details on each component
+      
+            HAL daemon
+          
+            A system-wide daemon that maintains a persistent database of
             device objects. The daemon is also responsible for merging
             information from the device information file repository and
             managing the life cycle of device objects. The HAL daemon
@@ -803,20 +68,10 @@ CLASS="emphasis"
             networking and storage devices). The HAL daemon notifies system
             level components through callouts and session level
             components using the D-BUS interface.
-          </P
-></LI
-><LI
-><P
->&#13;            <SPAN
-CLASS="emphasis"
-><I
-CLASS="emphasis"
->Applications</I
-></SPAN
->
-          </P
-><P
->&#13;            This represents the end consumers of the HAL and comprises
+          
+            Applications
+          
+            This represents the end consumers of the HAL and comprises
             both applications that need to search for a device, but
             also (existing) device specific libraries and/or services
             that provide access to devices. Specifically, the
@@ -824,9 +79,8 @@ CLASS="emphasis"
             (the special device file or other details), of the device
             through HAL, to interact with the device through the
             kernel as usual.
-          </P
-><P
->&#13;            In addition, this group include desktop environments such
+          
+            In addition, this group include desktop environments such
             as GNOME or KDE. Specifically, using HAL, desktop
             environments may include session-level daemons enforcing
             certain policies when the device database managed by the
@@ -836,173 +90,71 @@ CLASS="emphasis"
             information files for a new device, displaying link status
             information about network devices, mounting removable
             storage and so on.
-          </P
-><P
->&#13;            Note that several desktop sessions may be active on the
+          
+            Note that several desktop sessions may be active on the
             same system; it is the responsibility of session-level
             software to arbitrate the device access between sessions.
-          </P
-></LI
-><LI
-><P
->&#13;            <SPAN
-CLASS="emphasis"
-><I
-CLASS="emphasis"
->Callouts</I
-></SPAN
->
-          </P
-><P
->&#13;            Callouts are programs invoked when the device object list
+          
+            Callouts
+          
+            Callouts are programs invoked when the device object list
             is modified  As such, callouts can be used to maintain
             system-wide policy (that may be specific to the particular
             OS) such as changing permissions on device nodes, updating
-            the systemwide <TT
-CLASS="literal"
->/etc/fstab</TT
-> file or
+            the systemwide /etc/fstab file or
             configuring the networking subsystem.
-          </P
-></LI
-></UL
->
-    </P
-><P
->&#13;      The HAL uses D-BUS to provide a ''network API'' to
+          
+    
+      The HAL uses D-BUS to provide a ''network API'' to
       applications. As D-BUS is designed to be language independent,
       potentially many languages / runtime systems will be able to
       easily access the services offered by HAL. The D-BUS API is
-      detailed in <A
-HREF="#dbus-api"
->Section 4.2</A
->
+      detailed in 
       .
       Note that HAL doesn't
       enforce any policy at all, this is left for desktop environments
       and operating systems vendors to implement.  However, to ensure
       interoperability between operating systems and desktop
       environments, recommendations and best practises on how to
-      enforce policy is discussed in <A
-HREF="#enforcing-policy"
->Section 4.3</A
->
+      enforce policy is discussed in 
       .
-    </P
-></DIV
-><DIV
-CLASS="sect1"
-><HR><H2
-CLASS="sect1"
-><A
-NAME="ov_hal_linux26"
->1.4. HAL on Linux 2.6</A
-></H2
-><P
->&#13;      On a Linux 2.6 system HAL is implemented as shown in the diagram
+    HAL on Linux 2.6
+      On a Linux 2.6 system HAL is implemented as shown in the diagram
       below:
-    </P
-><P
->&#13;      <IMG
-SRC="hal-linux26.png">
-    </P
-><P
->&#13;      Highlights
-      <P
-></P
-><UL
-><LI
-><P
->&#13;            HAL depends on the <TT
-CLASS="literal"
->udev</TT
-> and
-            <TT
-CLASS="literal"
->linux-hotplug</TT
-> packages
-          </P
-></LI
-><LI
-><P
->&#13;            The diagram shows an example callout program,
-            <TT
-CLASS="literal"
->fstab-sync</TT
->, that creates/destroys
-            mount points and modifies the <TT
-CLASS="literal"
->/etc/fstab</TT
->
+    
+      
+    
+      Highlights
+      
+            HAL depends on the udev and
+            linux-hotplug packages
+          
+            The diagram shows an example callout program,
+            fstab-sync, that creates/destroys
+            mount points and modifies the /etc/fstab
             file accordingly whenever storage devices are added or
             removed.
-          </P
-></LI
-><LI
-><P
->&#13;            A session-level daemon, <TT
-CLASS="literal"
->*-volume-manager</TT
->,
+          
+            A session-level daemon, *-volume-manager,
             for mounting storage devices is shown. This piece of software
-            depends on a properly updated <TT
-CLASS="literal"
->/etc/fstab</TT
->
-            file and a setuid <TT
-CLASS="literal"
->mount(1)</TT
-> binary that
+            depends on a properly updated /etc/fstab
+            file and a setuid mount(1) binary that
             allows an unprivileged user to mount devices marked with option
-            <TT
-CLASS="literal"
->user</TT
-> in the <TT
-CLASS="literal"
->/etc/fstab</TT
-> file.
-          </P
-></LI
-><LI
-><P
->&#13;            The <TT
-CLASS="literal"
->fstab-sync</TT
-> and
-            <TT
-CLASS="literal"
->*-volume-manager</TT
-> programs are only
+            user in the /etc/fstab file.
+          
+            The fstab-sync and
+            *-volume-manager programs are only
             examples on how to enforce policy and are not part of HAL
             proper.  An OS vendor may choose to enforce policy in a
             different way e.g. he might want to ignore the
-            <TT
-CLASS="literal"
->/etc/fstab</TT
-> file and mount storage volumes
+            /etc/fstab file and mount storage volumes
             in the callout, run a daemon with sufficient privileges
             or use another setuid mount wrapper.
-            See <A
-HREF="#enforcing-policy"
->Section 4.3</A
->
+            See 
             for more details.
-          </P
-></LI
-></UL
->
-    </P
-></DIV
-><DIV
-CLASS="sect1"
-><HR><H2
-CLASS="sect1"
-><A
-NAME="AEN84"
->1.5. Device Objects</A
-></H2
-><P
->&#13;      It is important to precisely define the term HAL device
+          
+    Device Objects
+      It is important to precisely define the term HAL device
       object. It's actually a bit blurry to define in general, it
       includes what most UNIX-like systems consider first class
       objects when it comes to hardware. In particular, a device
@@ -1019,9 +171,8 @@ NAME="AEN84"
       between device objects and the actual iron constituting what
       users normally understand as a single piece of hardware;
       a device object represents the smallest addressable unit.
-    </P
-><P
->&#13;      Device objects in HAL are organised on a by-connection basis,
+    
+      Device objects in HAL are organised on a by-connection basis,
       e.g. for a given device object X it is possible to find the
       device object Y where X is attached to Y. This gives structure
       to the device database of HAL; it is possible to map the
@@ -1033,244 +184,113 @@ NAME="AEN84"
       objects are not referenced anywhere in the device objects that
       users are interested in; they are merely used as glue to build
       the device tree.
-    </P
-><P
->&#13;      In addition to provide information about what kind of hardware
+    
+      In addition to provide information about what kind of hardware
       a device object represents (such as a PCI or USB device) and
       how to address it, HAL merges information about the functional
       interfaces the OS kernel provides in order to use the device;
       in most cases this is represented on the device object as a
       string property with the name of the special device file in
-      <TT
-CLASS="literal"
->/dev</TT
->. In addition to the special device
+      /dev. In addition to the special device
       file, a number of other useful properties are merged. This
       means that both hardware and functional properties are on the
       same device object, which is very useful for an application
       programmer. For example, an application might query HAL for
       the device object that exports the special device file
-      <TT
-CLASS="literal"
->/dev/input/mouse2</TT
-> and learn that this is
+      /dev/input/mouse2 and learn that this is
       provide by an USB mouse from a certain manufacturer by
       checking the properties that export the USB vendor and product
-      identifiers.  See <A
-HREF="#device-capabilities"
->Section 1.6</A
->
+      identifiers.  See 
       and
-      <A
-HREF="#device-properties"
->Chapter 2</A
->
+      
       for details.
-    </P
-><P
->&#13;      On a formal level, a device object is comprised by
-    </P
-><P
-></P
-><UL
-><LI
-><P
->&#13;          <SPAN
-CLASS="emphasis"
-><I
-CLASS="emphasis"
->UDI</I
-></SPAN
->
-        </P
-><P
->&#13;          This is an identifier, the Unique Device Identifer, that is
+    
+      On a formal level, a device object is comprised by
+    
+          UDI
+        
+          This is an identifier, the Unique Device Identifer, that is
           unique for a device object - that is, no other device object
           can have the same UDI at the same time.  The UDI is computed
           using bus-specific information and is meant to be unique
           across device insertions and independent of the physical
           port or slot the device may be plugged into.
-        </P
-></LI
-><LI
-><P
->&#13;          <SPAN
-CLASS="emphasis"
-><I
-CLASS="emphasis"
->Properties</I
-></SPAN
->
-        </P
-><P
->&#13;          Each device object got a set of properties which are
+        
+          Properties
+        
+          Each device object got a set of properties which are
           key/value pairs.  The key is an ASCII string while the value
           can be one of several types
-          <P
-></P
-><UL
-><LI
-><P
->&#13;                <TT
-CLASS="literal"
->string</TT
-> - UTF8 string
-              </P
-></LI
-><LI
-><P
->&#13;                <TT
-CLASS="literal"
->strlist</TT
-> - sorted list with UTF8 strings
-              </P
-></LI
-><LI
-><P
->&#13;                <TT
-CLASS="literal"
->int</TT
-> - 32-bit signed integer
-              </P
-></LI
-><LI
-><P
->&#13;                <TT
-CLASS="literal"
->uint64</TT
-> - 64-bit unsigned integer
-              </P
-></LI
-><LI
-><P
->&#13;                <TT
-CLASS="literal"
->bool</TT
-> - truth value
-              </P
-></LI
-><LI
-><P
->&#13;                <TT
-CLASS="literal"
->double</TT
-> - IEEE754 double precision
+          
+                string - UTF8 string
+              
+                strlist - sorted list with UTF8 strings
+              
+                int - 32-bit signed integer
+              
+                uint64 - 64-bit unsigned integer
+              
+                bool - truth value
+              
+                double - IEEE754 double precision
                 floating point number
-              </P
-></LI
-></UL
->
-        </P
-></LI
-></UL
-><P
->&#13;      Properties of a device object carry all the important
+              
+        
+      Properties of a device object carry all the important
       information about a device object. For organisational reasons
       properties are also namespaced using ''.'' as a separator.
-    </P
-><P
->&#13;      It can be useful to classify properties into four groups
-    </P
-><P
-></P
-><UL
-><LI
-><P
->Metadata - Information about how the devices
+    
+      It can be useful to classify properties into four groups
+    Metadata - Information about how the devices
           are connected with respect to each other
           (parent/child relationships), what kind of
           device it is, what functionality it provides
           etc.
-        </P
-></LI
-><LI
-><P
->Facts -
+        Facts -
           vendor ID, product ID, disk serial numbers,
           number of buttons on a mouse, formats accepted
           by a mp3 player and so on.
-        </P
-></LI
-><LI
-><P
->Usage specific information -
+        Usage specific information -
           Network link status, special device file name,
           filesystem mount location etc.
-        </P
-></LI
-><LI
-><P
->Policy -
+        Policy -
           How the device is to be used be users; usually
           defined by the system administrator.
-        </P
-></LI
-></UL
-><P
->&#13;      The first category is determined by HAL, the next is merged
+        
+      The first category is determined by HAL, the next is merged
       from either the hardware itself or device information files,
       the third is intercepted by monitoring the operating system
       and the last is merged from files that only the system
       administrator can edit. This specification is concerned with
-      precisely defining several properties; see <A
-HREF="#device-properties"
->Chapter 2</A
->
+      precisely defining several properties; see 
       and onwards for more
       information.  As a complement to device properties, HAL also
-      provides <SPAN
-CLASS="emphasis"
-><I
-CLASS="emphasis"
->conditions</I
-></SPAN
-> on HAL device
+      provides conditions on HAL device
       objects. Conditions are used to relay events that are
       happening on devices which are not easily expressed in
       properties. This includes events such as ''processor is
       overheating'' or ''block device unmounted''.
-    </P
-><P
->&#13;      There is a special hal device object referred to as the ''root
+    
+      There is a special hal device object referred to as the ''root
       computer device object''. This device object represent the
       entire system as a whole and all other devices are either
       directly or indirectly childs of this device object. It has
       the
-      UDI <TT
-CLASS="literal"
->/org/freedesktop/Hal/devices/computer</TT
->.
-    </P
-><P
->&#13;      The fundamental idea about HAL is that all ''interesting''
+      UDI /org/freedesktop/Hal/devices/computer.
+    
+      The fundamental idea about HAL is that all ''interesting''
       information about hardware that a desktop application needs,
       can be obtained by querying HAL. Below is a screenshot of a
       simple device manager application shipped with HAL
-      called <TT
-CLASS="literal"
->hal-device-manager</TT
->.  This
+      called hal-device-manager.  This
       application is communicating with the HAL daemon and displays
       the tree of device objects. The shown properties are for a
       device object representing a harddisk.
-    </P
-><P
->&#13;      <IMG
-SRC="hal-devices1.png">
-    </P
-><P
->&#13;    </P
-></DIV
-><DIV
-CLASS="sect1"
-><HR><H2
-CLASS="sect1"
-><A
-NAME="device-capabilities"
->1.6. Device Capabilities</A
-></H2
-><P
->&#13;      Mainstream hardware isn't very good at reporting what they are,
+    
+      
+    
+    Device Capabilities
+      Mainstream hardware isn't very good at reporting what they are,
       they only report, at best, how to interact with them. This is a
       problem; many devices, such as MP3 players or digital still
       cameras, appear to the operating system as plain USB Mass
@@ -1278,46 +298,20 @@ NAME="device-capabilities"
       that. The core of the problem is that without external
       metadata, the operating system and desktop environment will
       present it to the user as just e.g. a mass storage device.
-    </P
-><P
->&#13;      As HAL is concerned with merging of external metadata, through
+    
+      As HAL is concerned with merging of external metadata, through
       e.g. device information files, there needs to be some scheme on
       how to record what the device actually is. This is achieved by
-      two textual properties, <TT
-CLASS="literal"
->info.category</TT
-> and
-      <TT
-CLASS="literal"
->info.capabilities</TT
->. The former describes
-      <SPAN
-CLASS="emphasis"
-><I
-CLASS="emphasis"
->what the device is</I
-></SPAN
-> (as a single
+      two textual properties, info.category and
+      info.capabilities. The former describes
+      what the device is (as a single
       alphanumeric keyword) and the latter describes
-      <SPAN
-CLASS="emphasis"
-><I
-CLASS="emphasis"
->what the device does</I
-></SPAN
-> (as a number of
+      what the device does (as a number of
       alphanumeric keywords separated by whitespace). The keywords
       available for use is defined in this document; we'll refer to
-      them in following simply as <SPAN
-CLASS="emphasis"
-><I
-CLASS="emphasis"
->capabilities</I
-></SPAN
->.
-    </P
-><P
->&#13;      HAL itself, assigns capabilities on device detection time by
+      them in following simply as capabilities.
+    
+      HAL itself, assigns capabilities on device detection time by
       inspecting the device class (if available, it depends on the
       bus type) and looking at information from the operating system
       (most OS'es have a concept of device classes). At this time the
@@ -1326,18 +320,16 @@ CLASS="emphasis"
       overridden by either device information files or callouts. This
       gives maximum flexibility, while maintaining a base level of
       capability detection.
-    </P
-><P
->&#13;      The idea of HAL is that existing device capability specific
+    
+      The idea of HAL is that existing device capability specific
       libraries (such as libghoto2), would advertise what kind of HAL
       capabilities they are able to handle. As this happens over
       time, this specification will grow to precisely define what a
       device with a given capability is supposed to do and what
       library, or service, the application programmer can use to
       access the device.
-    </P
-><P
->&#13;      Having a capability also means that part of the property
+    
+      Having a capability also means that part of the property
       namespace, prefixed with the capability name, will be populated
       with more specific information about the capability. Indeed,
       some properties may even be required such that applications and
@@ -1347,4019 +339,659 @@ CLASS="emphasis"
       support recording of audio, and how to interact with the
       device. For example, the latter may specify ''USB Storage
       Device'' or ''proprietary protocol, use libfooplayer''.
-    </P
-><P
->&#13;      Just as device objects can appear and disappear at any time
+    
+      Just as device objects can appear and disappear at any time
       (e.g. when a device is plugged in respectively removed),
       capabilities can also appear and disappear - one example of
       this happening is when device drivers are loaded and unloaded.
-    </P
-><P
->&#13;      Finally, capabilities have an inheritance scheme, e.g. if a device
-      has a capability <TT
-CLASS="literal"
->foo.bar</TT
->, it must also have
-      the capability <TT
-CLASS="literal"
->foo</TT
->.
-    </P
-></DIV
-><DIV
-CLASS="sect1"
-><HR><H2
-CLASS="sect1"
-><A
-NAME="using-devices"
->1.7. Using devices</A
-></H2
-><P
->&#13;      While the HAL daemon provides generic operations that apply to
+    
+      Finally, capabilities have an inheritance scheme, e.g. if a device
+      has a capability foo.bar, it must also have
+      the capability foo.
+    Using devices
+      While the HAL daemon provides generic operations that apply to
       all devices (though some may be no-ops), HAL is not concerned
       with providing non-generic device operations. Specifically, one
       goal of HAL is to integrate with existing and future libraries
       that target a specific class of devices such as cameras or mp3
       players.
-    </P
-><P
->&#13;      For instance, <TT
-CLASS="literal"
->libgphoto2</TT
-> could be extended
+    
+      For instance, libgphoto2 could be extended
       such that the application programmer can simply pass the UDI of
       the camera he wishes to interact with
-      and <TT
-CLASS="literal"
->libghoto2</TT
-> would then, via D-BUS, acquire
+      and libghoto2 would then, via D-BUS, acquire
       the bus-specific information required, the address so to speak,
       from the HAL daemon, and then interact directly with the
       hardware.
-    </P
-><P
->&#13;      Another option is to use the existing API of the device library
+    
+      Another option is to use the existing API of the device library
       to discover devices (the library would be using HAL under the
       hood) and provide a function to retrieve the HAL UDI of the
       device. When the library is built without HAL support this
-      function returns <TT
-CLASS="literal"
->NULL</TT
->, however, when the UDI
+      function returns NULL, however, when the UDI
       is available, then applications using the library can use the
       UDI both as stable reference to the device and also to extract
       more information directly from the HAL daemon.
-    </P
-></DIV
-></DIV
-><DIV
-CLASS="chapter"
-><HR><H1
-><A
-NAME="device-properties"
-></A
->Chapter 2. Device Properties</H1
-><P
->&#13;    Properties are arranged in a namespaces using ''.'' as a separator
+    Device Properties
+    Properties are arranged in a namespaces using ''.'' as a separator
     and are key/value pairs. The value may assume different types; currently
     int32, double, bool, UTF8 strings and UTF8 string lists are supported.
     The key of a property is always an ASCII string without any whitespace.
     The properties are updated in real-time.
-  </P
-><DIV
-CLASS="sect1"
-><HR><H2
-CLASS="sect1"
-><A
-NAME="properties-metadata"
->2.1. Metadata Properties</A
-></H2
-><P
->&#13;      The section represents properties that aren't tied to either
+  Metadata Properties
+      The section represents properties that aren't tied to either
       physical or functional characteristics of what the device
       object represents.
-    </P
-><DIV
-CLASS="sect2"
-><HR><H3
-CLASS="sect2"
-><A
-NAME="device-properties-info"
->2.1.1. <TT
-CLASS="literal"
->info</TT
-> namespace</A
-></H3
-><P
->&#13;        The <TT
-CLASS="literal"
->info</TT
-> namespace contain properties that
+    
+        info namespace
+      
+        The info namespace contain properties that
         can be considered metadata about device objects. These
         properties are always available.
-      </P
-><DIV
-CLASS="informaltable"
-><P
-></P
-><A
-NAME="AEN178"
-></A
-><TABLE
-BORDER="1"
-CLASS="CALSTABLE"
-><COL><COL><THEAD
-><TR
-><TH
->Key (type)</TH
-><TH
->Values</TH
-><TH
->Mandatory</TH
-><TH
->Description</TH
-></TR
-></THEAD
-><TBODY
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->info.bus</TT
-> (string)
-              </TD
-><TD
->pci, usb, ide_host, ide, block, usb, usbif, scsi_host, scsi</TD
-><TD
->Yes</TD
-><TD
->Describes what ''physical'' bus the device is connected to</TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->info.udi</TT
-> (string)
-              </TD
-><TD
->example: /org/freedesktop/Hal/devices/pci_10ec_8139</TD
-><TD
->Yes</TD
-><TD
->The HAL unique device id</TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->info.persistent</TT
-> (bool)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->&#13;                No, but required if <TT
-CLASS="literal"
->info.not_available</TT
-> is set to TRUE
-              </TD
-><TD
->If this property is set, the device will remain in the
+      Key (type)ValuesMandatoryDescription
+                info.subsystem (string)
+              pci, usb, ide_host, ide, block, usb, usbif, scsi_host, scsiYesDescribes what subsystem the device is connected to
+                info.udi (string)
+              example: /org/freedesktop/Hal/devices/pci_10ec_8139YesThe HAL unique device id
+                info.persistent (bool)
+              
+                No, but required if info.not_available is set to TRUE
+              If this property is set, the device will remain in the
                 the GDL even if the device is unplugged. NOTE: property not implemented yet
-              </TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->info.not_available</TT
-> (bool)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->No</TD
-><TD
->The device is currently not available (it may be unplugged
+              
+                info.not_available (bool)
+              NoThe device is currently not available (it may be unplugged
                 or powered down) NOTE: property not implemented yet
-              </TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->info.capabilities</TT
-> (strlist)
-              </TD
-><TD
->example: 'block, storage, storage.cdrom'</TD
-><TD
->No</TD
-><TD
->A string list of capabilities describing what the devices does</TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->info.category</TT
-> (string)
-              </TD
-><TD
->example: storage.cdrom</TD
-><TD
->No</TD
-><TD
->The prominent capability describing what the device is</TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->info.product</TT
-> (string)
-              </TD
-><TD
->examples: ''SleekKeyboard'', ''MouseMan 2003'', ''Volume'', ''LS-120 SLIM3 00 UHD Floppy''</TD
-><TD
->No</TD
-><TD
->The name of the device</TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->info.vendor</TT
-> (string)
-              </TD
-><TD
->examples: Logitch, Mustek</TD
-><TD
->No</TD
-><TD
->The name of the vendor of the device</TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->info.parent</TT
-> (string)
-              </TD
-><TD
->example: /org/freedesktop/Hal/devices/ide_1_0</TD
-><TD
->Yes, for all non-root device objects</TD
-><TD
->The UDI of the device object that this device object
+              
+                info.capabilities (strlist)
+              example: 'block, storage, storage.cdrom'NoA string list of capabilities describing what the devices does
+                info.category (string)
+              example: storage.cdromNoThe prominent capability describing what the device is
+                info.product (string)
+              examples: ''SleekKeyboard'', ''MouseMan 2003'', ''Volume'', ''LS-120 SLIM3 00 UHD Floppy''NoThe name of the device
+                info.vendor (string)
+              examples: Logitch, MustekNoThe name of the vendor of the device
+                info.parent (string)
+              example: /org/freedesktop/Hal/devices/ide_1_0Yes, for all non-root device objectsThe UDI of the device object that this device object
                 is connected to.
-              </TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->info.locked</TT
-> (bool)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->No</TD
-><TD
->&#13;                If this property is available and set
-                to <TT
-CLASS="literal"
->TRUE</TT
-> it means that a process
+              
+                info.locked (bool)
+              No
+                If this property is available and set
+                to TRUE it means that a process
                 is using the device that the hal device object in
                 question represents and no other process should attempt
                 to use or configure the device. The lock is only
                 advisory.
-              </TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->info.locked.reason</TT
-> (string)
-              </TD
-><TD
->&#13;                example: ''The optical drive is currently being used to
+              
+                info.locked.reason (string)
+              
+                example: ''The optical drive is currently being used to
                 record a CD-RW disc.''
-              </TD
-><TD
->&#13;                Only available if <TT
-CLASS="literal"
->info.locked</TT
-> is set
-                to <TT
-CLASS="literal"
->TRUE</TT
->.
-              </TD
-><TD
->A localized text suitable for UI display</TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->info.locked.dbus_service</TT
-> (string)
-              </TD
-><TD
->example: :1.278</TD
-><TD
->&#13;                Only available if <TT
-CLASS="literal"
->info.locked</TT
-> is set
-                to <TT
-CLASS="literal"
->TRUE</TT
->.
-              </TD
-><TD
->The base D-BUS service of the process holding the lock.</TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->info.is_recalled</TT
-> (bool)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->No</TD
-><TD
->&#13;                This is set if the hardware may be recalled and should
+              
+                Only available if info.locked is set
+                to TRUE.
+              A localized text suitable for UI display
+                info.locked.dbus_service (string)
+              example: :1.278
+                Only available if info.locked is set
+                to TRUE.
+              The base D-BUS service of the process holding the lock.
+                info.is_recalled (bool)
+              No
+                This is set if the hardware may be recalled and should
                 be checked for any potential problem.
-              </TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->info.recall.vendor</TT
-> (string)
-              </TD
-><TD
->Dell, Sony, HP, Panasonic, etc.</TD
-><TD
->Yes, if <TT
-CLASS="literal"
->info.is_recalled</TT
-> is TRUE</TD
-><TD
->&#13;                The vendor responsible for the hardware recall.
-              </TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->info.recall.website_url</TT
-> (string)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->Yes, if <TT
-CLASS="literal"
->info.is_recalled</TT
-> is TRUE</TD
-><TD
->&#13;                Users should check this website for more details and if their
+              
+                info.recall.vendor (string)
+              Dell, Sony, HP, Panasonic, etc.Yes, if info.is_recalled is TRUE
+                The vendor responsible for the hardware recall.
+              
+                info.recall.website_url (string)
+              Yes, if info.is_recalled is TRUE
+                Users should check this website for more details and if their
                 hardware may affected by any possible fault.
-              </TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><DIV
-CLASS="sect2"
-><HR><H3
-CLASS="sect2"
-><A
-NAME="device-properties-linux"
->2.1.2. <TT
-CLASS="literal"
->linux</TT
-> namespace</A
-></H3
-><P
->&#13;        This namespace is used to store Linux-specific metadata about the
+              
+        linux namespace
+      
+        This namespace is used to store Linux-specific metadata about the
         device object and is only available on Linux systems.
-      </P
-><DIV
-CLASS="informaltable"
-><P
-></P
-><A
-NAME="AEN289"
-></A
-><TABLE
-BORDER="1"
-CLASS="CALSTABLE"
-><COL><COL><THEAD
-><TR
-><TH
->Key (type)</TH
-><TH
->Values</TH
-><TH
->Mandatory</TH
-><TH
->Description</TH
-></TR
-></THEAD
-><TBODY
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->linux.sysfs_path</TT
-> (string)
-              </TD
-><TD
->examples: /sys/block/sda/sda1, /sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0</TD
-><TD
->Yes (only if available for the device) </TD
-><TD
->A fully-qualified path into the sysfs filesystem for the
-                physical device
-              </TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->linux.acpi_path</TT
-> (string)
-              </TD
-><TD
->example: /proc/acpi/button/power/PWRF, /proc/pmu/battery_0</TD
-><TD
->No</TD
-><TD
->&#13;                A fully-qualified path into the procfs filesystem for a
+      Key (type)ValuesMandatoryDescription
+                linux.sysfs_path (string)
+              examples: /sys/block/sda/sda1, /sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0Yes (only if available for the device) A fully-qualified path into the sysfs filesystem for the
+                device
+              
+                linux.acpi_path (string)
+              example: /proc/acpi/button/power/PWRF, /proc/pmu/battery_0No
+                A fully-qualified path into the procfs filesystem for a
                 device object representing an ACPI abstraction.
-              </TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->linux.driver</TT
-> (string)
-              </TD
-><TD
->examples: agpgart-intel, yenta_cardbus, usb, hub, usbhid</TD
-><TD
->No</TD
-><TD
->Name of the driver bound to this device</TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->linux.kernel_devname</TT
-> (string)
-              </TD
-><TD
->example: usb-0000:00:07.2-1.2</TD
-><TD
->No</TD
-><TD
->A name used internally in the Linux kernel to identify
+              
+                linux.driver (string)
+              examples: agpgart-intel, yenta_cardbus, usb, hub, usbhidNoName of the driver bound to this device
+                linux.kernel_devname (string)
+              example: usb-0000:00:07.2-1.2NoA name used internally in the Linux kernel to identify
                 the device. Used internally in HAL.
-              </TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->linux.is_selinux_enabled</TT
-> (bool)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->No; can only appear on the root computer device object</TD
-><TD
->Whether SELinux is enabled on the system</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-><P
->&#13;      </P
-></DIV
-></DIV
-><DIV
-CLASS="sect1"
-><HR><H2
-CLASS="sect1"
-><A
-NAME="properties-bus"
->2.2. Physical Properties</A
-></H2
-><P
->&#13;      In this section properties for device objects that represent
-      physically addressable hardware is described. Availability of
-      these depends on the value of the <TT
-CLASS="literal"
->info.bus</TT
->
+              
+                linux.is_selinux_enabled (bool)
+              No; can only appear on the root computer device objectWhether SELinux is enabled on the system
+      Properties
+      In this section properties for device objects that represent
+      addressable hardware is described. Availability of
+      these depends on the value of the info.subsystem
       property.  These properties are not of particular interest to
       application developers, instead they are useful for libraries
       and userspace drivers that needs to interact with the device
-      given a UDI. Knowledge of various bus interconnect
+      given a UDI. Knowledge of various subsystem-specific
       technologies is assumed for this section to be useful.
-    </P
-><DIV
-CLASS="sect2"
-><HR><H3
-CLASS="sect2"
-><A
-NAME="device-properties-pci"
->2.2.1. <TT
-CLASS="literal"
->pci</TT
-> namespace</A
-></H3
-><P
->&#13;        This namespace contains properties for device objects representing
+    
+        pci namespace
+      
+        This namespace contains properties for device objects representing
         functions on devices on a PCI bus. These properties are available
-        exactly when <TT
-CLASS="literal"
->info.bus</TT
-> equals <TT
-CLASS="literal"
->pci</TT
->.
-      </P
-><DIV
-CLASS="informaltable"
-><P
-></P
-><A
-NAME="AEN339"
-></A
-><TABLE
-BORDER="1"
-CLASS="CALSTABLE"
-><COL><COL><THEAD
-><TR
-><TH
->Key (type)</TH
-><TH
->Values</TH
-><TH
->Mandatory</TH
-><TH
->Description</TH
-></TR
-></THEAD
-><TBODY
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->pci.device_class</TT
-> (int)
-              </TD
-><TD
->example: 3</TD
-><TD
->Yes</TD
-><TD
->Device Class</TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->pci.device_subclass</TT
-> (int)
-              </TD
-><TD
->example: 0</TD
-><TD
->Yes</TD
-><TD
->PCI Device Sub Class</TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->pci.device_protocol</TT
-> (int)
-              </TD
-><TD
->example: 0</TD
-><TD
->Yes</TD
-><TD
->Device Protocol</TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->pci.product_id</TT
-> (int)
-              </TD
-><TD
->example: 0x4c4d</TD
-><TD
->Yes</TD
-><TD
->Product ID</TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->pci.vendor_id</TT
-> (int)
-              </TD
-><TD
->example: 0x1002</TD
-><TD
->Yes</TD
-><TD
->Vendor ID</TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->pci.subsys_product_id</TT
-> (int)
-              </TD
-><TD
->example: 0x009e</TD
-><TD
->Yes</TD
-><TD
->Subsystem product id</TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->pci.subsys_vendor_id</TT
-> (int)
-              </TD
-><TD
->example: 0x1028</TD
-><TD
->Yes</TD
-><TD
->Subsystem vendor id</TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->pci.linux.sysfs_path</TT
-> (string)
-              </TD
-><TD
->example: /sys/devices/pci0000:00/0000:00:01/0000:01:00.0</TD
-><TD
->Yes (only on Linux)</TD
-><TD
->&#13;                Equals <TT
-CLASS="literal"
->linux.sysfs_path</TT
->
-              </TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->pci.product</TT
-> (string)
-              </TD
-><TD
->Rage Mobility P/M AGP 2x</TD
-><TD
->No</TD
-><TD
->Name of the product per the PCI database</TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->pci.vendor</TT
-> (string)
-              </TD
-><TD
->ATI Technologies Inc</TD
-><TD
->No</TD
-><TD
->Name of the vendor per the PCI database</TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->pci.subsys_product</TT
-> (string)
-              </TD
-><TD
->Inspiron 7500</TD
-><TD
->No</TD
-><TD
->Name of the subsystem product per the PCI database</TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->pci.subsys_vendor</TT
-> (string)
-              </TD
-><TD
->Dell Computer Corporation</TD
-><TD
->No</TD
-><TD
->Name of the subsystem vendor per the PCI database</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-><P
->&#13;        (FIXME: Some key PCI information (bus, slot, port, function
+        exactly when info.subsystem equals pci.
+      Key (type)ValuesMandatoryDescription
+                pci.device_class (int)
+              example: 3YesDevice Class
+                pci.device_subclass (int)
+              example: 0YesPCI Device Sub Class
+                pci.device_protocol (int)
+              example: 0YesDevice Protocol
+                pci.product_id (int)
+              example: 0x4c4dYesProduct ID
+                pci.vendor_id (int)
+              example: 0x1002YesVendor ID
+                pci.subsys_product_id (int)
+              example: 0x009eYesSubsystem product id
+                pci.subsys_vendor_id (int)
+              example: 0x1028YesSubsystem vendor id
+                pci.linux.sysfs_path (string)
+              example: /sys/devices/pci0000:00/0000:00:01/0000:01:00.0Yes (only on Linux)
+                Equals linux.sysfs_path
+              
+                pci.product (string)
+              Rage Mobility P/M AGP 2xNoName of the product per the PCI database
+                pci.vendor (string)
+              ATI Technologies IncNoName of the vendor per the PCI database
+                pci.subsys_product (string)
+              Inspiron 7500NoName of the subsystem product per the PCI database
+                pci.subsys_vendor (string)
+              Dell Computer CorporationNoName of the subsystem vendor per the PCI database
+        (FIXME: Some key PCI information (bus, slot, port, function
         etc.) is missing here)
-      </P
-></DIV
-><DIV
-CLASS="sect2"
-><HR><H3
-CLASS="sect2"
-><A
-NAME="device-properties-serialif"
->2.2.2. <TT
-CLASS="literal"
->serial</TT
-> namespace</A
-></H3
-><P
->&#13;        Device objects that represent serial devices (e.g. /dev/ttyS* or
+      
+        serial namespace
+      
+        Device objects that represent serial devices (e.g. /dev/ttyS* or
         /dev/ttyUSB*).
-      </P
-><DIV
-CLASS="informaltable"
-><P
-></P
-><A
-NAME="AEN426"
-></A
-><TABLE
-BORDER="1"
-CLASS="CALSTABLE"
-><COL><COL><THEAD
-><TR
-><TH
->Key (type)</TH
-><TH
->Values</TH
-><TH
->Mandatory</TH
-><TH
->Description</TH
-></TR
-></THEAD
-><TBODY
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->serial.physical_device</TT
-> (string)
-              </TD
-><TD
->&#13;                example: <TT
-CLASS="literal"
->/org/freedesktop/Hal/devices/pnp_PNP0501</TT
->
-              </TD
-><TD
->Yes</TD
-><TD
->UDI of the physical device the serial device is bound to.</TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->serial.device</TT
-> (string)
-              </TD
-><TD
->example: /dev/ttyS0</TD
-><TD
->Yes</TD
-><TD
->The device node to access the OSS device.</TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->serial.port</TT
-> (int)
-              </TD
-><TD
->example: 0</TD
-><TD
->Yes</TD
-><TD
->&#13;                The port number of the device, based on the number in
-                <TT
-CLASS="literal"
->serial.device</TT
->
-              </TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->serial.type</TT
-> (string)
-              </TD
-><TD
->example: platform, usb, unknown</TD
-><TD
->Yes</TD
-><TD
->This property defines the type of the serial device.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><DIV
-CLASS="sect2"
-><HR><H3
-CLASS="sect2"
-><A
-NAME="device-properties-usb"
->2.2.3. <TT
-CLASS="literal"
->usb_device</TT
-> namespace</A
-></H3
-><P
->&#13;        For device objects representing USB devices the property
-        <TT
-CLASS="literal"
->info.bus</TT
-> will be <TT
-CLASS="literal"
->usb_device</TT
->,
+      Key (type)ValuesMandatoryDescription
+                serial.originating_device (string)
+              
+                example: /org/freedesktop/Hal/devices/pnp_PNP0501
+              YesUDI of the device the serial device is bound to.
+                serial.device (string)
+              example: /dev/ttyS0YesThe device node to access the OSS device.
+                serial.port (int)
+              example: 0Yes
+                The port number of the device, based on the number in
+                serial.device
+              
+                serial.type (string)
+              example: platform, usb, unknownYesThis property defines the type of the serial device.
+        usb_device namespace
+      
+        For device objects representing USB devices the property
+        info.subsystem will be usb_device,
         and the following properties will be available. Note that the
         corresponding USB interfaces are represented by separate
         device objects as children.
-      </P
-><DIV
-CLASS="informaltable"
-><P
-></P
-><A
-NAME="AEN467"
-></A
-><TABLE
-BORDER="1"
-CLASS="CALSTABLE"
-><COL><COL><THEAD
-><TR
-><TH
->Key (type)</TH
-><TH
->Values</TH
-><TH
->Mandatory</TH
-><TH
->Description</TH
-></TR
-></THEAD
-><TBODY
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->usb_device.bus_number</TT
-> (int)
-              </TD
-><TD
->example: 1</TD
-><TD
->Yes</TD
-><TD
->The USB bus the device is attached to</TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->usb_device.configuration_value</TT
-> (int)
-              </TD
-><TD
->example: 1</TD
-><TD
->Yes</TD
-><TD
->The current configuration the USB device is in;
+      Key (type)ValuesMandatoryDescription
+                usb_device.bus_number (int)
+              example: 1YesThe USB bus the device is attached to
+                usb_device.configuration_value (int)
+              example: 1YesThe current configuration the USB device is in;
                 starting from 1
-              </TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->usb_device.num_configurations</TT
-> (int)
-              </TD
-><TD
->example: 1</TD
-><TD
->Yes</TD
-><TD
->Number of configurations this USB device
+              
+                usb_device.num_configurations (int)
+              example: 1YesNumber of configurations this USB device
                 can assume
-              </TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->usb_device.device_class</TT
-> (int)
-              </TD
-><TD
->example: 0</TD
-><TD
->Yes</TD
-><TD
->USB Device Class</TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->usb_device.device_subclass</TT
-> (int)
-              </TD
-><TD
->example: 0</TD
-><TD
->Yes</TD
-><TD
->USB Device Sub Class</TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->usb_device.device_protocol</TT
-> (int)
-              </TD
-><TD
->example: 0</TD
-><TD
->Yes</TD
-><TD
->USB Device Protocol</TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->usb_device.is_self_powered</TT
-> (bool)
-              </TD
-><TD
->example: false</TD
-><TD
->Yes</TD
-><TD
->The device, in the current configuration, is self
+              
+                usb_device.device_class (int)
+              example: 0YesUSB Device Class
+                usb_device.device_subclass (int)
+              example: 0YesUSB Device Sub Class
+                usb_device.device_protocol (int)
+              example: 0YesUSB Device Protocol
+                usb_device.is_self_powered (bool)
+              example: falseYesThe device, in the current configuration, is self
                 powered
-              </TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->usb_device.can_wake_up</TT
-> (bool)
-              </TD
-><TD
->example: true</TD
-><TD
->Yes</TD
-><TD
->The device, in the current configuration, can wake up</TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->usb_device.max_power</TT
-> (int)
-              </TD
-><TD
->example: 98</TD
-><TD
->Yes</TD
-><TD
->Max power drain of device, in mA</TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->usb_device.num_interfaces</TT
-> (int)
-              </TD
-><TD
->example: 1</TD
-><TD
->Yes</TD
-><TD
->Number of USB Interfaces in the current configuration</TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->usb_device.num_ports</TT
-> (int)
-              </TD
-><TD
->example: 0</TD
-><TD
->Yes</TD
-><TD
->Number of ports on a hub. Zero for non-hubs</TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->usb_device.port_number</TT
-> (int)
-              </TD
-><TD
->example: 1</TD
-><TD
->Yes</TD
-><TD
->The port number on the parent hub that the device is attached to, starting from 1</TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->usb_device.speed_bcd</TT
-> (int)
-              </TD
-><TD
->examples: 0x00150, 0x01200, 0x48000</TD
-><TD
->Yes</TD
-><TD
->Speed of device, in Mbit/s, in BCD with two decimals</TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->usb_device.version_bcd</TT
-> (int)
-              </TD
-><TD
->examples: 0x0100, 0x0110, 0x0200</TD
-><TD
->Yes</TD
-><TD
->USB version of device in BCD with two decimals</TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->usb_device.level_number</TT
-> (int)
-              </TD
-><TD
->example: 2</TD
-><TD
->Yes</TD
-><TD
->Depth in physical USB tree, where the virtual root hub
+              
+                usb_device.can_wake_up (bool)
+              example: trueYesThe device, in the current configuration, can wake up
+                usb_device.max_power (int)
+              example: 98YesMax power drain of device, in mA
+                usb_device.num_interfaces (int)
+              example: 1YesNumber of USB Interfaces in the current configuration
+                usb_device.num_ports (int)
+              example: 0YesNumber of ports on a hub. Zero for non-hubs
+                usb_device.port_number (int)
+              example: 1YesThe port number on the parent hub that the device is attached to, starting from 1
+                usb_device.speed_bcd (int)
+              examples: 0x00150, 0x01200, 0x48000YesSpeed of device, in Mbit/s, in BCD with two decimals
+                usb_device.version_bcd (int)
+              examples: 0x0100, 0x0110, 0x0200YesUSB version of device in BCD with two decimals
+                usb_device.level_number (int)
+              example: 2YesDepth in USB tree, where the virtual root hub
                 is at depth 0
-              </TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->usb_device.linux.device_number</TT
-> (string)
-              </TD
-><TD
->example: 19</TD
-><TD
->Yes (only on Linux)</TD
-><TD
->USB Device Number as assigned by the Linux kernel</TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->usb_device.linux.parent_number</TT
-> (string)
-              </TD
-><TD
->example: 19</TD
-><TD
->Yes (only on Linux)</TD
-><TD
->Device number of parent device as assigned by the
+              
+                usb_device.linux.device_number (string)
+              example: 19Yes (only on Linux)USB Device Number as assigned by the Linux kernel
+                usb_device.linux.parent_number (string)
+              example: 19Yes (only on Linux)Device number of parent device as assigned by the
                 Linux kernel
-              </TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->usb_device.linux.sysfs_path</TT
-> (string)
-              </TD
-><TD
->example: /sys/devices/pci0000:00/0000:00:07.2/usb1/1-1/1-1.1</TD
-><TD
->Yes (only on Linux)</TD
-><TD
->&#13;                Equals <TT
-CLASS="literal"
->linux.sysfs_path</TT
->
-              </TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->usb_device.product_id</TT
-> (int)
-              </TD
-><TD
->example: 0x3005</TD
-><TD
->Yes</TD
-><TD
->USB Product ID</TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->usb_device.vendor_id</TT
-> (int)
-              </TD
-><TD
->example: 0x04b3</TD
-><TD
->Yes</TD
-><TD
->USB Vendor ID</TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->usb_device.device_revision_bcd</TT
-> (int)
-              </TD
-><TD
->example: 0x0100</TD
-><TD
->Yes</TD
-><TD
->Device Revision Number encoded in BCD with two decimals</TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->usb_device.serial</TT
-> (string)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->No</TD
-><TD
->A string uniquely identifying the instance
+              
+                usb_device.linux.sysfs_path (string)
+              example: /sys/devices/pci0000:00/0000:00:07.2/usb1/1-1/1-1.1Yes (only on Linux)
+                Equals linux.sysfs_path
+              
+                usb_device.product_id (int)
+              example: 0x3005YesUSB Product ID
+                usb_device.vendor_id (int)
+              example: 0x04b3YesUSB Vendor ID
+                usb_device.device_revision_bcd (int)
+              example: 0x0100YesDevice Revision Number encoded in BCD with two decimals
+                usb_device.serial (string)
+              NoA string uniquely identifying the instance
                 of the device; ie. it will be different for two devices
                 of the same type. Note that the serial number is broken
                 on some USB devices.
-              </TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->usb_device.product</TT
-> (string)
-              </TD
-><TD
->example: IBM USB HUB KEYBOARD</TD
-><TD
->No</TD
-><TD
->Name of the product per the USB ID Database</TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->usb_device.vendor</TT
-> (string)
-              </TD
-><TD
->example: IBM Corp.</TD
-><TD
->No</TD
-><TD
->Name of the vendor per the USB ID Database</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><DIV
-CLASS="sect2"
-><HR><H3
-CLASS="sect2"
-><A
-NAME="device-properties-usbif"
->2.2.4. <TT
-CLASS="literal"
->usb</TT
-> namespace</A
-></H3
-><P
->&#13;        Device objects that represent USB interfaces, ie. when
-        <TT
-CLASS="literal"
->info.bus</TT
-> assumes <TT
-CLASS="literal"
->usb</TT
->,
+              
+                usb_device.product (string)
+              example: IBM USB HUB KEYBOARDNoName of the product per the USB ID Database
+                usb_device.vendor (string)
+              example: IBM Corp.NoName of the vendor per the USB ID Database
+        usb namespace
+      
+        Device objects that represent USB interfaces, ie. when
+        info.subsystem assumes usb,
         are represented by the properties below. In addition all
-        the <TT
-CLASS="literal"
->usb_device.*</TT
-> properties from the parent
+        the usb_device.* properties from the parent
         USB device is available in this namespace but only with
-        the <TT
-CLASS="literal"
->usb</TT
-> prefix instead of
-        <TT
-CLASS="literal"
->usb_device</TT
->.
-      </P
-><DIV
-CLASS="informaltable"
-><P
-></P
-><A
-NAME="AEN630"
-></A
-><TABLE
-BORDER="1"
-CLASS="CALSTABLE"
-><COL><COL><THEAD
-><TR
-><TH
->Key (type)</TH
-><TH
->Values</TH
-><TH
->Mandatory</TH
-><TH
->Description</TH
-></TR
-></THEAD
-><TBODY
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->usb.interface.class</TT
-> (int)
-              </TD
-><TD
->example: 0x03</TD
-><TD
->Yes</TD
-><TD
->USB Class for the interface</TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->usb.interface.subclass</TT
-> (int)
-              </TD
-><TD
->example: 0x01</TD
-><TD
->Yes</TD
-><TD
->USB Sub Class for this interface</TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->usb.interface.protocol</TT
-> (int)
-              </TD
-><TD
->example: 0x01</TD
-><TD
->Yes</TD
-><TD
->USB Protocol for the interface</TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->usb.interface.number</TT
-> (int)
-              </TD
-><TD
->example: 1</TD
-><TD
->Yes</TD
-><TD
->Number of this interface, starting from zero</TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->usb.linux.sysfs_path</TT
-> (string)
-              </TD
-><TD
->example: /sys/devices/pci0000:00/0000:00:07.2/usb1/1-1/1-1.1/1-1.1:1.0</TD
-><TD
->Yes (only on Linux)</TD
-><TD
->&#13;                Equals <TT
-CLASS="literal"
->linux.sysfs_path</TT
->
-              </TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><DIV
-CLASS="sect2"
-><HR><H3
-CLASS="sect2"
-><A
-NAME="device-properties-platform"
->2.2.5. <TT
-CLASS="literal"
->platform</TT
-> namespace</A
-></H3
-><P
->&#13;        Devices that are built into the platform or present on busses that
+        the usb prefix instead of
+        usb_device.
+      Key (type)ValuesMandatoryDescription
+                usb.interface.class (int)
+              example: 0x03YesUSB Class for the interface
+                usb.interface.subclass (int)
+              example: 0x01YesUSB Sub Class for this interface
+                usb.interface.protocol (int)
+              example: 0x01YesUSB Protocol for the interface
+                usb.interface.number (int)
+              example: 1YesNumber of this interface, starting from zero
+                usb.linux.sysfs_path (string)
+              example: /sys/devices/pci0000:00/0000:00:07.2/usb1/1-1/1-1.1/1-1.1:1.0Yes (only on Linux)
+                Equals linux.sysfs_path
+              
+        platform namespace
+      
+        Devices that are built into the platform or present on busses that
         cannot be properly enumerated (e.g. ISA) are represented by device
-        objects where <TT
-CLASS="literal"
->info.bus</TT
-> equals
-        <TT
-CLASS="literal"
->platform</TT
->. These kind of devices are commonly,
+        objects where info.subsystem equals
+        platform. These kind of devices are commonly,
         somewhat incorrectly, called legacy devices.
-      </P
-><DIV
-CLASS="informaltable"
-><P
-></P
-><A
-NAME="AEN676"
-></A
-><TABLE
-BORDER="1"
-CLASS="CALSTABLE"
-><COL><COL><THEAD
-><TR
-><TH
->Key (type)</TH
-><TH
->Values</TH
-><TH
->Mandatory</TH
-><TH
->Description</TH
-></TR
-></THEAD
-><TBODY
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->platform.id</TT
-> (string)
-              </TD
-><TD
->example: serial</TD
-><TD
->Yes</TD
-><TD
->Device identification</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><DIV
-CLASS="sect2"
-><HR><H3
-CLASS="sect2"
-><A
-NAME="device-properties-ide-host"
->2.2.6. <TT
-CLASS="literal"
->ide_host</TT
-> namespace</A
-></H3
-><P
->&#13;        The <TT
-CLASS="literal"
->ide_host</TT
-> namespace is present for
-        device objects where <TT
-CLASS="literal"
->info.bus</TT
-> is set
-        to <TT
-CLASS="literal"
->ide_host</TT
->.  Such device objects represent
+      Key (type)ValuesMandatoryDescription
+                platform.id (string)
+              example: serialYesDevice identification
+        ide_host namespace
+      
+        The ide_host namespace is present for
+        device objects where info.subsystem is set
+        to ide_host.  Such device objects represent
         IDE and ATA host adaptors for harddisks and optical drives as
         found in the majority of computer systems.
-      </P
-><DIV
-CLASS="informaltable"
-><P
-></P
-><A
-NAME="AEN698"
-></A
-><TABLE
-BORDER="1"
-CLASS="CALSTABLE"
-><COL><COL><THEAD
-><TR
-><TH
->Key (type)</TH
-><TH
->Values</TH
-><TH
->Mandatory</TH
-><TH
->Description</TH
-></TR
-></THEAD
-><TBODY
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->ide_host.number</TT
-> (int)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->Yes</TD
-><TD
->A unique number identifying the IDE host adaptor</TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->ide_host.linux.sysfs_path</TT
-> (string)
-              </TD
-><TD
->example: /sys/devices/pci0000:00/0000:00:07.1/ide0</TD
-><TD
->Yes (only on Linux)</TD
-><TD
->&#13;                Equals <TT
-CLASS="literal"
->linux.sysfs_path</TT
->
-              </TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><DIV
-CLASS="sect2"
-><HR><H3
-CLASS="sect2"
-><A
-NAME="device-properties-ide"
->2.2.7. <TT
-CLASS="literal"
->ide</TT
-> namespace</A
-></H3
-><P
->&#13;        ATA and IDE drives are represented by device objects where
-        <TT
-CLASS="literal"
->info.bus</TT
-> equals <TT
-CLASS="literal"
->ide</TT
->. The
+      Key (type)ValuesMandatoryDescription
+                ide_host.number (int)
+              YesA unique number identifying the IDE host adaptor
+                ide_host.linux.sysfs_path (string)
+              example: /sys/devices/pci0000:00/0000:00:07.1/ide0Yes (only on Linux)
+                Equals linux.sysfs_path
+              
+        ide namespace
+      
+        ATA and IDE drives are represented by device objects where
+        info.subsystem equals ide. The
         following properties are available for such device objects.
-      </P
-><DIV
-CLASS="informaltable"
-><P
-></P
-><A
-NAME="AEN726"
-></A
-><TABLE
-BORDER="1"
-CLASS="CALSTABLE"
-><COL><COL><THEAD
-><TR
-><TH
->Key (type)</TH
-><TH
->Values</TH
-><TH
->Mandatory</TH
-><TH
->Description</TH
-></TR
-></THEAD
-><TBODY
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->ide.host</TT
-> (int)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->Yes</TD
-><TD
->Corresponds
-                to <TT
-CLASS="literal"
->ide_host.host_number</TT
-> of
-                the <TT
-CLASS="literal"
->ide_host</TT
-> device that is the
+      Key (type)ValuesMandatoryDescription
+                ide.host (int)
+              YesCorresponds
+                to ide_host.host_number of
+                the ide_host device that is the
                 parent of this device object
-              </TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->ide.channel</TT
-> (int)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->Yes</TD
-><TD
->Identifies the IDE channel of the host interface</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><DIV
-CLASS="sect2"
-><HR><H3
-CLASS="sect2"
-><A
-NAME="device-properties-scsi_host"
->2.2.8. <TT
-CLASS="literal"
->scsi_host</TT
-> namespace</A
-></H3
-><P
->&#13;        The <TT
-CLASS="literal"
->scsi_host</TT
-> namespace is present for
-        device objects where <TT
-CLASS="literal"
->info.bus</TT
-> is set
-        to <TT
-CLASS="literal"
->scsi_host</TT
->.  Such device objects represent
+              
+                ide.channel (int)
+              YesIdentifies the IDE channel of the host interface
+        scsi_host namespace
+      
+        The scsi_host namespace is present for
+        device objects where info.subsystem is set
+        to scsi_host.  Such device objects represent
         SCSI host adaptors for SCSI devices as found in some computer
         systems.
-      </P
-><DIV
-CLASS="informaltable"
-><P
-></P
-><A
-NAME="AEN756"
-></A
-><TABLE
-BORDER="1"
-CLASS="CALSTABLE"
-><COL><COL><THEAD
-><TR
-><TH
->Key (type)</TH
-><TH
->Values</TH
-><TH
->Mandatory</TH
-><TH
->Description</TH
-></TR
-></THEAD
-><TBODY
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->scsi_host.host</TT
-> (int)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->Yes</TD
-><TD
->A unique number identifying the SCSI host adaptor</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><DIV
-CLASS="sect2"
-><HR><H3
-CLASS="sect2"
-><A
-NAME="device-properties-scsi"
->2.2.9. <TT
-CLASS="literal"
->scsi</TT
-> namespace</A
-></H3
-><P
->&#13;        SCSI devices are represented by device objects where
-        <TT
-CLASS="literal"
->info.bus</TT
-> equals <TT
-CLASS="literal"
->scsi</TT
->.
+      Key (type)ValuesMandatoryDescription
+                scsi_host.host (int)
+              YesA unique number identifying the SCSI host adaptor
+        scsi namespace
+      
+        SCSI devices are represented by device objects where
+        info.subsystem equals scsi.
         The following properties are available for such device objects.
-      </P
-><DIV
-CLASS="informaltable"
-><P
-></P
-><A
-NAME="AEN777"
-></A
-><TABLE
-BORDER="1"
-CLASS="CALSTABLE"
-><COL><COL><THEAD
-><TR
-><TH
->Key (type)</TH
-><TH
->Values</TH
-><TH
->Mandatory</TH
-><TH
->Description</TH
-></TR
-></THEAD
-><TBODY
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->scsi.host</TT
-> (int)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->Yes</TD
-><TD
->&#13;                Corresponds to <TT
-CLASS="literal"
->scsi_host.host</TT
->
-                of the <TT
-CLASS="literal"
->scsi_host</TT
-> device that is the
+      Key (type)ValuesMandatoryDescription
+                scsi.host (int)
+              Yes
+                Corresponds to scsi_host.host
+                of the scsi_host device that is the
                 parent of this device object
-              </TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->scsi.bus</TT
-> (int)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->Yes</TD
-><TD
->SCSI channel number</TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->scsi.target</TT
-> (int)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->Yes</TD
-><TD
->SCSI identifier number</TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->scsi.lun</TT
-> (int)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->Yes</TD
-><TD
->SCSI Logical Unit Number</TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->scsi.type</TT
-> (string)
-              </TD
-><TD
->Example: disk</TD
-><TD
->Yes</TD
-><TD
->SCSI device type</TD
-></TR
-><TR
-><TD
->&nbsp;</TD
-><TD
->cdrom</TD
-><TD
->&nbsp;</TD
-><TD
->This is a SCSI cdrom device.</TD
-></TR
-><TR
-><TD
->&nbsp;</TD
-><TD
->comm</TD
-><TD
->&nbsp;</TD
-><TD
->This is a SCSI communication device.</TD
-></TR
-><TR
-><TD
->&nbsp;</TD
-><TD
->disk</TD
-><TD
->&nbsp;</TD
-><TD
->This is a SCSI disk device.</TD
-></TR
-><TR
-><TD
->&nbsp;</TD
-><TD
->medium_changer</TD
-><TD
->&nbsp;</TD
-><TD
->This is a SCSI media changer (e.g. for CD/Tape).</TD
-></TR
-><TR
-><TD
->&nbsp;</TD
-><TD
->printer</TD
-><TD
->&nbsp;</TD
-><TD
->This is a SCSI printer.</TD
-></TR
-><TR
-><TD
->&nbsp;</TD
-><TD
->processor</TD
-><TD
->&nbsp;</TD
-><TD
->This is a SCSI processor device.</TD
-></TR
-><TR
-><TD
->&nbsp;</TD
-><TD
->raid</TD
-><TD
->&nbsp;</TD
-><TD
->This is a SCSI raid device.</TD
-></TR
-><TR
-><TD
->&nbsp;</TD
-><TD
->scanner</TD
-><TD
->&nbsp;</TD
-><TD
->This is a SCSI scanner.</TD
-></TR
-><TR
-><TD
->&nbsp;</TD
-><TD
->tape</TD
-><TD
->&nbsp;</TD
-><TD
->This is a SCSI tape device.</TD
-></TR
-><TR
-><TD
->&nbsp;</TD
-><TD
->unknown</TD
-><TD
->&nbsp;</TD
-><TD
->The type of this SCSI device is unknwon.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><DIV
-CLASS="sect2"
-><HR><H3
-CLASS="sect2"
-><A
-NAME="device-properties-ieee1394_host"
->2.2.10. <TT
-CLASS="literal"
->ieee1394_host</TT
-> namespace</A
-></H3
-><P
->&#13;        Device objects with <TT
-CLASS="literal"
->info.bus</TT
-> set to
-        <TT
-CLASS="literal"
->ieee1394_host</TT
-> represent IEEE 1394 host
+              
+                scsi.bus (int)
+              YesSCSI channel number
+                scsi.target (int)
+              YesSCSI identifier number
+                scsi.lun (int)
+              YesSCSI Logical Unit Number
+                scsi.type (string)
+              Example: diskYesSCSI device typecdromThis is a SCSI cdrom device.commThis is a SCSI communication device.diskThis is a SCSI disk device.medium_changerThis is a SCSI media changer (e.g. for CD/Tape).printerThis is a SCSI printer.processorThis is a SCSI processor device.raidThis is a SCSI raid device.scannerThis is a SCSI scanner.tapeThis is a SCSI tape device.unknownThe type of this SCSI device is unknwon.
+        ieee1394_host namespace
+      
+        Device objects with info.subsystem set to
+        ieee1394_host represent IEEE 1394 host
         adaptors. The following properties are available for such
         device objects.
-      </P
-><DIV
-CLASS="informaltable"
-><P
-></P
-><A
-NAME="AEN874"
-></A
-><TABLE
-BORDER="1"
-CLASS="CALSTABLE"
-><COL><COL><THEAD
-><TR
-><TH
->Key (type)</TH
-><TH
->Values</TH
-><TH
->Mandatory</TH
-><TH
->Description</TH
-></TR
-></THEAD
-><TBODY
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->ieee1394_host.is_busmgr</TT
-> (bool)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->Yes</TD
-><TD
->TODO</TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->ieee1394_host.is_irn</TT
-> (bool)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->Yes</TD
-><TD
->TODO</TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->ieee1394_host.is_root</TT
-> (bool)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->Yes</TD
-><TD
->TODO</TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->ieee1394_host.node_count</TT
-> (int)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->Yes</TD
-><TD
->TODO</TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->ieee1394_host.nodes_active</TT
-> (int)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->Yes</TD
-><TD
->TODO</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><DIV
-CLASS="sect2"
-><HR><H3
-CLASS="sect2"
-><A
-NAME="device-properties-ieee1394_node"
->2.2.11. <TT
-CLASS="literal"
->ieee1394_node</TT
-> namespace</A
-></H3
-><P
->&#13;        Device objects with <TT
-CLASS="literal"
->info.bus</TT
-> set to
-        <TT
-CLASS="literal"
->ieee1394_node</TT
-> represent IEEE 1394 nodes on
+      Key (type)ValuesMandatoryDescription
+                ieee1394_host.is_busmgr (bool)
+              YesTODO
+                ieee1394_host.is_irn (bool)
+              YesTODO
+                ieee1394_host.is_root (bool)
+              YesTODO
+                ieee1394_host.node_count (int)
+              YesTODO
+                ieee1394_host.nodes_active (int)
+              YesTODO
+        ieee1394_node namespace
+      
+        Device objects with info.subsystem set to
+        ieee1394_node represent IEEE 1394 nodes on
         a IEEE 1394 bus. The following properties are available for
         such device objects.
-      </P
-><DIV
-CLASS="informaltable"
-><P
-></P
-><A
-NAME="AEN919"
-></A
-><TABLE
-BORDER="1"
-CLASS="CALSTABLE"
-><COL><COL><THEAD
-><TR
-><TH
->Key (type)</TH
-><TH
->Values</TH
-><TH
->Mandatory</TH
-><TH
->Description</TH
-></TR
-></THEAD
-><TBODY
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->ieee1394_node.capabilities</TT
-> (int)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->Yes</TD
-><TD
->TODO</TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->ieee1394_node.guid</TT
-> (int)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->Yes</TD
-><TD
->TODO</TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->ieee1394_node.nodeid</TT
-> (int)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->Yes</TD
-><TD
->TODO</TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->ieee1394_node.vendor</TT
-> (int)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->Yes</TD
-><TD
->TODO</TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->ieee1394_node.vendor_id</TT
-> (int)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->Yes</TD
-><TD
->TODO</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><DIV
-CLASS="sect2"
-><HR><H3
-CLASS="sect2"
-><A
-NAME="device-properties-ieee1394"
->2.2.12. <TT
-CLASS="literal"
->ieee1394</TT
-> namespace</A
-></H3
-><P
->&#13;        Device objects with <TT
-CLASS="literal"
->info.bus</TT
-> set to
-        <TT
-CLASS="literal"
->ieee1394</TT
-> represent IEEE 1394 devices. The
+      Key (type)ValuesMandatoryDescription
+                ieee1394_node.capabilities (int)
+              YesTODO
+                ieee1394_node.guid (int)
+              YesTODO
+                ieee1394_node.nodeid (int)
+              YesTODO
+                ieee1394_node.vendor (int)
+              YesTODO
+                ieee1394_node.vendor_id (int)
+              YesTODO
+        ieee1394 namespace
+      
+        Device objects with info.subsystem set to
+        ieee1394 represent IEEE 1394 devices. The
         following properties are available for such device objects.
-      </P
-><DIV
-CLASS="informaltable"
-><P
-></P
-><A
-NAME="AEN964"
-></A
-><TABLE
-BORDER="1"
-CLASS="CALSTABLE"
-><COL><COL><THEAD
-><TR
-><TH
->Key (type)</TH
-><TH
->Values</TH
-><TH
->Mandatory</TH
-><TH
->Description</TH
-></TR
-></THEAD
-><TBODY
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->ieee1394.specifier_id</TT
-> (int)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->Yes</TD
-><TD
->TODO</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><DIV
-CLASS="sect2"
-><HR><H3
-CLASS="sect2"
-><A
-NAME="device-properties-mmc_host"
->2.2.13. <TT
-CLASS="literal"
->mmc_host</TT
-> namespace</A
-></H3
-><P
->&#13;        Device objects with <TT
-CLASS="literal"
->info.bus</TT
-> set to
-        <TT
-CLASS="literal"
->mmc_host</TT
-> represent MultiMediaCard or
+      Key (type)ValuesMandatoryDescription
+                ieee1394.specifier_id (int)
+              YesTODO
+        mmc_host namespace
+      
+        Device objects with info.subsystem set to
+        mmc_host represent MultiMediaCard or
         Secure Digital host adaptors. The following properties
         are available for such device objects.
-      </P
-><DIV
-CLASS="informaltable"
-><P
-></P
-><A
-NAME="AEN985"
-></A
-><TABLE
-BORDER="1"
-CLASS="CALSTABLE"
-><COL><COL><THEAD
-><TR
-><TH
->Key (type)</TH
-><TH
->Values</TH
-><TH
->Mandatory</TH
-><TH
->Description</TH
-></TR
-></THEAD
-><TBODY
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->mmc_host.host</TT
-> (int)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->Yes</TD
-><TD
->A unique number identifying the MMC/SD host adaptor</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><DIV
-CLASS="sect2"
-><HR><H3
-CLASS="sect2"
-><A
-NAME="device-properties-mmc"
->2.2.14. <TT
-CLASS="literal"
->mmc</TT
-> namespace</A
-></H3
-><P
->&#13;        Device objects with <TT
-CLASS="literal"
->info.bus</TT
-> set to
-        <TT
-CLASS="literal"
->mmc</TT
-> represent MultiMediaCard or Secure
+      Key (type)ValuesMandatoryDescription
+                mmc_host.host (int)
+              YesA unique number identifying the MMC/SD host adaptor
+        mmc namespace
+      
+        Device objects with info.subsystem set to
+        mmc represent MultiMediaCard or Secure
         Digital cards. The following properties are available for
         such device objects.
-      </P
-><DIV
-CLASS="informaltable"
-><P
-></P
-><A
-NAME="AEN1006"
-></A
-><TABLE
-BORDER="1"
-CLASS="CALSTABLE"
-><COL><COL><THEAD
-><TR
-><TH
->Key (type)</TH
-><TH
->Values</TH
-><TH
->Mandatory</TH
-><TH
->Description</TH
-></TR
-></THEAD
-><TBODY
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->mmc.cid</TT
-> (string)
-              </TD
-><TD
->example: 0150415330303842413a1a8083003a9d</TD
-><TD
->Yes</TD
-><TD
->Card Identification Data register (unique for every card
+      Key (type)ValuesMandatoryDescription
+                mmc.cid (string)
+              example: 0150415330303842413a1a8083003a9dYesCard Identification Data register (unique for every card
                 in existence)
-              </TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->mmc.csd</TT
-> (string)
-              </TD
-><TD
->example: 005d013213598067b6d9cfff1640002d</TD
-><TD
->Yes</TD
-><TD
->Card Specific Data register</TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->mmc.scr</TT
-> (string)
-              </TD
-><TD
->example: 00a5000000410000</TD
-><TD
->Only for SD cards</TD
-><TD
->SD Card Register</TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->mmc.rca</TT
-> (int)
-              </TD
-><TD
->example: 8083</TD
-><TD
->Yes</TD
-><TD
->Card bus address</TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->mmc.oem</TT
-> (string)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->Yes</TD
-><TD
->Card OEM distributor</TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->mmc.date</TT
-> (string)
-              </TD
-><TD
->example: 10/2003</TD
-><TD
->Yes</TD
-><TD
->Manufacturing date</TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->mmc.serial</TT
-> (int)
-              </TD
-><TD
->example: 0x3a1a8083</TD
-><TD
->Yes</TD
-><TD
->Card serial number</TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->mmc.hwrev</TT
-> (int)
-              </TD
-><TD
->example: 4</TD
-><TD
->Yes</TD
-><TD
->Hardware revision</TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->mmc.fwrev</TT
-> (int)
-              </TD
-><TD
->example: 1</TD
-><TD
->Yes</TD
-><TD
->Firmware revision</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><DIV
-CLASS="sect2"
-><HR><H3
-CLASS="sect2"
-><A
-NAME="device-properties-ccw"
->2.2.15. <TT
-CLASS="literal"
->ccw</TT
-> namespace</A
-></H3
-><P
->&#13;        Device objects that represent s390 ccw devices (when <TT
-CLASS="literal"
->info.bus
-        </TT
->
-         is set to <TT
-CLASS="literal"
->ccw</TT
->) are represented by the
+              
+                mmc.csd (string)
+              example: 005d013213598067b6d9cfff1640002dYesCard Specific Data register
+                mmc.scr (string)
+              example: 00a5000000410000Only for SD cardsSD Card Register
+                mmc.rca (int)
+              example: 8083YesCard bus address
+                mmc.oem (string)
+              YesCard OEM distributor
+                mmc.date (string)
+              example: 10/2003YesManufacturing date
+                mmc.serial (int)
+              example: 0x3a1a8083YesCard serial number
+                mmc.hwrev (int)
+              example: 4YesHardware revision
+                mmc.fwrev (int)
+              example: 1YesFirmware revision
+        ccw namespace
+      
+        Device objects that represent s390 ccw devices (when info.subsystem
+        
+         is set to ccw) are represented by the
         properties below.
-      </P
-><DIV
-CLASS="informaltable"
-><P
-></P
-><A
-NAME="AEN1075"
-></A
-><TABLE
-BORDER="1"
-CLASS="CALSTABLE"
-><COL><COL><THEAD
-><TR
-><TH
->Key (type)</TH
-><TH
->Values</TH
-><TH
->Mandatory</TH
-><TH
->Description</TH
-></TR
-></THEAD
-><TBODY
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->ccw.devtype</TT
-> (string)
-              </TD
-><TD
->example: 1732/01</TD
-><TD
->Yes</TD
-><TD
->Device type/model or n/a</TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->ccw.cutype</TT
-> (string)
-              </TD
-><TD
->example: 1731/01</TD
-><TD
->Yes</TD
-><TD
->Control unit type/model</TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->ccw.cmb_enable</TT
-> (int)
-              </TD
-><TD
->example: 1</TD
-><TD
->Yes</TD
-><TD
->If channel measurements are enabled</TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->ccw.availability</TT
-> (string)
-              </TD
-><TD
->example: good</TD
-><TD
->Yes</TD
-><TD
->Can be one of 'good', 'boxed', 'no path',
+      Key (type)ValuesMandatoryDescription
+                ccw.devtype (string)
+              example: 1732/01YesDevice type/model or n/a
+                ccw.cutype (string)
+              example: 1731/01YesControl unit type/model
+                ccw.cmb_enable (int)
+              example: 1YesIf channel measurements are enabled
+                ccw.availability (string)
+              example: goodYesCan be one of 'good', 'boxed', 'no path',
                 or 'no device'
-              </TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->ccw.online</TT
-> (int)
-              </TD
-><TD
->example: 1</TD
-><TD
->Yes</TD
-><TD
->Online status</TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->ccw.bus_id</TT
-> (string)
-              </TD
-><TD
->example: 0.0.f588</TD
-><TD
->Yes</TD
-><TD
->The device's bus id in sysfs</TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->ccw.subchannel.pim</TT
-> (int)
-              </TD
-><TD
->example: 0x80</TD
-><TD
->No</TD
-><TD
->path installed mask</TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->ccw.subchannel.pam</TT
-> (int)
-              </TD
-><TD
->example: 0x80</TD
-><TD
->No</TD
-><TD
->path available mask</TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->ccw.subchannel.pom</TT
-> (int)
-              </TD
-><TD
->example: 0xff</TD
-><TD
->No</TD
-><TD
->path operational mask</TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->ccw.subchannel.chpid0..7</TT
-> (int)
-              </TD
-><TD
->example: 0x40</TD
-><TD
->No</TD
-><TD
->channel path ids</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-><P
->&#13;        The following properties describe <TT
-CLASS="literal"
->ccw</TT
-> devices where
-        <TT
-CLASS="literal"
->linux.driver</TT
-> is either <TT
-CLASS="literal"
->dasd-eckd</TT
->
-        or <TT
-CLASS="literal"
->dasd-fba</TT
->.
-      </P
-><DIV
-CLASS="informaltable"
-><P
-></P
-><A
-NAME="AEN1149"
-></A
-><TABLE
-BORDER="1"
-CLASS="CALSTABLE"
-><COL><COL><THEAD
-><TR
-><TH
->Key (type)</TH
-><TH
->Values</TH
-><TH
->Mandatory</TH
-><TH
->Description</TH
-></TR
-></THEAD
-><TBODY
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->ccw.dasd.use_diag</TT
-> (int)
-              </TD
-><TD
->example: 0</TD
-><TD
->Yes</TD
-><TD
->If the device driver shall use diagnose calls to access
+              
+                ccw.online (int)
+              example: 1YesOnline status
+                ccw.bus_id (string)
+              example: 0.0.f588YesThe device's bus id in sysfs
+                ccw.subchannel.pim (int)
+              example: 0x80Nopath installed mask
+                ccw.subchannel.pam (int)
+              example: 0x80Nopath available mask
+                ccw.subchannel.pom (int)
+              example: 0xffNopath operational mask
+                ccw.subchannel.chpid0..7 (int)
+              example: 0x40Nochannel path ids
+        The following properties describe ccw devices where
+        linux.driver is either dasd-eckd
+        or dasd-fba.
+      Key (type)ValuesMandatoryDescription
+                ccw.dasd.use_diag (int)
+              example: 0YesIf the device driver shall use diagnose calls to access
                 the device
-              </TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->ccw.dasd.readonly</TT
-> (int)
-              </TD
-><TD
->example: 0</TD
-><TD
->Yes</TD
-><TD
->If the device can only be accessed readonly</TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->ccw.dasd.discipline</TT
-> (string)
-              </TD
-><TD
->example: ECKD</TD
-><TD
->No</TD
-><TD
->The dasd discipline used to access the device</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-><P
->&#13;        The following properties describe <TT
-CLASS="literal"
->ccw</TT
-> devices where
-        <TT
-CLASS="literal"
->linux.driver</TT
-> is <TT
-CLASS="literal"
->zfcp</TT
->. They are
-        only present when <TT
-CLASS="literal"
->ccw.online = 1</TT
->.
-      </P
-><DIV
-CLASS="informaltable"
-><P
-></P
-><A
-NAME="AEN1181"
-></A
-><TABLE
-BORDER="1"
-CLASS="CALSTABLE"
-><COL><COL><THEAD
-><TR
-><TH
->Key (type)</TH
-><TH
->Values</TH
-><TH
->Mandatory</TH
-><TH
->Description</TH
-></TR
-></THEAD
-><TBODY
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->ccw.zfcp.in_recovery</TT
-> (int)
-              </TD
-><TD
->example: 0</TD
-><TD
->Yes</TD
-><TD
->Shows whether the adapter is currently in recovery</TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->ccw.zfcp.failed</TT
-> (int)
-              </TD
-><TD
->example: 0</TD
-><TD
->Yes</TD
-><TD
->Shows whether the adapter is in failed state</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-><P
->&#13;        The following properties describe <TT
-CLASS="literal"
->ccw</TT
-> devices where
-        <TT
-CLASS="literal"
->linux.driver</TT
-> is of the form <TT
-CLASS="literal"
->tape_3xxx
-        </TT
->
+              
+                ccw.dasd.readonly (int)
+              example: 0YesIf the device can only be accessed readonly
+                ccw.dasd.discipline (string)
+              example: ECKDNoThe dasd discipline used to access the device
+        The following properties describe ccw devices where
+        linux.driver is zfcp. They are
+        only present when ccw.online = 1.
+      Key (type)ValuesMandatoryDescription
+                ccw.zfcp.in_recovery (int)
+              example: 0YesShows whether the adapter is currently in recovery
+                ccw.zfcp.failed (int)
+              example: 0YesShows whether the adapter is in failed state
+        The following properties describe ccw devices where
+        linux.driver is of the form tape_3xxx
+        
         .
-      </P
-><DIV
-CLASS="informaltable"
-><P
-></P
-><A
-NAME="AEN1206"
-></A
-><TABLE
-BORDER="1"
-CLASS="CALSTABLE"
-><COL><COL><THEAD
-><TR
-><TH
->Key (type)</TH
-><TH
->Values</TH
-><TH
->Mandatory</TH
-><TH
->Description</TH
-></TR
-></THEAD
-><TBODY
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->ccw.tape.state</TT
-> (string)
-              </TD
-><TD
->example: IN_USE</TD
-><TD
->Yes</TD
-><TD
->The current status of the tape</TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->ccw.tape.operation</TT
-> (string)
-              </TD
-><TD
->example: REW</TD
-><TD
->Yes</TD
-><TD
->A three-letter mnemonic of the current tape operation
-              </TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->ccw.tape.medium_state</TT
-> (string)
-              </TD
-><TD
->example: no medium</TD
-><TD
->No</TD
-><TD
->&#13;                If <TT
-CLASS="literal"
->ccw.online = 1</TT
->, shows whether a tape
+      Key (type)ValuesMandatoryDescription
+                ccw.tape.state (string)
+              example: IN_USEYesThe current status of the tape
+                ccw.tape.operation (string)
+              example: REWYesA three-letter mnemonic of the current tape operation
+              
+                ccw.tape.medium_state (string)
+              example: no mediumNo
+                If ccw.online = 1, shows whether a tape
                 is loaded
-              </TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->ccw.tape.blocksize</TT
-> (int)
-              </TD
-><TD
->example: 512</TD
-><TD
->No</TD
-><TD
->&#13;                If <TT
-CLASS="literal"
->ccw.online = 1</TT
->, shows the blocksize
+              
+                ccw.tape.blocksize (int)
+              example: 512No
+                If ccw.online = 1, shows the blocksize
                 used for reads and writes to the tape
-              </TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-><P
->&#13;        The following properties describe <TT
-CLASS="literal"
->ccw</TT
-> devices where
-        <TT
-CLASS="literal"
->linux.driver</TT
-> is <TT
-CLASS="literal"
->3270</TT
->.
-      </P
-><DIV
-CLASS="informaltable"
-><P
-></P
-><A
-NAME="AEN1245"
-></A
-><TABLE
-BORDER="1"
-CLASS="CALSTABLE"
-><COL><COL><THEAD
-><TR
-><TH
->Key (type)</TH
-><TH
->Values</TH
-><TH
->Mandatory</TH
-><TH
->Description</TH
-></TR
-></THEAD
-><TBODY
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->ccw.3270.model</TT
-> (int)
-              </TD
-><TD
->example: 3</TD
-><TD
->Yes</TD
-><TD
->The model of the device, determining rows and columns
-              </TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->ccw.3270.rows</TT
-> (int)
-              </TD
-><TD
->example: 32</TD
-><TD
->Yes</TD
-><TD
->The number of rows</TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->ccw.3270.columns</TT
-> (int)
-              </TD
-><TD
->example: 80</TD
-><TD
->Yes</TD
-><TD
->The number of columns</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><DIV
-CLASS="sect2"
-><HR><H3
-CLASS="sect2"
-><A
-NAME="device-properties-ccwgroup"
->2.2.16. <TT
-CLASS="literal"
->ccwgroup</TT
-> namespace</A
-></H3
-><P
->&#13;        Device objects that represent groups of <TT
-CLASS="literal"
->ccw</TT
-> devices
-        (when <TT
-CLASS="literal"
->info.bus</TT
-> is set to <TT
-CLASS="literal"
->ccwgroup</TT
->
+              
+        The following properties describe ccw devices where
+        linux.driver is 3270.
+      Key (type)ValuesMandatoryDescription
+                ccw.3270.model (int)
+              example: 3YesThe model of the device, determining rows and columns
+              
+                ccw.3270.rows (int)
+              example: 32YesThe number of rows
+                ccw.3270.columns (int)
+              example: 80YesThe number of columns
+        ccwgroup namespace
+      
+        Device objects that represent groups of ccw devices
+        (when info.subsystem is set to ccwgroup
         have the properties specified below.
-      </P
-><DIV
-CLASS="informaltable"
-><P
-></P
-><A
-NAME="AEN1279"
-></A
-><TABLE
-BORDER="1"
-CLASS="CALSTABLE"
-><COL><COL><THEAD
-><TR
-><TH
->Key (type)</TH
-><TH
->Values</TH
-><TH
->Mandatory</TH
-><TH
->Description</TH
-></TR
-></THEAD
-><TBODY
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->ccwgroup.online</TT
-> (int)
-              </TD
-><TD
->example: 1</TD
-><TD
->Yes</TD
-><TD
->Online status</TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->ccwgroup.bus_id</TT
-> (string)
-              </TD
-><TD
->example: 0.0.f588</TD
-><TD
->Yes</TD
-><TD
->The device's bus id in sysfs</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-><P
->&#13;        The following properties describe <TT
-CLASS="literal"
->ccwgroup</TT
-> devices
-        where <TT
-CLASS="literal"
->linux.driver</TT
-> is <TT
-CLASS="literal"
->qeth</TT
->.
-      </P
-><DIV
-CLASS="informaltable"
-><P
-></P
-><A
-NAME="AEN1304"
-></A
-><TABLE
-BORDER="1"
-CLASS="CALSTABLE"
-><COL><COL><THEAD
-><TR
-><TH
->Key (type)</TH
-><TH
->Values</TH
-><TH
->Mandatory</TH
-><TH
->Description</TH
-></TR
-></THEAD
-><TBODY
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->ccwgroup.qeth.large_send</TT
-> (string)
-              </TD
-><TD
->example: TSO</TD
-><TD
->No</TD
-><TD
->Whether large send is provided. Can be "no", "EDDP"
+      Key (type)ValuesMandatoryDescription
+                ccwgroup.online (int)
+              example: 1YesOnline status
+                ccwgroup.bus_id (string)
+              example: 0.0.f588YesThe device's bus id in sysfs
+        The following properties describe ccwgroup devices
+        where linux.driver is qeth.
+      Key (type)ValuesMandatoryDescription
+                ccwgroup.qeth.large_send (string)
+              example: TSONoWhether large send is provided. Can be "no", "EDDP"
                 (software) or "TSO" (hardware).
-              </TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->ccwgroup.qeth.card_type</TT
-> (string)
-              </TD
-><TD
->example: OSD_1000</TD
-><TD
->Yes</TD
-><TD
->Type of the card</TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->ccwgroup.qeth.checksumming</TT
-> (string)
-              </TD
-><TD
->example: sw checksumming</TD
-><TD
->No</TD
-><TD
->The method used to checksum incoming packets</TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->ccwgroup.qeth.canonical_macaddr</TT
-> (int)
-              </TD
-><TD
->example: 0</TD
-><TD
->No</TD
-><TD
->Specifies the token ring macaddress format. Not valid in
+              
+                ccwgroup.qeth.card_type (string)
+              example: OSD_1000YesType of the card
+                ccwgroup.qeth.checksumming (string)
+              example: sw checksummingNoThe method used to checksum incoming packets
+                ccwgroup.qeth.canonical_macaddr (int)
+              example: 0NoSpecifies the token ring macaddress format. Not valid in
                 layer2 mode and for ethernet devices.
-              </TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->ccwgroup.qeth.broadcast_mode</TT
-> (string)
-              </TD
-><TD
->example: broadcast_allrings</TD
-><TD
->No</TD
-><TD
->The scope of token ring broadcasts. Not valid in layer2
+              
+                ccwgroup.qeth.broadcast_mode (string)
+              example: broadcast_allringsNoThe scope of token ring broadcasts. Not valid in layer2
                 mode and for ethernet devices.
-              </TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->ccwgroup.qeth.fake_broadcast</TT
-> (int)
-              </TD
-><TD
->example: 0</TD
-><TD
->No</TD
-><TD
->Whether to fake broadcast capability. Not valid in layer2
+              
+                ccwgroup.qeth.fake_broadcast (int)
+              example: 0NoWhether to fake broadcast capability. Not valid in layer2
                 mode.
-              </TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->ccwgroup.qeth.fake_ll</TT
-> (int)
-              </TD
-><TD
->example: 0</TD
-><TD
->No</TD
-><TD
->Whether to add a faked link level header to packets.
+              
+                ccwgroup.qeth.fake_ll (int)
+              example: 0NoWhether to add a faked link level header to packets.
                 Not valid in layer2 mode.
-              </TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->ccwgroup.qeth.layer2</TT
-> (int)
-              </TD
-><TD
->example: 0</TD
-><TD
->No</TD
-><TD
->Whether the card operates in layer 2 mode</TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->ccwgroup.qeth.portname</TT
-> (string)
-              </TD
-><TD
->example: OSAPORT</TD
-><TD
->No</TD
-><TD
->The port name which has been specified for the card</TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->ccwgroup.qeth.portno</TT
-> (int)
-              </TD
-><TD
->example: 0</TD
-><TD
->No</TD
-><TD
->The relative port number on the card</TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->ccwgroup.qeth.buffer_count</TT
-> (int)
-              </TD
-><TD
->example: 16</TD
-><TD
->Yes</TD
-><TD
->Number of inbound buffers used</TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->ccwgroup.qeth.add_hhlen</TT
-> (int)
-              </TD
-><TD
->example: 0</TD
-><TD
->No</TD
-><TD
->How much additional space is provided in the hardware
+              
+                ccwgroup.qeth.layer2 (int)
+              example: 0NoWhether the card operates in layer 2 mode
+                ccwgroup.qeth.portname (string)
+              example: OSAPORTNoThe port name which has been specified for the card
+                ccwgroup.qeth.portno (int)
+              example: 0NoThe relative port number on the card
+                ccwgroup.qeth.buffer_count (int)
+              example: 16YesNumber of inbound buffers used
+                ccwgroup.qeth.add_hhlen (int)
+              example: 0NoHow much additional space is provided in the hardware
                 header in skbs in front of packets
-              </TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->ccwgroup.qeth.priority_queueing</TT
->
+              
+                ccwgroup.qeth.priority_queueing
                 (string)
-              </TD
-><TD
->example: always queue 2</TD
-><TD
->No</TD
-><TD
->Which priority queueing algorithm is to be used</TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->ccwgroup.qeth.route4</TT
-> (string)
-              </TD
-><TD
->example: no</TD
-><TD
->No</TD
-><TD
->Whether the card has a routing functionality for ipv4.
+              example: always queue 2NoWhich priority queueing algorithm is to be used
+                ccwgroup.qeth.route4 (string)
+              example: noNoWhether the card has a routing functionality for ipv4.
                 Not valid in layer2 mode.
-              </TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->ccwgroup.qeth.route6</TT
-> (string)
-              </TD
-><TD
->example: no</TD
-><TD
->No</TD
-><TD
->Whether the card has a routing functionality for ipv6.
+              
+                ccwgroup.qeth.route6 (string)
+              example: noNoWhether the card has a routing functionality for ipv6.
                 Not valid in layer2 mode.
-              </TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->ccwgroup.qeth.state</TT
-> (string)
-              </TD
-><TD
->example: UP (LAN ONLINE)</TD
-><TD
->Yes</TD
-><TD
->The device's current state</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-><P
->&#13;        The following properties describe <TT
-CLASS="literal"
->ccwgroup</TT
-> devices
-        where <TT
-CLASS="literal"
->linux.driver</TT
-> is <TT
-CLASS="literal"
->ctc</TT
->.
-      </P
-><DIV
-CLASS="informaltable"
-><P
-></P
-><A
-NAME="AEN1413"
-></A
-><TABLE
-BORDER="1"
-CLASS="CALSTABLE"
-><COL><COL><THEAD
-><TR
-><TH
->Key (type)</TH
-><TH
->Values</TH
-><TH
->Mandatory</TH
-><TH
->Description</TH
-></TR
-></THEAD
-><TBODY
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->ccwgroup.ctc.protocol</TT
-> (int)
-              </TD
-><TD
->example: 0</TD
-><TD
->Yes</TD
-><TD
->The protocol/method used by the connection</TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->ccwgroup.ctc.type</TT
-> (string)
-              </TD
-><TD
->example: CTC/A</TD
-><TD
->Yes</TD
-><TD
->The device/connection type</TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->ccwgroup.ctc.buffer</TT
-> (int)
-              </TD
-><TD
->example: 32768</TD
-><TD
->No</TD
-><TD
->The maximum buffer size of the connection</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-><P
->&#13;        The following properties describe <TT
-CLASS="literal"
->ccwgroup</TT
-> devices
-        where <TT
-CLASS="literal"
->linux.driver</TT
-> is <TT
-CLASS="literal"
->lcs</TT
->.
-      </P
-><DIV
-CLASS="informaltable"
-><P
-></P
-><A
-NAME="AEN1444"
-></A
-><TABLE
-BORDER="1"
-CLASS="CALSTABLE"
-><COL><COL><THEAD
-><TR
-><TH
->Key (type)</TH
-><TH
->Values</TH
-><TH
->Mandatory</TH
-><TH
->Description</TH
-></TR
-></THEAD
-><TBODY
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->ccwgroup.lcs.portnumber</TT
-> (int)
-              </TD
-><TD
->example: 0</TD
-><TD
->Yes</TD
-><TD
->The port on the card that is used</TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->ccwgroup.lcs.type</TT
-> (string)
-              </TD
-><TD
->example: OSA LCS card</TD
-><TD
->Yes</TD
-><TD
->The type of the card</TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->ccwgroup.lcs.lancmd_timeout</TT
-> (int)
-              </TD
-><TD
->example: 5</TD
-><TD
->Yes</TD
-><TD
->The timeout value for LAN commands in seconds</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-><P
->&#13;        The following properties describe <TT
-CLASS="literal"
->ccwgroup</TT
-> devices
-        where <TT
-CLASS="literal"
->linux.driver</TT
-> is <TT
-CLASS="literal"
->claw</TT
->.
-      </P
-><DIV
-CLASS="informaltable"
-><P
-></P
-><A
-NAME="AEN1475"
-></A
-><TABLE
-BORDER="1"
-CLASS="CALSTABLE"
-><COL><COL><THEAD
-><TR
-><TH
->Key (type)</TH
-><TH
->Values</TH
-><TH
->Mandatory</TH
-><TH
->Description</TH
-></TR
-></THEAD
-><TBODY
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->ccwgroup.claw.api_type</TT
-> (string)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->Yes</TD
-><TD
->Determines the packing algorithm for outgoing pakets
+              
+                ccwgroup.qeth.state (string)
+              example: UP (LAN ONLINE)YesThe device's current state
+        The following properties describe ccwgroup devices
+        where linux.driver is ctc.
+      Key (type)ValuesMandatoryDescription
+                ccwgroup.ctc.protocol (int)
+              example: 0YesThe protocol/method used by the connection
+                ccwgroup.ctc.type (string)
+              example: CTC/AYesThe device/connection type
+                ccwgroup.ctc.buffer (int)
+              example: 32768NoThe maximum buffer size of the connection
+        The following properties describe ccwgroup devices
+        where linux.driver is lcs.
+      Key (type)ValuesMandatoryDescription
+                ccwgroup.lcs.portnumber (int)
+              example: 0YesThe port on the card that is used
+                ccwgroup.lcs.type (string)
+              example: OSA LCS cardYesThe type of the card
+                ccwgroup.lcs.lancmd_timeout (int)
+              example: 5YesThe timeout value for LAN commands in seconds
+        The following properties describe ccwgroup devices
+        where linux.driver is claw.
+      Key (type)ValuesMandatoryDescription
+                ccwgroup.claw.api_type (string)
+              YesDetermines the packing algorithm for outgoing pakets
                 (matching the remote peer)
-              </TD
-></TR
-><TR
-><TD
->&nbsp;</TD
-><TD
->IP</TD
-><TD
->&nbsp;</TD
-><TD
->Using the IP protocol</TD
-></TR
-><TR
-><TD
->&nbsp;</TD
-><TD
->PACKED</TD
-><TD
->&nbsp;</TD
-><TD
->Using an enhanced packing algorithm</TD
-></TR
-><TR
-><TD
->&nbsp;</TD
-><TD
->TCPIP</TD
-><TD
->&nbsp;</TD
-><TD
->Using the TCP/IP protocol</TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->ccwgroup.claw.adapter_name</TT
-> (string)
-              </TD
-><TD
->example: RS1</TD
-><TD
->Yes</TD
-><TD
->The host name of the remote communication peer.</TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->ccwgroup.claw.host_name</TT
-> (string)
-              </TD
-><TD
->example: LNX1</TD
-><TD
->Yes</TD
-><TD
->The host name of the local adapter.</TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->ccwgroup.claw.read_buffer</TT
-> (int)
-              </TD
-><TD
->example: 4</TD
-><TD
->Yes</TD
-><TD
->The number of read buffers allocated</TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->ccwgroup.claw.write_buffer</TT
-> (int)
-              </TD
-><TD
->example: 5</TD
-><TD
->Yes</TD
-><TD
->The number of write buffers allocated</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><DIV
-CLASS="sect2"
-><HR><H3
-CLASS="sect2"
-><A
-NAME="device-properties-iucv"
->2.2.17. <TT
-CLASS="literal"
->iucv</TT
-> namespace</A
-></H3
-><P
->&#13;        Device objects with <TT
-CLASS="literal"
->info.bus</TT
-> set to <TT
-CLASS="literal"
->iucv
-        </TT
->
+              IPUsing the IP protocolPACKEDUsing an enhanced packing algorithmTCPIPUsing the TCP/IP protocol
+                ccwgroup.claw.adapter_name (string)
+              example: RS1YesThe host name of the remote communication peer.
+                ccwgroup.claw.host_name (string)
+              example: LNX1YesThe host name of the local adapter.
+                ccwgroup.claw.read_buffer (int)
+              example: 4YesThe number of read buffers allocated
+                ccwgroup.claw.write_buffer (int)
+              example: 5YesThe number of write buffers allocated
+        iucv namespace
+      
+        Device objects with info.subsystem set to iucv
+        
          are using the "Intra-User Comminication Vehicle" and are
         described by the following properties.
-      </P
-><DIV
-CLASS="informaltable"
-><P
-></P
-><A
-NAME="AEN1535"
-></A
-><TABLE
-BORDER="1"
-CLASS="CALSTABLE"
-><COL><COL><THEAD
-><TR
-><TH
->Key (type)</TH
-><TH
->Values</TH
-><TH
->Mandatory</TH
-><TH
->Description</TH
-></TR
-></THEAD
-><TBODY
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->iucv.bus_id</TT
-> (string)
-              </TD
-><TD
->example: netiucv0</TD
-><TD
->Yes</TD
-><TD
->The device's bus id in sysfs</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-><P
->&#13;        The following properties describe <TT
-CLASS="literal"
->iucv</TT
-> devices
-        where <TT
-CLASS="literal"
->linux.driver</TT
-> is <TT
-CLASS="literal"
->netiucv</TT
->.
-      </P
-><DIV
-CLASS="informaltable"
-><P
-></P
-><A
-NAME="AEN1554"
-></A
-><TABLE
-BORDER="1"
-CLASS="CALSTABLE"
-><COL><COL><THEAD
-><TR
-><TH
->Key (type)</TH
-><TH
->Values</TH
-><TH
->Mandatory</TH
-><TH
->Description</TH
-></TR
-></THEAD
-><TBODY
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->iucv.netiucv.user</TT
-> (string)
-              </TD
-><TD
->example: linux12</TD
-><TD
->Yes</TD
-><TD
->The guest name of the connection's target</TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->iucv.netiucv.buffer</TT
-> (int)
-              </TD
-><TD
->example: 32768</TD
-><TD
->Yes</TD
-><TD
->The maximum buffer size of the connection</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><DIV
-CLASS="sect2"
-><HR><H3
-CLASS="sect2"
-><A
-NAME="device-properties-block"
->2.2.18. <TT
-CLASS="literal"
->block</TT
-> namespace</A
-></H3
-><P
->&#13;        Device objects representing addressable block devices, such as
-        drives and partitions, will have <TT
-CLASS="literal"
->info.bus</TT
->
-        set to <TT
-CLASS="literal"
->block</TT
-> and will export a number of
-        properties in the <TT
-CLASS="literal"
->block</TT
-> namespace.
-      </P
-><DIV
-CLASS="informaltable"
-><P
-></P
-><A
-NAME="AEN1582"
-></A
-><TABLE
-BORDER="1"
-CLASS="CALSTABLE"
-><COL><COL><THEAD
-><TR
-><TH
->Key (type)</TH
-><TH
->Values</TH
-><TH
->Mandatory</TH
-><TH
->Description</TH
-></TR
-></THEAD
-><TBODY
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->block.device</TT
-> (string)
-              </TD
-><TD
->example: /dev/sda </TD
-><TD
->Yes</TD
-><TD
->Special device file to interact with the block device</TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->block.major</TT
-> (int)
-              </TD
-><TD
->example: 8</TD
-><TD
->Yes</TD
-><TD
->Major number of special file to interact with the
+      Key (type)ValuesMandatoryDescription
+                iucv.bus_id (string)
+              example: netiucv0YesThe device's bus id in sysfs
+        The following properties describe iucv devices
+        where linux.driver is netiucv.
+      Key (type)ValuesMandatoryDescription
+                iucv.netiucv.user (string)
+              example: linux12YesThe guest name of the connection's target
+                iucv.netiucv.buffer (int)
+              example: 32768YesThe maximum buffer size of the connection
+        block namespace
+      
+        Device objects representing addressable block devices, such as
+        drives and partitions, will have info.subsystem
+        set to block and will export a number of
+        properties in the block namespace.
+      Key (type)ValuesMandatoryDescription
+                block.device (string)
+              example: /dev/sda YesSpecial device file to interact with the block device
+                block.major (int)
+              example: 8YesMajor number of special file to interact with the
                 device
-              </TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->block.minor</TT
-> (int)
-              </TD
-><TD
->example: 1</TD
-><TD
->Yes</TD
-><TD
->Minor number of special file to interact with the
+              
+                block.minor (int)
+              example: 1YesMinor number of special file to interact with the
                 device
-              </TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->block.is_volume</TT
-> (bool)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->Yes</TD
-><TD
->True only when the block device is a volume that can
+              
+                block.is_volume (bool)
+              YesTrue only when the block device is a volume that can
                 be mounted into the file system. In this case the
-                <TT
-CLASS="literal"
->volume</TT
-> capability will be set and
-                thus, properties, in the <TT
-CLASS="literal"
->volume</TT
->
+                volume capability will be set and
+                thus, properties, in the volume
                 namespace are available.
-              </TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->block.no_partitions</TT
-> (bool)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->Yes</TD
-><TD
->For toplevel block devices, this is TRUE only
+              
+                block.no_partitions (bool)
+              YesFor toplevel block devices, this is TRUE only
                 when no known partition tables have been found on the
                 media (In this case, if the storage device contain a
                 file system it will be accessible using the same
@@ -5367,780 +999,174 @@ CLASS="literal"
                 and the device object representing the filesystem will
                 appear as a separate device object as a child). For
                 the child, that is
-                when <TT
-CLASS="literal"
->block.is_volume</TT
-> is true, this
+                when block.is_volume is true, this
                 property is TRUE exactly when it was created for a
                 storage device with
-                the <TT
-CLASS="literal"
->storage.no_partitions_hint</TT
-> set
+                the storage.no_partitions_hint set
                 to TRUE.
-              </TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->block.have_scanned</TT
-> (bool)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->Yes</TD
-><TD
->&#13;                An internal property used by HAL to specify whether a top
+              
+                block.have_scanned (bool)
+              Yes
+                An internal property used by HAL to specify whether a top
                 level block device have already been scanned for filesystems.
-              </TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><DIV
-CLASS="sect2"
-><HR><H3
-CLASS="sect2"
-><A
-NAME="device-properties-xen"
->2.2.19. <TT
-CLASS="literal"
->xen</TT
-> namespace</A
-></H3
-><P
->&#13;	Device objects representing virtual devices under the Xen
+              xen namespace
+	Device objects representing virtual devices under the Xen
 	Virtual Machine Monitor, such as frontend network or block
-	devices, will have <TT
-CLASS="literal"
->info.bus</TT
-> set to
-	<TT
-CLASS="literal"
->block</TT
-> and will export a number of
-	properties in then <TT
-CLASS="literal"
->xen</TT
-> namespace.
-      </P
-><DIV
-CLASS="informaltable"
-><P
-></P
-><A
-NAME="AEN1638"
-></A
-><TABLE
-BORDER="1"
-CLASS="CALSTABLE"
-><COL><COL><THEAD
-><TR
-><TH
->Key (type)</TH
-><TH
->Values</TH
-><TH
->Mandatory</TH
-><TH
->Description</TH
-></TR
-></THEAD
-><TBODY
-><TR
-><TD
-><TT
-CLASS="literal"
->xen.bus_id</TT
-> (string)</TD
-><TD
->example: vif-0 </TD
-><TD
->Yes</TD
-><TD
->The XenBus ID of the device</TD
-></TR
-><TR
-><TD
-><TT
-CLASS="literal"
->xen.path</TT
-> (string)</TD
-><TD
->example: device/vif/0 </TD
-><TD
->Yes</TD
-><TD
->The XenBus path of the device</TD
-></TR
-><TR
-><TD
-><TT
-CLASS="literal"
->xen.type</TT
-> (string)</TD
-><TD
->example: vif</TD
-><TD
->Yes</TD
-><TD
->The type of Xen device</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-></DIV
-><DIV
-CLASS="sect1"
-><HR><H2
-CLASS="sect1"
-><A
-NAME="properties-functional"
->2.3. Functional Properties</A
-></H2
-><P
->&#13;      The section describe functional properties of device objects,
+	devices, will have info.subsystem set to
+	block and will export a number of
+	properties in then xen namespace.
+      Key (type)ValuesMandatoryDescriptionxen.bus_id (string)example: vif-0 YesThe XenBus ID of the devicexen.path (string)example: device/vif/0 YesThe XenBus path of the devicexen.type (string)example: vifYesThe type of Xen deviceFunctional Properties
+      The section describe functional properties of device objects,
       that is, properties that are merged onto device objects
-      representing physically addressable hardware. In most
+      representing addressable hardware. In most
       circumstances such properties stem from a kernel level
       driver attached to the device represented by the device object,
       however, as HAL can merge properties from anywhere, they
       may have been merged from device information files or callouts.
-    </P
-><DIV
-CLASS="sect2"
-><HR><H3
-CLASS="sect2"
-><A
-NAME="device-properties-volume"
->2.3.1. <TT
-CLASS="literal"
->volume</TT
-> namespace</A
-></H3
-><P
->&#13;        This namespace is for device objects that represent storage
+    
+        volume namespace
+      
+        This namespace is for device objects that represent storage
         devices with a filesystem that can be mounted. Such device
-        objects will have the capability <TT
-CLASS="literal"
->volume</TT
-> and
+        objects will have the capability volume and
         they will export the properties below. Note that device
-        objects can only have the <TT
-CLASS="literal"
->volume</TT
-> capability
-        if they already have the capability <TT
-CLASS="literal"
->block</TT
->
-        and the property <TT
-CLASS="literal"
->block.is_volume</TT
-> set to TRUE.
-      </P
-><DIV
-CLASS="informaltable"
-><P
-></P
-><A
-NAME="AEN1676"
-></A
-><TABLE
-BORDER="1"
-CLASS="CALSTABLE"
-><COL><COL><THEAD
-><TR
-><TH
->Key (type)</TH
-><TH
->Values</TH
-><TH
->Mandatory</TH
-><TH
->Description</TH
-></TR
-></THEAD
-><TBODY
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->volume.ignore</TT
-> (bool)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->Yes</TD
-><TD
->This is a hint to software higher in the stack
+        objects can only have the volume capability
+        if they already have the capability block
+        and the property block.is_volume set to TRUE.
+      Key (type)ValuesMandatoryDescription
+                volume.ignore (bool)
+              YesThis is a hint to software higher in the stack
                 that this volume should be ignored. If TRUE, the volume
                 should be invisible in the UI and mount wrappers should
                 refuse to mount it on behalf on an unprivileged
                 user. This is useful for hiding e.g. firmware partitions
                 (e.g. bootstrap on Mac's) and OS reinstall partitions on
                 e.g. OEM systems.
-              </TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->volume.is_mounted</TT
-> (bool)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->Yes</TD
-><TD
->This property is TRUE if and only if the volume is mounted</TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->volume.is_mounted_read_only</TT
-> (bool)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->Yes</TD
-><TD
->This property is TRUE if and only if the volume is mounted and
+              
+                volume.is_mounted (bool)
+              YesThis property is TRUE if and only if the volume is mounted
+                volume.is_mounted_read_only (bool)
+              YesThis property is TRUE if and only if the volume is mounted and
                 the volume's file-system is read-only.
-              </TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->volume.mount_point</TT
-> (string)
-              </TD
-><TD
->example: /media/compact_flash1  </TD
-><TD
->Yes (is blank only when volume.is_mounted is FALSE)</TD
-><TD
->A fully qualified path to the mount point of the volume</TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->volume.fsusage</TT
-> (string)
-              </TD
-><TD
->example: filesystem</TD
-><TD
->Yes</TD
-><TD
->&#13;                This property specifies the expected usage of the volume
-              </TD
-></TR
-><TR
-><TD
->&nbsp;</TD
-><TD
->filesystem</TD
-><TD
->&nbsp;</TD
-><TD
->The volume is a mountable filesystem</TD
-></TR
-><TR
-><TD
->&nbsp;</TD
-><TD
->partitiontable</TD
-><TD
->&nbsp;</TD
-><TD
->&#13;	        The volume contains a partitiontable.
-	      </TD
-></TR
-><TR
-><TD
->&nbsp;</TD
-><TD
->raid</TD
-><TD
->&nbsp;</TD
-><TD
->The volume is a member of a raid set and not mountable</TD
-></TR
-><TR
-><TD
->&nbsp;</TD
-><TD
->other</TD
-><TD
->&nbsp;</TD
-><TD
->The volume is not mountable like a swap partition</TD
-></TR
-><TR
-><TD
->&nbsp;</TD
-><TD
->unused</TD
-><TD
->&nbsp;</TD
-><TD
->The volume is marked a unused or free</TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->volume.fstype</TT
-> (string)
-              </TD
-><TD
->examples: ext3, vfat</TD
-><TD
->Yes (is blank if the type is unknown)</TD
-><TD
->The specific type of either the file system or what the volume is used for, cf. volume.fsusage</TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->volume.fsversion</TT
-> (string)
-              </TD
-><TD
->example: FAT32</TD
-><TD
->&nbsp;</TD
-><TD
->Version number or subtype of the filesystem</TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->volume.label</TT
-> (string)
-              </TD
-><TD
->example: 'Fedora Core 1.90' </TD
-><TD
->Yes (is blank if no label is found)</TD
-><TD
->The label of the volume</TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->volume.uuid</TT
-> (string)
-              </TD
-><TD
->example: 4060-6C11</TD
-><TD
->Yes (is blank if no UUID is found)</TD
-><TD
->The Universal Unique Identifer for the volume</TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->volume.is_disc</TT
-> (bool)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->Yes</TD
-><TD
->If the volume stems from an optical disc, this
+              
+                volume.mount_point (string)
+              example: /media/compact_flash1  Yes (is blank only when volume.is_mounted is FALSE)A fully qualified path to the mount point of the volume
+                volume.fsusage (string)
+              example: filesystemYes
+                This property specifies the expected usage of the volume
+              filesystemThe volume is a mountable filesystempartitiontable
+	        The volume contains a partitiontable.
+	      raidThe volume is a member of a raid set and not mountableotherThe volume is not mountable like a swap partitionunusedThe volume is marked a unused or free
+                volume.fstype (string)
+              examples: ext3, vfatYes (is blank if the type is unknown)The specific type of either the file system or what the volume is used for, cf. volume.fsusage
+                volume.fsversion (string)
+              example: FAT32Version number or subtype of the filesystem
+                volume.label (string)
+              example: 'Fedora Core 1.90' Yes (is blank if no label is found)The label of the volume
+                volume.uuid (string)
+              example: 4060-6C11Yes (is blank if no UUID is found)The Universal Unique Identifer for the volume
+                volume.is_disc (bool)
+              YesIf the volume stems from an optical disc, this
                 property is true and the device object will also have
-                the capability <TT
-CLASS="literal"
->volume.disc</TT
->
-              </TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->volume.block_size</TT
-> (string)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->No</TD
-><TD
->&#13;                The block size of the volume
-              </TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->volume.num_blocks</TT
-> (string)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->No</TD
-><TD
->&#13;                Number of blocks on the volume
-              </TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->volume.size</TT
-> (uint64)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->No</TD
-><TD
->&#13;                Size of the volume in bytes
-              </TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->volume.is_partition</TT
-> (bool)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->Yes</TD
-><TD
->&#13;                If the volume stems from a partition on e.g. a hard
-                disk, this property is set to <TT
-CLASS="literal"
->TRUE</TT
->.
-              </TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->volume.linux.is_device_mapper</TT
-> (bool)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->Yes, but only on Linux</TD
-><TD
->&#13;                If the volume stems from the Linux Device Mapper this property is set to <TT
-CLASS="literal"
->TRUE</TT
->.
-              </TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->volume.partition.number</TT
-> (int)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->&#13;                If, and only if, <TT
-CLASS="literal"
->volume.is_partition</TT
->
-                is set to <TT
-CLASS="literal"
->TRUE</TT
->.
-              </TD
-><TD
->&#13;                The number of the partition.
-              </TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->volume.partition.label</TT
-> (string)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->&#13;                If, and only if, <TT
-CLASS="literal"
->volume.is_partition</TT
->
-                is set to <TT
-CLASS="literal"
->TRUE</TT
->.
-              </TD
-><TD
->&#13;	        Label of partition. Only available for "apm" and "gpt"
+                the capability volume.disc
+              
+                volume.block_size (string)
+              No
+                The block size of the volume
+              
+                volume.num_blocks (string)
+              No
+                Number of blocks on the volume
+              
+                volume.size (uint64)
+              No
+                Size of the volume in bytes
+              
+                volume.is_partition (bool)
+              Yes
+                If the volume stems from a partition on e.g. a hard
+                disk, this property is set to TRUE.
+              
+                volume.linux.is_device_mapper (bool)
+              Yes, but only on Linux
+                If the volume stems from the Linux Device Mapper this property is set to TRUE.
+              
+                volume.partition.number (int)
+              
+                If, and only if, volume.is_partition
+                is set to TRUE.
+              
+                The number of the partition.
+              
+                volume.partition.label (string)
+              
+                If, and only if, volume.is_partition
+                is set to TRUE.
+              
+	        Label of partition. Only available for "apm" and "gpt"
 		partition tables. Note that this is not the same as the
-		file system label defined in <TT
-CLASS="literal"
->volume.label</TT
->.
-              </TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->volume.partition.uuid</TT
-> (string)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->&#13;                If, and only if, <TT
-CLASS="literal"
->volume.is_partition</TT
->
-                is set to <TT
-CLASS="literal"
->TRUE</TT
->.
-              </TD
-><TD
->&#13;                The UUID or GUID of the partition table entry. Only available for
+		file system label defined in volume.label.
+              
+                volume.partition.uuid (string)
+              
+                If, and only if, volume.is_partition
+                is set to TRUE.
+              
+                The UUID or GUID of the partition table entry. Only available for
 		"gpt" partition tables.
-              </TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->volume.partition.scheme</TT
-> (string)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->&#13;                If, and only if, <TT
-CLASS="literal"
->volume.is_partition</TT
->
-                is set to <TT
-CLASS="literal"
->TRUE</TT
->.
-              </TD
-><TD
->&#13;                The scheme of the partition table this entry is part of.
+              
+                volume.partition.scheme (string)
+              
+                If, and only if, volume.is_partition
+                is set to TRUE.
+              
+                The scheme of the partition table this entry is part of.
 		Note that this is not necessarily the same as 
-		<TT
-CLASS="literal"
->storage.partitioning_scheme</TT
-> as 
+		storage.partitioning_scheme as 
 		some partition tables can embed other partition tables.
-              </TD
-></TR
-><TR
-><TD
->&nbsp;</TD
-><TD
->mbr</TD
-><TD
->&nbsp;</TD
-><TD
->&#13;                Master Boot Record
-              </TD
-></TR
-><TR
-><TD
->&nbsp;</TD
-><TD
->embr</TD
-><TD
->&nbsp;</TD
-><TD
->&#13;                Extended Master Boot Record
-              </TD
-></TR
-><TR
-><TD
->&nbsp;</TD
-><TD
->gpt</TD
-><TD
->&nbsp;</TD
-><TD
->&#13;                GUID Partition Table as defined by EFI
-              </TD
-></TR
-><TR
-><TD
->&nbsp;</TD
-><TD
->apm</TD
-><TD
->&nbsp;</TD
-><TD
->&#13;                Apple Partition Map
-              </TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->volume.partition.type</TT
-> (string)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->&#13;                If, and only if, <TT
-CLASS="literal"
->volume.is_partition</TT
->
-                is set to <TT
-CLASS="literal"
->TRUE</TT
->.
-              </TD
-><TD
->&#13;                The type of the partition table entry. Depends on 
-		<TT
-CLASS="literal"
->volume.partition.scheme</TT
->.
-              </TD
-></TR
-><TR
-><TD
->&nbsp;</TD
-><TD
-><TT
-CLASS="literal"
->mbr</TT
-> and <TT
-CLASS="literal"
->embr</TT
-> entries</TD
-><TD
->&nbsp;</TD
-><TD
->&#13;	        The hexadecimal encoding of the 8-bit partition type, see 
+              mbr
+                Master Boot Record
+              embr
+                Extended Master Boot Record
+              gpt
+                GUID Partition Table as defined by EFI
+              apm
+                Apple Partition Map
+              
+                volume.partition.type (string)
+              
+                If, and only if, volume.is_partition
+                is set to TRUE.
+              
+                The type of the partition table entry. Depends on 
+		volume.partition.scheme.
+              mbr and embr entries
+	        The hexadecimal encoding of the 8-bit partition type, see 
 		http://www.win.tue.nl/~aeb/partitions/partition_types-1.html
 		for a list. For example the Linux partition type is represented
 		as the string "0x83".
-              </TD
-></TR
-><TR
-><TD
->&nbsp;</TD
-><TD
-><TT
-CLASS="literal"
->gpt</TT
-> entries</TD
-><TD
->&nbsp;</TD
-><TD
->&#13;	        The GUID encoded as a string. See http://en.wikipedia.org/wiki/GUID_Partition_Table
+              gpt entries
+	        The GUID encoded as a string. See http://en.wikipedia.org/wiki/GUID_Partition_Table
 		for a list of well-known GUID's.
-              </TD
-></TR
-><TR
-><TD
->&nbsp;</TD
-><TD
-><TT
-CLASS="literal"
->apm</TT
-> entries</TD
-><TD
->&nbsp;</TD
-><TD
->&#13;	        Defined in http://developer.apple.com/documentation/mac/Devices/Devices-126.html.
+              apm entries
+	        Defined in http://developer.apple.com/documentation/mac/Devices/Devices-126.html.
 		Also note that for FAT file systems, it appears that "DOS_FAT_32", "DOS_FAT_16" 
 		and "DOS_FAT_12" are also recognized under Mac OS X (I've tested this too) cf. 
 		http://lists.apple.com/archives/Darwin-drivers/2003/May/msg00021.html
-              </TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->volume.partition.flags</TT
-> (strlist)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->&#13;                If, and only if, <TT
-CLASS="literal"
->volume.is_partition</TT
->
-                is set to <TT
-CLASS="literal"
->TRUE</TT
->.
-              </TD
-><TD
->&#13;	        Flags conveying specific information about the partition
+              
+                volume.partition.flags (strlist)
+              
+                If, and only if, volume.is_partition
+                is set to TRUE.
+              
+	        Flags conveying specific information about the partition
 		entry. Dependent on the partitioning scheme.
-              </TD
-></TR
-><TR
-><TD
->&nbsp;</TD
-><TD
-><TT
-CLASS="literal"
->mbr</TT
-> and <TT
-CLASS="literal"
->embr</TT
-> entries</TD
-><TD
->&nbsp;</TD
-><TD
->&#13;	        Only one flag, "boot", is defined. This is used by some BIOS'es and
+              mbr and embr entries
+	        Only one flag, "boot", is defined. This is used by some BIOS'es and
 		boot loaders to populate a boot menu. It means that a partition is
 		bootable.
-              </TD
-></TR
-><TR
-><TD
->&nbsp;</TD
-><TD
-><TT
-CLASS="literal"
->gpt</TT
-> entries</TD
-><TD
->&nbsp;</TD
-><TD
->&#13;	        Only the flag "required" is recognized. This corresponds to
+              gpt entries
+	        Only the flag "required" is recognized. This corresponds to
 		bit 0 of the attibutes (at offset 48), meaning 
 		"Required for the platform to function. The system cannot 
 		function normally if this partition is removed. This
@@ -6148,1163 +1174,174 @@ CLASS="literal"
 		system, and if it is removed the system may not boot. It may
 		contain diagnostics, recovery tools, or other code or data that is
 		critical to the functioning of a system independent of any OS."
-              </TD
-></TR
-><TR
-><TD
->&nbsp;</TD
-><TD
-><TT
-CLASS="literal"
->apm</TT
-> entries</TD
-><TD
->&nbsp;</TD
-><TD
->&#13;	        The following flags are recognized: 
+              apm entries
+	        The following flags are recognized: 
 		"allocated" if the partition is already allocated; and
 		"in_use" if the partition is in use; may be cleared after a system reset; and
 		"boot" if partition contains valid boot information; and
 		"allow_read" if partition allows reading; and
 		"allow_write"; if partition allows writing; and
 		"boot_code_is_pic"; if boot code is position independent
-              </TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->volume.partition.media_size</TT
-> (uint64)
-              </TD
-><TD
->example: 500107862016</TD
-><TD
->&#13;                If, and only if, <TT
-CLASS="literal"
->volume.is_partition</TT
->
-                is set to <TT
-CLASS="literal"
->TRUE</TT
->.
-              </TD
-><TD
->&#13;                If available, size of the current media or the fixed disk in the storage device.
-              </TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->volume.partition.start</TT
-> (uint64)
-              </TD
-><TD
->example: 32256</TD
-><TD
->&#13;                If, and only if, <TT
-CLASS="literal"
->volume.is_partition</TT
->
-                is set to <TT
-CLASS="literal"
->TRUE</TT
->.
-              </TD
-><TD
->&#13;                If available, the offset where the physical partition starts on the media or the fixed disk in the storage device.
-              </TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-><P
->&#13;        Device objects with this capability may emit the following
+              
+                volume.partition.media_size (uint64)
+              example: 500107862016
+                If, and only if, volume.is_partition
+                is set to TRUE.
+              
+                If available, size of the current media or the fixed disk in the storage device.
+              
+                volume.partition.start (uint64)
+              example: 32256
+                If, and only if, volume.is_partition
+                is set to TRUE.
+              
+                If available, the offset where the partition starts on the media or the fixed disk in the storage device.
+              
+        Device objects with this capability may emit the following
         device conditions
-      </P
-><DIV
-CLASS="informaltable"
-><P
-></P
-><A
-NAME="AEN1929"
-></A
-><TABLE
-BORDER="1"
-CLASS="CALSTABLE"
-><COL><COL><THEAD
-><TR
-><TH
->Condition Name</TH
-><TH
->Parameters</TH
-><TH
->Example</TH
-><TH
->Description</TH
-></TR
-></THEAD
-><TBODY
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->VolumeMount</TT
->
-              </TD
-><TD
->&#13;                <TT
-CLASS="literal"
->block.device</TT
-> (string),
-                <TT
-CLASS="literal"
->volume.mount_point</TT
-> (string)
-              </TD
-><TD
->&#13;                <TT
-CLASS="literal"
->/dev/sda1</TT
->,
-                <TT
-CLASS="literal"
->/media/compact_flash</TT
->
-              </TD
-><TD
->Emitted when a volume is mounted</TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->VolumeUnmount</TT
->
-              </TD
-><TD
->&#13;                <TT
-CLASS="literal"
->block.device</TT
-> (string),
-                <TT
-CLASS="literal"
->volume.mount_point</TT
-> (string)
-              </TD
-><TD
->&#13;                <TT
-CLASS="literal"
->/dev/sda1</TT
->,
-                <TT
-CLASS="literal"
->/media/compact_flash</TT
->
-              </TD
-><TD
->Emitted when a volume is unmounted</TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->VolumeUnmountForced</TT
->
-              </TD
-><TD
->&#13;                <TT
-CLASS="literal"
->block.device</TT
-> (string),
-                <TT
-CLASS="literal"
->volume.mount_point</TT
-> (string)
-              </TD
-><TD
->&#13;                <TT
-CLASS="literal"
->/dev/sda1</TT
->,
-                <TT
-CLASS="literal"
->/media/compact_flash</TT
->
-              </TD
-><TD
->&#13;                Emitted when a volume is forcibly unmounted because
+      Condition NameParametersExampleDescription
+                VolumeMount
+              
+                block.device (string),
+                volume.mount_point (string)
+              
+                /dev/sda1,
+                /media/compact_flash
+              Emitted when a volume is mounted
+                VolumeUnmount
+              
+                block.device (string),
+                volume.mount_point (string)
+              
+                /dev/sda1,
+                /media/compact_flash
+              Emitted when a volume is unmounted
+                VolumeUnmountForced
+              
+                block.device (string),
+                volume.mount_point (string)
+              
+                /dev/sda1,
+                /media/compact_flash
+              
+                Emitted when a volume is forcibly unmounted because
                 the media backing the volume was removed.
-              </TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><DIV
-CLASS="sect2"
-><HR><H3
-CLASS="sect2"
-><A
-NAME="device-properties-kernel"
->2.3.2. <TT
-CLASS="literal"
->system</TT
-> namespace</A
-></H3
-><P
->&#13;        This namespace is found on the toplevel "Computer" device,
+              
+        system namespace
+      
+        This namespace is found on the toplevel "Computer" device,
         and represents information about the system and the currently
         running kernel.
-      </P
-><DIV
-CLASS="informaltable"
-><P
-></P
-><A
-NAME="AEN1972"
-></A
-><TABLE
-BORDER="1"
-CLASS="CALSTABLE"
-><COL><COL><THEAD
-><TR
-><TH
->Key (type)</TH
-><TH
->Values</TH
-><TH
->Mandatory</TH
-><TH
->Description</TH
-></TR
-></THEAD
-><TBODY
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->system.kernel.name</TT
-> (string)
-              </TD
-><TD
->example: Linux</TD
-><TD
->No</TD
-><TD
->&#13;                The name of the kernel, usually the equivalent of
-                <TT
-CLASS="literal"
->uname -s</TT
->.
-              </TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->system.kernel.version</TT
-> (string)
-              </TD
-><TD
->example: 2.6.5-7.104-default</TD
-><TD
->No</TD
-><TD
->&#13;                The version of the currently running kernel.  Usually
-                the equivalent of <TT
-CLASS="literal"
->uname -r</TT
->.
-              </TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->system.kernel.machine</TT
-> (string)
-              </TD
-><TD
->example: i686</TD
-><TD
->No</TD
-><TD
->&#13;                The "machine hardware name" of the currently running kernel.
-                Usually the equivalent of <TT
-CLASS="literal"
->uname -m</TT
->.
-              </TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->system.formfactor</TT
-> (string)
-              </TD
-><TD
->example: laptop, desktop, server, unknown</TD
-><TD
->Yes</TD
-><TD
->&#13;                The formfactor of the system. Usually the equivalent of
-                <TT
-CLASS="literal"
->smbios.chassis.type</TT
-> or set from information
+      Key (type)ValuesMandatoryDescription
+                system.kernel.name (string)
+              example: LinuxNo
+                The name of the kernel, usually the equivalent of
+                uname -s.
+              
+                system.kernel.version (string)
+              example: 2.6.5-7.104-defaultNo
+                The version of the currently running kernel.  Usually
+                the equivalent of uname -r.
+              
+                system.kernel.machine (string)
+              example: i686No
+                The "machine hardware name" of the currently running kernel.
+                Usually the equivalent of uname -m.
+              
+                system.formfactor (string)
+              example: laptop, desktop, server, unknownYes
+                The formfactor of the system. Usually the equivalent of
+                smbios.chassis.type or set from information
                 about ACPI/APM/PMU properties.
-              </TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->system.vendor</TT
-> (string)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->No</TD
-><TD
->&#13;                The name of the manufacturer of the machine. Usually the equivalent of
-                <TT
-CLASS="literal"
->smbios.system.manufacturer</TT
->.
-              </TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->system.product</TT
-> (string)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->No</TD
-><TD
->&#13;                The product name of the machine. Usually the equivalent of
-                <TT
-CLASS="literal"
->smbios.system.product</TT
-> and
-                <TT
-CLASS="literal"
->smbios.system.version</TT
->.
-              </TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><DIV
-CLASS="sect2"
-><HR><H3
-CLASS="sect2"
-><A
-NAME="device-properties-volume-disc"
->2.3.3. <TT
-CLASS="literal"
->volume.disc</TT
-> namespace</A
-></H3
-><P
->&#13;        This namespace is for device objects that represent optical
+              
+                system.vendor (string)
+              No
+                The name of the manufacturer of the machine. Usually the equivalent of
+                smbios.system.manufacturer.
+              
+                system.product (string)
+              No
+                The product name of the machine. Usually the equivalent of
+                smbios.system.product and
+                smbios.system.version.
+              
+        volume.disc namespace
+      
+        This namespace is for device objects that represent optical
         discs, e.g. device objects with the capability
-        <TT
-CLASS="literal"
->volume.disc</TT
->. Such device objects will
-        also have the capability <TT
-CLASS="literal"
->volume</TT
->.
-      </P
-><DIV
-CLASS="informaltable"
-><P
-></P
-><A
-NAME="AEN2030"
-></A
-><TABLE
-BORDER="1"
-CLASS="CALSTABLE"
-><COL><COL><THEAD
-><TR
-><TH
->Key (type)</TH
-><TH
->Values</TH
-><TH
->Mandatory</TH
-><TH
->Description</TH
-></TR
-></THEAD
-><TBODY
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->volume.disc.has_audio</TT
-> (bool)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->Yes</TD
-><TD
->Is true only if the disc contains audio</TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->volume.disc.has_data</TT
-> (bool)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->Yes</TD
-><TD
->Is true only if the disc contains data</TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->volume.disc.is_vcd</TT
-> (bool)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->Yes</TD
-><TD
->Is true only if the disc is a Video CD</TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->volume.disc.is_svcd</TT
-> (bool)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->Yes</TD
-><TD
->Is true only if the disc is a Super Video CD</TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->volume.disc.is_videodvd</TT
-> (bool)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->Yes</TD
-><TD
->Is true only if the disc is a Video DVD</TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->volume.disc.is_appendable</TT
-> (bool)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->Yes</TD
-><TD
->Is true only if it's possible to write additional data</TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->volume.disc.is_blank</TT
-> (bool)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->Yes</TD
-><TD
->Is true only if the disc is blank</TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->volume.disc.is_rewritable</TT
-> (bool)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->Yes</TD
-><TD
->Is true only if the disc is rewritable</TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->volume.disc.capacity</TT
-> (uint64)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->No</TD
-><TD
->Capacity of disc, in bytes</TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->volume.disc.type</TT
-> (string)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->Yes</TD
-><TD
->This property specifies the physical type of the disc</TD
-></TR
-><TR
-><TD
->&nbsp;</TD
-><TD
->cd_rom</TD
-><TD
->&nbsp;</TD
-><TD
->CD-ROM disc</TD
-></TR
-><TR
-><TD
->&nbsp;</TD
-><TD
->cd_r</TD
-><TD
->&nbsp;</TD
-><TD
->CD-R disc</TD
-></TR
-><TR
-><TD
->&nbsp;</TD
-><TD
->cd_rw</TD
-><TD
->&nbsp;</TD
-><TD
->CD-RW disc</TD
-></TR
-><TR
-><TD
->&nbsp;</TD
-><TD
->dvd_rom</TD
-><TD
->&nbsp;</TD
-><TD
->DVD-ROM disc</TD
-></TR
-><TR
-><TD
->&nbsp;</TD
-><TD
->dvd_ram</TD
-><TD
->&nbsp;</TD
-><TD
->DVD-RAM disc</TD
-></TR
-><TR
-><TD
->&nbsp;</TD
-><TD
->dvd_r</TD
-><TD
->&nbsp;</TD
-><TD
->DVD-R disc</TD
-></TR
-><TR
-><TD
->&nbsp;</TD
-><TD
->dvd_rw</TD
-><TD
->&nbsp;</TD
-><TD
->DVD-RW disc</TD
-></TR
-><TR
-><TD
->&nbsp;</TD
-><TD
->dvd_plus_r</TD
-><TD
->&nbsp;</TD
-><TD
->DVD+R disc</TD
-></TR
-><TR
-><TD
->&nbsp;</TD
-><TD
->dvd_plus_rw</TD
-><TD
->&nbsp;</TD
-><TD
->DVD+RW disc</TD
-></TR
-><TR
-><TD
->&nbsp;</TD
-><TD
->bd_rom</TD
-><TD
->&nbsp;</TD
-><TD
->BD-ROM disc</TD
-></TR
-><TR
-><TD
->&nbsp;</TD
-><TD
->bd_r</TD
-><TD
->&nbsp;</TD
-><TD
->BD-R disc</TD
-></TR
-><TR
-><TD
->&nbsp;</TD
-><TD
->bd_re</TD
-><TD
->&nbsp;</TD
-><TD
->BD-RE disc</TD
-></TR
-><TR
-><TD
->&nbsp;</TD
-><TD
->hddvd_rom</TD
-><TD
->&nbsp;</TD
-><TD
->HD DVD-ROM disc</TD
-></TR
-><TR
-><TD
->&nbsp;</TD
-><TD
->hddvd_r</TD
-><TD
->&nbsp;</TD
-><TD
->HD DVD-R disc</TD
-></TR
-><TR
-><TD
->&nbsp;</TD
-><TD
->hddvd_rw</TD
-><TD
->&nbsp;</TD
-><TD
->HD DVD-Rewritable disc</TD
-></TR
-><TR
-><TD
->&nbsp;</TD
-><TD
->unknown</TD
-><TD
->&nbsp;</TD
-><TD
->Unknown type or lack of support from drive to determine the type</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><DIV
-CLASS="sect2"
-><HR><H3
-CLASS="sect2"
-><A
-NAME="device-properties-storage"
->2.3.4. <TT
-CLASS="literal"
->storage</TT
-> namespace</A
-></H3
-><P
->&#13;        This namespace is used to describe physical storage devices
+        volume.disc. Such device objects will
+        also have the capability volume.
+      Key (type)ValuesMandatoryDescription
+                volume.disc.has_audio (bool)
+              YesIs true only if the disc contains audio
+                volume.disc.has_data (bool)
+              YesIs true only if the disc contains data
+                volume.disc.is_vcd (bool)
+              YesIs true only if the disc is a Video CD
+                volume.disc.is_svcd (bool)
+              YesIs true only if the disc is a Super Video CD
+                volume.disc.is_videodvd (bool)
+              YesIs true only if the disc is a Video DVD
+                volume.disc.is_appendable (bool)
+              YesIs true only if it's possible to write additional data
+                volume.disc.is_blank (bool)
+              YesIs true only if the disc is blank
+                volume.disc.is_rewritable (bool)
+              YesIs true only if the disc is rewritable
+                volume.disc.capacity (uint64)
+              NoCapacity of disc, in bytes
+                volume.disc.type (string)
+              YesThis property specifies the physical type of the disccd_romCD-ROM disccd_rCD-R disccd_rwCD-RW discdvd_romDVD-ROM discdvd_ramDVD-RAM discdvd_rDVD-R discdvd_rwDVD-RW discdvd_plus_rDVD+R discdvd_plus_rwDVD+RW discbd_romBD-ROM discbd_rBD-R discbd_reBD-RE dischddvd_romHD DVD-ROM dischddvd_rHD DVD-R dischddvd_rwHD DVD-Rewritable discunknownUnknown type or lack of support from drive to determine the type
+        storage namespace
+      
+        This namespace is used to describe storage devices
         and their capabilities. Such device objects will have the
-        capability <TT
-CLASS="literal"
->storage</TT
-> and
+        capability storage and
         they will export the properties below. Note that device
-        objects can only have the <TT
-CLASS="literal"
->storage</TT
-> capability
-        if they already got capability <TT
-CLASS="literal"
->block</TT
-> and the
-        property <TT
-CLASS="literal"
->block.is_volume</TT
-> set to FALSE.
-        One significant between the <TT
-CLASS="literal"
->storage</TT
-> and
-        <TT
-CLASS="literal"
->block</TT
-> namespace is that the properties
-        exported in the <TT
-CLASS="literal"
->storage</TT
-> represents
+        objects can only have the storage capability
+        if they already got capability block and the
+        property block.is_volume set to FALSE.
+        One significant between the storage and
+        block namespace is that the properties
+        exported in the storage represents
         constant vital product information, whereas the properties
-        in the <TT
-CLASS="literal"
->block</TT
-> namespace represent
+        in the block namespace represent
         variable system-dependent information.
-      </P
-><DIV
-CLASS="informaltable"
-><P
-></P
-><A
-NAME="AEN2191"
-></A
-><TABLE
-BORDER="1"
-CLASS="CALSTABLE"
-><COL><COL><THEAD
-><TR
-><TH
->Key (type)</TH
-><TH
->Values</TH
-><TH
->Mandatory</TH
-><TH
->Description</TH
-></TR
-></THEAD
-><TBODY
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->storage.bus</TT
-> (string)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->Yes</TD
-><TD
->Physical interface the storage device is attached to</TD
-></TR
-><TR
-><TD
->&nbsp;</TD
-><TD
->ide</TD
-><TD
->&nbsp;</TD
-><TD
->IDE or ATA interface</TD
-></TR
-><TR
-><TD
->&nbsp;</TD
-><TD
->usb</TD
-><TD
->&nbsp;</TD
-><TD
->USB interface</TD
-></TR
-><TR
-><TD
->&nbsp;</TD
-><TD
->ieee1394</TD
-><TD
->&nbsp;</TD
-><TD
->IEEE 1394 interface</TD
-></TR
-><TR
-><TD
->&nbsp;</TD
-><TD
->scsi</TD
-><TD
->&nbsp;</TD
-><TD
->SCSI interface</TD
-></TR
-><TR
-><TD
->&nbsp;</TD
-><TD
->sata</TD
-><TD
->&nbsp;</TD
-><TD
->SATA interface</TD
-></TR
-><TR
-><TD
->&nbsp;</TD
-><TD
->platform</TD
-><TD
->&nbsp;</TD
-><TD
->Legacy device that is part of the platform</TD
-></TR
-><TR
-><TD
->&nbsp;</TD
-><TD
->&nbsp;</TD
-><TD
->&nbsp;</TD
-><TD
->&nbsp;</TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->storage.drive_type</TT
-> (string)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->Yes</TD
-><TD
->&#13;                The type of the drive. Note that it may not be
+      Key (type)ValuesMandatoryDescription
+                storage.bus (string)
+              YesInterface the storage device is attached toideIDE or ATA interfaceusbUSB interfaceieee1394IEEE 1394 interfacescsiSCSI interfacesataSATA interfaceplatformLegacy device that is part of the platform
+                storage.drive_type (string)
+              Yes
+                The type of the drive. Note that it may not be
                 possible to probe for some of these properties so in
                 some cases memory card readers may appear as
                 harddisks. Device information files can be used to
                 override this value.
-              </TD
-></TR
-><TR
-><TD
->&nbsp;</TD
-><TD
->disk</TD
-><TD
->&nbsp;</TD
-><TD
->The device is a harddisk</TD
-></TR
-><TR
-><TD
->&nbsp;</TD
-><TD
->cdrom</TD
-><TD
->&nbsp;</TD
-><TD
->&#13;                The device is an optical drive. The device object will also have the capability <TT
-CLASS="literal"
->storage.cdrom</TT
-> in this case.
-              </TD
-></TR
-><TR
-><TD
->&nbsp;</TD
-><TD
->floppy</TD
-><TD
->&nbsp;</TD
-><TD
->The device is a floppy disk drive</TD
-></TR
-><TR
-><TD
->&nbsp;</TD
-><TD
->tape</TD
-><TD
->&nbsp;</TD
-><TD
->The device is a tape drive</TD
-></TR
-><TR
-><TD
->&nbsp;</TD
-><TD
->compact_flash</TD
-><TD
->&nbsp;</TD
-><TD
->The device is a card reader for Compact Flash memory cards</TD
-></TR
-><TR
-><TD
->&nbsp;</TD
-><TD
->memory_stick</TD
-><TD
->&nbsp;</TD
-><TD
->The device is a card reader for MemoryStick memory cards</TD
-></TR
-><TR
-><TD
->&nbsp;</TD
-><TD
->smart_media</TD
-><TD
->&nbsp;</TD
-><TD
->The device is a card reader for SmartMedia memory cards</TD
-></TR
-><TR
-><TD
->&nbsp;</TD
-><TD
->sd_mmc</TD
-><TD
->&nbsp;</TD
-><TD
->The device is a card reader for SecureDigital/MultiMediaCard memory cards</TD
-></TR
-><TR
-><TD
->&nbsp;</TD
-><TD
->&nbsp;</TD
-><TD
->&nbsp;</TD
-><TD
->&nbsp;</TD
-></TR
-><TR
-><TD
->&#13;	        <TT
-CLASS="literal"
->storage.removable</TT
-> (bool)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->Yes</TD
-><TD
->Media can be removed from the storage device</TD
-></TR
-><TR
-><TD
->&#13;	        <TT
-CLASS="literal"
->storage.removable.media_available</TT
-> (bool)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->Yes</TD
-><TD
->true, if and only if, media have been detected in storage device</TD
-></TR
-><TR
-><TD
->&#13;	        <TT
-CLASS="literal"
->storage.removable.media_size</TT
-> (uint64)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->Yes</TD
-><TD
->Size of media in storage device. Available only if media have been detected in storage device.</TD
-></TR
-><TR
-><TD
->&#13;	        <TT
-CLASS="literal"
->storage.partitioning_scheme</TT
-> (string)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->Only when media is inserted and is partitioned</TD
-><TD
->The partitioning scheme of the media.</TD
-></TR
-><TR
-><TD
->&nbsp;</TD
-><TD
->mbr</TD
-><TD
->&nbsp;</TD
-><TD
->Master Boot Record partitioning scheme used in most PC's</TD
-></TR
-><TR
-><TD
->&nbsp;</TD
-><TD
->gpt</TD
-><TD
->&nbsp;</TD
-><TD
->GUID Partitioning Table as defined by UEFI</TD
-></TR
-><TR
-><TD
->&nbsp;</TD
-><TD
->apm</TD
-><TD
->&nbsp;</TD
-><TD
->Apple Partition Map, used in non-Intel Apple computers</TD
-></TR
-><TR
-><TD
->&#13;	        <TT
-CLASS="literal"
->storage.size</TT
-> (uint64)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->No</TD
-><TD
->size in bytes of the storage device - only meaningful if storage.removable is FALSE</TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->storage.requires_eject</TT
-> (bool)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->Yes</TD
-><TD
->The eject ioctl is required to properly eject the media</TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->storage.hotpluggable</TT
-> (bool)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->Yes</TD
-><TD
->The storage device can be removed while the system is running</TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->storage.media_check_enabled</TT
-> (bool)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->Yes</TD
-><TD
->If this property is set to FALSE then HAL will not continuosly poll for media changes. </TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->storage.automount_enabled_hint</TT
-> (bool)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->Yes</TD
-><TD
->This property is a hint to desktop file managers that they shouldn't automount volumes of the storage device when they appear.</TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->storage.no_partitions_hint</TT
-> (bool)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->Yes</TD
-><TD
->&#13;                This property is a hint to programs that maintain the
-                <TT
-CLASS="literal"
->/etc/fstab</TT
-> file to signal, when
+              diskThe device is a harddiskcdrom
+                The device is an optical drive. The device object will also have the capability storage.cdrom in this case.
+              floppyThe device is a floppy disk drivetapeThe device is a tape drivecompact_flashThe device is a card reader for Compact Flash memory cardsmemory_stickThe device is a card reader for MemoryStick memory cardssmart_mediaThe device is a card reader for SmartMedia memory cardssd_mmcThe device is a card reader for SecureDigital/MultiMediaCard memory cards
+	        storage.removable (bool)
+              YesMedia can be removed from the storage device
+	        storage.removable.media_available (bool)
+              Yestrue, if and only if, media have been detected in storage device
+	        storage.removable.media_size (uint64)
+              YesSize of media in storage device. Available only if media have been detected in storage device.
+	        storage.partitioning_scheme (string)
+              Only when media is inserted and is partitionedThe partitioning scheme of the media.mbrMaster Boot Record partitioning scheme used in most PC'sgptGUID Partitioning Table as defined by UEFIapmApple Partition Map, used in non-Intel Apple computers
+	        storage.size (uint64)
+              Nosize in bytes of the storage device - only meaningful if storage.removable is FALSE
+                storage.requires_eject (bool)
+              YesThe eject ioctl is required to properly eject the media
+                storage.hotpluggable (bool)
+              YesThe storage device can be removed while the system is running
+                storage.media_check_enabled (bool)
+              YesIf this property is set to FALSE then HAL will not continuosly poll for media changes. 
+                storage.automount_enabled_hint (bool)
+              YesThis property is a hint to desktop file managers that they shouldn't automount volumes of the storage device when they appear.
+                storage.no_partitions_hint (bool)
+              Yes
+                This property is a hint to programs that maintain the
+                /etc/fstab file to signal, when
                 TRUE, that the storage drive (such as floppy or
                 optical drives) is used for media with no partition
                 table so an entry can be added ahead of media
@@ -7316,1188 +1353,225 @@ CLASS="literal"
                 formatted with a PC style partition table and a single
                 FAT partition. However, it may be formatted with just
                 a single FAT partition and no partition table).
-              </TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->storage.physical_device</TT
-> (string)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->Yes</TD
-><TD
->&#13;                This contains the UDI of the device object
-                representing the physical device or blank if
+              
+                storage.originating_device (string)
+              Yes
+                This contains the UDI of the device object
+                representing the device or blank if
                 there is no such device (which is TRUE for legacy
                 devices such as x86 floppy drives). Additionally, a
                 number of properties are merged from that device
                 object. Specifically, all properties prefixed
-                with <TT
-CLASS="literal"
->storage</TT
-> and, if the physical
+                with storage and, if the
                 device has several storage ports,
-                <TT
-CLASS="literal"
->storage_lunX</TT
-> (where X is number of
+                storage_lunX (where X is number of
                 the port starting from zero) are merged and will have
-                the prefix <TT
-CLASS="literal"
->storage</TT
->.
-                See <A
-HREF="#fdi-example-6in1"
->Section 3.1.3</A
-> for an example.
-              </TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->storage.model</TT
-> (string)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->Yes</TD
-><TD
->The name of the drive</TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->storage.vendor</TT
-> (string)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->Yes</TD
-><TD
->The vendor of the drive</TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->storage.serial</TT
-> (string)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->No</TD
-><TD
->The serial number of the drive</TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->storage.firmware_revision</TT
-> (string)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->No</TD
-><TD
->The revision of the firmware of the drive</TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->storage.icon.drive</TT
-> (string)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->No</TD
-><TD
->&#13;                Name of icon to use for displaying the drive. The name
+                the prefix storage.
+                See  for an example.
+              
+                storage.model (string)
+              YesThe name of the drive
+                storage.vendor (string)
+              YesThe vendor of the drive
+                storage.serial (string)
+              NoThe serial number of the drive
+                storage.firmware_revision (string)
+              NoThe revision of the firmware of the drive
+                storage.icon.drive (string)
+              No
+                Name of icon to use for displaying the drive. The name
                 must comply with freedesktop.org icon-theme specification
                 and must not be an absolute path.
                 This property exists such that e.g. OEM's can install
-                icons in <TT
-CLASS="literal"
->/usr/share/icons/hicolor</TT
->
+                icons in /usr/share/icons/hicolor
                 a device information file matching their device.
-              </TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->storage.icon.volume</TT
-> (string)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->No</TD
-><TD
->&#13;                Name of icon to use for displaying volumes from the drive.
+              
+                storage.icon.volume (string)
+              No
+                Name of icon to use for displaying volumes from the drive.
                 The name must comply with freedesktop.org icon-theme
                 specification and must not be an absolute path.
                 This property exists such that e.g. OEM's can install
-                icons in <TT
-CLASS="literal"
->/usr/share/icons/hicolor</TT
->
+                icons in /usr/share/icons/hicolor
                 a device information file matching their device.
-              </TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><DIV
-CLASS="sect2"
-><HR><H3
-CLASS="sect2"
-><A
-NAME="device-properties-storage-cdrom"
->2.3.5. <TT
-CLASS="literal"
->storage.cdrom</TT
-> namespace</A
-></H3
-><P
->&#13;        This namespace is used to describe optical storage drives
+              
+        storage.cdrom namespace
+      
+        This namespace is used to describe optical storage drives
         and their capabilities.Such device objects will have the
-        capability <TT
-CLASS="literal"
->storage.cdrom</TT
-> and
+        capability storage.cdrom and
         they will export the properties below. Note that device
-        objects can only have the <TT
-CLASS="literal"
->storage.cdrom</TT
-> capability
-        if they already got the capability <TT
-CLASS="literal"
->storage</TT
->.
-      </P
-><DIV
-CLASS="informaltable"
-><P
-></P
-><A
-NAME="AEN2424"
-></A
-><TABLE
-BORDER="1"
-CLASS="CALSTABLE"
-><COL><COL><THEAD
-><TR
-><TH
->Key (type)</TH
-><TH
->Values</TH
-><TH
->Mandatory</TH
-><TH
->Description</TH
-></TR
-></THEAD
-><TBODY
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->storage.cdrom.cdr</TT
-> (bool)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->Yes</TD
-><TD
->TRUE when the optical drive can write CD-R discs</TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->storage.cdrom.cdrw</TT
-> (bool)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->Yes</TD
-><TD
->TRUE when the optical drive can blank and write to CD-RW discs</TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->storage.cdrom.dvd</TT
-> (bool)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->Yes</TD
-><TD
->TRUE when the optical drive can read DVD-ROM discs</TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->storage.cdrom.dvdr</TT
-> (bool)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->Yes</TD
-><TD
->TRUE when the optical drive can write to DVD-R discs</TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->storage.cdrom.dvdrw</TT
-> (bool)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->Yes</TD
-><TD
->TRUE when the optical drive can blank and write to DVD-RW discs</TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->storage.cdrom.dvdram</TT
-> (bool)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->Yes</TD
-><TD
->TRUE when the optical drive can write to DVD-RAM discs</TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->storage.cdrom.dvdplusr</TT
-> (bool)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->Yes</TD
-><TD
->TRUE when the optical drive can write to DVD+R discs</TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->storage.cdrom.dvdplusrw</TT
-> (bool)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->Yes</TD
-><TD
->TRUE when the optical drive can blank and write to DVD+RW discs</TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->storage.cdrom.dvdplusrwdl</TT
-> (bool)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->Yes</TD
-><TD
->TRUE when the optical drive can blank and write to DVD+RW Dual-Layer discs</TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->storage.cdrom.dvdplusrdl</TT
-> (bool)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->Yes</TD
-><TD
->TRUE when the optical drive can write to DVD+R Dual-Layer discs</TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->storage.cdrom.bd</TT
-> (bool)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->Yes</TD
-><TD
->TRUE when the optical drive can read Blu-ray ROM discs</TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->storage.cdrom.bdr</TT
-> (bool)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->Yes</TD
-><TD
->TRUE when the optical drive can write to Blu-ray Recordable discs</TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->storage.cdrom.bdre</TT
-> (bool)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->Yes</TD
-><TD
->TRUE when the optical drive can write to Blu-ray Rewritable discs</TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->storage.cdrom.hddvd</TT
-> (bool)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->Yes</TD
-><TD
->TRUE when the optical drive can read Read-only HD DVD discs</TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->storage.cdrom.hddvdr</TT
-> (bool)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->Yes</TD
-><TD
->TRUE when the optical drive can write to Write-once HD DVD discs</TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->storage.cdrom.hddvdrw</TT
-> (bool)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->Yes</TD
-><TD
->TRUE when the optical drive can write to Rewritable HD DVD discs</TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->storage.cdrom.support_media_changed</TT
-> (bool)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->Yes</TD
-><TD
->TRUE if the drive can generate media changed events</TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->storage.cdrom.read_speed</TT
-> (int)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->Yes</TD
-><TD
->The maximum reading speed, in kb/s</TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->storage.cdrom.write_speed</TT
-> (int)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->Yes</TD
-><TD
->The maximum writing speed, in kb/s</TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->storage.cdrom.write_speeds</TT
-> (strlist)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->No</TD
-><TD
->By the device supported write speeds in kb/s</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><DIV
-CLASS="sect2"
-><HR><H3
-CLASS="sect2"
-><A
-NAME="device-properties-net"
->2.3.6. <TT
-CLASS="literal"
->net</TT
-> namespace</A
-></H3
-><P
->&#13;        This namespace is used to describe networking devices and
+        objects can only have the storage.cdrom capability
+        if they already got the capability storage.
+      Key (type)ValuesMandatoryDescription
+                storage.cdrom.cdr (bool)
+              YesTRUE when the optical drive can write CD-R discs
+                storage.cdrom.cdrw (bool)
+              YesTRUE when the optical drive can blank and write to CD-RW discs
+                storage.cdrom.dvd (bool)
+              YesTRUE when the optical drive can read DVD-ROM discs
+                storage.cdrom.dvdr (bool)
+              YesTRUE when the optical drive can write to DVD-R discs
+                storage.cdrom.dvdrw (bool)
+              YesTRUE when the optical drive can blank and write to DVD-RW discs
+                storage.cdrom.dvdram (bool)
+              YesTRUE when the optical drive can write to DVD-RAM discs
+                storage.cdrom.dvdplusr (bool)
+              YesTRUE when the optical drive can write to DVD+R discs
+                storage.cdrom.dvdplusrw (bool)
+              YesTRUE when the optical drive can blank and write to DVD+RW discs
+                storage.cdrom.dvdplusrwdl (bool)
+              YesTRUE when the optical drive can blank and write to DVD+RW Dual-Layer discs
+                storage.cdrom.dvdplusrdl (bool)
+              YesTRUE when the optical drive can write to DVD+R Dual-Layer discs
+                storage.cdrom.bd (bool)
+              YesTRUE when the optical drive can read Blu-ray ROM discs
+                storage.cdrom.bdr (bool)
+              YesTRUE when the optical drive can write to Blu-ray Recordable discs
+                storage.cdrom.bdre (bool)
+              YesTRUE when the optical drive can write to Blu-ray Rewritable discs
+                storage.cdrom.hddvd (bool)
+              YesTRUE when the optical drive can read Read-only HD DVD discs
+                storage.cdrom.hddvdr (bool)
+              YesTRUE when the optical drive can write to Write-once HD DVD discs
+                storage.cdrom.hddvdrw (bool)
+              YesTRUE when the optical drive can write to Rewritable HD DVD discs
+                storage.cdrom.support_media_changed (bool)
+              YesTRUE if the drive can generate media changed events
+                storage.cdrom.read_speed (int)
+              YesThe maximum reading speed, in kb/s
+                storage.cdrom.write_speed (int)
+              YesThe maximum writing speed, in kb/s
+                storage.cdrom.write_speeds (strlist)
+              NoBy the device supported write speeds in kb/s
+        net namespace
+      
+        This namespace is used to describe networking devices and
         their capabilities.Such device objects will have the
-        capability <TT
-CLASS="literal"
->net</TT
-> and they will export the
+        capability net and they will export the
         properties below. This namespace only describe the generic
         aspect of networking devices; specific networking technologies
         such as IEEE 802.3 and IEEE 802.11 have separate namespaces.
-      </P
-><DIV
-CLASS="informaltable"
-><P
-></P
-><A
-NAME="AEN2558"
-></A
-><TABLE
-BORDER="1"
-CLASS="CALSTABLE"
-><COL><COL><THEAD
-><TR
-><TH
->Key (type)</TH
-><TH
->Values</TH
-><TH
->Mandatory</TH
-><TH
->Description</TH
-></TR
-></THEAD
-><TBODY
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->net.address</TT
-> (string)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->Yes</TD
-><TD
->Hardware address as a string. Is hardware dependant</TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->net.arp_proto_hw_id</TT
-> (string)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->Yes</TD
-><TD
->ARP protocol hardware identifier</TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->net.interface</TT
-> (string)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->Yes</TD
-><TD
->Name of the interface; may change if an interface is
+      Key (type)ValuesMandatoryDescription
+                net.address (string)
+              YesHardware address as a string. Is hardware dependant
+                net.arp_proto_hw_id (string)
+              YesARP protocol hardware identifier
+                net.interface (string)
+              YesName of the interface; may change if an interface is
                 renamed
-              </TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->net.interface_up</TT
-> (bool)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->No</TD
-><TD
->Whether the interface is up</TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->net.linux.ifindex</TT
-> (string)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->Yes (only on Linux)</TD
-><TD
->Index of the interface</TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->net.physical_device</TT
-> (string)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->Yes</TD
-><TD
->UDI of the physical device the network device is bound to.</TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->net.media</TT
-> (string)
-              </TD
-><TD
->example: Ethernet</TD
-><TD
->Yes</TD
-><TD
->Textual description of the networking media</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><DIV
-CLASS="sect2"
-><HR><H3
-CLASS="sect2"
-><A
-NAME="device-properties-net-80203"
->2.3.7. <TT
-CLASS="literal"
->net.80203</TT
-> namespace</A
-></H3
-><P
->&#13;        Ethernet networking devices is described in this namespace
+              
+                net.interface_up (bool)
+              NoWhether the interface is up
+                net.linux.ifindex (string)
+              Yes (only on Linux)Index of the interface
+                net.originating_device (string)
+              YesUDI of the device the network device is bound to.
+                net.media (string)
+              example: EthernetYesTextual description of the networking media
+        net.80203 namespace
+      
+        Ethernet networking devices is described in this namespace
         for device objects with the capability
-        <TT
-CLASS="literal"
->net.80203</TT
->.
+        net.80203.
         Note that device
-        objects can only have the <TT
-CLASS="literal"
->net.80203</TT
-> capability
-        if they already have the capability <TT
-CLASS="literal"
->net</TT
->.
-      </P
-><DIV
-CLASS="informaltable"
-><P
-></P
-><A
-NAME="AEN2616"
-></A
-><TABLE
-BORDER="1"
-CLASS="CALSTABLE"
-><COL><COL><THEAD
-><TR
-><TH
->Key (type)</TH
-><TH
->Values</TH
-><TH
->Mandatory</TH
-><TH
->Description</TH
-></TR
-></THEAD
-><TBODY
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->net.80203.link</TT
-> (bool)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->&#13;                Only if the <TT
-CLASS="literal"
->net.80203</TT
-> capability is set
-                and <TT
-CLASS="literal"
->net.interface_up</TT
-> is
-                <TT
-CLASS="literal"
->TRUE</TT
->.
-              </TD
-><TD
->True if the ethernet adaptor is connected to a
+        objects can only have the net.80203 capability
+        if they already have the capability net.
+      Key (type)ValuesMandatoryDescription
+                net.80203.link (bool)
+              
+                Only if the net.80203 capability is set
+                and net.interface_up is
+                TRUE.
+              True if the ethernet adaptor is connected to a
                 another transceiver. NOTE: property not implemented yet.
-              </TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->net.80203.rate</TT
-> (uint64)
-              </TD
-><TD
->example: 100000000</TD
-><TD
->&#13;                Only if the <TT
-CLASS="literal"
->net.80203</TT
-> capability is set
-                and <TT
-CLASS="literal"
->net.80203.link</TT
-> is
-                <TT
-CLASS="literal"
->TRUE</TT
->.
-              </TD
-><TD
->Bandwidth of connection, in bits/s. NOTE: property not
+              
+                net.80203.rate (uint64)
+              example: 100000000
+                Only if the net.80203 capability is set
+                and net.80203.link is
+                TRUE.
+              Bandwidth of connection, in bits/s. NOTE: property not
                 implemented yet.
-              </TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->net.80203.mac_address</TT
-> (uint64)
-              </TD
-><TD
->example: 0x0010605d8ef4</TD
-><TD
->&#13;                Only if the <TT
-CLASS="literal"
->net.80203</TT
-> is set
-              </TD
-><TD
->48-bit address</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-><P
->&#13;      </P
-></DIV
-><DIV
-CLASS="sect2"
-><HR><H3
-CLASS="sect2"
-><A
-NAME="device-properties-net-80211"
->2.3.8. <TT
-CLASS="literal"
->net.80211</TT
-> namespace</A
-></H3
-><P
->&#13;        Wireless ethernet networking devices is described in this namespace
+              
+                net.80203.mac_address (uint64)
+              example: 0x0010605d8ef4
+                Only if the net.80203 is set
+              48-bit address
+      
+        net.80211 namespace
+      
+        Wireless ethernet networking devices is described in this namespace
         for device objects with the capability
-        <TT
-CLASS="literal"
->net.80211</TT
->.
+        net.80211.
         Note that device
-        objects can only have the <TT
-CLASS="literal"
->net.80211</TT
-> capability
-        if they already have the capability <TT
-CLASS="literal"
->net</TT
->.
-      </P
-><DIV
-CLASS="informaltable"
-><P
-></P
-><A
-NAME="AEN2658"
-></A
-><TABLE
-BORDER="1"
-CLASS="CALSTABLE"
-><COL><COL><THEAD
-><TR
-><TH
->Key (type)</TH
-><TH
->Values</TH
-><TH
->Mandatory</TH
-><TH
->Description</TH
-></TR
-></THEAD
-><TBODY
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->net.80211.mac_address</TT
-> (uint64)
-              </TD
-><TD
->example: 0x0010605d8ef4</TD
-><TD
->&#13;                Only if the <TT
-CLASS="literal"
->net.80211</TT
-> capability is set
-              </TD
-><TD
->48-bit address</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-><P
->&#13;      </P
-></DIV
-><DIV
-CLASS="sect2"
-><HR><H3
-CLASS="sect2"
-><A
-NAME="device-properties-net-irda"
->2.3.9. <TT
-CLASS="literal"
->net.irda</TT
-> namespace</A
-></H3
-><P
->&#13;        IrDA (Infrared Data Association) Networking devices are described in 
+        objects can only have the net.80211 capability
+        if they already have the capability net.
+      Key (type)ValuesMandatoryDescription
+                net.80211.mac_address (uint64)
+              example: 0x0010605d8ef4
+                Only if the net.80211 capability is set
+              48-bit address
+      
+        net.irda namespace
+      
+        IrDA (Infrared Data Association) Networking devices are described in 
 	this namespace for device objects with the capability
-        <TT
-CLASS="literal"
->net.irda</TT
->.
-        Note that device objects can only have the <TT
-CLASS="literal"
->net.irda</TT
-> 
-	capability if they already have the capability <TT
-CLASS="literal"
->net</TT
->.
-      </P
-><P
->&#13;      </P
-></DIV
-><DIV
-CLASS="sect2"
-><HR><H3
-CLASS="sect2"
-><A
-NAME="device-properties-net-80211control"
->2.3.10. <TT
-CLASS="literal"
->net.80211control</TT
-> namespace</A
-></H3
-><P
->&#13;        Control devices for Wireless ethernet networking devices are described in 
+        net.irda.
+        Note that device objects can only have the net.irda 
+	capability if they already have the capability net.
+      
+      
+        net.80211control namespace
+      
+        Control devices for Wireless ethernet networking devices are described in 
 	this namespace for device objects with the capability
-        <TT
-CLASS="literal"
->net.80211control</TT
->.
-        Note that device objects can only have the <TT
-CLASS="literal"
->net.80211control</TT
-> 
-	capability if they already have the capability <TT
-CLASS="literal"
->net</TT
->.
+        net.80211control.
+        Note that device objects can only have the net.80211control 
+	capability if they already have the capability net.
 	Warning: You should know what you do if you touch this devices. They are 
 	not always stable and can cause (kernel) crashes (on linux).
-      </P
-><P
->&#13;      </P
-></DIV
-><DIV
-CLASS="sect2"
-><HR><H3
-CLASS="sect2"
-><A
-NAME="device-properties-input"
->2.3.11. <TT
-CLASS="literal"
->input</TT
-> namespace</A
-></H3
-><P
->&#13;        This namespace is concerned with human input devices such as
+      
+      
+        input namespace
+      
+        This namespace is concerned with human input devices such as
         keyboards, mice, pointing devices and game controllers. If a
-        device object has the capability <TT
-CLASS="literal"
->input</TT
-> then
+        device object has the capability input then
         the following properties are available
-      </P
-><DIV
-CLASS="informaltable"
-><P
-></P
-><A
-NAME="AEN2696"
-></A
-><TABLE
-BORDER="1"
-CLASS="CALSTABLE"
-><COL><COL><THEAD
-><TR
-><TH
->Key (type)</TH
-><TH
->Values</TH
-><TH
->Mandatory</TH
-><TH
->Description</TH
-></TR
-></THEAD
-><TBODY
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->input.device</TT
-> (string)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->Yes</TD
-><TD
->Special device file for recieving input events</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><DIV
-CLASS="sect2"
-><HR><H3
-CLASS="sect2"
-><A
-NAME="device-properties-pcmcia_socket"
->2.3.12. <TT
-CLASS="literal"
->pcmcia_socket namespace</TT
-></A
-></H3
-><P
->&#13;        Device objects with the capability <TT
-CLASS="literal"
->pcmcia_socket</TT
->
+      Key (type)ValuesMandatoryDescription
+                input.device (string)
+              YesSpecial device file for recieving input events
+        pcmcia_socket namespace
+      
+        Device objects with the capability pcmcia_socket
         represent bridge devices (the actual bus of the device may differ)
         that PCMCIA cards can be attached to. The following properties are
         available.
-      </P
-><DIV
-CLASS="informaltable"
-><P
-></P
-><A
-NAME="AEN2716"
-></A
-><TABLE
-BORDER="1"
-CLASS="CALSTABLE"
-><COL><COL><THEAD
-><TR
-><TH
->Key (type)</TH
-><TH
->Values</TH
-><TH
->Mandatory</TH
-><TH
->Description</TH
-></TR
-></THEAD
-><TBODY
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->pcmcia_socket.number</TT
-> (int)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->Yes</TD
-><TD
->PCMCIA socket number, starting from zero</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><DIV
-CLASS="sect2"
-><HR><H3
-CLASS="sect2"
-><A
-NAME="device-properties-printer"
->2.3.13. <TT
-CLASS="literal"
->printer</TT
-> namespace</A
-></H3
-><P
->&#13;        Device objects with the capability <TT
-CLASS="literal"
->printer</TT
->
+      Key (type)ValuesMandatoryDescription
+                pcmcia_socket.number (int)
+              YesPCMCIA socket number, starting from zero
+        printer namespace
+      
+        Device objects with the capability printer
         represent printers. The following properties are available.
-      </P
-><DIV
-CLASS="informaltable"
-><P
-></P
-><A
-NAME="AEN2736"
-></A
-><TABLE
-BORDER="1"
-CLASS="CALSTABLE"
-><COL><COL><THEAD
-><TR
-><TH
->Key (type)</TH
-><TH
->Values</TH
-><TH
->Mandatory</TH
-><TH
->Description</TH
-></TR
-></THEAD
-><TBODY
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->printer.device</TT
-> (string)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->Yes</TD
-><TD
->TODO</TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->printer.vendor</TT
-> (string)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->Yes</TD
-><TD
->TODO</TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->printer.product</TT
-> (string)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->Yes</TD
-><TD
->TODO</TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->printer.serial</TT
-> (string)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->Yes</TD
-><TD
->TODO</TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->printer.description</TT
-> (string)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->Yes</TD
-><TD
->TODO</TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->printer.commandset</TT
-> (strlist)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->No</TD
-><TD
->List of supported commands / printer languages.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><DIV
-CLASS="sect2"
-><HR><H3
-CLASS="sect2"
-><A
-NAME="device-properties-portable_audio_player"
->2.3.14. <TT
-CLASS="literal"
->portable_audio_player</TT
-> namespace</A
-></H3
-><P
->&#13;        Device objects with the capability
-        <TT
-CLASS="literal"
->portable_audio_player</TT
-> represent portable
+      Key (type)ValuesMandatoryDescription
+                printer.device (string)
+              YesTODO
+                printer.vendor (string)
+              YesTODO
+                printer.product (string)
+              YesTODO
+                printer.serial (string)
+              YesTODO
+                printer.description (string)
+              YesTODO
+                printer.commandset (strlist)
+              NoList of supported commands / printer languages.
+        portable_audio_player namespace
+      
+        Device objects with the capability
+        portable_audio_player represent portable
         audio players that can be attached to a computer to exchange
         files. They can also playback audio. Sometimes they can also
         record audio. This capability can't, in general, be reliably
@@ -8508,151 +1582,42 @@ CLASS="literal"
         is the portable music player; for USB devices this would be
         the device object representing the appropriate USB
         interface. The following properties are available:
-      </P
-><DIV
-CLASS="informaltable"
-><P
-></P
-><A
-NAME="AEN2786"
-></A
-><TABLE
-BORDER="1"
-CLASS="CALSTABLE"
-><COL><COL><THEAD
-><TR
-><TH
->Key (type)</TH
-><TH
->Values</TH
-><TH
->Mandatory</TH
-><TH
->Description</TH
-></TR
-></THEAD
-><TBODY
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->portable_audio_player.access_method</TT
-> (string)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->Yes</TD
-><TD
->This property defines how the device is accessed </TD
-></TR
-><TR
-><TD
->&nbsp;</TD
-><TD
->storage</TD
-><TD
->&nbsp;</TD
-><TD
->&#13;                The device is accessed as a Mass Storage device
+      Key (type)ValuesMandatoryDescription
+                portable_audio_player.access_method (string)
+              YesThis property defines how the device is accessed storage
+                The device is accessed as a Mass Storage device
                 through a kernel driver.  Application Developers
                 should descent down the device object tree to find the
                 device object of capability
-                <TT
-CLASS="literal"
->storage</TT
-> in order to access the
+                storage in order to access the
                 device.
-              </TD
-></TR
-><TR
-><TD
->&nbsp;</TD
-><TD
->user</TD
-><TD
->&nbsp;</TD
-><TD
->&#13;                The device is accessed from userspace through
+              user
+                The device is accessed from userspace through
                 a userspace driver.
-              </TD
-></TR
-><TR
-><TD
->&nbsp;</TD
-><TD
->&nbsp;</TD
-><TD
->&nbsp;</TD
-><TD
->&nbsp;</TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->portable_audio_player.output_formats</TT
-> (strlist)
-              </TD
-><TD
->example: audio/mpeg audio/x-ms-wma</TD
-><TD
->Yes</TD
-><TD
->&#13;                A string list of MIME-types representing the kind of audio
+              
+                portable_audio_player.output_formats (strlist)
+              example: audio/mpeg audio/x-ms-wmaYes
+                A string list of MIME-types representing the kind of audio
                 formats that the device can play back
-              </TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->portable_audio_player.input_formats</TT
-> (strlist)
-              </TD
-><TD
->example: audio/x-wav</TD
-><TD
->Yes</TD
-><TD
->&#13;                A string list of MIME-types representing the kind of audio
+              
+                portable_audio_player.input_formats (strlist)
+              example: audio/x-wavYes
+                A string list of MIME-types representing the kind of audio
                 formats that the device can record. If empty, it means that
                 the device is not capable of recording.
-              </TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->portable_audio_player.folder_depth </TT
-> (int)
-              </TD
-><TD
->example: 1 (If the device only supports one sub-folder)</TD
-><TD
->No</TD
-><TD
->&#13;                If portable_audio_player.access_method = "storage",
+              
+                portable_audio_player.folder_depth  (int)
+              example: 1 (If the device only supports one sub-folder)No
+                If portable_audio_player.access_method = "storage",
                 this tells applications exactly how deep of directory hierarchies
                 files should be placed in.  If all files are put in a
                 sub-folder (with the audio_folders property), only the depth within
                 that sub-folder should be entered here. If the device does not have
                 a limit, do not set this property.
-              </TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->portable_audio_player.audio_folders</TT
-> (strlist)
-              </TD
-><TD
->example: music/ voice/ linein/</TD
-><TD
->No</TD
-><TD
->&#13;                If portable_audio_player.access_method = "storage",
+              
+                portable_audio_player.audio_folders (strlist)
+              example: music/ voice/ linein/No
+                If portable_audio_player.access_method = "storage",
                 this may contain a string list of folders in which music
                 can be found.  Paths are relative to the mount point of the
                 device. If there is one or more entry in this property, the
@@ -8660,680 +1625,173 @@ CLASS="literal"
                 Do not enter a folder and a parent of that folder.
                 If the device places files in its root directory, then do not
                 set this property.
-              </TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->portable_audio_player.playlist_format</TT
-> (strlist)
-              </TD
-><TD
->example: audio/x-mpegurl audio/x-somethingelse</TD
-><TD
->No</TD
-><TD
->&#13;                A string list of the MIME-type of the playlist formats accepted by
+              
+                portable_audio_player.playlist_format (strlist)
+              example: audio/x-mpegurl audio/x-somethingelseNo
+                A string list of the MIME-type of the playlist formats accepted by
                 this device.  Leave blank if none.
-              </TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->portable_audio_player.playlist_path</TT
-> (string)
-              </TD
-><TD
->examples: playlists/%File or Playlist.m3u</TD
-><TD
->No</TD
-><TD
->&#13;                Set to the path to which playlists should be written.  Leave
+              
+                portable_audio_player.playlist_path (string)
+              examples: playlists/%File or Playlist.m3uNo
+                Set to the path to which playlists should be written.  Leave
                 blank if playlist files are not supported.  If the device supports a single playlist with a specific name/path,
                 set this to the path relative to the mount point that it should be saved to.  If it supports multiple
                 playlists, use the %File variable as needed.  Applications are responsible for substituting %File with the
                 desired playlist file name, noting that it's use in this string is optional.
-              </TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><DIV
-CLASS="sect2"
-><HR><H3
-CLASS="sect2"
-><A
-NAME="device-properties-alsa"
->2.3.15. <TT
-CLASS="literal"
->alsa</TT
-> namespace</A
-></H3
-><P
->&#13;        Device objects with the capability <TT
-CLASS="literal"
->alsa</TT
->
+              
+        alsa namespace
+      
+        Device objects with the capability alsa
         represent all the streams available through ALSA on a soundcard.
-      </P
-><DIV
-CLASS="informaltable"
-><P
-></P
-><A
-NAME="AEN2858"
-></A
-><TABLE
-BORDER="1"
-CLASS="CALSTABLE"
-><COL><COL><THEAD
-><TR
-><TH
->Key (type)</TH
-><TH
->Values</TH
-><TH
->Mandatory</TH
-><TH
->Description</TH
-></TR
-></THEAD
-><TBODY
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->alsa.card</TT
-> (int)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->Yes</TD
-><TD
->&#13;                Card number in system as registered by ALSA.
-              </TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->alsa.card_id</TT
-> (string)
-              </TD
-><TD
->&#13;                Examples: <TT
-CLASS="literal"
->I82801DBICH4</TT
->, <TT
-CLASS="literal"
->MP3</TT
->
-              </TD
-><TD
->No</TD
-><TD
->&#13;                Textual description of the card.
-              </TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->alsa.device</TT
-> (int)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->Yes</TD
-><TD
->&#13;                Device number assigned by ALSA for a current card.
-              </TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->alsa.device_file</TT
-> (string)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->Yes</TD
-><TD
->&#13;                The device node to access the ALSA device.
-              </TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->alsa.device_id</TT
-> (string)
-              </TD
-><TD
->&#13;                Examples: <TT
-CLASS="literal"
->Intel 82801DB-ICH4 MIC2 ADC</TT
->
-              </TD
-><TD
->No</TD
-><TD
->&#13;                Textual description of the specific device for a card
-              </TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->alsa.device_pcm_class</TT
-> (string)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->No</TD
-><TD
->&#13;                The PCM class of the device.
-              </TD
-></TR
-><TR
-><TD
->&nbsp;</TD
-><TD
->generic</TD
-><TD
->&nbsp;</TD
-><TD
->&#13;                A standard PCM sound device (SND_PCM_CLASS_GENERIC).
-              </TD
-></TR
-><TR
-><TD
->&nbsp;</TD
-><TD
->multi</TD
-><TD
->&nbsp;</TD
-><TD
->&#13;                A multichannel device PCM sound device (SND_PCM_CLASS_MULTI) which 
+      Key (type)ValuesMandatoryDescription
+                alsa.card (int)
+              Yes
+                Card number in system as registered by ALSA.
+              
+                alsa.card_id (string)
+              
+                Examples: I82801DBICH4, MP3
+              No
+                Textual description of the card.
+              
+                alsa.device (int)
+              Yes
+                Device number assigned by ALSA for a current card.
+              
+                alsa.device_file (string)
+              Yes
+                The device node to access the ALSA device.
+              
+                alsa.device_id (string)
+              
+                Examples: Intel 82801DB-ICH4 MIC2 ADC
+              No
+                Textual description of the specific device for a card
+              
+                alsa.device_pcm_class (string)
+              No
+                The PCM class of the device.
+              generic
+                A standard PCM sound device (SND_PCM_CLASS_GENERIC).
+              multi
+                A multichannel device PCM sound device (SND_PCM_CLASS_MULTI) which 
 		e.g. contains a generic and a modem device.
-              </TD
-></TR
-><TR
-><TD
->&nbsp;</TD
-><TD
->digitizer</TD
-><TD
->&nbsp;</TD
-><TD
->&#13;                A PCM digitizer device (SND_PCM_CLASS_DIGITIZER).
-              </TD
-></TR
-><TR
-><TD
->&nbsp;</TD
-><TD
->modem</TD
-><TD
->&nbsp;</TD
-><TD
->&#13;                A PCM modem device (SND_PCM_CLASS_MODEM).
-              </TD
-></TR
-><TR
-><TD
->&nbsp;</TD
-><TD
->unknown</TD
-><TD
->&nbsp;</TD
-><TD
->&#13;                The value is 'unknown' if the kernel provide no information about the 
+              digitizer
+                A PCM digitizer device (SND_PCM_CLASS_DIGITIZER).
+              modem
+                A PCM modem device (SND_PCM_CLASS_MODEM).
+              unknown
+                The value is 'unknown' if the kernel provide no information about the 
 		PCM device class of the device (e.g. the file pcm_class is missing).
-              </TD
-></TR
-><TR
-><TD
->&nbsp;</TD
-><TD
->none</TD
-><TD
->&nbsp;</TD
-><TD
->&#13;                The value is 'none' if this there is no PCM class for this device.
-              </TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->alsa.physical_device</TT
-> (string)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->Yes</TD
-><TD
->&#13;                UDI of the physical device the ALSA device is bound to.
-              </TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->alsa.type</TT
-> (string)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->Yes</TD
-><TD
->&#13;                The type of the stream.
-              </TD
-></TR
-><TR
-><TD
->&nbsp;</TD
-><TD
->&#13;                <TT
-CLASS="literal"
->control</TT
->
-              </TD
-><TD
->&nbsp;</TD
-><TD
->&#13;                Stream is control device.
-              </TD
-></TR
-><TR
-><TD
->&nbsp;</TD
-><TD
->&#13;                <TT
-CLASS="literal"
->capture</TT
->
-              </TD
-><TD
->&nbsp;</TD
-><TD
->&#13;                Stream is capture device.
-              </TD
-></TR
-><TR
-><TD
->&nbsp;</TD
-><TD
->&#13;                <TT
-CLASS="literal"
->playback</TT
->
-              </TD
-><TD
->&nbsp;</TD
-><TD
->&#13;                Stream is playback device.
-              </TD
-></TR
-><TR
-><TD
->&nbsp;</TD
-><TD
->&#13;                <TT
-CLASS="literal"
->unknown</TT
->
-              </TD
-><TD
->&nbsp;</TD
-><TD
->&#13;                The type of the device is unknown.
-              </TD
-></TR
-><TR
-><TD
->&nbsp;</TD
-><TD
->&#13;                <TT
-CLASS="literal"
->hw_specific</TT
->
-              </TD
-><TD
->&nbsp;</TD
-><TD
->&#13;                This is a hardware specific device (as e.g. from snd_fm801 for Fortemedia FM801 
+              none
+                The value is 'none' if this there is no PCM class for this device.
+              
+                alsa.originating_device (string)
+              Yes
+                UDI of the device the ALSA device is bound to.
+              
+                alsa.type (string)
+              Yes
+                The type of the stream.
+              
+                control
+              
+                Stream is control device.
+              
+                capture
+              
+                Stream is capture device.
+              
+                playback
+              
+                Stream is playback device.
+              
+                unknown
+              
+                The type of the device is unknown.
+              
+                hw_specific
+              
+                This is a hardware specific device (as e.g. from snd_fm801 for Fortemedia FM801 
 		PCI Audio). The driver can use it freely for purposes that are not covered by 
 		standard ALSA API. 
-              </TD
-></TR
-><TR
-><TD
->&nbsp;</TD
-><TD
->&#13;                <TT
-CLASS="literal"
->timer</TT
->
-              </TD
-><TD
->&nbsp;</TD
-><TD
->&#13;                Stream is the global ALSA timer device.
+              
+                timer
+              
+                Stream is the global ALSA timer device.
                 This means, the device is for all ALSA devices/cards.
-              </TD
-></TR
-><TR
-><TD
->&nbsp;</TD
-><TD
->&#13;                <TT
-CLASS="literal"
->sequencer</TT
->
-              </TD
-><TD
->&nbsp;</TD
-><TD
->&#13;                Stream is the global ALSA sequencer device.
+              
+                sequencer
+              
+                Stream is the global ALSA sequencer device.
                 This means, the device is for all ALSA devices/cards.
-              </TD
-></TR
-><TR
-><TD
->&nbsp;</TD
-><TD
->&#13;                <TT
-CLASS="literal"
->unknown</TT
->
-              </TD
-><TD
->&nbsp;</TD
-><TD
->&#13;                Stream is unknown device.
-              </TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><DIV
-CLASS="sect2"
-><HR><H3
-CLASS="sect2"
-><A
-NAME="device-properties-oss"
->2.3.16. <TT
-CLASS="literal"
->oss</TT
-> namespace</A
-></H3
-><P
->&#13;        Device objects with the capability <TT
-CLASS="literal"
->oss</TT
->
+              
+                unknown
+              
+                Stream is unknown device.
+              
+        oss namespace
+      
+        Device objects with the capability oss
         represent all the streams available through OSS on a soundcard.
         OSS devices could be emulated by ALSA.
-      </P
-><P
->&#13;        Note: All OSS devices, except the global devices, are only added if the
-        kernel supports links from oss device to physical device in sysfs. For a patch
-        see:  http://thread.gmane.org/gmane.comp.freedesktop.hal/2862.
-      </P
-><DIV
-CLASS="informaltable"
-><P
-></P
-><A
-NAME="AEN3002"
-></A
-><TABLE
-BORDER="1"
-CLASS="CALSTABLE"
-><COL><COL><THEAD
-><TR
-><TH
->Key (type)</TH
-><TH
->Values</TH
-><TH
->Mandatory</TH
-><TH
->Description</TH
-></TR
-></THEAD
-><TBODY
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->oss.card</TT
-> (int)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->Yes</TD
-><TD
->&#13;                Card number in system as registered by OSS (and/or ALSA).
-              </TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->oss.card_id</TT
-> (string)
-              </TD
-><TD
->&#13;                Examples: <TT
-CLASS="literal"
->I82801DBICH4</TT
->, <TT
-CLASS="literal"
->MP3</TT
->
-              </TD
-><TD
->No</TD
-><TD
->&#13;                Textual description of the card.
-              </TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->oss.device</TT
-> (int)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->Yes</TD
-><TD
->&#13;                Device number assigned by OSS/ALSA for a current card.
-              </TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->oss.device_file</TT
-> (string)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->Yes</TD
-><TD
->&#13;                The device node to access the OSS device.
-              </TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->oss.device_id</TT
-> (string)
-              </TD
-><TD
->&#13;                Examples: <TT
-CLASS="literal"
->Intel 82801DB-ICH4 MIC2 ADC</TT
->
-              </TD
-><TD
->No</TD
-><TD
->&#13;                Textual description of the specific device for a card
-              </TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->oss.physical_device</TT
-> (string)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->Yes</TD
-><TD
->&#13;                UDI of the physical device the OSS device is bound to.
-              </TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->oss.type</TT
-> (string)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->Yes</TD
-><TD
->&#13;                The type of the stream.
-              </TD
-></TR
-><TR
-><TD
->&nbsp;</TD
-><TD
->&#13;                <TT
-CLASS="literal"
->mixer</TT
->
-              </TD
-><TD
->&nbsp;</TD
-><TD
->&#13;                Stream is control/mixer device.
-              </TD
-></TR
-><TR
-><TD
->&nbsp;</TD
-><TD
->&#13;                <TT
-CLASS="literal"
->pcm</TT
->
-              </TD
-><TD
->&nbsp;</TD
-><TD
->&#13;                Stream is PCM device.
-              </TD
-></TR
-><TR
-><TD
->&nbsp;</TD
-><TD
->&#13;                <TT
-CLASS="literal"
->midi</TT
->
-              </TD
-><TD
->&nbsp;</TD
-><TD
->&#13;                Stream is MIDI device.
-              </TD
-></TR
-><TR
-><TD
->&nbsp;</TD
-><TD
->&#13;                <TT
-CLASS="literal"
->sequencer</TT
->
-              </TD
-><TD
->&nbsp;</TD
-><TD
->&#13;                Stream is a global OSS sequencer device.
+      Key (type)ValuesMandatoryDescription
+                oss.card (int)
+              Yes
+                Card number in system as registered by OSS (and/or ALSA).
+              
+                oss.card_id (string)
+              
+                Examples: I82801DBICH4, MP3
+              No
+                Textual description of the card.
+              
+                oss.device (int)
+              Yes
+                Device number assigned by OSS/ALSA for a current card.
+              
+                oss.device_file (string)
+              Yes
+                The device node to access the OSS device.
+              
+                oss.device_id (string)
+              
+                Examples: Intel 82801DB-ICH4 MIC2 ADC
+              No
+                Textual description of the specific device for a card
+              
+                oss.originating_device (string)
+              Yes
+                UDI of the device the OSS device is bound to.
+              
+                oss.type (string)
+              Yes
+                The type of the stream.
+              
+                mixer
+              
+                Stream is control/mixer device.
+              
+                pcm
+              
+                Stream is PCM device.
+              
+                midi
+              
+                Stream is MIDI device.
+              
+                sequencer
+              
+                Stream is a global OSS sequencer device.
                 This means, the device is for all OSS devices/cards.
-              </TD
-></TR
-><TR
-><TD
->&nbsp;</TD
-><TD
->&#13;                <TT
-CLASS="literal"
->unknown</TT
->
-              </TD
-><TD
->&nbsp;</TD
-><TD
->&#13;                Stream is unknown device.
-              </TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><DIV
-CLASS="sect2"
-><HR><H3
-CLASS="sect2"
-><A
-NAME="device-properties-camera"
->2.3.17. <TT
-CLASS="literal"
->camera</TT
-> namespace</A
-></H3
-><P
->&#13;        Device objects with the capability <TT
-CLASS="literal"
->camera</TT
->
+              
+                unknown
+              
+                Stream is unknown device.
+              
+        camera namespace
+      
+        Device objects with the capability camera
         represent digital still cameras that can be attached to a
         computer to exchange files. This does not include card readers
         for memory cards used for cameras. This capability can't, in
@@ -9345,3851 +1803,976 @@ CLASS="literal"
         camera; for USB devices this would be the device object
         representing the appropriate USB interface. The following
         properties are available:
-      </P
-><DIV
-CLASS="informaltable"
-><P
-></P
-><A
-NAME="AEN3091"
-></A
-><TABLE
-BORDER="1"
-CLASS="CALSTABLE"
-><COL><COL><THEAD
-><TR
-><TH
->Key (type)</TH
-><TH
->Values</TH
-><TH
->Mandatory</TH
-><TH
->Description</TH
-></TR
-></THEAD
-><TBODY
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->camera.access_method</TT
-> (string)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->Yes</TD
-><TD
->This property defines how the device is accessed </TD
-></TR
-><TR
-><TD
->&nbsp;</TD
-><TD
->storage</TD
-><TD
->&nbsp;</TD
-><TD
->&#13;                The device is accessed as a Mass Storage device
+      Key (type)ValuesMandatoryDescription
+                camera.access_method (string)
+              YesThis property defines how the device is accessed storage
+                The device is accessed as a Mass Storage device
                 through a kernel driver.  Application Developers
                 should descent down the device object tree to find the
                 device object of capability
-                <TT
-CLASS="literal"
->storage</TT
-> in order to access the
+                storage in order to access the
                 device.
-              </TD
-></TR
-><TR
-><TD
->&nbsp;</TD
-><TD
->user</TD
-><TD
->&nbsp;</TD
-><TD
->&#13;                The device is accessed from userspace through
+              user
+                The device is accessed from userspace through
                 a userspace driver.
-              </TD
-></TR
-><TR
-><TD
->&nbsp;</TD
-><TD
->&nbsp;</TD
-><TD
->&nbsp;</TD
-><TD
->&nbsp;</TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->camera.libgphoto2.support</TT
-> (bool)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->No</TD
-><TD
->&#13;                If true, the device is supported by a userspace driver
+              
+                camera.libgphoto2.support (bool)
+              No
+                If true, the device is supported by a userspace driver
                 from the libgphoto2 project.
-              </TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><DIV
-CLASS="sect2"
-><HR><H3
-CLASS="sect2"
-><A
-NAME="device-properties-laptop-panel"
->2.3.18. <TT
-CLASS="literal"
->laptop_panel</TT
-> namespace</A
-></H3
-><P
->&#13;        Device objects with the capability <TT
-CLASS="literal"
->laptop_panel</TT
->
+              
+        laptop_panel namespace
+      
+        Device objects with the capability laptop_panel
         represent devices capable of changing the brightness of the display.
-      </P
-><DIV
-CLASS="informaltable"
-><P
-></P
-><A
-NAME="AEN3133"
-></A
-><TABLE
-BORDER="1"
-CLASS="CALSTABLE"
-><COL><COL><THEAD
-><TR
-><TH
->Key (type)</TH
-><TH
->Values</TH
-><TH
->Mandatory</TH
-><TH
->Description</TH
-></TR
-></THEAD
-><TBODY
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->laptop_panel.num_levels</TT
-> (int)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->Yes</TD
-><TD
->&#13;                The brightness levels supported by the adaptor.
-              </TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->laptop_panel.access_method</TT
-> (string)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->Yes</TD
-><TD
->&#13;                The access method to use in scripts, e.g. pmu, toshiba, ibm, sony.
-              </TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->laptop_panel.brightness_in_hardware</TT
-> (bool)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->No</TD
-><TD
->&#13;                On some laptops, the brightness control is all done in hardware
+      Key (type)ValuesMandatoryDescription
+                laptop_panel.num_levels (int)
+              Yes
+                The brightness levels supported by the adaptor.
+              
+                laptop_panel.access_method (string)
+              Yes
+                The access method to use in scripts, e.g. pmu, toshiba, ibm, sony.
+              
+                laptop_panel.brightness_in_hardware (bool)
+              No
+                On some laptops, the brightness control is all done in hardware
                 but the hardware also synthesizes keypresses when the
                 brightness is changed.
                 If this key is set true, then any power manager software should
                 not attempt to set any new values on brightness keypress, as it
                 may cause the panel to flash uncontrollably.
-              </TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-><P
->&#13;        The following methods exist on the interface
-        <TT
-CLASS="literal"
->org.freedesktop.Hal.Device.LaptopPanel</TT
->.
-      </P
-><DIV
-CLASS="informaltable"
-><P
-></P
-><A
-NAME="AEN3162"
-></A
-><TABLE
-BORDER="1"
-CLASS="CALSTABLE"
-><COL><COL><THEAD
-><TR
-><TH
->Method (parameter types)</TH
-><TH
->Parameters</TH
-><TH
->Mandatory</TH
-><TH
->Description</TH
-></TR
-></THEAD
-><TBODY
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->SetBrightness</TT
-> (integer)
-              </TD
-><TD
->&#13;                The hardware brightness state, which should be between 0 and 
-                <TT
-CLASS="literal"
->laptop_panel.num_levels</TT
-> - 1.
-              </TD
-><TD
->No</TD
-><TD
->&#13;                This method adjusts the brightness on an laptop screen.
+              
+        The following methods exist on the interface
+        org.freedesktop.Hal.Device.LaptopPanel.
+      Method (parameter types)ParametersMandatoryDescription
+                SetBrightness (integer)
+              
+                The hardware brightness state, which should be between 0 and 
+                laptop_panel.num_levels - 1.
+              No
+                This method adjusts the brightness on an laptop screen.
                 The values are returned as hardware values rather than
                 percentages as we cannot easily to floating point rounding in
                 shell code and therefore use the raw values to prevent integer
                 rounding errors.
-              </TD
-></TR
-><TR
-><TD
->&#13;                integer <TT
-CLASS="literal"
->GetBrightness</TT
-> (void)
-              </TD
-><TD
->&#13;                Returns the hardware brightness state, which should be
-                between 0 and <TT
-CLASS="literal"
->laptop_panel.num_levels</TT
-> - 1.
-              </TD
-><TD
->No</TD
-><TD
->&#13;                This method gets the hardware brightness of the laptop screen,
+              
+                integer GetBrightness (void)
+              
+                Returns the hardware brightness state, which should be
+                between 0 and laptop_panel.num_levels - 1.
+              No
+                This method gets the hardware brightness of the laptop screen,
                 which we may need to do fairly regually on hardware that
                 changes the values in hardware without a software event.
-              </TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><DIV
-CLASS="sect2"
-><HR><H3
-CLASS="sect2"
-><A
-NAME="device-properties-ac_adaptor"
->2.3.19. <TT
-CLASS="literal"
->ac_adaptor</TT
-> namespace</A
-></H3
-><P
->&#13;        Device objects with the capability <TT
-CLASS="literal"
->ac_adaptor</TT
->
+              
+        ac_adaptor namespace
+      
+        Device objects with the capability ac_adaptor
         represent all the devices capable of powering the system from AC power
-      </P
-><DIV
-CLASS="informaltable"
-><P
-></P
-><A
-NAME="AEN3190"
-></A
-><TABLE
-BORDER="1"
-CLASS="CALSTABLE"
-><COL><COL><THEAD
-><TR
-><TH
->Key (type)</TH
-><TH
->Values</TH
-><TH
->Mandatory</TH
-><TH
->Description</TH
-></TR
-></THEAD
-><TBODY
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->ac_adaptor.present</TT
-> (bool)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->Yes</TD
-><TD
->&#13;                The state of the adaptor, i.e. whether it is providing power to
+      Key (type)ValuesMandatoryDescription
+                ac_adaptor.present (bool)
+              Yes
+                The state of the adaptor, i.e. whether it is providing power to
                 the unit from mains power.
-              </TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><DIV
-CLASS="sect2"
-><HR><H3
-CLASS="sect2"
-><A
-NAME="device-properties-battery"
->2.3.20. <TT
-CLASS="literal"
->battery</TT
-> namespace</A
-></H3
-><P
->&#13;        Device objects with the capability <TT
-CLASS="literal"
->battery</TT
->
+              
+        battery namespace
+      
+        Device objects with the capability battery
         represent all the devices having some battery (in many cases -
         rechargeable) inside.
-      </P
-><DIV
-CLASS="informaltable"
-><P
-></P
-><A
-NAME="AEN3210"
-></A
-><TABLE
-BORDER="1"
-CLASS="CALSTABLE"
-><COL><COL><THEAD
-><TR
-><TH
->Key (type)</TH
-><TH
->Values</TH
-><TH
->Mandatory</TH
-><TH
->Description</TH
-></TR
-></THEAD
-><TBODY
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->battery.present</TT
-> (bool)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->Yes</TD
-><TD
->&#13;                This is present as some smart batteries can have acpi/pmu
+      Key (type)ValuesMandatoryDescription
+                battery.present (bool)
+              Yes
+                This is present as some smart batteries can have acpi/pmu
                 entries, and be physically missing.
-              </TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->battery.type</TT
-> (string)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->Yes</TD
-><TD
->&#13;                This property defines the type of the device holding the
+              
+                battery.type (string)
+              Yes
+                This property defines the type of the device holding the
                 battery. This property is defined for the development
                 simplicity - battery indicators can use it to find the
                 proper iconic representation.
-              </TD
-></TR
-><TR
-><TD
->&nbsp;</TD
-><TD
->&#13;                <TT
-CLASS="literal"
->pda</TT
->
-              </TD
-><TD
->&nbsp;</TD
-><TD
->&#13;                The device containing the battery is a personal digital
+              
+                pda
+              
+                The device containing the battery is a personal digital
                 assistant, e.g. a device that looks like a handheld computer
                 to do specific tasks such as keeping notes or containing
                 a personal database
-              </TD
-></TR
-><TR
-><TD
->&nbsp;</TD
-><TD
->&#13;                <TT
-CLASS="literal"
->ups</TT
->
-              </TD
-><TD
->&nbsp;</TD
-><TD
->&#13;                A battery powered power supply that is
+              
+                ups
+              
+                A battery powered power supply that is
                 guaranteed to provide power to a computer in the event of
                 interruptions in the incoming electrical power. Most of the
                 time this is an external device.
-              </TD
-></TR
-><TR
-><TD
->&nbsp;</TD
-><TD
->&#13;                <TT
-CLASS="literal"
->primary</TT
->
-              </TD
-><TD
->&nbsp;</TD
-><TD
->&#13;                The battery is a primary power source for the system - an
+              
+                primary
+              
+                The battery is a primary power source for the system - an
                 example are laptop batteries.
-              </TD
-></TR
-><TR
-><TD
->&nbsp;</TD
-><TD
->&#13;                <TT
-CLASS="literal"
->mouse</TT
->
-              </TD
-><TD
->&nbsp;</TD
-><TD
->&#13;                The device containing the battery is a mouse.
-              </TD
-></TR
-><TR
-><TD
->&nbsp;</TD
-><TD
->&#13;                <TT
-CLASS="literal"
->keyboard</TT
->
-              </TD
-><TD
->&nbsp;</TD
-><TD
->&#13;                The device containing the battery is a keyboard.
-              </TD
-></TR
-><TR
-><TD
->&nbsp;</TD
-><TD
->&#13;                <TT
-CLASS="literal"
->keyboard_mouse</TT
->
-              </TD
-><TD
->&nbsp;</TD
-><TD
->&#13;                The device containing the battery is a combined mouse and keyboard.
-              </TD
-></TR
-><TR
-><TD
->&nbsp;</TD
-><TD
->&#13;                <TT
-CLASS="literal"
->camera</TT
->
-              </TD
-><TD
->&nbsp;</TD
-><TD
->&#13;                The device containing the battery is a camera.
-              </TD
-></TR
-><TR
-><TD
->&nbsp;</TD
-><TD
->&#13;                <TT
-CLASS="literal"
->unknown</TT
->
-              </TD
-><TD
->&nbsp;</TD
-><TD
->&#13;                The device containing the battery is not covered by other types.
-              </TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->battery.charge_level.unit</TT
-> (string)
-              </TD
-><TD
->Examples:
-                <TT
-CLASS="literal"
->mWh</TT
->,
-                <TT
-CLASS="literal"
->percent</TT
->
-              </TD
-><TD
->No</TD
-><TD
->&#13;                The physical unit used by the charge level properties
+              
+                mouse
+              
+                The device containing the battery is a mouse.
+              
+                keyboard
+              
+                The device containing the battery is a keyboard.
+              
+                keyboard_mouse
+              
+                The device containing the battery is a combined mouse and keyboard.
+              
+                camera
+              
+                The device containing the battery is a camera.
+              
+                unknown
+              
+                The device containing the battery is not covered by other types.
+              
+                battery.charge_level.unit (string)
+              Examples:
+                mWh,
+                percent
+              No
+                The physical unit used by the charge level properties
                 (maximum and current). In many cases, this property is
                 omitted - which indicates that the charge properties
                 are measured in some unknown units.
                 The units should never be mAh as this is not a measurement
                 of charge.
-              </TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->battery.charge_level.design</TT
-> (int)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->Yes</TD
-><TD
->&#13;                The maximum level of charge the device was designed for.
-                Measured in <TT
-CLASS="literal"
->"battery.charge_level.unit"</TT
->
+              
+                battery.charge_level.design (int)
+              Yes
+                The maximum level of charge the device was designed for.
+                Measured in "battery.charge_level.unit"
                 units.
-              </TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->battery.charge_level.last_full</TT
-> (int)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->Yes</TD
-><TD
->&#13;                The maximum level of charge the device could hold the last
+              
+                battery.charge_level.last_full (int)
+              Yes
+                The maximum level of charge the device could hold the last
                 time it was full.
-                Measured in <TT
-CLASS="literal"
->"battery.charge_level.unit"</TT
->
+                Measured in "battery.charge_level.unit"
                 units.
-              </TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->battery.charge_level.current</TT
-> (int)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->Yes</TD
-><TD
->&#13;                The current level of charge which the device can is holding.
-                Measured in <TT
-CLASS="literal"
->"battery.charge_level.unit"</TT
->
+              
+                battery.charge_level.current (int)
+              Yes
+                The current level of charge which the device can is holding.
+                Measured in "battery.charge_level.unit"
                 units.
-              </TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->battery.charge_level.rate</TT
-> (int)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->No</TD
-><TD
->&#13;                The discharge/charge rate measured
-                in <TT
-CLASS="literal"
->"battery.charge_level.unit"</TT
->
+              
+                battery.charge_level.rate (int)
+              No
+                The discharge/charge rate measured
+                in "battery.charge_level.unit"
                 units per second.
-              </TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->battery.charge_level.warning</TT
-> (int)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->No</TD
-><TD
->&#13;                Once the charge level of the battery drops below this value its
+              
+                battery.charge_level.warning (int)
+              No
+                Once the charge level of the battery drops below this value its
                 state changes to 'warning'.
-                Measured in <TT
-CLASS="literal"
->"battery.charge_level.unit"</TT
->
+                Measured in "battery.charge_level.unit"
                 units.
-              </TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->battery.charge_level.low</TT
-> (int)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->No</TD
-><TD
->&#13;                Once the charge level of the battery drops below this value its
+              
+                battery.charge_level.low (int)
+              No
+                Once the charge level of the battery drops below this value its
                 state changes to 'low'.
-                Measured in <TT
-CLASS="literal"
->"battery.charge_level.unit"</TT
->
+                Measured in "battery.charge_level.unit"
                 units.
-              </TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->battery.charge_level.granularity_1</TT
-> (int)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->No</TD
-><TD
->&#13;                Granularity value one of the battery measured
-                in <TT
-CLASS="literal"
->"battery.charge_level.unit"</TT
->
+              
+                battery.charge_level.granularity_1 (int)
+              No
+                Granularity value one of the battery measured
+                in "battery.charge_level.unit"
                 units .
-              </TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->battery.charge_level.granularity_2</TT
-> (int)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->No</TD
-><TD
->&#13;                Granularity value two of the battery measured
-                in <TT
-CLASS="literal"
->"battery.charge_level.unit"</TT
->
+              
+                battery.charge_level.granularity_2 (int)
+              No
+                Granularity value two of the battery measured
+                in "battery.charge_level.unit"
                 units.
-              </TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->battery.reporting.unit</TT
-> (string)
-              </TD
-><TD
->Examples:
-                <TT
-CLASS="literal"
->mWh</TT
->,
-                <TT
-CLASS="literal"
->mAh</TT
->,
-                <TT
-CLASS="literal"
->percent</TT
->
-              </TD
-><TD
->No</TD
-><TD
->&#13;                The physical unit used by the charge level properties
+              
+                battery.reporting.unit (string)
+              Examples:
+                mWh,
+                mAh,
+                percent
+              No
+                The physical unit used by the charge level properties
                 (maximum and current) as reported by the hardware.
                 In many cases, this property is omitted - which indicates
                 that the charge properties are measured in some unknown units.
-              </TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->battery.reporting.design</TT
-> (int)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->Yes</TD
-><TD
->&#13;                The maximum level of charge the device was designed for,
+              
+                battery.reporting.design (int)
+              Yes
+                The maximum level of charge the device was designed for,
                 as reported by the hardware.
-                Measured in <TT
-CLASS="literal"
->"battery.reporting.unit"</TT
->
+                Measured in "battery.reporting.unit"
                 units.
-              </TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->battery.reporting.last_full</TT
-> (int)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->No</TD
-><TD
->&#13;                The maximum level of charge the device could hold the last
+              
+                battery.reporting.last_full (int)
+              No
+                The maximum level of charge the device could hold the last
                 time it was full, as reported by the hardware.
-                Measured in <TT
-CLASS="literal"
->"battery.reporting.unit"</TT
->
+                Measured in "battery.reporting.unit"
                 units.
-              </TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->battery.reporting.current</TT
-> (int)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->No</TD
-><TD
->&#13;                The current level of charge which the device is holding,
+              
+                battery.reporting.current (int)
+              No
+                The current level of charge which the device is holding,
                 as reported by the hardware.
-                Measured in <TT
-CLASS="literal"
->"battery.reporting.unit"</TT
->
+                Measured in "battery.reporting.unit"
                 units.
-              </TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->battery.reporting.rate</TT
-> (int)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->No</TD
-><TD
->&#13;                The discharge/charge rate as reported by the hardware measured
-                in <TT
-CLASS="literal"
->"battery.reporting.unit"</TT
->
+              
+                battery.reporting.rate (int)
+              No
+                The discharge/charge rate as reported by the hardware measured
+                in "battery.reporting.unit"
                 units per second.
-              </TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->battery.reporting.warning</TT
-> (int)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->No</TD
-><TD
->&#13;                Once the hardware charge level of the battery drops below
+              
+                battery.reporting.warning (int)
+              No
+                Once the hardware charge level of the battery drops below
                 this value its state changes to 'warning'.
-                Measured in <TT
-CLASS="literal"
->"battery.reporting.unit"</TT
->
+                Measured in "battery.reporting.unit"
                 units.
-              </TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->battery.reporting.low</TT
-> (int)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->No</TD
-><TD
->&#13;                Once the hardware charge level of the battery drops below
+              
+                battery.reporting.low (int)
+              No
+                Once the hardware charge level of the battery drops below
                 this value its state changes to 'low'.
-                Measured in <TT
-CLASS="literal"
->"battery.reporting.unit"</TT
->
+                Measured in "battery.reporting.unit"
                 units.
-              </TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->battery.reporting.granularity_1</TT
-> (int)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->No</TD
-><TD
->&#13;                Hardware granularity value one of the battery measured
-                in <TT
-CLASS="literal"
->"battery.reporting.unit"</TT
->
+              
+                battery.reporting.granularity_1 (int)
+              No
+                Hardware granularity value one of the battery measured
+                in "battery.reporting.unit"
                 units .
-              </TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->battery.reporting.granularity_2</TT
-> (int)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->No</TD
-><TD
->&#13;                Hardware granularity value two of the battery measured
-                in <TT
-CLASS="literal"
->"battery.reporting.unit"</TT
->
+              
+                battery.reporting.granularity_2 (int)
+              No
+                Hardware granularity value two of the battery measured
+                in "battery.reporting.unit"
                 units.
-              </TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->battery.charge_level.capacity_state</TT
-> (string)
-              </TD
-><TD
->&#13;                Examples: <TT
-CLASS="literal"
->ok</TT
->, <TT
-CLASS="literal"
->critical</TT
->
-              </TD
-><TD
->No</TD
-><TD
->&#13;                The capacity state of the battery.
-              </TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->battery.voltage.unit</TT
-> (string)
-              </TD
-><TD
->&#13;                Examples: <TT
-CLASS="literal"
->mV</TT
->
-              </TD
-><TD
->No</TD
-><TD
->&#13;                The physical measurement unit used by the voltage properties
+              
+                battery.charge_level.capacity_state (string)
+              
+                Examples: ok, critical
+              No
+                The capacity state of the battery.
+              
+                battery.voltage.unit (string)
+              
+                Examples: mV
+              No
+                The physical measurement unit used by the voltage properties
                 (design and current).
-              </TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->battery.voltage.design</TT
-> (int)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->Yes</TD
-><TD
->&#13;                The voltage level for which the battery is designed for.
-                Measured in <TT
-CLASS="literal"
->"battery.voltage.unit"</TT
->
+              
+                battery.voltage.design (int)
+              Yes
+                The voltage level for which the battery is designed for.
+                Measured in "battery.voltage.unit"
                 units.
-              </TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->battery.voltage.current</TT
-> (int)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->Yes</TD
-><TD
->&#13;                The voltage level currently emitted by the battery.
-                Measured in <TT
-CLASS="literal"
->"battery.voltage.unit"</TT
->
+              
+                battery.voltage.current (int)
+              Yes
+                The voltage level currently emitted by the battery.
+                Measured in "battery.voltage.unit"
                 units.
-              </TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->battery.alarm.unit</TT
-> (string)
-              </TD
-><TD
->&#13;                Examples: <TT
-CLASS="literal"
->mWh</TT
->, <TT
-CLASS="literal"
->mAh</TT
->
-              </TD
-><TD
->No</TD
-><TD
->&#13;                The physical measurement unit used by the alarm property.
-              </TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->battery.alarm.design</TT
-> (int)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->No</TD
-><TD
->&#13;                Once the charge level of the battery drops below this value
+              
+                battery.alarm.unit (string)
+              
+                Examples: mWh, mAh
+              No
+                The physical measurement unit used by the alarm property.
+              
+                battery.alarm.design (int)
+              No
+                Once the charge level of the battery drops below this value
                 its state changes to 'alarm'.
-                Measured in <TT
-CLASS="literal"
->"battery.alarm.unit"</TT
->
+                Measured in "battery.alarm.unit"
                 units.
-              </TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->battery.remaining_time</TT
-> (int)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->No</TD
-><TD
->&#13;                Remaining time, in seconds, that the battery can provide
+              
+                battery.remaining_time (int)
+              No
+                Remaining time, in seconds, that the battery can provide
                 power (if discharging) or the time until charged (if charging).
                 This is an estimate and may be imprecise.
                 This key is not present for invalid data.
-              </TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->battery.remaining_time.calculate_per_time</TT
-> (bool)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->No</TD
-><TD
->&#13;                If this property is <TT
-CLASS="literal"
->true</TT
-> the
-                <TT
-CLASS="literal"
->battery.remaining_time</TT
-> becomes guessed from
-                <TT
-CLASS="literal"
->battery.charge_level.current</TT
-> and time.
-              </TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->battery.charge_level.percentage</TT
-> (int)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->No</TD
-><TD
->&#13;                Charge, normalised to percent. This is useful if an application
+              
+                battery.remaining_time.calculate_per_time (bool)
+              No
+                If this property is true the
+                battery.remaining_time becomes guessed from
+                battery.charge_level.current and time.
+              
+                battery.charge_level.percentage (int)
+              No
+                Charge, normalised to percent. This is useful if an application
                 does not want to process the raw values and do all the extra
                 checks on the result. This key is not present for invalid data.
-              </TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->battery.is_rechargeable</TT
-> (bool)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->No</TD
-><TD
->&#13;                True if the battery unit is rechargeable, false if its is
+              
+                battery.is_rechargeable (bool)
+              No
+                True if the battery unit is rechargeable, false if its is
                 one-time (disposable after one usage).
-              </TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->battery.rechargeable.is_charging</TT
-> (bool)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->&#13;                Only if <TT
-CLASS="literal"
->battery.is_rechargeable</TT
-> is TRUE
-              </TD
-><TD
->&#13;                TRUE if, and only if, the battery is charging.
-              </TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->battery.rechargeable.is_discharging</TT
-> (bool)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->&#13;                Only if <TT
-CLASS="literal"
->battery.is_rechargeable</TT
-> is TRUE
-              </TD
-><TD
->&#13;                TRUE if, and only if, the battery is discharging.
-              </TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->battery.command_interface</TT
-> (string)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->No</TD
-><TD
->&#13;                The abstract name allowing daemons and/or user-level apps
+              
+                battery.rechargeable.is_charging (bool)
+              
+                Only if battery.is_rechargeable is TRUE
+              
+                TRUE if, and only if, the battery is charging.
+              
+                battery.rechargeable.is_discharging (bool)
+              
+                Only if battery.is_rechargeable is TRUE
+              
+                TRUE if, and only if, the battery is discharging.
+              
+                battery.command_interface (string)
+              No
+                The abstract name allowing daemons and/or user-level apps
                 to distinguish some groups of devices having similar
                 programming  interface. Introduced mostly for the daemons'
                 coding simplicity.
-              </TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->battery.vendor</TT
-> (string)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->No</TD
-><TD
->&#13;                Vendor of the battery.
-              </TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->battery.model</TT
-> (string)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->No</TD
-><TD
->&#13;                Make of the battery.
-              </TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->battery.reporting.technology</TT
-> (string)
-              </TD
-><TD
->example: LION</TD
-><TD
->No</TD
-><TD
->&#13;                The technology of the battery as reported by the hardware.
-              </TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->battery.technology</TT
-> (string)
-              </TD
-><TD
->&#13;                lead-acid, lithium-ion, lithium-polymer,
+              
+                battery.vendor (string)
+              No
+                Vendor of the battery.
+              
+                battery.model (string)
+              No
+                Make of the battery.
+              
+                battery.reporting.technology (string)
+              example: LIONNo
+                The technology of the battery as reported by the hardware.
+              
+                battery.technology (string)
+              
+                lead-acid, lithium-ion, lithium-polymer,
                 nickel-metal-hydride, unknown
-              </TD
-><TD
->No</TD
-><TD
->&#13;                The technology of the battery processed to a few standard types.
+              No
+                The technology of the battery processed to a few standard types.
                 This key is needed as the hardware often does not specify the
                 description text for a battery, and so we have to calculate it
-                from the output of <TT
-CLASS="literal"
->battery.reporting.technology</TT
->.
-              </TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->battery.serial</TT
-> (string)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->No</TD
-><TD
->&#13;                A string uniquely identifying the instance of the battery;
+                from the output of battery.reporting.technology.
+              
+                battery.serial (string)
+              No
+                A string uniquely identifying the instance of the battery;
                 it will be different for two (otherwise) identical batteries.
-              </TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><DIV
-CLASS="sect2"
-><HR><H3
-CLASS="sect2"
-><A
-NAME="device-properties-button"
->2.3.21. <TT
-CLASS="literal"
->button</TT
-> namespace</A
-></H3
-><P
->&#13;        Device objects with the capability <TT
-CLASS="literal"
->button</TT
->
+              
+        button namespace
+      
+        Device objects with the capability button
         represent the devices capable of providing a state to the system.
-      </P
-><DIV
-CLASS="informaltable"
-><P
-></P
-><A
-NAME="AEN3535"
-></A
-><TABLE
-BORDER="1"
-CLASS="CALSTABLE"
-><COL><COL><THEAD
-><TR
-><TH
->Key (type)</TH
-><TH
->Values</TH
-><TH
->Mandatory</TH
-><TH
->Description</TH
-></TR
-></THEAD
-><TBODY
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->button.type</TT
-> (string)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->No</TD
-><TD
->The type of button</TD
-></TR
-><TR
-><TD
->&nbsp;</TD
-><TD
->lid</TD
-><TD
->&nbsp;</TD
-><TD
->&#13;                The switch on a laptop that senses whether the lid is
+      Key (type)ValuesMandatoryDescription
+                button.type (string)
+              NoThe type of buttonlid
+                The switch on a laptop that senses whether the lid is
                 open or closed
-              </TD
-></TR
-><TR
-><TD
->&nbsp;</TD
-><TD
->power</TD
-><TD
->&nbsp;</TD
-><TD
->The main power button on the computer.</TD
-></TR
-><TR
-><TD
->&nbsp;</TD
-><TD
->sleep</TD
-><TD
->&nbsp;</TD
-><TD
->&#13;                The sleep button on a computer capable of putting the computer
+              powerThe main power button on the computer.sleep
+                The sleep button on a computer capable of putting the computer
                 into a suspend state
-              </TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->button.has_state</TT
-> (bool)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->no</TD
-><TD
->True if the button maintains state, e.g. can toggled on/off</TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->button.state.value</TT
-> (bool)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->&#13;                Only when <TT
-CLASS="literal"
->button.has_state</TT
-> is
+              
+                button.has_state (bool)
+              noTrue if the button maintains state, e.g. can toggled on/off
+                button.state.value (bool)
+              
+                Only when button.has_state is
                 TRUE
-              </TD
-><TD
->State of the button, TRUE if it is enabled</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-><P
->&#13;        Device objects with this capability may emit the following events.
-      </P
-><DIV
-CLASS="informaltable"
-><P
-></P
-><A
-NAME="AEN3579"
-></A
-><TABLE
-BORDER="1"
-CLASS="CALSTABLE"
-><COL><COL><THEAD
-><TR
-><TH
->Condition Name</TH
-><TH
->Parameters</TH
-><TH
->Example</TH
-><TH
->Description</TH
-></TR
-></THEAD
-><TBODY
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->ButtonPressed</TT
->
-              </TD
-><TD
->&#13;                <TT
-CLASS="literal"
->button.type (string)</TT
->
-              </TD
-><TD
->sleep</TD
-><TD
->Emitted when a button is pressed</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><DIV
-CLASS="sect2"
-><HR><H3
-CLASS="sect2"
-><A
-NAME="device-properties-processor"
->2.3.22. <TT
-CLASS="literal"
->processor</TT
-> namespace</A
-></H3
-><P
->&#13;        Device objects with the capability <TT
-CLASS="literal"
->processor</TT
->
+              State of the button, TRUE if it is enabled
+        Device objects with this capability may emit the following events.
+      Condition NameParametersExampleDescription
+                ButtonPressed
+              
+                button.type (string)
+              sleepEmitted when a button is pressed
+        processor namespace
+      
+        Device objects with the capability processor
         represent CPU's in the system.
-      </P
-><DIV
-CLASS="informaltable"
-><P
-></P
-><A
-NAME="AEN3600"
-></A
-><TABLE
-BORDER="1"
-CLASS="CALSTABLE"
-><COL><COL><THEAD
-><TR
-><TH
->Key (type)</TH
-><TH
->Values</TH
-><TH
->Mandatory</TH
-><TH
->Description</TH
-></TR
-></THEAD
-><TBODY
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->processor.number</TT
-> (int)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->Yes</TD
-><TD
->&#13;                The internal processor number in the system, starting from zero
-              </TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->processor.can_throttle</TT
-> (bool)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->No</TD
-><TD
->&#13;                Whether the processor supports throttling to decrease it's
+      Key (type)ValuesMandatoryDescription
+                processor.number (int)
+              Yes
+                The internal processor number in the system, starting from zero
+              
+                processor.can_throttle (bool)
+              No
+                Whether the processor supports throttling to decrease it's
                 own clock speed
-              </TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->processor.maximum_speed</TT
-> (long)
-              </TD
-><TD
->example: 2200</TD
-><TD
->No</TD
-><TD
->The maximum speed of the processor in units of MHz</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><DIV
-CLASS="sect2"
-><HR><H3
-CLASS="sect2"
-><A
-NAME="device-properties-display_device"
->2.3.23. <TT
-CLASS="literal"
->display_device</TT
-> namespace</A
-></H3
-><P
->&#13;        Device objects with the capability <TT
-CLASS="literal"
->display_device</TT
->
+              
+                processor.maximum_speed (long)
+              example: 2200NoThe maximum speed of the processor in units of MHz
+        display_device namespace
+      
+        Device objects with the capability display_device
         represent display devices attached to the system.
-      </P
-><DIV
-CLASS="informaltable"
-><P
-></P
-><A
-NAME="AEN3632"
-></A
-><TABLE
-BORDER="1"
-CLASS="CALSTABLE"
-><COL><COL><THEAD
-><TR
-><TH
->Key (type)</TH
-><TH
->Values</TH
-><TH
->Mandatory</TH
-><TH
->Description</TH
-></TR
-></THEAD
-><TBODY
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->display_device.type</TT
-> (string)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->Yes</TD
-><TD
->The type of display device</TD
-></TR
-><TR
-><TD
->&nbsp;</TD
-><TD
->lcd</TD
-><TD
->&nbsp;</TD
-><TD
->LCD panel</TD
-></TR
-><TR
-><TD
->&nbsp;</TD
-><TD
->crt</TD
-><TD
->&nbsp;</TD
-><TD
->CRT tube</TD
-></TR
-><TR
-><TD
->&nbsp;</TD
-><TD
->tv_out</TD
-><TD
->&nbsp;</TD
-><TD
->TV Out</TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->display_device.lcd.brightness</TT
-> (int)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->&#13;                Only if <TT
-CLASS="literal"
->display_device.type</TT
-> is lcd
-              </TD
-><TD
->Brightness level in percent</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><DIV
-CLASS="sect2"
-><HR><H3
-CLASS="sect2"
-><A
-NAME="device-properties-sensor"
->2.3.24. <TT
-CLASS="literal"
->sensor</TT
-> namespace</A
-></H3
-><P
->&#13;        Device objects with the capability <TT
-CLASS="literal"
->sensor</TT
->
+      Key (type)ValuesMandatoryDescription
+                display_device.type (string)
+              YesThe type of display devicelcdLCD panelcrtCRT tubetv_outTV Out
+                display_device.lcd.brightness (int)
+              
+                Only if display_device.type is lcd
+              Brightness level in percent
+        sensor namespace
+      
+        Device objects with the capability sensor
         represent light or temperature sensors in the system.
-      </P
-><DIV
-CLASS="informaltable"
-><P
-></P
-><A
-NAME="AEN3674"
-></A
-><TABLE
-BORDER="1"
-CLASS="CALSTABLE"
-><COL><COL><THEAD
-><TR
-><TH
->Key (type)</TH
-><TH
->Values</TH
-><TH
->Mandatory</TH
-><TH
->Description</TH
-></TR
-></THEAD
-><TBODY
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->sensor.type</TT
-> (string)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->Yes</TD
-><TD
->The type of sensor device</TD
-></TR
-><TR
-><TD
->&nbsp;</TD
-><TD
->light</TD
-><TD
->&nbsp;</TD
-><TD
->Light sensor</TD
-></TR
-><TR
-><TD
->&nbsp;</TD
-><TD
->temperature</TD
-><TD
->&nbsp;</TD
-><TD
->Temperature sensor</TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->sensor.location</TT
-> (string)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->Yes</TD
-><TD
->The location of the sensor device</TD
-></TR
-><TR
-><TD
->&nbsp;</TD
-><TD
->gpu</TD
-><TD
->&nbsp;</TD
-><TD
->Measures GPU source</TD
-></TR
-><TR
-><TD
->&nbsp;</TD
-><TD
->cpu</TD
-><TD
->&nbsp;</TD
-><TD
->Measures CPU source</TD
-></TR
-><TR
-><TD
->&nbsp;</TD
-><TD
->external</TD
-><TD
->&nbsp;</TD
-><TD
->Measures external source</TD
-></TR
-><TR
-><TD
->&nbsp;</TD
-><TD
->unknown</TD
-><TD
->&nbsp;</TD
-><TD
->Measuring other source</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><DIV
-CLASS="sect2"
-><HR><H3
-CLASS="sect2"
-><A
-NAME="device-properties-power-management"
->2.3.25. <TT
-CLASS="literal"
->power_management</TT
-> namespace</A
-></H3
-><P
->&#13;        Keys with the prefix <TT
-CLASS="literal"
->power_management</TT
->
+      Key (type)ValuesMandatoryDescription
+                sensor.type (string)
+              YesThe type of sensor devicelightLight sensortemperatureTemperature sensor
+                sensor.location (string)
+              YesThe location of the sensor devicegpuMeasures GPU sourcecpuMeasures CPU sourceexternalMeasures external sourceunknownMeasuring other source
+        power_management namespace
+      
+        Keys with the prefix power_management
         provide information about power management supported by
         your computer.
-      </P
-><DIV
-CLASS="informaltable"
-><P
-></P
-><A
-NAME="AEN3730"
-></A
-><TABLE
-BORDER="1"
-CLASS="CALSTABLE"
-><COL><COL><THEAD
-><TR
-><TH
->Key (type)</TH
-><TH
->Values</TH
-><TH
->Mandatory</TH
-><TH
->Description</TH
-></TR
-></THEAD
-><TBODY
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->power_management.type</TT
-> (string)
-              </TD
-><TD
->Examples:
-                <TT
-CLASS="literal"
->apm</TT
->,
-                <TT
-CLASS="literal"
->acpi</TT
->,
-                <TT
-CLASS="literal"
->pmu</TT
->
-              </TD
-><TD
->Yes</TD
-><TD
->&#13;                The power management subsystem used on the computer.
-              </TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->power_management.can_suspend</TT
-> (bool)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->Yes</TD
-><TD
->&#13;                If suspend support is compiled into the kernel.
-                NB. This may not mean the machine is able to suspend
-                successfully.
-              </TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->power_management.can_hibernate</TT
-> (bool)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->Yes</TD
-><TD
->&#13;                If hibernation support is compiled into the kernel.
-                NB. This may not mean the machine is able to hibernate
-                successfully.
-              </TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->power_management.can_suspend_to_ram</TT
-> (bool)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->No</TD
-><TD
->&#13;                If suspend support is compiled into the kernel.
+      Key (type)ValuesMandatoryDescription
+                power_management.type (string)
+              Examples:
+                apm,
+                acpi,
+                pmu
+              Yes
+                The power management subsystem used on the computer.
+              
+                power_management.can_suspend (bool)
+              Yes
+                If suspend support is compiled into the kernel.
                 NB. This may not mean the machine is able to suspend
                 successfully.
-                WARNING: This key is depreciated and power_management.can_suspend
-                should be used in its place. This key will be removed, but not before May 1st 2007.
-              </TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->power_management.can_suspend_to_disk</TT
-> (bool)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->No</TD
-><TD
->&#13;                If hibernation support is compiled into the kernel.
+              
+                power_management.can_hibernate (bool)
+              Yes
+                If hibernation support is compiled into the kernel.
                 NB. This may not mean the machine is able to hibernate
                 successfully.
-                WARNING: This key is depreciated and power_management.can_hibernate
-                should be used in its place. This key will be removed, but not before May 1st 2007.
-              </TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->power_management.is_powersave_set</TT
-> (bool)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->Yes</TD
-><TD
->&#13;                Is the last value passed to the SetPowerSave method.
-              </TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->power_management.quirk.s3_bios</TT
-> (bool)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->No</TD
-><TD
->Use the S3_BIOS kernel command for suspend.</TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->power_management.quirk.s3_mode</TT
-> (bool)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->No</TD
-><TD
->Use the S3_MODE kernel command for suspend.</TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->power_management.quirk.dpms_suspend</TT
-> (bool)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->No</TD
-><TD
->Suspend the video card via DPMS on suspend.</TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->power_management.quirk.vga_mode_3</TT
-> (bool)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->No</TD
-><TD
->Reset the VGA text mode to mode 3 on resume.</TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->power_management.quirk.dpms_on</TT
-> (bool)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->No</TD
-><TD
->Reactivate the screen with DPMS on resume.</TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->power_management.quirk.vbe_post</TT
-> (bool)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->No</TD
-><TD
->Run the VGA BIOS Power On Self Test (POST) on resume.</TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->power_management.quirk.vbestate_restore</TT
-> (bool)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->No</TD
-><TD
->Save the VGA BIOS state before suspend, and restore it on resume.</TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->power_management.quirk.vbemode_restore</TT
-> (bool)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->No</TD
-><TD
->Save the VGA BIOS mode before suspend, and restore it on resume.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-><P
->&#13;        The following methods exist on the interface
-        <TT
-CLASS="literal"
->org.freedesktop.Hal.Device.SystemPowerManagement</TT
->.
-      </P
-><DIV
-CLASS="informaltable"
-><P
-></P
-><A
-NAME="AEN3828"
-></A
-><TABLE
-BORDER="1"
-CLASS="CALSTABLE"
-><COL><COL><THEAD
-><TR
-><TH
->Method (parameter types)</TH
-><TH
->Parameters</TH
-><TH
->Mandatory</TH
-><TH
->Description</TH
-></TR
-></THEAD
-><TBODY
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->Suspend</TT
-> (integer)
-              </TD
-><TD
->&#13;                The number of seconds until we resume automatically, or zero if
+              
+                power_management.is_powersave_set (bool)
+              Yes
+                Is the last value passed to the SetPowerSave method.
+              
+                power_management.quirk.s3_bios (bool)
+              NoUse the S3_BIOS kernel command for suspend.
+                power_management.quirk.s3_mode (bool)
+              NoUse the S3_MODE kernel command for suspend.
+                power_management.quirk.dpms_suspend (bool)
+              NoSuspend the video card via DPMS on suspend.
+                power_management.quirk.vga_mode_3 (bool)
+              NoReset the VGA text mode to mode 3 on resume.
+                power_management.quirk.dpms_on (bool)
+              NoReactivate the screen with DPMS on resume.
+                power_management.quirk.vbe_post (bool)
+              NoRun the VGA BIOS Power On Self Test (POST) on resume.
+                power_management.quirk.vbestate_restore (bool)
+              NoSave the VGA BIOS state before suspend, and restore it on resume.
+                power_management.quirk.vbemode_restore (bool)
+              NoSave the VGA BIOS mode before suspend, and restore it on resume.
+        The following methods exist on the interface
+        org.freedesktop.Hal.Device.SystemPowerManagement.
+      Method (parameter types)ParametersMandatoryDescription
+                Suspend (integer)
+              
+                The number of seconds until we resume automatically, or zero if
                 we should not auto-resume.
-              </TD
-><TD
->No</TD
-><TD
->&#13;                This method puts the system in a state where little power is consumed.
+              No
+                This method puts the system in a state where little power is consumed.
                 The system is not operational while in this state.
                 Latency for the system to return to an operational state is in
                 the order of magnitude of 5 seconds.
-              </TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->Hibernate</TT
-> (void)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->No</TD
-><TD
->&#13;                This method puts the system in a state where no power is consumed.
+              
+                Hibernate (void)
+              No
+                This method puts the system in a state where no power is consumed.
                 The system is not operational while in this state.
                 Latency for the system to return to an operational state is in
                 the order of magnitude of one minute.
-              </TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-><P
->&#13;        The following methods exist on the interface
-        <TT
-CLASS="literal"
->org.freedesktop.Hal.Device.CPUFreq</TT
->.
-      </P
-><DIV
-CLASS="informaltable"
-><P
-></P
-><A
-NAME="AEN3851"
-></A
-><TABLE
-BORDER="1"
-CLASS="CALSTABLE"
-><COL><COL><THEAD
-><TR
-><TH
->Method (parameter types)</TH
-><TH
->Parameters</TH
-><TH
->Mandatory</TH
-><TH
->Description</TH
-></TR
-></THEAD
-><TBODY
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->SetCPUFreqGovernor</TT
-> (string)
-              </TD
-><TD
->&#13;	        The name of the governor to set. Get a list of available governors
+              
+        The following methods exist on the interface
+        org.freedesktop.Hal.Device.CPUFreq.
+      Method (parameter types)ParametersMandatoryDescription
+                SetCPUFreqGovernor (string)
+              
+	        The name of the governor to set. Get a list of available governors
 		with the GetCPUFreqAvailableGovernors method.
-              </TD
-><TD
->No</TD
-><TD
->&#13;	        Sets a CPU frequency scaling governor for all CPUFreq
+              No
+	        Sets a CPU frequency scaling governor for all CPUFreq
 		interfaces the kernel provides. If the userspace governor
 		is set, this interface also contains a proper scaling
 		mechanism. The default performance is set to 50.
-              </TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->SetCPUFreqPerformance</TT
-> (integer)
-              </TD
-><TD
->&#13;	        The performance between 1 and 100 to set in dynamic scaling modes.
-              </TD
-><TD
->No</TD
-><TD
->&#13;	        Sets the performance of the dynamic scaling mechanism. This method
+              
+                SetCPUFreqPerformance (integer)
+              
+	        The performance between 1 and 100 to set in dynamic scaling modes.
+              No
+	        Sets the performance of the dynamic scaling mechanism. This method
 		summarizes and abstracts all the different settings which can be taken
 		for dynamic frequency adjustments, like at which load to switch up
 		frequency or how many steps the mechanism should traverse until
 		reaching the maximum frequency. The higher the value, the more
 		performance you get. Respectively, the higher the value, the sooner
 		and the more often the frequency is switched up.
-              </TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->SetCPUFreqConsiderNice</TT
-> (boolean)
-              </TD
-><TD
->&#13;	        Whether or not niced processes should be considered on CPU
+              
+                SetCPUFreqConsiderNice (boolean)
+              
+	        Whether or not niced processes should be considered on CPU
 		load calculation.
-              </TD
-><TD
->No</TD
-><TD
->&#13;	        Whether or not niced processes should be considered on CPU
+              No
+	        Whether or not niced processes should be considered on CPU
 		load calculation. If niced processes are considered, they can cause a
 		frequency increment although their absolute load percentage wouldn't
 		trigger the scaling mechanism to switch up the frequency. The default
 		setting is 'false'.
-              </TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->GetCPUFreqGovernor</TT
-> (void)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->No</TD
-><TD
->&#13;	        Get the current active governor for all CPU frequency interfaces (string).
-              </TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->GetCPUFreqPerformance</TT
-> (void)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->No</TD
-><TD
->&#13;	        Get the current active performance setting if a dynamic scaling
+              
+                GetCPUFreqGovernor (void)
+              
+              No
+	        Get the current active governor for all CPU frequency interfaces (string).
+              
+                GetCPUFreqPerformance (void)
+              
+              No
+	        Get the current active performance setting if a dynamic scaling
 		mechanism is in use (integer between 1 and 100).
-              </TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->GetCPUFreqConsiderNice</TT
-> (void)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->No</TD
-><TD
->&#13;	        Returns whether niced processed are considered during CPU load
+              
+                GetCPUFreqConsiderNice (void)
+              
+              No
+	        Returns whether niced processed are considered during CPU load
 		calculation or not (returns boolean).
-              </TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->GetCPUFreqAvailableGovernors</TT
-> (void)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->No</TD
-><TD
->&#13;	        Returns a list of strings of all available governors which
+              
+                GetCPUFreqAvailableGovernors (void)
+              
+              No
+	        Returns a list of strings of all available governors which
 		could be set with the SetCPUFreqGovernor method.
-              </TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-><P
->&#13;        The following errors maybe raised on the interface
-        <TT
-CLASS="literal"
->org.freedesktop.Hal.Device.CPUFreq</TT
->.
-      </P
-><DIV
-CLASS="informaltable"
-><P
-></P
-><A
-NAME="AEN3904"
-></A
-><TABLE
-BORDER="1"
-CLASS="CALSTABLE"
-><COL><COL><THEAD
-><TR
-><TH
->Error</TH
-><TH
->Description</TH
-><TH
->Detail field</TH
-></TR
-></THEAD
-><TBODY
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->GeneralError</TT
->
-              </TD
-><TD
->&#13;	        A general error occured.
-              </TD
-><TD
->&#13;	        The exact error.
-	      </TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->UnknownGovernor</TT
->
-              </TD
-><TD
->&#13;	        The governor which was tried to be set doesn't exist.
-              </TD
-><TD
->&#13;	        The governor which was tried be to set.
-	      </TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->PermissionDenied</TT
->
-              </TD
-><TD
->&#13;	        The caller doesn't have the privilege to execute this
+              
+        The following errors maybe raised on the interface
+        org.freedesktop.Hal.Device.CPUFreq.
+      ErrorDescriptionDetail field
+                GeneralError
+              
+	        A general error occured.
+              
+	        The exact error.
+	      
+                UnknownGovernor
+              
+	        The governor which was tried to be set doesn't exist.
+              
+	        The governor which was tried be to set.
+	      
+                PermissionDenied
+              
+	        The caller doesn't have the privilege to execute this
 		method.
-              </TD
-><TD
->&#13;	        The privilege the caller needs to execute the method.
-	      </TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->NoSuitableGovernor</TT
->
-              </TD
-><TD
->&#13;	        The method executed doesn't exist for the current active governor.
-              </TD
-><TD
->&#13;	        The method which was tried to be executed.
-	      </TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->GovernorInitFailed</TT
->
-              </TD
-><TD
->&#13;	        The initialization of the governor failed.
-              </TD
-><TD
->&#13;	        The reason for the failure.
-	      </TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><DIV
-CLASS="sect2"
-><HR><H3
-CLASS="sect2"
-><A
-NAME="device-properties-tape"
->2.3.26. <TT
-CLASS="literal"
->tape</TT
-> namespace</A
-></H3
-><P
->&#13;        Device objects with the capability <TT
-CLASS="literal"
->tape</TT
->
+              
+	        The privilege the caller needs to execute the method.
+	      
+                NoSuitableGovernor
+              
+	        The method executed doesn't exist for the current active governor.
+              
+	        The method which was tried to be executed.
+	      
+                GovernorInitFailed
+              
+	        The initialization of the governor failed.
+              
+	        The reason for the failure.
+	      
+        tape namespace
+      
+        Device objects with the capability tape
         represent tape devices.
-      </P
-><DIV
-CLASS="informaltable"
-><P
-></P
-><A
-NAME="AEN3942"
-></A
-><TABLE
-BORDER="1"
-CLASS="CALSTABLE"
-><COL><COL><THEAD
-><TR
-><TH
->Key (type)</TH
-><TH
->Values</TH
-><TH
->Mandatory</TH
-><TH
->Description</TH
-></TR
-></THEAD
-><TBODY
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->tape.major</TT
-> (int)
-              </TD
-><TD
->example: 254</TD
-><TD
->Yes</TD
-><TD
->The device's major number</TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->tape.minor</TT
-> (int)
-              </TD
-><TD
->example: 0</TD
-><TD
->Yes</TD
-><TD
->The device's minor number</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-></DIV
-><DIV
-CLASS="sect1"
-><HR><H2
-CLASS="sect1"
-><A
-NAME="properties-policy"
->2.4. Policy Properties</A
-></H2
-><P
->&#13;      The properties on a hal device object can be used to express
+      Key (type)ValuesMandatoryDescription
+                tape.major (int)
+              example: 254YesThe device's major number
+                tape.minor (int)
+              example: 0YesThe device's minor numberPolicy Properties
+      The properties on a hal device object can be used to express
       certain policies about how the device is to be used. This
       information can be used by either programs querying hal
       directly or by hal callouts. Default policy (e.g. always
       mount a file system with the option 'exec') can also be
       merged on the root computer device object.
-    </P
-><DIV
-CLASS="sect2"
-><HR><H3
-CLASS="sect2"
-><A
-NAME="device-properties-storage-policy-default"
->2.4.1. <TT
-CLASS="literal"
->storage.policy.default</TT
-> namespace</A
-></H3
-><P
->&#13;        This namespace specifies the default policy for storage
+    
+        storage.policy.default namespace
+      
+        This namespace specifies the default policy for storage
         devices - these properties should be merged on the root computer
         device object.
-      </P
-><DIV
-CLASS="informaltable"
-><P
-></P
-><A
-NAME="AEN3970"
-></A
-><TABLE
-BORDER="1"
-CLASS="CALSTABLE"
-><COL><COL><THEAD
-><TR
-><TH
->Key (type)</TH
-><TH
->Values</TH
-><TH
->Mandatory</TH
-><TH
->Description</TH
-></TR
-></THEAD
-><TBODY
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->storage.policy.default.use_managed_keyword</TT
-> (string)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->No</TD
-><TD
->&#13;                Whether to use a <SPAN
-CLASS="emphasis"
-><I
-CLASS="emphasis"
->managed no
+      Key (type)ValuesMandatoryDescription
+                storage.policy.default.use_managed_keyword (string)
+              No
+                Whether to use a managed no
                   operation
-                </I
-></SPAN
->
+                
                 keyword when adding entries to
-                the File Systems file (<TT
-CLASS="literal"
->/etc/fstab</TT
->) -
+                the File Systems file (/etc/fstab) -
                 this is used to identify entries added by a program
                 that modifies this file.
-              </TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->storage.policy.default.managed_keyword.primary</TT
-> (string)
-              </TD
-><TD
->Example: 'managed'</TD
-><TD
->No</TD
-><TD
->No-op keyword to use when adding entries to the file systems file</TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->storage.policy.default.managed_keyword.secondary</TT
-> (string)
-              </TD
-><TD
->Example: 'kudzu'</TD
-><TD
->No</TD
-><TD
->&#13;                Secondary no-op keyword that identifies entries added
+              
+                storage.policy.default.managed_keyword.primary (string)
+              Example: 'managed'NoNo-op keyword to use when adding entries to the file systems file
+                storage.policy.default.managed_keyword.secondary (string)
+              Example: 'kudzu'No
+                Secondary no-op keyword that identifies entries added
                 to the file systems file. The secondary keyword is never
                 written; only read. This is useful when making a transition
                 from one managed keyword to another.
-              </TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->storage.policy.default.mount_option.*</TT
-> (bool)
-              </TD
-><TD
->Examples:
-                <TT
-CLASS="literal"
->.noauto</TT
->,
-                <TT
-CLASS="literal"
->.exec</TT
->,
-                <TT
-CLASS="literal"
->.console</TT
->,
-                <TT
-CLASS="literal"
->.fscontext=system_u:object_r:removable_t</TT
->
-              </TD
-><TD
->No</TD
-><TD
->&#13;                This is actually an entire namespace that specifies
+              
+                storage.policy.default.mount_option.* (bool)
+              Examples:
+                .noauto,
+                .exec,
+                .console,
+                .fscontext=system_u:object_r:removable_t
+              No
+                This is actually an entire namespace that specifies
                 what options a storage device should be mounted with,
-                e.g. the example <TT
-CLASS="literal"
->.exec</TT
-> should be read as
-                <TT
-CLASS="literal"
->storage.policy.default.mount_option.exec</TT
->
-              </TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->storage.policy.default.mount_root</TT
-> (string)
-              </TD
-><TD
->&#13;                Example: <TT
-CLASS="literal"
->/media</TT
->
-              </TD
-><TD
->No</TD
-><TD
->&#13;                The default mount root to use when computing what
+                e.g. the example .exec should be read as
+                storage.policy.default.mount_option.exec
+              
+                storage.policy.default.mount_root (string)
+              
+                Example: /media
+              No
+                The default mount root to use when computing what
                 mount point to use for a storage device
-              </TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><DIV
-CLASS="sect2"
-><HR><H3
-CLASS="sect2"
-><A
-NAME="device-properties-storage-policy"
->2.4.2. <TT
-CLASS="literal"
->storage.policy</TT
-> namespace</A
-></H3
-><P
->&#13;        This namespace contains properties that can be merged on
+              
+        storage.policy namespace
+      
+        This namespace contains properties that can be merged on
         individual storage devices to specify how and if the storage
         device should be mounted.
-      </P
-><DIV
-CLASS="informaltable"
-><P
-></P
-><A
-NAME="AEN4022"
-></A
-><TABLE
-BORDER="1"
-CLASS="CALSTABLE"
-><COL><COL><THEAD
-><TR
-><TH
->Key (type)</TH
-><TH
->Values</TH
-><TH
->Mandatory</TH
-><TH
->Description</TH
-></TR
-></THEAD
-><TBODY
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->storage.policy.should_mount</TT
-> (bool)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->No</TD
-><TD
->Whether any volumes from this storage device
+      Key (type)ValuesMandatoryDescription
+                storage.policy.should_mount (bool)
+              NoWhether any volumes from this storage device
                 should be mounted
-              </TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->storage.policy.desired_mount_point</TT
-> (string)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->&#13;                No (only applicable if the
-                property <TT
-CLASS="literal"
->storage.no_partitions_hint</TT
->
+              
+                storage.policy.desired_mount_point (string)
+              
+                No (only applicable if the
+                property storage.no_partitions_hint
                 is set to TRUE)
-              </TD
-><TD
->&#13;                The desired mount point for this storage device. The
+              
+                The desired mount point for this storage device. The
                 path must not be fully qualified and there is no
                 guarantee that and storage policy agents, such as
                 policy mount wrappers or programs modifying the file
                 systems file will use this mount point.
-              </TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->storage.policy.mount_option.*</TT
-> (bool)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->&#13;                No (only applicable if the
-                property <TT
-CLASS="literal"
->storage.no_partitions_hint</TT
->
+              
+                storage.policy.mount_option.* (bool)
+              
+                No (only applicable if the
+                property storage.no_partitions_hint
                 is set to TRUE)
-              </TD
-><TD
->&#13;                Mount options to use, see property
-                <TT
-CLASS="literal"
->storage.policy.default.mount_option.*</TT
->
+              
+                Mount options to use, see property
+                storage.policy.default.mount_option.*
                 for details.
-              </TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->storage.policy.mount_filesystem</TT
-> (string)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->&#13;                No (only applicable if the
-                property <TT
-CLASS="literal"
->storage.no_partitions_hint</TT
->
+              
+                storage.policy.mount_filesystem (string)
+              
+                No (only applicable if the
+                property storage.no_partitions_hint
                 is set to TRUE)
-              </TD
-><TD
->File system to use when mounting the storage device.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><DIV
-CLASS="sect2"
-><HR><H3
-CLASS="sect2"
-><A
-NAME="device-properties-volume-policy"
->2.4.3. <TT
-CLASS="literal"
->volume.policy</TT
-> namespace</A
-></H3
-><P
->&#13;        This namespace contains properties that can be merged on
+              File system to use when mounting the storage device.
+        volume.policy namespace
+      
+        This namespace contains properties that can be merged on
         individual volumes to specify how and if the volume
         should be mounted.
-      </P
-><DIV
-CLASS="informaltable"
-><P
-></P
-><A
-NAME="AEN4063"
-></A
-><TABLE
-BORDER="1"
-CLASS="CALSTABLE"
-><COL><COL><THEAD
-><TR
-><TH
->Key (type)</TH
-><TH
->Values</TH
-><TH
->Mandatory</TH
-><TH
->Description</TH
-></TR
-></THEAD
-><TBODY
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->volume.policy.should_mount</TT
-> (bool)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->No</TD
-><TD
->Whether this volume should be mounted at all</TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->volume.policy.mount_filesystem</TT
-> (string)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->No</TD
-><TD
->File system to use when mounting the volume.</TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->volume.policy.desired_mount_point</TT
-> (string)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->No</TD
-><TD
->&#13;                The desired mount point for this volume. The
+      Key (type)ValuesMandatoryDescription
+                volume.policy.should_mount (bool)
+              NoWhether this volume should be mounted at all
+                volume.policy.mount_filesystem (string)
+              NoFile system to use when mounting the volume.
+                volume.policy.desired_mount_point (string)
+              No
+                The desired mount point for this volume. The
                 path must not be fully qualified and there is no
                 guarantee that and storage policy agents, such as
                 policy mount wrappers or programs modifying the file
                 systems file will use this mount point.
-              </TD
-></TR
-><TR
-><TD
->&#13;                <TT
-CLASS="literal"
->volume.policy.mount_option.*</TT
-> (bool)
-              </TD
-><TD
->&nbsp;</TD
-><TD
->No</TD
-><TD
->&#13;                Mount options to use, see property 
-                <TT
-CLASS="literal"
->storage.policy.default.mount_option.*</TT
->
+              
+                volume.policy.mount_option.* (bool)
+              No
+                Mount options to use, see property 
+                storage.policy.default.mount_option.*
                 for details.
-              </TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-></DIV
-></DIV
-><DIV
-CLASS="chapter"
-><HR><H1
-><A
-NAME="spec-device-info"
-></A
->Chapter 3. Device Information Files</H1
-><P
->&#13;    Device information files (<TT
-CLASS="literal"
->.fdi</TT
-> files is a
+              Deprecated Properties
+      The section represents properties that are deprecated and should be no longer used. 
+      The properties/keys will be removed, but not before the date in the following table:
+    Key (type)ReplacementRemove (date)Notesinfo.bus (string)info.bus2008-03-01Renamed to something more abstract, available until removed.*.physical_device (string)*.originating_device2008-03-01Renamed to something more abstract, available until removed.power_management.can_suspend_to_ram (bool)power_management.can_suspend2007-05-01power_management.can_suspend_to_disk (bool)power_management.can_hibernate2007-05-01Device Information Files
+    Device information files (.fdi files is a
     shorthand) are used to merge arbitrary properties onto device
     objects. The way device information files works is that once all
-    physical properties are merged onto a device object it is tried
+    device properties are merged onto a device object it is tried
     against the set of installed device information files.  Device
     information files are used for both merging facts and policy
     settings about devices.
-  </P
-><P
->&#13;    Each device information file got a number of
-    <TT
-CLASS="literal"
->&#60;match key="some_property"
+  
+    Each device information file got a number of
+    &#60;match key="some_property"
       [string|int|bool|..]="required_value" &#62;
-    </TT
->
+    
     directives
     that is tested against the properties of the device object. If
     all the match directives passes then the device information can
-    include <TT
-CLASS="literal"
->&#60;[merge|append|prepend] key="some_property"
+    include &#60;[merge|append|prepend] key="some_property"
       type="[string|int|bool|..]"&#62;
-    </TT
->
+    
     directives to
     respectively merge new properties or append to existing
     properties on the device object. It's important to emphasize
     that any previously property stemming from device detection can
     be overridden by a device information file.
-  </P
-><P
->&#13;    The <TT
-CLASS="literal"
->&#60;match&#62;</TT
->,
-    <TT
-CLASS="literal"
->&#60;merge&#62;</TT
->, <TT
-CLASS="literal"
->&#60;append&#62;</TT
->
-    and <TT
-CLASS="literal"
->&#60;prepend&#62;</TT
-> directives always requires
-    the <TT
-CLASS="literal"
->key</TT
-> attribute which must be either a
+  
+    The &#60;match&#62;,
+    &#60;merge&#62;, &#60;append&#62;
+    and &#60;prepend&#62; directives always requires
+    the key attribute which must be either a
     property name on the device object in question or a path to a
     property on another device object. The latter case is expressed
     either through direct specification of the UDI, such as
-    <TT
-CLASS="literal"
->/org/freedesktop/Hal/devices/computer:foo.bar</TT
->
+    /org/freedesktop/Hal/devices/computer:foo.bar
     or indirect references such as
-    <TT
-CLASS="literal"
->@info.parent:baz</TT
-> where the latter means that
+    @info.parent:baz where the latter means that
     the device object specified by the UDI in the string property
-    <TT
-CLASS="literal"
->info.parent</TT
-> should be used to query the
-    property <TT
-CLASS="literal"
->baz</TT
->. It is also possible to use
+    info.parent should be used to query the
+    property baz. It is also possible to use
     multiple indirections, e.g. for a volume on a USB memory stick
-    the indirection <TT
-CLASS="literal"
->@block.storage_device:@storage.physical_device:usb.vendor_id</TT
->
-    will reference the <TT
-CLASS="literal"
->usb.vendor_id</TT
-> property
+    the indirection @block.storage_device:@storage.originating_device:usb.vendor_id
+    will reference the usb.vendor_id property
     on the device object representing the USB interface.
-  </P
-><P
->&#13;    When the property to match have been determined a number of
-    attributes can be used within the <TT
-CLASS="literal"
->&#60;match&#62;</TT
->
+  
+    When the property to match have been determined a number of
+    attributes can be used within the &#60;match&#62;
     tag:
-    <P
-></P
-><UL
-><LI
-><P
->&#13;          <TT
-CLASS="literal"
->string</TT
-> - match a string property; for example
-          <TT
-CLASS="literal"
->&#60;match key="foo.bar" string="baz"&#62;</TT
->
+    
+          string - match a string property; for example
+          &#60;match key="foo.bar" string="baz"&#62;
           will match only if 'foo.bar' is a string property assuming the value 'baz'.
-        </P
-></LI
-><LI
-><P
->&#13;          <TT
-CLASS="literal"
->int</TT
-> - match an integer property
-        </P
-></LI
-><LI
-><P
->&#13;          <TT
-CLASS="literal"
->uint64</TT
-> - match property with the 64-bit unsigned type
-        </P
-></LI
-><LI
-><P
->&#13;          <TT
-CLASS="literal"
->bool</TT
-> - match a boolean property
-        </P
-></LI
-><LI
-><P
->&#13;          <TT
-CLASS="literal"
->double</TT
-> - match a property of type double
-        </P
-></LI
-><LI
-><P
->&#13;          <TT
-CLASS="literal"
->exists</TT
-> - used as
-          <TT
-CLASS="literal"
->&#60;match key="foo.bar" exists="true"&#62;</TT
->. Can be used with
+        
+          int - match an integer property
+        
+          uint64 - match property with the 64-bit unsigned type
+        
+          bool - match a boolean property
+        
+          double - match a property of type double
+        
+          exists - used as
+          &#60;match key="foo.bar" exists="true"&#62;. Can be used with
           'true' and 'false' respectively to match when a property exists and it doesn't.
-        </P
-></LI
-><LI
-><P
->&#13;          <TT
-CLASS="literal"
->empty</TT
-> - can only be used on string or strlist properties
+        
+          empty - can only be used on string or strlist properties
           with 'true' and 'false'.
           The semantics for 'true' is to match only when the string is non-empty.
-        </P
-></LI
-><LI
-><P
->&#13;          <TT
-CLASS="literal"
->is_absolute_path</TT
-> - matches only when a string
+        
+          is_absolute_path - matches only when a string
           property represents an absolute path (the path doesn't have to exist).
           Can be used with 'true' or 'false'.
-        </P
-></LI
-><LI
-><P
->&#13;          <TT
-CLASS="literal"
->is_ascii</TT
-> - matches only when a string property
+        
+          is_ascii - matches only when a string property
           contain only ASCII characters. Can be used with 'true' or 'false'.
-        </P
-></LI
-><LI
-><P
->&#13;          <TT
-CLASS="literal"
->compare_lt</TT
-> - can be used on int, uint64, double
+        
+          compare_lt - can be used on int, uint64, double
           and string properties to compare with a constant.
           Matches when the given property is less than the given constant
           using the default ordering.
-        </P
-></LI
-><LI
-><P
->&#13;          <TT
-CLASS="literal"
->compare_le</TT
-> - like <TT
-CLASS="literal"
->compare_lt</TT
->
+        
+          compare_le - like compare_lt
           but matches when less than or equal.
-        </P
-></LI
-><LI
-><P
->&#13;          <TT
-CLASS="literal"
->compare_gt</TT
-> - like <TT
-CLASS="literal"
->compare_lt</TT
->
+        
+          compare_gt - like compare_lt
           but matches when greater than.
-        </P
-></LI
-><LI
-><P
->&#13;          <TT
-CLASS="literal"
->compare_ge</TT
-> - like <TT
-CLASS="literal"
->compare_lt</TT
->
+        
+          compare_ge - like compare_lt
           but matches when greater than or equal.
-        </P
-></LI
-><LI
-><P
->&#13;          <TT
-CLASS="literal"
->contains</TT
-> - can only be used with string and
+        
+          contains - can only be used with string and
           strlist (string list).
           For a string key this matches when the property contains the given
           (sub-)string. For a string list this match if the given string match
           a item of the list.
-        </P
-></LI
-><LI
-><P
->&#13;          <TT
-CLASS="literal"
->contains_ncase</TT
-> - like <TT
-CLASS="literal"
->contains</TT
->
+        
+          contains_ncase - like contains
           but the property and the given key are converted to lowercase before check.
-        </P
-></LI
-></UL
->
-    The <TT
-CLASS="literal"
->&#60;merge&#62;</TT
->, <TT
-CLASS="literal"
->&#60;append&#62;</TT
->
-    and <TT
-CLASS="literal"
->&#60;prepend&#62;</TT
-> directives all require
-    the <TT
-CLASS="literal"
->type</TT
-> attribute which specifies what to
+        
+    The &#60;merge&#62;, &#60;append&#62;
+    and &#60;prepend&#62; directives all require
+    the type attribute which specifies what to
     merge. The following values are supported
-    <P
-></P
-><UL
-><LI
-><P
->&#13;          <TT
-CLASS="literal"
->string</TT
-> - The value is copied to the property. For example
-          <TT
-CLASS="literal"
->&#60;merge key="foo.bar" type="string"&#62;baz&#60;/merge&#62;</TT
->
+    
+          string - The value is copied to the property. For example
+          &#60;merge key="foo.bar" type="string"&#62;baz&#60;/merge&#62;
           will merge the value 'baz' into the property 'foo.bar'.
-        </P
-></LI
-><LI
-><P
->&#13;          <TT
-CLASS="literal"
->strlist</TT
-> - For <TT
-CLASS="literal"
->&#60;merge&#62;</TT
-> the value is
+        
+          strlist - For &#60;merge&#62; the value is
           copied to the property and the current property will be overwritten. For
-          <TT
-CLASS="literal"
->&#60;append&#62;</TT
-> and <TT
-CLASS="literal"
->&#60;prepend&#62;</TT
-> the
+          &#60;append&#62; and &#60;prepend&#62; the
           value is append or prepend to the list as new item.
-        </P
-></LI
-><LI
-><P
->&#13;          <TT
-CLASS="literal"
->bool</TT
-> - Can merge the values 'true' or 'false'
-        </P
-></LI
-><LI
-><P
->&#13;          <TT
-CLASS="literal"
->int</TT
-> - Merges an integer
-        </P
-></LI
-><LI
-><P
->&#13;          <TT
-CLASS="literal"
->uint64</TT
-> - Merges an unsigned 64-bit integer
-        </P
-></LI
-><LI
-><P
->&#13;          <TT
-CLASS="literal"
->double</TT
-> - Merges a double precision floating point number
-        </P
-></LI
-><LI
-><P
->&#13;          <TT
-CLASS="literal"
->copy_property</TT
-> - Copies the value of a given
+        
+          bool - Can merge the values 'true' or 'false'
+        
+          int - Merges an integer
+        
+          uint64 - Merges an unsigned 64-bit integer
+        
+          double - Merges a double precision floating point number
+        
+          copy_property - Copies the value of a given
           property - supports paths with direct and indirect UDI's. For example
-          <TT
-CLASS="literal"
->&#60;merge key="foo.bar" type="copy_property"&#62;@info.parent:baz.bat&#60;/merge&#62;</TT
->
-          will merge the value of the property <TT
-CLASS="literal"
->baz.bat</TT
-> on the device object with the UDI from
-          the property <TT
-CLASS="literal"
->info.parent</TT
-> into the property <TT
-CLASS="literal"
->foo.bar</TT
-> on
+          &#60;merge key="foo.bar" type="copy_property"&#62;@info.parent:baz.bat&#60;/merge&#62;
+          will merge the value of the property baz.bat on the device object with the UDI from
+          the property info.parent into the property foo.bar on
           the device object being processed.
-        </P
-></LI
-></UL
->
-    The <TT
-CLASS="literal"
->&#60;remove&#62;</TT
->, directive require only a key and can be used with all keys.
-    For <TT
-CLASS="literal"
->strlist</TT
-> there is additionally a special syntax to remove a item from the
+        
+    The &#60;remove&#62;, directive require only a key and can be used with all keys.
+    For strlist there is additionally a special syntax to remove a item from the
     string list. For example to remove item 'bla' from property 'foo.bar':
-    <TT
-CLASS="literal"
->&#60;remove key="foo.bar" type="strlist"&#62;bla&#60;/remove&#62;</TT
->
-  </P
-><P
->&#13;    Device Information files are stored in the following standard hierachy with the following default
-    top level directories <TT
-CLASS="literal"
->information</TT
->, <TT
-CLASS="literal"
->policy</TT
-> and
-    <TT
-CLASS="literal"
->preprobe</TT
->:
-    <P
-></P
-><UL
-><LI
-><P
->&#13;          <TT
-CLASS="literal"
->information</TT
-> - device information files to merge device information
-          <P
-></P
-><UL
-><LI
-><P
->&#13;                <TT
-CLASS="literal"
->10freedesktop</TT
-> - device information files included with
+    &#60;remove key="foo.bar" type="strlist"&#62;bla&#60;/remove&#62;
+  
+    Device Information files are stored in the following standard hierachy with the following default
+    top level directories information, policy and
+    preprobe:
+    
+          information - device information files to merge device information
+          
+                10freedesktop - device information files included with
                 the hal tarball
-              </P
-></LI
-><LI
-><P
->&#13;                <TT
-CLASS="literal"
->20thirdparty</TT
-> - device information files from the device
+              
+                20thirdparty - device information files from the device
                 manufacturer and installed from media accompanying the hardware
-              </P
-></LI
-><LI
-><P
->&#13;                <TT
-CLASS="literal"
->30user</TT
-> - device information for specific devices
-              </P
-></LI
-></UL
->
-        </P
-></LI
-><LI
-><P
->&#13;          <TT
-CLASS="literal"
->policy</TT
-> - device information files to merge policy propertys
-          <P
-></P
-><UL
-><LI
-><P
->&#13;                <TT
-CLASS="literal"
->10osvendor</TT
-> - device information files included with the
+              
+                30user - device information for specific devices
+              
+        
+          policy - device information files to merge policy propertys
+          
+                10osvendor - device information files included with the
                 hal tarball and supplied by the operating system vendor for policy rules
-              </P
-></LI
-><LI
-><P
->&#13;                <TT
-CLASS="literal"
->20thirdparty</TT
-> -  Policy rules from the device
+              
+                20thirdparty -  Policy rules from the device
                 manufacturer and installed from media accompanying the hardware
-              </P
-></LI
-><LI
-><P
->&#13;                <TT
-CLASS="literal"
->30user</TT
-> - Policy rules for specific devices
-              </P
-></LI
-></UL
->
-        </P
-></LI
-><LI
-><P
->&#13;          <TT
-CLASS="literal"
->preprobe</TT
-> - device information files to information before probe devices
-          <P
-></P
-><UL
-><LI
-><P
->&#13;                <TT
-CLASS="literal"
->10osvendor</TT
-> - device information files included with the
+              
+                30user - Policy rules for specific devices
+              
+        
+          preprobe - device information files to information before probe devices
+          
+                10osvendor - device information files included with the
                 hal tarball and supplied by the operating system vendor
-              </P
-></LI
-><LI
-><P
->&#13;                <TT
-CLASS="literal"
->20thirdparty</TT
-> - device information files from the device
+              
+                20thirdparty - device information files from the device
                 manufacturer and installed from media accompanying the hardware
-              </P
-></LI
-><LI
-><P
->&#13;                <TT
-CLASS="literal"
->30user</TT
-> -  device information for specific devices
-              </P
-></LI
-></UL
->
-        </P
-></LI
-></UL
->
+              
+                30user -  device information for specific devices
+              
+        
     All device information files are matched for every hal device object.
-  </P
-><DIV
-CLASS="sect1"
-><HR><H2
-CLASS="sect1"
-><A
-NAME="fdi-facts"
->3.1. Facts about devices</A
-></H2
-><DIV
-CLASS="sect2"
-><H3
-CLASS="sect2"
-><A
-NAME="fdi-example-mp3player"
->3.1.1. Example: MP3 player</A
-></H3
-><PRE
-CLASS="programlisting"
->&#13;        &#60;?xml version="1.0" encoding="UTF-8"?&#62;
-
-&#60;!-- Example: This device information file matches an USB Mass Storage based MP3 player 
-              by the matching on the USB vendor and product identifiers. --&#62;
-
-&#60;deviceinfo version="0.2"&#62;
-  &#60;device&#62;
-    &#60;match key="info.bus" string="usb"&#62;
-      &#60;match key="usb.vendor_id" int="0x066f"&#62;
-        &#60;match key="usb.product_id" int="0x8000"&#62;
-          &#60;merge key="info.category" type="string"&#62;portable_audio_player&#60;/merge&#62;
-          &#60;merge key="info.capabilities" type="string"&#62;portable_audio_player&#60;/merge&#62;
-          &#60;merge key="portable_audio_player.access_method" type="string"&#62;storage&#60;/merge&#62;
-          &#60;merge key="portable_audio_player.output_formats" type="string"&#62;audio/mpeg audio/x-ms-wma&#60;/merge&#62;
-          &#60;merge key="portable_audio_player.input_formats" type="string"&#62;audio/x-wav&#60;/merge&#62;
-        &#60;/match&#62;
-      &#60;/match&#62;
-    &#60;/match&#62;
-  &#60;/device&#62;
-&#60;/deviceinfo&#62;
-      </PRE
-><P
->&#13;        The final set of properties look like this:
-      </P
-><P
->&#13;        <IMG
-SRC="hal-fdi-example2.png">
-      </P
-></DIV
-><DIV
-CLASS="sect2"
-><HR><H3
-CLASS="sect2"
-><A
-NAME="fdi-example-camera"
->3.1.2. Example: Digital Still Camera</A
-></H3
-><PRE
-CLASS="programlisting"
->&#13;        &#60;?xml version="1.0" encoding="UTF-8"?&#62;
-
-&#60;!-- Example: This device information file matches a Sony digital still 
-              camera by matching on the USB vendor and product identifers.  --&#62;
-
-&#60;deviceinfo version="0.2"&#62;
-  &#60;device&#62;
-    &#60;match key="info.bus" string="usb"&#62;
-      &#60;match key="usb.vendor_id" int="0x054c"&#62;
-        &#60;match key="usb.product_id" int="0x0010"&#62;
-          &#60;merge key="info.category" type="string"&#62;camera&#60;/merge&#62;
-          &#60;merge key="info.capabilities" type="string"&#62;camera&#60;/merge&#62;
-          &#60;merge key="camera.access_method" type="string"&#62;storage&#60;/merge&#62;
-        &#60;/match&#62;
-      &#60;/match&#62;
-    &#60;/match&#62;
-  &#60;/device&#62;
-&#60;/deviceinfo&#62;
-      </PRE
-><P
->&#13;        The final set of properties look like this:
-      </P
-><P
->&#13;        <IMG
-SRC="hal-fdi-example1.png">
-      </P
-></DIV
-><DIV
-CLASS="sect2"
-><HR><H3
-CLASS="sect2"
-><A
-NAME="fdi-example-6in1"
->3.1.3. Example: Card Reader</A
-></H3
-><PRE
-CLASS="programlisting"
->&#13;        &#60;?xml version="1.0" encoding="UTF-8"?&#62;
-
-&#60;!-- Example: This device information file matches a memory card reader with 
-              multiple storage ports that can be active at the same time. --&#62;
-
-&#60;deviceinfo version="0.2"&#62;
-  &#60;device&#62;
-    &#60;match key="storage.bus" string="usb"&#62;
-      &#60;match key="@storage.physical_device:usb.vendor_id" int="0x0424"&#62;
-        &#60;match key="@storage.physical_device:usb.product_id" int="0x20fc"&#62;
-          &#60;match key="storage.lun" int="0"&#62;
-            &#60;merge key="storage.drive_type" type="string"&#62;compact_flash&#60;/merge&#62;
-	  &#60;/match&#62;
-          &#60;match key="storage.lun" int="1"&#62;
-            &#60;merge key="storage.drive_type" type="string"&#62;memory_stick&#60;/merge&#62;
-	  &#60;/match&#62;
-          &#60;match key="storage.lun" int="2"&#62;
-            &#60;merge key="storage.drive_type" type="string"&#62;smart_media&#60;/merge&#62;
-	  &#60;/match&#62;
-          &#60;match key="storage.lun" int="3"&#62;
-            &#60;merge key="storage.drive_type" type="string"&#62;sd_mmc&#60;/merge&#62;
-	  &#60;/match&#62;
-        &#60;/match&#62;
-      &#60;/match&#62;
-    &#60;/match&#62;
-  &#60;/device&#62;
-&#60;/deviceinfo&#62;
-      </PRE
-><P
->&#13;        As described in the documentation for the
-        <TT
-CLASS="literal"
->storage.physical_device</TT
-> property in
-        <A
-HREF="#device-properties-storage"
->Section 2.3.4</A
-> this device information
+  Facts about devicesExample: MP3 player
+        
+      
+        The final set of properties look like this:
+      
+        
+      Example: Digital Still Camera
+        
+      
+        The final set of properties look like this:
+      
+        
+      Example: Card Reader
+        
+      
+        As described in the documentation for the
+        storage.originating_device property in
+         this device information
         file export information about each storage port through the
-        property <TT
-CLASS="literal"
->storage.drive_type</TT
->. Thus, one
-        of the four <TT
-CLASS="literal"
->storage</TT
-> devices has the
+        property storage.drive_type. Thus, one
+        of the four storage devices has the
         following properties that are merged from the device object
         that the device information file targets:
-      </P
-><P
->&#13;        <IMG
-SRC="hal-fdi-example3.png">
-      </P
-></DIV
-></DIV
-><DIV
-CLASS="sect1"
-><HR><H2
-CLASS="sect1"
-><A
-NAME="fdi-policy"
->3.2. Policy settings for devices</A
-></H2
-><P
->&#13;      Policy settings specifies system specific settings that a
+      
+        
+      Policy settings for devices
+      Policy settings specifies system specific settings that a
       system administrator associates with a device instance. In the
       context of hal, this can be expressed in terms of device
       properties merged on the device object in question. Default
       policy can also be merged on the root computer device object.
-    </P
-><DIV
-CLASS="sect2"
-><HR><H3
-CLASS="sect2"
-><A
-NAME="fdi-example-mountsetting"
->3.2.1. Storage Devices</A
-></H3
-><P
->&#13;        Policy for storage devices is expressed in the
-        <TT
-CLASS="literal"
->storage.policy.default</TT
->,
-        <TT
-CLASS="literal"
->storage.policy</TT
-> and
-        <TT
-CLASS="literal"
->volume.policy</TT
-> namespaces, see
-        <A
-HREF="#properties-policy"
->Section 2.4</A
->
+    Storage Devices
+        Policy for storage devices is expressed in the
+        storage.policy.default,
+        storage.policy and
+        volume.policy namespaces, see
+        
          for details.
-      </P
-><PRE
-CLASS="programlisting"
->&#13;        &#60;?xml version="1.0" encoding="UTF-8"?&#62;
-
-&#60;deviceinfo version="0.2"&#62;
-
-  &#60;!-- Example: Match volumes from an external USB harddisk enclosure by 
-                matching on vendor and model. Use mount points 
-
-  		    my_usbdisk_part_&#60;partition-number&#62;
-
-		NB: some drives (ieee1394 based IIRC) even export the
-		property storage.serial, the unique serial number of the
-		disk which is a better match --&#62;
-  &#60;device&#62;
-    &#60;match key="block.is_volume" bool="true"&#62;
-      &#60;match key="volume.fsusage" string="filesystem"&#62;
-	&#60;match key="@block.storage_device:storage.vendor" string="ST360021"&#62;
-	  &#60;match key="@block.storage_device:storage.model" string="A"&#62;
-	    &#60;merge key="volume.policy.desired_mount_point" type="string"&#62;my_usbdisk_partition_&#60;/merge&#62;
-	    &#60;append key="volume.policy.desired_mount_point" type="copy_property"&#62;volume.partition.number&#60;/append&#62;
-	  &#60;/match&#62;
-	&#60;/match&#62;
-      &#60;/match&#62;
-    &#60;/match&#62;
-  &#60;/device&#62;
-
-  &#60;!-- Example: Match a volume from an USB Storage Based mp3 player
-                by the file system UUID and assign a mount point.
-
-                NB: When reformatting the volume a new UUID will be
-                used and this rule will have to be altered --&#62;
-  &#60;device&#62;
-    &#60;match key="block.is_volume" bool="true"&#62;
-      &#60;match key="volume.fsusage" string="filesystem"&#62;
-	&#60;match key="volume.uuid" string="4150-3F34"&#62;
-	  &#60;merge key="volume.policy.desired_mount_point" type="string"&#62;my_mp3_player&#60;/merge&#62;
-	&#60;/match&#62;
-      &#60;/match&#62;
-    &#60;/match&#62;
-  &#60;/device&#62;
-
-&#60;/deviceinfo&#62;
-      </PRE
-></DIV
-></DIV
-></DIV
-><DIV
-CLASS="chapter"
-><HR><H1
-><A
-NAME="examples"
-></A
->Chapter 4. Examples and other stuff</H1
-><DIV
-CLASS="sect1"
-><H2
-CLASS="sect1"
-><A
-NAME="callouts"
->4.1. Callouts</A
-></H2
-><P
->&#13;      Callouts are programs invoked when the device object list is
+      
+        
+      Examples and other stuffCallouts
+      Callouts are programs invoked when the device object list is
       modified. As such, callouts can be used to maintain system-wide
       policy (that may be specific to the particular OS) such as
       changing permissions on device nodes, updating the systemwide
-      <TT
-CLASS="literal"
->/etc/fstab</TT
-> file or configuring the networking
+      /etc/fstab file or configuring the networking
       subsystem.
-    </P
-><P
->&#13;      There are three different classes of callouts. A callout
+    
+      There are three different classes of callouts. A callout
       involves sequentially invoking all executable programs in the
       string list in listed order.
-    </P
-><DIV
-CLASS="informaltable"
-><P
-></P
-><A
-NAME="AEN4297"
-></A
-><TABLE
-BORDER="1"
-CLASS="CALSTABLE"
-><COL><COL><THEAD
-><TR
-><TH
->Key (type)</TH
-><TH
->Values</TH
-><TH
->Mandatory</TH
-><TH
->Description</TH
-></TR
-></THEAD
-><TBODY
-><TR
-><TD
->&#13;              <TT
-CLASS="literal"
->info.callouts.add</TT
-> (string list)
-            </TD
-><TD
->&nbsp;</TD
-><TD
->No</TD
-><TD
->&#13;              A string list with all programmes/callouts which should be
-              executed (with <TT
-CLASS="literal"
->HALD_ACTION=add</TT
->) when the device
+    Key (type)ValuesMandatoryDescription
+              info.callouts.add (string list)
+            No
+              A string list with all programmes/callouts which should be
+              executed (with HALD_ACTION=add) when the device
               is added to the GDL (global device list) but just before it is
               announced through the D-BUS network API.
-            </TD
-></TR
-><TR
-><TD
->&#13;              <TT
-CLASS="literal"
->info.callouts.remove</TT
-> (string list)
-            </TD
-><TD
->&nbsp;</TD
-><TD
->No</TD
-><TD
->&#13;              A string list with all programmes/callouts which should be
-              executed (with <TT
-CLASS="literal"
->HALD_ACTION=remove</TT
->) when the
+            
+              info.callouts.remove (string list)
+            No
+              A string list with all programmes/callouts which should be
+              executed (with HALD_ACTION=remove) when the
               device is removed from the GDL (global device list). The device
               isn't removed before the last callout has finished.
-            </TD
-></TR
-><TR
-><TD
->&#13;              <TT
-CLASS="literal"
->info.callouts.preprobe</TT
-> (string list)
-            </TD
-><TD
->&nbsp;</TD
-><TD
->No</TD
-><TD
->&#13;              A string list with all programmes/callouts which should be
-              executed (with <TT
-CLASS="literal"
->HALD_ACTION=preprobe</TT
->) before
+            
+              info.callouts.preprobe (string list)
+            No
+              A string list with all programmes/callouts which should be
+              executed (with HALD_ACTION=preprobe) before
               the device is added to the GDL (global device list) and before
-              the callouts from <TT
-CLASS="literal"
->info.callouts.add</TT
-> are executed.
-            </TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-><P
->&#13;      All callouts execute in the same environment as which the HAL
+              the callouts from info.callouts.add are executed.
+            
+      All callouts execute in the same environment as which the HAL
       daemon was started. In addition, the UDI of the device object is
-      exported in the environment variable <TT
-CLASS="literal"
->UDI</TT
->. All
+      exported in the environment variable UDI. All
       properties of the device object are exported in the environment
-      prefixed with <TT
-CLASS="literal"
->HAL_</TT
->. If a device is added or
-      removed is exported in the environment variable <TT
-CLASS="literal"
->HALD_ACTION
-      </TT
->
-      ,if HAL is in shutdown mode the variable <TT
-CLASS="literal"
->&#13;        HALD_SHUTDOWN
-      </TT
->
+      prefixed with HAL_. If a device is added or
+      removed is exported in the environment variable HALD_ACTION
+      
+      ,if HAL is in shutdown mode the variable 
+        HALD_SHUTDOWN
+      
       is set to environment.
-    </P
-><P
->&#13;      The HAL daemon isn't suspended while callouts are executing. Thus,
+    
+      The HAL daemon isn't suspended while callouts are executing. Thus,
       callouts can communicate with the HAL daemon using the D-BUS network
       API. Hence, one application of callouts is to merge or modify
       properties on a device object.
-    </P
-></DIV
-><DIV
-CLASS="sect1"
-><HR><H2
-CLASS="sect1"
-><A
-NAME="dbus-api"
->4.2. D-BUS Network API</A
-></H2
-><P
->&#13;      The HAL daemon is a system-wide process that keeps track of a
+    D-BUS Network API
+      The HAL daemon is a system-wide process that keeps track of a
       number of device objects. It communicates with the operating
       system and intercepts hotplug events as devices are plugged in
       and removed.  The daemon is also responsible for providing
@@ -13197,49 +2780,34 @@ NAME="dbus-api"
       perform generic operations on them such as obtaining exclusive
       access.  Non-generic operations, such as obtaining pictures from
       a camera device, is outside the scope of the HAL daemon; see
-      <A
-HREF="#using-devices"
->Section 1.7</A
->
+      
        for more information.
-    </P
-><P
->&#13;      HAL has the concept of device stores. When a device is detected
+    
+      HAL has the concept of device stores. When a device is detected
       it is placed in the TDL (temporary device list) and then properties
       are merged from several sources including device information files
       and possibly callouts. Eventually, the device transitions to the
       GDL (global device list) and first then it becomes ''visible'' for
       desktop applications.
-    </P
-><DIV
-CLASS="sect2"
-><HR><H3
-CLASS="sect2"
-><A
-NAME="AEN4339"
->4.2.1. Interface org.freedesktop.Hal.Manager</A
-></H3
-><P
->&#13;        Using D-BUS terminology, the HAL daemon provides the D-BUS
-        service <TT
-CLASS="literal"
->org.freedesktop.Hal</TT
->. This service
+    
+      Using D-BUS terminology, the HAL daemon provides the D-BUS
+      service org.freedesktop.Hal. This service may
+      be used to communicate with the HAL daemon, to get or set device
+      properties and to perform some action on the devices. In the 
+      following sections, this D-BUS interface is expanded.
+    
+      A C API is provided by the libhal library.
+      This API hides most of the D-BUS complexity and presents the D-BUS 
+      interface as function call or callbacks.
+    Interface org.freedesktop.Hal.Manager
+        The org.freedesktop.Hal D-BUS service
         offers a D-BUS object at a well-known
-        location <TT
-CLASS="literal"
->/org/freedesktop/Hal/Manager</TT
->. This
+        location /org/freedesktop/Hal/Manager. This
         object offers a D-BUS
-        interface, <TT
-CLASS="literal"
->org.freedesktop.Hal.Manager</TT
->, for
+        interface, org.freedesktop.Hal.Manager, for
         querying device objects with the following methods:
-      </P
-><PRE
-CLASS="programlisting"
->&#13;# Return a list of all devices in the GDL
+      
+# Return a list of all devices in the GDL
 #
 # @return                       List of UDI's
 #
@@ -13264,22 +2832,13 @@ array{string} FindDeviceStringMatch(stri
 # @return                       Array of UDI's, may be empty
 #
 array{string} FindDeviceByCapability(string capability)
-      </PRE
-><P
->&#13;        This object also emits the following signals on the
-        <TT
-CLASS="literal"
->/org/freedesktop/Hal/Manager</TT
-> object on the
-        <TT
-CLASS="literal"
->org.freedesktop.Hal.Manager</TT
-> interface that
+      
+        This object also emits the following signals on the
+        /org/freedesktop/Hal/Manager object on the
+        org.freedesktop.Hal.Manager interface that
         applications can subscribe to using D-BUS:
-      </P
-><PRE
-CLASS="programlisting"
->&#13;# Notification that a new device have been added to the GDL
+      
+# Notification that a new device have been added to the GDL
 #
 # @param  udi                   Unique Device Id
 #
@@ -13296,59 +2855,14 @@ void DeviceRemoved(string udi)
 # @param  udi                   Unique Device Id
 #
 void NewCapability(string udi, string capability)
-      </PRE
-><DIV
-CLASS="sect3"
-><HR><H4
-CLASS="sect3"
-><A
-NAME="AEN4350"
->4.2.1.1. Example</A
-></H4
-><P
->&#13;          The following brief Python program demonstrates some of the API
-        </P
-><PRE
-CLASS="programlisting"
->&#13;          #!/usr/bin/python
- 
-import gtk
-import dbus
-import dbus.glib
-
-def device_added(udi):
-    print 'Device %s was added'%udi
-
-def device_removed(udi):
-    print 'Device %s was removed'%udi
-
- 
-bus = dbus.Bus (dbus.Bus.TYPE_SYSTEM)
-hal_manager = bus.get_object ('org.freedesktop.Hal',
-                              '/org/freedesktop/Hal/Manager')
-
-devices = hal_manager.GetAllDevices ()
-for d in devices:
-    print 'Found device %s'%d
-
-bus.add_signal_receiver (device_added,
-			 'DeviceAdded',
-			 'org.freedesktop.Hal.Manager',
-			 'org.freedesktop.Hal',
-			 '/org/freedesktop/Hal/Manager')
-bus.add_signal_receiver (device_removed,
-			 'DeviceRemoved',
-			 'org.freedesktop.Hal.Manager',
-			 'org.freedesktop.Hal',
-			 '/org/freedesktop/Hal/Manager')
-gtk.main()
-        </PRE
-><P
->&#13;          which gives the following output
-        </P
-><PRE
-CLASS="programlisting"
->&#13;Found device /org/freedesktop/Hal/devices/block_TORiSAN DVD-ROM DRD-U624-00000000000000000001-disc
+      Example
+          The following brief Python program demonstrates some of the API
+        
+          
+        
+          which gives the following output
+        
+Found device /org/freedesktop/Hal/devices/block_TORiSAN DVD-ROM DRD-U624-00000000000000000001-disc
 Found device /org/freedesktop/Hal/devices/block_TORiSAN DVD-ROM DRD-U624-00000000000000000001
 Found device /org/freedesktop/Hal/devices/block_37332a77-105e-4e76-8e99-27d3746e0531
 Found device /org/freedesktop/Hal/devices/block_3_2
@@ -13381,38 +2895,18 @@ Device /org/freedesktop/Hal/devices/usbi
 (remove USB mouse)
 Device /org/freedesktop/Hal/devices/usb_46d_c001_410_-1_noserial was removed
 Device /org/freedesktop/Hal/devices/usbif_usb_46d_c001_410_-1_noserial_0 was removed
-        </PRE
-><P
->&#13;        </P
-></DIV
-></DIV
-><DIV
-CLASS="sect2"
-><HR><H3
-CLASS="sect2"
-><A
-NAME="AEN4358"
->4.2.2. Interface org.freedesktop.Hal.Device</A
-></H3
-><P
->&#13;        Applications use
-        the <TT
-CLASS="literal"
->org.freedesktop.Hal.Manager</TT
-> interface to
+        
+        Interface org.freedesktop.Hal.Device
+        Applications use
+        the org.freedesktop.Hal.Manager interface to
         locate the device objects they are interested in. When a device
         object (which is really a D-BUS object, note that the UDI is the
         objects object_path) is obtained, the HAL daemon provides the
-        <TT
-CLASS="literal"
->org.freedesktop.Hal.Device</TT
-> interface on the
+        org.freedesktop.Hal.Device interface on the
         object denoted by the UDI. This interface has the following
         methods
-      </P
-><PRE
-CLASS="programlisting"
->&#13;# Set property
+      
+# Set property
 #
 # @param  key                   Property to set
 # @param  value                 Value to set
@@ -13490,15 +2984,12 @@ void Lock(string reason)
 #                               org.freedesktop.Hal.PermissionDenied
 #
 void Unlock()
-      </PRE
-><P
->&#13;        The device objects also emits the following signals on the
+      
+        The device objects also emits the following signals on the
         org.freedesktop.Hal interface that applications can subscribe to
         using D-BUS
-      </P
-><PRE
-CLASS="programlisting"
->&#13;# Notification that property have been modified
+      
+# Notification that property have been modified
 #
 # @param  key                   Property
 # @param  added                 True iff the property have been added
@@ -13513,27 +3004,14 @@ void PropertyModified(string key, bool a
 # @param  condition             Name of condition
 # @param  ...                   Dependent on the condition name
 void Condition(string condition, ...)
-      </PRE
-><P
->&#13;        Note that D-BUS supports that applications can opt to receive
+      
+        Note that D-BUS supports that applications can opt to receive
         signals for only a subset of the devices available.
-      </P
-></DIV
-><DIV
-CLASS="sect2"
-><HR><H3
-CLASS="sect2"
-><A
-NAME="AEN4367"
->4.2.3. Interface org.freedesktop.Hal.Device.Volume</A
-></H3
-><P
->&#13;        The org.freedesktop.Hal.Device.Volume interface is used on objects
+      Interface org.freedesktop.Hal.Device.Volume
+        The org.freedesktop.Hal.Device.Volume interface is used on objects
         with the "volume" capability. This interface has the following methods.
-      </P
-><PRE
-CLASS="programlisting"
->&#13;# Mount volume
+      
+# Mount volume
 #
 # @param  mountpoint            Desired mount point. If NULL, will be generated based on label.
 # @param  fstype                Filesystem type
@@ -13568,23 +3046,11 @@ void Unmount(array{string} options)
 #                               org.freedesktop.Hal.Device.Volume.PermissionDeniedByPolicy
 #
 void Eject(array{string} options)
-      </PRE
-></DIV
-><DIV
-CLASS="sect2"
-><HR><H3
-CLASS="sect2"
-><A
-NAME="AEN4371"
->4.2.4. Interface org.freedesktop.Hal.Device.Storage</A
-></H3
-><P
->&#13;        The org.freedesktop.Hal.Device.Storage interface is used on objects
+      Interface org.freedesktop.Hal.Device.Storage
+        The org.freedesktop.Hal.Device.Storage interface is used on objects
         with the "storage" capability. This interface has the following methods.
-      </P
-><PRE
-CLASS="programlisting"
->&#13;# Eject media
+      
+# Eject media
 #
 # @param  ejectoptions          Eject options
 # @raises                       org.freedesktop.Hal.Device.Storage.NoSuchDevice
@@ -13602,133 +3068,40 @@ void Eject(array{string} options)
 #                               org.freedesktop.Hal.Device.Storage.PermissionDeniedByPolicy
 #
 void CloseTray(array{string} options)
-      </PRE
-></DIV
-></DIV
-><DIV
-CLASS="sect1"
-><HR><H2
-CLASS="sect1"
-><A
-NAME="enforcing-policy"
->4.3. Enforcing Policy</A
-></H2
-><P
->&#13;      Notwithstanding the fact that HAL avoids to enforce any policy,
+      Enforcing Policy
+      Notwithstanding the fact that HAL avoids to enforce any policy,
       it is useful to have a minimal set of guidelines such that
       applications using HAL written for one operating system can
       easily run on another. This section contains recommendations
       about how to enforce policy to achieve that goal.
-    </P
-><DIV
-CLASS="sect2"
-><HR><H3
-CLASS="sect2"
-><A
-NAME="enforcing-stor-vol"
->4.3.1. Storage Devices</A
-></H3
-><DIV
-CLASS="sect3"
-><H4
-CLASS="sect3"
-><A
-NAME="stor-vol-policy"
->4.3.1.1. Policy for Volumes and Storage devices</A
-></H4
-><P
->&#13;          The properties in the <TT
-CLASS="literal"
->storage.policy</TT
->,
-          <TT
-CLASS="literal"
->volume.policy</TT
-> and
-          <TT
-CLASS="literal"
->storage.policy.default</TT
-> namespaces should
+    Storage DevicesPolicy for Volumes and Storage devices
+          The properties in the storage.policy,
+          volume.policy and
+          storage.policy.default namespaces should
           be the preferred way to determine how and if a filesystem
-          can be mounted. See <A
-HREF="#properties-policy"
->Section 2.4</A
->
+          can be mounted. See 
           for details.
-        </P
-></DIV
-><DIV
-CLASS="sect3"
-><HR><H4
-CLASS="sect3"
-><A
-NAME="enforcing-storage-fstab"
->4.3.1.2. File systems file</A
-></H4
-><P
->&#13;          An operating system vendor should maintain the
-          <TT
-CLASS="literal"
->/etc/fstab</TT
-> file through the HAL callout
+        File systems file
+          An operating system vendor should maintain the
+          /etc/fstab file through the HAL callout
           mechanism such that device objects of capability
-          <TT
-CLASS="literal"
->volume</TT
-> and <TT
-CLASS="literal"
->storage</TT
-> has
+          volume and storage has
           a corresponding entry if applicable cf.
-          <A
-HREF="#stor-vol-policy"
->Section 4.3.1.1</A
->
+          
           .
-        </P
-><P
->&#13;          The reasoning behind this is, among other things, to
-          maintain the invariant that <TT
-CLASS="literal"
->/etc/fstab</TT
->
+        
+          The reasoning behind this is, among other things, to
+          maintain the invariant that /etc/fstab
           list all available filesystems. In addition
-          the <TT
-CLASS="literal"
->mount(1)</TT
-> program should enable users
+          the mount(1) program should enable users
           without superuser privileges to mount filesystems mentioned
-          in the <TT
-CLASS="literal"
->/etc/fstab</TT
-> file as long as they
-          have the <TT
-CLASS="literal"
->user</TT
-> option set.
-        </P
-></DIV
-><DIV
-CLASS="sect3"
-><HR><H4
-CLASS="sect3"
-><A
-NAME="enforcing-storage-locking"
->4.3.1.3. Disabling policy agents</A
-></H4
-><P
->&#13;          Policy agents like volume mounters should ignore when media
+          in the /etc/fstab file as long as they
+          have the user option set.
+        Disabling policy agents
+          Policy agents like volume mounters should ignore when media
           is inserted into a drive that is locked by another
           application. Thus, CD burning applications should lock the
           device to disable auto mounting or automatic start of the
           users preferred CD burning application when respectively
           non-blank rewritable or blank media is inserted.
-        </P
-></DIV
-></DIV
-></DIV
-></DIV
-></DIV
-></BODY
-></HTML
->
\ No newline at end of file
+        
\ No newline at end of file
diff --git a/fdi/policy/10osvendor/20-acl-management.fdi b/fdi/policy/10osvendor/20-acl-management.fdi
index 23fbe08..ca1f21a 100644
--- a/fdi/policy/10osvendor/20-acl-management.fdi
+++ b/fdi/policy/10osvendor/20-acl-management.fdi
@@ -19,15 +19,19 @@
 
     <!-- TODO: add more rules for adding/removing ACL's (e.g. webcam, cd drive etc.) -->
 
-    <!-- remove all previously added ACL's on start-up -->
+    <!-- add and remove ACL's when devices are added and removed -->
+    <match key="acl.is_managed" bool="true">
+      <append key="info.callouts.add" type="strlist">hal-acl-add --device</append>
+      <append key="info.callouts.remove" type="strlist">hal-acl-remove --device</append>
+    </match>
+
     <match key="info.udi" string="/org/freedesktop/Hal/devices/computer">
+      <!-- remove all previously added ACL's on start-up -->
       <append key="info.callouts.add" type="strlist">hal-acl-remove --remove-all</append>
-    </match>
 
-    <!-- add and remove ACL's when devices are added and removed -->
-    <match key="acl.is_managed" bool="true">
-      <append key="info.callouts.add" type="strlist">hal-acl-add</append>
-      <append key="info.callouts.remove" type="strlist">hal-acl-remove</append>
+      <!-- add and remove ACL's when sessions are added and removed -->
+      <append key="info.callouts.session_add" type="strlist">hal-acl-add --session</append>
+      <append key="info.callouts.session_remove" type="strlist">hal-acl-remove --session</append>
     </match>
 
   </device>
diff --git a/hald/ck-tracker.c b/hald/ck-tracker.c
index fb8417f..b943729 100644
--- a/hald/ck-tracker.c
+++ b/hald/ck-tracker.c
@@ -434,10 +434,10 @@ ck_tracker_process_system_bus_message (C
 	CKSeat *seat;
 	CKSession *session;
 
-	HAL_INFO (("In ck_tracker_process_system_bus_message objpath=%s interface=%s method=%s", 
+	/*HAL_INFO (("In ck_tracker_process_system_bus_message objpath=%s interface=%s method=%s", 
 		   dbus_message_get_path (message), 
 		   dbus_message_get_interface (message),
-		   dbus_message_get_member (message)));
+		   dbus_message_get_member (message)));*/
 
 	/* TODO: also handle SeatRemoved and SeatAdded */
 
@@ -579,7 +579,7 @@ ck_seat_get_sessions (CKSeat *seat)
 const char *
 ck_seat_get_id (CKSeat *seat)
 {
-	return seat->seat_objpath;
+	return g_basename (seat->seat_objpath);
 }
 
 gboolean
@@ -597,7 +597,7 @@ ck_session_get_seat (CKSession *session)
 const char *
 ck_session_get_id (CKSession *session)
 {
-	return session->session_objpath;
+	return g_basename (session->session_objpath);
 }
 
 uid_t
diff --git a/hald/hald_dbus.c b/hald/hald_dbus.c
index 08c5367..51089a5 100644
--- a/hald/hald_dbus.c
+++ b/hald/hald_dbus.c
@@ -48,12 +48,16 @@
 #include "util.h"
 #include "hald_runner.h"
 
+#ifdef HAVE_CONKIT
 #include "ck-tracker.h"
+#endif
 
 #define HALD_DBUS_ADDRESS "unix:tmpdir=" HALD_SOCKET_DIR
 
 static DBusConnection *dbus_connection = NULL;
+#ifdef HAVE_CONKIT
 static CKTracker *ck_tracker = NULL;
+#endif
 
 static void
 raise_error (DBusConnection *connection,
@@ -4403,17 +4407,91 @@ hald_dbus_local_server_shutdown (void)
 static void 
 hald_dbus_session_added (CKTracker *tracker, CKSession *session, void *user_data)
 {
+	HalDevice *d;
+	char **programs;
+	char *extra_env[5] = {"HALD_ACTION=session_add", 
+			      NULL /* "HALD_SESSION_ADD_SESSION_ID=" */,
+			      NULL /* "HALD_SESSION_ADD_SESSION_UID=" */,
+			      NULL /* "HALD_SESSION_ADD_SESSION_IS_ACTIVE=" */,
+			      NULL};
+
 	HAL_INFO (("In hald_dbus_session_added for session '%s' on seat '%s'", 
 		   ck_session_get_id (session),
 		   ck_session_get_seat (session) != NULL ? ck_seat_get_id (ck_session_get_seat (session)) : "(NONE)"));
+
+	d = hal_device_store_find (hald_get_gdl (), "/org/freedesktop/Hal/devices/computer");
+	if (d == NULL) {
+		d = hal_device_store_find (hald_get_tdl (), "/org/freedesktop/Hal/devices/computer");
+	}
+	if (d == NULL) {
+		goto out;
+	}
+
+	programs = hal_device_property_dup_strlist_as_strv (d, "info.callouts.session_add");
+	if (programs == NULL) {
+		goto out;
+	}
+
+	extra_env[1] = g_strdup_printf ("HALD_SESSION_ADD_SESSION_ID=%s", ck_session_get_id (session));
+	extra_env[2] = g_strdup_printf ("HALD_SESSION_ADD_SESSION_UID=%d", ck_session_get_user (session));
+	extra_env[3] = g_strdup_printf ("HALD_SESSION_ADD_SESSION_IS_ACTIVE=%s", 
+					ck_session_is_active (session) ? "true" : "false");
+	hal_callout_device (d, 
+			    NULL /* callback */,
+			    NULL /* userdata1 */,
+			    NULL /* userdata2 */, 
+			    programs, 
+			    extra_env);
+	g_free (extra_env[1]);
+	g_free (extra_env[2]);
+	g_free (extra_env[3]);
+out:
+	;
 }
 
 static void 
 hald_dbus_session_removed (CKTracker *tracker, CKSession *session, void *user_data)
 {
+	HalDevice *d;
+	char **programs;
+	char *extra_env[5] = {"HALD_ACTION=session_remove", 
+			      NULL /* "HALD_SESSION_REMOVE_SESSION_ID=" */,
+			      NULL /* "HALD_SESSION_REMOVE_SESSION_UID=" */,
+			      NULL /* "HALD_SESSION_REMOVE_SESSION_IS_ACTIVE=" */,
+			      NULL};
+
 	HAL_INFO (("In hald_dbus_session_removed for session '%s' on seat '%s'", 
 		   ck_session_get_id (session),
 		   ck_session_get_seat (session) != NULL ? ck_seat_get_id (ck_session_get_seat (session)) : "(NONE)"));
+
+	d = hal_device_store_find (hald_get_gdl (), "/org/freedesktop/Hal/devices/computer");
+	if (d == NULL) {
+		d = hal_device_store_find (hald_get_tdl (), "/org/freedesktop/Hal/devices/computer");
+	}
+	if (d == NULL) {
+		goto out;
+	}
+
+	programs = hal_device_property_dup_strlist_as_strv (d, "info.callouts.session_remove");
+	if (programs == NULL) {
+		goto out;
+	}
+
+	extra_env[1] = g_strdup_printf ("HALD_SESSION_REMOVE_SESSION_ID=%s", ck_session_get_id (session));
+	extra_env[2] = g_strdup_printf ("HALD_SESSION_REMOVE_SESSION_UID=%d", ck_session_get_user (session));
+	extra_env[3] = g_strdup_printf ("HALD_SESSION_REMOVE_SESSION_IS_ACTIVE=%s", 
+					ck_session_is_active (session) ? "true" : "false");
+	hal_callout_device (d, 
+			    NULL /* callback */,
+			    NULL /* userdata1 */,
+			    NULL /* userdata2 */, 
+			    programs, 
+			    extra_env);
+	g_free (extra_env[1]);
+	g_free (extra_env[2]);
+	g_free (extra_env[3]);
+out:
+	;
 }
 
 static void 
@@ -4494,6 +4572,14 @@ out:
 	return ret;
 }
 
+#ifdef HAVE_CONKIT
+CKTracker *
+hald_dbus_get_ck_tracker (void)
+{
+	return ck_tracker;
+}
+#endif
+
 gboolean
 hald_dbus_init (void)
 {
diff --git a/hald/hald_dbus.h b/hald/hald_dbus.h
index 79442be..4efc3ff 100644
--- a/hald/hald_dbus.h
+++ b/hald/hald_dbus.h
@@ -100,4 +100,10 @@ char *hald_dbus_local_server_addr (void)
 
 gboolean device_is_executing_method (HalDevice *d, const char *interface_name, const char *method_name);
 
+#ifdef HAVE_CONKIT
+#include "ck-tracker.h"
+
+CKTracker *hald_dbus_get_ck_tracker (void);
+#endif
+
 #endif /* HAL_DBUS_H */
diff --git a/hald/hald_runner.c b/hald/hald_runner.c
index 792c9c4..7eb7b14 100644
--- a/hald/hald_runner.c
+++ b/hald/hald_runner.c
@@ -44,6 +44,10 @@
 #include "hald_dbus.h"
 #include "hald_runner.h"
 
+#ifdef HAVE_CONKIT
+#include "ck-tracker.h"
+#endif
+
 typedef struct {
 	HalDevice *d;
 	HalRunTerminatedCB cb;
@@ -347,6 +351,9 @@ static void
 add_basic_env (DBusMessageIter * iter, const gchar * udi)
 {
 	struct utsname un;
+#ifdef HAVE_CONKIT
+	CKTracker *ck_tracker;
+#endif
 
 	if (hald_is_verbose) {
 		add_env (iter, "HALD_VERBOSE", "1");
@@ -363,6 +370,97 @@ add_basic_env (DBusMessageIter * iter, c
 	add_env (iter, "HAVE_POLKIT", "1");
 #endif
 
+
+#ifdef HAVE_CONKIT
+	ck_tracker = hald_dbus_get_ck_tracker ();
+	if (ck_tracker != NULL) {
+		GSList *i;
+		GSList *seats;
+		GString *seats_string;
+		char *s;
+		char *p;
+
+		seats_string = g_string_new ("");
+
+		seats = ck_tracker_get_seats (ck_tracker);
+		for (i = seats; i != NULL; i = g_slist_next (i)) {
+			GSList *j;
+			CKSeat *seat;
+			GSList *sessions;
+			const char *seat_id;
+			GString *sessions_string;
+
+			sessions_string = g_string_new ("");
+
+			seat = i->data;
+
+			/* use the basename as Id, e.g. Seat1 rather than /org/freedesktop/ConsoleKit/Seat1 */
+			seat_id = ck_seat_get_id (seat);
+
+			/* append to CK_SEATS */
+			if (seats_string->len > 0) {
+				g_string_append_c (seats_string, '\t');
+			}
+			g_string_append (seats_string, seat_id);
+
+			/* for each Seat, export IS_LOCAL 
+			 *
+			 * CK_SEAT_IS_LOCAL_SEAT1=true|false
+			 */
+			s = g_strdup_printf ("CK_SEAT_IS_LOCAL_%s", seat_id);
+			add_env (iter, s, ck_seat_is_local (seat) ? "true" : "false");
+			g_free (s);
+			
+			sessions = ck_seat_get_sessions (seat);
+			for (j = sessions; j != NULL; j = g_slist_next (j)) {
+				CKSession *session;
+				char *session_id;
+
+				session = j->data;
+				/* basename again; e.g. Session1 rather than /org/freedesktop/ConsoleKit/Session1 */
+				session_id = ck_session_get_id (session);
+
+				if (sessions_string->len > 0) {
+					g_string_append_c (sessions_string, '\t');
+				}
+				g_string_append (sessions_string, session_id);
+
+				/* for each Session, export IS_ACTIVE and UID 
+				 *
+				 * CK_SESSION_IS_ACTIVE_Session2=true|false
+				 * CK_SESSION_UID_Session2=501
+				 */
+				s = g_strdup_printf ("CK_SESSION_IS_ACTIVE_%s", session_id);
+				add_env (iter, s, ck_session_is_active (session) ? "true" : "false");
+				g_free (s);
+				s = g_strdup_printf ("CK_SESSION_UID_%s", session_id);
+				p = g_strdup_printf ("%d", ck_session_get_user (session));
+				add_env (iter, s, p);
+				g_free (s);
+				g_free (p);
+
+			}
+
+			/* for each Seat, export sessions on each seat 
+			 *
+			 * CK_SEAT_Seat1=Session1 Session3 Session7
+			 */
+			s = g_strdup_printf ("CK_SEAT_%s", seat_id);
+			add_env (iter, s, sessions_string->str);
+			g_string_free (sessions_string, TRUE);
+			g_free (s);
+
+		}
+
+		/* Export all detected seats 
+		 *
+		 * CK_SEATS=Seat1 Seat3 Seat4
+		 */
+		add_env (iter, "CK_SEATS", seats_string->str);
+		g_string_free (seats_string, TRUE);
+	}
+#endif /* HAVE_CONKIT */
+
 	if (uname (&un) == 0) {
 		char *sysname;
 
diff --git a/hald/util.c b/hald/util.c
index eaf3b09..ecff7dc 100644
--- a/hald/util.c
+++ b/hald/util.c
@@ -939,7 +939,9 @@ callout_do_next (Callout *c)
 		g_strfreev (c->extra_env);
 		g_free (c);
 
-		callback (d, userdata1, userdata2);
+		if (callback != NULL) {
+			callback (d, userdata1, userdata2);
+		}
 
 	} else {
 		hald_runner_run(c->d, c->programs[c->next_program], c->extra_env,
@@ -949,7 +951,7 @@ callout_do_next (Callout *c)
 	}
 }
 
-static void
+void
 hal_callout_device (HalDevice *d, HalCalloutsDone callback, gpointer userdata1, gpointer userdata2, 
 		    char **programs, gchar **extra_env)
 {
diff --git a/hald/util.h b/hald/util.h
index caf19e9..93f05c8 100644
--- a/hald/util.h
+++ b/hald/util.h
@@ -97,6 +97,9 @@ gchar **hal_util_dup_strv_from_g_slist (
 
 typedef void (*HalCalloutsDone) (HalDevice *d, gpointer userdata1, gpointer userdata2);
 
+void hal_callout_device (HalDevice *d, HalCalloutsDone callback, gpointer userdata1, gpointer userdata2, 
+			 char **programs, gchar **extra_env);
+
 void hal_util_callout_device_add (HalDevice *d, HalCalloutsDone callback, gpointer userdata1, gpointer userdata2);
 void hal_util_callout_device_remove (HalDevice *d, HalCalloutsDone callback, gpointer userdata1, gpointer userdata2);
 void hal_util_callout_device_preprobe (HalDevice *d, HalCalloutsDone callback, gpointer userdata1, gpointer userdata2);
diff --git a/tools/hal-acl-add.c b/tools/hal-acl-add.c
index 2767773..4d358d5 100644
--- a/tools/hal-acl-add.c
+++ b/tools/hal-acl-add.c
@@ -86,6 +86,12 @@ typedef struct HalACL_s {
 int 
 main (int argc, char *argv[])
 {
-	fprintf (stderr, "hal-acl-add\n");
+	int i;
+
+	fprintf (stderr, "hal-acl-add %d\n", argc);
+	for (i = 0; i < argc; i++) {
+		fprintf (stderr, " arg %2d: %s\n", i, argv[i]);		
+	}
+	system ("env |sort");
 	return 0;
 }
diff --git a/tools/hal-acl-remove.c b/tools/hal-acl-remove.c
index 3f9278b..83f1c7c 100644
--- a/tools/hal-acl-remove.c
+++ b/tools/hal-acl-remove.c
@@ -11,5 +11,6 @@ main (int argc, char *argv[])
 	for (i = 0; i < argc; i++) {
 		fprintf (stderr, " arg %2d: %s\n", i, argv[i]);		
 	}
+	system ("env |sort");
 	return 0;
 }


More information about the hal-commit mailing list