#!/sbin/runscript
# Copyright 1999-2004 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: /var/cvsroot/gentoo-x86/sys-apps/pciutils/files/init.d-pciparm,v 1.3 2008/10/11 02:47:50 robbat2 Exp $

depend() {
	before bootmisc hdparm
	after localmount
}

checkconfig() {
	if [ ! -f /etc/conf.d/pciparm ]; then
		ewarn "/etc/conf.d/pciparm does not exist, skipping"
		return 1
	fi

	if [ -z "${PCIPARM_ALL}" -a -z "${PCIPARM_BUS_0}" -a  -z "${PCIPARM_VENDOR_0}" ]; then
		ewarn "None of PCIPARM_ALL, PCIPARM_BUS_* or PCIPARM_VENDOR_* set in /etc/conf.d/pciparm"
		return 1
	fi
}

do_setpci() {
	#ewarn "do_setpci: /usr/sbin/setpci $SETPCI_OPT $@"
	SWITCH=$1
	SPEC_ID=$2
	shift 2
	case "$SWITCH" in
		-d) DESC=vendor ;;
		-s) DESC=bus ;;
		*) eerror "Unknown setpci type: $SWITCH" ; return 1 ;;
	esac

	if [ -z "$SPEC_ID" ]; then
		eerror "Missing device specifier!"
		return 1
	fi
	if [ -z "$*" ]; then
		eerror "Missing configuration to set for ($DESC) $SPEC_ID!"
		return 1
	fi

	ebegin "Setting PCI params for ($DESC) $SPEC_ID to $@"
	/usr/sbin/setpci $SETPCI_OPT $SWITCH $SPEC_ID "$@"
	rc=$?
	eend $rc
	return $rc
}

do_setpci_array() {
	name=$1
	shift
	i=0
	while true; do
		eval opt="\$${name}_$i"
		# End of loop
		[ -z "${opt}" ] && break
		# Pass in all other parameters here, in case we want to use multiple
		# arguments later.
		do_setpci "$@" $opt #|| return 1
		i=$(($i+1))
	done
}

start() {
	if get_bootparam "nopciparm" ; then
		ewarn "Skipping pciparm init as requested in kernel cmdline"
		return 0
	fi

	checkconfig || return 1
	
	# We do not exit after any errors presently, because it might be a
	# stability-related fix after a failure.
	[ -n "$PCIPARM_ALL" ] && \
		do_setpci -d '*:*' $PCIPARM_ALL #|| return 1

	do_setpci_array PCIPARM_BUS -s #|| return 1
	do_setpci_array PCIPARM_VENDOR -d #|| return 1
}
