firmware-utils: replace GPL 2.0 boilerplate/reference with SPDX
[openwrt/staging/ldir.git] / tools / firmware-utils / src / zynos.h
1 // SPDX-License-Identifier: GPL-2.0-only
2 /*
3 *
4 * Copyright (C) 2007-2008 OpenWrt.org
5 * Copyright (C) 2007-2008 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
12 #ifndef _ZYNOS_H
13 #define _ZYNOS_H
14
15 #define BOOTBASE_NAME_LEN 32
16 #define BOOTBASE_MAC_LEN 6
17 #define BOOTBASE_FEAT_LEN 22
18
19 #define BOOTEXT_DEF_SIZE 0x18000
20
21 struct zyn_bootbase_info {
22 char vendor[BOOTBASE_NAME_LEN]; /* Vendor name */
23 char model[BOOTBASE_NAME_LEN]; /* Model name */
24 uint32_t bootext_addr; /* absolute address of the Boot Extension */
25 uint16_t res0; /* reserved/unknown */
26 uint8_t sys_type; /* system type */
27 uint8_t res1; /* reserved/unknown */
28 uint16_t model_id; /* model id */
29 uint8_t feat_other[BOOTBASE_FEAT_LEN]; /* other feature bits */
30 uint8_t feat_main; /* main feature bits */
31 uint8_t res2; /* reserved/unknown */
32 uint8_t mac[BOOTBASE_MAC_LEN]; /* mac address */
33 uint8_t country; /* default country code */
34 uint8_t dbgflag; /* debug flag */
35 } __attribute__((packed));
36
37 #define ROMBIN_SIG_LEN 3
38 #define ROMBIN_VER_LEN 15
39
40 struct zyn_rombin_hdr {
41 uint32_t addr; /* load address of the object */
42 uint16_t res0; /* unknown/unused */
43 char sig[ROMBIN_SIG_LEN]; /* magic, must be "SIG" */
44 uint8_t type; /* type of the object */
45 uint32_t osize; /* size of the uncompressed data */
46 uint32_t csize; /* size of the compressed data */
47 uint8_t flags; /* various flags */
48 uint8_t res1; /* unknown/unused */
49 uint16_t ocsum; /* csum of the uncompressed data */
50 uint16_t ccsum; /* csum of the compressed data */
51 char ver[ROMBIN_VER_LEN];
52 uint32_t mmap_addr; /* address of the Memory Map Table*/
53 uint32_t res2; /* unknown/unused*/
54 uint8_t res3; /* unknown/unused*/
55 } __attribute__((packed));
56
57 #define ROMBIN_SIGNATURE "SIG"
58
59 /* Rombin flag bits */
60 #define ROMBIN_FLAG_01 0x01
61 #define ROMBIN_FLAG_02 0x02
62 #define ROMBIN_FLAG_04 0x04
63 #define ROMBIN_FLAG_08 0x08
64 #define ROMBIN_FLAG_10 0x10
65 #define ROMBIN_FLAG_CCSUM 0x20 /* compressed checksum is valid */
66 #define ROMBIN_FLAG_OCSUM 0x40 /* original checksum is valid */
67 #define ROMBIN_FLAG_COMPRESSED 0x80 /* the binary is compressed */
68
69 /* Object types */
70 #define OBJECT_TYPE_ROMIMG 0x01
71 #define OBJECT_TYPE_ROMBOOT 0x02
72 #define OBJECT_TYPE_BOOTEXT 0x03
73 #define OBJECT_TYPE_ROMBIN 0x04
74 #define OBJECT_TYPE_ROMDIR 0x05
75 #define OBJECT_TYPE_6 0x06
76 #define OBJECT_TYPE_ROMMAP 0x07
77 #define OBJECT_TYPE_RAM 0x80
78 #define OBJECT_TYPE_RAMCODE 0x81
79 #define OBJECT_TYPE_RAMBOOT 0x82
80
81 /*
82 * Memory Map Table header
83 */
84 struct zyn_mmt_hdr {
85 uint16_t count;
86 uint32_t user_start;
87 uint32_t user_end;
88 uint16_t csum;
89 uint8_t res[12];
90 } __attribute__((packed));
91
92 #define OBJECT_NAME_LEN 8
93
94 struct zyn_mmt_item {
95 uint8_t type; /* type of the object */
96 uint8_t name[OBJECT_NAME_LEN]; /* name of the object */
97 uint8_t res0; /* unused/unknown */
98 uint32_t addr;
99 uint32_t size; /* size of the object */
100 uint8_t res1[3]; /* unused/unknown */
101 uint8_t type2;
102 } __attribute__((packed));
103
104 /*
105 * Vendor IDs
106 */
107 #define ZYNOS_VENDOR_ID_ZYXEL 0
108 #define ZYNOS_VENDOR_ID_NETGEAR 1
109 #define ZYNOS_VENDOR_ID_DLINK 2
110 #define ZYNOS_VENDOR_ID_03 3
111 #define ZYNOS_VENDOR_ID_LUCENT 4
112 #define ZYNOS_VENDOR_ID_O2 10
113
114 /*
115 * Model IDs (in big-endian format)
116 */
117 #define MID(x) (((x) & 0xFF) << 8) | (((x) & 0xFF00) >> 8)
118
119 /*
120 * Infineon/ADMtek ADM5120 based models
121 */
122 #define ZYNOS_MODEL_ES_2024A MID( 221)
123 #define ZYNOS_MODEL_ES_2024PWR MID( 4097)
124 #define ZYNOS_MODEL_ES_2108 MID(61952)
125 #define ZYNOS_MODEL_ES_2108_F MID(44801)
126 #define ZYNOS_MODEL_ES_2108_G MID(62208)
127 #define ZYNOS_MODEL_ES_2108_LC MID(64512)
128 #define ZYNOS_MODEL_ES_2108PWR MID(62464)
129 #define ZYNOS_MODEL_HS_100 MID(61855)
130 #define ZYNOS_MODEL_HS_100W ZYNOS_MODEL_HS_100
131 #define ZYNOS_MODEL_P_334 MID(62879)
132 #define ZYNOS_MODEL_P_334U MID(56735)
133 #define ZYNOS_MODEL_P_334W MID(62367)
134 #define ZYNOS_MODEL_P_334WH MID(57344)
135 #define ZYNOS_MODEL_P_334WHD MID(57600)
136 #define ZYNOS_MODEL_P_334WT MID(61343)
137 #define ZYNOS_MODEL_P_335 MID(60831)
138 #define ZYNOS_MODEL_P_335PLUS MID( 9472)
139 #define ZYNOS_MODEL_P_335U MID(56479)
140 #define ZYNOS_MODEL_P_335WT ZYNOS_MODEL_P_335
141
142 /*
143 * Texas Instruments AR7 based models
144 */
145 #define ZYNOS_MODEL_P_2602H_61C MID( 3229)
146 #define ZYNOS_MODEL_P_2602H_63C MID( 3485)
147 #define ZYNOS_MODEL_P_2602H_D1A /* n.a. */
148 #define ZYNOS_MODEL_P_2602H_D3A /* n.a. */
149 #define ZYNOS_MODEL_P_2602HW_61C /* n.a. */
150 #define ZYNOS_MODEL_P_2602HW_63 /* n.a. */
151 #define ZYNOS_MODEL_P_2602HW_63C ZYNOS_MODEL_P_2602H_63C
152 #define ZYNOS_MODEL_P_2602HW_D1A MID( 6301)
153 #define ZYNOS_MODEL_P_2602HW_D3A /* n.a. */
154 #define ZYNOS_MODEL_P_2602HWL_61 MID( 1181)
155 #define ZYNOS_MODEL_P_2602HWL_61C ZYNOS_MODEL_P_2602H_61C
156 #define ZYNOS_MODEL_P_2602HWL_63C ZYNOS_MODEL_P_2602H_63C
157 #define ZYNOS_MODEL_P_2602HWL_D1A ZYNOS_MODEL_P_2602HW_D1A
158 #define ZYNOS_MODEL_P_2602HWL_D3A MID( 7581)
159 #define ZYNOS_MODEL_P_2602HWN_D7A MID(30464)
160 #define ZYNOS_MODEL_P_2602HWNLI_D7A MID( 6813)
161
162 #define ZYNOS_MODEL_P_2602R_61 MID( 2205)
163 #define ZYNOS_MODEL_P_2602R_63 MID( 3997)
164 #define ZYNOS_MODEL_P_2602R_D1A /* n.a. */
165 #define ZYNOS_MODEL_P_2602R_D3A /* n.a. */
166 #define ZYNOS_MODEL_P_2602RL_D1A MID( 6045)
167 #define ZYNOS_MODEL_P_2602RL_D3A MID( 7069)
168
169 #define ZYNOS_MODEL_P_660H_61 MID(19346)
170 #define ZYNOS_MODEL_P_660H_63 MID(22162)
171 #define ZYNOS_MODEL_P_660H_67 /* n.a. */
172 #define ZYNOS_MODEL_P_660H_D1 MID( 7066)
173 #define ZYNOS_MODEL_P_660H_D3 MID(13210)
174
175 #define ZYNOS_MODEL_P_660HW_61 ZYNOS_MODEL_P_660H_61
176 #define ZYNOS_MODEL_P_660HW_63 ZYNOS_MODEL_P_660H_63
177 #define ZYNOS_MODEL_P_660HW_67 ZYNOS_MODEL_P_660HW_63
178 #define ZYNOS_MODEL_P_660HW_D1 MID( 9114)
179 #define ZYNOS_MODEL_P_660HW_D3 MID(12698)
180
181 #define ZYNOS_MODEL_P_660R_61 MID(20882)
182 #define ZYNOS_MODEL_P_660R_61C MID( 1178)
183 #define ZYNOS_MODEL_P_660R_63 MID(21138)
184 #define ZYNOS_MODEL_P_660R_63C MID( 922)
185 #define ZYNOS_MODEL_P_660R_67 ZYNOS_MODEL_P_660R_63
186 #define ZYNOS_MODEL_P_660R_67C /* n.a. */
187 #define ZYNOS_MODEL_P_660R_D1 MID( 7322)
188 #define ZYNOS_MODEL_P_660R_D3 MID(10138)
189
190 #define ZYNOS_MODEL_P_661H_61 MID(19346)
191 #define ZYNOS_MODEL_P_661H_63 MID( 1946)
192 #define ZYNOS_MODEL_P_661H_D1 MID(10650)
193 #define ZYNOS_MODEL_P_661H_D3 MID(12442)
194
195 #define ZYNOS_MODEL_P_661HW_61 ZYNOS_MODEL_P_661H_61
196 #define ZYNOS_MODEL_P_661HW_63 ZYNOS_MODEL_P_661H_63
197 #define ZYNOS_MODEL_P_661HW_D1 MID(10906)
198 #define ZYNOS_MODEL_P_661HW_D3 MID(14746)
199
200 #define ZYNOS_MODEL_P_662H_61 MID(22418)
201 #define ZYNOS_MODEL_P_662H_63 /* n.a. */
202 #define ZYNOS_MODEL_P_662H_67 /* n.a. */
203 #define ZYNOS_MODEL_P_662H_D1 /* n.a. */
204 #define ZYNOS_MODEL_P_662H_D3 /* n.a. */
205
206 #define ZYNOS_MODEL_P_662HW_61 /* n.a. */
207 #define ZYNOS_MODEL_P_662HW_63 MID(22674)
208 #define ZYNOS_MODEL_P_662HW_67 /* n.a. */
209 #define ZYNOS_MODEL_P_662HW_D1 MID(10394)
210 #define ZYNOS_MODEL_P_662HW_D3 MID(12954)
211
212 /* OEM boards */
213 #define ZYNOS_MODEL_O2SURF ZYNOS_MODEL_P_2602HWN_D7A
214
215 /* Atheros AR2318 based boards */
216 #define ZYNOS_MODEL_NBG_318S MID(59392)
217
218 /* Atheros AR71xx based boards */
219 #define ZYNOS_MODEL_NBG_460N MID(61441)
220
221 #endif /* _ZYNOS_H */