#!/bin/sh tool_path=../../tools logdir=/tmp if [ $# -lt 9 ]; then echo -ne "$0
" echo " [data file]" echo -e "\t: log test into dmesg" echo -e "\t: read data back and compare" echo -e "\t: dma transfer size" echo -e "\t
: " echo -e "\t: " echo -e "\t: xdma" echo -e "\t: dma h2c channel #, 0-based" echo -e "\t\tif >= 4, no traffic will be ran" echo -e "\t: dma c2h channel #, 0-based" echo -e "\t if channel # >= 4 NO dma will be performed" echo -e "\t\tif >= 4, no traffic will be ran" echo -e "\t: temp. log directory" echo -e "\t[data file]: data file, size >= io size, " echo -e "\t optional if =0" exit fi dmesg=$1 data_check=$2 sz=$3 address=$4 offset=$5 xid=$6 h2cno=$7 c2hno=$8 logdir=$9 if [ $# -gt 9 ]; then datafile=${10} fi if [ ! -d "$logdir" ]; then mkdir -p $logdir fi echo -en "\n===>$0 $xid, channel $h2cno:$c2hno, io $sz, addr $address, " echo "off $offset, data: $datafile, integrity $data_check, dmesg $dmesg." if [ "$h2cno" -ge 4 ] && [ "$c2hno" -ge 4 ]; then echo "$0: NO valid dma channel $h2cno:$c2hno" exit 1 fi h2c_cmd="$tool_path/dma_to_device -d /dev/${xid}_h2c_${h2cno}" c2h_cmd="$tool_path/dma_from_device -d /dev/${xid}_c2h_${c2hno}" if [ "$address" -ne "0" ]; then h2c_cmd="$h2c_cmd -a $address" c2h_cmd="$c2h_cmd -a $address" fi if [ "$offset" -ne "0" ]; then h2c_cmd="$h2c_cmd -o $offset" c2h_cmd="$c2h_cmd -o $offset" fi if [ "$data_check" -ne 0 ]; then if [ -z "$datafile" ]; then echo "no datafile specified" exit 2 fi if [ ! -s "$datafile" ]; then echo "missing datafile: $datafile ..." exit 3 fi h2c_fname="$logdir/$xid-h2c${h2cno}-io$sz-o$offset-a$address.bin" rm -f $h2c_fname h2c_cmd="$h2c_cmd -f $datafile -w $h2c_fname" c2h_fname="$logdir/$xid-c2h${c2hno}-io$sz-o$offset-a$address.bin" rm -f $c2h_fname c2h_cmd="$c2h_cmd -f $c2h_fname" fi if [ "$h2cno" -lt 4 ]; then if [ "$dmesg" -ne "0" ]; then echo "$h2c_cmd -s $sz -c 1" > /dev/kmsg fi echo "$h2c_cmd -s $sz -c 1 ..." > \ ${logdir}/h2c-io${sz}-o${offset}-a${address}.log out=`$h2c_cmd -s $sz -c 1` echo $out >> ${logdir}/h2c-io${sz}-o${offset}-a${address}.log if [ "$?" -ne "0" ]; then echo -e "\tH2C${h2cno}: io $sz, ERROR $?." exit 4 fi fi if [ "$c2hno" -lt 4 ]; then if [ "$dmesg" -ne "0" ]; then echo "$c2h_cmd -s $sz -c 1 ..." > /dev/kmsg fi echo "$c2h_cmd -s $sz -c 1 ..." > \ ${logdir}/c2h-io${sz}-o${offset}-a${address}.log out=`./$c2h_cmd -s $sz -c 1` echo $out >> ${logdir}/c2h-io${sz}-o${offset}-a${address}.log if [ "$?" -ne "0" ]; then echo -e "\tC2H$channel: io $sz, ERROR $?." exit 5 fi fi if [ "$data_check" -eq 0 ]; then # no data integrity check needs to be done exit 0 fi #md5sum $c2h_fname #md5sum $h2c_fname diff -q $c2h_fname $h2c_fname > /dev/null if [ "$?" -eq "1" ]; then echo -e "\t$xid $h2cno:$c2hno: io $sz, addr $address, off $offset," \ "data integrity FAILED!." exit 6 fi echo -e "\t$xid $h2cno:$c2hno: io $sz, addr $address, off $offset, data match." rm -f $c2h_fname $h2c_fname exit 0