#!/bin/bash
# Scan the /lib/firmware directory of the target and delete any firmware
# binaries that are not in our whitelist

# A whitelist of entire directories or specific binary files. The trailing
# slash is required.
whitelist=(     'acenic/'
                'bnx2/'
                'bnx2x/bnx2x-e2-7.13.1.0.fw'
                'cxgb4/t4fw-1.16.63.0.bin'
                'cxgb4/t4fw.bin'
                'cxgb3/'
                'e100/'
                'ql2500_fw.bin'
                'radeon/CEDAR_rlc.bin'
                'radeon/CEDAR_pfp.bin'
                'radeon/CEDAR_smc.bin'
                'radeon/CEDAR_me.bin'
                'radeon/CYPRESS_uvd.bin')

if [ -z "${TARGET_DIR}" ] ; then
        echo "TARGET_DIR not defined, setting to $1"
        TARGET_DIR=$1
fi

files=$(find ${TARGET_DIR}/lib/firmware/*)
for file in ${files};
do
        if [ -d  $file ] ; then
                continue
        fi

        found=0
        for item in ${whitelist[@]};
        do
                if [ "${file/${item}}" != "${file}" ] ; then
                        found=1
                        break
                fi
        done

        if [ "${found}" -ne "1" ] ; then
                rm -v ${file}
        fi
done
