Add details for extracting firmware from
[b43-tools.git] / fwcutter / fwcutter_list.h
1 /*
2  * Extraction of core 4 firmware from V4 drivers has been commented out as these
3  * cores will not work with driver b43.
4  *
5  * In contrast, extraction of core 5 firmware from V3 drivers should be retained
6  * as those devices will work with b43legacy and are useful for testing.
7  */
8
9 /* file member lists */
10 static struct extract _e08665c5c5b66beb9c3b2dd54aa80cb3[] =
11 {
12         { .name = "ucode2", .offset = 0x59ca0, .length = 0x3fe0, .type = EXT_UCODE_1, },
13         { .name = "ucode4", .offset = 0x5dc84, .length = 0x4e78, .type = EXT_UCODE_1, },
14         { .name = "ucode5", .offset = 0x62b00, .length = 0x5700, .type = EXT_UCODE_2, },
15         { .name = "ucode11", .offset = 0x68204, .length = 0x54a8, .type = EXT_UCODE_2, },
16         { .name = "pcm4", .offset = 0x6d6b0, .length = 0x520, .type = EXT_PCM, },
17         { .name = "pcm5", .offset = 0x6dbd4, .length = 0x520, .type = EXT_PCM, },
18         { .name = "a0g0bsinitvals2", .offset = 0x54ad0 + 0x30d8, .length = 0x18 - 8, .type = EXT_IV, },
19         { .name = "b0g0bsinitvals5", .offset = 0x54ad0 + 0x3ae0, .length = 0x100 - 8, .type = EXT_IV, },
20         { .name = "a0g0initvals5", .offset = 0x54ad0 + 0x3be0, .length = 0x9f0 - 8, .type = EXT_IV, },
21         { .name = "a0g1bsinitvals5", .offset = 0x54ad0 + 0x50c0, .length = 0x100 - 8, .type = EXT_IV, },
22         { .name = "a0g0initvals2", .offset = 0x54ad0 + 0x2320, .length = 0xdb8 - 8, .type = EXT_IV, },
23         { .name = "a0g1initvals5", .offset = 0x54ad0 + 0x45d0, .length = 0x9f0 - 8, .type = EXT_IV, },
24         { .name = "b0g0bsinitvals2", .offset = 0x54ad0 + 0x2308, .length = 0x18 - 8, .type = EXT_IV, },
25         { .name = "b0g0initvals5", .offset = 0x54ad0 + 0x30f0, .length = 0x9f0 - 8, .type = EXT_IV, },
26         { .name = "b0g0initvals2", .offset = 0x54ad0 + 0x1550, .length = 0xdb8 - 8, .type = EXT_IV, },
27         { .name = "a0g0bsinitvals5", .offset = 0x54ad0 + 0x4fc0, .length = 0x100 - 8, .type = EXT_IV, },
28         EXTRACT_LIST_END
29 };
30
31 static struct extract _9207bc565c2fc9fa1591f6c7911d3fc0[] =
32 {
33 /*
34  *      { .name = "ucode4",  .offset = 0x66220 +  0x7ad8, .length = 0x4e68, .type = EXT_UCODE_1, },
35  */
36         { .name = "ucode5",  .offset = 0x66220 +  0xc944, .length = 0x5640, .type = EXT_UCODE_2, },
37         { .name = "ucode11", .offset = 0x66220 + 0x11f90, .length = 0x67e0, .type = EXT_UCODE_2, },
38         { .name = "ucode13", .offset = 0x66220 + 0x18774, .length = 0x5f60, .type = EXT_UCODE_2, },
39 /*
40  *      { .name = "pcm4", .offset = 0x66220 + 0x1e6d8, .length = 0x520, .type = EXT_PCM, },
41  */
42         { .name = "pcm5", .offset = 0x66220 + 0x1ebfc, .length = 0x520, .type = EXT_PCM, },
43 /*
44  *      { .name = "b0g0initvals4",      .offset = 0x66220 + 0x1710, .length = 0xe90 - 8, .type = EXT_IV, },
45  *      { .name = "b0g0bsinitvals4",    .offset = 0x66220 + 0x25a0, .length = 0x18 - 8, .type = EXT_IV, },
46  *      { .name = "a0g0initvals4",      .offset = 0x66220 + 0x25b8, .length = 0xe90 - 8, .type = EXT_IV, },
47  *      { .name = "a0g0bsinitvals4",    .offset = 0x66220 + 0x3448, .length = 0x18 - 8, .type = EXT_IV, },
48  */
49         { .name = "b0g0initvals5",      .offset = 0x66220 + 0x3460, .length = 0xa28 - 8, .type = EXT_IV, },
50         { .name = "b0g0bsinitvals5",    .offset = 0x66220 + 0x3e88, .length = 0x100 - 8, .type = EXT_IV, },
51         { .name = "a0g0initvals5",      .offset = 0x66220 + 0x3f88, .length = 0xa28 - 8, .type = EXT_IV, },
52         { .name = "a0g1initvals5",      .offset = 0x66220 + 0x49b0, .length = 0xa28 - 8, .type = EXT_IV, },
53         { .name = "a0g0bsinitvals5",    .offset = 0x66220 + 0x53d8, .length = 0x100 - 8, .type = EXT_IV, },
54         { .name = "a0g1bsinitvals5",    .offset = 0x66220 + 0x54d8, .length = 0x100 - 8, .type = EXT_IV, },
55         { .name = "lp0initvals13",      .offset = 0x66220 + 0x5620, .length = 0xb38 - 8, .type = EXT_IV, },
56         { .name = "lp0bsinitvals13",    .offset = 0x66220 + 0x6158, .length = 0x100 - 8, .type = EXT_IV, },
57         { .name = "b0g0initvals13",     .offset = 0x66220 + 0x6258, .length = 0xb40 - 8, .type = EXT_IV, },
58         { .name = "b0g0bsinitvals13",.offset = 0x66220 + 0x6d98, .length = 0x100 - 8, .type = EXT_IV, },
59         { .name = "a0g1initvals13",     .offset = 0x66220 + 0x6e98, .length = 0xb40 - 8, .type = EXT_IV, },
60         { .name = "a0g1bsinitvals13",.offset = 0x66220 + 0x79d8, .length = 0x100 - 8, .type = EXT_IV, },
61         EXTRACT_LIST_END
62 };
63
64 static struct extract _722e2e0d8cc04b8f118bb5afe6829ff9[] =
65 {
66 /*
67  *      { .name = "ucode4",  .offset = 0x76a10 +  0x8960, .length = 0x4e68, .type = EXT_UCODE_1, },
68  */
69         { .name = "ucode5",  .offset = 0x76a10 +  0xd7cc, .length = 0x5640, .type = EXT_UCODE_2, },
70         { .name = "ucode11", .offset = 0x76a10 + 0x12e18, .length = 0x67e0, .type = EXT_UCODE_2, },
71         { .name = "ucode13", .offset = 0x76a10 + 0x195fc, .length = 0x5f60, .type = EXT_UCODE_2, },
72 /*
73  *      { .name = "pcm4", .offset = 0x76a10 + 0x1f560, .length = 0x520, .type = EXT_PCM, },
74  */
75         { .name = "pcm5", .offset = 0x76a10 + 0x1fa84, .length = 0x520, .type = EXT_PCM, },
76 /*
77  *      { .name = "b0g0initvals4",      .offset = 0x76a10 + 0x1840, .length = 0xe90 - 8, .type = EXT_IV, },
78  *      { .name = "b0g0bsinitvals4",    .offset = 0x76a10 + 0x26d0, .length = 0x18 - 8, .type = EXT_IV, },
79  *      { .name = "a0g0initvals4",      .offset = 0x76a10 + 0x26e8, .length = 0xe90 - 8, .type = EXT_IV, },
80  *      { .name = "a0g0bsinitvals4",    .offset = 0x76a10 + 0x3578, .length = 0x18 - 8, .type = EXT_IV, },
81  */
82         { .name = "b0g0initvals5",      .offset = 0x76a10 + 0x3590, .length = 0xa28 - 8, .type = EXT_IV, },
83         { .name = "b0g0bsinitvals5",    .offset = 0x76a10 + 0x3fb8, .length = 0x100 - 8, .type = EXT_IV, },
84         { .name = "a0g0initvals5",      .offset = 0x76a10 + 0x40b8, .length = 0xa28 - 8, .type = EXT_IV, },
85         { .name = "a0g1initvals5",      .offset = 0x76a10 + 0x4ae0, .length = 0xa28 - 8, .type = EXT_IV, },
86         { .name = "a0g0bsinitvals5",    .offset = 0x76a10 + 0x5508, .length = 0x100 - 8, .type = EXT_IV, },
87         { .name = "a0g1bsinitvals5",    .offset = 0x76a10 + 0x5608, .length = 0x100 - 8, .type = EXT_IV, },
88         { .name = "lp0initvals13",      .offset = 0x76a10 + 0x64a8, .length = 0xb38 - 8, .type = EXT_IV, },
89         { .name = "lp0bsinitvals13",    .offset = 0x76a10 + 0x6fe0, .length = 0x100 - 8, .type = EXT_IV, },
90         { .name = "b0g0initvals13",     .offset = 0x76a10 + 0x70e0, .length = 0xb40 - 8, .type = EXT_IV, },
91         { .name = "b0g0bsinitvals13",.offset = 0x76a10 + 0x7c20, .length = 0x100 - 8, .type = EXT_IV, },
92         { .name = "a0g1initvals13",     .offset = 0x76a10 + 0x7d20, .length = 0xb40 - 8, .type = EXT_IV, },
93         { .name = "a0g1bsinitvals13",.offset = 0x76a10 + 0x8860, .length = 0x100 - 8, .type = EXT_IV, },
94         EXTRACT_LIST_END
95 };
96
97 static struct extract _1e4763b4cb8cfbaae43e5c6d3d6b2ae7[] =
98 {
99         { .name = "ucode5",  .offset = 0x71c80 +  0xacd0, .length = 0x5768, .type = EXT_UCODE_2, },
100         { .name = "ucode9",  .offset = 0x71c80 + 0x1043c, .length = 0x6240, .type = EXT_UCODE_2, },
101         { .name = "ucode11", .offset = 0x71c80 + 0x16680, .length = 0x74a0, .type = EXT_UCODE_2, },
102         { .name = "ucode13", .offset = 0x71c80 + 0x1db24, .length = 0x7de0, .type = EXT_UCODE_2, },
103         { .name = "ucode14", .offset = 0x71c80 + 0x25908, .length = 0x7a90, .type = EXT_UCODE_2, },
104         { .name = "ucode15", .offset = 0x71c80 + 0x2d39c, .length = 0x7710, .type = EXT_UCODE_3, },
105         { .name = "pcm5", .offset = 0x71c80 + 0x34ab0, .length = 0x520, .type = EXT_PCM, },
106         { .name = "b0g0initvals5",      .offset = 0x71c80 + 0x14d0, .length = 0xa10 - 8, .type = EXT_IV, },
107         { .name = "b0g0bsinitvals5",    .offset = 0x71c80 + 0x1ee0, .length = 0x100 - 8, .type = EXT_IV, },
108         { .name = "a0g0initvals5",      .offset = 0x71c80 + 0x1fe0, .length = 0xa10 - 8, .type = EXT_IV, },
109         { .name = "a0g1initvals5",      .offset = 0x71c80 + 0x29f0, .length = 0xa10 - 8, .type = EXT_IV, },
110         { .name = "a0g0bsinitvals5",    .offset = 0x71c80 + 0x3400, .length = 0x100 - 8, .type = EXT_IV, },
111         { .name = "a0g1bsinitvals5",    .offset = 0x71c80 + 0x3500, .length = 0x100 - 8, .type = EXT_IV, },
112         { .name = "b0g0initvals9",      .offset = 0x71c80 + 0x3600, .length = 0xae8 - 8, .type = EXT_IV, },
113         { .name = "b0g0bsinitvals9",    .offset = 0x71c80 + 0x40e8, .length = 0x100 - 8, .type = EXT_IV, },
114         { .name = "a0g0initvals9",      .offset = 0x71c80 + 0x41e8, .length = 0xae8 - 8, .type = EXT_IV, },
115         { .name = "a0g1initvals9",      .offset = 0x71c80 + 0x4cd0, .length = 0xae8 - 8, .type = EXT_IV, },
116         { .name = "a0g0bsinitvals9",    .offset = 0x71c80 + 0x57b8, .length = 0x100 - 8, .type = EXT_IV, },
117         { .name = "a0g1bsinitvals9",    .offset = 0x71c80 + 0x58b8, .length = 0x100 - 8, .type = EXT_IV, },
118         { .name = "n0initvals11",       .offset = 0x71c80 + 0x59b8, .length = 0xb78 - 8, .type = EXT_IV, },
119         { .name = "n0bsinitvals11",     .offset = 0x71c80 + 0x6530, .length = 0x100 - 8, .type = EXT_IV, },
120         { .name = "n0absinitvals11",    .offset = 0x71c80 + 0x6630, .length = 0x100 - 8, .type = EXT_IV, },
121         { .name = "lp0initvals13",      .offset = 0x71c80 + 0x6730, .length = 0x1360 - 8, .type = EXT_IV, },
122         { .name = "lp0bsinitvals13",    .offset = 0x71c80 + 0x7a90, .length = 0x100 - 8, .type = EXT_IV, },
123         { .name = "b0g0initvals13",     .offset = 0x71c80 + 0x7b90, .length = 0xb60 - 8, .type = EXT_IV, },
124         { .name = "b0g0bsinitvals13",.offset = 0x71c80 + 0x86f0, .length = 0x100 - 8, .type = EXT_IV, },
125         { .name = "a0g1initvals13",     .offset = 0x71c80 + 0x87f0, .length = 0xb60 - 8, .type = EXT_IV, },
126         { .name = "a0g1bsinitvals13",.offset = 0x71c80 + 0x9350, .length = 0x100 - 8, .type = EXT_IV, },
127         { .name = "lp0initvals14",      .offset = 0x71c80 + 0x9450, .length = 0xb48 - 8, .type = EXT_IV, },
128         { .name = "lp0bsinitvals14",    .offset = 0x71c80 + 0x9f98, .length = 0x100 - 8, .type = EXT_IV, },
129         { .name = "lp0initvals15",      .offset = 0x71c80 + 0xa098, .length = 0xb38 - 8, .type = EXT_IV, },
130         { .name = "lp0bsinitvals15",    .offset = 0x71c80 + 0xabd0, .length = 0x100 - 8, .type = EXT_IV, },
131         EXTRACT_LIST_END
132 };
133
134
135 static struct extract _cb8d70972b885b1f8883b943c0261a3c[] =
136 {
137         { .name = "pcm5", .offset = 0x8e554, .type = EXT_PCM, .length = 0x520 },
138 /*
139  *      { .name = "pcm4", .offset = 0x8ea78, .type = EXT_PCM, .length = 0x520 },
140  */
141         { .name = "ucode15", .offset = 0x8ef9c, .type = EXT_UCODE_3, .length = 0x7710 },
142         { .name = "ucode14", .offset = 0x966b0, .type = EXT_UCODE_2, .length = 0x7a90 },
143         { .name = "ucode13", .offset = 0x9e144, .type = EXT_UCODE_2, .length = 0x7de0 },
144         { .name = "ucode11", .offset = 0xa5f28, .type = EXT_UCODE_2, .length = 0x74a0 },
145         { .name = "ucode9", .offset = 0xad3cc, .type = EXT_UCODE_2, .length = 0x6240 },
146         { .name = "ucode5", .offset = 0xb3610, .type = EXT_UCODE_2, .length = 0x5768 },
147 /*
148  *      { .name = "ucode4", .offset = 0xb8d7c, .type = EXT_UCODE_1, .length = 0x4ec8 },
149  */
150         { .name = "lp0bsinitvals15", .offset = 0xbdc44, .type = EXT_IV, .length = 0xf8 },
151         { .name = "lp0initvals15", .offset = 0xbdd44, .type = EXT_IV, .length = 0xb30 },
152         { .name = "lp0bsinitvals14", .offset = 0xbe87c, .type = EXT_IV, .length = 0xf8 },
153         { .name = "lp0initvals14", .offset = 0xbe97c, .type = EXT_IV, .length = 0xb40 },
154         { .name = "a0g1bsinitvals13", .offset = 0xbf4c4, .type = EXT_IV, .length = 0xf8 },
155         { .name = "a0g1initvals13", .offset = 0xbf5c4, .type = EXT_IV, .length = 0xb58 },
156         { .name = "b0g0bsinitvals13", .offset = 0xc0124, .type = EXT_IV, .length = 0xf8 },
157         { .name = "b0g0initvals13", .offset = 0xc0224, .type = EXT_IV, .length = 0xb58 },
158         { .name = "lp0bsinitvals13", .offset = 0xc0d84, .type = EXT_IV, .length = 0xf8 },
159         { .name = "lp0initvals13", .offset = 0xc0e84, .type = EXT_IV, .length = 0x1358 },
160         { .name = "n0absinitvals11", .offset = 0xc21e4, .type = EXT_IV, .length = 0xf8 },
161         { .name = "n0bsinitvals11", .offset = 0xc22e4, .type = EXT_IV, .length = 0xf8 },
162         { .name = "n0initvals11", .offset = 0xc23e4, .type = EXT_IV, .length = 0xb70 },
163         { .name = "a0g1bsinitvals9", .offset = 0xc2f5c, .type = EXT_IV, .length = 0xf8 },
164         { .name = "a0g0bsinitvals9", .offset = 0xc305c, .type = EXT_IV, .length = 0xf8 },
165         { .name = "a0g1initvals9", .offset = 0xc315c, .type = EXT_IV, .length = 0xae0 },
166         { .name = "a0g0initvals9", .offset = 0xc3c44, .type = EXT_IV, .length = 0xae0 },
167         { .name = "b0g0bsinitvals9", .offset = 0xc472c, .type = EXT_IV, .length = 0xf8 },
168         { .name = "b0g0initvals9", .offset = 0xc482c, .type = EXT_IV, .length = 0xae0 },
169         { .name = "a0g1bsinitvals5", .offset = 0xc5314, .type = EXT_IV, .length = 0xf8 },
170         { .name = "a0g0bsinitvals5", .offset = 0xc5414, .type = EXT_IV, .length = 0xf8 },
171         { .name = "a0g1initvals5", .offset = 0xc5514, .type = EXT_IV, .length = 0xa08 },
172         { .name = "a0g0initvals5", .offset = 0xc5f24, .type = EXT_IV, .length = 0xa08 },
173         { .name = "b0g0bsinitvals5", .offset = 0xc6934, .type = EXT_IV, .length = 0xf8 },
174         { .name = "b0g0initvals5", .offset = 0xc6a34, .type = EXT_IV, .length = 0xa08 },
175 /*
176  *      { .name = "a0g0bsinitvals4", .offset = 0xc7444, .type = EXT_IV, .length = 0x10 },
177  *      { .name = "a0g0initvals4", .offset = 0xc745c, .type = EXT_IV, .length = 0xe88 },
178  *      { .name = "b0g0bsinitvals4", .offset = 0xc82ec, .type = EXT_IV, .length = 0x10 },
179  *      { .name = "b0g0initvals4", .offset = 0xc8304, .type = EXT_IV, .length = 0xe8c },
180  */
181         EXTRACT_LIST_END
182 };
183
184 static struct extract _2dd738b8feb8b3559fd9d8fbaf3bfffc[] =
185 {
186         { .name = "lp0initvals14", .offset = 0x982B0, .type = EXT_IV, .length = 0xB80 },
187         { .name = "lp0bsinitvals14", .offset = 0x98E38, .type = EXT_IV, .length = 0x118 },
188         { .name = "b0g0initvals9", .offset = 0x92218, .type = EXT_IV, .length = 0xAF0 },
189         { .name = "a0g1bsinitvals9", .offset = 0x94540, .type = EXT_IV, .length = 0x118 },
190         { .name = "b0g0bsinitvals13", .offset = 0x974D0, .type = EXT_IV, .length = 0x118 },
191         { .name = "b0g0bsinitvals5", .offset = 0x90A78, .type = EXT_IV, .length = 0x118 },
192         { .name = "ucode4", .offset = 0x9B868, .type = EXT_UCODE_1, .length = 0x4EA0 },
193         { .name = "b0g0initvals4", .offset = 0x8E2D8, .type = EXT_IV, .length = 0xE80 },
194         { .name = "b0g0initvals13", .offset = 0x96930, .type = EXT_IV, .length = 0xB98 },
195         { .name = "ucode14", .offset = 0xBBB1C, .type = EXT_UCODE_2, .length = 0x7910 },
196         { .name = "a0g0initvals5", .offset = 0x90B98, .type = EXT_IV, .length = 0xA18 },
197         { .name = "lp0bsinitvals16", .offset = 0x9B748, .type = EXT_IV, .length = 0x118 },
198         { .name = "pcm4", .offset = 0xD4A40, .type = EXT_PCM, .length = 0x520 },
199         { .name = "a0g1bsinitvals5", .offset = 0x920F8, .type = EXT_IV, .length = 0x118 },
200         { .name = "n0bsinitvals11", .offset = 0x95230, .type = EXT_IV, .length = 0x118 },
201         { .name = "n0absinitvals11", .offset = 0x95350, .type = EXT_IV, .length = 0x118 },
202         /* ERROR: Could not guess data type for: ucode_bomminor */
203         { .name = "a0g1bsinitvals13", .offset = 0x98190, .type = EXT_IV, .length = 0x118 },
204         { .name = "pcm5", .offset = 0xD4F64, .type = EXT_PCM, .length = 0x520 },
205         /* ERROR: Could not guess data type for: ucode_2w_bomminor */
206         { .name = "ucode9", .offset = 0xA5E00, .type = EXT_UCODE_2, .length = 0x6248 },
207         { .name = "a0g0bsinitvals9", .offset = 0x94420, .type = EXT_IV, .length = 0x118 },
208         { .name = "a0g0bsinitvals4", .offset = 0x90020, .type = EXT_IV, .length = 0x30 },
209         { .name = "a0g1initvals5", .offset = 0x915B8, .type = EXT_IV, .length = 0xA18 },
210         { .name = "n0bsinitvals16", .offset = 0x9A980, .type = EXT_IV, .length = 0x118 },
211         { .name = "ucode16", .offset = 0xCBB9C, .type = EXT_UCODE_3, .length = 0x8EA0 },
212         { .name = "b0g0bsinitvals4", .offset = 0x8F160, .type = EXT_IV, .length = 0x30 },
213         { .name = "lp0initvals15", .offset = 0x98F58, .type = EXT_IV, .length = 0xC68 },
214         { .name = "b0g0initvals5", .offset = 0x90058, .type = EXT_IV, .length = 0xA18 },
215         { .name = "a0g0initvals4", .offset = 0x8F198, .type = EXT_IV, .length = 0xE80 },
216         { .name = "sslpn0initvals16", .offset = 0x9AAA0, .type = EXT_IV, .length = 0x0 },
217         { .name = "a0g1initvals13", .offset = 0x975F0, .type = EXT_IV, .length = 0xB98 },
218         /* ERROR: Could not guess data type for: ucode_2w11 */
219         /* ERROR: Could not guess data type for: ucode_bommajor */
220         { .name = "a0g1initvals9", .offset = 0x93928, .type = EXT_IV, .length = 0xAF0 },
221         { .name = "ucode5", .offset = 0xA070C, .type = EXT_UCODE_2, .length = 0x56F0 },
222         { .name = "lp0bsinitvals13", .offset = 0x96810, .type = EXT_IV, .length = 0x118 },
223         { .name = "n0initvals16", .offset = 0x99CE8, .type = EXT_IV, .length = 0xC90 },
224         /* ERROR: Could not guess data type for: ucode_2w_bommajor */
225         { .name = "b0g0bsinitvals9", .offset = 0x92D10, .type = EXT_IV, .length = 0x118 },
226         { .name = "ucode11", .offset = 0xAC04C, .type = EXT_UCODE_2, .length = 0x8000 },
227         { .name = "lp0initvals16", .offset = 0x9AAB0, .type = EXT_IV, .length = 0xC90 },
228         /* ERROR: Could not guess data type for: ucode_2w15 */
229         { .name = "a0g0initvals9", .offset = 0x92E30, .type = EXT_IV, .length = 0xAF0 },
230         { .name = "lp0initvals13", .offset = 0x95470, .type = EXT_IV, .length = 0x1398 },
231         { .name = "a0g0bsinitvals5", .offset = 0x91FD8, .type = EXT_IV, .length = 0x118 },
232         { .name = "ucode13", .offset = 0xB4050, .type = EXT_UCODE_2, .length = 0x7AC8 },
233         /* ERROR: Could not guess data type for: ucode_2w13 */
234         { .name = "ucode15", .offset = 0xC3430, .type = EXT_UCODE_3, .length = 0x8768 },
235         { .name = "lp0bsinitvals15", .offset = 0x99BC8, .type = EXT_IV, .length = 0x118 },
236         { .name = "n0initvals11", .offset = 0x94660, .type = EXT_IV, .length = 0xBC8 },
237         { .name = "sslpn0bsinitvals16", .offset = 0x9AAA8, .type = EXT_IV, .length = 0x0 },
238         EXTRACT_LIST_END
239 };
240
241 static struct extract _1a258b2d93efa641c32ddf3c3a962028[] =
242 {
243         /* { .name = "ucode4", .offset = 0xAFE08, .type = EXT_UCODE_1, .length = 0x4EA0 }, */
244         /* { .name = "pcm4", .offset = 0xE8FE0, .type = EXT_PCM, .length = 0x520 }, */
245         /* { .name = "b0g0initvals4", .offset = 0xA2878, .type = EXT_IV, .length = 0xE80 }, */
246         /* { .name = "a0g0bsinitvals4", .offset = 0xA45C0, .type = EXT_IV, .length = 0x30 }, */
247         /* { .name = "b0g0bsinitvals4", .offset = 0xA3700, .type = EXT_IV, .length = 0x30 }, */
248         /* { .name = "a0g0initvals4", .offset = 0xA3738, .type = EXT_IV, .length = 0xE80 }, */
249         { .name = "ucode5", .offset = 0xB4CAC, .type = EXT_UCODE_2, .length = 0x56F0 },
250         { .name = "pcm5", .offset = 0xE9504, .type = EXT_PCM, .length = 0x520 },
251         { .name = "a0g0bsinitvals5", .offset = 0xA6578, .type = EXT_IV, .length = 0x118 },
252         { .name = "b0g0bsinitvals5", .offset = 0xA5018, .type = EXT_IV, .length = 0x118 },
253         { .name = "a0g0initvals5", .offset = 0xA5138, .type = EXT_IV, .length = 0xA18 },
254         { .name = "a0g1initvals5", .offset = 0xA5B58, .type = EXT_IV, .length = 0xA18 },
255         { .name = "b0g0initvals5", .offset = 0xA45F8, .type = EXT_IV, .length = 0xA18 },
256         { .name = "a0g1bsinitvals5", .offset = 0xA6698, .type = EXT_IV, .length = 0x118 },
257         { .name = "ucode9", .offset = 0xBA3A0, .type = EXT_UCODE_2, .length = 0x6248 },
258         { .name = "a0g0bsinitvals9", .offset = 0xA89C0, .type = EXT_IV, .length = 0x118 },
259         { .name = "b0g0initvals9", .offset = 0xA67B8, .type = EXT_IV, .length = 0xAF0 },
260         { .name = "a0g1bsinitvals9", .offset = 0xA8AE0, .type = EXT_IV, .length = 0x118 },
261         { .name = "b0g0bsinitvals9", .offset = 0xA72B0, .type = EXT_IV, .length = 0x118 },
262         { .name = "a0g0initvals9", .offset = 0xA73D0, .type = EXT_IV, .length = 0xAF0 },
263         { .name = "a0g1initvals9", .offset = 0xA7EC8, .type = EXT_IV, .length = 0xAF0 },
264         { .name = "ucode11", .offset = 0xC05EC, .type = EXT_UCODE_2, .length = 0x8000 },
265         { .name = "n0initvals11", .offset = 0xA8C00, .type = EXT_IV, .length = 0xBC8 },
266         { .name = "n0bsinitvals11", .offset = 0xA97D0, .type = EXT_IV, .length = 0x118 },
267         { .name = "n0absinitvals11", .offset = 0xA98F0, .type = EXT_IV, .length = 0x118 },
268         { .name = "ucode13", .offset = 0xC85F0, .type = EXT_UCODE_2, .length = 0x7AC8 },
269         { .name = "b0g0bsinitvals13", .offset = 0xABA70, .type = EXT_IV, .length = 0x118 },
270         { .name = "b0g0initvals13", .offset = 0xAAED0, .type = EXT_IV, .length = 0xB98 },
271         { .name = "a0g1bsinitvals13", .offset = 0xAC730, .type = EXT_IV, .length = 0x118 },
272         { .name = "a0g1initvals13", .offset = 0xABB90, .type = EXT_IV, .length = 0xB98 },
273         { .name = "lp0bsinitvals13", .offset = 0xAADB0, .type = EXT_IV, .length = 0x118 },
274         { .name = "lp0initvals13", .offset = 0xA9A10, .type = EXT_IV, .length = 0x1398 },
275         { .name = "ucode14", .offset = 0xD00BC, .type = EXT_UCODE_2, .length = 0x7910 },
276         { .name = "lp0initvals14", .offset = 0xAC850, .type = EXT_IV, .length = 0xB80 },
277         { .name = "lp0bsinitvals14", .offset = 0xAD3D8, .type = EXT_IV, .length = 0x118 },
278         { .name = "ucode15", .offset = 0xD79D0, .type = EXT_UCODE_3, .length = 0x8768 },
279         { .name = "lp0initvals15", .offset = 0xAD4F8, .type = EXT_IV, .length = 0xC68 },
280         { .name = "lp0bsinitvals15", .offset = 0xAE168, .type = EXT_IV, .length = 0x118 },
281         { .name = "ucode16", .offset = 0xE013C, .type = EXT_UCODE_3, .length = 0x8EA0 },
282         { .name = "lp0bsinitvals16", .offset = 0xAFCE8, .type = EXT_IV, .length = 0x118 },
283         { .name = "n0bsinitvals16", .offset = 0xAEF20, .type = EXT_IV, .length = 0x118 },
284         { .name = "sslpn0initvals16", .offset = 0xAF040, .type = EXT_IV, .length = 0x0 },
285         { .name = "n0initvals16", .offset = 0xAE288, .type = EXT_IV, .length = 0xC90 },
286         { .name = "lp0initvals16", .offset = 0xAF050, .type = EXT_IV, .length = 0xC90 },
287         { .name = "sslpn0bsinitvals16", .offset = 0xAF048, .type = EXT_IV, .length = 0x0 },
288         EXTRACT_LIST_END
289 };
290
291 static struct extract _bb8537e3204a1ea5903fe3e66b5e2763[] =
292 {
293         /* ucode major version at offset 0xa8b70 */
294         /* ucode minor version at offset 0xa8b74 */
295         /* { .name = "ucode4", .offset = 0xB6108, .type = EXT_UCODE_1, .length = 0x4EA0 }, */
296         /* { .name = "pcm4", .offset = 0xEF2E0, .type = EXT_PCM, .length = 0x520 }, */
297         /* { .name = "b0g0initvals4", .offset = 0xA8B78, .type = EXT_IV, .length = 0xE80 }, */
298         /* { .name = "a0g0bsinitvals4", .offset = 0xAA8C0, .type = EXT_IV, .length = 0x30 }, */
299         /* { .name = "b0g0bsinitvals4", .offset = 0xA9A00, .type = EXT_IV, .length = 0x30 }, */
300         /* { .name = "a0g0initvals4", .offset = 0xA9A38, .type = EXT_IV, .length = 0xE80 }, */
301         { .name = "ucode5", .offset = 0xBAFAC, .type = EXT_UCODE_2, .length = 0x56F0 },
302         { .name = "pcm5", .offset = 0xEF804, .type = EXT_PCM, .length = 0x520 },
303         { .name = "b0g0bsinitvals5", .offset = 0xAB318, .type = EXT_IV, .length = 0x118 },
304         { .name = "a0g0bsinitvals5", .offset = 0xAC878, .type = EXT_IV, .length = 0x118 },
305         { .name = "b0g0initvals5", .offset = 0xAA8F8, .type = EXT_IV, .length = 0xA18 },
306         { .name = "a0g1initvals5", .offset = 0xABE58, .type = EXT_IV, .length = 0xA18 },
307         { .name = "a0g0initvals5", .offset = 0xAB438, .type = EXT_IV, .length = 0xA18 },
308         { .name = "a0g1bsinitvals5", .offset = 0xAC998, .type = EXT_IV, .length = 0x118 },
309         { .name = "ucode9", .offset = 0xC06A0, .type = EXT_UCODE_2, .length = 0x6248 },
310         { .name = "a0g1initvals9", .offset = 0xAE1C8, .type = EXT_IV, .length = 0xAF0 },
311         { .name = "a0g0bsinitvals9", .offset = 0xAECC0, .type = EXT_IV, .length = 0x118 },
312         { .name = "b0g0bsinitvals9", .offset = 0xAD5B0, .type = EXT_IV, .length = 0x118 },
313         { .name = "b0g0initvals9", .offset = 0xACAB8, .type = EXT_IV, .length = 0xAF0 },
314         { .name = "a0g1bsinitvals9", .offset = 0xAEDE0, .type = EXT_IV, .length = 0x118 },
315         { .name = "a0g0initvals9", .offset = 0xAD6D0, .type = EXT_IV, .length = 0xAF0 },
316         { .name = "ucode11", .offset = 0xC68EC, .type = EXT_UCODE_2, .length = 0x8000 },
317         { .name = "n0bsinitvals11", .offset = 0xAFAD0, .type = EXT_IV, .length = 0x118 },
318         { .name = "n0absinitvals11", .offset = 0xAFBF0, .type = EXT_IV, .length = 0x118 },
319         { .name = "n0initvals11", .offset = 0xAEF00, .type = EXT_IV, .length = 0xBC8 },
320         { .name = "ucode13", .offset = 0xCE8F0, .type = EXT_UCODE_2, .length = 0x7AC8 },
321         { .name = "b0g0initvals13", .offset = 0xB11D0, .type = EXT_IV, .length = 0xB98 },
322         { .name = "a0g1bsinitvals13", .offset = 0xB2A30, .type = EXT_IV, .length = 0x118 },
323         { .name = "a0g1initvals13", .offset = 0xB1E90, .type = EXT_IV, .length = 0xB98 },
324         { .name = "lp0bsinitvals13", .offset = 0xB10B0, .type = EXT_IV, .length = 0x118 },
325         { .name = "b0g0bsinitvals13", .offset = 0xB1D70, .type = EXT_IV, .length = 0x118 },
326         { .name = "lp0initvals13", .offset = 0xAFD10, .type = EXT_IV, .length = 0x1398 },
327         { .name = "ucode14", .offset = 0xD63BC, .type = EXT_UCODE_2, .length = 0x7910 },
328         { .name = "lp0initvals14", .offset = 0xB2B50, .type = EXT_IV, .length = 0xB80 },
329         { .name = "lp0bsinitvals14", .offset = 0xB36D8, .type = EXT_IV, .length = 0x118 },
330         { .name = "ucode15", .offset = 0xDDCD0, .type = EXT_UCODE_3, .length = 0x8768 },
331         { .name = "lp0bsinitvals15", .offset = 0xB4468, .type = EXT_IV, .length = 0x118 },
332         { .name = "lp0initvals15", .offset = 0xB37F8, .type = EXT_IV, .length = 0xC68 },
333         { .name = "ucode16", .offset = 0xE643C, .type = EXT_UCODE_3, .length = 0x8EA0 },
334         { .name = "n0bsinitvals16", .offset = 0xB5220, .type = EXT_IV, .length = 0x118 },
335         { .name = "sslpn0initvals16", .offset = 0xB5340, .type = EXT_IV, .length = 0x0 },
336         { .name = "n0initvals16", .offset = 0xB4588, .type = EXT_IV, .length = 0xC90 },
337         { .name = "lp0initvals16", .offset = 0xB5350, .type = EXT_IV, .length = 0xC90 },
338         { .name = "sslpn0bsinitvals16", .offset = 0xB5348, .type = EXT_IV, .length = 0x0 },
339         { .name = "lp0bsinitvals16", .offset = 0xB5FE8, .type = EXT_IV, .length = 0x118 },
340         EXTRACT_LIST_END
341 };
342
343 static struct extract _490d4e149ecc45eb1a91f06aa75be071[] =
344 {
345         { .name = "ucode19", .offset = 0xFB3BC, .type = EXT_UCODE_3, .length = 0x9998 },
346         { .name = "lp0initvals14", .offset = 0x999C8, .type = EXT_IV, .length = 0xB20 },
347         { .name = "ucode16_lp", .offset = 0xCE5F4, .type = EXT_UCODE_3, .length = 0x9D90 },
348         { .name = "ucode16_sslpn", .offset = 0xD8388, .type = EXT_UCODE_3, .length = 0x8936 },
349         { .name = "lp0bsinitvals14", .offset = 0x9A4F0, .type = EXT_IV, .length = 0x118 },
350         { .name = "b0g0initvals9", .offset = 0x939F8, .type = EXT_IV, .length = 0xAE0 },
351         { .name = "sslpn2bsinitvals17", .offset = 0x9ECE8, .type = EXT_IV, .length = 0x118 },
352         { .name = "a0g1bsinitvals9", .offset = 0x95CF0, .type = EXT_IV, .length = 0x118 },
353         { .name = "b0g0bsinitvals13", .offset = 0x98C00, .type = EXT_IV, .length = 0x118 },
354         { .name = "ucode16_sslpn_nobt", .offset = 0xE0CC4, .type = EXT_UCODE_3, .length = 0x7413 },
355         { .name = "b0g0bsinitvals5", .offset = 0x92278, .type = EXT_IV, .length = 0x118 },
356         { .name = "sslpn2initvals17", .offset = 0x9E020, .type = EXT_IV, .length = 0xCC0 },
357         { .name = "ucode4", .offset = 0xA0A68, .type = EXT_UCODE_1, .length = 0x4E80 },
358         { .name = "b0g0initvals4", .offset = 0x8FB08, .type = EXT_IV, .length = 0xE70 },
359         { .name = "b0g0initvals13", .offset = 0x98078, .type = EXT_IV, .length = 0xB80 },
360         { .name = "ucode17", .offset = 0xF1B50, .type = EXT_UCODE_3, .length = 0x9868 },
361         { .name = "sslpn1bsinitvals20", .offset = 0xA0948, .type = EXT_IV, .length = 0x118 },
362         { .name = "ucode14", .offset = 0xBF864, .type = EXT_UCODE_2, .length = 0x64A0 },
363         { .name = "a0g0initvals5", .offset = 0x92398, .type = EXT_IV, .length = 0xA08 },
364         { .name = "lp0bsinitvals16", .offset = 0x9DF00, .type = EXT_IV, .length = 0x118 },
365         { .name = "pcm4", .offset = 0x10E9EC, .type = EXT_PCM, .length = 0x520 },
366         { .name = "a0g1bsinitvals5", .offset = 0x938D8, .type = EXT_IV, .length = 0x118 },
367         { .name = "n0bsinitvals11", .offset = 0x96990, .type = EXT_IV, .length = 0x118 },
368         { .name = "n0absinitvals11", .offset = 0x96AB0, .type = EXT_IV, .length = 0x118 },
369         /* ucode minor version at offset 0x8fb04 */
370         { .name = "a0g1bsinitvals13", .offset = 0x998A8, .type = EXT_IV, .length = 0x118 },
371         { .name = "pcm5", .offset = 0x10EF10, .type = EXT_PCM, .length = 0x520 },
372         { .name = "ucode9", .offset = 0xAB000, .type = EXT_UCODE_2, .length = 0x6268 },
373         { .name = "a0g0bsinitvals9", .offset = 0x95BD0, .type = EXT_IV, .length = 0x118 },
374         { .name = "a0g0bsinitvals4", .offset = 0x91830, .type = EXT_IV, .length = 0x30 },
375         { .name = "ucode20", .offset = 0x104D58, .type = EXT_UCODE_3, .length = 0x9C90 },
376         { .name = "a0g1initvals5", .offset = 0x92DA8, .type = EXT_IV, .length = 0xA08 },
377         { .name = "n0bsinitvals16", .offset = 0x9C1D0, .type = EXT_IV, .length = 0x118 },
378         { .name = "b0g0bsinitvals4", .offset = 0x90980, .type = EXT_IV, .length = 0x30 },
379         { .name = "lp0initvals15", .offset = 0x9A610, .type = EXT_IV, .length = 0xD20 },
380         { .name = "b0g0initvals5", .offset = 0x91868, .type = EXT_IV, .length = 0xA08 },
381         { .name = "a0g0initvals4", .offset = 0x909B8, .type = EXT_IV, .length = 0xE70 },
382         { .name = "sslpn0initvals16", .offset = 0x9C2F0, .type = EXT_IV, .length = 0xD70 },
383         { .name = "a0g1initvals13", .offset = 0x98D20, .type = EXT_IV, .length = 0xB80 },
384         { .name = "sslpn2initvals19", .offset = 0x9EE08, .type = EXT_IV, .length = 0xCB0 },
385         /* ucode major version at offset 0x8fb00 */
386         { .name = "a0g1initvals9", .offset = 0x950E8, .type = EXT_IV, .length = 0xAE0 },
387         { .name = "ucode5", .offset = 0xA58EC, .type = EXT_UCODE_2, .length = 0x5710 },
388         { .name = "lp0bsinitvals13", .offset = 0x97F58, .type = EXT_IV, .length = 0x118 },
389         { .name = "n0initvals16", .offset = 0x9B458, .type = EXT_IV, .length = 0xD70 },
390         { .name = "b0g0bsinitvals9", .offset = 0x944E0, .type = EXT_IV, .length = 0x118 },
391         { .name = "ucode11", .offset = 0xB126C, .type = EXT_UCODE_2, .length = 0x74A8 },
392         { .name = "lp0initvals16", .offset = 0x9D188, .type = EXT_IV, .length = 0xD70 },
393         { .name = "ucode16_mimo", .offset = 0xE80DC, .type = EXT_UCODE_3, .length = 0x9A70 },
394         { .name = "a0g0initvals9", .offset = 0x94600, .type = EXT_IV, .length = 0xAE0 },
395         { .name = "lp0initvals13", .offset = 0x96BD0, .type = EXT_IV, .length = 0x1380 },
396         { .name = "a0g0bsinitvals5", .offset = 0x937B8, .type = EXT_IV, .length = 0x118 },
397         { .name = "ucode13", .offset = 0xB8718, .type = EXT_UCODE_2, .length = 0x7148 },
398         { .name = "sslpn2bsinitvals19", .offset = 0x9FAC0, .type = EXT_IV, .length = 0x118 },
399         { .name = "ucode15", .offset = 0xC5D08, .type = EXT_UCODE_3, .length = 0x88E8 },
400         { .name = "lp0bsinitvals15", .offset = 0x9B338, .type = EXT_IV, .length = 0x118 },
401         { .name = "n0initvals11", .offset = 0x95E10, .type = EXT_IV, .length = 0xB78 },
402         { .name = "sslpn0bsinitvals16", .offset = 0x9D068, .type = EXT_IV, .length = 0x118 },
403         { .name = "sslpn1initvals20", .offset = 0x9FBE0, .type = EXT_IV, .length = 0xD60 },
404         EXTRACT_LIST_END
405 };
406 /*
407  * Links change, so let's not put them into the README.
408  * I still put them here so we know where the file was obtained.
409  */
410 static const struct file files[] = 
411 {
412         {
413                 .name           = "wl_apsta.o",
414                 .id             = "FW10",
415                 .ucode_version  = "295.14",
416                 .md5            = "e08665c5c5b66beb9c3b2dd54aa80cb3",
417                 .flags          = FW_FLAG_LE,
418                 .extract        = _e08665c5c5b66beb9c3b2dd54aa80cb3,
419         },
420         {
421                 /* http://downloads.openwrt.org/sources/broadcom-wl-4.80.53.0.tar.bz2 */
422                 /* This firmware has the old TX header. */
423                 .name           = "wl_apsta.o",
424                 .id             = "FW11",
425                 .ucode_version  = "351.126",
426                 .md5            = "9207bc565c2fc9fa1591f6c7911d3fc0",
427                 .flags          = FW_FLAG_LE | FW_FLAG_V4,
428                 .extract        = _9207bc565c2fc9fa1591f6c7911d3fc0,
429         },
430         {
431                 /* http://downloads.openwrt.org/sources/broadcom-wl-4.80.53.0.tar.bz2 */
432                 /* This firmware has the old TX header. */
433                 .name           = "wl_apsta_mimo.o",
434                 .id             = "FW11",
435                 .ucode_version  = "351.126",
436                 .md5            = "722e2e0d8cc04b8f118bb5afe6829ff9",
437                 .flags          = FW_FLAG_LE | FW_FLAG_V4,
438                 .extract        = _722e2e0d8cc04b8f118bb5afe6829ff9,
439         },
440         {
441                 /* ftp://ftp.linksys.com/opensourcecode/wrt150nv11/1.51.3/ */
442                 .name           = "wl_ap.o",
443                 .id             = "FW12",
444                 .ucode_version  = "410.2160",
445                 .md5            = "1e4763b4cb8cfbaae43e5c6d3d6b2ae7",
446                 .flags          = FW_FLAG_LE | FW_FLAG_V4 | FW_FLAG_UNSUPPORTED,
447                 .extract        = _1e4763b4cb8cfbaae43e5c6d3d6b2ae7,
448         },
449         {
450                 /* http://mirror2.openwrt.org/sources/broadcom-wl-4.150.10.5.tar.bz2 */
451                 .name           = "wl_apsta_mimo.o",
452                 .id             = "FW13",
453                 .ucode_version  = "410.2160",
454                 .md5            = "cb8d70972b885b1f8883b943c0261a3c",
455                 .flags          = FW_FLAG_LE | FW_FLAG_V4,
456                 .extract        = _cb8d70972b885b1f8883b943c0261a3c,
457         },
458         {
459                 /* ftp://ftp.linksys.com/opensourcecode/wrt610n/1.00.00.018/wrt610n_v1.00.00.018_us.tgz */
460                 .name           = "wl.o",
461                 .id             = "FW14",
462                 .ucode_version  = "478.104",
463                 .md5            = "2dd738b8feb8b3559fd9d8fbaf3bfffc",
464                 .flags          = FW_FLAG_LE | FW_FLAG_V4 | FW_FLAG_UNSUPPORTED,
465                 .extract        = _2dd738b8feb8b3559fd9d8fbaf3bfffc,
466         },
467         {
468                 /* ftp://downloads.netgear.com/files/GPL/WNDR3300-V1.0.29_gpl_src.zip */
469                 .name           = "wl_apsta.o",
470                 .id             = "FW15",
471                 .ucode_version  = "478.104",
472                 .md5            = "1a258b2d93efa641c32ddf3c3a962028",
473                 .flags          = FW_FLAG_LE | FW_FLAG_V4,
474                 .extract        = _1a258b2d93efa641c32ddf3c3a962028,
475         },
476         {
477                 /* http://downloads.openwrt.org/sources/broadcom-wl-4.178.10.4.tar.bz2 */
478                 .name           = "wl_apsta.o",
479                 .id             = "FW15",
480                 .ucode_version  = "478.104",
481                 .md5            = "bb8537e3204a1ea5903fe3e66b5e2763",
482                 .flags          = FW_FLAG_LE | FW_FLAG_V4,
483                 .extract        = _bb8537e3204a1ea5903fe3e66b5e2763,
484         },
485         {
486                 /* http://mirror2.openwrt.org/sources/broadcom-wl-5.10.56.27.3_mipsel.tar.bz2 */
487                 .name           = "wl_prebuilt.o",
488                 .id             = "FW15",
489                 .ucode_version  = "508.1084",
490                 .md5            = "490d4e149ecc45eb1a91f06aa75be071",
491                 .flags          = FW_FLAG_LE | FW_FLAG_V4,
492                 .extract        = _490d4e149ecc45eb1a91f06aa75be071,
493         },
494 };