chiark / gitweb /
libudev: allow to store negative values in the udev database
[elogind.git] / extras / firmware / firmware.sh
index fb2f2a792d6acd64524b5dd424c62e5d308c2baf..9d4659a34d789b621c89d7b7b6e74969df76652e 100755 (executable)
@@ -1,27 +1,29 @@
 #!/bin/sh -e
 
 #!/bin/sh -e
 
-FIRMWARE_DIRS="/lib/firmware /usr/local/lib/firmware"
+FIRMWARE_DIRS="/lib/firmware/updates/$(uname -r) /lib/firmware/updates \
+               /lib/firmware/$(uname -r) /lib/firmware"
 
 err() {
 
 err() {
-    echo "$@" >&2
-    if [ -x /bin/logger ]; then
-       /bin/logger -t "${0##*/}[$$]" "$@"
-    fi
+       echo "$@" >&2
+       logger -t "${0##*/}[$$]" "$@" 2>/dev/null || true
 }
 
 if [ ! -e /sys$DEVPATH/loading ]; then
 }
 
 if [ ! -e /sys$DEVPATH/loading ]; then
-    err "udev firmware loader misses sysfs directory"
-    exit 1
+       err "udev firmware loader misses sysfs directory"
+       exit 1
 fi
 
 for DIR in $FIRMWARE_DIRS; do
 fi
 
 for DIR in $FIRMWARE_DIRS; do
-    [ -e "$DIR/$FIRMWARE" ] || continue
-    echo 1 > /sys/$DEVPATH/loading
-    cat "$DIR/$FIRMWARE" > /sys/$DEVPATH/data
-    echo 0 > /sys/$DEVPATH/loading
-    exit 0
+       [ -e "$DIR/$FIRMWARE" ] || continue
+       echo 1 > /sys$DEVPATH/loading
+       cat "$DIR/$FIRMWARE" > /sys$DEVPATH/data
+       echo 0 > /sys$DEVPATH/loading
+       exit 0
 done
 
 done
 
-echo -1 > /sys/$DEVPATH/loading
+echo -1 > /sys$DEVPATH/loading
 err "Cannot find  firmware file '$FIRMWARE'"
 err "Cannot find  firmware file '$FIRMWARE'"
+mkdir -p /dev/.udev/firmware-missing
+file=$(echo "$FIRMWARE" | sed 's:/:\\x2f:g')
+ln -s -f "$DEVPATH" /dev/.udev/firmware-missing/$file
 exit 1
 exit 1