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 25 struct 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 44 struct 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 */ 88 struct 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 98 struct 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