PS2SDK
PS2 Homebrew Libraries
Loading...
Searching...
No Matches
sbp2_disk.h
1/* Event flag bits. */
2#define WRITE_REQ_INCOMING 1
3#define READ_REQ_INCOMING 2
4#define BUS_RESET_COMPLETE 4
5#define ERROR_TIME_OUT 8
6
7/* Management ORB opcodes */
8#define SBP2_LOGIN_REQUEST 0x0
9#define SBP2_QUERY_LOGINS_REQUEST 0x1
10#define SBP2_RECONNECT_REQUEST 0x3
11#define SBP2_SET_PASSWORD_REQUEST 0x4
12#define SBP2_LOGOUT_REQUEST 0x7
13#define SBP2_ABORT_TASK_REQUEST 0xb
14#define SBP2_ABORT_TASK_SET 0xc
15#define SBP2_LOGICAL_UNIT_RESET 0xe
16#define SBP2_TARGET_RESET_REQUEST 0xf
17
18/* Configuration ROM keys */
19#define IEEE1394_CROM_LOGICAL_UNIT_NUM 0x14
20#define IEEE1394_CROM_UNIT_CHARA 0x3A
21#define IEEE1394_CROM_CSR_OFFSET 0x54
22#define IEEE1394_CROM_UNIT_DIRECTORY 0xD1
23
24/* Some macros. */
25#define MANAGEMENT_ORB_LOGINID(v) ((v))
26#define MANAGEMENT_ORB_LUN(v) ((v))
27#define MANAGEMENT_ORB_FUNCTION(v) ((v) << 16)
28#define MANAGEMENT_ORB_RECONNECT(v) ((v) << 20)
29#define MANAGEMENT_ORB_EXCLUSIVE(v) ((v) ? 1 << 28 : 0)
30
31#define ORB_REQUEST_FORMAT(v) ((v) << 29)
32#define ORB_NOTIFY ((1) << 31)
33
34#define MANAGEMENT_ORB_RESPONSE_LENGTH(v) ((v)&0x0000FFFF)
35#define MANAGEMENT_ORB_PASSWORD_LENGTH(v) ((v) << 16)
36
37#define NULL_POINTER (1 << 15)
38
39#define RESP_SBP_STATUS(v) (((v) >> 16) & 0xFF)
40#define RESP_LEN(v) (((v) >> 24) & 0x07)
41#define RESP_DEAD(v) (((v) >> 27) & 0x01)
42#define RESP_RESP(v) (((v) >> 28) & 0x03)
43#define RESP_SRC(v) (((v) >> 30) & 0x03)
44
45struct sbp2_status
46{
47 u32 status;
48 u32 ORB_low;
49 u8 data[24];
50} __attribute__((packed));
51
52struct sbp2_pointer
53{
54 u16 high; /* Big endian. */
55 u16 NodeID; /* Big endian. */
56 u32 low; /* Big endian. */
57} __attribute__((packed));
58
60{
61 u16 high; /* Big endian. */
62 u16 reserved; /* Big endian. */
63 u32 low; /* Big endian. */
64} __attribute__((packed));
65
67{
68 u16 login_ID; /* Big endian. */
69 u16 length; /* Big endian. */
70
71 struct sbp2_pointer command_block_agent;
72 u32 reconnect_hold; /* Big endian. */
73} __attribute__((packed));
74
75struct management_ORB
76{
77 union
78 {
79 u32 function_data[4];
80 struct
81 {
82 struct sbp2_pointer password;
83 struct sbp2_pointer response;
84 } login;
85 };
86 u32 flags;
87 union
88 {
89 u32 function_data2;
90 u32 length;
91 };
92 struct sbp2_pointer status_FIFO;
93} __attribute__((packed));
94
96{
97 struct sbp2_ORB_pointer NextOrb;
98 struct sbp2_pointer DataDescriptor;
99
100 u32 misc;
101 unsigned char CDBs[12];
102} __attribute__((packed));
103
104struct SBP2Device
105{
106 int trContext;
107 unsigned short int nodeID;
108 unsigned short int InitiatorNodeID;
109 unsigned short int max_payload;
110 unsigned short int LUN;
111
112 unsigned short int loginID; /* Stored in big endian. */
113
114 unsigned char IsConnected;
115 unsigned char mgt_ORB_timeout;
116 unsigned char ORB_size;
117 unsigned char speed;
118
119 unsigned long int ManagementAgent_high;
120 unsigned long int ManagementAgent_low;
121
122 unsigned long int CommandBlockAgent_high;
123 unsigned long int CommandBlockAgent_low;
124
125 unsigned long int sectorSize;
126 unsigned long int maxLBA;
127 void *cache;
128};
129
130/* Function prototypes. */
131extern void init_ieee1394DiskDriver(void);
132extern int ieee1394_SendCommandBlockORB(struct SBP2Device *dev, struct CommandDescriptorBlock *firstCDB);
133extern int ieee1394_Sync(void);
134extern void DeinitIEEE1394(void);