#!/bin/bash
# pci [-bv] - dump pci configuration
prog=$0
verbose() {
	if [[ ! -f /lib/pci ]]; then
		echo $0: no /lib/pci >&2
	fi
	awk '

	function lower(s) {
		gsub(/A/, "a", s)
		gsub(/B/, "b", s)
		gsub(/C/, "c", s)
		gsub(/D/, "d", s)
		gsub(/E/, "e", s)
		gsub(/F/, "f", s)
		return s
	}
	BEGIN{
		file="/lib/pci"
		FS="\t"
		while(getline <file > 0){
			if(/^;/) continue
			if(/^[0-9a-fA-F]/){
				vid=lower($1)
				vendor[vid] = $2
			}
			if(/^	[0-9a-fA-F]/){
				did=lower($2)
				id[vid "/" did] = $3
			}
		}
		FS = " "
	}

	{
		print $0
		vid = $4
		sub(/\/.*/, "", vid)
		if(vid in vendor){
			s = vendor[vid]
			if($4 in id)
				s = s " " id[$4]
			print "\t" s
		}
	}
'
}

usage() {
	echo "usage: ${prog} [-bv]" >&2
	exit 1
}

filter=none
bridges=yes
while getopts "bv" opt; do
	case $opt in
	b) bridges=no;;
	v) filter=verbose;;
	*) usage $0 ;;
	esac
done
shift $((OPTIND-1))
if [[ $# -ne 0 ]]; then
	usage $0
fi

maybebridges() {
	if [[ "${bridges}" == "no" ]]; then
		sed '/:06/d'
	else
		cat
	fi
}

maybefilter() {
	if [[ "${filter}" = "verbose" ]]; then
		verbose
	else
		cat
	fi
}

# DMG 06/02/2016 Make pci(8) recognize virtio devices
# source: http://git.qemu.org/?p=qemu.git;a=blob;f=include/hw/pci/pci.h
# devices with vendor code 0x1af4 are QEMU own virtio devices.
# useful device codes below:
# 0x1000: virtio network card
# 0x1001: virtio block device
# 0x1002: virtio balloon
# 0x1003: virtio console
# 0x1004: virtio SCSI
# 0x1005: virtio RNG (random numbers generator)
# 0x1009: virtio 9P transport
# based on this information, the translation table below is amended
# to show these devices in the pci (8) output.

grep -a . '#pci/pci'/*ctl | maybebridges | sed '
	s/^.pci\///
	s/ctl:/:	/
	t noop
: noop
	s/:	\(02\..*\ 1af4\/1000\)/:	virtio-net     \1/
	s/:	\(01\..*\ 1af4\/1001\)/:	virtio-disk    \1/
	s/:	\(00\..*\ 1af4\/1002\)/:	virtio-balloon \1/
	s/:	\(07\..*\ 1af4\/1003\)/:	virtio-console \1/
	s/:	\(01\..*\ 1af4\/1004\)/:	virtio-scsi    \1/
	s/:	\(00\..*\ 1af4\/1005\)/:	virtio-rng     \1/
	s/:	\(00\..*\ 1af4\/1009\)/:	virtio-9p      \1/
	s/:	01/:	disk  01/
	s/:	02/:	net   02/
	s/:	03/:	vid   03/
	s/:	04/:	aud   04/
	s/:	05/:	mem   05/
	s/:	06/:	brg   06/
	s/:	07/:	ser   07/
	s/:	0c\.03/:	usb   0c.03/
	s/:	0c\.05/:	smb   0c.05/
	s/:	0d/:	rad   0d/
	s/:	10/:	cryp  10/
	t
	s/	/	---  /
' | maybefilter
