PS2SDK
PS2 Homebrew Libraries
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 
68 struct sbp2_status
69 {
70  u32 status;
71  u32 ORB_low;
72  u8 data[24];
73 } __attribute__((packed));
74 
75 struct sbp2_pointer
76 {
77  u16 high; /* Big endian. */
78  u16 NodeID; /* Big endian. */
79  u32 low; /* Big endian. */
80 } __attribute__((packed));
81 
82 struct sbp2_ORB_pointer
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
101  {
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 
127 struct 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. */
156 extern void init_ieee1394DiskDriver(void);
157 extern int ieee1394_SendCommandBlockORB(struct SBP2Device *dev, struct CommandDescriptorBlock *firstCDB);
158 extern int ieee1394_Sync(void);
159 extern void DeinitIEEE1394(void);
160 
161 
162 #endif
management_ORB
Definition: sbp2_disk.h:96
sbp2_login_response
Definition: sbp2_disk.h:87
CommandDescriptorBlock
Definition: sbp2_disk.h:116
sbp2_pointer
Definition: sbp2_disk.h:73
sbp2_status
Definition: sbp2_disk.h:66
__attribute__
typedef __attribute__
Definition: tlbfunc.c:60
tamtypes.h
sbp2_ORB_pointer
Definition: sbp2_disk.h:80
SBP2Device
Definition: sbp2_disk.h:125
scsi_interface
Definition: scsi.h:4