#! /bin/bash

cd /etc/sysconfig/isdn
. scripts/functions

CARDTYP=$1
shift
MODELNR=$1
shift
CONTR_FILES=""
for c in cfg-contr* ; do 
  case $c in 
    *~*|*.*) 
      # drop backup files, rpm{save,new,orig}
      ;;
    cfg-contr\*)
      # no files
      ;;
    *)
      CONTR_FILES="$CONTR_FILES $c"
      ;;
  esac
done

FIRMWARE="-"
SCRIPT=""
DRV=""
DRV_CS=""

case "$CARDTYP" in
	"sedlbauer")
		SCRIPT=hisaxpcmcia
		DRV="hisax"
		DRV_CS="sedlbauer_cs"
		;;
	"elsa")
		SCRIPT=hisaxpcmcia
		DRV="hisax"
		DRV_CS="elsa_cs"
		;;
	"teles")
		SCRIPT=hisaxpcmcia
		DRV="hisax"
		DRV_CS="teles_cs"
		;;
	"a1")
		SCRIPT=hisaxpcmcia
		DRV="hisax"
		DRV_CS="avma1_cs"
		;;
	"b1")
		SCRIPT=b1pcmcia
		DRV="b1pcmcia"
		DRV_CS="avm_cs"
		FIRMWARE="b1"
		;;
	*) # unknown card
		echo "unknown ISDN PCMCIA CARD $CARDTYP"
		exit 1
esac

FOUND=no
test -n "$CONTR_FILES" && for CF in $CONTR_FILES; do
    DRIVER=""
    CONTR=${CF#cfg-}
    . $CF
    if [ "$DRV" = "$DRIVER" ]; then
	FOUND=yes
	break
    elif [ "generic_pcmcia" = "$DRIVER" ]; then
	FOUND=generic
	break
    elif [ "$DRV" = "hisax" -a "$DRV_CS" = "avma1_cs" -a "$DRIVER" = "fcpcmcia" ]; then
    	FOUND=yes
    	SCRIPT=fcpcmcia
    	DRV="fcpcmcia"
    	DRV_CS="fcpcmcia_cs"
    else
	continue
    fi
done


case "$ACTION" in
    add)
	if [ "$FOUND" = "no" ]; then
	    echo "no setup for driver $DRV found using defaults" 
	    CONTR=""
	fi
	if [ -x scripts/load-${SCRIPT} ]; then
	    . scripts/load-${SCRIPT}
	else
	    echo "script load-${SCRIPT} not available"
	    exit 1
	fi
	;;
    remove)
	IDX=0
	test -r /var/run/pcmcia_isdn_${MODALIAS}.idx && \
		IDX=`cat /var/run/pcmcia_isdn_${MODALIAS}.idx`
	rm -f /var/run/pcmcia_isdn_${MODALIAS}.idx
	CONTR=${CONTR:-contr$IDX}
	echo "unloading isdn $CONTR"
	kill_isdnlog $CONTR
	DIDX=$(($IDX * 2))
	fuser -k /dev/isdnctrl${DIDX}
	sleep 1
	fuser -k /dev/isdninfo
	sleep 1
	if [ -x scripts/stop-${SCRIPT} ]; then
	    . scripts/stop-${SCRIPT}
	else
	    echo "script stop-${SCRIPT} not available"
	    exit 1
	fi
	;;
esac

