4d57e016e7c0545905fb9d31341f53b83f070aa7
[openwrt.git] / tools / firmware-utils / src / zynos.h
1 /*
2  *  $Id$
3  *
4  *  Copyright (C) 2007 OpenWrt.org
5  *  Copyright (C) 2007 Gabor Juhos <juhosg at openwrt.org>
6  *
7  *  This code was based on the information of the ZyXEL's firmware
8  *  image format written by Kolja Waschk, can be found at:
9  *  http://www.ixo.de/info/zyxel_uclinux
10  *
11  *  This program is free software; you can redistribute it and/or
12  *  modify it under the terms of the GNU General Public License
13  *  as published by the Free Software Foundation; either version 2
14  *  of the License, or (at your option) any later version.
15  *
16  *  This program is distributed in the hope that it will be useful,
17  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
18  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
19  *  GNU General Public License for more details.
20  *
21  *  You should have received a copy of the GNU General Public License
22  *  along with this program; if not, write to the
23  *  Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
24  *  Boston, MA  02110-1301, USA.
25  */
26
27 #ifndef _ZYNOS_H
28 #define _ZYNOS_H
29
30
31 #define BOOTBASE_NAME_LEN       32
32 #define BOOTBASE_MAC_LEN        6
33 #define BOOTBASE_FEAT_LEN       22
34
35 struct zyn_bootbase_info {
36         char            vendor[BOOTBASE_NAME_LEN]; /* Vendor name */
37         char            model[BOOTBASE_NAME_LEN]; /* Model name */
38         uint32_t        bootext_addr;   /* absolute address of the Boot Extension */
39         uint16_t        res0;           /* reserved */
40         uint8_t         sys_type;       /* system type */
41         uint8_t         res1;           /* reserved */
42         uint16_t        model_id;       /* model id */
43         uint8_t         feat_other[BOOTBASE_FEAT_LEN]; /* other feature bits */
44         uint8_t         feat_main;      /* main feature bits */
45         uint8_t         res2;           /* reserved */
46         uint8_t         mac[BOOTBASE_MAC_LEN]; /* mac address */
47         uint8_t         country;        /* default country code */
48         uint8_t         dbgflag;        /* debug flag */
49 } __attribute__((packed));
50
51 #define ROMBIN_SIG_LEN  3
52 #define ROMBIN_VER_LEN  15
53
54 struct zyn_rombin_hdr {
55         uint32_t        addr;           /* load address of the object */
56         uint16_t        res0;           /* unknown/unused */
57         char            sig[ROMBIN_SIG_LEN];    /* magic, must be "SIG" */
58         uint8_t         type;           /* type of the object */
59         uint32_t        osize;          /* size of the uncompressed data */
60         uint32_t        csize;          /* size of the compressed data */
61         uint8_t         flags;          /* various flags */
62         uint8_t         res1;           /* unknown/unused */
63         uint16_t        ocsum;          /* csum of the uncompressed data */
64         uint16_t        ccsum;          /* csum of the compressed data */
65         char            ver[ROMBIN_VER_LEN];
66         uint32_t        mmap_addr;      /* address of the Memory Map Table*/
67         uint32_t        res2;           /* unknown/unused*/
68         uint8_t         res3;           /* unknown/unused*/
69 } __attribute__((packed));
70
71 #define ROMBIN_SIGNATURE        "SIG"
72
73 /* Rombin flag bits */
74 #define ROMBIN_FLAG_01          0x01
75 #define ROMBIN_FLAG_02          0x02
76 #define ROMBIN_FLAG_04          0x04
77 #define ROMBIN_FLAG_08          0x08
78 #define ROMBIN_FLAG_10          0x10
79 #define ROMBIN_FLAG_CCSUM       0x20    /* compressed checksum is valid */
80 #define ROMBIN_FLAG_OCSUM       0x40    /* original checksum is valid */
81 #define ROMBIN_FLAG_COMPRESSED  0x80    /* the binary is compressed */
82
83 /* Object types */
84 #define OBJECT_TYPE_ROMIMG      0x01
85 #define OBJECT_TYPE_ROMBOOT     0x02
86 #define OBJECT_TYPE_BOOTEXT     0x03
87 #define OBJECT_TYPE_ROMBIN      0x04
88 #define OBJECT_TYPE_ROMDIR      0x05
89 #define OBJECT_TYPE_6           0x06
90 #define OBJECT_TYPE_ROMMAP      0x07
91 #define OBJECT_TYPE_RAM         0x80
92 #define OBJECT_TYPE_RAMCODE     0x81
93 #define OBJECT_TYPE_RAMBOOT     0x82
94
95 /*
96  * Memory Map Table header
97  */
98 struct zyn_mmt_hdr {
99         uint16_t        count;
100         uint32_t        user_start;
101         uint32_t        user_end;
102         uint16_t        csum;
103         uint8_t         res[12];
104 } __attribute__((packed));
105
106 #define OBJECT_NAME_LEN         8
107
108 struct zyn_mmt_item {
109         uint8_t         type;   /* type of the object */
110         uint8_t         name[OBJECT_NAME_LEN]; /* name of the object */
111         uint8_t         res0;   /* unused/unknown */
112         uint32_t        addr;
113         uint32_t        size;   /* size of the object */
114         uint8_t         res1[3]; /* unused/unknown */
115         uint8_t         type2;
116 } __attribute__((packed));
117
118 /*
119  * Board IDs (in big-endian format)
120  */
121 #define MID(x)  (((x) & 0xFF) << 8) | (((x) & 0xFF00) >> 8)
122
123 /*
124  * Infineon/ADMtek ADM5120 based models
125  */
126 #define ZYNOS_MODEL_ES_2024A            MID(  221)
127 #define ZYNOS_MODEL_ES_2024PWR          MID( 4097)
128 #define ZYNOS_MODEL_ES_2108             MID(61952)
129 #define ZYNOS_MODEL_ES_2108_F           MID(44801)
130 #define ZYNOS_MODEL_ES_2108_G           MID(62208)
131 #define ZYNOS_MODEL_ES_2108_LC          MID(64512)
132 #define ZYNOS_MODEL_ES_2108PWR          MID(62464)
133 #define ZYNOS_MODEL_HS_100              MID(61855)
134 #define ZYNOS_MODEL_HS_100W             ZYNOS_MODEL_HS_100
135 #define ZYNOS_MODEL_P_334               MID(62879)
136 #define ZYNOS_MODEL_P_334U              MID(56735)
137 #define ZYNOS_MODEL_P_334W              MID(62367)
138 #define ZYNOS_MODEL_P_334WH             MID(57344)
139 #define ZYNOS_MODEL_P_334WHD            MID(57600)
140 #define ZYNOS_MODEL_P_334WT             MID(61343)
141 #define ZYNOS_MODEL_P_335               MID(60831)
142 #define ZYNOS_MODEL_P_335PLUS           MID( 9472)
143 #define ZYNOS_MODEL_P_335U              MID(56479)
144 #define ZYNOS_MODEL_P_335WT             ZYNOS_MODEL_P_335
145
146 /*
147  * Texas Instruments AR7 based models
148  */
149 #define ZYNOS_MODEL_P_2602H_61C         MID( 3229)
150 #define ZYNOS_MODEL_P_2602H_63C         MID( 3485)
151 #define ZYNOS_MODEL_P_2602H_D1A         /* n.a. */
152 #define ZYNOS_MODEL_P_2602H_D3A         /* n.a. */
153 #define ZYNOS_MODEL_P_2602HW_61C        /* n.a. */
154 #define ZYNOS_MODEL_P_2602HW_63         /* n.a. */
155 #define ZYNOS_MODEL_P_2602HW_63C        ZYNOS_MODEL_P_2602H_63C
156 #define ZYNOS_MODEL_P_2602HW_D1A        /* n.a. */
157 #define ZYNOS_MODEL_P_2602HW_D3A        /* n.a. */
158 #define ZYNOS_MODEL_P_2602HWL_61        MID( 1181)
159 #define ZYNOS_MODEL_P_2602HWL_61C       ZYNOS_MODEL_P_2602H_61C
160 #define ZYNOS_MODEL_P_2602HWL_63C       ZYNOS_MODEL_P_2602H_63C
161 #define ZYNOS_MODEL_P_2602HWL_D1A       MID( 6301)
162 #define ZYNOS_MODEL_P_2602HWL_D3A       MID( 7581)
163 #define ZYNOS_MODEL_P_2602HWNLI_D7A     MID( 6813)
164
165 #define ZYNOS_MODEL_P_2602R_61          MID( 2205)
166 #define ZYNOS_MODEL_P_2602R_63          MID( 3997)
167 #define ZYNOS_MODEL_P_2602R_D1A         /* n.a. */
168 #define ZYNOS_MODEL_P_2602R_D3A         /* n.a. */
169 #define ZYNOS_MODEL_P_2602RL_D1A        MID( 6045)
170 #define ZYNOS_MODEL_P_2602RL_D3A        MID( 7069)
171
172 #define ZYNOS_MODEL_P_660H_61           MID(19346)
173 #define ZYNOS_MODEL_P_660H_63           MID(22162)
174 #define ZYNOS_MODEL_P_660H_67           /* n.a. */
175 #define ZYNOS_MODEL_P_660H_D1           MID( 7066)
176 #define ZYNOS_MODEL_P_660H_D3           MID(13210)
177
178 #define ZYNOS_MODEL_P_660HW_61          ZYNOS_MODEL_P_660H_61
179 #define ZYNOS_MODEL_P_660HW_63          ZYNOS_MODEL_P_660H_63
180 #define ZYNOS_MODEL_P_660HW_67          ZYNOS_MODEL_P_660HW_63
181 #define ZYNOS_MODEL_P_660HW_D1          MID( 9114)
182 #define ZYNOS_MODEL_P_660HW_D3          MID(12698)
183
184 #define ZYNOS_MODEL_P_660R_61           MID(20882)
185 #define ZYNOS_MODEL_P_660R_61C          MID( 1178)
186 #define ZYNOS_MODEL_P_660R_63           MID(21138)
187 #define ZYNOS_MODEL_P_660R_63C          MID(  922)
188 #define ZYNOS_MODEL_P_660R_67           ZYNOS_MODEL_P_660R_63
189 #define ZYNOS_MODEL_P_660R_67C          /* n.a. */
190 #define ZYNOS_MODEL_P_660R_D1           MID( 7322)
191 #define ZYNOS_MODEL_P_660R_D3           MID(10138)
192
193 #define ZYNOS_MODEL_P_661H_61           MID(19346)
194 #define ZYNOS_MODEL_P_661H_63           MID( 1946)
195 #define ZYNOS_MODEL_P_661H_D1           MID(10650)
196 #define ZYNOS_MODEL_P_661H_D3           MID(12442)
197
198 #define ZYNOS_MODEL_P_661HW_61          ZYNOS_MODEL_P_661H_61
199 #define ZYNOS_MODEL_P_661HW_63          ZYNOS_MODEL_P_661H_63
200 #define ZYNOS_MODEL_P_661HW_D1          MID(10906)
201 #define ZYNOS_MODEL_P_661HW_D3          MID(14746)
202
203 #define ZYNOS_MODEL_P_662H_61           MID(22418)
204 #define ZYNOS_MODEL_P_662H_63           /* n.a. */
205 #define ZYNOS_MODEL_P_662H_67           /* n.a. */
206 #define ZYNOS_MODEL_P_662H_D1           /* n.a. */
207 #define ZYNOS_MODEL_P_662H_D3           /* n.a. */
208
209 #define ZYNOS_MODEL_P_662HW_61          /* n.a. */
210 #define ZYNOS_MODEL_P_662HW_63          MID(22674)
211 #define ZYNOS_MODEL_P_662HW_67          /* n.a. */
212 #define ZYNOS_MODEL_P_662HW_D1          MID(10394)
213 #define ZYNOS_MODEL_P_662HW_D3          MID(12954)
214
215 #endif /* _ZYNOS_H */