1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- #!/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
- }
|