aboutsummaryrefslogtreecommitdiffstats
path: root/tools/firewire/nosy-dump.h
diff options
context:
space:
mode:
Diffstat (limited to 'tools/firewire/nosy-dump.h')
-rw-r--r--tools/firewire/nosy-dump.h292
1 files changed, 292 insertions, 0 deletions
diff --git a/tools/firewire/nosy-dump.h b/tools/firewire/nosy-dump.h
new file mode 100644
index 000000000000..d8bcb61ab954
--- /dev/null
+++ b/tools/firewire/nosy-dump.h
@@ -0,0 +1,292 @@
1#ifndef __nosy_dump_h__
2#define __nosy_dump_h__
3
4#define array_length(array) (sizeof(array) / sizeof(array[0]))
5
6#define TCODE_WRITE_QUADLET 0x0
7#define TCODE_WRITE_BLOCK 0x1
8#define TCODE_WRITE_RESPONSE 0x2
9#define TCODE_READ_QUADLET 0x4
10#define TCODE_READ_BLOCK 0x5
11#define TCODE_READ_QUADLET_RESPONSE 0x6
12#define TCODE_READ_BLOCK_RESPONSE 0x7
13#define TCODE_CYCLE_START 0x8
14#define TCODE_LOCK_REQUEST 0x9
15#define TCODE_ISO_DATA 0xa
16#define TCODE_LOCK_RESPONSE 0xb
17#define TCODE_PHY_PACKET 0x10
18
19#define ACK_NO_ACK 0x0
20#define ACK_COMPLETE 0x1
21#define ACK_PENDING 0x2
22#define ACK_BUSY_X 0x4
23#define ACK_BUSY_A 0x5
24#define ACK_BUSY_B 0x6
25#define ACK_DATA_ERROR 0xd
26#define ACK_TYPE_ERROR 0xe
27
28#define ACK_DONE(a) ((a >> 2) == 0)
29#define ACK_BUSY(a) ((a >> 2) == 1)
30#define ACK_ERROR(a) ((a >> 2) == 3)
31
32#define SPEED_100 0x0
33#define SPEED_200 0x1
34#define SPEED_400 0x2
35
36struct phy_packet {
37 unsigned long timestamp;
38
39 union {
40 struct {
41 unsigned int zero : 24;
42 unsigned int phy_id : 6;
43 unsigned int identifier : 2;
44 } common, link_on;
45 struct {
46 unsigned int zero : 16;
47 unsigned int gap_count : 6;
48 unsigned int set_gap_count : 1;
49 unsigned int set_root : 1;
50 unsigned int root_id : 6;
51 unsigned int identifier : 2;
52 } phy_config;
53 struct {
54 unsigned int more_packets : 1;
55 unsigned int initiated_reset : 1;
56 unsigned int port2 : 2;
57 unsigned int port1 : 2;
58 unsigned int port0 : 2;
59 unsigned int power_class : 3;
60 unsigned int contender : 1;
61 unsigned int phy_delay : 2;
62 unsigned int phy_speed : 2;
63 unsigned int gap_count : 6;
64 unsigned int link_active : 1;
65 unsigned int extended : 1;
66 unsigned int phy_id : 6;
67 unsigned int identifier : 2;
68 } self_id;
69
70 struct {
71 unsigned int more_packets : 1;
72 unsigned int reserved1 : 1;
73 unsigned int porth : 2;
74 unsigned int portg : 2;
75 unsigned int portf : 2;
76 unsigned int porte : 2;
77 unsigned int portd : 2;
78 unsigned int portc : 2;
79 unsigned int portb : 2;
80 unsigned int porta : 2;
81 unsigned int reserved0 : 2;
82 unsigned int sequence : 3;
83 unsigned int extended : 1;
84 unsigned int phy_id : 6;
85 unsigned int identifier : 2;
86 } ext_self_id;
87 };
88
89 unsigned long inverted;
90 unsigned long ack;
91};
92
93#define PHY_PACKET_CONFIGURATION 0x00
94#define PHY_PACKET_LINK_ON 0x01
95#define PHY_PACKET_SELF_ID 0x02
96
97struct link_packet {
98 unsigned long timestamp;
99
100 union {
101 struct {
102 unsigned int priority : 4;
103 unsigned int tcode : 4;
104 unsigned int rt : 2;
105 unsigned int tlabel : 6;
106 unsigned int destination : 16;
107
108 unsigned int offset_high : 16;
109 unsigned int source : 16;
110
111 unsigned long offset_low;
112 } common;
113
114 struct {
115 unsigned int priority : 4;
116 unsigned int tcode : 4;
117 unsigned int rt : 2;
118 unsigned int tlabel : 6;
119 unsigned int destination : 16;
120
121 unsigned int offset_high : 16;
122 unsigned int source : 16;
123
124 unsigned long offset_low;
125
126 unsigned long crc;
127 } read_quadlet;
128
129 struct {
130 unsigned int priority : 4;
131 unsigned int tcode : 4;
132 unsigned int rt : 2;
133 unsigned int tlabel : 6;
134 unsigned int destination : 16;
135
136 unsigned int reserved0 : 12;
137 unsigned int rcode : 4;
138 unsigned int source : 16;
139
140 unsigned long reserved1;
141
142 unsigned long data;
143
144 unsigned long crc;
145 } read_quadlet_response;
146
147 struct {
148 unsigned int priority : 4;
149 unsigned int tcode : 4;
150 unsigned int rt : 2;
151 unsigned int tlabel : 6;
152 unsigned int destination : 16;
153
154 unsigned int offset_high : 16;
155 unsigned int source : 16;
156
157 unsigned long offset_low;
158
159 unsigned int extended_tcode : 16;
160 unsigned int data_length : 16;
161
162 unsigned long crc;
163 } read_block;
164
165 struct {
166 unsigned int priority : 4;
167 unsigned int tcode : 4;
168 unsigned int rt : 2;
169 unsigned int tlabel : 6;
170 unsigned int destination : 16;
171
172 unsigned int reserved0 : 12;
173 unsigned int rcode : 4;
174 unsigned int source : 16;
175
176 unsigned long reserved1;
177
178 unsigned int extended_tcode : 16;
179 unsigned int data_length : 16;
180
181 unsigned long crc;
182
183 unsigned long data[0];
184
185 /* crc and ack follows. */
186
187 } read_block_response;
188
189 struct {
190 unsigned int priority : 4;
191 unsigned int tcode : 4;
192 unsigned int rt : 2;
193 unsigned int tlabel : 6;
194 unsigned int destination : 16;
195
196 unsigned int offset_high : 16;
197 unsigned int source : 16;
198
199 unsigned long offset_low;
200
201 unsigned long data;
202
203 unsigned long crc;
204
205 } write_quadlet;
206
207 struct {
208 unsigned int priority : 4;
209 unsigned int tcode : 4;
210 unsigned int rt : 2;
211 unsigned int tlabel : 6;
212 unsigned int destination : 16;
213
214 unsigned int offset_high : 16;
215 unsigned int source : 16;
216
217 unsigned int offset_low : 32;
218
219 unsigned int extended_tcode : 16;
220 unsigned int data_length : 16;
221
222 unsigned long crc;
223 unsigned long data[0];
224
225 /* crc and ack follows. */
226
227 } write_block;
228
229 struct {
230 unsigned int priority : 4;
231 unsigned int tcode : 4;
232 unsigned int rt : 2;
233 unsigned int tlabel : 6;
234 unsigned int destination : 16;
235
236 unsigned int reserved0 : 12;
237 unsigned int rcode : 4;
238 unsigned int source : 16;
239
240 unsigned long reserved1;
241
242 unsigned long crc;
243 } write_response;
244
245 struct {
246 unsigned int priority : 4;
247 unsigned int tcode : 4;
248 unsigned int rt : 2;
249 unsigned int tlabel : 6;
250 unsigned int destination : 16;
251
252 unsigned int offset_high : 16;
253 unsigned int source : 16;
254
255 unsigned long offset_low;
256
257 unsigned long data;
258
259 unsigned long crc;
260 } cycle_start;
261
262 struct {
263 unsigned int sy : 4;
264 unsigned int tcode : 4;
265 unsigned int channel : 6;
266 unsigned int tag : 2;
267 unsigned int data_length : 16;
268
269 unsigned long crc;
270 } iso_data;
271
272 };
273
274};
275
276struct subaction {
277 unsigned long ack;
278 size_t length;
279 struct list link;
280 struct link_packet packet;
281};
282
283struct link_transaction {
284 int request_node, response_node, tlabel;
285 struct subaction *request, *response;
286 struct list request_list, response_list;
287 struct list link;
288};
289
290int decode_fcp(struct link_transaction *t);
291
292#endif /* __nosy_dump_h__ */