PS2SDK
PS2 Homebrew Libraries
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#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
25#define SIF_RPC_M_NOWBDC 0x02
26
27#ifdef __cplusplus
28extern "C" {
29#endif
30
31typedef void *(*SifRpcFunc_t)(int fno, void *buffer, int length);
32typedef void (*SifRpcEndFunc_t)(void *end_param);
33
34#ifdef __cplusplus
35}
36#endif
37
38typedef struct t_SifRpcPktHeader
39{
40 struct t_SifCmdHeader sifcmd;
41 int rec_id;
42 void *pkt_addr;
43 int rpc_id;
45
46typedef 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
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
73typedef 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
83typedef 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
98typedef 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
125typedef 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
134typedef 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
146{
147 struct t_SifRpcHeader hdr;
148 void *src, /* 04 */
149 *dest; /* 05 */
150 int size; /* 06 */
152
153typedef 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
164extern "C" {
165#endif
166
167extern void sceSifInitRpc(int mode);
168#ifdef _EE
169extern void sceSifExitRpc(void);
170#endif
171
172/* SIF RPC client API */
173extern int sceSifBindRpc(SifRpcClientData_t *cd, int sid, int mode);
174extern 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
177extern void sceSifRegisterRpc(SifRpcServerData_t *sd, int sid, SifRpcFunc_t func, void *buf,
178 SifRpcFunc_t cfunc, void *cbuf, SifRpcDataQueue_t *qd);
179
180extern int sceSifCheckStatRpc(SifRpcClientData_t *cd);
181
182/* SIF RPC server API */
183extern void sceSifSetRpcQueue(SifRpcDataQueue_t *qd, int thread_id);
184extern SifRpcServerData_t *sceSifGetNextRequest(SifRpcDataQueue_t *qd);
185extern void sceSifExecRequest(SifRpcServerData_t *sd);
186extern void sceSifRpcLoop(SifRpcDataQueue_t *qd);
187
188extern int sceSifGetOtherData(SifRpcReceiveData_t *rd, void *src, void *dest, int size, int mode);
189
190extern SifRpcServerData_t *sceSifRemoveRpc(SifRpcServerData_t *sd, SifRpcDataQueue_t *qd);
191extern SifRpcDataQueue_t *sceSifRemoveRpcQueue(SifRpcDataQueue_t *qd);
192#ifdef _IOP
193extern void sceSifSetSif1CB(void (*func)(void *userdata), void *userdata);
194extern 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__ */