import of ftp.dlink.com/GPL/DSMG-600_reB/ppclinux.tar.gz
[linux-2.4.21-pre4.git] / drivers / ieee1394 / ieee1394.h
1 /*
2  * Generic IEEE 1394 definitions
3  */
4
5 #ifndef _IEEE1394_IEEE1394_H
6 #define _IEEE1394_IEEE1394_H
7
8 #define TCODE_WRITEQ             0x0
9 #define TCODE_WRITEB             0x1
10 #define TCODE_WRITE_RESPONSE     0x2
11 #define TCODE_READQ              0x4
12 #define TCODE_READB              0x5
13 #define TCODE_READQ_RESPONSE     0x6
14 #define TCODE_READB_RESPONSE     0x7
15 #define TCODE_CYCLE_START        0x8
16 #define TCODE_LOCK_REQUEST       0x9
17 #define TCODE_ISO_DATA           0xa
18 #define TCODE_LOCK_RESPONSE      0xb
19
20 #define RCODE_COMPLETE           0x0
21 #define RCODE_CONFLICT_ERROR     0x4
22 #define RCODE_DATA_ERROR         0x5
23 #define RCODE_TYPE_ERROR         0x6
24 #define RCODE_ADDRESS_ERROR      0x7
25
26 #define EXTCODE_MASK_SWAP        0x1
27 #define EXTCODE_COMPARE_SWAP     0x2
28 #define EXTCODE_FETCH_ADD        0x3
29 #define EXTCODE_LITTLE_ADD       0x4
30 #define EXTCODE_BOUNDED_ADD      0x5
31 #define EXTCODE_WRAP_ADD         0x6
32
33 #define ACK_COMPLETE             0x1
34 #define ACK_PENDING              0x2
35 #define ACK_BUSY_X               0x4
36 #define ACK_BUSY_A               0x5
37 #define ACK_BUSY_B               0x6
38 #define ACK_DATA_ERROR           0xd
39 #define ACK_TYPE_ERROR           0xe 
40
41 /* Non-standard "ACK codes" for internal use */
42 #define ACKX_NONE                (-1)
43 #define ACKX_SEND_ERROR          (-2)
44 #define ACKX_ABORTED             (-3)
45 #define ACKX_TIMEOUT             (-4)
46
47
48 #define SPEED_100                0x0
49 #define SPEED_200                0x1
50 #define SPEED_400                0x2
51
52 /* Maps speed values above to a string representation */
53 extern const char *hpsb_speedto_str[];
54
55 #define SELFID_PWRCL_NO_POWER    0x0
56 #define SELFID_PWRCL_PROVIDE_15W 0x1
57 #define SELFID_PWRCL_PROVIDE_30W 0x2
58 #define SELFID_PWRCL_PROVIDE_45W 0x3
59 #define SELFID_PWRCL_USE_1W      0x4
60 #define SELFID_PWRCL_USE_3W      0x5
61 #define SELFID_PWRCL_USE_6W      0x6
62 #define SELFID_PWRCL_USE_10W     0x7
63
64 #define SELFID_PORT_CHILD        0x3
65 #define SELFID_PORT_PARENT       0x2
66 #define SELFID_PORT_NCONN        0x1
67 #define SELFID_PORT_NONE         0x0   
68
69
70 #include <asm/byteorder.h>
71
72 #ifdef __BIG_ENDIAN_BITFIELD
73
74 struct selfid {
75         u32 packet_identifier:2; /* always binary 10 */
76         u32 phy_id:6;
77         /* byte */
78         u32 extended:1; /* if true is struct ext_selfid */
79         u32 link_active:1;
80         u32 gap_count:6;
81         /* byte */
82         u32 speed:2;
83         u32 phy_delay:2;
84         u32 contender:1;
85         u32 power_class:3;
86         /* byte */
87         u32 port0:2;
88         u32 port1:2;
89         u32 port2:2;
90         u32 initiated_reset:1;
91         u32 more_packets:1;
92 } __attribute__((packed));
93
94 struct ext_selfid {
95         u32 packet_identifier:2; /* always binary 10 */
96         u32 phy_id:6;
97         /* byte */
98         u32 extended:1; /* if false is struct selfid */
99         u32 seq_nr:3;
100         u32 reserved:2;
101         u32 porta:2;
102         /* byte */
103         u32 portb:2;
104         u32 portc:2;
105         u32 portd:2;
106         u32 porte:2;
107         /* byte */
108         u32 portf:2;
109         u32 portg:2;
110         u32 porth:2;
111         u32 reserved2:1;
112         u32 more_packets:1;
113 } __attribute__((packed));
114
115 #elif defined __LITTLE_ENDIAN_BITFIELD /* __BIG_ENDIAN_BITFIELD */
116
117 /*
118  * Note: these mean to be bit fields of a big endian SelfID as seen on a little
119  * endian machine.  Without swapping.
120  */
121
122 struct selfid {
123         u32 phy_id:6;
124         u32 packet_identifier:2; /* always binary 10 */
125         /* byte */
126         u32 gap_count:6;
127         u32 link_active:1;
128         u32 extended:1; /* if true is struct ext_selfid */
129         /* byte */
130         u32 power_class:3;
131         u32 contender:1;
132         u32 phy_delay:2;
133         u32 speed:2;
134         /* byte */
135         u32 more_packets:1;
136         u32 initiated_reset:1;
137         u32 port2:2;
138         u32 port1:2;
139         u32 port0:2;
140 } __attribute__((packed));
141
142 struct ext_selfid {
143         u32 phy_id:6;
144         u32 packet_identifier:2; /* always binary 10 */
145         /* byte */
146         u32 porta:2;
147         u32 reserved:2;
148         u32 seq_nr:3;
149         u32 extended:1; /* if false is struct selfid */
150         /* byte */
151         u32 porte:2;
152         u32 portd:2;
153         u32 portc:2;
154         u32 portb:2;
155         /* byte */
156         u32 more_packets:1;
157         u32 reserved2:1;
158         u32 porth:2;
159         u32 portg:2;
160         u32 portf:2;
161 } __attribute__((packed));
162
163 #else
164 #error What? PDP endian?
165 #endif /* __BIG_ENDIAN_BITFIELD */
166
167
168 #endif /* _IEEE1394_IEEE1394_H */