ASR_BASE

Change-Id: Icf3719cc0afe3eeb3edc7fa80a2eb5199ca9dda1
diff --git a/marvell/swd/tools/CpDumpDecoder/uncprdp.sh b/marvell/swd/tools/CpDumpDecoder/uncprdp.sh
new file mode 100644
index 0000000..36166dd
--- /dev/null
+++ b/marvell/swd/tools/CpDumpDecoder/uncprdp.sh
@@ -0,0 +1,67 @@
+#!/bin/sh
+set -e
+
+peek4()
+{
+    FILE="$1"
+    OFFSET="$2"
+    COUNT="$3"
+    if [ -z "$OFFSET" ]; then
+	OFFSET=0
+    fi
+    if [ -z "$COUNT" ]; then
+	COUNT=1
+    fi
+    dd if="$FILE" bs=4 count=$COUNT skip=$(($OFFSET / 4)) status=none | hexdump -v -e '/4 "%08X\n"'
+}
+
+while [ -n "$1" ]; do
+    BIN="$1"
+    shift
+    MAGIC="$(peek4 "$BIN")"
+    if [ "$MAGIC" != "43504450" ]; then # CPDP
+	echo "$BIN is not a CP ramdump file!"
+	continue
+    fi
+    NR_FILES="$(peek4 "$BIN" 4)"
+    NR_FILES=$((0x$NR_FILES))
+    if [ $NR_FILES -eq 0 ]; then
+	echo "$BIN contains no dump files"
+	continue
+    else
+	echo "$BIN contains $NR_FILES dump files"
+    fi
+    OUTDIR="${BIN%.bin}-unpacked"
+    mkdir -p "$OUTDIR"
+    N=0
+    for I in `seq 0 $(($NR_FILES - 1))`; do
+	OFS=$(($I * 136 + 8))
+	FNAME="$(printf '%s' "$(dd if="$BIN" bs=1 count=128 skip=$OFS status=none)")"
+	OFS=$(($OFS + 128))
+	FILEOFS=$((0x`peek4 "$BIN" $OFS`))
+	OFS=$(($OFS + 4))
+	FILELEN=$((0x`peek4 "$BIN" $OFS`))
+	echo "$I. $FNAME|$FILEOFS|$FILELEN"
+	if [ $FILELEN -ne 0 ]; then
+	    tail -c +$(($FILEOFS + 1)) "$BIN" | head -c $FILELEN > "$OUTDIR/$FNAME"
+	    N=$(($N + 1))
+	fi
+    done
+    echo "$N dump files unpacked under $OUTDIR"
+    BASE="$(basename "$BIN")"
+    SFX="$(echo "$BASE" | sed 's/^COM_DDR_//')"
+    if [ -n "$SFX" -a "$SFX" != "$BASE" ]; then
+	DIR="$(dirname "$BIN")"
+	if [ -e "$OUTDIR/com_DSP_DDR.bin" -o -e "$OUTDIR/com_dsp_ddr.bin" ]; then
+	    rm -fv "$DIR"/*"DSP_DDR_$SFX" "$DIR"/*"dsp_ddr_$SFX"
+	else
+	    mv -v "$DIR"/*"DSP_DDR_$SFX" "$DIR"/*"dsp_ddr_$SFX" "$OUTDIR" || true
+	fi
+	for C in "$DIR"/com_dspdump_*; do
+	    [ -e "$C" ] && mv -v "$C" "$OUTDIR" || true
+	done
+	for C in "$DIR"/com_extra_*; do
+	    [ -e "$C" ] && mv -v "$C" "$OUTDIR" || true
+	done
+    fi
+done