#!/sbin/openrc-run
# Copyright 1999-2004 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Id$

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
}
