129a1c00cSLuis R. Rodriguez#!/bin/bash 229a1c00cSLuis R. Rodriguez# SPDX-License-Identifier: GPL-2.0 329a1c00cSLuis R. Rodriguez 429a1c00cSLuis R. Rodriguez# Library of helpers for test scripts. 529a1c00cSLuis R. Rodriguezset -e 629a1c00cSLuis R. Rodriguez 729a1c00cSLuis R. RodriguezDIR=/sys/devices/virtual/misc/test_firmware 829a1c00cSLuis R. Rodriguez 929a1c00cSLuis R. RodriguezPROC_CONFIG="/proc/config.gz" 1029a1c00cSLuis R. RodriguezTEST_DIR=$(dirname $0) 1129a1c00cSLuis R. Rodriguez 1229a1c00cSLuis R. Rodriguezprint_reqs_exit() 1329a1c00cSLuis R. Rodriguez{ 1429a1c00cSLuis R. Rodriguez echo "You must have the following enabled in your kernel:" >&2 1529a1c00cSLuis R. Rodriguez cat $TEST_DIR/config >&2 1629a1c00cSLuis R. Rodriguez exit 1 1729a1c00cSLuis R. Rodriguez} 1829a1c00cSLuis R. Rodriguez 1929a1c00cSLuis R. Rodrigueztest_modprobe() 2029a1c00cSLuis R. Rodriguez{ 2129a1c00cSLuis R. Rodriguez if [ ! -d $DIR ]; then 2229a1c00cSLuis R. Rodriguez print_reqs_exit 2329a1c00cSLuis R. Rodriguez fi 2429a1c00cSLuis R. Rodriguez} 2529a1c00cSLuis R. Rodriguez 2629a1c00cSLuis R. Rodriguezcheck_mods() 2729a1c00cSLuis R. Rodriguez{ 2829a1c00cSLuis R. Rodriguez trap "test_modprobe" EXIT 2929a1c00cSLuis R. Rodriguez if [ ! -d $DIR ]; then 3029a1c00cSLuis R. Rodriguez modprobe test_firmware 3129a1c00cSLuis R. Rodriguez fi 3229a1c00cSLuis R. Rodriguez if [ ! -f $PROC_CONFIG ]; then 3329a1c00cSLuis R. Rodriguez if modprobe configs 2>/dev/null; then 3429a1c00cSLuis R. Rodriguez echo "Loaded configs module" 3529a1c00cSLuis R. Rodriguez if [ ! -f $PROC_CONFIG ]; then 3629a1c00cSLuis R. Rodriguez echo "You must have the following enabled in your kernel:" >&2 3729a1c00cSLuis R. Rodriguez cat $TEST_DIR/config >&2 3829a1c00cSLuis R. Rodriguez echo "Resorting to old heuristics" >&2 3929a1c00cSLuis R. Rodriguez fi 4029a1c00cSLuis R. Rodriguez else 4129a1c00cSLuis R. Rodriguez echo "Failed to load configs module, using old heuristics" >&2 4229a1c00cSLuis R. Rodriguez fi 4329a1c00cSLuis R. Rodriguez fi 4429a1c00cSLuis R. Rodriguez} 45ef557787SLuis R. Rodriguez 46*f5a61451SLuis R. Rodriguezcheck_setup() 47*f5a61451SLuis R. Rodriguez{ 48*f5a61451SLuis R. Rodriguez HAS_FW_LOADER_USER_HELPER="$(kconfig_has CONFIG_FW_LOADER_USER_HELPER=y)" 49*f5a61451SLuis R. Rodriguez HAS_FW_LOADER_USER_HELPER_FALLBACK="$(kconfig_has CONFIG_FW_LOADER_USER_HELPER_FALLBACK=y)" 50*f5a61451SLuis R. Rodriguez 51*f5a61451SLuis R. Rodriguez if [ "$HAS_FW_LOADER_USER_HELPER" = "yes" ]; then 52*f5a61451SLuis R. Rodriguez OLD_TIMEOUT="$(cat /sys/class/firmware/timeout)" 53*f5a61451SLuis R. Rodriguez fi 54*f5a61451SLuis R. Rodriguez 55*f5a61451SLuis R. Rodriguez OLD_FWPATH="$(cat /sys/module/firmware_class/parameters/path)" 56*f5a61451SLuis R. Rodriguez} 57*f5a61451SLuis R. Rodriguez 58*f5a61451SLuis R. Rodriguezverify_reqs() 59*f5a61451SLuis R. Rodriguez{ 60*f5a61451SLuis R. Rodriguez if [ "$TEST_REQS_FW_SYSFS_FALLBACK" = "yes" ]; then 61*f5a61451SLuis R. Rodriguez if [ ! "$HAS_FW_LOADER_USER_HELPER" = "yes" ]; then 62*f5a61451SLuis R. Rodriguez echo "usermode helper disabled so ignoring test" 63*f5a61451SLuis R. Rodriguez exit 0 64*f5a61451SLuis R. Rodriguez fi 65*f5a61451SLuis R. Rodriguez fi 66*f5a61451SLuis R. Rodriguez} 67*f5a61451SLuis R. Rodriguez 68*f5a61451SLuis R. Rodriguezsetup_tmp_file() 69*f5a61451SLuis R. Rodriguez{ 70*f5a61451SLuis R. Rodriguez FWPATH=$(mktemp -d) 71*f5a61451SLuis R. Rodriguez FW="$FWPATH/test-firmware.bin" 72*f5a61451SLuis R. Rodriguez echo "ABCD0123" >"$FW" 73*f5a61451SLuis R. Rodriguez NAME=$(basename "$FW") 74*f5a61451SLuis R. Rodriguez if [ "$TEST_REQS_FW_SET_CUSTOM_PATH" = "yes" ]; then 75*f5a61451SLuis R. Rodriguez echo -n "$FWPATH" >/sys/module/firmware_class/parameters/path 76*f5a61451SLuis R. Rodriguez fi 77*f5a61451SLuis R. Rodriguez} 78*f5a61451SLuis R. Rodriguez 79*f5a61451SLuis R. Rodrigueztest_finish() 80*f5a61451SLuis R. Rodriguez{ 81*f5a61451SLuis R. Rodriguez if [ "$HAS_FW_LOADER_USER_HELPER" = "yes" ]; then 82*f5a61451SLuis R. Rodriguez echo "$OLD_TIMEOUT" >/sys/class/firmware/timeout 83*f5a61451SLuis R. Rodriguez fi 84*f5a61451SLuis R. Rodriguez if [ "$OLD_FWPATH" = "" ]; then 85*f5a61451SLuis R. Rodriguez OLD_FWPATH=" " 86*f5a61451SLuis R. Rodriguez fi 87*f5a61451SLuis R. Rodriguez if [ "$TEST_REQS_FW_SET_CUSTOM_PATH" = "yes" ]; then 88*f5a61451SLuis R. Rodriguez echo -n "$OLD_FWPATH" >/sys/module/firmware_class/parameters/path 89*f5a61451SLuis R. Rodriguez fi 90*f5a61451SLuis R. Rodriguez if [ -f $FW ]; then 91*f5a61451SLuis R. Rodriguez rm -f "$FW" 92*f5a61451SLuis R. Rodriguez fi 93*f5a61451SLuis R. Rodriguez if [ -d $FWPATH ]; then 94*f5a61451SLuis R. Rodriguez rm -rf "$FWPATH" 95*f5a61451SLuis R. Rodriguez fi 96*f5a61451SLuis R. Rodriguez} 97*f5a61451SLuis R. Rodriguez 98ef557787SLuis R. Rodriguezkconfig_has() 99ef557787SLuis R. Rodriguez{ 100ef557787SLuis R. Rodriguez if [ -f $PROC_CONFIG ]; then 101ef557787SLuis R. Rodriguez if zgrep -q $1 $PROC_CONFIG 2>/dev/null; then 102ef557787SLuis R. Rodriguez echo "yes" 103ef557787SLuis R. Rodriguez else 104ef557787SLuis R. Rodriguez echo "no" 105ef557787SLuis R. Rodriguez fi 106ef557787SLuis R. Rodriguez else 107ef557787SLuis R. Rodriguez # We currently don't have easy heuristics to infer this 108ef557787SLuis R. Rodriguez # so best we can do is just try to use the kernel assuming 109ef557787SLuis R. Rodriguez # you had enabled it. This matches the old behaviour. 110ef557787SLuis R. Rodriguez if [ "$1" = "CONFIG_FW_LOADER_USER_HELPER_FALLBACK=y" ]; then 111ef557787SLuis R. Rodriguez echo "yes" 112ef557787SLuis R. Rodriguez elif [ "$1" = "CONFIG_FW_LOADER_USER_HELPER=y" ]; then 113ef557787SLuis R. Rodriguez if [ -d /sys/class/firmware/ ]; then 114ef557787SLuis R. Rodriguez echo yes 115ef557787SLuis R. Rodriguez else 116ef557787SLuis R. Rodriguez echo no 117ef557787SLuis R. Rodriguez fi 118ef557787SLuis R. Rodriguez fi 119ef557787SLuis R. Rodriguez fi 120ef557787SLuis R. Rodriguez} 121