PS2SDK
PS2 Homebrew Libraries
Loading...
Searching...
No Matches
iLink_internal.h
1
// #define DEBUG_TTY_FEEDBACK /* Comment out to disable generation of debug TTY messages */
2
3
#ifdef DEBUG_TTY_FEEDBACK
4
#define DEBUG_PRINTF(args...) printf("ILINKMAN: "args)
5
#define iDEBUG_PRINTF(args...) Kprintf("ILINKMAN: "args)
6
#else
7
#define DEBUG_PRINTF(args...) \
8
do { \
9
} while (0)
10
#define iDEBUG_PRINTF(args...) \
11
do { \
12
} while (0)
13
#endif
14
15
#define REQ_CHECK_MEM_BOUNDARIES
/* Define this to enable memory address boundary checking for incoming requests. */
16
#define REQ_CHECK_CONSOLE_VERSION
/* Define this to enable version checks on the Playstation 2 console. */
17
// #define REQ_CHECK_DMAC_STAT /* Define this to enable memory DMAC status checking. */
18
// #define REQ_CHECK_ERRORS /* Define this to enable checking for HdrErr and SntBsyAck interrupts. Serves no purpose except for debugging. */
19
20
#define iLink_INTR0_DRFR 0x00000001
21
#define iLink_INTR0_DRFO 0x00000002
22
#define iLink_INTR0_TxStk 0x00000040
23
#define iLink_INTR0_FmtE 0x00000080
24
#define iLink_INTR0_UResp 0x00000100
25
#define iLink_INTR0_PBCntR 0x00000200
26
#define iLink_INTR0_STO 0x00000400
27
#define iLink_INTR0_RetEx 0x00000800
28
#define iLink_INTR0_InvAck 0x00001000
29
#define iLink_INTR0_AckMiss 0x00002000
30
#define iLink_INTR0_AckRcvd 0x00004000
31
#define iLink_INTR0_CycArbFl 0x00008000
32
#define iLink_INTR0_CycLost 0x00010000
33
#define iLink_INTR0_CycSt 0x00080000
34
#define iLink_INTR0_CycTL 0x00200000
35
#define iLink_INTR0_URx 0x00400000
36
#define iLink_INTR0_SubActGap 0x00800000
37
#define iLink_INTR0_TCErr 0x01000000
38
#define iLink_INTR0_HdrErr 0x02000000
39
#define iLink_INTR0_SntBsyAck 0x04000000
40
#define iLink_INTR0_CmdRst 0x08000000
41
#define iLink_INTR0_ArbRstGap 0x10000000
42
#define iLink_INTR0_PhyRst 0x20000000
43
#define iLink_INTR0_PhyRRx 0x40000000
44
#define iLink_INTR0_PhyInt 0x80000000
45
46
#define iLink_INTR1_DTFO 0x00000001
47
#define iLink_INTR1_UTD 0x00000002
48
49
#define iLink_CTRL0_URcvM 0x00000010
50
#define iLink_CTRL0_RSP0 0x00000020
51
#define iLink_CTRL0_RetLim(x) (x << 12)
52
#define iLink_CTRL0_LooseTightIso 0x00010000
53
#define iLink_CTRL0_STardy 0x00020000
54
#define iLink_CTRL0_BRDE 0x00040000
55
#define iLink_CTRL0_Root 0x00080000
56
#define iLink_CTRL0_ExtCyc 0x00100000
57
#define iLink_CTRL0_CycTmrEn 0x00200000
58
#define iLink_CTRL0_CMstr 0x00400000
59
#define iLink_CTRL0_BusIDRst 0x00800000
60
#define iLink_CTRL0_RxRst 0x01000000
61
#define iLink_CTRL0_TxRst 0x02000000
62
#define iLink_CTRL0_RxEn 0x04000000
63
#define iLink_CTRL0_TxEn 0x08000000
64
#define iLink_CTRL0_DELim(x) (x << 28)
65
#define iLink_CTRL0_SIDF 0x40000000
66
#define iLink_CTRL0_RcvSelfID 0x80000000
67
68
#define iLink_CTRL2_LPSRst 0x00000001
69
#define iLink_CTRL2_LPSEn 0x00000002
70
#define iLink_CTRL2_SRst 0x00000004
71
#define iLink_CTRL2_SOK 0x00000008
72
73
#define iLinkDMA_CTRL_SR_DWidth(x) (x << 17)
74
#define iLinkDMA_CTRL_SR_DEn 0x080000
75
#define iLinkDMA_CTRL_SR_RActl 0x010000
76
#define iLinkDMA_CTRL_SR_LFirst 0x100000
77
78
#define PHT_CTRL_ST_PRBR 0x00000200
79
#define PHT_CTRL_ST_PStk 0x00000400
80
#define PHT_CTRL_ST_EnDMAS 0x00001000
81
#define PHT_CTRL_ST_EBCNT 0x00008000
82
#define PHT_CTRL_ST_EWREQ 0x00010000
83
#define PHT_CTRL_ST_ERREQ 0x00020000
84
#define PHT_CTRL_ST_EPCNT 0x00100000
85
#define PHT_CTRL_ST_PHTRst 0x00200000
86
#define PHT_CTRL_ST_IHdr 0x00400000
87
#define PHT_CTRL_ST_EHdr 0x02000000
88
89
#define DBUF_FIFO_RESET_TX 0x00008000
90
#define DBUF_FIFO_RESET_RX 0x80000000
91
92
#define PACKET_TCODE (((x) >> 4) & 0xF)
93
94
/* PHY configuration packet data */
95
#define PHY_CONFIG_PACKET 0xE0
96
#define PHY_CONFIG_GAP_CNT(x) (((x) >> 16) & 0x3F)
97
#define PHY_CONFIG_T(x) (((x) >> 22) & 0x01)
98
#define PHY_CONFIG_R(x) (((x) >> 23) & 0x01)
99
#define PHY_CONFIG_ROOT_ID(x) (((x) >> 24) & 0x3F)
100
101
/* SELF-ID packet data */
102
#define PHY_SELF_ID_PACKET 0xE1
103
#define PHY_SELF_ID_PKT_SIG 0x2
/* 10b */
104
#define SELF_ID_SIGNATURE(x) (((x) >> 30) & 0x03)
105
#define SELF_ID_NODEID(x) (((x) >> 24) & 0x3F)
106
#define SELF_ID_L(x) (((x) >> 22) & 0x01)
107
#define SELF_ID_GAP_CNT(x) (((x) >> 16) & 0x3F)
108
#define SELF_ID_SPEED(x) (((x) >> 14) & 0x03)
109
#define SELF_ID_POWER(x) (((x) >> 8) & 0x07)
110
#define SELF_ID_M(x) ((x)&0x01)
111
112
/* PHY Register bits. */
113
#define REG01_IBR 0x40
114
#define REG01_RHB 0x80
115
#define REG04_LCTRL 0x80
116
#define REG05_ISBR 0x40
117
#define REG05_EN_ACCL 0x02
118
#define REG05_EN_MULTI 0x01
119
120
/* Event flag bits. */
121
#define iLinkEventInterrupt 0x00000001
122
#define iLinkEventBusReady 0x00000002
123
#define iLinkEventGotSELFIDs 0x00000004
124
#define iLinkEventDataSent 0x00000008
125
#define iLinkEventDataReceived 0x00000010
126
#define iLinkEventDMATransEnd 0x00000020
127
#define iLinkEventBusReset 0x00000040
128
#define iLinkEventURx 0x00000080
129
#define iLinkEventError 0x80000000
130
131
/* Structures. */
132
#define IEEE1394_TCODE_WRITEQ 0
133
#define IEEE1394_TCODE_WRITEB 1
134
#define IEEE1394_TCODE_WRITE_RESPONSE 2
135
#define IEEE1394_TCODE_READQ 4
136
#define IEEE1394_TCODE_READB 5
137
#define IEEE1394_TCODE_READQ_RESPONSE 6
138
#define IEEE1394_TCODE_READB_RESPONSE 7
139
140
struct
ieee1394_TrPacketHdr
141
{
142
unsigned
int
header;
143
unsigned
int
offset_high;
144
unsigned
int
offset_low;
145
unsigned
int
misc;
146
};
147
148
struct
ieee1394_TrResponsePacketHdr
149
{
150
unsigned
int
header;
151
unsigned
int
header2;
152
unsigned
int
reserved;
153
unsigned
int
LastField;
154
};
155
156
#define ILINK_REGISTER_BASE 0xBF808400
157
158
struct
ILINKMemMap
159
{
160
volatile
unsigned
int
NodeID;
/* 0x00 */
161
volatile
unsigned
int
CycleTime;
/* 0x04 */
162
163
volatile
unsigned
int
ctrl0;
/* 0x08 */
164
volatile
unsigned
int
ctrl1;
/* 0x0C */
165
volatile
unsigned
int
ctrl2;
/* 0x10 */
166
167
volatile
unsigned
int
PHYAccess;
/* 0x14 */
168
169
volatile
unsigned
int
UnknownRegister18;
/* 0x18 */
170
volatile
unsigned
int
UnknownRegister1C;
/* 0x1C */
171
172
volatile
unsigned
int
intr0;
/* 0x20 */
173
volatile
unsigned
int
intr0Mask;
/* 0x24 */
174
175
volatile
unsigned
int
intr1;
/* 0x28 */
176
volatile
unsigned
int
intr1Mask;
/* 0x2C */
177
178
volatile
unsigned
int
intr2;
/* 0x30 */
179
volatile
unsigned
int
intr2Mask;
/* 0x34 */
180
181
volatile
unsigned
int
dmar;
/* 0x38 */
182
volatile
unsigned
int
ack_status;
/* 0x3C */
183
volatile
unsigned
int
ubufTransmitNext;
/* 0x40 */
184
volatile
unsigned
int
ubufTransmitLast;
/* 0x44 */
185
volatile
unsigned
int
ubufTransmitClear;
/* 0x48 */
186
volatile
unsigned
int
ubufReceiveClear;
/* 0x4C */
187
volatile
unsigned
int
ubufReceive;
/* 0x50 */
188
volatile
unsigned
int
ubufReceiveLevel;
/* 0x54 */
189
190
volatile
unsigned
int
unmapped1[0x06];
/* Registers 0x58-0x6C are unmapped. */
191
192
volatile
unsigned
int
UnknownRegister70;
/* 0x70 */
193
volatile
unsigned
int
UnknownRegister74;
/* 0x74 */
194
volatile
unsigned
int
UnknownRegister78;
/* 0x78 */
195
volatile
unsigned
int
UnknownRegister7C;
/* 0x7C */
196
197
volatile
unsigned
int
PHT_ctrl_ST_R0;
/* 0x80 */
198
volatile
unsigned
int
PHT_split_TO_R0;
/* 0x84 */
199
volatile
unsigned
int
PHT_ReqResHdr0_R0;
/* 0x88 */
200
volatile
unsigned
int
PHT_ReqResHdr1_R0;
/* 0x8C */
201
volatile
unsigned
int
PHT_ReqResHdr2_R0;
/* 0x90 */
202
203
volatile
unsigned
int
STRxNIDSel0_R0;
/* 0x94 */
204
volatile
unsigned
int
STRxNIDSel1_R0;
/* 0x98 */
205
206
volatile
unsigned
int
STRxHDR_R0;
/* 0x9C */
207
volatile
unsigned
int
STTxHDR_R0;
/* 0xA0 */
208
209
volatile
unsigned
int
DTransCTRL0;
/* 0xA4 */
210
volatile
unsigned
int
CIPHdrTx0_R0;
/* 0xA8 */
211
volatile
unsigned
int
CIPHdrTx1_R0;
/* 0xAC */
212
213
volatile
unsigned
int
padding4;
/* 0xB0 */
214
volatile
unsigned
int
STTxTimeStampOffs_R0;
/* 0xB4 */
215
216
volatile
unsigned
int
dmaCtrlSR0;
/* 0xB8 */
217
volatile
unsigned
int
dmaTransTRSH0;
/* 0xBC */
218
volatile
unsigned
int
dbufFIFO_lvlR0;
/* 0xC0 */
219
volatile
unsigned
int
dbufTxDataR0;
/* 0xC4 */
220
volatile
unsigned
int
dbufRxDataR0;
/* 0xC8 */
221
222
volatile
unsigned
int
dbufWatermarksR0;
/* 0xCC (Unmapped) */
223
volatile
unsigned
int
dbufFIFOSzR0;
/* 0xD0 (Unmapped) */
224
225
volatile
unsigned
int
unmapped2[0x0B];
/* Unmapped. */
226
227
volatile
unsigned
int
PHT_ctrl_ST_R1;
/* 0x100 */
228
volatile
unsigned
int
PHT_split_TO_R1;
/* 0x104 */
229
volatile
unsigned
int
PHT_ReqResHdr0_R1;
/* 0x108 */
230
volatile
unsigned
int
PHT_ReqResHdr1_R1;
/* 0x10C */
231
volatile
unsigned
int
PHT_ReqResHdr2_R1;
/* 0x110 */
232
233
volatile
unsigned
int
STRxNIDSel0_R1;
/* 0x114 */
234
volatile
unsigned
int
STRxNIDSel1_R1;
/* 0x118 */
235
236
volatile
unsigned
int
STRxHDR_R1;
/* 0x11C */
237
volatile
unsigned
int
STTxHDR_R1;
/* 0x120 */
238
239
volatile
unsigned
int
DTransCTRL1;
/* 0x124 */
240
volatile
unsigned
int
CIPHdrTx0_R1;
/* 0x128 */
241
volatile
unsigned
int
CIPHdrTx1_R1;
/* 0x12C */
242
243
volatile
unsigned
int
padding5;
/* 0x130 */
244
volatile
unsigned
int
STTxTimeStampOffs_R1;
/* 0x134 */
245
246
volatile
unsigned
int
dmaCtrlSR1;
/* 0x138 */
247
volatile
unsigned
int
dmaTransTRSH1;
/* 0x13C */
248
volatile
unsigned
int
dbufFIFO_lvlR1;
/* 0x140 */
249
volatile
unsigned
int
dbufTxDataR1;
/* 0x144 */
250
volatile
unsigned
int
dbufRxDataR1;
/* 0x148 */
251
252
volatile
unsigned
int
dbufWatermarksR1;
/* 0x14C (Unmapped) */
253
volatile
unsigned
int
dbufFIFOSzR1;
/* 0x150 (Unmapped) */
254
};
255
256
#define ILINK_DMAC_REGISTER_BASE 0xBF801580
257
258
struct
DMAChannelRegBlock
259
{
/* The PS2 has 3 of these register blocks for DMAC #3 */
260
volatile
unsigned
int
madr;
261
volatile
unsigned
int
dlen;
262
volatile
unsigned
int
slice;
263
volatile
unsigned
int
chcr;
264
volatile
unsigned
int
rtar;
265
volatile
unsigned
int
DmarReadStart;
266
volatile
unsigned
int
DmarReadEnd;
267
268
volatile
unsigned
int
unused;
/* This region contains either unmapped memory locations or registers that aren't for specific DMA channel control. */
269
};
270
271
#define ILINK_DMAC_DMAR_CTRL_BASE 0xBF8015DC
272
273
struct
DMARRegBlock
274
{
275
volatile
unsigned
int
DmarWriteStart;
276
volatile
unsigned
int
DmarWriteEnd;
277
};
278
279
#define MAX_CONCURRENT_TRANSACTIONS 10
280
281
#define DMAC_CHCR_AR (1 << 31)
/* Automatic Response. */
282
#define DMAC_CHCR_11 (1 << 11)
/* I don't know what this does, but it appears to be a bit that means something to the DMAC. */
283
284
struct
TransactionContextData
285
{
286
int
GenerationNumber;
287
unsigned
short
int
NodeID;
288
unsigned
char
IsConnected;
289
unsigned
char
speed;
290
};
291
292
/* Function prototypes. */
293
extern
void
UBUFThread(
void
*arg);
294
extern
int
GetConsoleIDs(u64 *guid,
char
*ModelName);
295
extern
void
iLinkDisableIntr(
void
);
296
extern
int
iLinkResetHW(
void
);
297
extern
void
iLinkShutdownHW(
void
);
298
extern
void
iLinkHWInitialize(
void
);
299
extern
void
iLinkEnableCMaster(
void
);
300
extern
void
iLinkBusEnable(
void
);
301
extern
void
*malloc(
unsigned
int
nBytes);
302
extern
void
free(
void
*buffer);
303
304
extern
void
InitializeConfigurationROM(
void
);
305
306
extern
unsigned
char
iLinkReadPhy(
unsigned
char
address);
307
extern
void
iLinkWritePhy(
unsigned
char
address,
unsigned
char
data);
308
extern
void
iLinkPHY_SetRootBit(
int
isRoot);
309
extern
void
iLinkPHY_SetGapCount(
unsigned
char
GapCount);
310
extern
void
iLinkPHY_SetLCTRL(
int
LCTRL_status);
311
extern
void
iLinkPHYBusReset(
void
);
312
313
extern
int
iLinkIntrHandler(
void
*arg);
314
extern
void
iLinkIntrRegister0Handler(
void
*arg);
315
316
extern
void
SendResponse(
unsigned
short
int
NodeID,
unsigned
short
RcvdBusID,
unsigned
char
rcode,
unsigned
char
tLabel,
unsigned
char
tCode,
unsigned
char
speed,
unsigned
int
*buffer,
unsigned
int
nQuads);
317
extern
int
iLinkReadReq(
struct
TransactionContextData
*trContext,
unsigned
short
int
offset_high,
unsigned
int
offset_low,
void
*buffer,
unsigned
int
nBytes);
318
extern
int
iLinkWriteReq(
struct
TransactionContextData
*trContext,
unsigned
short
int
offset_high,
unsigned
int
offset_low,
void
*buffer,
unsigned
int
nBytes);
319
320
extern
void
iLinkInitPHT(
void
);
321
extern
void
PHTSendResponse(
unsigned
short
int
NodeID,
unsigned
short
RcvdBusID,
unsigned
char
rcode,
unsigned
char
tLabel,
unsigned
char
tCode,
unsigned
char
speed,
unsigned
int
*buffer,
unsigned
int
nQuads);
322
extern
int
iLinkReadPHTReq(
struct
TransactionContextData
*trContext,
unsigned
short
int
offset_high,
unsigned
int
offset_low,
void
*buffer,
unsigned
int
nBytes);
323
extern
int
iLinkWritePHTReq(
struct
TransactionContextData
*trContext,
unsigned
short
int
offset_high,
unsigned
int
offset_low,
void
*buffer,
unsigned
int
nBytes);
DMAChannelRegBlock
Definition
iLink_internal.h:259
DMARRegBlock
Definition
iLink_internal.h:274
ILINKMemMap
Definition
iLink_internal.h:159
TransactionContextData
Definition
iLink_internal.h:285
ieee1394_TrPacketHdr
Definition
iLink_internal.h:141
ieee1394_TrResponsePacketHdr
Definition
iLink_internal.h:149
iop
iLink
iLinkman
src
include
iLink_internal.h
Generated on Tue Feb 11 2025 21:35:58 for PS2SDK by
1.12.0