mirror of https://github.com/PCSX2/pcsx2.git
163 lines
4.2 KiB
C
163 lines
4.2 KiB
C
#ifndef __SIFCMD_H__
|
|
#define __SIFCMD_H__
|
|
|
|
#define SIFCMD_VER 0x101
|
|
|
|
#define SIF_CMDI_SYSTEM 0x80000000 // system function call
|
|
#define SIF_CMDC_CHANGE_SADDR ( SIF_CMDI_SYSTEM | 0x00000000)
|
|
#define SIF_CMDC_SET_SREG ( SIF_CMDI_SYSTEM | 0x00000001)
|
|
#define SIF_CMDC_INIT_CMD ( SIF_CMDI_SYSTEM | 0x00000002)
|
|
#define SIF_CMDC_RESET_CMD ( SIF_CMDI_SYSTEM | 0x00000003)
|
|
|
|
#define SIF_CMDC_RPC_END ( SIF_CMDI_SYSTEM | 0x00000008)
|
|
#define SIF_CMDC_RPC_BIND ( SIF_CMDI_SYSTEM | 0x00000009)
|
|
#define SIF_CMDC_RPC_CALL ( SIF_CMDI_SYSTEM | 0x0000000A)
|
|
#define SIF_CMDC_RPC_RDATA ( SIF_CMDI_SYSTEM | 0x0000000C)
|
|
|
|
typedef struct {
|
|
unsigned int psize:8; // packet size [16->112]
|
|
unsigned int dsize:24;// extra data size
|
|
unsigned int daddr; // extra data address
|
|
unsigned int fcode; // function code
|
|
unsigned int opt; // optional user parameter
|
|
} SifCmdHdr;
|
|
|
|
typedef int (*cmdh_func) (SifCmdHdr*, void*);
|
|
typedef void *(*rpch_func)(u32 code, void *param1, int param2);
|
|
|
|
typedef struct {
|
|
SifCmdHdr hdr;
|
|
void *newaddr;
|
|
} SifCmdCSData;
|
|
|
|
typedef struct {
|
|
SifCmdHdr chdr;
|
|
int rno;
|
|
unsigned int value;
|
|
} SifCmdSRData;
|
|
|
|
typedef struct {
|
|
SifCmdHdr chdr;
|
|
int size;
|
|
int flag;
|
|
char arg[80];
|
|
} SifCmdResetData;
|
|
|
|
struct sifcmd_RPC_SERVER_DATA{ //t_rpc_server_data
|
|
int command; /* 04 00 */
|
|
|
|
rpch_func func; /* 05 01 */
|
|
void *buff; /* 06 02 */
|
|
int size; /* 07 03 */
|
|
|
|
rpch_func cfunc; /* 08 04 */
|
|
void *cbuff; /* 09 05 */
|
|
int csize; /* 10 06 */
|
|
|
|
struct sifcmd_RPC_CLIENT_DATA*client; /* 11 07 */
|
|
void *pkt_addr; /* 12 08 */
|
|
int fno; /* 13 09 */
|
|
|
|
void *receive; /* 14 10 */
|
|
int rsize; /* 15 11 */
|
|
int rmode; /* 16 12 */
|
|
int rid; /* 17 13 */
|
|
|
|
struct sifcmd_RPC_SERVER_DATA*link; /* 18 14 */
|
|
struct sifcmd_RPC_SERVER_DATA*next; /* 19 15 */
|
|
struct sifcmd_RPC_DATA_QUEUE *base; /* 20 16 */
|
|
};
|
|
|
|
|
|
struct sifcmd_RPC_HEADER{ //t_rpc_header
|
|
void *pkt_addr; /* 04 00 */
|
|
u32 rpc_id; /* 05 01 */
|
|
int tid; /* 06 02 */
|
|
u32 mode; /* 07 03 */
|
|
};
|
|
|
|
|
|
struct sifcmd_RPC_CLIENT_DATA{ //t_rpc_client_data
|
|
struct sifcmd_RPC_HEADER hdr;
|
|
u32 command; /* 04 08 */
|
|
void *buff, /* 05 09 */
|
|
*cbuff; /* 06 10 */
|
|
void (*func)(void*); /* 07 11 */
|
|
void *param; /* 08 12*/
|
|
struct sifcmd_RPC_SERVER_DATA*server; /* 09 13 */
|
|
};
|
|
|
|
struct sifcmd_RPC_RECEIVE_DATA{ //t_rpc_receive_data
|
|
struct sifcmd_RPC_HEADER hdr;
|
|
void *src, /* 04 */
|
|
*dest; /* 05 */
|
|
int size; /* 06 */
|
|
};
|
|
|
|
struct sifcmd_RPC_DATA_QUEUE{ //t_rpc_data_queue
|
|
int key, /* 00 */
|
|
active; /* 01 */
|
|
struct sifcmd_RPC_SERVER_DATA*link, /* 02 */
|
|
*start, /* 03 */
|
|
*end; /* 04 */
|
|
struct sifcmd_RPC_DATA_QUEUE *next; /* 05 */
|
|
};
|
|
|
|
typedef struct {
|
|
SifCmdHdr hdr;
|
|
u32 rec_id;
|
|
void *paddr;
|
|
u32 pid;
|
|
} RPC_PACKET;
|
|
|
|
typedef struct {
|
|
RPC_PACKET packet;
|
|
struct sifcmd_RPC_CLIENT_DATA *client;
|
|
u32 command;
|
|
struct sifcmd_RPC_SERVER_DATA *server;
|
|
void *buff, *cbuff;
|
|
} RPC_PACKET_END;
|
|
|
|
typedef struct {
|
|
RPC_PACKET packet;
|
|
struct sifcmd_RPC_CLIENT_DATA *client;
|
|
u32 fno;
|
|
} RPC_PACKET_BIND;
|
|
|
|
typedef struct {
|
|
RPC_PACKET_BIND packet;
|
|
u32 size;
|
|
void *receive;
|
|
u32 rsize;
|
|
u32 rmode;
|
|
struct sifcmd_RPC_SERVER_DATA *server;
|
|
} RPC_PACKET_CALL;
|
|
|
|
typedef struct {
|
|
RPC_PACKET packet;
|
|
struct sifcmd_RPC_CLIENT_DATA *client;
|
|
void *src;
|
|
void *dst;
|
|
u32 size;
|
|
} RPC_PACKET_RDATA;
|
|
|
|
|
|
typedef struct {
|
|
cmdh_func func;
|
|
void *data;
|
|
} SifCmdData;
|
|
|
|
void SifInitCmd(); //4 (21)
|
|
void SifAddCmdHandler(int pos, cmdh_func func, void *data); //10(21)
|
|
void SifInitRpc(int mode); //14(26)
|
|
void SifRegisterRpc(struct sifcmd_RPC_SERVER_DATA *sd, u32 cmd,
|
|
rpch_func func, void *buff,
|
|
rpch_func cfunc, void *cbuff,
|
|
struct sifcmd_RPC_DATA_QUEUE *dq); //17(26)
|
|
void SifSetRpcQueue(struct sifcmd_RPC_DATA_QUEUE* dq, int thid); //19(26)
|
|
void SifRpcLoop(struct sifcmd_RPC_DATA_QUEUE* dq); //22(26)
|
|
int SifGetOtherData(struct sifcmd_RPC_RECEIVE_DATA *rd,
|
|
void *src, void *dst, int size, int mode); //23(26)
|
|
|
|
#endif//__SIFCMD_H__
|