| #!/sbin/openrc-run |
| # Copyright 1999-2004 Gentoo Foundation |
| # Distributed under the terms of the GNU General Public License v2 |
| |
| 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 |
| } |