model_list.c 18.6 KB
Newer Older
1
2
3
#include <stddef.h>
#include "model_list.h"

4
struct eos_model_desc eos_model_list[] = {
5
6
7
8
9
10
11
12
13
14
15
16
17
18
    {
        /* defaults for DIGIC 3 cameras */
        .digic_version          = 3,
        .rom1_addr              = 0xF8000000,
        .rom1_size              = 0x00800000,
        .ram_size               = 0x10000000,
        .caching_bit            = 0x10000000,
        .atcm_addr              = 0x00000000,
        .atcm_size              = 0x00001000,
        .btcm_addr              = 0x40000000,
        .btcm_size              = 0x00001000,
        .io_mem_size            = 0x10000000,
        .firmware_start         = 0xFF810000,
        .bootflags_addr         = 0xF8000000,
19
        .current_task_name_offs = 0x0D,
20
21
22
23
        .hptimer_interrupt      = 0x10,
        .sd_driver_interrupt    = 0x4A,
        .sd_dma_interrupt       = 0x29,
        .card_led_address       = 0xC02200E0,
24
25
26
27
28
29
        .mpu_request_register   = 0xC0220098,   /* written in mpu_send (run with -d io) */
        .mpu_request_bitmask    = 0x00000002,   /* 0x44 request, 0x46 idle */
        .mpu_status_register    = 0xC0220098,   /* read in SIO3_ISR and MREQ_ISR (tst 0x2) */
        .mpu_control_register   = 0xC0203034,   /* 0x1C written in MREQ_ISR */
        .mpu_mreq_interrupt     = 0x52,         /* MREQ_ISR in InitializeIntercom */
        .mpu_sio3_interrupt     = 0x36,         /* SIO3_ISR */
30
31
        .uart_rx_interrupt      = 0x2E,
        .uart_tx_interrupt      = 0x3A,
alex@thinkpad's avatar
alex@thinkpad committed
32
        .rtc_cs_register        = 0xC022005C,
33
    },
34
    {
35
36
37
        /* defaults for DIGIC 4 cameras */
        .digic_version          = 4,
        /* note: some cameras have smaller ROMs, or only one ROM */
38
        .rom0_addr              = 0xF0000000,
39
        .rom0_size              = 0x01000000,
40
        .rom1_addr              = 0xF8000000,
41
        .rom1_size              = 0x01000000,
42
43
44
45
46
47
        .ram_size               = 0x20000000,
        .caching_bit            = 0x40000000,
        .atcm_addr              = 0x00000000,
        .atcm_size              = 0x00001000,
        .btcm_addr              = 0x40000000,
        .btcm_size              = 0x00001000,
48
        .io_mem_size            = 0x10000000,
49
        .firmware_start         = 0xFF010000,
50
        .bootflags_addr         = 0xF8000000,
51
        .current_task_name_offs = 0x09,
52
53
        .dryos_timer_id         = 2,
        .dryos_timer_interrupt  = 0x0A,
54
        .hptimer_interrupt      = 0x10,
55
        .sd_driver_interrupt    = 0xB1,
56
        .sd_dma_interrupt       = 0xB8,
57
        .card_led_address       = 0xC0220134,   /* SD */
58
59
60
61
62
63
        .mpu_request_register   = 0xC022009C,   /* written in mpu_send (run with -d io) */
        .mpu_request_bitmask    = 0x00000002,   /* 0x44 request, 0x46 idle */
        .mpu_status_register    = 0xC022009C,   /* read in SIO3_ISR and MREQ_ISR (tst 0x2) */
        .mpu_control_register   = 0xC020302C,   /* 0x1C written in MREQ_ISR */
        .mpu_mreq_interrupt     = 0x50,         /* MREQ_ISR in InitializeIntercom */
        .mpu_sio3_interrupt     = 0x36,         /* SIO3_ISR */
64
65
        .uart_rx_interrupt      = 0x2E,
        .uart_tx_interrupt      = 0x3A,
alex@thinkpad's avatar
alex@thinkpad committed
66
        .rtc_cs_register        = 0xC0220128,
67
68
69
70
    },
    {
        /* defaults for DIGIC 5 cameras */
        .digic_version          = 5,
71
        .rom0_addr              = 0xF0000000,
72
        .rom0_size              = 0x01000000,
73
        .rom1_addr              = 0xF8000000,
74
        .rom1_size              = 0x01000000,
75
76
77
78
79
80
        .ram_size               = 0x20000000,
        .caching_bit            = 0x40000000,
        .atcm_addr              = 0x00000000,
        .atcm_size              = 0x00001000,
        .btcm_addr              = 0x40000000,
        .btcm_size              = 0x00001000,
81
        .io_mem_size            = 0x20000000,
82
        .firmware_start         = 0xFF0C0000,
83
        .bootflags_addr         = 0xF8000000,
84
        .current_task_name_offs = 0x09,
85
86
        .dryos_timer_id         = 2,
        .dryos_timer_interrupt  = 0x0A,
87
        .hptimer_interrupt      = 0x10,
88
        .sd_driver_interrupt    = 0x172,
89
        .sd_dma_interrupt       = 0x171,
90
        .card_led_address       = 0xC022C188,   /* SD */
91
92
93
94
95
96
        .mpu_request_register   = 0xC022006C,   /* written in mpu_send (run with -d io) */
        .mpu_request_bitmask    = 0x00000002,   /* 0x44 request, 0x46 idle */
        .mpu_status_register    = 0xC022006C,   /* read in SIO3_ISR and MREQ_ISR (tst 0x2) */
        .mpu_control_register   = 0xC020302C,   /* 0x1C written in MREQ_ISR */
        .mpu_mreq_interrupt     = 0x50,         /* MREQ_ISR in InitializeIntercom */
        .mpu_sio3_interrupt     = 0x36,         /* SIO3_ISR */
97
98
        .uart_rx_interrupt      = 0x2E,
        .uart_tx_interrupt      = 0x3A,
alex@thinkpad's avatar
alex@thinkpad committed
99
        .rtc_cs_register        = 0xC02201F8,
100
101
        .serial_flash_sio_ch    = 4,
        .serial_flash_sfio_ch   = 4,
102
        .serial_flash_interrupt = 0x17B,
103
104
105
106
    },
    {
        /* defaults for DIGIC 6 cameras */
        .digic_version          = 6,
107
        .rom0_size              = 0,    /* not dumped yet, camera locks up (?!) */
108
        .rom1_addr              = 0xFC000000,
109
        .rom1_size              = 0x02000000,
110
111
112
113
114
115
116
117
        .ram_size               = 0x20000000,
        .caching_bit            = 0x40000000,
        .atcm_addr              = 0x00000000,
        .atcm_size              = 0x00004000,
        .btcm_addr              = 0x80000000,
        .btcm_size              = 0x00010000,
        .ram_extra_addr         = 0xBFE00000,
        .ram_extra_size         = 0x00200000,
118
        .io_mem_size            = 0x20000000,
119
120
        .firmware_start         = 0xFE0A0000,
        .bootflags_addr         = 0xFC040000,
121
        .current_task_name_offs = 0x09,
122
123
        .dryos_timer_id         = 1,
        .dryos_timer_interrupt  = 0x1B,
124
        .hptimer_interrupt      = 0x28,
125
126
        .sd_driver_interrupt    = 0xEE,
        .sd_dma_interrupt       = 0xBE,
127
        .card_led_address       = 0xD20B0A24,
128
129
        .uart_rx_interrupt      = 0x15D,
        .uart_tx_interrupt      = 0x16D,
130
131
        .serial_flash_sio_ch    = 2,
        .serial_flash_sfio_ch   = 7,
132
        .serial_flash_interrupt = 0xFE,
133
134
135
136
137
138
        .mpu_request_register   = 0xD20B0884,   /* written in mpu_send (run with -d io) */
        .mpu_request_bitmask    = 0x00010000,   /* 0xC0003 request, 0xD0002 idle, 0x4D00B2 init */
        .mpu_status_register    = 0xD20B0084,   /* read in SIO3_ISR and MREQ_ISR (tst 0x10000) */
        .mpu_control_register   = 0xD4013008,   /* 0x1C written in MREQ_ISR */
        .mpu_mreq_interrupt     = 0x2A,         /* MREQ_ISR in InitializeIntercom */
        .mpu_sio3_interrupt     = 0x147,        /* SIO3_ISR */
139
    },
140
141
142
143
144
145
146
147
    {
        /* defaults for DIGIC 7 cameras */
        .digic_version          = 7,
        .current_task_name_offs = 0x09,
        .dryos_timer_id         = 1,
        .dryos_timer_interrupt  = 0x1B,
        .hptimer_interrupt      = 0x28,
    },
148
149
    {
        .name                   = "50D",
150
        .digic_version          = 4,
151
        .card_led_address       = 0xC02200BC,
152
153
        .cf_driver_interrupt    = 0x82,
        .cf_dma_interrupt       = 0xE3,
154
        .current_task_addr      = 0x1A70,
alex@thinkpad's avatar
alex@thinkpad committed
155
        .rtc_cs_register        = 0xC02200B0,
156
157
    },
    {
158
        .name                   = "60D",
159
        .digic_version          = 4,
160
        .current_task_addr      = 0x1A2C,
alex@thinkpad's avatar
alex@thinkpad committed
161
        .rtc_time_correct       = 0x8D,
162
163
    },
    {
164
        .name                   = "600D",
165
        .digic_version          = 4,
166
        .current_task_addr      = 0x1A2C,
167
        .rtc_time_correct       = 0x8C,
168
169
    },
    {
170
        .name                   = "500D",
171
        .digic_version          = 4,
172
        .current_task_addr      = 0x1A74,
173
174
        .rtc_time_correct       = 0x8A,
        .rtc_control_reg_2      = 0x20,
175
176
    },
    {
177
        .name                   = "5D2",
178
        .digic_version          = 4,
179
        .firmware_start         = 0xFF810000,
180
        .card_led_address       = 0xC02200BC,
181
182
        .cf_driver_interrupt    = 0x82,
        .cf_dma_interrupt       = 0xE3,
183
        .current_task_addr      = 0x1A24,
alex@thinkpad's avatar
alex@thinkpad committed
184
        .rtc_cs_register        = 0xC02200B0,
185
186
    },
    {
187
        .name                   = "5D3",
188
        .digic_version          = 5,
189
        .current_task_addr      = 0x23E14,
190
191
        .mpu_request_register   = 0xC02200BC,   /* written in mpu_send (run with -d io) */
        .mpu_status_register    = 0xC02200BC,   /* read in SIO3_ISR and MREQ_ISR (tst 0x2) */
alex@thinkpad's avatar
alex@thinkpad committed
192
        .card_led_address       = 0xC022C06C,
193
194
        .cf_driver_interrupt    = 0x82,
        .cf_dma_interrupt       = 0xE3,
alex@thinkpad's avatar
alex@thinkpad committed
195
        .rtc_time_correct       = 0x9F,
196
    },
197
198
199
200
    {
        /* started on request on photo taking, raw develop and others;
         * see EekoBltDmac, Eeko WakeUp; runs Thumb-2 code */
        .name                   = "5D3eeko",
201
        .digic_version          = 50,           /* hack to get an empty configuration */
202
203
204
        .ram_size               = 0x00100000,   /* unknown, mapped to 0xD0288000 on main CPU*/
        .ram_extra_addr         = 0x01E00000,   /* mapped to the same address on main CPU */
        .ram_extra_size         = 0x00200000,   /* 1E0-1F0, 1F0-1F2, 1F2-1F4 (I/O; fixme) */
205
        .caching_bit            = 0x40000000,   /* D0284000-D0288000: identical to D028C000-D0290000 */
206
207
        .io_mem_size            = 0x40000000,   /* really? */
        .atcm_addr              = 0x00000000,   /* not sure, shouldn't do any harm */
208
        .atcm_size              = 0x00004000,   /* guess: D0288000 ... D028C000 */
209
        .btcm_addr              = 0x40000000,   /* not sure, appears used, but no memory region configured */
210
        .btcm_size              = 0x00004000,   /* dump from D0280000 identical to 0xD0288000 after 0x4000 */
211
212
        .dryos_timer_id         = 11,           /* see eos_handle_timers for mapping */
        .dryos_timer_interrupt  = 0xFE,
213
        .current_task_addr      = 0x40000148,
214
        .current_task_name_offs = 0x09,
215
        .uart_rx_interrupt      = 0x39,
216
    },
217
    {
218
        .name                   = "650D",
219
        .digic_version          = 5,
220
        .current_task_addr      = 0x233D8,
alex@thinkpad's avatar
alex@thinkpad committed
221
        .serial_flash_size      = 0x800000,
alex@thinkpad's avatar
alex@thinkpad committed
222
        .rtc_cs_register        = 0xC022C0C4,
223
        .rtc_time_correct       = 0x98,
224
225
    },
    {
226
        .name                   = "100D",
227
        .digic_version          = 5,
228
        .serial_flash_size      = 0x1000000,
229
        .serial_flash_sio_ch    = 7,
230
        .current_task_addr      = 0x652AC,
alex@thinkpad's avatar
alex@thinkpad committed
231
        .rtc_cs_register        = 0xC022C020,
232
        .rtc_time_correct       = 0x98,
233
234
    },
    {
235
        .name                   = "7D",
236
        .digic_version          = 4,
237
        .card_led_address       = 0xC022D06C,
238
        .current_task_addr      = 0x1A1C,
239
240
    },
    {
241
        .name                   = "550D",
242
        .digic_version          = 4,
243
        .current_task_addr      = 0x1A20,
244
245
        .rtc_time_correct       = 0x8D,
        .rtc_control_reg_2      = 0x20,
246
247
    },
    {
248
        .name                   = "6D",
249
        .digic_version          = 5,
250
        .card_led_address       = 0xC022C184,
251
252
        .mpu_request_register   = 0xC02200BC,   /* written in mpu_send (run with -d io) */
        .mpu_status_register    = 0xC02200BC,   /* read in SIO3_ISR and MREQ_ISR (tst 0x2) */
alex@thinkpad's avatar
alex@thinkpad committed
253
        .serial_flash_size      = 0x800000,
254
        .current_task_addr      = 0x74C28,
alex@thinkpad's avatar
alex@thinkpad committed
255
        .rtc_cs_register        = 0xC02201D4,
alex@thinkpad's avatar
alex@thinkpad committed
256
        .rtc_time_correct       = 0x9F,
257
258
    },
    {
259
        .name                   = "70D",
260
        .digic_version          = 5,
261
        .current_task_addr      = 0x7AAC0,
262
263
        .mpu_request_register   = 0xC02200BC,   /* written in mpu_send (run with -d io) */
        .mpu_status_register    = 0xC02200BC,   /* read in SIO3_ISR and MREQ_ISR (tst 0x2) */
264
        .card_led_address       = 0xC022C06C,
265
        .serial_flash_size      = 0x800000,
alex@thinkpad's avatar
alex@thinkpad committed
266
        .rtc_cs_register        = 0xC02201D4,
267
        .rtc_time_correct       = 0xA0,
268
269
    },
    {
270
        .name                   = "700D",
271
        .digic_version          = 5,
272
273
274
        .current_task_addr      = 0x233DC,
        .card_led_address       = 0xC022C188,
        .serial_flash_size      = 0x800000,
alex@thinkpad's avatar
alex@thinkpad committed
275
        .rtc_cs_register        = 0xC022C0C4,
276
        .rtc_time_correct       = 0x98,
277
278
    },
    {
279
        .name                   = "1100D",
280
        .digic_version          = 4,
281
        .current_task_addr      = 0x1A2C,
282
        .rtc_time_correct       = 0x8D,
283
284
    },
    {
285
        .name                   = "1200D",
286
        .digic_version          = 4,
287
        .firmware_start         = 0xFF0C0000,
288
        .current_task_addr      = 0x1A2C,
289
        .card_led_address       = 0xC0220134,
290
        .rtc_time_correct       = 0xFD,
291
    },
292
293
294
295
296
297
    {
        .name                   = "1300D",
        .digic_version          = 4,
        .rom0_size              = 0x02000000,
        .rom1_size              = 0x02000000,
        .firmware_start         = 0xFF0C0000,
298
299
300
        .mpu_request_register   = 0xC022D0C4,   /* written in mpu_send (run with -d io) */
        .mpu_request_bitmask    = 0x00100000,   /* 0x83DC00 request, 0x93D800 idle */
        .mpu_status_register    = 0xC022F484,   /* read in SIO3_ISR and MREQ_ISR (tst 0x40000) */
alex@thinkpad's avatar
alex@thinkpad committed
301
        .current_task_addr      = 0x31170,
alex@thinkpad's avatar
alex@thinkpad committed
302
303
        .sd_driver_interrupt    = 0x4B,
        .sd_dma_interrupt       = 0x32,
304
        .uart_rx_interrupt      = 0x38,
305
        .rtc_time_correct       = 0xFD,
306
    },
307
    {
308
        .name                   = "EOSM",
309
        .digic_version          = 5,
310
311
312
        .current_task_addr      = 0x3DE78,
        .card_led_address       = 0xC022C188,
        .serial_flash_size      = 0x800000,
alex@thinkpad's avatar
alex@thinkpad committed
313
        .rtc_cs_register        = 0xC022C0C4,
alex@thinkpad's avatar
alex@thinkpad committed
314
      //.rtc_time_correct       = 0x98,     /* the date/time dialog prevents the camera from going into LiveView */
315
    },
Daniel Fort's avatar
Daniel Fort committed
316
317
318
    {
        .name                   = "EOSM2",
        .digic_version          = 5,
319
        .current_task_addr      = 0x8FBCC,
Daniel Fort's avatar
Daniel Fort committed
320
        .serial_flash_size      = 0x1000000,
321
        .serial_flash_sio_ch    = 7,
alex@thinkpad's avatar
alex@thinkpad committed
322
        .rtc_cs_register        = 0xC022C0C4,
323
324
        .rtc_time_correct       = 0x9A,
        .rtc_control_reg_2      = 0x10,     /* the date/time dialog prevents the camera from going into LiveView */
Daniel Fort's avatar
Daniel Fort committed
325
    },
326
    {
327
        .name                   = "EOSM3",
328
        .digic_version          = 6,
329
        .firmware_start         = 0xFC000000,
330
331
        .rom0_addr              = 0xFB800000,
        .rom0_size              = 0x800000,
332
        .current_task_addr      = 0x803C,
333
        .card_led_address       = 0xD20B0994,
334
    },
335
336
337
338
339
340
341
342
343
    {
        .name                   = "EOSM10",
        .digic_version          = 6,
        .firmware_start         = 0xFC000000,
        .rom0_addr              = 0xFB800000,
        .rom0_size              = 0x800000,
        .current_task_addr      = 0x803C,
        .card_led_address       = 0xD20B0994,   /* unknown, copied from M3 */
    },
344
345
346
347
348
349
    {
        .name                   = "EOSM5",
        .digic_version          = 7,
        .firmware_start         = 0xE0000000,
        .rom1_addr              = 0xE0000000,
        .rom1_size              = 0x02000000,
350
        .ram_size               = 0x40000000,
351
352
        .caching_bit            = 0x40000000,
        .io_mem_size            = 0x1F000000,
353
354
        .ram_extra_addr         = 0xDF000000,
        .ram_extra_size         = 0x01000000,
355
356
        .current_task_addr      = 0x1020,
    },
357
    {
358
        .name                   = "7D2M",
359
        .digic_version          = 6,
360
        .current_task_addr      = 0x28568,
361
        .card_led_address       = 0xD20B0C34,
362
        .ram_manufacturer_id    = 0x18000103,   /* 80D bootloader */
363
364
    },
    {
365
        .name                   = "7D2S",
366
        .digic_version          = 6,
367
        .card_led_address       = 0xD20B0C34,   /* not sure */
368
        .ram_manufacturer_id    = 0x18000103,   /* 80D bootloader */
369
    },
alex@thinkpad's avatar
alex@thinkpad committed
370
371
372
    {
        .name                   = "80D",
        .digic_version          = 6,
373
        .ram_size               = 0x40000000,
374
        .ram_manufacturer_id    = 0x18000103,   /* RAM manufacturer: Micron */
375
        .current_task_addr      = 0x44F4,
376
        .serial_flash_size      = 0x800000,
alex@thinkpad's avatar
alex@thinkpad committed
377
    },
378
379
380
381
    {
        .name                   = "750D",
        .digic_version          = 6,
        .ram_manufacturer_id    = 0x14000203,
382
        .current_task_addr      = 0x44F4,
383
384
385
386
387
    },
    {
        .name                   = "760D",
        .digic_version          = 6,
        .ram_manufacturer_id    = 0x14000203,
388
        .current_task_addr      = 0x44F4,
389
    },
390
391
392
393
    {
        .name                   = "5D4",
        .digic_version          = 6,
        .ram_size               = 0x40000000,
394
        .ram_manufacturer_id    = 0x18000401,
395
        .card_led_address       = 0xD20B0224,
396
        .current_task_addr      = 0x45A4,
397
398
399
400
        .mpu_request_register   = 0xD20B02A4,   /* written in mpu_send (run with -d io) */
        .mpu_status_register    = 0xD20B22A4,   /* read in SIO3_ISR and MREQ_ISR (tst 0x10000) */
        .mpu_control_register   = 0xD4013048,   /* 0x1C written in MREQ_ISR */
        .mpu_mreq_interrupt     = 0x12A,        /* MREQ_ISR in InitializeIntercom */
401
    },
402
403
404
    {
        .name                   = "5D4AE",
        .digic_version          = 6,
405
        .ram_manufacturer_id    = 0x18000401,
406
        .card_led_address       = 0xD20B0224,
407
        .current_task_addr      = 0x44F4,
408
    },
409
410
411
    {
        .name                   = "1000D",
        .digic_version          = 3,
412
        .current_task_addr      = 0x352C0,
alex@thinkpad's avatar
alex@thinkpad committed
413
414
        .sd_driver_interrupt    = 0x4B,
        .sd_dma_interrupt       = 0x32,
415
416
        .rtc_time_correct       = 0x93,
        .rtc_control_reg_2      = 0x20,
417
    },
418
419
420
421
    {
        .name                   = "400D",
        .digic_version          = 3,
        .card_led_address       = 0xC0220000,
422
        .current_task_addr      = 0x27C20,
423
424
425
426
    },
    {
        .name                   = "450D",
        .digic_version          = 3,
427
        .current_task_addr      = 0x355C0,
428
429
        .sd_driver_interrupt    = 0x4B,
        .sd_dma_interrupt       = 0x32,
430
431
        .rtc_time_correct       = 0x93,
        .rtc_control_reg_2      = 0x20,
432
433
434
435
    },
    {
        .name                   = "40D",
        .digic_version          = 3,
436
        .current_task_addr      = 0x22E00,
437
    },
438
439
440
441
442
    {
        .name                   = "5D",
        .digic_version          = 3,            /* actually 2 */
        .io_mem_size            = 0x20000000,
        .card_led_address       = 0xC02200A0,
443
     /* .current_task_addr      = 0x2D2C4  */   /* fixme: it's MEM(0x2D2C4) */
444
    },
445
446
447
448
449
450
451
452
453
    {
        .name                   = "A1100",
        .digic_version          = 4,
        .rom0_size              = 0x400000,     /* fixme: unknown */
        .rom1_size              = 0x400000,
        .ram_size               = 0x10000000,   /* fixme: only 64M */
        .btcm_addr              = 0x80000000,
        .io_mem_size            = 0x01000000,
        .card_led_address       = 0xC02200CC,
454
        .current_task_addr      = 0x195C,
455
    },
456
    {
457
458
        .name = NULL,
        .digic_version = 0,
459
    }
460
461
};