ar71xx: add RouterBoot related helper routines

SVN-Revision: 33347
This commit is contained in:
Gabor Juhos 2012-09-09 14:05:28 +00:00
parent 2323120d5e
commit ccabe4a1b4
8 changed files with 145 additions and 18 deletions

View File

@ -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

View File

@ -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;
}

View File

@ -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_ */

View File

@ -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

View File

@ -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
#

View File

@ -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

View File

@ -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

View File

@ -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)
}
}