aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux/brcm47xx/image/lzma-loader
diff options
context:
space:
mode:
authorHauke Mehrtens <hauke@hauke-m.de>2010-12-02 21:27:54 +0000
committerHauke Mehrtens <hauke@hauke-m.de>2010-12-02 21:27:54 +0000
commit41b3383499e1ba10c49d77dd0526f1a045128f97 (patch)
tree660b1ad6a7d8aadc9ac67e3b15dcfde56c0725cc /target/linux/brcm47xx/image/lzma-loader
parent4482f4b5f127fbccfc9771d68617bffd47b49a27 (diff)
downloadupstream-41b3383499e1ba10c49d77dd0526f1a045128f97.tar.gz
upstream-41b3383499e1ba10c49d77dd0526f1a045128f97.tar.bz2
upstream-41b3383499e1ba10c49d77dd0526f1a045128f97.zip
brcm47xx: Add edimax PS1208mfg support
Thank you clemvangelis for the patches. (closes #7672) SVN-Revision: 24217
Diffstat (limited to 'target/linux/brcm47xx/image/lzma-loader')
-rw-r--r--target/linux/brcm47xx/image/lzma-loader/src/decompress.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/target/linux/brcm47xx/image/lzma-loader/src/decompress.c b/target/linux/brcm47xx/image/lzma-loader/src/decompress.c
index ce2876a304..05681b152d 100644
--- a/target/linux/brcm47xx/image/lzma-loader/src/decompress.c
+++ b/target/linux/brcm47xx/image/lzma-loader/src/decompress.c
@@ -87,6 +87,9 @@ struct trx_header {
unsigned int offsets[3]; /* Offsets of partitions from start of header */
};
+#define EDIMAX_PS_HEADER_MAGIC 0x36315350 /* "PS16" */
+#define EDIMAX_PS_HEADER_LEN 0xc /* 12 bytes long for edimax header */
+
/* beyound the image end, size not known in advance */
extern unsigned char workspace[];
@@ -135,8 +138,12 @@ void entry(unsigned long icache_size, unsigned long icache_lsize,
/* look for trx header, 32-bit data access */
for (data = ((unsigned char *) KSEG1ADDR(BCM4710_FLASH));
- ((struct trx_header *)data)->magic != TRX_MAGIC; data += 65536);
+ ((struct trx_header *)data)->magic != TRX_MAGIC &&
+ ((struct trx_header *)data)->magic != EDIMAX_PS_HEADER_MAGIC;
+ data += 65536);
+ if (((struct trx_header *)data)->magic == EDIMAX_PS_HEADER_MAGIC)
+ data += EDIMAX_PS_HEADER_LEN;
/* compressed kernel is in the partition 0 or 1 */
if (((struct trx_header *)data)->offsets[1] > 65536)
data += ((struct trx_header *)data)->offsets[0];