Root/tools/firewire/nosy-dump.h

1#ifndef __nosy_dump_h__
2#define __nosy_dump_h__
3
4#define array_length(array) (sizeof(array) / sizeof(array[0]))
5
6#define ACK_NO_ACK 0x0
7#define ACK_DONE(a) ((a >> 2) == 0)
8#define ACK_BUSY(a) ((a >> 2) == 1)
9#define ACK_ERROR(a) ((a >> 2) == 3)
10
11#include <stdint.h>
12
13struct phy_packet {
14    uint32_t timestamp;
15    union {
16        struct {
17            uint32_t zero:24;
18            uint32_t phy_id:6;
19            uint32_t identifier:2;
20        } common, link_on;
21
22        struct {
23            uint32_t zero:16;
24            uint32_t gap_count:6;
25            uint32_t set_gap_count:1;
26            uint32_t set_root:1;
27            uint32_t root_id:6;
28            uint32_t identifier:2;
29        } phy_config;
30
31        struct {
32            uint32_t more_packets:1;
33            uint32_t initiated_reset:1;
34            uint32_t port2:2;
35            uint32_t port1:2;
36            uint32_t port0:2;
37            uint32_t power_class:3;
38            uint32_t contender:1;
39            uint32_t phy_delay:2;
40            uint32_t phy_speed:2;
41            uint32_t gap_count:6;
42            uint32_t link_active:1;
43            uint32_t extended:1;
44            uint32_t phy_id:6;
45            uint32_t identifier:2;
46        } self_id;
47
48        struct {
49            uint32_t more_packets:1;
50            uint32_t reserved1:1;
51            uint32_t porth:2;
52            uint32_t portg:2;
53            uint32_t portf:2;
54            uint32_t porte:2;
55            uint32_t portd:2;
56            uint32_t portc:2;
57            uint32_t portb:2;
58            uint32_t porta:2;
59            uint32_t reserved0:2;
60            uint32_t sequence:3;
61            uint32_t extended:1;
62            uint32_t phy_id:6;
63            uint32_t identifier:2;
64        } ext_self_id;
65    };
66    uint32_t inverted;
67    uint32_t ack;
68};
69
70#define TCODE_PHY_PACKET 0x10
71
72#define PHY_PACKET_CONFIGURATION 0x00
73#define PHY_PACKET_LINK_ON 0x01
74#define PHY_PACKET_SELF_ID 0x02
75
76struct link_packet {
77    uint32_t timestamp;
78    union {
79        struct {
80            uint32_t priority:4;
81            uint32_t tcode:4;
82            uint32_t rt:2;
83            uint32_t tlabel:6;
84            uint32_t destination:16;
85
86            uint32_t offset_high:16;
87            uint32_t source:16;
88
89            uint32_t offset_low;
90        } common;
91
92        struct {
93            uint32_t common[3];
94            uint32_t crc;
95        } read_quadlet;
96
97        struct {
98            uint32_t common[3];
99            uint32_t data;
100            uint32_t crc;
101        } read_quadlet_response;
102
103        struct {
104            uint32_t common[3];
105            uint32_t extended_tcode:16;
106            uint32_t data_length:16;
107            uint32_t crc;
108        } read_block;
109
110        struct {
111            uint32_t common[3];
112            uint32_t extended_tcode:16;
113            uint32_t data_length:16;
114            uint32_t crc;
115            uint32_t data[0];
116            /* crc and ack follows. */
117        } read_block_response;
118
119        struct {
120            uint32_t common[3];
121            uint32_t data;
122            uint32_t crc;
123        } write_quadlet;
124
125        struct {
126            uint32_t common[3];
127            uint32_t extended_tcode:16;
128            uint32_t data_length:16;
129            uint32_t crc;
130            uint32_t data[0];
131            /* crc and ack follows. */
132        } write_block;
133
134        struct {
135            uint32_t common[3];
136            uint32_t crc;
137        } write_response;
138
139        struct {
140            uint32_t common[3];
141            uint32_t data;
142            uint32_t crc;
143        } cycle_start;
144
145        struct {
146            uint32_t sy:4;
147            uint32_t tcode:4;
148            uint32_t channel:6;
149            uint32_t tag:2;
150            uint32_t data_length:16;
151
152            uint32_t crc;
153        } iso_data;
154    };
155};
156
157struct subaction {
158    uint32_t ack;
159    size_t length;
160    struct list link;
161    struct link_packet packet;
162};
163
164struct link_transaction {
165    int request_node, response_node, tlabel;
166    struct subaction *request, *response;
167    struct list request_list, response_list;
168    struct list link;
169};
170
171int decode_fcp(struct link_transaction *t);
172
173#endif /* __nosy_dump_h__ */
174

Archive Download this file



interactive