(ctr/3ds) fix 3dsx build.
[pcsx_rearmed.git] / frontend / 3ds / 3ds_utils.c
1
2 #include "3ds.h"
3 #include "3ds_utils.h"
4
5 typedef s32 (*ctr_callback_type)(void);
6
7 static void ctr_enable_all_svc_kernel(void)
8 {
9    __asm__ volatile("cpsid aif");
10
11    u32*  svc_access_control = *(*(u32***)0xFFFF9000 + 0x22) - 0x6;
12
13    svc_access_control[0]=0xFFFFFFFE;
14    svc_access_control[1]=0xFFFFFFFF;
15    svc_access_control[2]=0xFFFFFFFF;
16    svc_access_control[3]=0x3FFFFFFF;
17 }
18
19
20 static void ctr_invalidate_ICache_kernel(void)
21 {
22    __asm__ volatile(
23       "cpsid aif\n\t"
24       "mov r0, #0\n\t"
25       "mcr p15, 0, r0, c7, c5, 0\n\t");
26 }
27
28 static void ctr_flush_DCache_kernel(void)
29 {
30    __asm__ volatile(
31       "cpsid aif\n\t"
32       "mov r0, #0\n\t"
33       "mcr p15, 0, r0, c7, c10, 0\n\t");
34
35 }
36
37
38 static void ctr_enable_all_svc(void)
39 {
40    svcBackdoor((ctr_callback_type)ctr_enable_all_svc_kernel);
41 }
42
43 void ctr_invalidate_ICache(void)
44 {
45 //   __asm__ volatile("svc 0x2E\n\t");
46    svcBackdoor((ctr_callback_type)ctr_invalidate_ICache_kernel);
47
48 }
49
50 void ctr_flush_DCache(void)
51 {
52 //   __asm__ volatile("svc 0x4B\n\t");
53    svcBackdoor((ctr_callback_type)ctr_flush_DCache_kernel);
54 }
55
56
57 void ctr_flush_invalidate_cache(void)
58 {
59    ctr_flush_DCache();
60    ctr_invalidate_ICache();
61 }
62
63 int ctr_svchack_init(void)
64 {
65    extern unsigned int __service_ptr;
66
67    if(__service_ptr)
68       return 0;
69
70    /* CFW */
71    ctr_enable_all_svc();
72    return 1;
73 }
74