#!/bin/sh

LSPCI_ACTEL_FILE="lspci_actel.txt"
PCIE_DEVICE_FILE="pcie_device.txt"

lspci -xx >>$PCIE_DEVICE_FILE

sed -n '/Actel/, +4p' $PCIE_DEVICE_FILE >> $LSPCI_ACTEL_FILE

if [ ! -f "$PCIE_DEVICE_FILE" ]
then
	echo "$PCIE_DEVICE_FILE not found"
	exit 1;
fi

if [ ! -f "$LSPCI_ACTEL_FILE" ]
then
	echo "$LSPCI_ACTEL_FILE not found"
	exit 1;
fi

chmod +x $LSPCI_ACTEL_FILE
chmod +x $PCIE_DEVICE_FILE

#echo "PCIe 64 byte Configuration Space Data"

echo -e "  Name\t"    "   Data\t"    "Description"
echo -e "  ----\t"    "   ----\t"    "----------"

#####################00:#########################

PCIE_DATA_00="$(cat $LSPCI_ACTEL_FILE | head -2 | tail -n 1)"
#echo $PCIE_DATA_00

VID0=`echo $PCIE_DATA_00 | cut -d' ' -f2`
VID1=`echo $PCIE_DATA_00 | cut -d' ' -f3`
echo -e "1.VID"  "     0x$VID1$VID0" "\tVendor Id"

DID0=`echo $PCIE_DATA_00 | cut -d' ' -f4`
DID1=`echo $PCIE_DATA_00 | cut -d' ' -f5`
echo -e "2.DID" "     0x$DID1$DID0" "\tDevice ID"

CMD0=`echo $PCIE_DATA_00 | cut -d' ' -f6`
CMD1=`echo $PCIE_DATA_00 | cut -d' ' -f7`
echo -e "3.CMD" "     0x$CMD1$CMD0" "\tCommand"

STS0=`echo $PCIE_DATA_00 | cut -d' ' -f8`
STS1=`echo $PCIE_DATA_00 | cut -d' ' -f9`
echo -e "4.STS" "     0x$STS1$STS0" "\tStatus"

RID_CLCD0=`echo $PCIE_DATA_00 | cut -d' ' -f10`
RID_CLCD1=`echo $PCIE_DATA_00 | cut -d' ' -f11`
echo -e "5.RID_CLCD"   "0x$RID_CLCD1$RID_CLCD0"  "\tRevision ID & Class Code"

SCC=`echo $PCIE_DATA_00 | cut -d' ' -f12`
echo -e "6.SCC"  "     0x$SCC" "\tSub Class Code"

BCC=`echo $PCIE_DATA_00 | cut -d' ' -f13`
echo -e "7.BCC"  "     0x$BCC" "\tBase Class Code"

CALN=`echo $PCIE_DATA_00 | cut -d' ' -f14`
echo -e "8.CALN"  "    0x$CALN" "\tCache Line Size"

LAT=`echo $PCIE_DATA_00 | cut -d' ' -f15`
echo -e "9.LAT" "     0x$LAT" "\tLatency Timer"

HDR=`echo $PCIE_DATA_00 | cut -d' ' -f16`
echo -e "10.HDR" "    0x$HDR" "\tHeader Type"

BIST=`echo $PCIE_DATA_00 | cut -d' ' -f17`
echo -e "11.BIST"  "   0x$BIST" "\tBuilt-in Self Test"

#####################10:#########################

PCIE_DATA_01="$(cat $LSPCI_ACTEL_FILE | head -3 | tail -n 1)"
#echo $PCIE_DATA_01

BADDR0_0=`echo $PCIE_DATA_01 | cut -d' ' -f2`
BADDR0_1=`echo $PCIE_DATA_01 | cut -d' ' -f3`
BADDR0_2=`echo $PCIE_DATA_01 | cut -d' ' -f4`
BADDR0_3=`echo $PCIE_DATA_01 | cut -d' ' -f5`
echo -e "12.BADDR0" " 0x$BADDR0_3$BADDR0_2$BADDR0_1$BADDR0_0" "\tBase Adress 0"

BADDR1_0=`echo $PCIE_DATA_01 | cut -d' ' -f6`
BADDR1_1=`echo $PCIE_DATA_01 | cut -d' ' -f7`
BADDR1_2=`echo $PCIE_DATA_01 | cut -d' ' -f8`
BADDR1_3=`echo $PCIE_DATA_01 | cut -d' ' -f9`
echo -e "13.BADDR1" " 0x$BADDR1_3$BADDR1_2$BADDR1_1$BADDR1_0" "\tBase Adress 1"

BADDR2_0=`echo $PCIE_DATA_01 | cut -d' ' -f10`
BADDR2_1=`echo $PCIE_DATA_01 | cut -d' ' -f11`
BADDR2_2=`echo $PCIE_DATA_01 | cut -d' ' -f12`
BADDR2_3=`echo $PCIE_DATA_01 | cut -d' ' -f13`
echo -e "14.BADDR2" " 0x$BADDR2_3$BADDR2_2$BADDR2_1$BADDR2_0" "\tBase Adress 2"

BADDR3_0=`echo $PCIE_DATA_01 | cut -d' ' -f14`
BADDR3_1=`echo $PCIE_DATA_01 | cut -d' ' -f15`
BADDR3_2=`echo $PCIE_DATA_01 | cut -d' ' -f16`
BADDR3_3=`echo $PCIE_DATA_01 | cut -d' ' -f17`
echo -e "15.BADDR3" " 0x$BADDR3_3$BADDR3_2$BADDR3_1$BADDR3_0" "\tBase Adress 3"

#####################20:#########################

PCIE_DATA_02="$(cat $LSPCI_ACTEL_FILE | head -4 | tail -n 1)"
#echo $PCIE_DATA_02

BADDR4_0=`echo $PCIE_DATA_02 | cut -d' ' -f2`
BADDR4_1=`echo $PCIE_DATA_02 | cut -d' ' -f3`
BADDR4_2=`echo $PCIE_DATA_02 | cut -d' ' -f4`
BADDR4_3=`echo $PCIE_DATA_02 | cut -d' ' -f5`
echo -e "16.BADDR4" " 0x$BADDR4_3$BADDR4_2$BADDR4_1$BADDR4_0" "\tBase Adress 4"

BADDR5_0=`echo $PCIE_DATA_02 | cut -d' ' -f6`
BADDR5_1=`echo $PCIE_DATA_02 | cut -d' ' -f7`
BADDR5_2=`echo $PCIE_DATA_02 | cut -d' ' -f8`
BADDR5_3=`echo $PCIE_DATA_02 | cut -d' ' -f9`
echo -e "17.BADDR5" " 0x$BADDR5_3$BADDR5_2$BADDR5_1$BADDR5_0" "\tBase Adress 5"

CIS_0=`echo $PCIE_DATA_02 | cut -d' ' -f10`
CIS_1=`echo $PCIE_DATA_02 | cut -d' ' -f11`
CIS_2=`echo $PCIE_DATA_02 | cut -d' ' -f12`
CIS_3=`echo $PCIE_DATA_02 | cut -d' ' -f13`
echo -e "18.CIS" "    0x$CIS_3$CIS_2$CIS_1$CIS_0" "\tCardBus CIS Pointer"

SVID_0=`echo $PCIE_DATA_02 | cut -d' ' -f14`
SVID_1=`echo $PCIE_DATA_02 | cut -d' ' -f15`
SDID_0=`echo $PCIE_DATA_02 | cut -d' ' -f16`
SDID_1=`echo $PCIE_DATA_02 | cut -d' ' -f17`
echo -e "19.SVID" "   0x$SVID_1$SVID_0" "\tSub-system Vendor ID"
echo -e "20.SDID" "   0x$SDID_1$SDID_0" "\tSub-System Device ID"

#####################30:#########################

PCIE_DATA_03="$(cat $LSPCI_ACTEL_FILE | head -5 | tail -n 1)"
#echo $PCIE_DATA_03

EROM_0=`echo $PCIE_DATA_03 | cut -d' ' -f2`
EROM_1=`echo $PCIE_DATA_03 | cut -d' ' -f3`
EROM_2=`echo $PCIE_DATA_03 | cut -d' ' -f4`
EROM_3=`echo $PCIE_DATA_03 | cut -d' ' -f5`
echo -e "21.EROM" "   0x$EROM_3$EROM_2$EROM_1$EROM_0" "\tExpansion ROM Base Address"

NEW_CAP=`echo $PCIE_DATA_03 | cut -d' ' -f6`
echo -e "22.NEW_CAP" "0x$NEW_CAP" "\tNew Capabilities Pointer"

INTLN=`echo $PCIE_DATA_03 | cut -d' ' -f14`
INTPIN=`echo $PCIE_DATA_03 | cut -d' ' -f15`
MINGNT=`echo $PCIE_DATA_03 | cut -d' ' -f16`
MAXLAT=`echo $PCIE_DATA_03 | cut -d' ' -f17`
 
echo -e "23.INTLN"  "  0x$INTLN"  "\tInterrupt Line"
echo -e "24.INTPIN" " 0x$INTPIN" "\tInterrupt Pin"
echo -e "25.MINGNT" " 0x$MINGNT" "\tMinimum Required Burst Period"
echo -e "26.MAXLAT" " 0x$MAXLAT" "\tMaximum Latency"

#echo "End"


if [ -f $LSPCI_ACTEL_FILE ]
then
rm -rf $LSPCI_ACTEL_FILE
fi

if [ -f $PCIE_DEVICE_FILE ]
then
rm -rf $PCIE_DEVICE_FILE
fi



