2 # This validates that the kernel will fall back to using the user helper
3 # to load firmware it can't find on disk itself. We must request a firmware
4 # that the kernel won't find, and any installed helper (e.g. udev) also
5 # won't find so that we can do the load ourself manually.
10 DIR
=/sys
/devices
/virtual
/misc
/test_firmware
12 OLD_TIMEOUT
=$
(cat /sys
/class
/firmware
/timeout
)
15 FW
="$FWPATH/test-firmware.bin"
19 echo "$OLD_TIMEOUT" >/sys
/class
/firmware
/timeout
29 # This will block until our load (below) has finished.
30 echo -n "$name" >"$DIR"/trigger_request
&
32 # Give kernel a chance to react.
34 while [ ! -e "$DIR"/"$name"/loading
]; do
36 timeout
=$
(( $timeout - 1 ))
37 if [ "$timeout" -eq 0 ]; then
38 echo "$0: firmware interface never appeared" >&2
43 echo 1 >"$DIR"/"$name"/loading
44 cat "$file" >"$DIR"/"$name"/data
45 echo 0 >"$DIR"/"$name"/loading
47 # Wait for request to finish.
51 trap "test_finish" EXIT
53 # This is an unlikely real-world firmware content. :)
54 echo "ABCD0123" >"$FW"
55 NAME
=$
(basename "$FW")
57 # Test failure when doing nothing (timeout works).
58 echo 1 >/sys
/class
/firmware
/timeout
59 echo -n "$NAME" >"$DIR"/trigger_request
60 if diff -q "$FW" /dev
/test_firmware
>/dev
/null
; then
61 echo "$0: firmware was not expected to match" >&2
64 echo "$0: timeout works"
67 # Put timeout high enough for us to do work but not so long that failures
68 # slow down this test too much.
69 echo 4 >/sys
/class
/firmware
/timeout
71 # Load this script instead of the desired firmware.
73 if diff -q "$FW" /dev
/test_firmware
>/dev
/null
; then
74 echo "$0: firmware was not expected to match" >&2
77 echo "$0: firmware comparison works"
80 # Do a proper load, which should work correctly.
82 if ! diff -q "$FW" /dev
/test_firmware
>/dev
/null
; then
83 echo "$0: firmware was not loaded" >&2
86 echo "$0: user helper firmware loading works"