#!/bin/sh

# Thu Oct  4 14:34:25 JST 2018

usage()
{
    echo "usage: pcidump [-h] [-b <busnum>]"
    exit 2
}

while getopts "b:h" option
do
    case $option in
	b)
	    busnum="${OPTARG}"
	    busargs="-b $busnum"
	    ;;
	h)
	    usage
	    ;;
	*)
	    exit 1
	    ;;
    esac
done

shift $(($OPTIND - 1))

if [ $# -ne 0 ]; then
    usage
fi

PCIDUMPTEMP=$(mktemp -t pcidump) || exit 1
trap "/bin/rm -rf $PCIDUMPTEMP ; exit 0" EXIT INT QUIT PIPE

print_delim()
{
	echo ------------------------------------------------------------------
}

do_alldevs()
{
    for j in `seq 0 31`; do
	for k in `seq 0 7`; do
	    pcictl pci0 dump -b $1 -d $j -f $k >$PCIDUMPTEMP
	    if [ -s $PCIDUMPTEMP ]; then
		echo pcictl pci0 dump -b $1 -d $j -f $k
		cat $PCIDUMPTEMP
		print_delim
	    fi
	done
    done
}

print_delim
pcictl pci0 list $busargs
print_delim

if [ -z "$busargs" ]; then
    for b in `seq 0 256`; do
	do_alldevs $b
    done
else
    do_alldevs $busnum
fi
