summaryrefslogtreecommitdiffstats
ModeNameSize
-rw-r--r--.perl_checker464logstatsplain
-rw-r--r--ChangeLog42088logstatsplain
-rw-r--r--Makefile2366logstatsplain
-rw-r--r--NEWS9984logstatsplain
d---------bin650logstatsplain
d---------config85logstatsplain
d---------data112logstatsplain
d---------lib / network34logstatsplain
d---------po2415logstatsplain
d---------scripts44logstatsplain
a> 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104
package modalias;

# TODO:
# - be faster (Elapsed time: lspcidrake.pl ~ 0.28s instead of 0.12s for old lspcidrake

use strict;
use MDK::Common;
use c;

my @config_groups = (
    [
	"/lib/module-init-tools/modprobe.default",
	"/etc/modprobe.conf",
	"/etc/modprobe.d",
    ],
);
my @system_groups = (
    [
        "/lib/module-init-tools/ldetect-lst-modules.alias",
    ],
    [
        "/lib/modules/" . c::kernel_version() . "/modules.alias",
    ],
);
my @classes = qw(ide ieee1394 input pci pcmcia pnp serio usb);
my @alias_groups;

my $alias_re = qr/^\s*alias\s+(([^:]+):\S+)\s+(\S+)$/;

sub alias_to_ids {
    my ($alias) = @_;
    my ($vendor, $device);
    # returns (vendor, device)
    if (($vendor, $device) = $alias =~ /:v([0-9A-F]{4})[dp]([0-9A-F]{4})/) {
        return ($vendor, $device);
    } elsif (($vendor, $device) = $alias =~ /:v0{4}([0-9A-F]{4})[dp]0{4}([0-9A-F]{4})/) {
        return ($vendor, $device);
    }
}

sub parse_path {
    my ($group, $path) = @_;
    if (-d $path) {
        parse_path($group, "$path/$_") foreach all($path);
    } elsif (-f $path) {
        foreach (cat_($path)) {
            if (my ($alias, $class, $module) = $_ =~ $alias_re) {
                if (member($class, @classes)) {
                    my ($vendor, $device) = alias_to_ids($alias);
                    if ($vendor) {