#!/bin/sh /etc/rc.common
#
# Copyright (c) 2018 Qualcomm Technologies, Inc.
# All Rights Reserved.
# Confidential and Proprietary - Qualcomm Technologies, Inc.
#
# Copyright (c) 2017 The Linux Foundation. All rights reserved.
# Permission to use, copy, modify, and/or distribute this software for any
# purpose with or without fee is hereby granted, provided that the above
# copyright notice and this permission notice appear in all copies.
#
# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.

START=00
STOP=95
mount_wifi_fw (){
        local emmc_part=""
        local nand_part=""
        local nor_part=""
	local primaryboot=""
	local part_name="0:WIFIFW"

        primaryboot=$(cat /proc/boot_info/$part_name/primaryboot)
        if [ $primaryboot -eq 1 ]; then
                part_name="0:WIFIFW_1"
        fi
        emmc_part=$(find_mmc_part $part_name 2> /dev/null)
        nor_part=$(cat /proc/mtd | grep WIFIFW | awk '{print $1}' | sed 's/:$//')
        local nor_flash=`find /sys/bus/spi/devices/*/mtd -name ${nor_part}`
        nand_part=$(find_mtd_part $part_name 2> /dev/null)
        mkdir -p /lib/firmware/IPQ8074/WIFI_FW

        if [ -n "$emmc_part" ]; then
                /bin/mount -t squashfs $emmc_part /lib/firmware/IPQ8074/WIFI_FW > /dev/console 2>&1
		[ -f /rom/lib/firmware/IPQ8074/WIFI_FW/q6_fw.mdt ] && cp /rom/lib/firmware/IPQ8074/WIFI_FW/*.* /lib/firmware/IPQ8074/WIFI_FW/
        elif [ -n "$nor_flash" ]; then
                local nor_mtd_part=$(find_mtd_part $part_name 2> /dev/null)
                /bin/mount -t squashfs $nor_mtd_part /lib/firmware/IPQ8074/WIFI_FW > /dev/console 2>&1
        elif [ -n "$nand_part" ]; then
				# check p5 wifi f/w (_DRAYTEK_PATCH)
				check_qca_wifi_fw

                local PART=$(grep -w  "WIFIFW" /proc/mtd | awk -F: '{print $1}')
                ubiattach -p /dev/$PART
                sync
                local ubi_part=$(find_mtd_part wifi_fw 2> /dev/null)
                /bin/mount -t squashfs $ubi_part /lib/firmware/IPQ8074/WIFI_FW > /dev/console 2>&1
				if [ ! -f /lib/firmware/IPQ8074/WIFI_FW/q6_fw.mdt ]; then
					echo " WIFI FW mount failure 1" > /dev/console 2>&1
					echo "" > /tmp/wifi_fw_mount_failure_1 2>&1
					local PART=$(grep -w  "WIFIFW" /proc/mtd | awk -F: '{print $1}')
					ubidetach -p /dev/$PART
					mtd erase /dev/$PART
					check_qca_wifi_fw
					ubiattach -p /dev/$PART
					local ubi_part=$(find_mtd_part wifi_fw 2> /dev/null)
					/bin/mount -t squashfs $ubi_part /lib/firmware/IPQ8074/WIFI_FW > /dev/console 2>&1
				fi
        fi
	if [ -f /lib/firmware/IPQ8074/WIFI_FW/q6_fw.mdt ]; then
            echo " WIFI FW mount is successful" > /dev/console 2>&1
	else
		echo " WIFI FW mount failure 2" > /dev/console 2>&1
		echo "" > /tmp/wifi_fw_mount_failure_2 2>&1
	fi
	cd  /lib/firmware/IPQ8074 && ln -sf WIFI_FW/*.* .
	. /lib/read_caldata_to_fs.sh
	do_load_ipq4019_board_bin

    mkdir -p /vendor/firmware
	if [ -f /lib/firmware/IPQ8074/WIFI_FW/Data.msc ]; then
		mv /lib/firmware/IPQ8074/WIFI_FW/Data.msc /vendor/firmware
	fi

}

boot() {
 . /lib/functions/system.sh
        local hk_board=$(grep -w  "IPQ807x" /proc/device-tree/model | awk -F: '{print $1}')

        if [ -n "$hk_board" ]; then
                mount_wifi_fw
        fi

}

stop() {
	local emmc_part=""
        local nand_part=""
        local nor_part=""
        local primaryboot=""
        local part_name="0:WIFIFW"

        primaryboot=$(cat /proc/boot_info/$part_name/primaryboot)
        if [ $primaryboot -eq 1 ]; then
                part_name="0:WIFIFW_1"
        fi
        emmc_part=$(find_mmc_part $part_name 2> /dev/null)
        nor_part=$(cat /proc/mtd | grep WIFIFW | awk '{print $1}' | sed 's/:$//')
        local nor_flash=`find /sys/bus/spi/devices/*/mtd -name ${nor_part}`
        nand_part=$(find_mtd_part $part_name 2> /dev/null)
	if [ -n "$emmc_part" ]; then
		umount /lib/firmware/IPQ8074/WIFI_FW
        elif [ -n "$nor_flash" ]; then
                local nor_mtd_part=$(find_mtd_part $part_name 2> /dev/null)
		umount /lib/firmware/IPQ8074/WIFI_FW
        elif [ -n "$nand_part" ]; then
                umount /lib/firmware/IPQ8074/WIFI_FW
                local PART=$(grep -w  "WIFIFW" /proc/mtd | awk -F: '{print $1}')
                ubidetach -f -p  /dev/$PART
                sync
        fi
	return 0
}
