1 #pragma once
2 
3 #include "Types.h"
4 
5 enum CONST_SIF_CMD
6 {
7 	SIF_CMD_SETSREG = 0x80000001,
8 	SIF_CMD_INIT = 0x80000002,
9 	SIF_CMD_REND = 0x80000008,
10 	SIF_CMD_BIND = 0x80000009,
11 	SIF_CMD_CALL = 0x8000000A,
12 	SIF_CMD_OTHERDATA = 0x8000000C,
13 };
14 
15 struct SIFDMAREG
16 {
17 	uint32 srcAddr;
18 	uint32 dstAddr;
19 	uint32 size;
20 	uint32 flags;
21 };
22 static_assert(sizeof(SIFDMAREG) == 0x10, "sizeof(SIFDMAREG) must be 16 bytes.");
23 
24 struct SIFCMDHEADER
25 {
26 	uint32 packetSize : 8;
27 	uint32 destSize : 24;
28 	uint32 dest;
29 	uint32 commandId;
30 	uint32 optional;
31 };
32 static_assert(sizeof(SIFCMDHEADER) == 0x10, "sizeof(SIFCMDHEADER) must be 16 bytes.");
33 
34 struct SIFSETSREG
35 {
36 	SIFCMDHEADER header;
37 	uint32 index;
38 	uint32 value;
39 };
40 static_assert(sizeof(SIFSETSREG) == 0x18, "sizeof(SIFSETREG) must be 24 bytes.");
41 
42 struct SIFRPCBIND
43 {
44 	SIFCMDHEADER header;
45 	uint32 recordId;
46 	uint32 packetAddr;
47 	uint32 rpcId;
48 	uint32 clientDataAddr;
49 	uint32 serverId;
50 };
51 static_assert(sizeof(SIFRPCBIND) == 0x24, "sizeof(SIFRPCBIND) must be 36 bytes.");
52 
53 struct SIFRPCCALL
54 {
55 	SIFCMDHEADER header;
56 	uint32 recordId;
57 	uint32 packetAddr;
58 	uint32 rpcId;
59 	uint32 clientDataAddr;
60 	uint32 rpcNumber;
61 	uint32 sendSize;
62 	uint32 recv;
63 	uint32 recvSize;
64 	uint32 recvMode;
65 	uint32 serverDataAddr;
66 };
67 static_assert(sizeof(SIFRPCCALL) == 0x38, "sizeof(SIFRPCCALL) must be 56 bytes.");
68 
69 struct SIFRPCREQUESTEND
70 {
71 	SIFCMDHEADER header;
72 	uint32 recordId;
73 	uint32 packetAddr;
74 	uint32 rpcId;
75 	uint32 clientDataAddr;
76 	uint32 commandId;
77 	uint32 serverDataAddr;
78 	uint32 buffer;
79 	uint32 cbuffer;
80 };
81 static_assert(sizeof(SIFRPCREQUESTEND) == 0x30, "sizeof(SIFRPCREQUESTEND) must be 48 bytes.");
82 
83 struct SIFRPCOTHERDATA
84 {
85 	SIFCMDHEADER header;
86 	uint32 recordId;
87 	uint32 packetAddr;
88 	uint32 rpcId;
89 	uint32 receiveDataAddr;
90 	uint32 srcPtr;
91 	uint32 dstPtr;
92 	uint32 size;
93 };
94 static_assert(sizeof(SIFRPCOTHERDATA) == 0x2C, "sizeof(SIFRPCOTHERDATA) must be 44 bytes.");
95 
96 struct SIFRPCHEADER
97 {
98 	uint32 packetAddr;
99 	uint32 rpcId;
100 	uint32 semaId;
101 	uint32 mode;
102 };
103 static_assert(sizeof(SIFRPCHEADER) == 0x10, "sizeof(SIFRPCHEADER) must be 16 bytes.");
104 
105 struct SIFRPCCLIENTDATA
106 {
107 	SIFRPCHEADER header;
108 	uint32 command;
109 	uint32 buffPtr;
110 	uint32 cbuffPtr;
111 	uint32 endFctPtr;
112 	uint32 endParam;
113 	uint32 serverDataAddr;
114 };
115 static_assert(sizeof(SIFRPCCLIENTDATA) == 0x28, "sizeof(SIFRPCCLIENTDATA) must be 40 bytes.");
116