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