63 lines
		
	
	
	
		
			1.7 KiB
			
		
	
	
	
		
			Bash
		
	
	
	
	
	
		
		
			
		
	
	
			63 lines
		
	
	
	
		
			1.7 KiB
			
		
	
	
	
		
			Bash
		
	
	
	
	
	
|   | #!/bin/sh
 | ||
|  | # This validates that the kernel will load firmware out of its list of | ||
|  | # firmware locations on disk. Since the user helper does similar work, | ||
|  | # we reset the custom load directory to a location the user helper doesn't | ||
|  | # know so we can be sure we're not accidentally testing the user helper. | ||
|  | set -e | ||
|  | 
 | ||
|  | modprobe test_firmware | ||
|  | 
 | ||
|  | DIR=/sys/devices/virtual/misc/test_firmware | ||
|  | 
 | ||
|  | OLD_TIMEOUT=$(cat /sys/class/firmware/timeout) | ||
|  | OLD_FWPATH=$(cat /sys/module/firmware_class/parameters/path) | ||
|  | 
 | ||
|  | FWPATH=$(mktemp -d) | ||
|  | FW="$FWPATH/test-firmware.bin" | ||
|  | 
 | ||
|  | test_finish() | ||
|  | { | ||
|  | 	echo "$OLD_TIMEOUT" >/sys/class/firmware/timeout | ||
|  | 	echo -n "$OLD_PATH" >/sys/module/firmware_class/parameters/path | ||
|  | 	rm -f "$FW" | ||
|  | 	rmdir "$FWPATH" | ||
|  | } | ||
|  | 
 | ||
|  | trap "test_finish" EXIT | ||
|  | 
 | ||
|  | # Turn down the timeout so failures don't take so long. | ||
|  | echo 1 >/sys/class/firmware/timeout | ||
|  | # Set the kernel search path. | ||
|  | echo -n "$FWPATH" >/sys/module/firmware_class/parameters/path | ||
|  | 
 | ||
|  | # This is an unlikely real-world firmware content. :) | ||
|  | echo "ABCD0123" >"$FW" | ||
|  | 
 | ||
|  | NAME=$(basename "$FW") | ||
|  | 
 | ||
|  | # Request a firmware that doesn't exist, it should fail. | ||
|  | echo -n "nope-$NAME" >"$DIR"/trigger_request | ||
|  | if diff -q "$FW" /dev/test_firmware >/dev/null ; then | ||
|  | 	echo "$0: firmware was not expected to match" >&2 | ||
|  | 	exit 1 | ||
|  | else | ||
|  | 	echo "$0: timeout works" | ||
|  | fi | ||
|  | 
 | ||
|  | # This should succeed via kernel load or will fail after 1 second after | ||
|  | # being handed over to the user helper, which won't find the fw either. | ||
|  | if ! echo -n "$NAME" >"$DIR"/trigger_request ; then | ||
|  | 	echo "$0: could not trigger request" >&2 | ||
|  | 	exit 1 | ||
|  | fi | ||
|  | 
 | ||
|  | # Verify the contents are what we expect. | ||
|  | if ! diff -q "$FW" /dev/test_firmware >/dev/null ; then | ||
|  | 	echo "$0: firmware was not loaded" >&2 | ||
|  | 	exit 1 | ||
|  | else | ||
|  | 	echo "$0: filesystem loading works" | ||
|  | fi | ||
|  | 
 | ||
|  | exit 0 |