#!/bin/bash
TOP_CMD="$0"

usage()
{
    echo "USAGE : $TOP_CMD start/stop "
}

if [ $# -ne 1 ]; then
    usage
    exit
fi

[ ! -e /dev/lcd3 ] && echo "Error: /dev/lcd3 does not exist, aborting" && exit 1

if [ $1 == "start" ]; then
    modprobe read_sysram
    modprobe xsectctdd xsectcsec_messsage_prot=24
    modprobe tddl sync=1
    /usr/local/xsectcsec/tss/tpcmproxy &
    source /usr/local/xsectcsec/tss/symbol.sh
    sleep 1
    modprobe xsectctcs k_kallsyms_lookup_name=$kallsyms_lookup_name k_do_invalidatepage=$do_invalidatepage
    if [ $? -ne 0 ]; then
        echo "insmod xsectctcs ko error!!!"
        sleep 2
        modprobe xsectctcs k_kallsyms_lookup_name=$kallsyms_lookup_name k_do_invalidatepage=$do_invalidatepage
        if [ $? -ne 0 ]; then
            echo "insmod xsectctcs ko error twice!!!"
            killall tpcmproxy
            kill -9 `pidof tpcmproxy` >/dev/null 2>&1
            rmmod tddl xsectctdd read_sysram
            exit 1
        fi
    fi

    chmod 600 /dev/xsectctcs
    chmod 600 /dev/tcm_ttd
    chmod 600 /dev/tpcm_ttd

elif [ $1 == "stop" ]; then
    rmmod xsectctcs
    killall tpcmproxy
    kill -9 `pidof tpcmproxy` >/dev/null 2>&1
    rmmod tddl
    while true; do
        refcount=`lsmod | grep -E "^xsectctdd" | awk '{print $3}'`
        if [ -z "$refcount" ]; then
            break
        fi
        if [ "$refcount" -ge "1" ]; then
            echo "xsectctdd in use, waiting..."
            sleep 1
        else
            break
        fi
    done
    rmmod xsectctdd
    rmmod read_sysram
else
    usage
    exit
fi
