This source file includes following definitions.
- my_restart
1 #include "../generic/check_compat.c"
2
3
4
5
6 extern long *blob_chdk_core;
7 extern long blob_chdk_core_size;
8
9 void __attribute__((noreturn)) my_restart()
10 {
11
12 {
13 long *dst = (long*)MEMISOSTART;
14 const long *src = blob_chdk_core;
15 long length = (blob_chdk_core_size + 3) >> 2;
16
17 core_copy(src, dst, length);
18
19 }
20
21
22
23 asm volatile (
24 "MRS R0, CPSR\n"
25 "BIC R0, R0, #0x3F\n"
26 "ORR R0, R0, #0xD3\n"
27 "MSR CPSR, R0\n"
28 "LDR R1, =0xC0200000\n"
29 "MOV R0, #0xFFFFFFFF\n"
30 "STR R0, [R1,#0x10C]\n"
31 "STR R0, [R1,#0xC]\n"
32 "STR R0, [R1,#0x1C]\n"
33 "STR R0, [R1,#0x2C]\n"
34 "STR R0, [R1,#0x3C]\n"
35 "STR R0, [R1,#0x4C]\n"
36 "STR R0, [R1,#0x5C]\n"
37 "STR R0, [R1,#0x6C]\n"
38 "STR R0, [R1,#0x7C]\n"
39 "STR R0, [R1,#0x8C]\n"
40 "STR R0, [R1,#0x9C]\n"
41 "STR R0, [R1,#0xAC]\n"
42 "STR R0, [R1,#0xBC]\n"
43 "STR R0, [R1,#0xCC]\n"
44 "STR R0, [R1,#0xDC]\n"
45 "STR R0, [R1,#0xEC]\n"
46 "CMP R4, #7\n"
47 "STR R0, [R1,#0xFC]\n"
48 "LDMEQFD SP!, {R4,PC}\n"
49 "MOV R0, #0x78\n"
50 "MCR p15, 0, R0,c1,c0\n"
51 "MOV R0, #0\n"
52 "MCR p15, 0, R0,c7,c10, 4\n"
53 "MCR p15, 0, R0,c7,c5\n"
54 "MCR p15, 0, R0,c7,c6\n"
55 "MOV R0, #0x40000006\n"
56 "MCR p15, 0, R0,c9,c1\n"
57 "MCR p15, 0, R0,c9,c1, 1\n"
58 "MRC p15, 0, R0,c1,c0\n"
59 "ORR R0, R0, #0x50000\n"
60 "MCR p15, 0, R0,c1,c0\n"
61 "LDR R0, =0x12345678\n"
62 "MOV R1, #0x40000000\n"
63 "STR R0, [R1,#0xFFC]\n"
64
65 "MOV R0, %0\n"
66 "LDMFD SP!, {R4,LR}\n"
67 "BX R0\n"
68 : : "r"(MEMISOSTART) : "memory","r0","r1","r2","r3","r4");
69
70 while(1);
71 }
72
73
74 #define LED_PR 0xC0220088
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112