15d459b5aSDavid du Colombier#!/bin/rc 2*50387ad9SDavid du Colombier# pci [-bv] - dump pci configuration 38cde348aSDavid du Colombierrfork e 48cde348aSDavid du Colombierfn verbose { 58cde348aSDavid du Colombier if (! test -f /lib/pci) 68cde348aSDavid du Colombier echo $0: no /lib/pci >[1=2] 78cde348aSDavid du Colombier awk ' 8ab3dc52fSDavid du Colombier 9ab3dc52fSDavid du Colombier function lower(s) { 10ab3dc52fSDavid du Colombier gsub(/A/, "a", s) 11ab3dc52fSDavid du Colombier gsub(/B/, "b", s) 12ab3dc52fSDavid du Colombier gsub(/C/, "c", s) 13ab3dc52fSDavid du Colombier gsub(/D/, "d", s) 14ab3dc52fSDavid du Colombier gsub(/E/, "e", s) 15ab3dc52fSDavid du Colombier gsub(/F/, "f", s) 16ab3dc52fSDavid du Colombier return s 17ab3dc52fSDavid du Colombier } 18ab3dc52fSDavid du Colombier BEGIN{ 19ab3dc52fSDavid du Colombier file="/lib/pci" 20ab3dc52fSDavid du Colombier FS="\t" 218cde348aSDavid du Colombier while(getline <file > 0){ 22ab3dc52fSDavid du Colombier if(/^;/) continue 23*50387ad9SDavid du Colombier if(/^[0-9a-fA-F]/){ 24ab3dc52fSDavid du Colombier vid=lower($1) 25ab3dc52fSDavid du Colombier vendor[vid] = $2 26ab3dc52fSDavid du Colombier } 27*50387ad9SDavid du Colombier if(/^ [0-9a-fA-F]/){ 28ab3dc52fSDavid du Colombier did=lower($2) 29ab3dc52fSDavid du Colombier id[vid "/" did] = $3 30ab3dc52fSDavid du Colombier } 31ab3dc52fSDavid du Colombier } 32ab3dc52fSDavid du Colombier FS = " " 33ab3dc52fSDavid du Colombier } 34ab3dc52fSDavid du Colombier 35ab3dc52fSDavid du Colombier { 36ab3dc52fSDavid du Colombier print $0 37ab3dc52fSDavid du Colombier vid = $4 38ab3dc52fSDavid du Colombier sub(/\/.*/, "", vid) 39ab3dc52fSDavid du Colombier if(vid in vendor){ 40ab3dc52fSDavid du Colombier s = vendor[vid] 41ab3dc52fSDavid du Colombier if($4 in id) 42ab3dc52fSDavid du Colombier s = s " " id[$4] 43ab3dc52fSDavid du Colombier print "\t" s 44ab3dc52fSDavid du Colombier } 45ab3dc52fSDavid du Colombier } 46ab3dc52fSDavid du Colombier' 47ab3dc52fSDavid du Colombier} 48*50387ad9SDavid du Colombierfn usage { 49*50387ad9SDavid du Colombier echo usage: $1 '[-bv]' >[1=2] 50*50387ad9SDavid du Colombier exit usage 51*50387ad9SDavid du Colombier} 52ab3dc52fSDavid du Colombier 53ab3dc52fSDavid du Colombierfilter=cat 54*50387ad9SDavid du Colombierbridges=yes 55*50387ad9SDavid du Colombierdone=0 56*50387ad9SDavid du Colombierwhile (~ $done 0 && ! ~ $#* 0 && ~ $1 -*) { 57*50387ad9SDavid du Colombier if (~ $1 -*b*) 58*50387ad9SDavid du Colombier bridges=no 59*50387ad9SDavid du Colombier if (~ $1 -*v*) 60ab3dc52fSDavid du Colombier filter=verbose 61*50387ad9SDavid du Colombier switch ($1) { 62*50387ad9SDavid du Colombier case -- 63*50387ad9SDavid du Colombier done = 1 # no break in rc, alas 64*50387ad9SDavid du Colombier case -*[~bv]* 65*50387ad9SDavid du Colombier usage $0 66ab3dc52fSDavid du Colombier } 67*50387ad9SDavid du Colombier shift 68*50387ad9SDavid du Colombier} 69*50387ad9SDavid du Colombierif (! ~ $#* 0) 70*50387ad9SDavid du Colombier usage $0 71*50387ad9SDavid du Colombier 72*50387ad9SDavid du Colombierbuiltin cd '#$/pci' && grep . *ctl | { 73*50387ad9SDavid du Colombier if (~ $bridges no) 74*50387ad9SDavid du Colombier sed /:06/d 75*50387ad9SDavid du Colombier if not 76*50387ad9SDavid du Colombier cat 77*50387ad9SDavid du Colombier } | 78*50387ad9SDavid du Colombier sed ' 79ab3dc52fSDavid du Colombier s/ctl:/: / 80*50387ad9SDavid du Colombier t noop 81*50387ad9SDavid du Colombier: noop 82ab3dc52fSDavid du Colombier s/: 01/: disk 01/ 83ab3dc52fSDavid du Colombier s/: 02/: net 02/ 84ab3dc52fSDavid du Colombier s/: 03/: vid 03/ 85*50387ad9SDavid du Colombier s/: 04/: aud 04/ 86*50387ad9SDavid du Colombier s/: 05/: mem 05/ 873f9c8393SDavid du Colombier s/: 06/: brg 06/ 88*50387ad9SDavid du Colombier s/: 07/: ser 07/ 893f9c8393SDavid du Colombier s/: 0c\.03/: usb 0c.03/ 903f9c8393SDavid du Colombier s/: 0c\.05/: smb 0c.05/ 91*50387ad9SDavid du Colombier s/: 0d/: rad 0d/ 92*50387ad9SDavid du Colombier s/: 10/: cryp 10/ 93*50387ad9SDavid du Colombier t 94*50387ad9SDavid du Colombier s/ / --- / 95ab3dc52fSDavid du Colombier' | $filter 96