#!/bin/sh
set -e

if [ -z "$DESTDIR" ]; then
	echo "DESTDIR variable is missing!"
	exit 1
fi

# Copy over firmware files from windows installation
mkdir /windows
mount /dev/disk/by-label/Windows /windows -t ntfs3 -r
function umount_windows() {
	umount /windows
	rmdir /windows
}
trap umount_windows EXIT

FW_PATH="$DESTDIR/lib/firmware/"

GPU_PATH="$(cat /sys/firmware/devicetree/base/soc\@0/gpu\@3d00000/zap-shader/firmware-name)"
GPU_NAME="$(basename $GPU_PATH)"

ADSP_PATH1="$(cat /sys/firmware/devicetree/base/soc\@0/remoteproc\@30000000/firmware-name | tr -s '\0' '\n' | head -n1)"
ADSP_NAME1="$(basename $ADSP_PATH1)"

ADSP_PATH2="$(cat /sys/firmware/devicetree/base/soc\@0/remoteproc\@30000000/firmware-name | tr -s '\0' '\n' | tail -n1)"
ADSP_NAME2="$(basename $ADSP_PATH2)"

CDSP_PATH1="$(cat /sys/firmware/devicetree/base/soc\@0/remoteproc\@32300000/firmware-name | tr -s '\0' '\n' | head -n1)"
CDSP_NAME1="$(basename $CDSP_PATH1)"

CDSP_PATH2="$(cat /sys/firmware/devicetree/base/soc\@0/remoteproc\@32300000/firmware-name | tr -s '\0' '\n' | tail -n1)"
CDSP_NAME2="$(basename $CDSP_PATH2)"

function file_repo_path() {
	find /windows/Windows/System32/DriverStore/FileRepository/ -name "$1" -exec ls -t {} + | head -n1
}

function copy_fw() {
	local name="$1"
	local target="$2"
	local src=

	mkdir -p "$(dirname "$target")"
	src="$(file_repo_path "$name")"

	echo "Copying $src to $target"
	cp "$src" "$target"
}

copy_fw "$GPU_NAME" "$FW_PATH/$GPU_PATH"
copy_fw "$ADSP_NAME1" "$FW_PATH/$ADSP_PATH1"
copy_fw "$ADSP_NAME2" "$FW_PATH/$ADSP_PATH2"
copy_fw "$CDSP_NAME1" "$FW_PATH/$CDSP_PATH1"
copy_fw "$CDSP_NAME2" "$FW_PATH/$CDSP_PATH2"

BT_FIRMWARES='hmtbtfw20.tlv hmtnv20.b112'
BT_FIRMWARE_PATHS=""

for FW in $BT_FIRMWARES; do
	BT_FIRMWARE_PATHS="$BT_FIRMWARE_PATHS $(find /windows/Windows/System32/DriverStore/FileRepository/ -name $FW -exec ls -t {} + | head -n1)"
done

mkdir -p "$DESTDIR/lib/firmware/qca"
for FILE in $BT_FIRMWARE_PATHS; do
	echo "Copying $FILE to $DESTDIR/lib/firmware/qca/"
	cp "$FILE" "$DESTDIR/lib/firmware/qca/"
done
