#!/bin/bash

MODALIAS="/lib/modules/`uname -r`/modules.alias"
MODCONF="/etc/modprobe.d/prism2"

get_full_driver_name()
{
    LINE="`grep -m 1 -F \"$1 $2\" $IDS`"
    test -z "$LINE" && exit 1
    echo "$LINE" | cut -f3 -d' '
}

get_any_driver_name()
{
    LINE="`grep -m 1 -F \"$1\" $IDS`"
    test -z "$LINE" && exit 1
    echo "$LINE" | cut -f3 -d' '
}

switch_to()
{
    test -f $MODALIAS || { echo "Could not open $MODALIAS" ; exit 1 ; }
    IDS="`mktemp /tmp/prism2_ids.XXXXXX || exit 1`"
    grep -E '(prism2_(cs|pc.))|hostap|orinoco' "$MODALIAS" > $IDS

    cat > $MODCONF <<EOF
blacklist hostap_cs
blacklist hostap_pci
blacklist hostap_plx
blacklist orinoco_cs
blacklist orinoco_pci
blacklist orinoco_plx
blacklist prism2_cs
blacklist prism2_pci
EOF

    while read ID ; do
	#echo "blacklist $ID"
	DRV="`get_full_driver_name $ID $1`"
	if [ -z "$DRV" ]; then
	    # device is not handled by wanted driver
	    test -n "$DEBUG" && echo "Device $ID not handled by $1" >&2
	    DRV="`get_any_driver_name $ID`"
	fi
	test -n "$DEBUG" && echo "Installing driver $DRV for device $ID" >&2
	echo "alias $ID $DRV"
    done < <( cut -f2 -d' ' $IDS | sort | uniq ) >> $MODCONF

    rm -r $IDS
}

case "$1" in
    prism|wlan-ng|wlanng|prism_cs)
	switch_to prism2
	;;
    hostap|hostap_cs)
	switch_to hostap
	;;
    orinoco|orinoco_cs)
	switch_to orinoco
	;;
    *)
	echo "Usage: $0 hostap|orinoco|wlan-ng" >&2
	exit 1
	;;
esac

exit 0
