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
8 extern long blob_chdk_core_size;
9
10
11
12
13 void __attribute__((noreturn)) my_restart()
14 {
15
16
17
18
19
20 {
21
22
23 long *dst = (long*)MEMISOSTART;
24 const long *src = blob_chdk_core;
25 long length = (blob_chdk_core_size + 3) >> 2;
26
27 core_copy(src, dst, length);
28
29 }
30
31
32
33
34
35
36 asm volatile (
37 "MRS R0, CPSR\n"
38 "BIC R0, R0, #0x3F\n"
39 "ORR R0, R0, #0xD3\n"
40 "MSR CPSR, R0\n"
41 "LDR R1, =0xC0200000\n"
42 "MOV R0, #0xFFFFFFFF\n"
43 "STR R0, [R1,#0x10C]\n"
44 "STR R0, [R1,#0xC]\n"
45 "STR R0, [R1,#0x1C]\n"
46 "STR R0, [R1,#0x2C]\n"
47 "STR R0, [R1,#0x3C]\n"
48 "STR R0, [R1,#0x4C]\n"
49 "STR R0, [R1,#0x5C]\n"
50 "STR R0, [R1,#0x6C]\n"
51 "STR R0, [R1,#0x7C]\n"
52 "STR R0, [R1,#0x8C]\n"
53 "STR R0, [R1,#0x9C]\n"
54 "STR R0, [R1,#0xAC]\n"
55 "STR R0, [R1,#0xBC]\n"
56 "STR R0, [R1,#0xCC]\n"
57 "STR R0, [R1,#0xDC]\n"
58 "STR R0, [R1,#0xEC]\n"
59 "CMP R4, #7\n"
60 "STR R0, [R1,#0xFC]\n"
61 "LDMEQFD SP!, {R4,PC}\n"
62 "MOV R0, #0x78\n"
63 "MCR p15, 0, R0,c1,c0\n"
64 "MOV R0, #0\n"
65 "MCR p15, 0, R0,c7,c10, 4\n"
66 "MCR p15, 0, R0,c7,c5\n"
67 "MCR p15, 0, R0,c7,c6\n"
68 "MOV R0, #0x80000006\n"
69 "MCR p15, 0, R0,c9,c1\n"
70 "MCR p15, 0, R0,c9,c1, 1\n"
71 "MRC p15, 0, R0,c1,c0\n"
72 "ORR R0, R0, #0x50000\n"
73 "MCR p15, 0, R0,c1,c0\n"
74 "LDR R0, =0x12345678\n"
75 "MOV R1, #0x80000000\n"
76 "STR R0, [R1,#0xFFC]\n"
77
78
79 "MOV R0, %0\n"
80
81 "LDMFD SP!, {R4,LR}\n"
82 "BX R0\n"
83 : : "r"(MEMISOSTART) : "memory","r0","r1","r2","r3","r4"
84 );
85
86 while(1);
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
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131