diff options
Diffstat (limited to 'tools/firewire/nosy-dump.h')
-rw-r--r-- | tools/firewire/nosy-dump.h | 292 |
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 | |||
36 | struct 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 | |||
97 | struct 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 | |||
276 | struct subaction { | ||
277 | unsigned long ack; | ||
278 | size_t length; | ||
279 | struct list link; | ||
280 | struct link_packet packet; | ||
281 | }; | ||
282 | |||
283 | struct 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 | |||
290 | int decode_fcp(struct link_transaction *t); | ||
291 | |||
292 | #endif /* __nosy_dump_h__ */ | ||