#!/bin/ksh -p

function usage {
  echo >&2 "usage: $0 sleep_state logfiles_prefix"
  exit 1
}

function pcidump {
  pcictl pci0 list -b any |
  while IFS=: read bus dev fun desc
  do
    echo "$bus:$dev.$fun $desc"
    pcictl pci0 dump -b $bus -d $dev -f $fun
  done
}

(( $# == 2 ))  ||  usage

klog=${2}klog-$1

cat -u /dev/klog >>"$klog" & klogpid=$!

pcidump >"${2}pci-pre-$1"
echo >>"$klog" "### requesting state $1"
sysctl -w machdep.sleep_state="$1"
echo >>"$klog" "### back to state $(sysctl -n machdep.sleep_state)"
pcidump >"${2}pci-post-$1"

diff -u "${2}pci-pre-$1" "${2}pci-post-$1" >"${2}pci-diff-$1"
