#!/bin/sh
#
# Setup Marvell Switch for x86 PCI access
#

function load_and_setup_marvell_switch() {

    # Insert the uio_pci_proxy kernel module
    modprobe uio_pci_proxy >/dev/null 2>&1

    #Setting up Marvell Aldrin switches
    if [[ ! -z `lspci -n -d 0x11ab:0xc81d` ]]
    then
        echo "Setting up Marvell Aldrin 16-port switch"
        echo "11ab c81d" > /sys/bus/pci/drivers/pci_proxy/new_id
        echo "done."
    fi
    
    if [[ ! -z `lspci -n -d 0x11ab:0xc81e` ]]
    then
        echo "Setting up Marvell Aldrin 24-port switch"
        echo "11ab c81e" > /sys/bus/pci/drivers/pci_proxy/new_id
        echo "done."
    fi

    if [[ ! -z `lspci -n -d 0x11ab:0xc81f` ]]
    then
        echo "Setting up Marvell Aldrin 32-port switch"
        echo "11ab c81f" > /sys/bus/pci/drivers/pci_proxy/new_id
        echo "done."
    fi

    # Setup the uio_dma_proxy kernel module
    if [[ -z `lsmod | grep uio_dma_proxy` ]]
    then
        modprobe uio_dma_proxy
    fi
}

function unload_marvell_switch() {
    if [[ ! -z `lspci -n -d 0x11ab:0xc81d` ]]
    then
        echo "Removing Marvell Aldrin 16-port switch"
        echo "11ab c81d" > /sys/bus/pci/drivers/pci_proxy/remove_id
        echo "done."
    fi
    
    if [[ ! -z `lspci -n -d 0x11ab:0xc81e` ]]
    then
        echo "Removing Marvell Aldrin 24-port switch"
        echo "11ab c81e" > /sys/bus/pci/drivers/pci_proxy/remove_id
        echo "done."
    fi

    if [[ ! -z `lspci -n -d 0x11ab:0xc81f` ]]
    then
        echo "Removing Marvell Aldrin 32-port switch"
        echo "11ab c81f" > /sys/bus/pci/drivers/pci_proxy/remove_id
        echo "done."
    fi
}

case "$1" in
start)
    load_and_setup_marvell_switch
    ;;

stop)
    unload_marvell_switch
    ;;

force-reload|restart)
    echo "Not supported"
    ;;

*)
    echo "Usage: /usr/local/etc/setup-marvell-switch {start|stop}"
    exit 1
    ;;
esac

exit 0
