Root/tools/firmware-utils/src/zynos.h

1/*
2 *
3 * Copyright (C) 2007-2008 OpenWrt.org
4 * Copyright (C) 2007-2008 Gabor Juhos <juhosg at openwrt.org>
5 *
6 * This code was based on the information of the ZyXEL's firmware
7 * image format written by Kolja Waschk, can be found at:
8 * http://www.ixo.de/info/zyxel_uclinux
9 *
10 * This program is free software; you can redistribute it and/or modify it
11 * under the terms of the GNU General Public License version 2 as published
12 * by the Free Software Foundation.
13 *
14 */
15
16#ifndef _ZYNOS_H
17#define _ZYNOS_H
18
19#define BOOTBASE_NAME_LEN 32
20#define BOOTBASE_MAC_LEN 6
21#define BOOTBASE_FEAT_LEN 22
22
23#define BOOTEXT_DEF_SIZE 0x18000
24
25struct zyn_bootbase_info {
26    char vendor[BOOTBASE_NAME_LEN]; /* Vendor name */
27    char model[BOOTBASE_NAME_LEN]; /* Model name */
28    uint32_t bootext_addr; /* absolute address of the Boot Extension */
29    uint16_t res0; /* reserved/unknown */
30    uint8_t sys_type; /* system type */
31    uint8_t res1; /* reserved/unknown */
32    uint16_t model_id; /* model id */
33    uint8_t feat_other[BOOTBASE_FEAT_LEN]; /* other feature bits */
34    uint8_t feat_main; /* main feature bits */
35    uint8_t res2; /* reserved/unknown */
36    uint8_t mac[BOOTBASE_MAC_LEN]; /* mac address */
37    uint8_t country; /* default country code */
38    uint8_t dbgflag; /* debug flag */
39} __attribute__((packed));
40
41#define ROMBIN_SIG_LEN 3
42#define ROMBIN_VER_LEN 15
43
44struct zyn_rombin_hdr {
45    uint32_t addr; /* load address of the object */
46    uint16_t res0; /* unknown/unused */
47    char sig[ROMBIN_SIG_LEN]; /* magic, must be "SIG" */
48    uint8_t type; /* type of the object */
49    uint32_t osize; /* size of the uncompressed data */
50    uint32_t csize; /* size of the compressed data */
51    uint8_t flags; /* various flags */
52    uint8_t res1; /* unknown/unused */
53    uint16_t ocsum; /* csum of the uncompressed data */
54    uint16_t ccsum; /* csum of the compressed data */
55    char ver[ROMBIN_VER_LEN];
56    uint32_t mmap_addr; /* address of the Memory Map Table*/
57    uint32_t res2; /* unknown/unused*/
58    uint8_t res3; /* unknown/unused*/
59} __attribute__((packed));
60
61#define ROMBIN_SIGNATURE "SIG"
62
63/* Rombin flag bits */
64#define ROMBIN_FLAG_01 0x01
65#define ROMBIN_FLAG_02 0x02
66#define ROMBIN_FLAG_04 0x04
67#define ROMBIN_FLAG_08 0x08
68#define ROMBIN_FLAG_10 0x10
69#define ROMBIN_FLAG_CCSUM 0x20 /* compressed checksum is valid */
70#define ROMBIN_FLAG_OCSUM 0x40 /* original checksum is valid */
71#define ROMBIN_FLAG_COMPRESSED 0x80 /* the binary is compressed */
72
73/* Object types */
74#define OBJECT_TYPE_ROMIMG 0x01
75#define OBJECT_TYPE_ROMBOOT 0x02
76#define OBJECT_TYPE_BOOTEXT 0x03
77#define OBJECT_TYPE_ROMBIN 0x04
78#define OBJECT_TYPE_ROMDIR 0x05
79#define OBJECT_TYPE_6 0x06
80#define OBJECT_TYPE_ROMMAP 0x07
81#define OBJECT_TYPE_RAM 0x80
82#define OBJECT_TYPE_RAMCODE 0x81
83#define OBJECT_TYPE_RAMBOOT 0x82
84
85/*
86 * Memory Map Table header
87 */
88struct zyn_mmt_hdr {
89    uint16_t count;
90    uint32_t user_start;
91    uint32_t user_end;
92    uint16_t csum;
93    uint8_t res[12];
94} __attribute__((packed));
95
96#define OBJECT_NAME_LEN 8
97
98struct zyn_mmt_item {
99    uint8_t type; /* type of the object */
100    uint8_t name[OBJECT_NAME_LEN]; /* name of the object */
101    uint8_t res0; /* unused/unknown */
102    uint32_t addr;
103    uint32_t size; /* size of the object */
104    uint8_t res1[3]; /* unused/unknown */
105    uint8_t type2;
106} __attribute__((packed));
107
108/*
109 * Vendor IDs
110 */
111#define ZYNOS_VENDOR_ID_ZYXEL 0
112#define ZYNOS_VENDOR_ID_NETGEAR 1
113#define ZYNOS_VENDOR_ID_DLINK 2
114#define ZYNOS_VENDOR_ID_03 3
115#define ZYNOS_VENDOR_ID_LUCENT 4
116#define ZYNOS_VENDOR_ID_O2 10
117
118/*
119 * Model 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 MID( 6301)
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 ZYNOS_MODEL_P_2602HW_D1A
162#define ZYNOS_MODEL_P_2602HWL_D3A MID( 7581)
163#define ZYNOS_MODEL_P_2602HWN_D7A MID(30464)
164#define ZYNOS_MODEL_P_2602HWNLI_D7A MID( 6813)
165
166#define ZYNOS_MODEL_P_2602R_61 MID( 2205)
167#define ZYNOS_MODEL_P_2602R_63 MID( 3997)
168#define ZYNOS_MODEL_P_2602R_D1A /* n.a. */
169#define ZYNOS_MODEL_P_2602R_D3A /* n.a. */
170#define ZYNOS_MODEL_P_2602RL_D1A MID( 6045)
171#define ZYNOS_MODEL_P_2602RL_D3A MID( 7069)
172
173#define ZYNOS_MODEL_P_660H_61 MID(19346)
174#define ZYNOS_MODEL_P_660H_63 MID(22162)
175#define ZYNOS_MODEL_P_660H_67 /* n.a. */
176#define ZYNOS_MODEL_P_660H_D1 MID( 7066)
177#define ZYNOS_MODEL_P_660H_D3 MID(13210)
178
179#define ZYNOS_MODEL_P_660HW_61 ZYNOS_MODEL_P_660H_61
180#define ZYNOS_MODEL_P_660HW_63 ZYNOS_MODEL_P_660H_63
181#define ZYNOS_MODEL_P_660HW_67 ZYNOS_MODEL_P_660HW_63
182#define ZYNOS_MODEL_P_660HW_D1 MID( 9114)
183#define ZYNOS_MODEL_P_660HW_D3 MID(12698)
184
185#define ZYNOS_MODEL_P_660R_61 MID(20882)
186#define ZYNOS_MODEL_P_660R_61C MID( 1178)
187#define ZYNOS_MODEL_P_660R_63 MID(21138)
188#define ZYNOS_MODEL_P_660R_63C MID( 922)
189#define ZYNOS_MODEL_P_660R_67 ZYNOS_MODEL_P_660R_63
190#define ZYNOS_MODEL_P_660R_67C /* n.a. */
191#define ZYNOS_MODEL_P_660R_D1 MID( 7322)
192#define ZYNOS_MODEL_P_660R_D3 MID(10138)
193
194#define ZYNOS_MODEL_P_661H_61 MID(19346)
195#define ZYNOS_MODEL_P_661H_63 MID( 1946)
196#define ZYNOS_MODEL_P_661H_D1 MID(10650)
197#define ZYNOS_MODEL_P_661H_D3 MID(12442)
198
199#define ZYNOS_MODEL_P_661HW_61 ZYNOS_MODEL_P_661H_61
200#define ZYNOS_MODEL_P_661HW_63 ZYNOS_MODEL_P_661H_63
201#define ZYNOS_MODEL_P_661HW_D1 MID(10906)
202#define ZYNOS_MODEL_P_661HW_D3 MID(14746)
203
204#define ZYNOS_MODEL_P_662H_61 MID(22418)
205#define ZYNOS_MODEL_P_662H_63 /* n.a. */
206#define ZYNOS_MODEL_P_662H_67 /* n.a. */
207#define ZYNOS_MODEL_P_662H_D1 /* n.a. */
208#define ZYNOS_MODEL_P_662H_D3 /* n.a. */
209
210#define ZYNOS_MODEL_P_662HW_61 /* n.a. */
211#define ZYNOS_MODEL_P_662HW_63 MID(22674)
212#define ZYNOS_MODEL_P_662HW_67 /* n.a. */
213#define ZYNOS_MODEL_P_662HW_D1 MID(10394)
214#define ZYNOS_MODEL_P_662HW_D3 MID(12954)
215
216/* OEM boards */
217#define ZYNOS_MODEL_O2SURF ZYNOS_MODEL_P_2602HWN_D7A
218
219/* Atheros AR2318 based boards */
220#define ZYNOS_MODEL_NBG_318S MID(59392)
221
222/* Atheros AR71xx based boards */
223#define ZYNOS_MODEL_NBG_460N MID(61441)
224
225#endif /* _ZYNOS_H */
226

Archive Download this file



interactive