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