sdk-core
v2026.11.05
PS2 SDK - core tier (build-critical EE/IOP modules)
Toggle main menu visibility
Loading...
Searching...
No Matches
sbp2_disk.h
Go to the documentation of this file.
1
3
* @ingroup core_IEEE1394_bd
4
*/
5
#ifndef _SPB2_DISK_H_
6
#define _SPB2_DISK_H_
7
8
9
#include <
tamtypes.h
>
10
#include "
scsi.h
"
11
12
13
#define XFER_BLOCK_SIZE 65024
/* 65536-512. It seems like my Oxford 934 is capable of maximum transfers of less than 65536 bytes. \
14
NOTE: I reduced the maximum block size here by 512, since transfers are done in (smallest) groups of 512 bytes! \
15
*/
16
17
#define READ_TRANSACTION 0
18
#define WRITE_TRANSACTION 1
19
20
/* Some macros */
21
#define CDB_PAGE_SIZE(v) ((v) << 16)
/* Not in use. */
22
#define CDB_PAGE_TABLE_PRESENT(v) ((v) << 19)
/* Not in use. */
23
#define CDB_MAX_PAYLOAD(v) ((v) << 20)
24
#define CDB_SPEED(v) ((v) << 24)
25
#define CDB_DIRECTION(v) ((v) << 27)
26
#define CDB_DATA_SIZE(v) ((v & 0xffff))
27
28
/* Event flag bits. */
29
#define WRITE_REQ_INCOMING 1
30
#define READ_REQ_INCOMING 2
31
#define BUS_RESET_COMPLETE 4
32
#define ERROR_TIME_OUT 8
33
34
/* Management ORB opcodes */
35
#define SBP2_LOGIN_REQUEST 0x0
36
#define SBP2_QUERY_LOGINS_REQUEST 0x1
37
#define SBP2_RECONNECT_REQUEST 0x3
38
#define SBP2_SET_PASSWORD_REQUEST 0x4
39
#define SBP2_LOGOUT_REQUEST 0x7
40
#define SBP2_ABORT_TASK_REQUEST 0xb
41
#define SBP2_ABORT_TASK_SET 0xc
42
#define SBP2_LOGICAL_UNIT_RESET 0xe
43
#define SBP2_TARGET_RESET_REQUEST 0xf
44
45
/* Configuration ROM keys */
46
#define IEEE1394_CROM_LOGICAL_UNIT_NUM 0x14
47
#define IEEE1394_CROM_UNIT_CHARA 0x3A
48
#define IEEE1394_CROM_CSR_OFFSET 0x54
49
#define IEEE1394_CROM_UNIT_DIRECTORY 0xD1
50
51
/* Some macros. */
52
#define MANAGEMENT_ORB_LOGINID(v) ((v))
53
#define MANAGEMENT_ORB_LUN(v) ((v))
54
#define MANAGEMENT_ORB_FUNCTION(v) ((v) << 16)
55
#define MANAGEMENT_ORB_RECONNECT(v) ((v) << 20)
56
#define MANAGEMENT_ORB_EXCLUSIVE(v) ((v) ? 1 << 28 : 0)
57
58
#define ORB_REQUEST_FORMAT(v) ((v) << 29)
59
#define ORB_NOTIFY ((1) << 31)
60
61
#define MANAGEMENT_ORB_RESPONSE_LENGTH(v) ((v)&0x0000FFFF)
62
#define MANAGEMENT_ORB_PASSWORD_LENGTH(v) ((v) << 16)
63
64
#define NULL_POINTER (1 << 15)
65
66
#define RESP_SBP_STATUS(v) (((v) >> 16) & 0xFF)
67
#define RESP_LEN(v) (((v) >> 24) & 0x07)
68
#define RESP_DEAD(v) (((v) >> 27) & 0x01)
69
#define RESP_RESP(v) (((v) >> 28) & 0x03)
70
#define RESP_SRC(v) (((v) >> 30) & 0x03)
71
72
struct
sbp2_status
73
{
74
u32 status;
75
u32 ORB_low;
76
u8 data[24];
77
}
__attribute__
((packed));
78
79
struct
sbp2_pointer
80
{
81
u16 high;
/* Big endian. */
82
u16 NodeID;
/* Big endian. */
83
u32 low;
/* Big endian. */
84
}
__attribute__
((packed));
85
86
struct
sbp2_ORB_pointer
87
{
88
u16 high;
/* Big endian. */
89
u16 reserved;
/* Big endian. */
90
u32 low;
/* Big endian. */
91
}
__attribute__
((packed));
92
93
struct
sbp2_login_response
94
{
95
u16 login_ID;
/* Big endian. */
96
u16 length;
/* Big endian. */
97
98
struct
sbp2_pointer
command_block_agent;
99
u32 reconnect_hold;
/* Big endian. */
100
}
__attribute__
((packed));
101
102
struct
management_ORB
103
{
104
union
105
{
106
u32 function_data[4];
107
struct
108
{
109
struct
sbp2_pointer
password;
110
struct
sbp2_pointer
response;
111
} login;
112
};
113
u32 flags;
114
union
115
{
116
u32 function_data2;
117
u32 length;
118
};
119
struct
sbp2_pointer
status_FIFO;
120
}
__attribute__
((packed));
121
122
struct
CommandDescriptorBlock
123
{
124
struct
sbp2_ORB_pointer
NextOrb;
125
struct
sbp2_pointer
DataDescriptor;
126
127
u32 misc;
128
unsigned
char
CDBs[16];
129
}
__attribute__
((packed));
130
131
struct
SBP2Device
132
{
133
int
trContext;
134
unsigned
short
int
nodeID;
135
unsigned
short
int
InitiatorNodeID;
136
unsigned
short
int
max_payload;
137
unsigned
short
int
LUN;
138
139
unsigned
short
int
loginID;
/* Stored in big endian. */
140
141
unsigned
char
IsConnected;
142
unsigned
char
mgt_ORB_timeout;
143
unsigned
char
ORB_size;
144
unsigned
char
speed;
145
146
unsigned
long
int
ManagementAgent_high;
147
unsigned
long
int
ManagementAgent_low;
148
149
unsigned
long
int
CommandBlockAgent_high;
150
unsigned
long
int
CommandBlockAgent_low;
151
152
unsigned
long
int
sectorSize;
153
unsigned
long
int
maxLBA;
154
void
*cache;
155
156
struct
scsi_interface
scsi;
157
};
158
159
/* Function prototypes. */
160
extern
void
init_ieee1394DiskDriver(
void
);
161
extern
int
ieee1394_SendCommandBlockORB(
struct
SBP2Device
*dev,
struct
CommandDescriptorBlock
*firstCDB);
162
extern
int
ieee1394_Sync(
void
);
163
extern
void
DeinitIEEE1394(
void
);
164
165
166
#endif
scsi.h
CommandDescriptorBlock
Definition
sbp2_disk.h:123
SBP2Device
Definition
sbp2_disk.h:132
__attribute__
Definition
gif_registers.h:40
management_ORB
Definition
sbp2_disk.h:103
sbp2_ORB_pointer
Definition
sbp2_disk.h:87
sbp2_login_response
Definition
sbp2_disk.h:94
sbp2_pointer
Definition
sbp2_disk.h:80
sbp2_status
Definition
sbp2_disk.h:73
scsi_interface
Definition
scsi.h:9
tamtypes.h
core
IEEE1394_bd
src
include
sbp2_disk.h
Generated by
1.18.0