#!/bin/sh
#            ipmi_if.sh
# detect IPMI Interface type, usually KCS or SSIF 
#
# Future: also include preferred Driver type on another line
#
# ifdir=/usr/share/ipmiutil
ifdir=/var/lib/ipmiutil
ifout=$ifdir/ipmi_if.txt
dmiout=/tmp/dmi.out.$$

mkdir -p $ifdir
which dmidecode  >/dev/null 2>&1
if [ $? -ne 0 ]
then
   # if no dmidecode, old, so assume KCS 
   echo "Interface type: KCS" >$ifout
   exit 0
fi
dmidecode >$dmiout
# dmidecode |grep IPMI >/dev/null 2>&1
grep IPMI $dmiout >/dev/null 2>&1
if [ $? -ne 0 ]
then
   echo "Interface type: None" >$ifout
   exit 0
fi
iftype=`grep "Interface Type:" $dmiout |cut -f2 -d':'`
echo $iftype |grep KCS >/dev/null 2>&1
if [ $? -eq 0 ]
then
   echo "Interface type: KCS" >$ifout
else
   echo $iftype |grep "OUT OF SPEC" >/dev/null 2>&1
   if [ $? -eq 0 ]
   then
      echo "Interface type: SSIF" >$ifout
   else 
      echo "Interface type: $iftype" >$ifout
   fi
fi
# echo "IPMI `cat $ifout` interface found"

sa=`grep "I2C Slave Address:" $dmiout |cut -f2 -d':'`
echo "I2C Slave Address: $sa" >>$ifout
base=`grep "Base Address:" $dmiout |tail -n1 |cut -f2 -d':'`
echo "Base Address: $base" >>$ifout

spacing=1
spac_str=`grep "Register Spacing:" $dmiout |cut -f2 -d':'`
echo $spac_str | grep "Successive Byte" >/dev/null 2>&1
if [ $? -eq 0 ]; then
   spacing=1
else
   echo $spac_str | grep "32-bit" >/dev/null 2>&1
   if [ $? -eq 0 ]; then
      spacing=4
   else
      spacing=2
   fi
fi
echo "Register Spacing: $spacing" >>$ifout

biosver=`grep "Version: " $dmiout |head -n1 |cut -f2 -d':'`
echo "BIOS Version: $biosver" >>$ifout
exit 0