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