diff -Nur hal-0.5.9.1/doc/spec/hal-spec-properties.xml hal-0.5.9.1.new/doc/spec/hal-spec-properties.xml
--- hal-0.5.9.1/doc/spec/hal-spec-properties.xml	2007-06-18 18:48:35.000000000 +0100
+++ hal-0.5.9.1.new/doc/spec/hal-spec-properties.xml	2007-11-14 10:26:00.000000000 +0000
@@ -2517,6 +2517,39 @@
         </tgroup>
       </informaltable>
     </sect2>
+    <sect2 id="device-properties-ps3_system_bus">
+      <title>
+        ps3_system_bus namespace
+      </title>
+      <para>
+        Devices on the PlayStation 3 system bus are represented by device
+        objects where <literal>info.subsystem</literal> equals
+        <literal>ps3_system_bus</literal>. The following properties are
+        available for such device objects.
+      </para>
+      <informaltable>
+        <tgroup cols="2">
+          <thead>
+            <row>
+              <entry>Key (type)</entry>
+              <entry>Values</entry>
+              <entry>Mandatory</entry>
+              <entry>Description</entry>
+            </row>
+          </thead>
+          <tbody>
+            <row>
+              <entry>
+                <literal>ps3_system_bus.id</literal> (string)
+              </entry>
+              <entry>example: serial</entry>
+              <entry>Yes</entry>
+              <entry>Device identification</entry>
+            </row>
+          </tbody>
+        </tgroup>
+      </informaltable>
+    </sect2>
   </sect1>
 
   <sect1 id="properties-functional">
diff -Nur hal-0.5.9.1/hald/linux/device.c hal-0.5.9.1.new/hald/linux/device.c
--- hal-0.5.9.1/hald/linux/device.c	2007-11-14 10:25:59.000000000 +0000
+++ hal-0.5.9.1.new/hald/linux/device.c	2007-11-14 10:26:35.000000000 +0000
@@ -2929,6 +2929,52 @@
 /*--------------------------------------------------------------------------------------------------------------*/
 
 static HalDevice *
+ps3_system_bus_add (const gchar *sysfs_path, const gchar *device_file, HalDevice *parent_dev,
+		    const gchar *sysfs_path_in_devices)
+{
+	HalDevice *d;
+	const gchar *dev_id;
+	gchar buf[64];
+
+	d = hal_device_new ();
+	hal_device_property_set_string (d, "linux.sysfs_path", sysfs_path);
+	hal_device_property_set_string (d, "info.subsystem", "ps3_system_bus");
+	hal_device_property_set_string (d, "info.bus", "ps3_system_bus");
+	if (parent_dev != NULL) {
+		hal_device_property_set_string (d, "info.parent", hal_device_get_udi (parent_dev));
+	} else {
+		hal_device_property_set_string (d, "info.parent", "/org/freedesktop/Hal/devices/computer");
+	}
+
+	hal_util_set_driver (d, "info.linux.driver", sysfs_path);
+
+	dev_id = hal_util_get_last_element (sysfs_path);
+
+	hal_device_property_set_string (d, "ps3_system_bus.id", dev_id);
+
+	g_snprintf (buf, sizeof (buf), "PS3 Device (%s)", hal_device_property_get_string (d, "ps3_system_bus.id"));
+	hal_device_property_set_string (d, "info.product", buf);
+
+	return d;
+}
+
+static gboolean
+ps3_system_bus_compute_udi (HalDevice *d)
+{
+	gchar udi[256];
+
+	hal_util_compute_udi (hald_get_gdl (), udi, sizeof (udi),
+			      "/org/freedesktop/Hal/devices/ps3_system_bus_%s",
+			      hal_device_property_get_string (d, "ps3_system_bus.id"));
+	hal_device_set_udi (d, udi);
+	hal_device_property_set_string (d, "info.udi", udi);
+
+	return TRUE;
+}
+
+/*--------------------------------------------------------------------------------------------------------------*/
+
+static HalDevice *
 pseudo_add (const gchar *sysfs_path, const gchar *device_file, HalDevice *parent_dev, const gchar *parent_path)
 {
 	HalDevice *d;
@@ -3278,6 +3324,14 @@
        .remove       = dev_remove
 };
 
+static DevHandler dev_handler_ps3_system_bus =
+{
+	.subsystem   = "ps3_system_bus",
+	.add         = ps3_system_bus_add,
+	.compute_udi = ps3_system_bus_compute_udi,
+	.remove      = dev_remove
+};
+
 /* SCSI debug, to test thousends of fake devices */
 static DevHandler dev_handler_pseudo = {
 	.subsystem   = "pseudo",
@@ -3323,6 +3377,7 @@
 	&dev_handler_memstick_host,
 	&dev_handler_backlight,
 	&dev_handler_firewire,
+	&dev_handler_ps3_system_bus,
 	NULL
 };
 
