diff options
author | Michael Brown <mcb30@ipxe.org> | 2015-04-13 16:22:35 +0100 |
---|---|---|
committer | Michael Brown <mcb30@ipxe.org> | 2015-04-13 16:22:35 +0100 |
commit | 452aa157be724e92d73aceee80874c2dfff9708b (patch) | |
tree | faa19454a35b85c20b5ef046b2d4e24a90d71f52 | |
parent | ae01462b7907ae38898dbacded9bd38414580109 (diff) | |
download | ipxe-452aa157be724e92d73aceee80874c2dfff9708b.tar.gz |
[util] Add ability to dump PCI device ID list
Signed-off-by: Michael Brown <mcb30@ipxe.org>
-rw-r--r-- | src/util/Option/ROM.pm | 20 | ||||
-rwxr-xr-x | src/util/disrom.pl | 4 |
2 files changed, 24 insertions, 0 deletions
diff --git a/src/util/Option/ROM.pm b/src/util/Option/ROM.pm index 6c396730..232cf16b 100644 --- a/src/util/Option/ROM.pm +++ b/src/util/Option/ROM.pm @@ -529,6 +529,26 @@ sub new { return $hash; } +sub device_list { + my $hash = shift; + my $self = tied(%$hash); + + my $device_list = $hash->{device_list}; + return undef unless $device_list; + + my @ids; + my $offset = ( $self->{offset} + $device_list ); + while ( 1 ) { + my $raw = substr ( ${$self->{data}}, $offset, 2 ); + my $id = unpack ( "S", $raw ); + last unless $id; + push @ids, $id; + $offset += 2; + } + + return @ids; +} + ############################################################################## # # Option::ROM::PnP diff --git a/src/util/disrom.pl b/src/util/disrom.pl index 574957ac..920a86b2 100755 --- a/src/util/disrom.pl +++ b/src/util/disrom.pl @@ -55,6 +55,10 @@ do { printf " %-16s %s\n", "Signature:", $pci->{signature}; printf " %-16s 0x%04x\n", "Vendor ID:", $pci->{vendor_id}; printf " %-16s 0x%04x\n", "Device ID:", $pci->{device_id}; + if ( $pci->{device_list} ) { + printf " %-16s %s\n", "Device list:", + ( join ( ", ", map { sprintf "0x%04x", $_ } $pci->device_list ) ); + } printf " %-16s 0x%02x%02x%02x\n", "Device class:", $pci->{base_class}, $pci->{sub_class}, $pci->{prog_intf}; printf " %-16s 0x%04x (%d)\n", "Image length:", |