# SPDX-License-Identifier: GPL-2.0-only

include $(TOPDIR)/rules.mk
include $(INCLUDE_DIR)/image.mk

DEVICE_VARS += ASUS_PRODUCTID ASUS_BUILD_NO ASUS_FW_REV ASUS_EXT_NO
DEVICE_VARS += NETGEAR_BOARD_ID NETGEAR_REGION
DEVICE_VARS += SOC

define Image/Prepare
	cp bootfs*.its* $(KDIR)/
	sed -i "s=\$$$${images_dir}=$(STAGING_DIR_IMAGE)=" $(KDIR)/bootfs*.its*
	sed -i "s=\$$$${dts_dir}=$(DTS_DIR)=" $(KDIR)/bootfs*.its*
endef

define Build/bootfs
	cat $@ | $(STAGING_DIR_HOST)/bin/lzma e -eos -si -so > $@.tmp
	mv $@.tmp $@
	sed -i "s=\$${kernel}=$@=" $(KDIR)/bootfs*.its*
	PATH=$(LINUX_DIR)/scripts/dtc:$(PATH) mkimage -f $(KDIR)/bootfs-bcm4908.its $(KDIR)/bootfs-bcm4908.itb
	PATH=$(LINUX_DIR)/scripts/dtc:$(PATH) mkimage -f $(KDIR)/bootfs-bcm4912.its $(KDIR)/bootfs-bcm4912.itb
endef

define Build/bcm4908asus
	$(STAGING_DIR_HOST)/bin/bcm4908asus create -i $@ \
		-p $(ASUS_PRODUCTID) -b $(ASUS_BUILD_NO) -f $(ASUS_FW_REV) \
		-e $(ASUS_EXT_NO)
endef

define Build/bcm4908img
	rm -fr $@-bootfs
	mkdir -p $@-bootfs
	cp -r $(DEVICE_NAME)/* $@-bootfs/
	touch $@-bootfs/1-openwrt
	cp $(DTS_DIR)/$(firstword $(DEVICE_DTS)).dtb $@-bootfs/94908.dtb
	cp $(KDIR)/bcm63xx-cfe/$(subst _,$(comma),$(DEVICE_NAME))/cferam.000 $@-bootfs/
	cp $(IMAGE_KERNEL) $@-bootfs/vmlinux.lz

	$(STAGING_DIR_HOST)/bin/mkfs.jffs2 --pad=0x800000 --little-endian --squash-uids \
		-v -e 128KiB -o $@-bootfs.jffs2 -d $@-bootfs -m none -n
	$(STAGING_DIR_HOST)/bin/bcm4908img create $@.new -f $@-bootfs.jffs2 \
		-a 0x20000 -f $@
	mv $@.new $@
endef

define Build/bcm4908kernel
	$(STAGING_DIR_HOST)/bin/bcm4908kernel -i $@ -o $@.new
	mv $@.new $@
endef

define Build/bcm4908lzma
	$(STAGING_DIR_HOST)/bin/lzma e -lc1 -lp2 -pb2 -d22 $@ $@.new
	mv $@.new $@
endef

define Build/pkgtb
	mv $@ $@.rootfs
	cp pkgtb-$(SOC).its $@.its
	sed -i "s=\$${bootfs}=$(KDIR)/bootfs-$(SOC).itb=" $@.its
	sed -i "s=\$${rootfs}=$@.rootfs=" $@.its
	PATH=$(LINUX_DIR)/scripts/dtc:$(PATH) mkimage -f $@.its $@
endef

define Device/Default
  KERNEL := kernel-bin | bcm4908lzma | bcm4908kernel
  KERNEL_DEPENDS = $$(wildcard $(DTS_DIR)/$$(DEVICE_DTS).dts)
  KERNEL_INITRAMFS_SUFFIX := .bin
  KERNEL_INITRAMFS := kernel-bin | bcm4908lzma | bcm4908kernel
  FILESYSTEMS := squashfs
  KERNEL_NAME := Image
  DEVICE_IMG_NAME = $$(DEVICE_IMG_PREFIX)-$$(1).$$(2)
  BLOCKSIZE := 128k
  PAGESIZE := 2048
  IMAGE/bin := append-ubi | bcm4908img
endef

define Device/asus_gt-ac5300
  DEVICE_VENDOR := ASUS
  DEVICE_MODEL := GT-AC5300
  DEVICE_DTS := broadcom/bcmbca/bcm4908-asus-gt-ac5300
  IMAGES := bin
  IMAGE/bin := append-ubi | bcm4908img | bcm4908asus
  ASUS_PRODUCTID := GT-AC5300
  ASUS_BUILD_NO := 384
  ASUS_FW_REV := 3.0.0.4
  ASUS_EXT_NO := 21140
endef
TARGET_DEVICES += asus_gt-ac5300

define Device/asus_gt-ax6000
  DEVICE_VENDOR := ASUS
  DEVICE_MODEL := GT-AX6000
  DEVICE_DTS := broadcom/bcmbca/bcm4912-asus-gt-ax6000
  IMAGES := pkgtb
  IMAGE/pkgtb := append-rootfs | pkgtb
  SOC := bcm4912
endef
# TARGET_DEVICES += asus_gt-ax6000

define Device/netgear_r8000p
  DEVICE_VENDOR := Netgear
  DEVICE_MODEL := R8000P
  DEVICE_DTS := broadcom/bcmbca/bcm4906-netgear-r8000p
  IMAGES := bin
  IMAGE/chk := append-ubi | bcm4908img | netgear-chk
  NETGEAR_BOARD_ID := U12H359T00_NETGEAR
  NETGEAR_REGION := 1
endef
TARGET_DEVICES += netgear_r8000p

define Device/tplink_archer-c2300-v1
  DEVICE_VENDOR := TP-Link
  DEVICE_MODEL := Archer C2300
  DEVICE_VARIANT := v1
  DEVICE_DTS := broadcom/bcmbca/bcm4906-tplink-archer-c2300-v1
  IMAGES := bin
  IMAGE/bin := append-ubi | bcm4908img
  BROKEN := y
endef
TARGET_DEVICES += tplink_archer-c2300-v1

define Device/netgear
  DEVICE_VENDOR := NETGEAR
  KERNEL := kernel-bin | bootfs
  IMAGES := chk
  IMAGE/chk := append-rootfs | pkgtb | netgear-chk
  NETGEAR_REGION := 1
endef

define Device/netgear_raxe500
  DEVICE_MODEL := RAXE500
  $(Device/netgear)
  SOC := bcm4908
  NETGEAR_BOARD_ID := U12H449T00_NETGEAR
endef
# TARGET_DEVICES += netgear_raxe500

$(eval $(call BuildImage))
