1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
|
/* $OpenBSD: ieee1394reg.h,v 1.4 2003/01/12 12:01:33 tdeval Exp $ */
/* $NetBSD: ieee1394reg.h,v 1.12 2002/02/27 05:07:25 jmc Exp $ */
/*
* Copyright (c) 2000 The NetBSD Foundation, Inc.
* All rights reserved.
*
* This code is derived from software contributed to The NetBSD Foundation
* by
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software developed by the NetBSD
* Foundation, Inc. and its contributors.
* 4. Neither the name of The NetBSD Foundation nor the names of its
* contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef _DEV_IEEE1394_IEEE1394REG_H_
#define _DEV_IEEE1394_IEEE1394REG_H_
#include <dev/std/ieee1212reg.h>
/*
* Transaction Codes (Table 6-9)
*/
#define IEEE1394_TCODE_WRITE_REQUEST_QUADLET 0
#define IEEE1394_TCODE_WRITE_REQUEST_DATABLOCK 1
#define IEEE1394_TCODE_WRITE_RESPONSE 2
#define IEEE1394_TCODE_RESERVED_3 3
#define IEEE1394_TCODE_READ_REQUEST_QUADLET 4
#define IEEE1394_TCODE_READ_REQUEST_DATABLOCK 5
#define IEEE1394_TCODE_READ_RESPONSE_QUADLET 6
#define IEEE1394_TCODE_READ_RESPONSE_DATABLOCK 7
#define IEEE1394_TCODE_CYCLE_START 8
#define IEEE1394_TCODE_LOCK_REQUEST 9
#define IEEE1394_TCODE_ISOCHRONOUS_DATABLOCK 10
#define IEEE1394_TCODE_LOCK_RESPONSE 11
#define IEEE1394_TCODE_RESERVED_12 12
#define IEEE1394_TCODE_RESERVED_13 13
#define IEEE1394_TCODE_RESERVED_14 14
#define IEEE1394_TCODE_RESERVED_15 15
/*
* Extended transaction codes (Table 6-10)
*/
#define IEEE1394_XTCODE_RESERVED_0 P1212_LOCK_RESERVED_0
#define IEEE1394_XTCODE_MASK_SWAP P1212_LOCK_MASK_SWAP
#define IEEE1394_XTCODE_COMPARE_SWAP P1212_LOCK_COMPARE_SWAP
#define IEEE1394_XTCODE_FETCH_ADD P1212_LOCK_FETCH_ADD
#define IEEE1394_XTCODE_LITTLE_ADD P1212_LOCK_LITTLE_ADD
#define IEEE1394_XTCODE_BOUNDED_ADD P1212_LOCK_BOUNDED_ADD
#define IEEE1394_XTCODE_WRAP_ADD P1212_LOCK_WRAP_ADD
#define IEEE1394_XTCODE_VENDOR_DEPENDENT P1212_LOCK_VENDOR_DEPENDENT
/*
* 0x0008 .. 0xFFFF are reserved.
*/
/*
* Response codes (Table 6-11)
*/
#define IEEE1394_RCODE_COMPLETE 0
#define IEEE1394_RCODE_RESERVED_1 1
#define IEEE1394_RCODE_RESERVED_2 2
#define IEEE1394_RCODE_RESERVED_3 3
#define IEEE1394_RCODE_CONFLICT_ERROR 4
#define IEEE1394_RCODE_DATA_ERROR 5
#define IEEE1394_RCODE_TYPE_ERROR 6
#define IEEE1394_RCODE_ADDRESS_ERROR 7
#define IEEE1394_RCODE_RESERVED_8 8
#define IEEE1394_RCODE_RESERVED_9 9
#define IEEE1394_RCODE_RESERVED_10 10
#define IEEE1394_RCODE_RESERVED_11 11
#define IEEE1394_RCODE_RESERVED_12 12
#define IEEE1394_RCODE_RESERVED_13 13
#define IEEE1394_RCODE_RESERVED_14 14
#define IEEE1394_RCODE_RESERVED_15 15
#define IEEE1394_TAG_UNFORMATTED 0
#define IEEE1394_TAG_RESERVED_1 1
#define IEEE1394_TAG_RESERVED_2 2
#define IEEE1394_TAG_RESERVED_3 3
#define IEEE1394_ACK_RESERVED_0 0
#define IEEE1394_ACK_COMPLETE 1
#define IEEE1394_ACK_PENDING 2
#define IEEE1394_ACK_RESERVED_3 3
#define IEEE1394_ACK_BUSY_X 4
#define IEEE1394_ACK_BUSY_A 5
#define IEEE1394_ACK_BUSY_B 6
#define IEEE1394_ACK_RESERVED_7 7
#define IEEE1394_ACK_RESERVED_8 8
#define IEEE1394_ACK_RESERVED_9 9
#define IEEE1394_ACK_RESERVED_10 10
#define IEEE1394_ACK_RESERVED_11 11
#define IEEE1394_ACK_RESERVED_12 12
#define IEEE1394_ACK_DATA_ERROR 13
#define IEEE1394_ACK_TYPE_ERROR 14
#define IEEE1394_ACK_RESERVED_15 15
/*
* PHY packet types.
*/
#define IEEE1394_PHY_TYPE_MASK 0xC0000000
#define IEEE1394_PHY_TYPE_BITPOS 30
#define IEEE1394_PHY_SELF_ID 0x80000000
#define IEEE1394_PHY_LINK_ON 0x40000000
#define IEEE1394_PHY_CONFIG 0x00000000
#define IEEE1394_PHY_ID_MASK 0x3F000000
#define IEEE1394_PHY_ID_BITPOS 24
/*
* Link-On PHY Packet Fields.
*/
/* There is no other field than the PHY_ID. */
/*
* Configuration PHY Packet Fields.
*/
#define IEEE1394_CONFIG_FORCE_ROOT 0x00800000
#define IEEE1394_CONFIG_SET_GAPCNT 0x00400000
#define IEEE1394_CONFIG_GAPCNT_MASK 0x003F0000
#define IEEE1394_CONFIG_GAPCNT_BITPOS 16
/*
* Self-ID PHY Packet Fields.
*/
#define IEEE1394_SELFID_EXTENDED 0x00800000
#define IEEE1394_SELFID_LINK_ACTIVE 0x00400000
#define IEEE1394_SELFID_CONTENDER 0x00000800
#define IEEE1394_SELFID_INITIATED_RESET 0x00000002
#define IEEE1394_SELFID_MORE_PACKETS 0x00000001
#define IEEE1394_SELFID_GAPCNT_MASK 0x003F0000
#define IEEE1394_SELFID_GAPCNT_BITPOS 16
#define IEEE1394_SELFID_SPEED_MASK 0x0000C000
#define IEEE1394_SELFID_SPEED_BITPOS 14
#define IEEE1394_SELFID_DELAY_MASK 0x00003000
#define IEEE1394_SELFID_DELAY_BITPOS 12
#define IEEE1394_SELFID_POWER_MASK 0x00000700
#define IEEE1394_SELFID_POWER_BITPOS 8
#define IEEE1394_SELFID_EXT_SEQ_MASK 0x00700000
#define IEEE1394_SELFID_EXT_SEQ_BITPOS 20
/*
* Node's port status.
*/
#define IEEE1394_SELFID_PORT_STATUS(packet,port) \
(((packet) >> (16 - 2 * (port))) & 0x3)
#define IEEE1394_PORT_NOT_PRESENT 0
#define IEEE1394_PORT_NOT_CONNECTED 1
#define IEEE1394_PORT_CONNECT_PARENT 2
#define IEEE1394_PORT_CONNECT_CHILD 3
/*
* Defined IEEE 1394 power classes.
*/
#define IEEE1394_POW_NONE 0 /* No power feature. */
#define IEEE1394_POW_SELF_15W 1 /* Provides 15W. */
#define IEEE1394_POW_SELF_30W 2 /* Provides 30W. */
#define IEEE1394_POW_SELF_45W 3 /* Provides 45W. */
#define IEEE1394_POW_USES_1W 4 /* Uses up to 1W. */
#define IEEE1394_POW_USES_2W 5 /* Uses up to 2W. */
#define IEEE1394_POW_USES_5W 6 /* Uses up to 5W. */
#define IEEE1394_POW_USES_9W 7 /* Uses up to 9W. */
#define IEEE1394_POW_STRINGS "None", "15W_Src", "30W_Src", \
"45W_Src", "1W_Sink", "2W_Sink", \
"5W_Sink", "9W_Sink"
/*
* Defined IEEE 1394 speeds.
*/
#define IEEE1394_SPD_S100 0 /* 1394-1995 */
#define IEEE1394_SPD_S200 1 /* 1394-1995 */
#define IEEE1394_SPD_S400 2 /* 1394-1995 */
#define IEEE1394_SPD_S800 3 /* 1394b */
#define IEEE1394_SPD_S1600 4 /* 1394b */
#define IEEE1394_SPD_S3200 5 /* 1394b */
#define IEEE1394_SPD_MAX 6
#define IEEE1394_SPD_STRINGS "100Mb/s", "200Mb/s", "400Mb/s", "800Mb/s", \
"1.6Gb/s", "3.2Gb/s"
#if 0
typedef struct ieee1394_async_nodata {
u_int32_t an_header_crc;
} ieee1394_async_nodata __attribute((__packed__));
#endif
#define IEEE1394_BCAST_PHY_ID 0x3f
#define IEEE1394_ISOCH_MASK 0x3f
/*
* Signature
*/
#define IEEE1394_SIGNATURE 0x31333934
/*
* Tag value
*/
#define IEEE1394_TAG_GASP 0x3
/*
* Control and Status Registers (IEEE1212 & IEEE1394)
*/
#define CSR_BASE_HI 0x0000ffff
#define CSR_BASE_LO 0xf0000000
#define CSR_BASE 0x0000fffff0000000UL
#define CSR_STATE_CLEAR 0x0000
#define CSR_STATE_SET 0x0004
#define CSR_NODE_IDS 0x0008
#define CSR_RESET_START 0x000c
#define CSR_INDIRECT_ADDRESS 0x0010
#define CSR_INDIRECT_DATA 0x0014
#define CSR_SPLIT_TIMEOUT_HI 0x0018
#define CSR_SPLIT_TIMEOUT_LO 0x001c
#define CSR_ARGUMENT_HI 0x0020
#define CSR_ARGUMENT_LO 0x0024
#define CSR_TEST_START 0x0028
#define CSR_TEST_STATUS 0x002c
#define CSR_INTERRUPT_TARGET 0x0050
#define CSR_INTERRUPT_MASK 0x0054
#define CSR_CLOCK_VALUE 0x0058
#define CSR_CLOCK_PERIOD 0x005c
#define CSR_CLOCK_STROBE_ARRIVED 0x0060
#define CSR_CLOCK_INFO 0x0064
#define CSR_MESSAGE_REQUEST 0x0080
#define CSR_MESSAGE_RESPONSE 0x00c0
#define CSR_SB_CYCLE_TIME 0x0200
#define CSR_SB_BUS_TIME 0x0204
#define CSR_SB_POWER_FAIL_IMMINENT 0x0208
#define CSR_SB_POWER_SOURCE 0x020c
#define CSR_SB_BUSY_TIMEOUT 0x0210
#define CSR_SB_PRIORITY_BUDGET_HI 0x0214
#define CSR_SB_PRIORITY_BUDGET_LO 0x0218
#define CSR_SB_BUS_MANAGER_ID 0x021c
#define CSR_SB_BANDWIDTH_AVAILABLE 0x0220
#define CSR_SB_CHANNEL_AVAILABLE_HI 0x0224
#define CSR_SB_CHANNEL_AVAILABLE_LO 0x0228
#define CSR_SB_MAINT_CONTROL 0x022c
#define CSR_SB_MAINT_UTILITY 0x0230
#define CSR_SB_BROADCAST_CHANNEL 0x0234
#define CSR_CONFIG_ROM 0x0400
#define CSR_SB_OUTPUT_MASTER_PLUG 0x0900
#define CSR_SB_OUTPUT_PLUG 0x0904
#define CSR_SB_INPUT_MASTER_PLUG 0x0980
#define CSR_SB_INPUT_PLUG 0x0984
#define CSR_SB_FCP_COMMAND_FRAME 0x0b00
#define CSR_SB_FCP_RESPONSE_FRAME 0x0d00
#define CSR_SB_TOPOLOGY_MAP 0x1000
#define CSR_SB_END 0x1400
#define IEEE1394_MAX_REC(i) (0x1 << ((i) + 1))
#define IEEE1394_MAX_ASYNC(i) (0x200 << (i))
#define IEEE1394_BUSINFO_LEN 3
#define IEEE1394_GET_MAX_REC(i) (((i) & 0x0000f000) >> 12)
#define IEEE1394_GET_LINK_SPD(i) ((i) & 0x00000007)
/*
* XXX. Should be at if_fw level but needed here for constructing the config
* rom. An interface for if_fw to send up a config rom should be done (probably
* in the p1212 routines.
*/
#define FW_FIFO_HI 0x2000
#define FW_FIFO_LO 0x00000000
#endif /* _DEV_IEEE1394_IEEE1394REG_H_ */
|