[6/13] Add support for the S/390 ccwgroup bus.
Cornelia Huck
cohuck at de.ibm.com
Mon Jun 27 01:51:36 PDT 2005
[6/13] Add support for the S/390 ccwgroup bus.
The ccwgroup on S/390 contains devices consisting of grouped ccw
devices - usually networking devices. As with the ccw bus, there are
some common properties and lots of device specific ones.
physdev.c | 152 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 152 insertions(+)
Index: hald/linux2/physdev.c
===================================================================
RCS file: /cvs/hal/hal/hald/linux2/physdev.c,v
retrieving revision 1.16
diff -u -r1.16 physdev.c
--- hald/linux2/physdev.c 25 Mar 2005 03:24:51 -0000 1.16
+++ hald/linux2/physdev.c 23 Jun 2005 13:59:57 -0000
@@ -998,6 +998,150 @@
/*--------------------------------------------------------------------------------------------------------------*/
+static inline void
+ccwgroup_add_qeth_properties (HalDevice *d, const gchar *sysfs_path)
+{
+ int is_layer2;
+
+ /* Some attributes are not applicable for devices in layer2 mode. */
+ hal_util_get_int_from_file (sysfs_path, "layer2", &is_layer2, 2);
+
+ hal_util_set_string_from_file (d, "ccwgroup.qeth.large_send",
+ sysfs_path, "large_send");
+ hal_util_set_string_from_file (d, "ccwgroup.qeth.card_type", sysfs_path,
+ "card_type");
+ hal_util_set_string_from_file (d, "ccwgroup.qeth.checksumming",
+ sysfs_path, "checksumming");
+ if (!is_layer2) {
+ //CH: the next two are only valid for token ring devices
+ hal_util_set_int_from_file (d,
+ "ccwgroup.qeth.canonical_macaddr",
+ sysfs_path, "canonical_macaddr", 2);
+ hal_util_set_string_from_file (d,
+ "ccwgroup.qeth.broadcast_mode",
+ sysfs_path, "broadcast_mode");
+ hal_util_set_int_from_file (d, "ccwgroup.qeth.fake_broadcast",
+ sysfs_path, "fake_broadcast", 2);
+ hal_util_set_int_from_file (d, "ccwgroup.qeth.fake_ll",
+ sysfs_path, "fake_ll", 2);
+ }
+ hal_device_property_set_int (d, "ccwgroup.qeth.layer2", is_layer2);
+ hal_util_set_string_from_file (d, "ccwgroup.qeth.portname", sysfs_path,
+ "portname");
+ hal_util_set_int_from_file (d, "ccwgroup.qeth.portno", sysfs_path,
+ "portno", 10);
+ hal_util_set_int_from_file (d, "ccwgroup.qeth.buffer_count", sysfs_path,
+ "buffer_count", 10);
+ hal_util_set_int_from_file (d, "ccwgroup.qeth.add_hhlen", sysfs_path,
+ "add_hhlen", 10);
+ hal_util_set_string_from_file (d, "ccwgroup.qeth.priority_queueing",
+ sysfs_path, "priority_queueing");
+ if (!is_layer2) {
+ hal_util_set_string_from_file (d, "ccwgroup.qeth.route4",
+ sysfs_path, "route4");
+ hal_util_set_string_from_file (d, "ccwgroup.qeth.route6",
+ sysfs_path, "route6");
+ }
+ hal_util_set_string_from_file (d, "ccwgroup.qeth.state", sysfs_path,
+ "state");
+}
+
+static inline void
+ccwgroup_add_ctc_properties (HalDevice *d, const gchar *sysfs_path)
+{
+ //CH: use protocol descriptions?
+ hal_util_set_int_from_file (d, "ccwgroup.ctc.protocol", sysfs_path,
+ "protocol", 2);
+ hal_util_set_string_from_file (d, "ccwgroup.ctc.type", sysfs_path,
+ "type");
+ hal_util_set_int_from_file (d, "ccwgroup.ctc.buffer", sysfs_path,
+ "buffer", 10);
+}
+
+static inline void
+ccwgroup_add_lcs_properties (HalDevice *d, const gchar *sysfs_path)
+{
+ hal_util_set_int_from_file (d, "ccwgroup.lcs.portnumber", sysfs_path,
+ "portno", 2);
+ hal_util_set_string_from_file (d, "ccwgroup.lcs.type", sysfs_path,
+ "type");
+ hal_util_set_int_from_file (d, "ccwgroup.lcs.lancmd_timeout",
+ sysfs_path, "lancmd_timeout", 10);
+}
+
+static inline void
+ccwgroup_add_claw_properties (HalDevice *d, const gchar *sysfs_path)
+{
+ hal_util_set_string_from_file (d, "ccwgroup.claw.api_type", sysfs_path,
+ "api_type");
+ hal_util_set_string_from_file (d, "ccwgroup.claw.adapter_name",
+ sysfs_path, "adapter_name");
+ hal_util_set_string_from_file (d, "ccwgroup.claw.host_name", sysfs_path,
+ "host_name");
+ hal_util_set_int_from_file (d, "ccwgroup.claw.read_buffer", sysfs_path,
+ "read_buffer", 10);
+ hal_util_set_int_from_file (d, "ccwgroup.claw.write_buffer", sysfs_path,
+ "write_buffer", 10);
+}
+
+static HalDevice *
+ccwgroup_add (const gchar *sysfs_path, HalDevice *parent)
+{
+ HalDevice *d;
+ const gchar *bus_id;
+ gchar driver_name[256];
+
+ bus_id = hal_util_get_last_element (sysfs_path);
+
+ d = hal_device_new ();
+ hal_device_property_set_string (d, "linux.sysfs_path", sysfs_path);
+ hal_device_property_set_string (d, "linux.sysfs_path_device",
+ sysfs_path);
+ hal_device_property_set_string (d, "info.bus", "ccwgroup");
+ if (parent != NULL)
+ hal_device_property_set_string (d, "info.parent", parent->udi);
+ else
+ hal_device_property_set_string
+ (d, "info.parent",
+ "/org/freedesktop/Hal/devices/computer");
+
+ hal_util_set_driver (d, "info.linux.driver", sysfs_path);
+
+ hal_device_property_set_string (d, "ccwgroup.bus_id", bus_id);
+ hal_util_set_int_from_file (d, "ccwgroup.online", sysfs_path,
+ "online", 2);
+
+ /* Some devices have extra properties. */
+ if (hal_util_get_driver_name (sysfs_path, driver_name)) {
+ if (!strncmp (driver_name, "qeth", 4))
+ ccwgroup_add_qeth_properties (d, sysfs_path);
+ if (!strncmp (driver_name, "ctc", 3))
+ ccwgroup_add_ctc_properties (d, sysfs_path);
+ if (!strncmp (driver_name, "lcs", 3))
+ ccwgroup_add_lcs_properties (d, sysfs_path);
+ if (!strncmp (driver_name, "claw", 4))
+ ccwgroup_add_claw_properties (d, sysfs_path);
+ }
+ return d;
+}
+
+static gboolean
+ccwgroup_compute_udi (HalDevice *d)
+{
+ gchar udi[256];
+
+ hal_util_compute_udi (hald_get_gdl (), udi, sizeof (udi),
+ "/org/freedesktop/Hal/devices/ccwgroup_%s",
+ hal_device_property_get_string
+ (d, "ccwgroup.bus_id"));
+ hal_device_set_udi (d, udi);
+ hal_device_property_set_string (d, "info.udi", udi);
+ return TRUE;
+
+}
+
+/*--------------------------------------------------------------------------------------------------------------*/
+
static gboolean
physdev_remove (HalDevice *d)
{
@@ -1085,6 +1444,13 @@
.compute_udi = ccw_compute_udi,
.remove = physdev_remove
};
+
+static PhysDevHandler physdev_handler_ccwgroup = {
+ .subsystem = "ccwgroup",
+ .add = ccwgroup_add,
+ .compute_udi = ccwgroup_compute_udi,
+ .remove = physdev_remove
+};
static PhysDevHandler *phys_handlers[] = {
&physdev_handler_pci,
@@ -1097,6 +1478,7 @@
&physdev_handler_mmc,
&physdev_handler_ieee1394,
&physdev_handler_ccw,
+ &physdev_handler_ccwgroup,
NULL
};
_______________________________________________
hal mailing list
hal at lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/hal
More information about the Hal
mailing list