[RFC PATCH 02/11] build_patches: update / remove patches

Tim Niemeyer tim at tn-x.org
Mo Jan 16 21:51:35 CET 2017


Signed-off-by: Tim Niemeyer <tim at tn-x.org>
---

 .../openwrt/0001-sysupgrade_no_config_save.patch   |   2 +-
 .../0003-ar71xx-add-support-for-GL-AR150.patch     | 293 -------
 ...string.patch => 0003-ntpd-host-as-string.patch} |   8 +-
 .../openwrt/0004-ar71xx-3.18-l2tp-stats.patch      |  41 -
 ...-cpe510-enable-LNA-for-CPE210-220-510-520.patch |  40 -
 ...-a4fc62bc0ea4010ddbfbd738453c9db70988a57c.patch | 838 ---------------------
 build_patches/openwrt/0007-use-EU-code.patch       |  31 -
 .../openwrt/0008-support-region-code-on-cpe.patch  |  24 -
 8 files changed, 5 insertions(+), 1272 deletions(-)
 delete mode 100644 build_patches/openwrt/0003-ar71xx-add-support-for-GL-AR150.patch
 rename build_patches/openwrt/{0009-ntpd-host-as-string.patch => 0003-ntpd-host-as-string.patch} (58%)
 delete mode 100644 build_patches/openwrt/0004-ar71xx-3.18-l2tp-stats.patch
 delete mode 100644 build_patches/openwrt/0005-ar71xx-cpe510-enable-LNA-for-CPE210-220-510-520.patch
 delete mode 100644 build_patches/openwrt/0006-mktplinkfw-lede-a4fc62bc0ea4010ddbfbd738453c9db70988a57c.patch
 delete mode 100644 build_patches/openwrt/0007-use-EU-code.patch
 delete mode 100644 build_patches/openwrt/0008-support-region-code-on-cpe.patch

diff --git a/build_patches/openwrt/0001-sysupgrade_no_config_save.patch b/build_patches/openwrt/0001-sysupgrade_no_config_save.patch
index 55b3d74..8c6566f 100644
--- a/build_patches/openwrt/0001-sysupgrade_no_config_save.patch
+++ b/build_patches/openwrt/0001-sysupgrade_no_config_save.patch
@@ -2,7 +2,7 @@ Index: package/base-files/files/sbin/sysupgrade
 ===================================================================
 --- package/base-files/files/sbin/sysupgrade
 +++ package/base-files/files/sbin/sysupgrade
-@@ -101,7 +101,7 @@
+@@ -104,7 +104,7 @@
  add_uci_conffiles() {
  	local file="$1"
  	( find $(sed -ne '/^[[:space:]]*$/d; /^#/d; p' \
diff --git a/build_patches/openwrt/0003-ar71xx-add-support-for-GL-AR150.patch b/build_patches/openwrt/0003-ar71xx-add-support-for-GL-AR150.patch
deleted file mode 100644
index deb6318..0000000
--- a/build_patches/openwrt/0003-ar71xx-add-support-for-GL-AR150.patch
+++ /dev/null
@@ -1,293 +0,0 @@
---- target/linux/ar71xx/base-files/etc/uci-defaults/01_leds
-+++ target/linux/ar71xx/base-files/etc/uci-defaults/01_leds
-@@ -188,6 +188,10 @@ dlan-pro-1200-ac)
- 	ucidef_set_led_trigger_gpio "plcr" "dLAN" "devolo:error:dlan" "16" "0"
- 	;;
- 
-+gl-ar150)
-+	ucidef_set_led_wlan "wlan" "WLAN" "gl_ar150:wlan" "phy0tpt"
-+	;;
-+
- gl-inet)
- 	ucidef_set_led_netdev "lan" "LAN" "gl-connect:green:lan" "eth1"
- 	ucidef_set_led_wlan "wlan" "WLAN" "gl-connect:red:wlan" "phy0tpt"
---- target/linux/ar71xx/base-files/etc/uci-defaults/02_network
-+++ target/linux/ar71xx/base-files/etc/uci-defaults/02_network
-@@ -382,6 +382,7 @@ dir-505-a1)
- alfa-ap96 |\
- alfa-nx |\
- ap83 |\
-+gl-ar150 |\
- gl-inet |\
- jwap003 |\
- pb42 |\
---- target/linux/ar71xx/base-files/lib/ar71xx.sh
-+++ target/linux/ar71xx/base-files/lib/ar71xx.sh
-@@ -461,6 +461,9 @@ ar71xx_board_detect() {
- 		name="gl-inet"
- 		gl_inet_board_detect
- 		;;
-+	*"GL AR150")
-+		name="gl-ar150"
-+		;;
- 	*"EnGenius EPG5000")
- 		name="epg5000"
- 		;;
---- target/linux/ar71xx/base-files/lib/upgrade/platform.sh
-+++ target/linux/ar71xx/base-files/lib/upgrade/platform.sh
-@@ -217,6 +217,7 @@ platform_check_image() {
- 	esr900 | \
- 	ew-dorin | \
- 	ew-dorin-router | \
-+	gl-ar150 | \
- 	hiwifi-hc6361 | \
- 	hornet-ub-x2 | \
- 	mzk-w04nu | \
---- target/linux/ar71xx/config-3.18
-+++ target/linux/ar71xx/config-3.18
-@@ -70,6 +70,7 @@ CONFIG_ATH79_MACH_ESR1750=y
- CONFIG_ATH79_MACH_ESR900=y
- CONFIG_ATH79_MACH_EW_DORIN=y
- CONFIG_ATH79_MACH_F9K1115V2=y
-+CONFIG_ATH79_MACH_GL_AR150=y
- CONFIG_ATH79_MACH_GL_INET=y
- CONFIG_ATH79_MACH_GS_MINIBOX_V1=y
- CONFIG_ATH79_MACH_GS_OOLITE=y
---- /dev/null
-+++ target/linux/ar71xx/files/arch/mips/ath79/mach-gl-ar150.c
-@@ -0,0 +1,125 @@
-+/*
-+ *  GL_ar150 board support
-+ *
-+ *  Copyright (C) 2011 dongyuqi <729650915 at qq.com>
-+ *  Copyright (C) 2011-2012 Gabor Juhos <juhosg at openwrt.org>
-+ *  Copyright (C) 2013 alzhao <alzhao at gmail.com>
-+ *  Copyright (C) 2014 Michel Stempin <michel.stempin at wanadoo.fr>
-+ *
-+ *  This program is free software; you can redistribute it and/or modify it
-+ *  under the terms of the GNU General Public License version 2 as published
-+ *  by the Free Software Foundation.
-+*/
-+
-+#include <linux/gpio.h>
-+
-+#include <asm/mach-ath79/ath79.h>
-+
-+#include "dev-eth.h"
-+#include "dev-gpio-buttons.h"
-+#include "dev-leds-gpio.h"
-+#include "dev-m25p80.h"
-+#include "dev-usb.h"
-+#include "dev-wmac.h"
-+#include "machtypes.h"
-+
-+#define GL_AR150_GPIO_LED_WLAN		   0
-+#define GL_AR150_GPIO_LED_LAN		   13
-+#define GL_AR150_GPIO_LED_WAN		   15 
-+
-+#define GL_AR150_GPIO_BIN_USB         6
-+#define GL_AR150_GPIO_BTN_MANUAL      7
-+#define GL_AR150_GPIO_BTN_AUTO	   	   8
-+#define GL_AR150_GPIO_BTN_RESET	   11
-+
-+#define GL_AR150_KEYS_POLL_INTERVAL   20	/* msecs */
-+#define GL_AR150_KEYS_DEBOUNCE_INTERVAL	(3 * GL_AR150_KEYS_POLL_INTERVAL)
-+
-+#define GL_AR150_MAC0_OFFSET	0x0000
-+#define GL_AR150_MAC1_OFFSET	0x0000
-+#define GL_AR150_CALDATA_OFFSET	0x1000
-+#define GL_AR150_WMAC_MAC_OFFSET	0x0000
-+
-+static struct gpio_led gl_ar150_leds_gpio[] __initdata = {
-+	{
-+		.name = "gl_ar150:wlan",
-+		.gpio = GL_AR150_GPIO_LED_WLAN,
-+		.active_low = 0,
-+	},
-+	{
-+		.name = "gl_ar150:lan",
-+		.gpio = GL_AR150_GPIO_LED_LAN,
-+		.active_low = 0,
-+	},
-+	{
-+		.name = "gl_ar150:wan",
-+		.gpio = GL_AR150_GPIO_LED_WAN,
-+		.active_low = 0,
-+ 		.default_state = 1,
-+	},
-+};
-+
-+static struct gpio_keys_button gl_ar150_gpio_keys[] __initdata = {
-+	{
-+		.desc = "BTN_7",
-+		.type = EV_KEY,
-+		.code = BTN_7,
-+		.debounce_interval = GL_AR150_KEYS_DEBOUNCE_INTERVAL,
-+		.gpio = GL_AR150_GPIO_BTN_MANUAL,
-+		.active_low = 0,
-+	},
-+	{
-+		.desc = "BTN_8",
-+		.type = EV_KEY,
-+		.code = BTN_8,
-+		.debounce_interval = GL_AR150_KEYS_DEBOUNCE_INTERVAL,
-+		.gpio = GL_AR150_GPIO_BTN_AUTO,
-+		.active_low = 0,
-+	},
-+	{
-+		.desc = "reset",
-+		.type = EV_KEY,
-+		.code = KEY_RESTART,
-+		.debounce_interval = GL_AR150_KEYS_DEBOUNCE_INTERVAL,
-+		.gpio = GL_AR150_GPIO_BTN_RESET,
-+		.active_low = 0,
-+	},
-+};
-+
-+static void __init gl_ar150_setup(void)
-+{
-+
-+	/* ART base address */
-+	u8 *art = (u8 *) KSEG1ADDR(0x1fff0000);
-+
-+	/* disable PHY_SWAP and PHY_ADDR_SWAP bits */
-+	ath79_setup_ar933x_phy4_switch(false, false);
-+
-+	/* register flash. */
-+	ath79_register_m25p80(NULL);
-+
-+	/* register gpio LEDs and keys */
-+	ath79_register_leds_gpio(-1, ARRAY_SIZE(gl_ar150_leds_gpio),
-+				 gl_ar150_leds_gpio);
-+	ath79_register_gpio_keys_polled(-1, GL_AR150_KEYS_POLL_INTERVAL,
-+					ARRAY_SIZE(gl_ar150_gpio_keys),
-+					gl_ar150_gpio_keys);
-+
-+	/* enable usb */
-+	gpio_request_one(GL_AR150_GPIO_BIN_USB,
-+				 GPIOF_OUT_INIT_HIGH | GPIOF_EXPORT_DIR_FIXED,
-+	 			 "USB power");
-+	ath79_register_usb();
-+	
-+	/* register eth0 as WAN, eth1 as LAN */
-+	ath79_init_mac(ath79_eth0_data.mac_addr, art+GL_AR150_MAC0_OFFSET, 0);
-+	ath79_init_mac(ath79_eth1_data.mac_addr, art+GL_AR150_MAC1_OFFSET, 0);
-+	ath79_register_mdio(0, 0x0);
-+	ath79_register_eth(0);
-+	ath79_register_eth(1);
-+
-+	/* register wireless mac with cal data */
-+	ath79_register_wmac(art + GL_AR150_CALDATA_OFFSET, art + GL_AR150_WMAC_MAC_OFFSET);
-+}
-+
-+MIPS_MACHINE(ATH79_MACH_GL_AR150, "GL-AR150", "GL AR150",gl_ar150_setup);
---- target/linux/ar71xx/generic/profiles/gl-connect.mk
-+++ /dev/null
-@@ -1,17 +0,0 @@
--#
--# Copyright (C) 2014 OpenWrt.org
--#
--# This is free software, licensed under the GNU General Public License v2.
--# See /LICENSE for more information.
--#
--
--define Profile/GLINET
--	NAME:=GL.iNet
--	PACKAGES:=kmod-usb-core kmod-usb2
--endef
--
--define Profile/GLINET/Description
--	Package set optimized for the GL-Connect GL.iNet v1.
--endef
--
--$(eval $(call Profile,GLINET))
---- /dev/null
-+++ target/linux/ar71xx/generic/profiles/gli.mk
-@@ -0,0 +1,27 @@
-+#
-+# Copyright (C) 2013 OpenWrt.org
-+#
-+# This is free software, licensed under the GNU General Public License v2.
-+# See /LICENSE for more information.
-+#
-+define Profile/GLINET
-+	NAME:=GL.iNet 6416
-+	PACKAGES:=kmod-usb-core kmod-usb2
-+endef
-+
-+define Profile/GLINET/Description
-+	Package set optimized for the GL-Connect GL.iNet v1.
-+endef
-+
-+$(eval $(call Profile,GLINET))
-+
-+define Profile/GL-AR150
-+	NAME:=GL AR150
-+	PACKAGES:=kmod-usb-core kmod-usb2
-+endef
-+
-+define Profile/GL-AR150/Description
-+	Configuration of GL AR150.
-+endef
-+
-+$(eval $(call Profile,GL-AR150))
---- target/linux/ar71xx/image/Makefile
-+++ target/linux/ar71xx/image/Makefile
-@@ -144,6 +144,14 @@ define Device/weio
- endef
- TARGET_DEVICES += weio
- 
-+define Device/gl-ar150
-+  BOARDNAME = GL-AR150
-+  IMAGE_SIZE = 16000k
-+  CONSOLE = ttyATH0,115200
-+  MTDPARTS = spi0.0:256k(u-boot)ro,64k(u-boot-env)ro,16000k(firmware),64k(art)ro
-+endef
-+TARGET_DEVICES += gl-ar150
-+
- define Device/wndr3700
-   BOARDNAME = WNDR3700
-   NETGEAR_KERNEL_MAGIC = 0x33373030
---- /dev/null
-+++ target/linux/ar71xx/patches-3.18/911-MIPS-ath79-add-gl_ar150.patch
-@@ -0,0 +1,39 @@
-+--- a/arch/mips/ath79/Kconfig
-++++ b/arch/mips/ath79/Kconfig
-+@@ -577,6 +577,16 @@ config ATH79_MACH_EL_MINI
-+ 	select ATH79_DEV_USB
-+ 	select ATH79_DEV_WMAC
-+ 
-++config ATH79_MACH_GL_AR150
-++	bool "GL AR150 support"
-++	select SOC_AR933X
-++	select ATH79_DEV_ETH
-++	select ATH79_DEV_GPIO_BUTTONS
-++	select ATH79_DEV_LEDS_GPIO
-++	select ATH79_DEV_M25P80
-++	select ATH79_DEV_USB
-++	select ATH79_DEV_WMAC
-++
-+ config ATH79_MACH_GL_INET
-+ 	bool "GL-INET support"
-+ 	select SOC_AR933X
-+--- a/arch/mips/ath79/Makefile
-++++ b/arch/mips/ath79/Makefile
-+@@ -83,6 +83,7 @@ obj-$(CONFIG_ATH79_MACH_EL_MINI)	+= mach
-+ obj-$(CONFIG_ATH79_MACH_EPG5000)	+= mach-epg5000.o
-+ obj-$(CONFIG_ATH79_MACH_ESR1750)	+= mach-esr1750.o
-+ obj-$(CONFIG_ATH79_MACH_F9K1115V2)	+= mach-f9k1115v2.o
-++obj-$(CONFIG_ATH79_MACH_GL_AR150)   += mach-gl-ar150.o
-+ obj-$(CONFIG_ATH79_MACH_GL_INET)	+= mach-gl-inet.o
-+ obj-$(CONFIG_ATH79_MACH_GS_MINIBOX_V1)	+= mach-gs-minibox-v1.o
-+ obj-$(CONFIG_ATH79_MACH_GS_OOLITE)	+= mach-gs-oolite.o
-+--- a/arch/mips/ath79/machtypes.h
-++++ b/arch/mips/ath79/machtypes.h
-+@@ -72,6 +72,7 @@ enum ath79_mach_type {
-+ 	ATH79_MACH_ESR1750,		/* EnGenius ESR1750 */
-+ 	ATH79_MACH_EPG5000,		/* EnGenius EPG5000 */
-+ 	ATH79_MACH_F9K1115V2,		/* Belkin AC1750DB */
-++	ATH79_MACH_GL_AR150,    /* GL-AR150 support */
-+ 	ATH79_MACH_GL_INET,		/* GL-CONNECT GL-INET */
-+ 	ATH79_MACH_GS_MINIBOX_V1,	/* Gainstrong MiniBox V1.0 */
-+ 	ATH79_MACH_GS_OOLITE,           /* GS OOLITE V1.0 */
-
diff --git a/build_patches/openwrt/0009-ntpd-host-as-string.patch b/build_patches/openwrt/0003-ntpd-host-as-string.patch
similarity index 58%
rename from build_patches/openwrt/0009-ntpd-host-as-string.patch
rename to build_patches/openwrt/0003-ntpd-host-as-string.patch
index 94c2ce2..fe5ae4d 100644
--- a/build_patches/openwrt/0009-ntpd-host-as-string.patch
+++ b/build_patches/openwrt/0003-ntpd-host-as-string.patch
@@ -1,13 +1,13 @@
 diff --git package/utils/busybox/files/sysntpd package/utils/busybox/files/sysntpd
-index f73bb83..61cb54c 100755
+index 98260be..07b738c 100755
 --- package/utils/busybox/files/sysntpd
 +++ package/utils/busybox/files/sysntpd
-@@ -9,7 +9,7 @@ HOTPLUG_SCRIPT=/usr/sbin/ntpd-hotplug
+@@ -30,7 +30,7 @@ get_dhcp_ntp_servers() {
  
  validate_ntp_section() {
  	uci_validate_section system timeserver "${1}" \
--		'server:list(host)' 'enabled:bool:1' 'enable_server:bool:0'
-+		'server:list(string)' 'enabled:bool:1' 'enable_server:bool:0'
+-		'server:list(host)' 'enabled:bool:1' 'enable_server:bool:0' 'use_dhcp:bool:1' 'dhcp_interface:list(string)'
++		'server:list(string)' 'enabled:bool:1' 'enable_server:bool:0' 'use_dhcp:bool:1' 'dhcp_interface:list(string)'
  }
  
  start_service() {
diff --git a/build_patches/openwrt/0004-ar71xx-3.18-l2tp-stats.patch b/build_patches/openwrt/0004-ar71xx-3.18-l2tp-stats.patch
deleted file mode 100644
index 85a40c1..0000000
--- a/build_patches/openwrt/0004-ar71xx-3.18-l2tp-stats.patch
+++ /dev/null
@@ -1,41 +0,0 @@
---- target/linux/ar71xx/patches-3.18/fix-l2tp-stats-couter-on-32-Bit-Systems.patch	1970-01-01 01:00:00.000000000 +0100
-+++ target/linux/ar71xx/patches-3.18/fix-l2tp-stats-couter-on-32-Bit-Systems.patch	2016-03-12 18:41:32.818602442 +0100
-@@ -0,0 +1,38 @@
-+From 19b1c8733b99f13005f2d8918bce588f0b2556f8 Mon Sep 17 00:00:00 2001
-+From: Dominik Heidler <dominik at heidler.eu>
-+Date: Sat, 12 Mar 2016 18:37:42 +0100
-+Subject: [PATCH] Fix l2tp stats couter on 32 Bit Systems
-+
-+---
-+ net/l2tp/l2tp_eth.c | 9 +++++++++
-+ 1 file changed, 9 insertions(+)
-+
-+diff --git a/net/l2tp/l2tp_eth.c b/net/l2tp/l2tp_eth.c
-+index e253c26..a18c2ff 100644
-+--- a/net/l2tp/l2tp_eth.c
-++++ b/net/l2tp/l2tp_eth.c
-+@@ -111,12 +111,21 @@ static struct rtnl_link_stats64 *l2tp_eth_get_stats64(struct net_device *dev,
-+ {
-+ 	struct l2tp_eth *priv = netdev_priv(dev);
-+ 
-++	#if BITS_PER_LONG == 64
-+ 	stats->tx_bytes   = atomic_long_read(&priv->tx_bytes);
-+ 	stats->tx_packets = atomic_long_read(&priv->tx_packets);
-+ 	stats->tx_dropped = atomic_long_read(&priv->tx_dropped);
-+ 	stats->rx_bytes   = atomic_long_read(&priv->rx_bytes);
-+ 	stats->rx_packets = atomic_long_read(&priv->rx_packets);
-+ 	stats->rx_errors  = atomic_long_read(&priv->rx_errors);
-++	#else
-++	stats->tx_bytes   = (unsigned long) atomic_long_read(&priv->tx_bytes);
-++	stats->tx_packets = (unsigned long) atomic_long_read(&priv->tx_packets);
-++	stats->tx_dropped = (unsigned long) atomic_long_read(&priv->tx_dropped);
-++	stats->rx_bytes   = (unsigned long) atomic_long_read(&priv->rx_bytes);
-++	stats->rx_packets = (unsigned long) atomic_long_read(&priv->rx_packets);
-++	stats->rx_errors  = (unsigned long) atomic_long_read(&priv->rx_errors);
-++	#endif
-+ 	return stats;
-+ }
-+ 
-+-- 
-+2.7.2
-+
diff --git a/build_patches/openwrt/0005-ar71xx-cpe510-enable-LNA-for-CPE210-220-510-520.patch b/build_patches/openwrt/0005-ar71xx-cpe510-enable-LNA-for-CPE210-220-510-520.patch
deleted file mode 100644
index 5f32936..0000000
--- a/build_patches/openwrt/0005-ar71xx-cpe510-enable-LNA-for-CPE210-220-510-520.patch
+++ /dev/null
@@ -1,40 +0,0 @@
-From 94e23bf7409d6cc4c9efb55ed32aba8e5a497966 Mon Sep 17 00:00:00 2001
-From: Alexander Couzens <lynxis at fe80.eu>
-Date: Fri, 20 May 2016 13:10:36 +0200
-Subject: [PATCH] ar71xx/cpe510: enable LNA for CPE210/220/510/520
-
-The LNA improves the rx path. Within a simple test setup
-it improved the signal from -60dbm to -40dbm.
-
-Signed-off-by: Alexander Couzens <lynxis at fe80.eu>
----
- target/linux/ar71xx/files/arch/mips/ath79/mach-cpe510.c | 6 ++++++
- 1 file changed, 6 insertions(+)
-
-diff --git target/linux/ar71xx/files/arch/mips/ath79/mach-cpe510.c target/linux/ar71xx/files/arch/mips/ath79/mach-cpe510.c
-index 8bf5c0f..5cb052a 100644
---- target/linux/ar71xx/files/arch/mips/ath79/mach-cpe510.c
-+++ target/linux/ar71xx/files/arch/mips/ath79/mach-cpe510.c
-@@ -30,6 +30,9 @@
- #define CPE510_GPIO_LED_L3	15
- #define CPE510_GPIO_LED_L4	16
- 
-+#define CPE510_GPIO_EXTERNAL_LNA0	18
-+#define CPE510_GPIO_EXTERNAL_LNA1	19
-+
- #define CPE510_GPIO_BTN_RESET	4
- 
- #define CPE510_KEYS_POLL_INTERVAL	20 /* msecs */
-@@ -93,6 +96,9 @@ static void __init cpe510_setup(void)
- 					ARRAY_SIZE(cpe510_gpio_keys),
- 					cpe510_gpio_keys);
- 
-+	ath79_wmac_set_ext_lna_gpio(0, CPE510_GPIO_EXTERNAL_LNA0);
-+	ath79_wmac_set_ext_lna_gpio(1, CPE510_GPIO_EXTERNAL_LNA1);
-+
- 	ath79_register_m25p80(NULL);
- 
- 	ath79_register_mdio(1, 0);
--- 
-2.10.1
-
diff --git a/build_patches/openwrt/0006-mktplinkfw-lede-a4fc62bc0ea4010ddbfbd738453c9db70988a57c.patch b/build_patches/openwrt/0006-mktplinkfw-lede-a4fc62bc0ea4010ddbfbd738453c9db70988a57c.patch
deleted file mode 100644
index 5643fd0..0000000
--- a/build_patches/openwrt/0006-mktplinkfw-lede-a4fc62bc0ea4010ddbfbd738453c9db70988a57c.patch
+++ /dev/null
@@ -1,838 +0,0 @@
-diff --git tools/firmware-utils/src/mktplinkfw.c tools/firmware-utils/src/mktplinkfw.c
-index 6df869d..34e6546 100644
---- tools/firmware-utils/src/mktplinkfw.c
-+++ tools/firmware-utils/src/mktplinkfw.c
-@@ -28,52 +28,10 @@
- #include "md5.h"
- 
- #define ALIGN(x,a) ({ typeof(a) __a = (a); (((x) + __a - 1) & ~(__a - 1)); })
-+#define ARRAY_SIZE(a) (sizeof((a)) / sizeof((a)[0]))
- 
- #define HEADER_VERSION_V1	0x01000000
--#define HWID_ANTMINER_S1	0x04440101
--#define HWID_ANTMINER_S3	0x04440301
--#define HWID_GL_INET_V1		0x08000001
--#define HWID_GS_OOLITE_V1	0x3C000101
--#define HWID_ONION_OMEGA	0x04700001
--#define HWID_TL_MR10U_V1	0x00100101
--#define HWID_TL_MR13U_V1	0x00130101
--#define HWID_TL_MR3020_V1	0x30200001
--#define HWID_TL_MR3220_V1	0x32200001
--#define HWID_TL_MR3220_V2	0x32200002
--#define HWID_TL_MR3420_V1	0x34200001
--#define HWID_TL_MR3420_V2	0x34200002
--#define HWID_TL_WA701N_V1	0x07010001
--#define HWID_TL_WA701N_V2	0x07010002
--#define HWID_TL_WA7210N_V2	0x72100002
--#define HWID_TL_WA7510N_V1	0x75100001
--#define HWID_TL_WA801ND_V1	0x08010001
--#define HWID_TL_WA830RE_V1	0x08300010
--#define HWID_TL_WA830RE_V2	0x08300002
--#define HWID_TL_WA801ND_V2	0x08010002
--#define HWID_TL_WA901ND_V1	0x09010001
--#define HWID_TL_WA901ND_V2	0x09010002
--#define HWID_TL_WA901ND_V4	0x09010004
--#define HWID_TL_WDR4300_V1_IL	0x43008001
--#define HWID_TL_WDR4900_V1	0x49000001
--#define HWID_TL_WR703N_V1	0x07030101
--#define HWID_TL_WR720N_V3	0x07200103
--#define HWID_TL_WR720N_V4	0x07200104
--#define HWID_TL_WR741ND_V1	0x07410001
--#define HWID_TL_WR741ND_V4	0x07410004
--#define HWID_TL_WR740N_V1	0x07400001
--#define HWID_TL_WR740N_V3	0x07400003
--#define HWID_TL_WR743ND_V1	0x07430001
--#define HWID_TL_WR743ND_V2	0x07430002
--#define HWID_TL_WR841N_V1_5	0x08410002
--#define HWID_TL_WR841ND_V3	0x08410003
--#define HWID_TL_WR841ND_V5	0x08410005
--#define HWID_TL_WR841ND_V7	0x08410007
--#define HWID_TL_WR941ND_V2	0x09410002
--#define HWID_TL_WR941ND_V4	0x09410004
--#define HWID_TL_WR1043ND_V1	0x10430001
--#define HWID_TL_WR1043ND_V2	0x10430002
--#define HWID_TL_WR1041N_V2	0x10410002
--#define HWID_TL_WR2543N_V1	0x25430001
-+#define HEADER_VERSION_V2	0x02000000
- 
- #define MD5SUM_LEN	16
- 
-@@ -88,7 +46,7 @@ struct fw_header {
- 	char		fw_version[36];
- 	uint32_t	hw_id;		/* hardware id */
- 	uint32_t	hw_rev;		/* hardware revision */
--	uint32_t	unk1;
-+	uint32_t	region_code;	/* region code */
- 	uint8_t		md5sum1[MD5SUM_LEN];
- 	uint32_t	unk2;
- 	uint8_t		md5sum2[MD5SUM_LEN];
-@@ -105,7 +63,10 @@ struct fw_header {
- 	uint16_t	ver_hi;
- 	uint16_t	ver_mid;
- 	uint16_t	ver_lo;
--	uint8_t		pad[354];
-+	uint8_t		pad[130];
-+	char		region_str1[32];
-+	char		region_str2[32];
-+	uint8_t		pad2[160];
- } __attribute__ ((packed));
- 
- struct flash_layout {
-@@ -116,13 +77,12 @@ struct flash_layout {
- 	uint32_t	rootfs_ofs;
- };
- 
--struct board_info {
--	char		*id;
--	uint32_t	hw_id;
--	uint32_t	hw_rev;
--	char		*layout_id;
-+struct fw_region {
-+	char		name[4];
-+	uint32_t	code;
- };
- 
-+
- /*
-  * Globals
-  */
-@@ -131,15 +91,17 @@ static char *progname;
- static char *vendor = "TP-LINK Technologies";
- static char *version = "ver. 1.0";
- static char *fw_ver = "0.0.0";
-+static uint32_t hdr_ver = HEADER_VERSION_V1;
- 
--static char *board_id;
--static struct board_info *board;
- static char *layout_id;
- static struct flash_layout *layout;
- static char *opt_hw_id;
- static uint32_t hw_id;
- static char *opt_hw_rev;
- static uint32_t hw_rev;
-+static uint32_t opt_hdr_ver = 1;
-+static char *country;
-+static const struct fw_region *region;
- static int fw_ver_lo;
- static int fw_ver_mid;
- static int fw_ver_hi;
-@@ -162,12 +124,12 @@ static uint32_t reserved_space;
- static struct file_info inspect_info;
- static int extract = 0;
- 
--char md5salt_normal[MD5SUM_LEN] = {
-+static const char md5salt_normal[MD5SUM_LEN] = {
- 	0xdc, 0xd7, 0x3a, 0xa5, 0xc3, 0x95, 0x98, 0xfb,
- 	0xdd, 0xf9, 0xe7, 0xf4, 0x0e, 0xae, 0x47, 0x38,
- };
- 
--char md5salt_boot[MD5SUM_LEN] = {
-+static const char md5salt_boot[MD5SUM_LEN] = {
- 	0x8c, 0xef, 0x33, 0x5b, 0xd5, 0xc5, 0xce, 0xfa,
- 	0xa7, 0x9c, 0x28, 0xda, 0xb2, 0xe9, 0x0f, 0x42,
- };
-@@ -212,7 +174,7 @@ static struct flash_layout layouts[] = {
- 	}, {
- 		.id		= "16Mppc",
- 		.fw_max_len	= 0xf80000,
--		.kernel_la	= 0x00000000,
-+		.kernel_la	= 0x00000000 ,
- 		.kernel_ep	= 0xc0000000,
- 		.rootfs_ofs	= 0x2a0000,
- 	}, {
-@@ -220,230 +182,10 @@ static struct flash_layout layouts[] = {
- 	}
- };
- 
--static struct board_info boards[] = {
--	{
--		.id		= "TL-MR10Uv1",
--		.hw_id		= HWID_TL_MR10U_V1,
--		.hw_rev		= 1,
--		.layout_id	= "4Mlzma",
--	}, {
--		.id		= "TL-MR13Uv1",
--		.hw_id		= HWID_TL_MR13U_V1,
--		.hw_rev		= 1,
--		.layout_id	= "4Mlzma",
--	}, {
--		.id		= "TL-MR3020v1",
--		.hw_id		= HWID_TL_MR3020_V1,
--		.hw_rev		= 1,
--		.layout_id	= "4Mlzma",
--	}, {
--		.id		= "TL-MR3220v1",
--		.hw_id		= HWID_TL_MR3220_V1,
--		.hw_rev		= 1,
--		.layout_id	= "4M",
--	}, {
--		.id		= "TL-MR3220v2",
--		.hw_id		= HWID_TL_MR3220_V2,
--		.hw_rev		= 1,
--		.layout_id	= "4Mlzma",
--	}, {
--		.id		= "TL-MR3420v1",
--		.hw_id		= HWID_TL_MR3420_V1,
--		.hw_rev		= 1,
--		.layout_id	= "4M",
--	}, {
--		.id		= "TL-MR3420v2",
--		.hw_id		= HWID_TL_MR3420_V2,
--		.hw_rev		= 1,
--		.layout_id	= "4Mlzma",
--	}, {
--		.id		= "TL-WA701Nv1",
--		.hw_id		= HWID_TL_WA701N_V1,
--		.hw_rev		= 1,
--		.layout_id	= "4M",
--	}, {
--		.id		= "TL-WA701Nv2",
--		.hw_id		= HWID_TL_WA701N_V2,
--		.hw_rev		= 1,
--		.layout_id	= "4Mlzma",
--	}, {
--		.id		= "TL-WA7210N",
--		.hw_id		= HWID_TL_WA7210N_V2,
--		.hw_rev		= 2,
--		.layout_id	= "4Mlzma",
--	}, {
--		.id		= "TL-WA7510N",
--		.hw_id		= HWID_TL_WA7510N_V1,
--		.hw_rev		= 1,
--		.layout_id	= "4M",
--	}, {
--		.id		= "TL-WA801NDv1",
--		.hw_id		= HWID_TL_WA801ND_V1,
--		.hw_rev		= 1,
--		.layout_id	= "4M",
--	}, {
--		.id		= "TL-WA830REv1",
--		.hw_id		= HWID_TL_WA830RE_V1,
--		.hw_rev		= 1,
--		.layout_id	= "4M",
--	}, {
--		.id		= "TL-WA830REv2",
--		.hw_id		= HWID_TL_WA830RE_V2,
--		.hw_rev		= 1,
--		.layout_id	= "4M",
--	}, {
--		.id             = "TL-WA801NDv2",
--		.hw_id          = HWID_TL_WA801ND_V2,
--		.hw_rev         = 1,
--		.layout_id	= "4Mlzma",
--	}, {
--		.id		= "TL-WA901NDv1",
--		.hw_id		= HWID_TL_WA901ND_V1,
--		.hw_rev		= 1,
--		.layout_id	= "4M",
--	}, {
--		.id             = "TL-WA901NDv2",
--		.hw_id          = HWID_TL_WA901ND_V2,
--		.hw_rev         = 1,
--		.layout_id	= "4M",
--	}, {
--		.id             = "TL-WA901NDv4",
--		.hw_id          = HWID_TL_WA901ND_V4,
--		.hw_rev         = 1,
--		.layout_id	= "4Mlzma",
--	}, {
--		.id             = "TL-WDR4300v1",
--		.hw_id          = HWID_TL_WDR4300_V1_IL,
--		.hw_rev         = 1,
--		.layout_id	= "8Mlzma",
--	}, {
--		.id             = "TL-WDR4900v1",
--		.hw_id          = HWID_TL_WDR4900_V1,
--		.hw_rev         = 1,
--		.layout_id	= "16Mppc",
--	}, {
--		.id		= "TL-WR741NDv1",
--		.hw_id		= HWID_TL_WR741ND_V1,
--		.hw_rev		= 1,
--		.layout_id	= "4M",
--	}, {
--		.id		= "TL-WR741NDv4",
--		.hw_id		= HWID_TL_WR741ND_V4,
--		.hw_rev		= 1,
--		.layout_id	= "4Mlzma",
--	}, {
--		.id		= "TL-WR740Nv1",
--		.hw_id		= HWID_TL_WR740N_V1,
--		.hw_rev		= 1,
--		.layout_id	= "4M",
--	}, {
--		.id		= "TL-WR740Nv3",
--		.hw_id		= HWID_TL_WR740N_V3,
--		.hw_rev		= 1,
--		.layout_id	= "4M",
--	}, {
--		.id		= "TL-WR743NDv1",
--		.hw_id		= HWID_TL_WR743ND_V1,
--		.hw_rev		= 1,
--		.layout_id	= "4M",
--	}, {
--		.id		= "TL-WR743NDv2",
--		.hw_id		= HWID_TL_WR743ND_V2,
--		.hw_rev		= 1,
--		.layout_id	= "4Mlzma",
--	}, {
--		.id		= "TL-WR841Nv1.5",
--		.hw_id		= HWID_TL_WR841N_V1_5,
--		.hw_rev		= 2,
--		.layout_id	= "4M",
--	}, {
--		.id		= "TL-WR841NDv3",
--		.hw_id		= HWID_TL_WR841ND_V3,
--		.hw_rev		= 3,
--		.layout_id	= "4M",
--	}, {
--		.id		= "TL-WR841NDv5",
--		.hw_id		= HWID_TL_WR841ND_V5,
--		.hw_rev		= 1,
--		.layout_id	= "4M",
--	}, {
--		.id		= "TL-WR841NDv7",
--		.hw_id		= HWID_TL_WR841ND_V7,
--		.hw_rev		= 1,
--		.layout_id	= "4M",
--	}, {
--		.id		= "TL-WR941NDv2",
--		.hw_id		= HWID_TL_WR941ND_V2,
--		.hw_rev		= 2,
--		.layout_id	= "4M",
--	}, {
--		.id		= "TL-WR941NDv4",
--		.hw_id		= HWID_TL_WR941ND_V4,
--		.hw_rev		= 1,
--		.layout_id	= "4M",
--	}, {
--		.id		= "TL-WR1041Nv2",
--		.hw_id		= HWID_TL_WR1041N_V2,
--		.hw_rev		= 1,
--		.layout_id	= "4Mlzma",
--	}, {
--		.id		= "TL-WR1043NDv1",
--		.hw_id		= HWID_TL_WR1043ND_V1,
--		.hw_rev		= 1,
--		.layout_id	= "8M",
--	}, {
--		.id		= "TL-WR1043NDv2",
--		.hw_id		= HWID_TL_WR1043ND_V2,
--		.hw_rev		= 1,
--		.layout_id	= "8Mlzma",
--	}, {
--		.id		= "TL-WR2543Nv1",
--		.hw_id		= HWID_TL_WR2543N_V1,
--		.hw_rev		= 1,
--		.layout_id	= "8Mlzma",
--	}, {
--		.id		= "TL-WR703Nv1",
--		.hw_id		= HWID_TL_WR703N_V1,
--		.hw_rev		= 1,
--		.layout_id	= "4Mlzma",
--	}, {
--		.id		= "TL-WR720Nv3",
--		.hw_id		= HWID_TL_WR720N_V3,
--		.hw_rev		= 1,
--		.layout_id	= "4Mlzma",
--	}, {
--		.id		= "TL-WR720Nv4",
--		.hw_id		= HWID_TL_WR720N_V4,
--		.hw_rev		= 1,
--		.layout_id	= "4Mlzma",
--	}, {
--		.id		= "GL-INETv1",
--		.hw_id		= HWID_GL_INET_V1,
--		.hw_rev		= 1,
--		.layout_id	= "8Mlzma",
--	}, {
--		.id		= "GS-OOLITEv1",
--		.hw_id		= HWID_GS_OOLITE_V1,
--		.hw_rev		= 1,
--		.layout_id	= "16Mlzma",
--	}, {
--		.id		= "ONION-OMEGA",
--		.hw_id		= HWID_ONION_OMEGA,
--		.hw_rev		= 1,
--		.layout_id	= "16Mlzma",
--	}, {
--		.id		= "ANTMINER-S1",
--		.hw_id		= HWID_ANTMINER_S1,
--		.hw_rev		= 1,
--		.layout_id	= "8Mlzma",
--	}, {
--		.id		= "ANTMINER-S3",
--		.hw_id		= HWID_ANTMINER_S3,
--		.hw_rev		= 1,
--		.layout_id	= "8Mlzma",
--	}, {
--		/* terminating entry */
--	}
-+static const struct fw_region regions[] = {
-+	/* Default region (universal) uses code 0 as well */
-+	{"US", 1},
-+	{"EU", 0},
- };
- 
- /*
-@@ -458,7 +200,7 @@ static struct board_info boards[] = {
- #define ERRS(fmt, ...) do { \
- 	int save = errno; \
- 	fflush(0); \
--	fprintf(stderr, "[%s] *** error: " fmt "\n", \
-+	fprintf(stderr, "[%s] *** error: " fmt ": %s\n", \
- 			progname, ## __VA_ARGS__, strerror(save)); \
- } while (0)
- 
-@@ -466,35 +208,7 @@ static struct board_info boards[] = {
- 	fprintf(stderr, "[%s] " fmt "\n", progname, ## __VA_ARGS__ ); \
- } while (0)
- 
--static struct board_info *find_board(char *id)
--{
--	struct board_info *ret;
--	struct board_info *board;
--
--	ret = NULL;
--	for (board = boards; board->id != NULL; board++){
--		if (strcasecmp(id, board->id) == 0) {
--			ret = board;
--			break;
--		}
--	};
--
--	return ret;
--}
--
--static struct board_info *find_board_by_hwid(uint32_t hw_id)
--{
--	struct board_info *board;
--
--	for (board = boards; board->id != NULL; board++) {
--		if (hw_id == board->hw_id)
--			return board;
--	};
--
--	return NULL;
--}
--
--static struct flash_layout *find_layout(char *id)
-+static struct flash_layout *find_layout(const char *id)
- {
- 	struct flash_layout *ret;
- 	struct flash_layout *l;
-@@ -510,21 +224,29 @@ static struct flash_layout *find_layout(char *id)
- 	return ret;
- }
- 
-+static const struct fw_region * find_region(const char *country) {
-+	size_t i;
-+
-+	for (i = 0; i < ARRAY_SIZE(regions); i++) {
-+		if (strcasecmp(regions[i].name, country) == 0)
-+			return &regions[i];
-+	}
-+
-+	return NULL;
-+}
-+
- static void usage(int status)
- {
--	FILE *stream = (status != EXIT_SUCCESS) ? stderr : stdout;
--	struct board_info *board;
--
--	fprintf(stream, "Usage: %s [OPTIONS...]\n", progname);
--	fprintf(stream,
-+	fprintf(stderr, "Usage: %s [OPTIONS...]\n", progname);
-+	fprintf(stderr,
- "\n"
- "Options:\n"
--"  -B <board>      create image for the board specified with <board>\n"
- "  -c              use combined kernel image\n"
- "  -E <ep>         overwrite kernel entry point with <ep> (hexval prefixed with 0x)\n"
- "  -L <la>         overwrite kernel load address with <la> (hexval prefixed with 0x)\n"
- "  -H <hwid>       use hardware id specified with <hwid>\n"
- "  -W <hwrev>      use hardware revision specified with <hwrev>\n"
-+"  -C <country>    set region code to <country>\n"
- "  -F <id>         use flash layout specified with <id>\n"
- "  -k <file>       read kernel image from the file <file>\n"
- "  -r <file>       read rootfs image from the file <file>\n"
-@@ -537,6 +259,7 @@ static void usage(int status)
- "  -N <vendor>     set image vendor to <vendor>\n"
- "  -V <version>    set image version to <version>\n"
- "  -v <version>    set firmware version to <version>\n"
-+"  -m <version>    set header version to <version>\n"
- "  -i <file>       inspect given firmware file <file>\n"
- "  -x              extract kernel and rootfs while inspecting (requires -i)\n"
- "  -X <size>       reserve <size> bytes in the firmware image (hexval prefixed with 0x)\n"
-@@ -546,7 +269,7 @@ static void usage(int status)
- 	exit(status);
- }
- 
--static int get_md5(char *data, int size, char *md5)
-+static void get_md5(const char *data, int size, uint8_t *md5)
- {
- 	MD5_CTX ctx;
- 
-@@ -573,7 +296,7 @@ static int get_file_stat(struct file_info *fdata)
- 	return 0;
- }
- 
--static int read_to_buf(struct file_info *fdata, char *buf)
-+static int read_to_buf(const struct file_info *fdata, char *buf)
- {
- 	FILE *f;
- 	int ret = EXIT_FAILURE;
-@@ -602,6 +325,7 @@ static int read_to_buf(struct file_info *fdata, char *buf)
- static int check_options(void)
- {
- 	int ret;
-+	int exceed_bytes;
- 
- 	if (inspect_info.file_name) {
- 		ret = get_file_stat(&inspect_info);
-@@ -614,33 +338,28 @@ static int check_options(void)
- 		return -1;
- 	}
- 
--	if (board_id == NULL && opt_hw_id == NULL) {
--		ERR("either board or hardware id must be specified");
-+	if (opt_hw_id == NULL) {
-+		ERR("hardware id not specified");
- 		return -1;
- 	}
-+	hw_id = strtoul(opt_hw_id, NULL, 0);
- 
--	if (board_id) {
--		board = find_board(board_id);
--		if (board == NULL) {
--			ERR("unknown/unsupported board id \"%s\"", board_id);
--			return -1;
--		}
--		if (layout_id == NULL)
--			layout_id = board->layout_id;
-+	if (layout_id == NULL) {
-+		ERR("flash layout is not specified");
-+		return -1;
-+	}
- 
--		hw_id = board->hw_id;
--		hw_rev = board->hw_rev;
--	} else {
--		if (layout_id == NULL) {
--			ERR("flash layout is not specified");
-+	if (opt_hw_rev)
-+		hw_rev = strtoul(opt_hw_rev, NULL, 0);
-+	else
-+		hw_rev = 1;
-+
-+	if (country) {
-+		region = find_region(country);
-+		if (!region) {
-+			ERR("unknown region code \"%s\"", country);
- 			return -1;
- 		}
--		hw_id = strtoul(opt_hw_id, NULL, 0);
--
--		if (opt_hw_rev)
--			hw_rev = strtoul(opt_hw_rev, NULL, 0);
--		else
--			hw_rev = 1;
- 	}
- 
- 	layout = find_layout(layout_id);
-@@ -675,10 +394,10 @@ static int check_options(void)
- 	kernel_len = kernel_info.file_size;
- 
- 	if (combined) {
--		if (kernel_info.file_size >
--		    fw_max_len - sizeof(struct fw_header)) {
-+		exceed_bytes = kernel_info.file_size - (fw_max_len - sizeof(struct fw_header));
-+		if (exceed_bytes > 0) {
- 			if (!ignore_size) {
--				ERR("kernel image is too big");
-+				ERR("kernel image is too big by %i bytes", exceed_bytes);
- 				return -1;
- 			}
- 			layout->fw_max_len = sizeof(struct fw_header) +
-@@ -702,21 +421,21 @@ static int check_options(void)
- 
- 			DBG("kernel length aligned to %u", kernel_len);
- 
--			if (kernel_len + rootfs_info.file_size >
--			    fw_max_len - sizeof(struct fw_header)) {
--				ERR("images are too big");
-+			exceed_bytes = kernel_len + rootfs_info.file_size - (fw_max_len - sizeof(struct fw_header));
-+			if (exceed_bytes > 0) {
-+				ERR("images are too big by %i bytes", exceed_bytes);
- 				return -1;
- 			}
- 		} else {
--			if (kernel_info.file_size >
--			    rootfs_ofs - sizeof(struct fw_header)) {
--				ERR("kernel image is too big");
-+			exceed_bytes = kernel_info.file_size - (rootfs_ofs - sizeof(struct fw_header));
-+			if (exceed_bytes > 0) {
-+				ERR("kernel image is too big by %i bytes", exceed_bytes);
- 				return -1;
- 			}
- 
--			if (rootfs_info.file_size >
--			    (fw_max_len - rootfs_ofs)) {
--				ERR("rootfs image is too big");
-+			exceed_bytes = rootfs_info.file_size - (fw_max_len - rootfs_ofs);
-+			if (exceed_bytes > 0) {
-+				ERR("rootfs image is too big by %i bytes", exceed_bytes);
- 				return -1;
- 			}
- 		}
-@@ -733,6 +452,15 @@ static int check_options(void)
- 		return -1;
- 	}
- 
-+	if (opt_hdr_ver == 1) {
-+		hdr_ver = HEADER_VERSION_V1;
-+	} else if (opt_hdr_ver == 2) {
-+		hdr_ver = HEADER_VERSION_V2;
-+	} else {
-+		ERR("invalid header version '%u'", opt_hdr_ver);
-+		return -1;
-+	}
-+
- 	return 0;
- }
- 
-@@ -742,7 +470,7 @@ static void fill_header(char *buf, int len)
- 
- 	memset(hdr, 0, sizeof(struct fw_header));
- 
--	hdr->version = htonl(HEADER_VERSION_V1);
-+	hdr->version = htonl(hdr_ver);
- 	strncpy(hdr->vendor_name, vendor, sizeof(hdr->vendor_name));
- 	strncpy(hdr->fw_version, version, sizeof(hdr->fw_version));
- 	hdr->hw_id = htonl(hw_id);
-@@ -767,6 +495,18 @@ static void fill_header(char *buf, int len)
- 	hdr->ver_mid = htons(fw_ver_mid);
- 	hdr->ver_lo = htons(fw_ver_lo);
- 
-+	if (region) {
-+		hdr->region_code = htonl(region->code);
-+		snprintf(
-+			hdr->region_str1, sizeof(hdr->region_str1), "00000000;%02X%02X%02X%02X;",
-+			region->name[0], region->name[1], region->name[2], region->name[3]
-+		);
-+		snprintf(
-+			hdr->region_str2, sizeof(hdr->region_str2), "%02X%02X%02X%02X",
-+			region->name[0], region->name[1], region->name[2], region->name[3]
-+		);
-+	}
-+
- 	get_md5(buf, len, hdr->md5sum1);
- }
- 
-@@ -804,7 +544,7 @@ static int pad_jffs2(char *buf, int currlen)
- 	return len;
- }
- 
--static int write_fw(char *data, int len)
-+static int write_fw(const char *data, int len)
- {
- 	FILE *f;
- 	int ret = EXIT_FAILURE;
-@@ -896,61 +636,22 @@ static int build_fw(void)
- }
- 
- /* Helper functions to inspect_fw() representing different output formats */
--static inline void inspect_fw_pstr(char *label, char *str)
-+static inline void inspect_fw_pstr(const char *label, const char *str)
- {
- 	printf("%-23s: %s\n", label, str);
- }
- 
--static inline void inspect_fw_phex(char *label, uint32_t val)
-+static inline void inspect_fw_phex(const char *label, uint32_t val)
- {
- 	printf("%-23s: 0x%08x\n", label, val);
- }
- 
--static inline void inspect_fw_phexpost(char *label,
--                                       uint32_t val, char *post)
--{
--	printf("%-23s: 0x%08x (%s)\n", label, val, post);
--}
--
--static inline void inspect_fw_phexdef(char *label,
--                                      uint32_t val, uint32_t defval)
--{
--	printf("%-23s: 0x%08x                  ", label, val);
--
--	if (val == defval)
--		printf("(== OpenWrt default)\n");
--	else
--		printf("(OpenWrt default: 0x%08x)\n", defval);
--}
--
--static inline void inspect_fw_phexexp(char *label,
--                                      uint32_t val, uint32_t expval)
--{
--	printf("%-23s: 0x%08x ", label, val);
--
--	if (val == expval)
--		printf("(ok)\n");
--	else
--		printf("(expected: 0x%08x)\n", expval);
--}
--
--static inline void inspect_fw_phexdec(char *label, uint32_t val)
-+static inline void inspect_fw_phexdec(const char *label, uint32_t val)
- {
- 	printf("%-23s: 0x%08x / %8u bytes\n", label, val, val);
- }
- 
--static inline void inspect_fw_phexdecdef(char *label,
--                                         uint32_t val, uint32_t defval)
--{
--	printf("%-23s: 0x%08x / %8u bytes ", label, val, val);
--
--	if (val == defval)
--		printf("(== OpenWrt default)\n");
--	else
--		printf("(OpenWrt default: 0x%08x)\n", defval);
--}
--
--static inline void inspect_fw_pmd5sum(char *label, uint8_t *val, char *text)
-+static inline void inspect_fw_pmd5sum(const char *label, const uint8_t *val, const char *text)
- {
- 	int i;
- 
-@@ -965,7 +666,6 @@ static int inspect_fw(void)
- 	char *buf;
- 	struct fw_header *hdr;
- 	uint8_t md5sum[MD5SUM_LEN];
--	struct board_info *board;
- 	int ret = EXIT_FAILURE;
- 
- 	buf = malloc(inspect_info.file_size);
-@@ -982,16 +682,14 @@ static int inspect_fw(void)
- 	inspect_fw_pstr("File name", inspect_info.file_name);
- 	inspect_fw_phexdec("File size", inspect_info.file_size);
- 
--	if (ntohl(hdr->version) != HEADER_VERSION_V1) {
--		ERR("file does not seem to have V1 header!\n");
-+	if ((ntohl(hdr->version) != HEADER_VERSION_V1) &&
-+	    (ntohl(hdr->version) != HEADER_VERSION_V2)) {
-+		ERR("file does not seem to have V1/V2 header!\n");
- 		goto out_free_buf;
- 	}
- 
- 	inspect_fw_phexdec("Version 1 Header size", sizeof(struct fw_header));
- 
--	if (ntohl(hdr->unk1) != 0)
--		inspect_fw_phexdec("Unknown value 1", hdr->unk1);
--
- 	memcpy(md5sum, hdr->md5sum1, sizeof(md5sum));
- 	if (ntohl(hdr->boot_len) == 0)
- 		memcpy(hdr->md5sum1, md5salt_normal, sizeof(md5sum));
-@@ -1016,19 +714,9 @@ static int inspect_fw(void)
- 
- 	inspect_fw_pstr("Vendor name", hdr->vendor_name);
- 	inspect_fw_pstr("Firmware version", hdr->fw_version);
--	board = find_board_by_hwid(ntohl(hdr->hw_id));
--	if (board) {
--		layout = find_layout(board->layout_id);
--		inspect_fw_phexpost("Hardware ID",
--		                    ntohl(hdr->hw_id), board->id);
--		inspect_fw_phexexp("Hardware Revision",
--		                   ntohl(hdr->hw_rev), board->hw_rev);
--	} else {
--		inspect_fw_phexpost("Hardware ID",
--		                    ntohl(hdr->hw_id), "unknown");
--		inspect_fw_phex("Hardware Revision",
--		                ntohl(hdr->hw_rev));
--	}
-+	inspect_fw_phex("Hardware ID", ntohl(hdr->hw_id));
-+	inspect_fw_phex("Hardware Revision", ntohl(hdr->hw_rev));
-+	inspect_fw_phex("Region code", ntohl(hdr->region_code));
- 
- 	printf("\n");
- 
-@@ -1036,24 +724,12 @@ static int inspect_fw(void)
- 	                   ntohl(hdr->kernel_ofs));
- 	inspect_fw_phexdec("Kernel data length",
- 	                   ntohl(hdr->kernel_len));
--	if (board) {
--		inspect_fw_phexdef("Kernel load address",
--		                   ntohl(hdr->kernel_la),
--		                   layout ? layout->kernel_la : 0xffffffff);
--		inspect_fw_phexdef("Kernel entry point",
--		                   ntohl(hdr->kernel_ep),
--		                   layout ? layout->kernel_ep : 0xffffffff);
--		inspect_fw_phexdecdef("Rootfs data offset",
--		                      ntohl(hdr->rootfs_ofs),
--		                      layout ? layout->rootfs_ofs : 0xffffffff);
--	} else {
--		inspect_fw_phex("Kernel load address",
--		                ntohl(hdr->kernel_la));
--		inspect_fw_phex("Kernel entry point",
--		                ntohl(hdr->kernel_ep));
--		inspect_fw_phexdec("Rootfs data offset",
--		                   ntohl(hdr->rootfs_ofs));
--	}
-+	inspect_fw_phex("Kernel load address",
-+	                ntohl(hdr->kernel_la));
-+	inspect_fw_phex("Kernel entry point",
-+	                ntohl(hdr->kernel_ep));
-+	inspect_fw_phexdec("Rootfs data offset",
-+	                   ntohl(hdr->rootfs_ofs));
- 	inspect_fw_phexdec("Rootfs data length",
- 	                   ntohl(hdr->rootfs_len));
- 	inspect_fw_phexdec("Boot loader data offset",
-@@ -1109,16 +785,13 @@ static int inspect_fw(void)
- int main(int argc, char *argv[])
- {
- 	int ret = EXIT_FAILURE;
--	int err;
--
--	FILE *outfile;
- 
- 	progname = basename(argv[0]);
- 
- 	while ( 1 ) {
- 		int c;
- 
--		c = getopt(argc, argv, "a:B:H:E:F:L:V:N:W:ci:k:r:R:o:xX:hsSjv:");
-+		c = getopt(argc, argv, "a:H:E:F:L:m:V:N:W:C:ci:k:r:R:o:xX:hsSjv:");
- 		if (c == -1)
- 			break;
- 
-@@ -1126,9 +799,6 @@ int main(int argc, char *argv[])
- 		case 'a':
- 			sscanf(optarg, "0x%x", &rootfs_align);
- 			break;
--		case 'B':
--			board_id = optarg;
--			break;
- 		case 'H':
- 			opt_hw_id = optarg;
- 			break;
-@@ -1141,9 +811,15 @@ int main(int argc, char *argv[])
- 		case 'W':
- 			opt_hw_rev = optarg;
- 			break;
-+		case 'C':
-+			country = optarg;
-+			break;
- 		case 'L':
- 			sscanf(optarg, "0x%x", &kernel_la);
- 			break;
-+		case 'm':
-+			sscanf(optarg, "%u", &opt_hdr_ver);
-+			break;
- 		case 'V':
- 			version = optarg;
- 			break;
-@@ -1207,4 +883,3 @@ int main(int argc, char *argv[])
-  out:
- 	return ret;
- }
--
diff --git a/build_patches/openwrt/0007-use-EU-code.patch b/build_patches/openwrt/0007-use-EU-code.patch
deleted file mode 100644
index 1632bdb..0000000
--- a/build_patches/openwrt/0007-use-EU-code.patch
+++ /dev/null
@@ -1,31 +0,0 @@
-diff --git target/linux/ar71xx/image/Makefile target/linux/ar71xx/image/Makefile
-index a8073f2..5f0df54 100644
---- target/linux/ar71xx/image/Makefile
-+++ target/linux/ar71xx/image/Makefile
-@@ -58,13 +58,14 @@ define Build/mktplinkfw
- 		-o $@.new \
- 		-j -X 0x40000 \
- 		-a $(call rootfs_align,$(FILESYSTEM)) \
--		$(if $(findstring sysupgrade,$1),-s) && mv $@.new $@ || rm -f $@
-+		$(wordlist 2,$(words $(1)),$(1)) \
-+		$(if $(findstring sysupgrade,$(word 1,$(1))),-s) && mv $@.new $@ || rm -f $@
- endef
- 
- # -c combined image
- define Build/mktplinkfw-initramfs
- 	$(STAGING_DIR_HOST)/bin/mktplinkfw \
--		-H $(TPLINK_HWID) -W $(TPLINK_HWREV) -F $(TPLINK_FLASHLAYOUT) -N OpenWrt -V $(REVISION) \
-+		-H $(TPLINK_HWID) -W $(TPLINK_HWREV) -F $(TPLINK_FLASHLAYOUT) -N OpenWrt -V $(REVISION) $(1) \
- 		-k $@ \
- 		-o $@.new \
- 		-s -S \
-@@ -589,6 +598,9 @@ define Device/tl-wr841n-v11
-     BOARDNAME := TL-WR841N-v11
-     DEVICE_PROFILE := TLWR841
-     TPLINK_HWID := 0x08410011
-+    IMAGES += factory-us.bin factory-eu.bin
-+    IMAGE/factory-eu.bin := append-rootfs | mktplinkfw factory -C EU
-+    IMAGE/factory-us.bin := append-rootfs | mktplinkfw factory -C US
- endef
- 
- define Device/tl-wr842n-v2
diff --git a/build_patches/openwrt/0008-support-region-code-on-cpe.patch b/build_patches/openwrt/0008-support-region-code-on-cpe.patch
deleted file mode 100644
index 666cd9b..0000000
--- a/build_patches/openwrt/0008-support-region-code-on-cpe.patch
+++ /dev/null
@@ -1,24 +0,0 @@
-diff --git tools/firmware-utils/src/tplink-safeloader.c tools/firmware-utils/src/tplink-safeloader.c
-index 77a894b..5889bda 100644
---- tools/firmware-utils/src/tplink-safeloader.c
-+++ tools/firmware-utils/src/tplink-safeloader.c
-@@ -134,11 +134,19 @@ static const char cpe510_support_list[] =
- 	"SupportList:\r\n"
- 	"CPE510(TP-LINK|UN|N300-5):1.0\r\n"
- 	"CPE510(TP-LINK|UN|N300-5):1.1\r\n"
-+	"CPE510(TP-LINK|US|N300-5):1.1\r\n"
-+	"CPE510(TP-LINK|EU|N300-5):1.1\r\n"
- 	"CPE520(TP-LINK|UN|N300-5):1.0\r\n"
- 	"CPE520(TP-LINK|UN|N300-5):1.1\r\n"
-+	"CPE520(TP-LINK|US|N300-5):1.1\r\n"
-+	"CPE520(TP-LINK|EU|N300-5):1.1\r\n"
- 	"CPE210(TP-LINK|UN|N300-2):1.0\r\n"
- 	"CPE210(TP-LINK|UN|N300-2):1.1\r\n"
-+	"CPE210(TP-LINK|US|N300-2):1.1\r\n"
-+	"CPE210(TP-LINK|EU|N300-2):1.1\r\n"
- 	"CPE220(TP-LINK|UN|N300-2):1.0\r\n"
-+	"CPE220(TP-LINK|US|N300-2):1.1\r\n"
-+	"CPE220(TP-LINK|EU|N300-2):1.1\r\n"
- 	"CPE220(TP-LINK|UN|N300-2):1.1\r\n";
- 
- #define error(_ret, _errno, _str, ...)				\
-- 
2.1.4



Mehr Informationen über die Mailingliste franken-dev