1 package PciIds::Address::Pci;
4 use PciIds::Address::Toplevel;
5 use base 'PciIds::Address::Base';
9 return PciIds::Address::Toplevel::new( $address ) if( $address =~ /^PC\/?$/ );
10 return bless PciIds::Address::Base::new( $address );
32 s/([0-9a-f]{4})([0-9a-f]{4})/$1 $2/g;
35 $prefix = 'Subsystem';
41 return $prefix.' '. $_;
45 my( $new ) = ( shift->get() );
46 $new =~ s/.*\/(.)/$1/;
47 $new =~ s/([0-9a-f]{4})([0-9a-f]{4})/$1 $2/g;
51 sub restrictRex( $$ ) {
52 my( $self, $restrict ) = @_;
53 my( $result ) = ( $restrict =~ /^([a-f0-9]{1,4})/ );#TODO every time?
58 return ( shift->get() =~ /\/.*\/.*\// );
62 my( $self, $suffix ) = @_;
63 return ( undef, 'You can not add to leaf node' ) if( $self->leaf() );
65 return ( undef, "Invalid ID syntax" ) unless ( ( ( $self->get() !~ /^PC\/.*\// ) && ( $suffix =~ /^[0-9a-f]{4}$/ ) ) || ( ( $self->get() =~ /^PC\/.*\// ) && ( $suffix =~ /^[0-9a-f]{8}$/ ) ) );
66 return ( PciIds::Address::new( $self->{'value'} . ( ( $self->{'value'} =~ /\/$/ ) ? '' : '/' ) . $suffix ), undef );
71 my $result = PciIds::Address::Base::path( $self );
72 my( $vid ) = ( $self->get() =~ /^PC\/[0-9a-f]{4}\/[0-9a-f]{4}\/([0-9a-f]{4})/ );
73 unshift @{$result}, [ PciIds::Address::new( "PC/$vid" ), 1 ] if( defined $vid );# && ( $result->[1]->[0]->get() ne "PC/$vid" );
81 sub addressDeps( $ ) {
82 my( $addr ) = ( shift->get() =~ /^PC\/....\/....\/(....)/ );
83 return [] unless defined $addr;
84 return [ [ PciIds::Address::new( "PC/$addr" ), "Subsystem vendor $addr does not exist" ] ];
89 return 'Subsystems' if $self->get() =~ /^PC\/....\/..../;
90 return 'Devices' if $self->get() =~ /^PC\/..../;
91 die "Can not happend\n";
96 return 9 if $self->get() =~ /^PC\/....\/..../;
97 return 4 if $self->get() =~ /^PC\/..../;
98 die "Can not happen\n";