summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjuhosg <juhosg@3c298f89-4303-0410-b956-a3cf2f4a3e73>2012-09-09 14:05:28 +0000
committerjuhosg <juhosg@3c298f89-4303-0410-b956-a3cf2f4a3e73>2012-09-09 14:05:28 +0000
commitd0d14675bbada70be4570e1268e67bade699f160 (patch)
tree0bb215ae9d510c230fe34101a0f2e33a750fd138
parent2622bc18dadfa5c1bea3cf7b851ca1117e8538aa (diff)
ar71xx: add RouterBoot related helper routines
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@33347 3c298f89-4303-0410-b956-a3cf2f4a3e73
-rw-r--r--target/linux/ar71xx/config-3.31
-rw-r--r--target/linux/ar71xx/files/arch/mips/ath79/routerboot.c100
-rw-r--r--target/linux/ar71xx/files/arch/mips/ath79/routerboot.h26
-rw-r--r--target/linux/ar71xx/patches-3.3/602-MIPS-ath79-add-openwrt-stuff.patch8
-rw-r--r--target/linux/ar71xx/patches-3.3/610-MIPS-ath79-openwrt-machines.patch6
-rw-r--r--target/linux/ar71xx/patches-3.3/611-TEW-712BR-support.patch2
-rw-r--r--target/linux/ar71xx/patches-3.3/612-ALL0315N-support.patch2
-rw-r--r--target/linux/ar71xx/patches-3.3/613-RB2011-support.patch18
8 files changed, 145 insertions, 18 deletions
diff --git a/target/linux/ar71xx/config-3.3 b/target/linux/ar71xx/config-3.3
index a13fded6e..fd113addd 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 000000000..3c6f9aaeb
--- /dev/null
+++ b/target/linux/ar71xx/files/arch/mips/ath79/routerboot.c
@@ -0,0 +1,100 @@
+/*
+ * RouterBoot helper routines
+ *
+ * Copyright (C) 2012 Gabor Juhos <juhosg@openwrt.org>
+ *
+ * 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/kernel.h>
+#include <linux/errno.h>
+#include <linux/routerboot.h>
+
+#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 000000000..9a4dde59e
--- /dev/null
+++ b/target/linux/ar71xx/files/arch/mips/ath79/routerboot.h
@@ -0,0 +1,26 @@
+/*
+ * RouterBoot definitions
+ *
+ * Copyright (C) 2012 Gabor Juhos <juhosg@openwrt.org>
+ *
+ * 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 85256e77e..3c96819df 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
@@ -31,10 +31,13 @@
+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 0efdee15a..97e957f2d 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 94a056aa5..b8c227e4c 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 bc4e6695e..fafb11240 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 ee1671030..6622b4d96 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)
}
}