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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
|
#ifndef _FINALROM
#include "PRinternal/dbgproto.h"
#include "PR/os_internal.h"
#include "PR/sptask.h"
#include "PRinternal/rmonint.h"
#include "PRinternal/macros.h"
// TODO: this comes from a header
#if BUILD_VERSION >= VERSION_J
#ident "$Revision: 1.4 $"
#else
#ident "$Revision: 3.70 $"
#ident "$Revision: 1.5 $"
#ident "$Revision: 1.2 $"
#ident "$Revision: 1.4 $"
#ident "$Revision: 1.3 $"
#endif
int __rmonSetFault(KKHeader* req) {
KKFaultRequest* request = (KKFaultRequest*)req;
KKObjectEvent reply;
STUBBED_PRINTF(("SetFault\n"));
reply.header.code = request->header.code;
reply.header.error = TV_ERROR_NO_ERROR;
reply.object = request->tid;
__rmonSendReply(&reply.header, sizeof(reply), KK_TYPE_REPLY);
return TV_ERROR_NO_ERROR;
}
OSMesgQueue __rmonMQ ALIGNED(0x8);
static OSThread rmonIOThread ALIGNED(0x8);
static OSMesg rmonMsgs[8] ALIGNED(0x8);
static STACK(rmonIOStack, 0x4000) ALIGNED(0x10);
static OSMesg rmonPiMsgs[8] ALIGNED(0x8);
static OSMesgQueue rmonPiMQ ALIGNED(0x8);
void __rmonInit(void) {
osCreateMesgQueue(&__rmonMQ, rmonMsgs, ARRLEN(rmonMsgs));
osSetEventMesg(OS_EVENT_CPU_BREAK, &__rmonMQ, (OSMesg)RMON_MESG_CPU_BREAK);
osSetEventMesg(OS_EVENT_SP_BREAK, &__rmonMQ, (OSMesg)RMON_MESG_SP_BREAK);
osSetEventMesg(OS_EVENT_FAULT, &__rmonMQ, (OSMesg)RMON_MESG_FAULT);
osSetEventMesg(OS_EVENT_THREADSTATUS, &__rmonMQ, NULL);
osCreateThread(&rmonIOThread, 0, (void (*)(void*))__rmonIOhandler, NULL, STACK_START(rmonIOStack),
OS_PRIORITY_MAX);
osCreatePiManager(OS_PRIORITY_PIMGR, &rmonPiMQ, rmonPiMsgs, ARRLEN(rmonPiMsgs));
osStartThread(&rmonIOThread);
}
void __rmonPanic(void) {
STUBBED_PRINTF(("PANIC!!\n"));
for (;;) {
;
}
}
int __rmonSetComm(KKHeader* req) {
KKObjectEvent reply;
STUBBED_PRINTF(("SetComm\n"));
reply.header.code = req->code;
reply.object = 0;
reply.header.error = TV_ERROR_NO_ERROR;
__rmonSendReply(&reply.header, sizeof(reply), KK_TYPE_REPLY);
return TV_ERROR_NO_ERROR;
}
#endif
|