# SPDX-License-Identifier: GPL-2.0-only
#
# Copyright (C) 2006-2021 OpenWrt.org

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

# Cook a Linksys NSLU2 etc image
define Build/linksys-ixp425-image
	touch $@.null-initrd
	$(TOPDIR)/scripts/slugimage.pl -L $(STAGING_DIR_IMAGE)/apex/apex-$(1)-armeb.bin -k $@ -r $@.null-initrd -p -o $@.new
	mv $@.new $@
endef

define Build/freecom-image
	mkdir -p $@.tmptar
	# Add kernel
	cp $@ $@.tmptar/zImage
	cd $@.tmptar && tar -c -j -f $@.new --numeric-owner --owner=0 --group=0 *
	rm -rf $@.tmptar
	encode_crc $@.new $@
	rm -f $@.new
endef

# Build sysupgrade image
define BuildFirmware/Generic
	dd if=$(KDIR)/zImage of=$(KDIR)/zImage.pad bs=64k conv=sync; \
	dd if=$(KDIR)/root.$(1) of=$(KDIR)/root.$(1).pad bs=128k conv=sync; \
	sh $(TOPDIR)/scripts/combined-image.sh \
		$(KDIR)/zImage.pad \
		$(KDIR)/root.$(1).pad \
		$(BIN_DIR)/$(IMG_PREFIX)-$(patsubst jffs2-%,jffs2,$(patsubst squashfs-%,squashfs,$(1)))-sysupgrade.bin
endef

define Image/Build
	$(call Image/Build/$(1),$(1))
	$(call BuildFirmware/Generic,$(1))
endef

define Device/Default
	PROFILES := Default
	DEVICE_DTS_DIR = $$(DTS_DIR)/intel/ixp
	KERNEL_DEPENDS = $$(wildcard $(DTS_DIR)/$$(DEVICE_DTS).dts)
	KERNEL_NAME := zImage
	KERNEL := kernel-bin | append-dtb
	BLOCKSIZE := 128k
endef

define Device/dlink_dsm_g600_a
	DEVICE_VENDOR := D-Link
	DEVICE_MODEL := DSM G600 A
	DEVICE_PACKAGES := ixp4xx-microcode-ethernet kmod-rtc-pcf8563 kmod-via-velocity kmod-ata-artop kmod-ath5k wpad-basic-mbedtls
	DEVICE_DTS := intel-ixp42x-dlink-dsm-g600
	KERNEL := kernel-bin | append-dtb
	IMAGES := kernel.bin rootfs.bin
	IMAGE/kernel.bin := append-kernel
	IMAGE/rootfs.bin := append-rootfs | pad-rootfs | pad-to 128k
endef
TARGET_DEVICES += dlink_dsm_g600_a

define Device/freecom_fsg_3
	DEVICE_VENDOR := Freecom
	DEVICE_MODEL := FSG-3
	DEVICE_PACKAGES := ixp4xx-microcode-ethernet kmod-rtc-isl1208 kmod-ath5k wpad-basic-mbedtls
	# Only 4 MB of Flash so not building by default
	DEFAULT := n
	DEVICE_DTS := intel-ixp42x-freecom-fsg-3
	KERNEL := kernel-bin | append-dtb
	IMAGES := factory.bin
	# This has to boot from harddisk so just append the kernel
	IMAGE/factory.bin := append-kernel | freecom-image
endef
TARGET_DEVICES += freecom_fsg_3

define Device/gateworks_avila
	DEVICE_VENDOR := Gateworks
	DEVICE_MODEL := Avila GW2348-4
	DEVICE_PACKAGES := ixp4xx-microcode-ethernet kmod-rtc-ds1672 kmod-eeprom-at24 kmod-hwmon-ad7418
	DEVICE_DTS := intel-ixp42x-gateworks-gw2348
	KERNEL := kernel-bin | append-dtb
	IMAGES := kernel.bin rootfs.bin
	IMAGE/kernel.bin := append-kernel
	IMAGE/rootfs.bin := append-rootfs | pad-rootfs | pad-to 128k
endef
TARGET_DEVICES += gateworks_avila

define Device/gateworks_cambria
	DEVICE_VENDOR := Gateworks
	DEVICE_MODEL := Cambria GW2358-4
	DEVICE_PACKAGES := ixp4xx-microcode-ethernet kmod-rtc-ds1672 kmod-eeprom-at24 kmod-hwmon-ad7418
	DEVICE_DTS := intel-ixp43x-gateworks-gw2358
	KERNEL := kernel-bin | append-dtb
	IMAGES := kernel.bin rootfs.bin
	IMAGE/kernel.bin := append-kernel
	IMAGE/rootfs.bin := append-rootfs | pad-rootfs | pad-to 128k
endef
TARGET_DEVICES += gateworks_cambria

define Device/iomega_nas100d
	DEVICE_VENDOR := Iomega
	DEVICE_MODEL := NAS100d
	# USB2 is compiled in and needs no package
	DEVICE_PACKAGES := ixp4xx-microcode-ethernet kmod-rtc-pcf8563
	DEVICE_DTS := intel-ixp42x-iomega-nas100d
	KERNEL := kernel-bin | append-dtb
	IMAGES := factory.bin
	# This has to boot from harddisk so just append the kernel
	IMAGE/factory.bin := append-kernel | linksys-ixp425-image "nas100d"
endef
TARGET_DEVICES += iomega_nas100d

define Device/linksys_nslu2
	DEVICE_VENDOR := Linksys
	DEVICE_MODEL := NSLU2
	# USB2 is compiled in and needs no package
	DEVICE_PACKAGES := ixp4xx-microcode-ethernet kmod-rtc-x1205
	# Only 32 MB of RAM so not building by default
	DEFAULT := n
	DEVICE_DTS := intel-ixp42x-linksys-nslu2
	KERNEL := kernel-bin | append-dtb
	IMAGES := factory.bin
	# This has to boot from harddisk so just append the kernel
	IMAGE/factory.bin := append-kernel | linksys-ixp425-image "nslu2"
endef
TARGET_DEVICES += linksys_nslu2

define Device/usrobotics_usr8200
	DEVICE_VENDOR := USRobotics
	DEVICE_MODEL := USR8200
	# USB2 is compiled in and needs no package
	DEVICE_PACKAGES := ixp4xx-microcode-ethernet kmod-rtc-r7301 kmod-firewire kmod-firewire-ohci
	DEVICE_DTS := intel-ixp42x-usrobotics-usr8200
	KERNEL := kernel-bin | append-dtb
	IMAGES := kernel.bin rootfs.bin
	IMAGE/kernel.bin := append-kernel
	IMAGE/rootfs.bin := append-rootfs | pad-rootfs | pad-to 128k
endef
TARGET_DEVICES += usrobotics_usr8200

$(eval $(call BuildImage))