sdk-core
v2026.11.05
PS2 SDK - core tier (build-critical EE/IOP modules)
Toggle main menu visibility
Loading...
Searching...
No Matches
sior_rpc.c
Go to the documentation of this file.
1
/*
2
# _____ ___ ____ ___ ____
3
# ____| | ____| | | |____|
4
# | ___| |____ ___| ____| | \ PS2DEV Open Source Project.
5
#-----------------------------------------------------------------------
6
# Copyright 2001-2004, ps2dev - http://www.ps2dev.org
7
# Licenced under Academic Free License version 2.0
8
# Review ps2sdk README & LICENSE files for further details.
9
*/
10
15
16
#include <
tamtypes.h
>
17
#include <
kernel.h
>
18
#include <sifrpc.h>
19
#include <stdarg.h>
20
#include <
string.h
>
21
#include <
stdlib.h
>
22
#include <fcntl.h>
23
#include <
stdio.h
>
24
#include <sio.h>
25
#include "
sior_rpc.h
"
26
27
static
SifRpcDataQueue_t qd
__attribute__
((aligned(64)));
28
static
SifRpcServerData_t Sd0
__attribute__
((aligned(64)));
29
static
u32 buffer[32]
__attribute__
((__aligned__(64)));
30
32
#define IOP_MEM 0xbc000000
33
34
enum
{
35
SIOR_INIT = 1,
36
SIOR_PUTC,
37
SIOR_GETC,
38
SIOR_GETCBLOCK,
39
SIOR_WRITE,
40
SIOR_READ,
41
SIOR_PUTS,
42
SIOR_PUTSN,
43
SIOR_GETS,
44
SIOR_FLUSH
45
};
46
47
struct
init_arguments_t
{
48
u32 baudrate;
49
u8 lcr_ueps;
50
u8 lcr_upen;
51
u8 lcr_usbl;
52
u8 lcr_umode;
53
};
54
55
static
void
* sior_rpc_server(u32 funcno,
void
* data,
int
size) {
56
int
res = 0, c;
57
size_t
s;
58
char
* p;
59
struct
init_arguments_t
* i;
60
61
(void)size;
62
63
switch
(funcno) {
64
case
SIOR_INIT:
65
i = (
struct
init_arguments_t
*) data;
66
sio_init(i->baudrate, i->lcr_ueps, i->lcr_upen, i->lcr_usbl, i->lcr_umode);
67
break
;
68
case
SIOR_PUTC:
69
c = *((
int
*) data);
70
res = sio_putc(c);
71
break
;
72
case
SIOR_GETC:
73
res = sio_getc();
74
break
;
75
case
SIOR_GETCBLOCK:
76
res =
sio_getc_block
();
77
break
;
78
case
SIOR_WRITE:
79
p = *((
char
**) data) +
IOP_MEM
;
80
s = *(((
size_t
*) data) + 1);
81
DI();
82
ee_kmode_enter();
83
res =
sio_write
(p, s);
84
ee_kmode_exit();
85
EI();
86
break
;
87
case
SIOR_READ:
88
p = *((
char
**) data) +
IOP_MEM
;
89
s = *(((
size_t
*) data) + 1);
90
DI();
91
ee_kmode_enter();
92
res =
sio_read
(p, s);
93
ee_kmode_exit();
94
EI();
95
break
;
96
case
SIOR_PUTS:
97
p = *((
char
**) data) +
IOP_MEM
;
98
DI();
99
ee_kmode_enter();
100
res = sio_puts(p);
101
ee_kmode_exit();
102
EI();
103
break
;
104
case
SIOR_PUTSN:
105
p = *((
char
**) data) +
IOP_MEM
;
106
DI();
107
ee_kmode_enter();
108
res = sio_putsn(p);
109
ee_kmode_exit();
110
EI();
111
break
;
112
case
SIOR_GETS:
113
p = *((
char
**) data) +
IOP_MEM
;
114
DI();
115
ee_kmode_enter();
116
res = (int)
sio_gets
(p);
117
ee_kmode_exit();
118
EI();
119
break
;
120
case
SIOR_FLUSH:
121
sio_flush
();
122
break
;
123
}
124
125
*((
int
*) data) = res;
126
127
return
data;
128
}
129
130
static
void
sior_thread(
void
) {
131
sceSifInitRpc(0);
132
sceSifSetRpcQueue(&qd, GetThreadId());
133
sceSifRegisterRpc(&Sd0, SIOR_IRX, (SifRpcFunc_t)sior_rpc_server, buffer, NULL, NULL, &qd);
134
sceSifRpcLoop(&qd);
135
}
136
137
int
SIOR_Init(
int
priority)
138
{
139
static
int
sior_init_done = 0;
140
static
u8 stack[4096];
141
int
thid;
142
ee_thread_t t;
143
144
if
(sior_init_done)
145
return
0;
146
147
t.func = sior_thread;
148
t.gp_reg = 0;
149
t.initial_priority = priority;
150
t.stack = stack;
151
t.stack_size = 4096;
152
if
((thid = CreateThread(&t)) < 0) {
153
printf(
"Error creating SIO Remote EE-thread.\n"
);
154
return
thid;
155
}
156
StartThread(thid, NULL);
157
158
sior_init_done = 1;
159
return
thid;
160
}
IOP_MEM
#define IOP_MEM
Definition
ahx_rpc.c:31
sio_flush
void sio_flush(void)
Definition
sio.c:167
sio_getc_block
int sio_getc_block(void)
Definition
sio.c:91
sio_read
size_t sio_read(void *buf, size_t size)
Definition
sio.c:110
sio_gets
char * sio_gets(char *str)
Definition
sio.c:148
sio_write
size_t sio_write(void *buf, size_t size)
Definition
sio.c:99
kernel.h
sior_rpc.h
stdio.h
stdlib.h
string.h
__attribute__
Definition
gif_registers.h:40
init_arguments_t
Definition
sior_rpc.c:47
tamtypes.h
core
sior
src
ee
sior_rpc.c
Generated by
1.18.0