+KERNEL_DTB += -d21
+DEVICE_VARS += TPLINK_BOARD_ID TPLINK_HEADER_VERSION TPLINK_HWID TPLINK_HWREV
+
+define Build/elecom-gst-factory
+ $(eval product=$(word 1,$(1)))
+ $(eval version=$(word 2,$(1)))
+ ( $(STAGING_DIR_HOST)/bin/mkhash md5 $@ | tr -d '\n' ) >> $@
+ ( \
+ echo -n "ELECOM $(product) v$(version)" | \
+ dd bs=32 count=1 conv=sync; \
+ dd if=$@; \
+ ) > $@.new
+ mv $@.new $@
+ echo -n "MT7621_ELECOM_$(product)" >> $@
+endef
+
+define Build/elecom-wrc-factory
+ $(eval product=$(word 1,$(1)))
+ $(eval version=$(word 2,$(1)))
+ $(STAGING_DIR_HOST)/bin/mkhash md5 $@ >> $@
+ ( \
+ echo -n "ELECOM $(product) v$(version)" | \
+ dd bs=32 count=1 conv=sync; \
+ dd if=$@; \
+ ) > $@.new
+ mv $@.new $@
+endef
+
+define Build/iodata-factory
+ $(eval fw_size=$(word 1,$(1)))
+ $(eval fw_type=$(word 2,$(1)))
+ $(eval product=$(word 3,$(1)))
+ $(eval factory_bin=$(word 4,$(1)))
+ if [ -e $(KDIR)/tmp/$(KERNEL_INITRAMFS_IMAGE) -a "$$(stat -c%s $@)" -lt "$(fw_size)" ]; then \
+ $(CP) $(KDIR)/tmp/$(KERNEL_INITRAMFS_IMAGE) $(factory_bin); \
+ $(STAGING_DIR_HOST)/bin/mksenaofw \
+ -r 0x30a -p $(product) -t $(fw_type) \
+ -e $(factory_bin) -o $(factory_bin).new; \
+ mv $(factory_bin).new $(factory_bin); \
+ $(CP) $(factory_bin) $(BIN_DIR)/; \
+ else \
+ echo "WARNING: initramfs kernel image too big, cannot generate factory image" >&2; \
+ fi
+endef
+
+# The OEM webinterface expects an kernel with initramfs which has the uImage
+# header field ih_name.
+# We don't wan't to set the header name field for the kernel include in the
+# sysupgrade image as well, as this image shouldn't be accepted by the OEM
+# webinterface. It will soft-brick the board.
+define Build/wr1201-factory-header
+ mkimage -A $(LINUX_KARCH) \
+ -O linux -T kernel \
+ -C lzma -a $(KERNEL_LOADADDR) -e $(if $(KERNEL_ENTRY),$(KERNEL_ENTRY),$(KERNEL_LOADADDR)) \
+ -n 'WR1201_8_128' -d $@ $@.new
+ mv $@.new $@
+endef
+