summaryrefslogtreecommitdiffstats
path: root/perl-install/sbus_probing/main.pm
diff options
context:
space:
mode:
Diffstat (limited to 'perl-install/sbus_probing/main.pm')
-rw-r--r--perl-install/sbus_probing/main.pm50
1 files changed, 16 insertions, 34 deletions
diff --git a/perl-install/sbus_probing/main.pm b/perl-install/sbus_probing/main.pm
index fa40160ae..f3269e671 100644
--- a/perl-install/sbus_probing/main.pm
+++ b/perl-install/sbus_probing/main.pm
@@ -1,7 +1,9 @@
-package sbus_probing::main;
+package sbus_probing::main; # $Id$
use c;
use log;
+use common qw(:common);
+use modules;
my %sbus_table_network = (
hme => [ "Sun Happy Meal Ethernet", "sunhme" ],
@@ -64,13 +66,14 @@ my %sbus_table_video = (
1;
-#- update %sbus_probed according to SBUS detection.
+sub prom_getint($) { unpack "I", c::prom_getproperty($_[0]) }
+
+#- update $@sbus_probed according to SBUS detection.
sub prom_walk($$$$) {
my ($sbus_probed, $node, $sbus, $ebus) = @_;
- my ($prob_name, $prob_type) = (c::prom_getproperty("name"), c::prom_getproperty("device_type"));
+ my ($prob_name, $prob_type) = (c::prom_getstring("name"), c::prom_getstring("device_type"));
my ($nextnode, $nsbus, $nebus) = (undef, $sbus, $ebus);
- log::l("sbus probe at $node => $prob_name of type $prob_type on $sbus,$ebus");
#- probe for network devices.
if ($sbus && $prob_type eq 'network') {
$prob_name =~ s/[A-Z,]*(.*)/$1/;
@@ -96,9 +99,9 @@ sub prom_walk($$$$) {
#- probe for video devices.
if ($prob_type eq 'display' && ($sbus || $prob_name =~ /^(ffb|afb|cgfourteen)$/)) {
$prob_name =~ s/[A-Z,]*(.*)/$1/;
- my $ext = ($prob_name eq 'mgx' && c::prom_getint('fb_size') == 0x400000 && '_4M' ||
+ my $ext = ($prob_name eq 'mgx' && prom_getint('fb_size') == 0x400000 && '_4M' ||
$prob_name eq 'cgsix' && do {
- my ($chiprev, $vmsize) = (c::prom_getint('chiprev'), c::prom_getint('vmsize'));
+ my ($chiprev, $vmsize) = (prom_getint('chiprev'), prom_getint('vmsize'));
my $result = '';
$chiprev >= 1 && $chiprev <= 4 and $result = '_dbl';
$chiprev >= 5 && $chiprev <= 9 and $result = '_sgl';
@@ -107,10 +110,10 @@ sub prom_walk($$$$) {
$chiprev == 11 && !$result and $result = '_t';
$result;
} ||
- $prob_name eq 'leo' && c::prom_getproperty('model') =~ /501-2503/ && '_t' ||
- $prob_name eq 'tcx' && c::prom_getboot('tcx-8-bit') && '_8b' ||
- $prob_name eq 'afb' && sprintf "_btx%x", c::prom_getint('board_type') ||
- $prob_name eq 'ffb' && sprintf "_btx%x", c::prom_getint('board_type'));
+ $prob_name eq 'leo' && c::prom_getstring('model') =~ /501-2503/ && '_t' ||
+ $prob_name eq 'tcx' && c::prom_getbool('tcx-8-bit') && '_8b' ||
+ $prob_name eq 'afb' && sprintf "_btx%x", prom_getint('board_type') ||
+ $prob_name eq 'ffb' && sprintf "_btx%x", prom_getint('board_type'));
$sbus_table_video{$prob_name . $ext} ?
push @$sbus_probed, [ "VIDEO", @{$sbus_table_video{$prob_name . $ext}} ] :
@@ -124,33 +127,12 @@ sub prom_walk($$$$) {
$nextnode = c::prom_getsibling($node) and prom_walk($sbus_probed, $nextnode, $sbus, $ebus);
}
-sub check {
- my $ok = $_[0] !~ /unknown/;
- $ok or log::l("skipping $text, no module available (if you know one, please mail bugs\@linux-mandrake.com)");
- $ok
-}
-
-sub probe($) {
- my ($type) = @_;
-
- my $root_node = c::prom_open();
- my @l;
-
- prom_walk(\@l, $root_node, 0, 0);
- c::prom_close();
-
- $type eq '.' ? @l : map { [ @$_[1..$#$_] ] } grep { !$type || $_->[0] =~ /$type/i } @l;
-}
-
-sub matching_desc($;$) {
- my ($regexp) = @_;
-
+sub probe {
+ eval { modules::load("openprom") } if arch() =~ /sparc/;
my $root_node = c::prom_open();
my @l;
prom_walk(\@l, $root_node, 0, 0);
c::prom_close();
- grep { !$type || $_->[1] =~ /$regexp/ } @l;
+ map { my %l; @l{qw(type description drivers)} = @$_ } @l;
}
-
-sub list { map { "$_->[1] ($_->[0] $_->[2])" } probe('.'); }