blob: 4466b94070e6223f76cc0e671ae610e7f51acf5e (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
#include <revolution.h>
#include <revolution/os.h>
#include <cstring>
#include "__os.h"
// prototypes
void __OSSystemCallVectorStart(void);
void __OSSystemCallVectorEnd(void);
#ifdef __GEKKO__
static asm void SystemCallVector(void) {
entry __OSSystemCallVectorStart
nofralloc
mfspr r9, HID0
ori r10, r9, 0x8
mtspr HID0, r10
isync
sync
mtspr HID0, r9
rfi
entry __OSSystemCallVectorEnd
nop
}
#endif
void __OSInitSystemCall(void) {
void* addr = (void*)OSPhysicalToCached(0xC00);
memcpy(addr, __OSSystemCallVectorStart, (u32)&__OSSystemCallVectorEnd - (u32)&__OSSystemCallVectorStart);
DCFlushRangeNoSync(addr, 0x100);
__sync();
ICInvalidateRange(addr, 0x100);
}
|