sdk-core v2026.11.05
PS2 SDK - core tier (build-critical EE/IOP modules)
Loading...
Searching...
No Matches
sifrpc-common.h
Go to the documentation of this file.
1/*
2# _____ ___ ____ ___ ____
3# ____| | ____| | | |____|
4# | ___| |____ ___| ____| | \ PS2DEV Open Source Project.
5#-----------------------------------------------------------------------
6# Copyright 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
16
17#ifndef __SIFRPC_COMMON_H__
18#define __SIFRPC_COMMON_H__
19
20#include <sifcmd-common.h>
21
22/* Modes for bind() and call() */
24#define SIF_RPC_M_NOWAIT 0x01
26#define SIF_RPC_M_NOWBDC 0x02
27
28#ifdef __cplusplus
29extern "C" {
30#endif
31
32typedef void *(*SifRpcFunc_t)(int fno, void *buffer, int length);
33typedef void (*SifRpcEndFunc_t)(void *end_param);
34
35#ifdef __cplusplus
36}
37#endif
38
39typedef struct t_SifRpcPktHeader
40{
41 struct t_SifCmdHeader sifcmd;
42 int rec_id;
43 void *pkt_addr;
44 int rpc_id;
45} SifRpcPktHeader_t;
46
47typedef struct t_SifRpcRendPkt
48{
49 struct t_SifCmdHeader sifcmd;
50 int rec_id; /* 04 */
51 void *pkt_addr; /* 05 */
52 int rpc_id; /* 06 */
53
54 struct t_SifRpcClientData *cd; /* 7 */
55 u32 cid; /* 8 */
56 struct t_SifRpcServerData *sd; /* 9 */
57 void *buf, /* 10 */
58 *cbuf; /* 11 */
59} SifRpcRendPkt_t;
60
62{
63 struct t_SifCmdHeader sifcmd;
64 int rec_id; /* 04 */
65 void *pkt_addr; /* 05 */
66 int rpc_id; /* 06 */
67
68 struct t_SifRpcReceiveData *recvbuf; /* 07 */
69 void *src; /* 08 */
70 void *dest; /* 09 */
71 int size; /* 10 */
72} SifRpcOtherDataPkt_t;
73
74typedef struct t_SifRpcBindPkt
75{
76 struct t_SifCmdHeader sifcmd;
77 int rec_id; /* 04 */
78 void *pkt_addr; /* 05 */
79 int rpc_id; /* 06 */
80 struct t_SifRpcClientData *cd; /* 07 */
81 int sid; /* 08 */
82} SifRpcBindPkt_t;
83
84typedef struct t_SifRpcCallPkt
85{
86 struct t_SifCmdHeader sifcmd;
87 int rec_id; /* 04 */
88 void *pkt_addr; /* 05 */
89 int rpc_id; /* 06 */
90 struct t_SifRpcClientData *cd; /* 07 */
91 int rpc_number; /* 08 */
92 int send_size; /* 09 */
93 void *recvbuf; /* 10 */
94 int recv_size; /* 11 */
95 int rmode; /* 12 */
96 struct t_SifRpcServerData *sd; /* 13 */
97} SifRpcCallPkt_t;
98
99typedef struct t_SifRpcServerData
100{
101 int sid; /* 04 00 */
102
103 SifRpcFunc_t func; /* 05 01 */
104 void *buf; /* 06 02 */
105 int size; /* 07 03 */
106
107 SifRpcFunc_t cfunc; /* 08 04 */
108 void *cbuf; /* 09 05 */
109 int size2; /* 10 06 */
110
111 struct t_SifRpcClientData *client; /* 11 07 */
112 void *pkt_addr; /* 12 08 */
113 int rpc_number; /* 13 09 */
114
115 void *recvbuf; /* 14 10 */
116 int rsize; /* 15 11 */
117 int rmode; /* 16 12 */
118 int rid; /* 17 13 */
119
120 struct t_SifRpcServerData *link; /* 18 14 */
121 struct t_SifRpcServerData *next; /* 19 15 */
122 struct t_SifRpcDataQueue *base; /* 20 16 */
123} SifRpcServerData_t;
124
125
126typedef struct t_SifRpcHeader
127{
128 void *pkt_addr; /* 04 00 */
129 u32 rpc_id; /* 05 01 */
130 int sema_id; /* 06 02 */
131 u32 mode; /* 07 03 */
132} SifRpcHeader_t;
133
134
135typedef struct t_SifRpcClientData
136{
137 struct t_SifRpcHeader hdr;
138 u32 command; /* 04 08 */
139 void *buf, /* 05 09 */
140 *cbuf; /* 06 10 */
141 SifRpcEndFunc_t end_function; /* 07 11 */
142 void *end_param; /* 08 12 */
143 struct t_SifRpcServerData *server; /* 09 13 */
144} SifRpcClientData_t;
145
147{
148 struct t_SifRpcHeader hdr;
149 void *src, /* 04 */
150 *dest; /* 05 */
151 int size; /* 06 */
152} SifRpcReceiveData_t;
153
154typedef struct t_SifRpcDataQueue
155{
156 int thread_id, /* 00 */
157 active; /* 01 */
158 struct t_SifRpcServerData *link, /* 02 */
159 *start, /* 03 */
160 *end; /* 04 */
161 struct t_SifRpcDataQueue *next; /* 05 */
162} SifRpcDataQueue_t;
163
164#ifdef __cplusplus
165extern "C" {
166#endif
167
168extern void sceSifInitRpc(int mode);
169#ifdef _EE
170extern void sceSifExitRpc(void);
171#endif
172
173/* SIF RPC client API */
174extern int sceSifBindRpc(SifRpcClientData_t *cd, int sid, int mode);
175extern int sceSifCallRpc(SifRpcClientData_t *cd, int rpc_number, int mode, void *sendbuf,
176 int ssize, void *recvbuf, int rsize, SifRpcEndFunc_t end_function, void *end_param);
177
178extern void sceSifRegisterRpc(SifRpcServerData_t *sd, int sid, SifRpcFunc_t func, void *buf,
179 SifRpcFunc_t cfunc, void *cbuf, SifRpcDataQueue_t *qd);
180
181extern int sceSifCheckStatRpc(SifRpcClientData_t *cd);
182
183/* SIF RPC server API */
184extern void sceSifSetRpcQueue(SifRpcDataQueue_t *qd, int thread_id);
185extern SifRpcServerData_t *sceSifGetNextRequest(SifRpcDataQueue_t *qd);
186extern void sceSifExecRequest(SifRpcServerData_t *sd);
187extern void sceSifRpcLoop(SifRpcDataQueue_t *qd);
188
189extern int sceSifGetOtherData(SifRpcReceiveData_t *rd, void *src, void *dest, int size, int mode);
190
191extern SifRpcServerData_t *sceSifRemoveRpc(SifRpcServerData_t *sd, SifRpcDataQueue_t *qd);
192extern SifRpcDataQueue_t *sceSifRemoveRpcQueue(SifRpcDataQueue_t *qd);
193#ifdef _IOP
194extern void sceSifSetSif1CB(void (*func)(void *userdata), void *userdata);
195extern void sceSifClearSif1CB(void);
196#endif
197
198#ifdef __cplusplus
199}
200#endif
201
202// For backwards compatibility purposes
203#define SifInitRpc(...) sceSifInitRpc(__VA_ARGS__)
204#define SifExitRpc(...) sceSifExitRpc(__VA_ARGS__)
205#define SifBindRpc(...) sceSifBindRpc(__VA_ARGS__)
206#define SifCallRpc(...) sceSifCallRpc(__VA_ARGS__)
207#define SifRegisterRpc(...) sceSifRegisterRpc(__VA_ARGS__)
208#define SifCheckStatRpc(...) sceSifCheckStatRpc(__VA_ARGS__)
209#define SifSetRpcQueue(...) sceSifSetRpcQueue(__VA_ARGS__)
210#define SifGetNextRequest(...) sceSifGetNextRequest(__VA_ARGS__)
211#define SifExecRequest(...) sceSifExecRequest(__VA_ARGS__)
212#define SifRpcLoop(...) sceSifRpcLoop(__VA_ARGS__)
213#define SifRpcGetOtherData(...) sceSifGetOtherData(__VA_ARGS__)
214#define SifRemoveRpc(...) sceSifRemoveRpc(__VA_ARGS__)
215#define SifRemoveRpcQueue(...) sceSifRemoveRpcQueue(__VA_ARGS__)
216
217#endif /* __SIFRPC_COMMON_H__ */