[Yaird-devel] Bug#353179: patches for (future) sbus sysfs support

Bernhard R. Link brlink at debian.org
Thu Feb 16 17:53:42 UTC 2006


Package: yaird
Version: 0.0.12-3
Severity: wishlist

I'm currently playing around to port the Linux sbus
support to the new device model to gain sysfs support.

The attached patch extends yaird to support my patches,
which I plan to test a bit more and submit the next days
(or weeks).

Nevertheless I decided to already decided to already submit
this patch against yaird, so it can already be reviewed
(I tried my best to forget all perl I once new the last years)
and I do not lose it somewhere.

Hochachtungsvoll,
	Bernhard R. Link
-------------- next part --------------
diff -u -N yaird/usr/lib/yaird/perl/Conf.pm /usr/lib/yaird/perl/Conf.pm
--- yaird/usr/lib/yaird/perl/Conf.pm	2005-12-30 11:17:11.000000000 +0100
+++ /usr/lib/yaird/perl/Conf.pm	2006-02-16 18:18:32.000000000 +0100
@@ -45,6 +45,9 @@
 	modDep		=> sub { get('libModules')
 				. '/' . get('version')
 				. '/modules.dep'; },
+	modAlias	=> sub { get('libModules')
+				. '/' . get('version')
+				. '/modules.alias'; },
 	usbMap		=> sub { get('libModules')
 				. '/' . get('version')
 				. '/modules.usbmap'; },
diff -u -N yaird/usr/lib/yaird/perl/Hardware.pm /usr/lib/yaird/perl/Hardware.pm
--- yaird/usr/lib/yaird/perl/Hardware.pm	2005-12-30 11:17:10.000000000 +0100
+++ /usr/lib/yaird/perl/Hardware.pm	2006-02-16 18:30:11.000000000 +0100
@@ -34,6 +34,8 @@
 use UsbTab;
 use CcwDev;
 use CcwTab;
+use SBusDev;
+use ModAliasTab;
 package Hardware;
 
 
@@ -73,7 +75,13 @@
 			my $dev = UsbDev->new (path => $abspath);
 			$modules = UsbTab::find ($dev);
 		}
-
+		elsif ($abspath =~ m!sbus\d+$!) {
+			# sbus; harmless
+		}
+		elsif ($abspath =~ m!sbus\d+(/\d+:\d+)+$!) {
+			my $dev = SBusDev->new (path => $abspath);
+			$modules = ModAliasTab::find ($dev->modalias);
+		}
 		elsif ($abspath =~ m!/css0$!) {
 			# S390 Channel SubSystem; harmless
 		}
diff -u -N yaird/usr/lib/yaird/perl/ModAliasEntry.pm /usr/lib/yaird/perl/ModAliasEntry.pm
--- yaird/usr/lib/yaird/perl/ModAliasEntry.pm	1970-01-01 01:00:00.000000000 +0100
+++ /usr/lib/yaird/perl/ModAliasEntry.pm	2006-02-16 18:23:01.000000000 +0100
@@ -0,0 +1,54 @@
+#!perl -w
+#
+# ModAliasEntry - iencapsulate a line form modules.alias
+#   Copyright (C) 2006  Bernhard R. Link
+# heavily based upon
+# PciMapEntry - iencapsulate a line form modules.pcimap.
+#   Copyright (C) 2005  Erik van Konijnenburg
+#
+#   This program is free software; you can redistribute it and/or modify
+#   it under the terms of the GNU General Public License as published by
+#   the Free Software Foundation; either version 2 of the License, or
+#   (at your option) any later version.
+#
+#   This program is distributed in the hope that it will be useful,
+#   but WITHOUT ANY WARRANTY; without even the implied warranty of
+#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+#   GNU General Public License for more details.
+#
+#   You should have received a copy of the GNU General Public License
+#   along with this program; if not, write to the Free Software
+#   Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
+#
+#
+# Knows how to match, can return module name.
+#
+
+use strict;
+use warnings;
+use Base;
+package ModAliasEntry;
+use base 'Obj';
+
+sub fill {
+	my $self = shift;
+	$self->SUPER::fill();
+	$self->takeArgs ('module', 'mask');
+}
+
+sub module	{ return $_[0]->{module}; }
+
+sub matches {
+# this is the easy variant for sbus: match the whole string.
+	my ($self, $modalias) = @_;
+	if ($self->{mask} eq $modalias ) {
+		return 1;
+	}
+	if ($self->{mask} eq ( $modalias . "*") ) {
+		return 1;
+	}
+	return 0;
+}
+
+1;
+
diff -u -N yaird/usr/lib/yaird/perl/ModAliasTab.pm /usr/lib/yaird/perl/ModAliasTab.pm
--- yaird/usr/lib/yaird/perl/ModAliasTab.pm	1970-01-01 01:00:00.000000000 +0100
+++ /usr/lib/yaird/perl/ModAliasTab.pm	2006-02-16 18:39:37.000000000 +0100
@@ -0,0 +1,87 @@
+#!perl -w
+#
+# ModAliasTab -- encapsulate modules.alias
+#   Copyright (C) 2006  Bernhard R. Link
+#   based on PciTab.pm, which is:
+#   Copyright (C) 2005  Erik van Konijnenburg
+#
+#   This program is free software; you can redistribute it and/or modify
+#   it under the terms of the GNU General Public License as published by
+#   the Free Software Foundation; either version 2 of the License, or
+#   (at your option) any later version.
+#
+#   This program is distributed in the hope that it will be useful,
+#   but WITHOUT ANY WARRANTY; without even the implied warranty of
+#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+#   GNU General Public License for more details.
+#
+#   You should have received a copy of the GNU General Public License
+#   along with this program; if not, write to the Free Software
+#   Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
+#
+
+use strict;
+use warnings;
+use Base;
+use Conf;
+use ModAliasEntry;
+package ModAliasTab;
+
+my $modAliasList = undef;
+
+# Parse this:
+# # Aliases extracted from modules themselves.
+# alias sbus:audio* snd_sun_amd7930
+
+sub init () {
+	if (defined ($modAliasList)) {
+		return;
+	}
+	$modAliasList = [];
+	my $name = Conf::get('modAlias');
+	if (! open (IN, "<", "$name")) {
+		Base::fatal ("can't open modAlias module list $name");
+	}
+	while (defined (my $line = <IN>)) {
+		chomp $line;
+		$line =~ s/#.*//;
+		$line =~ s/^\s+//;
+		$line =~ s/\s+$//;
+		next if ($line eq "");
+		my @fields = split (/\s+/, $line, 999);
+		if ($#fields != 2) {
+			Base::fatal "malformed line ($#fields != 2) in modAlias module list $name";
+		}
+		if ($fields[0] ne "alias") {
+			Base::fatal "malformed line (not starting with alias) in modAlias module list $name";
+		}
+		push @{$modAliasList}, ModAliasEntry->new (
+			module => $fields[2],
+			mask => $fields[1],
+		);
+	}
+	if (! close (IN)) {
+		Base::fatal "could not read modAlias module list $name";
+	}
+}
+
+sub all	() {
+	init;
+	return $modAliasList;
+}
+
+# given pathname in devices tree, find module name in ModAlias as a list.
+sub find ($) {
+	my ($modalias) = @_;
+	my @result = ();
+	for my $gme (@{ModAliasTab::all()}) {
+		if ($gme->matches ($modalias)) {
+			push @result, $gme->module;
+		}
+	}
+	return [@result];
+}
+
+
+1;
+
diff -u -N yaird/usr/lib/yaird/perl/SBusDev.pm /usr/lib/yaird/perl/SBusDev.pm
--- yaird/usr/lib/yaird/perl/SBusDev.pm	1970-01-01 01:00:00.000000000 +0100
+++ /usr/lib/yaird/perl/SBusDev.pm	2006-02-16 18:31:12.000000000 +0100
@@ -0,0 +1,40 @@
+#!perl -w
+#
+# SBusDev -- get the modalias field for a SBus device from /sys.
+#   Copyright (C) 2006  Bernhard R. Link
+# based heavily on
+#   Copyright (C) 2005  Erik van Konijnenburg
+#
+#   This program is free software; you can redistribute it and/or modify
+#   it under the terms of the GNU General Public License as published by
+#   the Free Software Foundation; either version 2 of the License, or
+#   (at your option) any later version.
+#
+#   This program is distributed in the hope that it will be useful,
+#   but WITHOUT ANY WARRANTY; without even the implied warranty of
+#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+#   GNU General Public License for more details.
+#
+#   You should have received a copy of the GNU General Public License
+#   along with this program; if not, write to the Free Software
+#   Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
+#
+use strict;
+use warnings;
+use Base;
+package SBusDev;
+use base 'Obj';
+
+sub fill {
+	my $self = shift;
+	$self->SUPER::fill();
+	$self->takeArgs ('path');
+	my $path = $self->path;
+	$self->{modalias} = Base::getStringFile ("$path/modalias");
+}
+
+sub modalias	{ return $_[0]->{modalias}; }
+sub path	{ return $_[0]->{path}; }
+
+
+1;


More information about the Yaird-devel mailing list