tools/firewire: add userspace front-end of nosy
[linux-2.6/linux-acpi-2.6/ibm-acpi-2.6.git] / tools / firewire / nosy-dump.h
blobd8bcb61ab954ba03b101b1b51c46846cb0933f8f
1 #ifndef __nosy_dump_h__
2 #define __nosy_dump_h__
4 #define array_length(array) (sizeof(array) / sizeof(array[0]))
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
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
28 #define ACK_DONE(a) ((a >> 2) == 0)
29 #define ACK_BUSY(a) ((a >> 2) == 1)
30 #define ACK_ERROR(a) ((a >> 2) == 3)
32 #define SPEED_100 0x0
33 #define SPEED_200 0x1
34 #define SPEED_400 0x2
36 struct phy_packet {
37 unsigned long timestamp;
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;
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;
89 unsigned long inverted;
90 unsigned long ack;
93 #define PHY_PACKET_CONFIGURATION 0x00
94 #define PHY_PACKET_LINK_ON 0x01
95 #define PHY_PACKET_SELF_ID 0x02
97 struct link_packet {
98 unsigned long timestamp;
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;
108 unsigned int offset_high : 16;
109 unsigned int source : 16;
111 unsigned long offset_low;
112 } common;
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;
121 unsigned int offset_high : 16;
122 unsigned int source : 16;
124 unsigned long offset_low;
126 unsigned long crc;
127 } read_quadlet;
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;
136 unsigned int reserved0 : 12;
137 unsigned int rcode : 4;
138 unsigned int source : 16;
140 unsigned long reserved1;
142 unsigned long data;
144 unsigned long crc;
145 } read_quadlet_response;
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;
154 unsigned int offset_high : 16;
155 unsigned int source : 16;
157 unsigned long offset_low;
159 unsigned int extended_tcode : 16;
160 unsigned int data_length : 16;
162 unsigned long crc;
163 } read_block;
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;
172 unsigned int reserved0 : 12;
173 unsigned int rcode : 4;
174 unsigned int source : 16;
176 unsigned long reserved1;
178 unsigned int extended_tcode : 16;
179 unsigned int data_length : 16;
181 unsigned long crc;
183 unsigned long data[0];
185 /* crc and ack follows. */
187 } read_block_response;
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;
196 unsigned int offset_high : 16;
197 unsigned int source : 16;
199 unsigned long offset_low;
201 unsigned long data;
203 unsigned long crc;
205 } write_quadlet;
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;
214 unsigned int offset_high : 16;
215 unsigned int source : 16;
217 unsigned int offset_low : 32;
219 unsigned int extended_tcode : 16;
220 unsigned int data_length : 16;
222 unsigned long crc;
223 unsigned long data[0];
225 /* crc and ack follows. */
227 } write_block;
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;
236 unsigned int reserved0 : 12;
237 unsigned int rcode : 4;
238 unsigned int source : 16;
240 unsigned long reserved1;
242 unsigned long crc;
243 } write_response;
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;
252 unsigned int offset_high : 16;
253 unsigned int source : 16;
255 unsigned long offset_low;
257 unsigned long data;
259 unsigned long crc;
260 } cycle_start;
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;
269 unsigned long crc;
270 } iso_data;
276 struct subaction {
277 unsigned long ack;
278 size_t length;
279 struct list link;
280 struct link_packet packet;
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;
290 int decode_fcp(struct link_transaction *t);
292 #endif /* __nosy_dump_h__ */