add firmware generation tool for ZyXEL boards
[openwrt/svn-archive/archive.git] / tools / firmware-utils / src / zynos.h
diff --git a/tools/firmware-utils/src/zynos.h b/tools/firmware-utils/src/zynos.h
new file mode 100755 (executable)
index 0000000..ef6c91e
--- /dev/null
@@ -0,0 +1,213 @@
+/*
+ *  $Id$
+ *
+ *  Copyright (C) 2007 OpenWrt.org
+ *  Copyright (C) 2007 Gabor Juhos <juhosg@freemail.hu>
+ *
+ *  This code was based on the information of the ZyXEL's firmware 
+ *  image format written by Kolja Waschk, can be found at: 
+ *  http://www.ixo.de/info/zyxel_uclinux
+ *
+ *  This program is free software; you can redistribute it and/or
+ *  modify it under the terms of the GNU General Public License
+ *  as published by the Free Software Foundation; either version 2
+ *  of the License, or (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the
+ *  Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ *  Boston, MA  02110-1301, USA.
+ */
+
+#ifndef _ZYNOS_H
+#define _ZYNOS_H
+
+
+#define BOOTBASE_NAME_LEN      32
+#define BOOTBASE_MAC_LEN       6
+#define BOOTBASE_FEAT_LEN      22
+
+struct zyn_bootbase_info {
+       char            vendor[BOOTBASE_NAME_LEN]; /* Vendor name */
+       char            model[BOOTBASE_NAME_LEN]; /* Model name */
+       uint32_t        bootext_addr;   /* absolute address of the Boot Extension */
+       uint32_t        res0;
+       uint16_t        model_id;       /* model id */
+       uint8_t         feat_other[BOOTBASE_FEAT_LEN]; /* other feature bits */
+       uint8_t         feat_main;      /* main feature bits */
+       uint8_t         res1;           /* unknown/unused */
+       uint8_t         mac[BOOTBASE_MAC_LEN]; /* mac address */
+       uint8_t         country;        /* default country code */
+       uint8_t         dbgflag;        /* debug flag */
+} __attribute__((packed));
+
+#define ROMBIN_SIG_LEN 3
+#define ROMBIN_VER_LEN 15
+
+struct zyn_rombin_hdr {
+       uint32_t        addr;           /* load address of the object */
+       uint16_t        res0;           /* unknown/unused */
+       char            sig[ROMBIN_SIG_LEN];    /* magic, must be "SIG" */
+       uint8_t         type;           /* type of the object */
+       uint32_t        osize;          /* size of the uncompressed data */
+       uint32_t        csize;          /* size of the compressed data */
+       uint8_t         flags;          /* various flags */
+       uint8_t         res1;           /* unknown/unused */
+       uint16_t        ocsum;          /* csum of the uncompressed data */
+       uint16_t        ccsum;          /* csum of the compressed data */
+       char            ver[ROMBIN_VER_LEN];
+       uint32_t        mmap_addr;      /* address of the Memory Map Table*/
+       uint32_t        res2;           /* unknown/unused*/
+       uint8_t         res3;           /* unknown/unused*/
+} __attribute__((packed));
+
+#define ROMBIN_SIGNATURE       "SIG"
+
+/* Rombin flag bits */
+#define ROMBIN_FLAG_01         0x01
+#define ROMBIN_FLAG_02         0x02
+#define ROMBIN_FLAG_04         0x04
+#define ROMBIN_FLAG_08         0x08
+#define ROMBIN_FLAG_10         0x10
+#define ROMBIN_FLAG_20         0x20
+#define ROMBIN_FLAG_40         0x40
+#define ROMBIN_FLAG_COMPRESSED 0x80    /* the binary is compressed */
+
+/* Object types */
+#define OBJECT_TYPE_ROMIMG     0x01
+#define OBJECT_TYPE_ROMBOOT    0x02
+#define OBJECT_TYPE_BOOTEXT    0x03
+#define OBJECT_TYPE_ROMBIN     0x04
+#define OBJECT_TYPE_ROMDIR     0x05
+#define OBJECT_TYPE_6          0x06
+#define OBJECT_TYPE_ROMMAP     0x07
+#define OBJECT_TYPE_RAM                0x80
+#define OBJECT_TYPE_RAMCODE    0x81
+#define OBJECT_TYPE_RAMBOOT    0x82
+
+/*
+ * Memory Map Table header
+ */
+struct zyn_mmt_hdr {
+       uint16_t        count;
+       uint32_t        user_start;
+       uint32_t        user_end;
+       uint16_t        csum;
+       uint8_t         res[12];
+} __attribute__((packed));
+
+#define OBJECT_NAME_LEN                8
+
+struct zyn_mmt_item {
+       uint8_t         type;   /* type of the object */
+       uint8_t         name[OBJECT_NAME_LEN]; /* name of the object */
+       uint8_t         res0;   /* unused/unknown */
+       uint32_t        addr;
+       uint32_t        size;   /* size of the object */
+       uint8_t         res1[3]; /* unused/unknown */
+       uint8_t         type2;
+} __attribute__((packed));
+
+/*
+ * Board IDs (in big-endian format)
+ */
+#define MID(x) (((x) & 0xFF) << 8) | (((x) & 0xFF00) >> 8)
+
+/* 
+ * Infineon/ADMtek ADM5120 based models 
+ */
+#define ZYNOS_MODEL_ES_2024A           MID(  221)
+#define ZYNOS_MODEL_ES_2024PWR         MID( 4097)
+#define ZYNOS_MODEL_ES_2108            MID(61952)
+#define ZYNOS_MODEL_ES_2108_F          MID(44801)
+#define ZYNOS_MODEL_ES_2108_G          MID(62208)
+#define ZYNOS_MODEL_ES_2108_LC         MID(64512)
+#define ZYNOS_MODEL_ES_2108PWR         MID(62464)
+#define ZYNOS_MODEL_HS_100             MID(61855)
+#define ZYNOS_MODEL_HS_100W            ZYNOS_MODEL_HS_100
+#define ZYNOS_MODEL_P_334              MID(62879)
+#define ZYNOS_MODEL_P_334U             MID(56735)
+#define ZYNOS_MODEL_P_334W             MID(62367)
+#define ZYNOS_MODEL_P_334WH            MID(57344)
+#define ZYNOS_MODEL_P_334WHD           MID(57600)
+#define ZYNOS_MODEL_P_334WT            MID(61343)
+#define ZYNOS_MODEL_P_335              MID(60831)
+#define ZYNOS_MODEL_P_335PLUS          MID( 9472)
+#define ZYNOS_MODEL_P_335U             MID(56479)
+#define ZYNOS_MODEL_P_335WT            ZYNOS_MODEL_P_335
+
+/* 
+ * Texas Instruments AR7 based models 
+ */
+#define ZYNOS_MODEL_P_2602H_61C                MID( 3229)
+#define ZYNOS_MODEL_P_2602H_63C                MID( 3485)
+#define ZYNOS_MODEL_P_2602H_D1A                /* n.a. */
+#define ZYNOS_MODEL_P_2602H_D3A                /* n.a. */
+#define ZYNOS_MODEL_P_2602HW_61C       /* n.a. */
+#define ZYNOS_MODEL_P_2602HW_63                /* n.a. */
+#define ZYNOS_MODEL_P_2602HW_63C       ZYNOS_MODEL_P_2602H_63C
+#define ZYNOS_MODEL_P_2602HW_D1A       /* n.a. */
+#define ZYNOS_MODEL_P_2602HW_D3A       /* n.a. */
+#define ZYNOS_MODEL_P_2602HWL_61       MID( 1181)
+#define ZYNOS_MODEL_P_2602HWL_61C      ZYNOS_MODEL_P_2602H_61C
+#define ZYNOS_MODEL_P_2602HWL_63C      ZYNOS_MODEL_P_2602H_63C
+#define ZYNOS_MODEL_P_2602HWL_D1A      MID( 6301)
+#define ZYNOS_MODEL_P_2602HWL_D3A      MID( 7581)
+#define ZYNOS_MODEL_P_2602HWNLI_D7A    MID( 6813)
+
+#define ZYNOS_MODEL_P_2602R_61         MID( 2205)
+#define ZYNOS_MODEL_P_2602R_63         MID( 3997)
+#define ZYNOS_MODEL_P_2602R_D1A                /* n.a. */
+#define ZYNOS_MODEL_P_2602R_D3A                /* n.a. */
+#define ZYNOS_MODEL_P_2602RL_D1A       MID( 6045)
+#define ZYNOS_MODEL_P_2602RL_D3A       MID( 7069)
+
+#define ZYNOS_MODEL_P_660H_61          MID(19346)
+#define ZYNOS_MODEL_P_660H_63          MID(22162)
+#define ZYNOS_MODEL_P_660H_67          /* n.a. */
+#define ZYNOS_MODEL_P_660H_D1          MID( 7066)
+#define ZYNOS_MODEL_P_660H_D3          MID(13210)
+
+#define ZYNOS_MODEL_P_660HW_61         ZYNOS_MODEL_P_660H_61
+#define ZYNOS_MODEL_P_660HW_63         ZYNOS_MODEL_P_660H_63
+#define ZYNOS_MODEL_P_660HW_67         ZYNOS_MODEL_P_660HW_63
+#define ZYNOS_MODEL_P_660HW_D1         MID( 9114)
+#define ZYNOS_MODEL_P_660HW_D3         MID(12698)
+
+#define ZYNOS_MODEL_P_660R_61          MID(20882)
+#define ZYNOS_MODEL_P_660R_61C         MID( 1178)
+#define ZYNOS_MODEL_P_660R_63          MID(21138)
+#define ZYNOS_MODEL_P_660R_63C         MID(  922)
+#define ZYNOS_MODEL_P_660R_67          ZYNOS_MODEL_P_660R_63
+#define ZYNOS_MODEL_P_660R_67C         /* n.a. */
+#define ZYNOS_MODEL_P_660R_D1          MID( 7322)
+#define ZYNOS_MODEL_P_660R_D3          MID(10138)
+
+#define ZYNOS_MODEL_P_661H_61          MID(19346)
+#define ZYNOS_MODEL_P_661H_63          MID( 1946)
+#define ZYNOS_MODEL_P_661H_D1          MID(10650)
+#define ZYNOS_MODEL_P_661H_D3          MID(12442)
+
+#define ZYNOS_MODEL_P_661HW_61         ZYNOS_MODEL_P_661H_61
+#define ZYNOS_MODEL_P_661HW_63         ZYNOS_MODEL_P_661H_63
+#define ZYNOS_MODEL_P_661HW_D1         MID(10906)
+#define ZYNOS_MODEL_P_661HW_D3         MID(14746)
+
+#define ZYNOS_MODEL_P_662H_61          MID(22418)
+#define ZYNOS_MODEL_P_662H_63          /* n.a. */
+#define ZYNOS_MODEL_P_662H_67          /* n.a. */
+#define ZYNOS_MODEL_P_662H_D1          /* n.a. */
+#define ZYNOS_MODEL_P_662H_D3          /* n.a. */
+
+#define ZYNOS_MODEL_P_662HW_61         /* n.a. */
+#define ZYNOS_MODEL_P_662HW_63         MID(22674)
+#define ZYNOS_MODEL_P_662HW_67         /* n.a. */
+#define ZYNOS_MODEL_P_662HW_D1         MID(10394)
+#define ZYNOS_MODEL_P_662HW_D3         MID(12954)
+
+#endif /* _ZYNOS_H */