From ccabe4a1b447e9bc7efd0a7eb19e843bc46702b1 Mon Sep 17 00:00:00 2001 From: Gabor Juhos Date: Sun, 9 Sep 2012 14:05:28 +0000 Subject: [PATCH] ar71xx: add RouterBoot related helper routines SVN-Revision: 33347 --- target/linux/ar71xx/config-3.3 | 1 + .../ar71xx/files/arch/mips/ath79/routerboot.c | 100 ++++++++++++++++++ .../ar71xx/files/arch/mips/ath79/routerboot.h | 26 +++++ .../602-MIPS-ath79-add-openwrt-stuff.patch | 8 +- .../610-MIPS-ath79-openwrt-machines.patch | 6 +- .../patches-3.3/611-TEW-712BR-support.patch | 2 +- .../patches-3.3/612-ALL0315N-support.patch | 2 +- .../patches-3.3/613-RB2011-support.patch | 18 ++-- 8 files changed, 145 insertions(+), 18 deletions(-) create mode 100644 target/linux/ar71xx/files/arch/mips/ath79/routerboot.c create mode 100644 target/linux/ar71xx/files/arch/mips/ath79/routerboot.h diff --git a/target/linux/ar71xx/config-3.3 b/target/linux/ar71xx/config-3.3 index a13fded6e3..fd113addd1 100644 --- a/target/linux/ar71xx/config-3.3 +++ b/target/linux/ar71xx/config-3.3 @@ -83,6 +83,7 @@ CONFIG_ATH79_MACH_WZR_HP_G450H=y CONFIG_ATH79_MACH_ZCN_1523H=y CONFIG_ATH79_NVRAM=y CONFIG_ATH79_PCI_ATH9K_FIXUP=y +# CONFIG_ATH79_ROUTERBOOT is not set # CONFIG_ATH79_WDT is not set CONFIG_BCMA_POSSIBLE=y CONFIG_CC_OPTIMIZE_FOR_SIZE=y diff --git a/target/linux/ar71xx/files/arch/mips/ath79/routerboot.c b/target/linux/ar71xx/files/arch/mips/ath79/routerboot.c new file mode 100644 index 0000000000..3c6f9aaeb3 --- /dev/null +++ b/target/linux/ar71xx/files/arch/mips/ath79/routerboot.c @@ -0,0 +1,100 @@ +/* + * RouterBoot helper routines + * + * Copyright (C) 2012 Gabor Juhos + * + * 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 +#include +#include + +#include "routerboot.h" + +static u32 get_u32(void *buf) +{ + u8 *p = buf; + + return ((u32) p[3] + ((u32) p[2] << 8) + ((u32) p[1] << 16) + + ((u32) p[0] << 24)); +} + +static u16 get_u16(void *buf) +{ + u8 *p = buf; + + return (u16) p[1] + ((u16) p[0] << 8); +} + +__init int +routerboot_find_tag(u8 *buf, unsigned int buflen, u16 tag_id, + u8 **tag_data, u16 *tag_len) +{ + uint32_t magic; + int ret; + + if (buflen < 4) + return -EINVAL; + + magic = get_u32(buf); + switch (magic) { + case RB_MAGIC_HARD: + /* skip magic value */ + buf += 4; + buflen -= 4; + break; + + case RB_MAGIC_SOFT: + if (buflen < 8) + return -EINVAL; + + /* skip magic and CRC value */ + buf += 8; + buflen -= 8; + + break; + + default: + return -EINVAL; + } + + ret = -ENOENT; + while (buflen > 2) { + u16 id; + u16 len; + + len = get_u16(buf); + buf += 2; + buflen -= 2; + + if (buflen < 2) + break; + + id = get_u16(buf); + buf += 2; + buflen -= 2; + + if (id == RB_ID_TERMINATOR) + break; + + if (buflen < len) + break; + + if (id == tag_id) { + if (tag_len) + *tag_len = len; + if (tag_data) + *tag_data = buf; + ret = 0; + break; + } + + buf += len; + buflen -= len; + } + + return ret; +} diff --git a/target/linux/ar71xx/files/arch/mips/ath79/routerboot.h b/target/linux/ar71xx/files/arch/mips/ath79/routerboot.h new file mode 100644 index 0000000000..9a4dde59ec --- /dev/null +++ b/target/linux/ar71xx/files/arch/mips/ath79/routerboot.h @@ -0,0 +1,26 @@ +/* + * RouterBoot definitions + * + * Copyright (C) 2012 Gabor Juhos + * + * 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. + */ + +#ifndef _ATH79_ROUTERBOOT_H_ +#define _ATH79_ROUTERBOOT_H_ + +#ifdef CONFIG_ATH79_ROUTERBOOT +int routerboot_find_tag(u8 *buf, unsigned int buflen, u16 tag_id, + u8 **tag_data, u16 *tag_len); +#else +static inline int +routerboot_find_tag(u8 *buf, unsigned int buflen, u16 tag_id, + u8 **tag_data, u16 *tag_len) +{ + return -ENOENT; +} +#endif + +#endif /* _ATH79_ROUTERBOOT_H_ */ diff --git a/target/linux/ar71xx/patches-3.3/602-MIPS-ath79-add-openwrt-stuff.patch b/target/linux/ar71xx/patches-3.3/602-MIPS-ath79-add-openwrt-stuff.patch index 85256e77ee..3c96819df4 100644 --- a/target/linux/ar71xx/patches-3.3/602-MIPS-ath79-add-openwrt-stuff.patch +++ b/target/linux/ar71xx/patches-3.3/602-MIPS-ath79-add-openwrt-stuff.patch @@ -21,7 +21,7 @@ config PCI_AR724X def_bool n -@@ -125,4 +139,10 @@ config ATH79_DEV_WMAC +@@ -125,4 +139,13 @@ config ATH79_DEV_WMAC depends on (SOC_AR913X || SOC_AR933X || SOC_AR934X || SOC_QCA955X) def_bool n @@ -30,11 +30,14 @@ + +config ATH79_PCI_ATH9K_FIXUP + def_bool n ++ ++config ATH79_ROUTERBOOT ++ def_bool n + endif --- a/arch/mips/ath79/Makefile +++ b/arch/mips/ath79/Makefile -@@ -17,13 +17,23 @@ obj-$(CONFIG_PCI) += pci.o +@@ -17,13 +17,24 @@ obj-$(CONFIG_PCI) += pci.o # Devices # obj-y += dev-common.o @@ -53,6 +56,7 @@ +# +obj-$(CONFIG_ATH79_NVRAM) += nvram.o +obj-$(CONFIG_ATH79_PCI_ATH9K_FIXUP) += pci-ath9k-fixup.o ++obj-$(CONFIG_ATH79_ROUTERBOOT) += routerboot.o + +# # Machines diff --git a/target/linux/ar71xx/patches-3.3/610-MIPS-ath79-openwrt-machines.patch b/target/linux/ar71xx/patches-3.3/610-MIPS-ath79-openwrt-machines.patch index 0efdee15af..97e957f2dc 100644 --- a/target/linux/ar71xx/patches-3.3/610-MIPS-ath79-openwrt-machines.patch +++ b/target/linux/ar71xx/patches-3.3/610-MIPS-ath79-openwrt-machines.patch @@ -670,8 +670,8 @@ def_bool n config ATH79_DEV_GPIO_BUTTONS -@@ -153,4 +667,7 @@ config ATH79_NVRAM - config ATH79_PCI_ATH9K_FIXUP +@@ -156,4 +670,7 @@ config ATH79_PCI_ATH9K_FIXUP + config ATH79_ROUTERBOOT def_bool n +config PCI_AR724X @@ -680,7 +680,7 @@ endif --- a/arch/mips/ath79/Makefile +++ b/arch/mips/ath79/Makefile -@@ -36,9 +36,62 @@ obj-$(CONFIG_ATH79_PCI_ATH9K_FIXUP) += p +@@ -37,9 +37,62 @@ obj-$(CONFIG_ATH79_ROUTERBOOT) += route # # Machines # diff --git a/target/linux/ar71xx/patches-3.3/611-TEW-712BR-support.patch b/target/linux/ar71xx/patches-3.3/611-TEW-712BR-support.patch index 94a056aa51..b8c227e4ca 100644 --- a/target/linux/ar71xx/patches-3.3/611-TEW-712BR-support.patch +++ b/target/linux/ar71xx/patches-3.3/611-TEW-712BR-support.patch @@ -19,7 +19,7 @@ select SOC_AR71XX --- a/arch/mips/ath79/Makefile +++ b/arch/mips/ath79/Makefile -@@ -67,6 +67,7 @@ obj-$(CONFIG_ATH79_MACH_RB750) += mach- +@@ -68,6 +68,7 @@ obj-$(CONFIG_ATH79_MACH_RB750) += mach- obj-$(CONFIG_ATH79_MACH_RW2458N) += mach-rw2458n.o obj-$(CONFIG_ATH79_MACH_TEW_632BRP) += mach-tew-632brp.o obj-$(CONFIG_ATH79_MACH_TEW_673GRU) += mach-tew-673gru.o diff --git a/target/linux/ar71xx/patches-3.3/612-ALL0315N-support.patch b/target/linux/ar71xx/patches-3.3/612-ALL0315N-support.patch index bc4e6695e8..fafb112400 100644 --- a/target/linux/ar71xx/patches-3.3/612-ALL0315N-support.patch +++ b/target/linux/ar71xx/patches-3.3/612-ALL0315N-support.patch @@ -18,7 +18,7 @@ select SOC_AR724X --- a/arch/mips/ath79/Makefile +++ b/arch/mips/ath79/Makefile -@@ -39,6 +39,7 @@ obj-$(CONFIG_ATH79_PCI_ATH9K_FIXUP) += p +@@ -40,6 +40,7 @@ obj-$(CONFIG_ATH79_ROUTERBOOT) += route obj-$(CONFIG_ATH79_MACH_ALFA_AP96) += mach-alfa-ap96.o obj-$(CONFIG_ATH79_MACH_ALFA_NX) += mach-alfa-nx.o obj-$(CONFIG_ATH79_MACH_ALL0258N) += mach-all0258n.o diff --git a/target/linux/ar71xx/patches-3.3/613-RB2011-support.patch b/target/linux/ar71xx/patches-3.3/613-RB2011-support.patch index ee16710306..6622b4d96e 100644 --- a/target/linux/ar71xx/patches-3.3/613-RB2011-support.patch +++ b/target/linux/ar71xx/patches-3.3/613-RB2011-support.patch @@ -1,8 +1,8 @@ --- a/arch/mips/ath79/Kconfig +++ b/arch/mips/ath79/Kconfig -@@ -333,6 +333,11 @@ config ATH79_MACH_RB750 - select ATH79_DEV_AP9X_PCI if PCI +@@ -334,6 +334,11 @@ config ATH79_MACH_RB750 select ATH79_DEV_USB + select RLE_DECOMPRESS +config ATH79_MACH_RB2011 + bool "MikroTik RouterBOARD 2011 support" @@ -22,11 +22,9 @@ ATH79_MACH_RW2458N, /* Redwave RW2458N */ ATH79_MACH_TEW_632BRP, /* TRENDnet TEW-632BRP */ ATH79_MACH_TEW_673GRU, /* TRENDnet TEW-673GRU */ -Index: linux-3.3.8/arch/mips/ath79/Makefile -=================================================================== ---- linux-3.3.8.orig/arch/mips/ath79/Makefile -+++ linux-3.3.8/arch/mips/ath79/Makefile -@@ -65,6 +65,7 @@ obj-$(CONFIG_ATH79_MACH_PB44) += mach-p +--- a/arch/mips/ath79/Makefile ++++ b/arch/mips/ath79/Makefile +@@ -66,6 +66,7 @@ obj-$(CONFIG_ATH79_MACH_PB44) += mach-p obj-$(CONFIG_ATH79_MACH_PB92) += mach-pb92.o obj-$(CONFIG_ATH79_MACH_RB4XX) += mach-rb4xx.o obj-$(CONFIG_ATH79_MACH_RB750) += mach-rb750.o @@ -34,10 +32,8 @@ Index: linux-3.3.8/arch/mips/ath79/Makefile obj-$(CONFIG_ATH79_MACH_RW2458N) += mach-rw2458n.o obj-$(CONFIG_ATH79_MACH_TEW_632BRP) += mach-tew-632brp.o obj-$(CONFIG_ATH79_MACH_TEW_673GRU) += mach-tew-673gru.o -Index: linux-3.3.8/arch/mips/ath79/prom.c -=================================================================== ---- linux-3.3.8.orig/arch/mips/ath79/prom.c -+++ linux-3.3.8/arch/mips/ath79/prom.c +--- a/arch/mips/ath79/prom.c ++++ b/arch/mips/ath79/prom.c @@ -181,7 +181,8 @@ void __init prom_init(void) } } -- 2.30.2