ps2sdk  1.1
A collection of Open Source libraries used for developing applications on Sony's PlayStation 2® (PS2).
sifrpc.h
Go to the documentation of this file.
1 /*
2 # _____ ___ ____ ___ ____
3 # ____| | ____| | | |____|
4 # | ___| |____ ___| ____| | \ PS2DEV Open Source Project.
5 #-----------------------------------------------------------------------
6 # (C)2001, Gustavo Scotti (gustavo@scotti.com)
7 # (c) Marcus R. Brown (mrbrown@0xd6.org)
8 # Licenced under Academic Free License version 2.0
9 # Review ps2sdk README & LICENSE files for further details.
10 */
11 
17 #ifndef __SIFRPC_H__
18 #define __SIFRPC_H__
19 
20 #include <sifcmd.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
29 extern "C" {
30 #endif
31 
32 typedef void * (*SifRpcFunc_t)(int fno, void *buffer, int length);
33 typedef void (*SifRpcEndFunc_t)(void *end_param);
34 
35 #ifdef __cplusplus
36 }
37 #endif
38 
39 typedef struct t_SifRpcPktHeader {
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 *client; /* 7 */
54  u32 cid; /* 8 */
55  struct t_SifRpcServerData *server; /* 9 */
56  void *buff, /* 10 */
57  *cbuff; /* 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 *receive; /* 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 *client; /* 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 *client; /* 07 */
90  int rpc_number; /* 08 */
91  int send_size; /* 09 */
92  void *receive; /* 10 */
93  int recv_size; /* 11 */
94  int rmode; /* 12 */
95  struct t_SifRpcServerData *server; /* 13 */
97 
98 typedef struct t_SifRpcServerData
99 {
100  int sid; /* 04 00 */
101 
102  SifRpcFunc_t func; /* 05 01 */
103  void *buff; /* 06 02 */
104  int size; /* 07 03 */
105 
106  SifRpcFunc_t cfunc; /* 08 04 */
107  void *cbuff; /* 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 *receive; /* 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 *buff, /* 05 09 */
139  *cbuff; /* 06 10 */
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 void SifInitRpc(int mode);
168 void SifExitRpc(void);
169 
170 /* SIF RPC client API */
171 int SifBindRpc(SifRpcClientData_t *client, int rpc_number, int mode);
172 int SifCallRpc(SifRpcClientData_t *client, int rpc_number, int mode,
173  void *send, int ssize, void *receive, int rsize,
174  SifRpcEndFunc_t end_function, void *end_param);
175 int SifRpcGetOtherData(SifRpcReceiveData_t *rd, void *src, void *dest,
176  int size, int mode);
177 
179 
180 /* SIF RPC server API */
185 
188  int sid, SifRpcFunc_t func, void *buff, SifRpcFunc_t cfunc,
189  void *cbuff, SifRpcDataQueue_t *qd);
192 
195 
198 
199 #ifdef __cplusplus
200 }
201 #endif
202 
203 #endif /* __SIFRPC_H__ */
#define send(a, b, c, d)
Definition: ps2ip.h:66
s32 mode
Definition: rpc_client.c:15
u8 buffer[128]
Definition: rpc_client.c:19
void SifInitRpc(int mode)
SifRpcServerData_t * SifRegisterRpc(SifRpcServerData_t *srv, int sid, SifRpcFunc_t func, void *buff, SifRpcFunc_t cfunc, void *cbuff, SifRpcDataQueue_t *qd)
SifRpcDataQueue_t * SifSetRpcQueue(SifRpcDataQueue_t *q, int thread_id)
int SifCheckStatRpc(SifRpcClientData_t *cd)
void SifExitRpc(void)
SifRpcServerData_t * SifRemoveRpc(SifRpcServerData_t *sd, SifRpcDataQueue_t *queue)
void SifExecRequest(SifRpcServerData_t *srv)
void SifRpcLoop(SifRpcDataQueue_t *q)
SifRpcServerData_t * SifGetNextRequest(SifRpcDataQueue_t *qd)
int SifRpcGetOtherData(SifRpcReceiveData_t *rd, void *src, void *dest, int size, int mode)
SifRpcDataQueue_t * SifRemoveRpcQueue(SifRpcDataQueue_t *qd)
int SifBindRpc(SifRpcClientData_t *client, int rpc_number, int mode)
void(* SifRpcEndFunc_t)(void *end_param)
Definition: sifrpc.h:33
void *(* SifRpcFunc_t)(int fno, void *buffer, int length)
Definition: sifrpc.h:32
int SifCallRpc(SifRpcClientData_t *client, int rpc_number, int mode, void *send, int ssize, void *receive, int rsize, SifRpcEndFunc_t end_function, void *end_param)
static SifRpcDataQueue_t qd
Definition: sior_rpc.c:27
struct t_SifRpcClientData * client
Definition: sifrpc.h:79
void * pkt_addr
Definition: sifrpc.h:77
int recv_size
Definition: sifrpc.h:93
struct t_SifRpcClientData * client
Definition: sifrpc.h:89
int send_size
Definition: sifrpc.h:91
int rpc_number
Definition: sifrpc.h:90
void * pkt_addr
Definition: sifrpc.h:87
void * receive
Definition: sifrpc.h:92
struct t_SifRpcServerData * server
Definition: sifrpc.h:95
SifRpcEndFunc_t end_function
Definition: sifrpc.h:140
void * end_param
Definition: sifrpc.h:141
struct t_SifRpcServerData * end
Definition: sifrpc.h:159
struct t_SifRpcServerData * start
Definition: sifrpc.h:158
struct t_SifRpcDataQueue * next
Definition: sifrpc.h:160
struct t_SifRpcServerData * link
Definition: sifrpc.h:157
void * pkt_addr
Definition: sifrpc.h:127
struct t_SifRpcReceiveData * receive
Definition: sifrpc.h:67
void * pkt_addr
Definition: sifrpc.h:42
void * cbuff
Definition: sifrpc.h:57
void * buff
Definition: sifrpc.h:56
void * pkt_addr
Definition: sifrpc.h:50
struct t_SifRpcServerData * server
Definition: sifrpc.h:55
struct t_SifRpcClientData * client
Definition: sifrpc.h:53
struct t_SifRpcServerData * link
Definition: sifrpc.h:119
void * receive
Definition: sifrpc.h:114
SifRpcFunc_t cfunc
Definition: sifrpc.h:106
struct t_SifRpcServerData * next
Definition: sifrpc.h:120
void * pkt_addr
Definition: sifrpc.h:111
struct t_SifRpcDataQueue * base
Definition: sifrpc.h:121
SifRpcFunc_t func
Definition: sifrpc.h:102
struct t_SifRpcClientData * client
Definition: sifrpc.h:110
unsigned int u32
Definition: tamtypes.h:30