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