#
# Functions for a PCI device
#				Shuu Yamaguchi <shuu@dotAster.com>
# $Id: pci_functions,v 1.3 2004/03/03 22:22:12 shuu Exp shuu $

. ${MURASAKI_SCRIPT_DIR}/func_log

# print the requested value on sysfs
get_pci_field_sysfs() {
	case "$1" in
	vendor)
		FILE="vendor"
		;;
	device)
		FILE="device"
		;;
	subvendor)
		FILE="subsystem_vendor"
		;;
	subdevice)
		FILE="subsystem_device"
		;;
	esac
	if [ -r ${SYSFS_DIR}${DEVPATH}/${FILE} ];then
		cat ${SYSFS_DIR}${DEVPATH}/${FILE} | sed 's/^0x//'
	else
		echo ""
	fi
}

# print the requested value from an environment value
get_pci_field() {
	case "$1" in 
	vendor)
		FIELD=$PCI_ID
		FIELD_NUM=1
		;;
	device)
		FIELD=$PCI_ID
		FIELD_NUM=2
		;;
	subvendor)
		FIELD=$PCI_SUBSYS_ID
		FIELD_NUM=1
		;;
	subdevice)
		FIELD=$PCI_SUBSYS_ID
		FIELD_NUM=2
		;;
	esac
	echo $FIELD | cut -f $FIELD_NUM -d ':' | tr '[A-F]' '[a-f]'
}

# print the requested value from both SYSFS and an environment value
get_pci_val() {
	if [ -n "$DEVPATH" ];then
		. ${MURASAKI_SCRIPT_DIR}/func_sysfs
		get_sysfs
		if [ -z "$SYSFS_DIR" ];then
			log "daemon.err" "murasaki:get_pci_val" "SYSFS is Not mounted."
		fi
		get_pci_field_sysfs $1
	else
		get_pci_field $1
	fi
}

# PCI_VENDOR
get_pci_vendor() {
	PCI_VENDOR=`get_pci_val "vendor"`
}

# PCI_DEVICE
get_pci_device() {
	PCI_DEVICE=`get_pci_val "device"`
}

# PCI_SUBVENDOR
get_pci_subvendor() {
	PCI_SUBVENDOR=`get_pci_val "subvendor"`
}

# PCI_SUBDEVICE
get_pci_subdevice() {
	PCI_SUBDEVICE=`get_pci_val "subdevice"`
}
