#!/bin/sh

# This will output a list of template bootrr rules for the
# current system based on what is currently found in sysfs.  Some
# editing will be required for usability and maintainability,
# this is just a helper to get started.

ncpus=$(cat /proc/cpuinfo | grep ^processor | wc -l)
max_cpu=$(expr ${ncpus} - 1)

if [ -f /sys/devices/system/cpu/cpu0/cpufreq/scaling_driver ]; then
	echo assert_cpufreq_enabled cpufreq-enabled ${max_cpu}
fi
if [ -f /sys/devices/system/cpu/cpuidle/current_driver ]; then
	echo assert_cpuidle_enabled cpuidle-enabled ${max_cpu}
fi

# Find drivers with bound devices
for driver_path in /sys/bus/*/drivers/* ; do
	devs=$(find "$driver_path" -type l -printf "\"%p\" " |
		grep -v module$)
	if [ "${devs}" = "" ]; then
		continue
	fi

	driver="$(basename "$driver_path")"

	# Check for the driver
	echo assert_driver_present \"${driver}-driver-present\" \"${driver}\"

	# Check for each instance of the driver
	find "$driver_path" -type l | grep -v module$ | while read -r dev ; do
		d=$(cd ${dev} ; pwd -P | sed s,.*/,,)
		echo assert_device_present ${d}-probed \"${driver}\" ${d}
	done

	echo
done

# Sound card display names are symbolic links to their numbered
# directories
for card in $(find /proc/asound -type l | sed s,/proc/asound/,,g) ; do
	# Check for the first playback and capture PCM only for
	# now
	if [ -d /proc/asound/${card}/pcm0p ]; then
		echo assert_soundcard_present ${card}-playback ${card} pcm0p
	fi
	if [ -d /proc/asound/${card}/pcm0c ]; then
		echo assert_soundcard_present ${card}-capture ${card} pcm0c
	fi
done
