PS2SDK
PS2 Homebrew Libraries
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 
45 struct sbp2_status
46 {
47  u32 status;
48  u32 ORB_low;
49  u8 data[24];
50 } __attribute__((packed));
51 
52 struct sbp2_pointer
53 {
54  u16 high; /* Big endian. */
55  u16 NodeID; /* Big endian. */
56  u32 low; /* Big endian. */
57 } __attribute__((packed));
58 
59 struct sbp2_ORB_pointer
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 
75 struct 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 
104 struct 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. */
131 extern void init_ieee1394DiskDriver(void);
132 extern int ieee1394_SendCommandBlockORB(struct SBP2Device *dev, struct CommandDescriptorBlock *firstCDB);
133 extern int ieee1394_Sync(void);
134 extern void DeinitIEEE1394(void);
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
sbp2_ORB_pointer
Definition: sbp2_disk.h:80
SBP2Device
Definition: sbp2_disk.h:125