sdk-core v2026.11.05
PS2 SDK - core tier (build-critical EE/IOP modules)
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
73{
74 u32 status;
75 u32 ORB_low;
76 u8 data[24];
77} __attribute__((packed));
78
80{
81 u16 high; /* Big endian. */
82 u16 NodeID; /* Big endian. */
83 u32 low; /* Big endian. */
84} __attribute__((packed));
85
87{
88 u16 high; /* Big endian. */
89 u16 reserved; /* Big endian. */
90 u32 low; /* Big endian. */
91} __attribute__((packed));
92
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
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
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
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. */
160extern void init_ieee1394DiskDriver(void);
161extern int ieee1394_SendCommandBlockORB(struct SBP2Device *dev, struct CommandDescriptorBlock *firstCDB);
162extern int ieee1394_Sync(void);
163extern void DeinitIEEE1394(void);
164
165
166#endif