Skip to content

Commit 44935d2

Browse files
authored
Merge pull request #725 from uyjulian/sif_api_merge
SIF API definition merge
2 parents 287ca58 + e1ab8e1 commit 44935d2

File tree

75 files changed

+1329
-1441
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

75 files changed

+1329
-1441
lines changed

common/include/sifcmd-common.h

Lines changed: 138 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,138 @@
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+
11+
/**
12+
* @file
13+
* Common definitions for SIF CMD.
14+
*/
15+
16+
#ifndef __SIFCMD_COMMON_H__
17+
#define __SIFCMD_COMMON_H__
18+
19+
#include <tamtypes.h>
20+
21+
/** SIF command. */
22+
typedef struct t_SifCmdHeader
23+
{
24+
/** Packet size. Min: 1x16 (header only), max: 7*16 */
25+
u32 psize : 8;
26+
/** Payload size */
27+
u32 dsize : 24;
28+
/** Destination address for payload. Can be NULL if there is no payload. */
29+
void *dest;
30+
/** Function number of function to call. */
31+
int cid;
32+
/** Can be freely used. */
33+
u32 opt;
34+
} SifCmdHeader_t;
35+
36+
/** System functions */
37+
#define SIF_CMD_ID_SYSTEM 0x80000000
38+
39+
#define SIF_CMD_CHANGE_SADDR (SIF_CMD_ID_SYSTEM | 0)
40+
#define SIF_CMD_SET_SREG (SIF_CMD_ID_SYSTEM | 1)
41+
#define SIF_CMD_INIT_CMD (SIF_CMD_ID_SYSTEM | 2)
42+
#define SIF_CMD_RESET_CMD (SIF_CMD_ID_SYSTEM | 3)
43+
#define SIF_CMD_RPC_END (SIF_CMD_ID_SYSTEM | 8)
44+
#define SIF_CMD_RPC_BIND (SIF_CMD_ID_SYSTEM | 9)
45+
#define SIF_CMD_RPC_CALL (SIF_CMD_ID_SYSTEM | 10)
46+
#define SIF_CMD_RPC_RDATA (SIF_CMD_ID_SYSTEM | 12)
47+
48+
/** System SREG */
49+
#define SIF_SREG_RPCINIT 0
50+
51+
/** Structure for remotely (over the SIF) changing the value of a software register (SREG).
52+
* There are 32 software registers (0 - 31). Registers 0-7 are used by the system.
53+
*/
54+
typedef struct t_SifCmdSRegData
55+
{
56+
SifCmdHeader_t header;
57+
int index;
58+
unsigned int value;
59+
} SifCmdSRegData_t;
60+
61+
#ifdef __cplusplus
62+
extern "C"
63+
#endif
64+
typedef void (*SifCmdHandler_t)(void *data, void *harg);
65+
66+
typedef struct t_SifCmdHandlerData
67+
{
68+
SifCmdHandler_t handler;
69+
void *harg;
70+
} SifCmdHandlerData_t;
71+
72+
typedef struct t_SifCmdSysHandlerData
73+
{
74+
SifCmdHandler_t handler;
75+
void *harg;
76+
void *unknown08;
77+
} SifCmdSysHandlerData_t;
78+
79+
/** Triggers an IOP reboot */
80+
#define RESET_ARG_MAX 79
81+
82+
typedef struct _iop_reset_pkt
83+
{
84+
struct t_SifCmdHeader header;
85+
int arglen;
86+
int mode;
87+
char arg[RESET_ARG_MAX + 1];
88+
} SifCmdResetData_t;
89+
90+
#ifdef __cplusplus
91+
extern "C" {
92+
#endif
93+
94+
extern void sceSifInitCmd(void);
95+
extern void sceSifExitCmd(void);
96+
extern unsigned int sceSifGetSreg(int sreg);
97+
extern void sceSifSetSreg(int sreg, unsigned int value);
98+
extern void sceSifSetCmdBuffer(SifCmdHandlerData_t *db, int size);
99+
extern void sceSifSetSysCmdBuffer(SifCmdSysHandlerData_t *db, int size);
100+
extern void sceSifAddCmdHandler(int cid, SifCmdHandler_t handler, void *harg);
101+
extern void sceSifRemoveCmdHandler(int cid);
102+
extern unsigned int sceSifSendCmd(int cid, void *packet, int packet_size, void *src_extra,
103+
void *dest_extra, int size_extra);
104+
extern unsigned int isceSifSendCmd(int cid, void *packet, int packet_size, void *src_extra,
105+
void *dest_extra, int size_extra);
106+
107+
#ifdef _EE
108+
extern void sceSifWriteBackDCache(void *ptr, int size); // EE only
109+
#endif
110+
#ifdef _IOP
111+
extern unsigned int sceSifSendCmdIntr(int cid, void *packet, int packet_size, void *src_extra,
112+
void *dest_extra, int size_extra, void (*completioncb)(void *userdata), void *userdata);
113+
extern unsigned int isceSifSendCmdIntr(int cid, void *packet, int packet_size, void *src_extra,
114+
void *dest_extra, int size_extra, void (*completioncb)(void *userdata), void *userdata);
115+
#endif
116+
117+
#ifdef __cplusplus
118+
}
119+
#endif
120+
121+
// For backwards compatibility purposes
122+
#define SifInitCmd(...) sceSifInitCmd(__VA_ARGS__)
123+
#define SifExitCmd(...) sceSifExitCmd(__VA_ARGS__)
124+
#define SifGetSreg(...) sceSifGetSreg(__VA_ARGS__)
125+
#define SifSetCmdBuffer(...) sceSifSetCmdBuffer(__VA_ARGS__)
126+
#define SifAddCmdHandler(...) sceSifAddCmdHandler(__VA_ARGS__)
127+
#define SifRemoveCmdHandler(...) sceSifRemoveCmdHandler(__VA_ARGS__)
128+
#define SifSendCmd(...) sceSifSendCmd(__VA_ARGS__)
129+
#define iSifSendCmd(...) isceSifSendCmd(__VA_ARGS__)
130+
#define SifWriteBackDCache(...) sceSifWriteBackDCache(__VA_ARGS__)
131+
132+
// Send mode bits
133+
/** Called within an interrupt context */
134+
#define SIF_CMD_M_INTR 0x01
135+
/** Write back D-cache for extended data */
136+
#define SIF_CMD_M_WBDC 0x04
137+
138+
#endif /* __SIFCMD_COMMON_H__ */

common/include/sifrpc-common.h

Lines changed: 216 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,216 @@
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+
11+
/**
12+
* @file
13+
* Common defintions for SIF RPC.
14+
*/
15+
16+
#ifndef __SIFRPC_COMMON_H__
17+
#define __SIFRPC_COMMON_H__
18+
19+
#include <sifcmd-common.h>
20+
21+
/* Modes for bind() and call() */
22+
/** Don't wait for end function */
23+
#define SIF_RPC_M_NOWAIT 0x01
24+
/** Don't write back the D cache */
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;
44+
} SifRpcPktHeader_t;
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 */
58+
} SifRpcRendPkt_t;
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 */
71+
} SifRpcOtherDataPkt_t;
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 */
81+
} SifRpcBindPkt_t;
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 */
96+
} SifRpcCallPkt_t;
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 */
122+
} SifRpcServerData_t;
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 */
131+
} SifRpcHeader_t;
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 */
143+
} SifRpcClientData_t;
144+
145+
typedef struct t_SifRpcReceiveData
146+
{
147+
struct t_SifRpcHeader hdr;
148+
void *src, /* 04 */
149+
*dest; /* 05 */
150+
int size; /* 06 */
151+
} SifRpcReceiveData_t;
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 */
161+
} SifRpcDataQueue_t;
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__ */

ee/debug/samples/helloworld/helloworld.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616

1717
int main(int argc, char *argv[])
1818
{
19-
SifInitRpc(0);
19+
sceSifInitRpc(0);
2020
init_scr();
2121

2222
scr_printf("Hello, World!\n");

ee/elf-loader/src/elf.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ int LoadELFFromFileWithPartition(const char *filename, const char *partition, in
9494
}
9595

9696
/* Let's go. */
97-
SifExitRpc();
97+
sceSifExitRpc();
9898
FlushCache(0);
9999
FlushCache(2);
100100

0 commit comments

Comments
 (0)