This source file includes following definitions.
- my_restart
1 #include "../generic/check_compat.c"
2
3 extern long *blob_chdk_core;
4 extern long blob_chdk_core_size;
5
6
7 void __attribute__((noreturn)) my_restart()
8 {
9
10 long *dst = (long*)MEMISOSTART;
11 const long *src = blob_chdk_core;
12 long length = (blob_chdk_core_size + 3) >> 2;
13
14 core_copy(src, dst, length);
15
16
17
18
19
20
21
22 asm volatile (
23 "MRS R0, CPSR\n"
24 "BIC R0, R0, #0x3F\n"
25 "ORR R0, R0, #0xD3\n"
26 "MSR CPSR, R0\n"
27
28 "MOV R0, #0x78\n"
29 "MCR p15, 0, R0,c1,c0\n"
30 "MOV R0, #0\n"
31 "MCR p15, 0, R0,c7,c10, 4\n"
32 "MCR p15, 0, R0,c7,c5\n"
33 "MCR p15, 0, R0,c7,c6\n"
34 "MOV R0, #0x80000006\n"
35 "MCR p15, 0, R0,c9,c1\n"
36 "MCR p15, 0, R0,c9,c1, 1\n"
37 "MRC p15, 0, R0,c1,c0\n"
38 "ORR R0, R0, #0x50000\n"
39 "MCR p15, 0, R0,c1,c0\n"
40 "LDR R0, =0x12345678\n"
41 "MOV R1, #0x80000000\n"
42 "STR R0, [R1,#0xFFC]\n"
43
44 "mov R0, %0\n"
45 "BX R0\n"
46
47 : : "r"(MEMISOSTART) : "memory","r0","r1","r2","r3","r4");
48
49 while(1);
50 }
51