+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/elx-header
+ $(eval hw_id=$(word 1,$(1)))
+ $(eval xor_pattern=$(word 2,$(1)))
+ ( \
+ echo -ne "\x00\x00\x00\x00\x00\x00\x00\x03" | \
+ dd bs=42 count=1 conv=sync; \
+ hw_id="$(hw_id)"; \
+ echo -ne "\x$${hw_id:0:2}\x$${hw_id:2:2}\x$${hw_id:4:2}\x$${hw_id:6:2}" | \
+ dd bs=20 count=1 conv=sync; \
+ echo -ne "$$(printf '%08x' $$(stat -c%s $@) | fold -s2 | xargs -I {} echo \\x{} | tr -d '\n')" | \
+ dd bs=8 count=1 conv=sync; \
+ echo -ne "$$($(STAGING_DIR_HOST)/bin/mkhash md5 $@ | fold -s2 | xargs -I {} echo \\x{} | tr -d '\n')" | \
+ dd bs=58 count=1 conv=sync; \
+ ) > $(KDIR)/tmp/$(DEVICE_NAME).header
+ $(call Build/xor-image,-p $(xor_pattern) -x)
+ cat $(KDIR)/tmp/$(DEVICE_NAME).header $@ > $@.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
+