#!/bin/sh
#
#ident	"@(#)postinstall	1.6	08/01/15 SMI"
#
# Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
# Use is subject to license terms.
#

PATH="/usr/bin:/usr/sbin:$PATH"; export PATH

# Driver definitions
DRVR_NAME=emlxs
DRVR_PERM="-m '* 0600 root sys'"
DRVR_CLASS="-c fibre-channel"
ALIAS_FILE=/etc/driver_aliases
HARDWARE_STRING="emlxs"

SUPPORT_LIST="\
	pci10df,f0a5 \
	pci10df,f800 \
	pci10df,f900 \
	pci10df,f980 \
	pci10df,fa00 \
	pci10df,fc00 \
	pci10df,fc10 \
	pci10df,fc20 \
	pci10df,fd00 \
	pci10df,fe00 \
	pciex10df,f100 \
	pciex10df,f111 \
	pciex10df,f112 \
	pciex10df,fc20 \
	pciex10df,fc40 \
	pciex10df,fe00 \
	pciex10df,fe05 \
	lpfs \
	"

CheckAlias()
{
	DRIVER=$1
	PCI_STRING=$2
	
	grep "^${DRIVER}[ 	]\"*${PCI_STRING}\"*" ${BASEDIR}${ALIAS_FILE} > /dev/null 2>&1
	STATUS=$?
	return $STATUS
}

GenerateSupportList()
{
	LPFC_DRVR=lpfc
	GEN_LIST=""
	
	for HBA in ${SUPPORT_LIST}
	do
		CheckAlias ${LPFC_DRVR} ${HBA}
		if [ $STATUS -ne 0 ]; then
			if [ -z "${GEN_LIST}" ]; then
				GEN_LIST="\"$HBA\""
			else
				GEN_LIST="${GEN_LIST} \"$HBA\""
			fi
			HARDWARE_STRING="${HARDWARE_STRING}|${HBA}"
		fi
	done
}

GenerateSupportList

DRVR_ALIASES="-i '${GEN_LIST}'"

if [ -z "${BASEDIR}" ]; then
	echo "\n$0 Failed: BASEDIR is not set.\n" >&2
	exit 1
fi

# Remove existing definition, if it exists. 
/usr/sbin/rem_drv -b "${BASEDIR}" ${DRVR_NAME} > /dev/null 2>&1

# Check for hardware
if [ "${BASEDIR}" = "/" ]; then
	prtconf -pv | egrep "${HARDWARE_STRING}" > /dev/null 2>&1
	if [ $? -eq 0 ]; then
		# Hardware is present, attach the drivers
		ADD_DRV="add_drv -b ${BASEDIR}"
	else
		# No hardware found on the system
		ADD_DRV="add_drv -n -b ${BASEDIR}"
	fi
else
	ADD_DRV="add_drv -n -b ${BASEDIR}"
fi

eval ${ADD_DRV} "${DRVR_PERM}" ${DRVR_CLASS} "${DRVR_ALIASES}" ${DRVR_NAME}
STATUS=$?
if [ $STATUS -ne 0 ]; then
	echo "\nCommand Failed:" >&2
	echo "\t${ADD_DRV} "${DRVR_PERM}" ${DRVR_CLASS} "${DRVR_ALIASES}" ${DRVR_NAME}\n" >&2
	echo "\tReturned: $STATUS" >&2
	exit 1
fi

exit 0
