xref: /plan9/rc/bin/pci (revision 50387ad9ab034343a43bdee7fcd3449dc7301b47)
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