1 |
1276 |
phoenix |
/* $Id: xbow.h,v 1.1.1.1 2004-04-15 02:58:10 phoenix Exp $
|
2 |
|
|
*
|
3 |
|
|
* This file is subject to the terms and conditions of the GNU General Public
|
4 |
|
|
* License. See the file "COPYING" in the main directory of this archive
|
5 |
|
|
* for more details.
|
6 |
|
|
*
|
7 |
|
|
* Copyright (C) 1992-1997,2000-2003 Silicon Graphics, Inc. All Rights Reserved.
|
8 |
|
|
*/
|
9 |
|
|
#ifndef _ASM_SN_SN_XTALK_XBOW_H
|
10 |
|
|
#define _ASM_SN_SN_XTALK_XBOW_H
|
11 |
|
|
|
12 |
|
|
/*
|
13 |
|
|
* xbow.h - header file for crossbow chip and xbow section of xbridge
|
14 |
|
|
*/
|
15 |
|
|
|
16 |
|
|
#include <linux/config.h>
|
17 |
|
|
#include <asm/sn/xtalk/xtalk.h>
|
18 |
|
|
#include <asm/sn/xtalk/xwidget.h>
|
19 |
|
|
#include <asm/sn/xtalk/xswitch.h>
|
20 |
|
|
#ifndef __ASSEMBLY__
|
21 |
|
|
#include <asm/sn/xtalk/xbow_info.h>
|
22 |
|
|
#endif
|
23 |
|
|
|
24 |
|
|
|
25 |
|
|
#define XBOW_DRV_PREFIX "xbow_"
|
26 |
|
|
|
27 |
|
|
/* The crossbow chip supports 8 8/16 bits I/O ports, numbered 0x8 through 0xf.
|
28 |
|
|
* It also implements the widget 0 address space and register set.
|
29 |
|
|
*/
|
30 |
|
|
#define XBOW_PORT_0 0x0
|
31 |
|
|
#define XBOW_PORT_8 0x8
|
32 |
|
|
#define XBOW_PORT_9 0x9
|
33 |
|
|
#define XBOW_PORT_A 0xa
|
34 |
|
|
#define XBOW_PORT_B 0xb
|
35 |
|
|
#define XBOW_PORT_C 0xc
|
36 |
|
|
#define XBOW_PORT_D 0xd
|
37 |
|
|
#define XBOW_PORT_E 0xe
|
38 |
|
|
#define XBOW_PORT_F 0xf
|
39 |
|
|
|
40 |
|
|
#define MAX_XBOW_PORTS 8 /* number of ports on xbow chip */
|
41 |
|
|
#define BASE_XBOW_PORT XBOW_PORT_8 /* Lowest external port */
|
42 |
|
|
#define MAX_PORT_NUM 0x10 /* maximum port number + 1 */
|
43 |
|
|
#define XBOW_WIDGET_ID 0 /* xbow is itself widget 0 */
|
44 |
|
|
|
45 |
|
|
#define XBOW_HUBLINK_LOW 0xa
|
46 |
|
|
#define XBOW_HUBLINK_HIGH 0xb
|
47 |
|
|
|
48 |
|
|
#define XBOW_PEER_LINK(link) (link == XBOW_HUBLINK_LOW) ? \
|
49 |
|
|
XBOW_HUBLINK_HIGH : XBOW_HUBLINK_LOW
|
50 |
|
|
|
51 |
|
|
|
52 |
|
|
#define XBOW_CREDIT 4
|
53 |
|
|
|
54 |
|
|
#define MAX_XBOW_NAME 16
|
55 |
|
|
|
56 |
|
|
#ifndef __ASSEMBLY__
|
57 |
|
|
typedef uint32_t xbowreg_t;
|
58 |
|
|
|
59 |
|
|
#define XBOWCONST (xbowreg_t)
|
60 |
|
|
|
61 |
|
|
/* Generic xbow register, given base and offset */
|
62 |
|
|
#define XBOW_REG_PTR(base, offset) ((volatile xbowreg_t*) \
|
63 |
|
|
((__psunsigned_t)(base) + (__psunsigned_t)(offset)))
|
64 |
|
|
|
65 |
|
|
/* Register set for each xbow link */
|
66 |
|
|
typedef volatile struct xb_linkregs_s {
|
67 |
|
|
#ifdef LITTLE_ENDIAN
|
68 |
|
|
/*
|
69 |
|
|
* we access these through synergy unswizzled space, so the address
|
70 |
|
|
* gets twiddled (i.e. references to 0x4 actually go to 0x0 and vv.)
|
71 |
|
|
* That's why we put the register first and filler second.
|
72 |
|
|
*/
|
73 |
|
|
xbowreg_t link_ibf;
|
74 |
|
|
xbowreg_t filler0; /* filler for proper alignment */
|
75 |
|
|
xbowreg_t link_control;
|
76 |
|
|
xbowreg_t filler1;
|
77 |
|
|
xbowreg_t link_status;
|
78 |
|
|
xbowreg_t filler2;
|
79 |
|
|
xbowreg_t link_arb_upper;
|
80 |
|
|
xbowreg_t filler3;
|
81 |
|
|
xbowreg_t link_arb_lower;
|
82 |
|
|
xbowreg_t filler4;
|
83 |
|
|
xbowreg_t link_status_clr;
|
84 |
|
|
xbowreg_t filler5;
|
85 |
|
|
xbowreg_t link_reset;
|
86 |
|
|
xbowreg_t filler6;
|
87 |
|
|
xbowreg_t link_aux_status;
|
88 |
|
|
xbowreg_t filler7;
|
89 |
|
|
#else
|
90 |
|
|
xbowreg_t filler0; /* filler for proper alignment */
|
91 |
|
|
xbowreg_t link_ibf;
|
92 |
|
|
xbowreg_t filler1;
|
93 |
|
|
xbowreg_t link_control;
|
94 |
|
|
xbowreg_t filler2;
|
95 |
|
|
xbowreg_t link_status;
|
96 |
|
|
xbowreg_t filler3;
|
97 |
|
|
xbowreg_t link_arb_upper;
|
98 |
|
|
xbowreg_t filler4;
|
99 |
|
|
xbowreg_t link_arb_lower;
|
100 |
|
|
xbowreg_t filler5;
|
101 |
|
|
xbowreg_t link_status_clr;
|
102 |
|
|
xbowreg_t filler6;
|
103 |
|
|
xbowreg_t link_reset;
|
104 |
|
|
xbowreg_t filler7;
|
105 |
|
|
xbowreg_t link_aux_status;
|
106 |
|
|
#endif /* LITTLE_ENDIAN */
|
107 |
|
|
} xb_linkregs_t;
|
108 |
|
|
|
109 |
|
|
typedef volatile struct xbow_s {
|
110 |
|
|
/* standard widget configuration 0x000000-0x000057 */
|
111 |
|
|
widget_cfg_t xb_widget; /* 0x000000 */
|
112 |
|
|
|
113 |
|
|
/* helper fieldnames for accessing bridge widget */
|
114 |
|
|
|
115 |
|
|
#define xb_wid_id xb_widget.w_id
|
116 |
|
|
#define xb_wid_stat xb_widget.w_status
|
117 |
|
|
#define xb_wid_err_upper xb_widget.w_err_upper_addr
|
118 |
|
|
#define xb_wid_err_lower xb_widget.w_err_lower_addr
|
119 |
|
|
#define xb_wid_control xb_widget.w_control
|
120 |
|
|
#define xb_wid_req_timeout xb_widget.w_req_timeout
|
121 |
|
|
#define xb_wid_int_upper xb_widget.w_intdest_upper_addr
|
122 |
|
|
#define xb_wid_int_lower xb_widget.w_intdest_lower_addr
|
123 |
|
|
#define xb_wid_err_cmdword xb_widget.w_err_cmd_word
|
124 |
|
|
#define xb_wid_llp xb_widget.w_llp_cfg
|
125 |
|
|
#define xb_wid_stat_clr xb_widget.w_tflush
|
126 |
|
|
|
127 |
|
|
#ifdef LITTLE_ENDIAN
|
128 |
|
|
/*
|
129 |
|
|
* we access these through synergy unswizzled space, so the address
|
130 |
|
|
* gets twiddled (i.e. references to 0x4 actually go to 0x0 and vv.)
|
131 |
|
|
* That's why we put the register first and filler second.
|
132 |
|
|
*/
|
133 |
|
|
/* xbow-specific widget configuration 0x000058-0x0000FF */
|
134 |
|
|
xbowreg_t xb_wid_arb_reload; /* 0x00005C */
|
135 |
|
|
xbowreg_t _pad_000058;
|
136 |
|
|
xbowreg_t xb_perf_ctr_a; /* 0x000064 */
|
137 |
|
|
xbowreg_t _pad_000060;
|
138 |
|
|
xbowreg_t xb_perf_ctr_b; /* 0x00006c */
|
139 |
|
|
xbowreg_t _pad_000068;
|
140 |
|
|
xbowreg_t xb_nic; /* 0x000074 */
|
141 |
|
|
xbowreg_t _pad_000070;
|
142 |
|
|
|
143 |
|
|
/* Xbridge only */
|
144 |
|
|
xbowreg_t xb_w0_rst_fnc; /* 0x00007C */
|
145 |
|
|
xbowreg_t _pad_000078;
|
146 |
|
|
xbowreg_t xb_l8_rst_fnc; /* 0x000084 */
|
147 |
|
|
xbowreg_t _pad_000080;
|
148 |
|
|
xbowreg_t xb_l9_rst_fnc; /* 0x00008c */
|
149 |
|
|
xbowreg_t _pad_000088;
|
150 |
|
|
xbowreg_t xb_la_rst_fnc; /* 0x000094 */
|
151 |
|
|
xbowreg_t _pad_000090;
|
152 |
|
|
xbowreg_t xb_lb_rst_fnc; /* 0x00009c */
|
153 |
|
|
xbowreg_t _pad_000098;
|
154 |
|
|
xbowreg_t xb_lc_rst_fnc; /* 0x0000a4 */
|
155 |
|
|
xbowreg_t _pad_0000a0;
|
156 |
|
|
xbowreg_t xb_ld_rst_fnc; /* 0x0000ac */
|
157 |
|
|
xbowreg_t _pad_0000a8;
|
158 |
|
|
xbowreg_t xb_le_rst_fnc; /* 0x0000b4 */
|
159 |
|
|
xbowreg_t _pad_0000b0;
|
160 |
|
|
xbowreg_t xb_lf_rst_fnc; /* 0x0000bc */
|
161 |
|
|
xbowreg_t _pad_0000b8;
|
162 |
|
|
xbowreg_t xb_lock; /* 0x0000c4 */
|
163 |
|
|
xbowreg_t _pad_0000c0;
|
164 |
|
|
xbowreg_t xb_lock_clr; /* 0x0000cc */
|
165 |
|
|
xbowreg_t _pad_0000c8;
|
166 |
|
|
/* end of Xbridge only */
|
167 |
|
|
xbowreg_t _pad_0000d0[12];
|
168 |
|
|
#else
|
169 |
|
|
/* xbow-specific widget configuration 0x000058-0x0000FF */
|
170 |
|
|
xbowreg_t _pad_000058;
|
171 |
|
|
xbowreg_t xb_wid_arb_reload; /* 0x00005C */
|
172 |
|
|
xbowreg_t _pad_000060;
|
173 |
|
|
xbowreg_t xb_perf_ctr_a; /* 0x000064 */
|
174 |
|
|
xbowreg_t _pad_000068;
|
175 |
|
|
xbowreg_t xb_perf_ctr_b; /* 0x00006c */
|
176 |
|
|
xbowreg_t _pad_000070;
|
177 |
|
|
xbowreg_t xb_nic; /* 0x000074 */
|
178 |
|
|
|
179 |
|
|
/* Xbridge only */
|
180 |
|
|
xbowreg_t _pad_000078;
|
181 |
|
|
xbowreg_t xb_w0_rst_fnc; /* 0x00007C */
|
182 |
|
|
xbowreg_t _pad_000080;
|
183 |
|
|
xbowreg_t xb_l8_rst_fnc; /* 0x000084 */
|
184 |
|
|
xbowreg_t _pad_000088;
|
185 |
|
|
xbowreg_t xb_l9_rst_fnc; /* 0x00008c */
|
186 |
|
|
xbowreg_t _pad_000090;
|
187 |
|
|
xbowreg_t xb_la_rst_fnc; /* 0x000094 */
|
188 |
|
|
xbowreg_t _pad_000098;
|
189 |
|
|
xbowreg_t xb_lb_rst_fnc; /* 0x00009c */
|
190 |
|
|
xbowreg_t _pad_0000a0;
|
191 |
|
|
xbowreg_t xb_lc_rst_fnc; /* 0x0000a4 */
|
192 |
|
|
xbowreg_t _pad_0000a8;
|
193 |
|
|
xbowreg_t xb_ld_rst_fnc; /* 0x0000ac */
|
194 |
|
|
xbowreg_t _pad_0000b0;
|
195 |
|
|
xbowreg_t xb_le_rst_fnc; /* 0x0000b4 */
|
196 |
|
|
xbowreg_t _pad_0000b8;
|
197 |
|
|
xbowreg_t xb_lf_rst_fnc; /* 0x0000bc */
|
198 |
|
|
xbowreg_t _pad_0000c0;
|
199 |
|
|
xbowreg_t xb_lock; /* 0x0000c4 */
|
200 |
|
|
xbowreg_t _pad_0000c8;
|
201 |
|
|
xbowreg_t xb_lock_clr; /* 0x0000cc */
|
202 |
|
|
/* end of Xbridge only */
|
203 |
|
|
xbowreg_t _pad_0000d0[12];
|
204 |
|
|
#endif /* LITTLE_ENDIAN */
|
205 |
|
|
|
206 |
|
|
/* Link Specific Registers, port 8..15 0x000100-0x000300 */
|
207 |
|
|
xb_linkregs_t xb_link_raw[MAX_XBOW_PORTS];
|
208 |
|
|
#define xb_link(p) xb_link_raw[(p) & (MAX_XBOW_PORTS - 1)]
|
209 |
|
|
|
210 |
|
|
} xbow_t;
|
211 |
|
|
|
212 |
|
|
/* Configuration structure which describes each xbow link */
|
213 |
|
|
typedef struct xbow_cfg_s {
|
214 |
|
|
int xb_port; /* port number (0-15) */
|
215 |
|
|
int xb_flags; /* port software flags */
|
216 |
|
|
short xb_shift; /* shift for arb reg (mask is 0xff) */
|
217 |
|
|
short xb_ul; /* upper or lower arb reg */
|
218 |
|
|
int xb_pad; /* use this later (pad to ptr align) */
|
219 |
|
|
xb_linkregs_t *xb_linkregs; /* pointer to link registers */
|
220 |
|
|
widget_cfg_t *xb_widget; /* pointer to widget registers */
|
221 |
|
|
char xb_name[MAX_XBOW_NAME]; /* port name */
|
222 |
|
|
xbowreg_t xb_sh_arb_upper; /* shadow upper arb register */
|
223 |
|
|
xbowreg_t xb_sh_arb_lower; /* shadow lower arb register */
|
224 |
|
|
} xbow_cfg_t;
|
225 |
|
|
|
226 |
|
|
#define XB_FLAGS_EXISTS 0x1 /* device exists */
|
227 |
|
|
#define XB_FLAGS_MASTER 0x2
|
228 |
|
|
#define XB_FLAGS_SLAVE 0x0
|
229 |
|
|
#define XB_FLAGS_GBR 0x4
|
230 |
|
|
#define XB_FLAGS_16BIT 0x8
|
231 |
|
|
#define XB_FLAGS_8BIT 0x0
|
232 |
|
|
|
233 |
|
|
/* get xbow config information for port p */
|
234 |
|
|
#define XB_CONFIG(p) xbow_cfg[xb_ports[p]]
|
235 |
|
|
|
236 |
|
|
/* is widget port number valid? (based on version 7.0 of xbow spec) */
|
237 |
|
|
#define XBOW_WIDGET_IS_VALID(wid) ((wid) >= XBOW_PORT_8 && (wid) <= XBOW_PORT_F)
|
238 |
|
|
|
239 |
|
|
/* whether to use upper or lower arbitration register, given source widget id */
|
240 |
|
|
#define XBOW_ARB_IS_UPPER(wid) ((wid) >= XBOW_PORT_8 && (wid) <= XBOW_PORT_B)
|
241 |
|
|
#define XBOW_ARB_IS_LOWER(wid) ((wid) >= XBOW_PORT_C && (wid) <= XBOW_PORT_F)
|
242 |
|
|
|
243 |
|
|
/* offset of arbitration register, given source widget id */
|
244 |
|
|
#define XBOW_ARB_OFF(wid) (XBOW_ARB_IS_UPPER(wid) ? 0x1c : 0x24)
|
245 |
|
|
|
246 |
|
|
#endif /* __ASSEMBLY__ */
|
247 |
|
|
|
248 |
|
|
#define XBOW_WID_ID WIDGET_ID
|
249 |
|
|
#define XBOW_WID_STAT WIDGET_STATUS
|
250 |
|
|
#define XBOW_WID_ERR_UPPER WIDGET_ERR_UPPER_ADDR
|
251 |
|
|
#define XBOW_WID_ERR_LOWER WIDGET_ERR_LOWER_ADDR
|
252 |
|
|
#define XBOW_WID_CONTROL WIDGET_CONTROL
|
253 |
|
|
#define XBOW_WID_REQ_TO WIDGET_REQ_TIMEOUT
|
254 |
|
|
#define XBOW_WID_INT_UPPER WIDGET_INTDEST_UPPER_ADDR
|
255 |
|
|
#define XBOW_WID_INT_LOWER WIDGET_INTDEST_LOWER_ADDR
|
256 |
|
|
#define XBOW_WID_ERR_CMDWORD WIDGET_ERR_CMD_WORD
|
257 |
|
|
#define XBOW_WID_LLP WIDGET_LLP_CFG
|
258 |
|
|
#define XBOW_WID_STAT_CLR WIDGET_TFLUSH
|
259 |
|
|
#define XBOW_WID_ARB_RELOAD 0x5c
|
260 |
|
|
#define XBOW_WID_PERF_CTR_A 0x64
|
261 |
|
|
#define XBOW_WID_PERF_CTR_B 0x6c
|
262 |
|
|
#define XBOW_WID_NIC 0x74
|
263 |
|
|
|
264 |
|
|
/* Xbridge only */
|
265 |
|
|
#define XBOW_W0_RST_FNC 0x00007C
|
266 |
|
|
#define XBOW_L8_RST_FNC 0x000084
|
267 |
|
|
#define XBOW_L9_RST_FNC 0x00008c
|
268 |
|
|
#define XBOW_LA_RST_FNC 0x000094
|
269 |
|
|
#define XBOW_LB_RST_FNC 0x00009c
|
270 |
|
|
#define XBOW_LC_RST_FNC 0x0000a4
|
271 |
|
|
#define XBOW_LD_RST_FNC 0x0000ac
|
272 |
|
|
#define XBOW_LE_RST_FNC 0x0000b4
|
273 |
|
|
#define XBOW_LF_RST_FNC 0x0000bc
|
274 |
|
|
#define XBOW_RESET_FENCE(x) ((x) > 7 && (x) < 16) ? \
|
275 |
|
|
(XBOW_W0_RST_FNC + ((x) - 7) * 8) : \
|
276 |
|
|
((x) == 0) ? XBOW_W0_RST_FNC : 0
|
277 |
|
|
#define XBOW_LOCK 0x0000c4
|
278 |
|
|
#define XBOW_LOCK_CLR 0x0000cc
|
279 |
|
|
/* End of Xbridge only */
|
280 |
|
|
|
281 |
|
|
/* used only in ide, but defined here within the reserved portion */
|
282 |
|
|
/* of the widget0 address space (before 0xf4) */
|
283 |
|
|
#define XBOW_WID_UNDEF 0xe4
|
284 |
|
|
|
285 |
|
|
/* pointer to link arbitration register, given xbow base, dst and src widget id */
|
286 |
|
|
#define XBOW_PRIO_ARBREG_PTR(base, dst_wid, src_wid) \
|
287 |
|
|
XBOW_REG_PTR(XBOW_PRIO_LINKREGS_PTR(base, dst_wid), XBOW_ARB_OFF(src_wid))
|
288 |
|
|
|
289 |
|
|
/* pointer to link registers base, given xbow base and destination widget id */
|
290 |
|
|
#define XBOW_PRIO_LINKREGS_PTR(base, dst_wid) (xb_linkregs_t*) \
|
291 |
|
|
XBOW_REG_PTR(base, XB_LINK_REG_BASE(dst_wid))
|
292 |
|
|
|
293 |
|
|
/* xbow link register set base, legal value for x is 0x8..0xf */
|
294 |
|
|
#define XB_LINK_BASE 0x100
|
295 |
|
|
#define XB_LINK_OFFSET 0x40
|
296 |
|
|
#define XB_LINK_REG_BASE(x) (XB_LINK_BASE + ((x) & (MAX_XBOW_PORTS - 1)) * XB_LINK_OFFSET)
|
297 |
|
|
|
298 |
|
|
#define XB_LINK_IBUF_FLUSH(x) (XB_LINK_REG_BASE(x) + 0x4)
|
299 |
|
|
#define XB_LINK_CTRL(x) (XB_LINK_REG_BASE(x) + 0xc)
|
300 |
|
|
#define XB_LINK_STATUS(x) (XB_LINK_REG_BASE(x) + 0x14)
|
301 |
|
|
#define XB_LINK_ARB_UPPER(x) (XB_LINK_REG_BASE(x) + 0x1c)
|
302 |
|
|
#define XB_LINK_ARB_LOWER(x) (XB_LINK_REG_BASE(x) + 0x24)
|
303 |
|
|
#define XB_LINK_STATUS_CLR(x) (XB_LINK_REG_BASE(x) + 0x2c)
|
304 |
|
|
#define XB_LINK_RESET(x) (XB_LINK_REG_BASE(x) + 0x34)
|
305 |
|
|
#define XB_LINK_AUX_STATUS(x) (XB_LINK_REG_BASE(x) + 0x3c)
|
306 |
|
|
|
307 |
|
|
/* link_control(x) */
|
308 |
|
|
#define XB_CTRL_LINKALIVE_IE 0x80000000 /* link comes alive */
|
309 |
|
|
/* reserved: 0x40000000 */
|
310 |
|
|
#define XB_CTRL_PERF_CTR_MODE_MSK 0x30000000 /* perf counter mode */
|
311 |
|
|
#define XB_CTRL_IBUF_LEVEL_MSK 0x0e000000 /* input packet buffer level */
|
312 |
|
|
#define XB_CTRL_8BIT_MODE 0x01000000 /* force link into 8 bit mode */
|
313 |
|
|
#define XB_CTRL_BAD_LLP_PKT 0x00800000 /* force bad LLP packet */
|
314 |
|
|
#define XB_CTRL_WIDGET_CR_MSK 0x007c0000 /* LLP widget credit mask */
|
315 |
|
|
#define XB_CTRL_WIDGET_CR_SHFT 18 /* LLP widget credit shift */
|
316 |
|
|
#define XB_CTRL_ILLEGAL_DST_IE 0x00020000 /* illegal destination */
|
317 |
|
|
#define XB_CTRL_OALLOC_IBUF_IE 0x00010000 /* overallocated input buffer */
|
318 |
|
|
/* reserved: 0x0000fe00 */
|
319 |
|
|
#define XB_CTRL_BNDWDTH_ALLOC_IE 0x00000100 /* bandwidth alloc */
|
320 |
|
|
#define XB_CTRL_RCV_CNT_OFLOW_IE 0x00000080 /* rcv retry overflow */
|
321 |
|
|
#define XB_CTRL_XMT_CNT_OFLOW_IE 0x00000040 /* xmt retry overflow */
|
322 |
|
|
#define XB_CTRL_XMT_MAX_RTRY_IE 0x00000020 /* max transmit retry */
|
323 |
|
|
#define XB_CTRL_RCV_IE 0x00000010 /* receive */
|
324 |
|
|
#define XB_CTRL_XMT_RTRY_IE 0x00000008 /* transmit retry */
|
325 |
|
|
/* reserved: 0x00000004 */
|
326 |
|
|
#define XB_CTRL_MAXREQ_TOUT_IE 0x00000002 /* maximum request timeout */
|
327 |
|
|
#define XB_CTRL_SRC_TOUT_IE 0x00000001 /* source timeout */
|
328 |
|
|
|
329 |
|
|
/* link_status(x) */
|
330 |
|
|
#define XB_STAT_LINKALIVE XB_CTRL_LINKALIVE_IE
|
331 |
|
|
/* reserved: 0x7ff80000 */
|
332 |
|
|
#define XB_STAT_MULTI_ERR 0x00040000 /* multi error */
|
333 |
|
|
#define XB_STAT_ILLEGAL_DST_ERR XB_CTRL_ILLEGAL_DST_IE
|
334 |
|
|
#define XB_STAT_OALLOC_IBUF_ERR XB_CTRL_OALLOC_IBUF_IE
|
335 |
|
|
#define XB_STAT_BNDWDTH_ALLOC_ID_MSK 0x0000ff00 /* port bitmask */
|
336 |
|
|
#define XB_STAT_RCV_CNT_OFLOW_ERR XB_CTRL_RCV_CNT_OFLOW_IE
|
337 |
|
|
#define XB_STAT_XMT_CNT_OFLOW_ERR XB_CTRL_XMT_CNT_OFLOW_IE
|
338 |
|
|
#define XB_STAT_XMT_MAX_RTRY_ERR XB_CTRL_XMT_MAX_RTRY_IE
|
339 |
|
|
#define XB_STAT_RCV_ERR XB_CTRL_RCV_IE
|
340 |
|
|
#define XB_STAT_XMT_RTRY_ERR XB_CTRL_XMT_RTRY_IE
|
341 |
|
|
/* reserved: 0x00000004 */
|
342 |
|
|
#define XB_STAT_MAXREQ_TOUT_ERR XB_CTRL_MAXREQ_TOUT_IE
|
343 |
|
|
#define XB_STAT_SRC_TOUT_ERR XB_CTRL_SRC_TOUT_IE
|
344 |
|
|
|
345 |
|
|
/* link_aux_status(x) */
|
346 |
|
|
#define XB_AUX_STAT_RCV_CNT 0xff000000
|
347 |
|
|
#define XB_AUX_STAT_XMT_CNT 0x00ff0000
|
348 |
|
|
#define XB_AUX_STAT_TOUT_DST 0x0000ff00
|
349 |
|
|
#define XB_AUX_LINKFAIL_RST_BAD 0x00000040
|
350 |
|
|
#define XB_AUX_STAT_PRESENT 0x00000020
|
351 |
|
|
#define XB_AUX_STAT_PORT_WIDTH 0x00000010
|
352 |
|
|
/* reserved: 0x0000000f */
|
353 |
|
|
|
354 |
|
|
/*
|
355 |
|
|
* link_arb_upper/link_arb_lower(x), (reg) should be the link_arb_upper
|
356 |
|
|
* register if (x) is 0x8..0xb, link_arb_lower if (x) is 0xc..0xf
|
357 |
|
|
*/
|
358 |
|
|
#define XB_ARB_GBR_MSK 0x1f
|
359 |
|
|
#define XB_ARB_RR_MSK 0x7
|
360 |
|
|
#define XB_ARB_GBR_SHFT(x) (((x) & 0x3) * 8)
|
361 |
|
|
#define XB_ARB_RR_SHFT(x) (((x) & 0x3) * 8 + 5)
|
362 |
|
|
#define XB_ARB_GBR_CNT(reg,x) ((reg) >> XB_ARB_GBR_SHFT(x) & XB_ARB_GBR_MSK)
|
363 |
|
|
#define XB_ARB_RR_CNT(reg,x) ((reg) >> XB_ARB_RR_SHFT(x) & XB_ARB_RR_MSK)
|
364 |
|
|
|
365 |
|
|
/* XBOW_WID_STAT */
|
366 |
|
|
#define XB_WID_STAT_LINK_INTR_SHFT (24)
|
367 |
|
|
#define XB_WID_STAT_LINK_INTR_MASK (0xFF << XB_WID_STAT_LINK_INTR_SHFT)
|
368 |
|
|
#define XB_WID_STAT_LINK_INTR(x) (0x1 << (((x)&7) + XB_WID_STAT_LINK_INTR_SHFT))
|
369 |
|
|
#define XB_WID_STAT_WIDGET0_INTR 0x00800000
|
370 |
|
|
#define XB_WID_STAT_SRCID_MASK 0x000003c0 /* Xbridge only */
|
371 |
|
|
#define XB_WID_STAT_REG_ACC_ERR 0x00000020
|
372 |
|
|
#define XB_WID_STAT_RECV_TOUT 0x00000010 /* Xbridge only */
|
373 |
|
|
#define XB_WID_STAT_ARB_TOUT 0x00000008 /* Xbridge only */
|
374 |
|
|
#define XB_WID_STAT_XTALK_ERR 0x00000004
|
375 |
|
|
#define XB_WID_STAT_DST_TOUT 0x00000002 /* Xbridge only */
|
376 |
|
|
#define XB_WID_STAT_MULTI_ERR 0x00000001
|
377 |
|
|
|
378 |
|
|
#define XB_WID_STAT_SRCID_SHFT 6
|
379 |
|
|
|
380 |
|
|
/* XBOW_WID_CONTROL */
|
381 |
|
|
#define XB_WID_CTRL_REG_ACC_IE XB_WID_STAT_REG_ACC_ERR
|
382 |
|
|
#define XB_WID_CTRL_RECV_TOUT XB_WID_STAT_RECV_TOUT
|
383 |
|
|
#define XB_WID_CTRL_ARB_TOUT XB_WID_STAT_ARB_TOUT
|
384 |
|
|
#define XB_WID_CTRL_XTALK_IE XB_WID_STAT_XTALK_ERR
|
385 |
|
|
|
386 |
|
|
/* XBOW_WID_INT_UPPER */
|
387 |
|
|
/* defined in xwidget.h for WIDGET_INTDEST_UPPER_ADDR */
|
388 |
|
|
|
389 |
|
|
/* XBOW WIDGET part number, in the ID register */
|
390 |
|
|
#define XBOW_WIDGET_PART_NUM 0x0 /* crossbow */
|
391 |
|
|
#define XXBOW_WIDGET_PART_NUM 0xd000 /* Xbridge */
|
392 |
|
|
#define XBOW_WIDGET_MFGR_NUM 0x0
|
393 |
|
|
#define XXBOW_WIDGET_MFGR_NUM 0x0
|
394 |
|
|
#define PXBOW_WIDGET_PART_NUM 0xd100 /* PIC */
|
395 |
|
|
|
396 |
|
|
#define XBOW_REV_1_0 0x1 /* xbow rev 1.0 is "1" */
|
397 |
|
|
#define XBOW_REV_1_1 0x2 /* xbow rev 1.1 is "2" */
|
398 |
|
|
#define XBOW_REV_1_2 0x3 /* xbow rev 1.2 is "3" */
|
399 |
|
|
#define XBOW_REV_1_3 0x4 /* xbow rev 1.3 is "4" */
|
400 |
|
|
#define XBOW_REV_2_0 0x5 /* xbow rev 2.0 is "5" */
|
401 |
|
|
|
402 |
|
|
#define XXBOW_PART_REV_1_0 (XXBOW_WIDGET_PART_NUM << 4 | 0x1 )
|
403 |
|
|
#define XXBOW_PART_REV_2_0 (XXBOW_WIDGET_PART_NUM << 4 | 0x2 )
|
404 |
|
|
|
405 |
|
|
/* XBOW_WID_ARB_RELOAD */
|
406 |
|
|
#define XBOW_WID_ARB_RELOAD_INT 0x3f /* GBR reload interval */
|
407 |
|
|
|
408 |
|
|
#define IS_XBRIDGE_XBOW(wid) \
|
409 |
|
|
(XWIDGET_PART_NUM(wid) == XXBOW_WIDGET_PART_NUM && \
|
410 |
|
|
XWIDGET_MFG_NUM(wid) == XXBOW_WIDGET_MFGR_NUM)
|
411 |
|
|
|
412 |
|
|
#define IS_PIC_XBOW(wid) \
|
413 |
|
|
(XWIDGET_PART_NUM(wid) == PXBOW_WIDGET_PART_NUM && \
|
414 |
|
|
XWIDGET_MFG_NUM(wid) == XXBOW_WIDGET_MFGR_NUM)
|
415 |
|
|
|
416 |
|
|
#define XBOW_WAR_ENABLED(pv, widid) ((1 << XWIDGET_REV_NUM(widid)) & pv)
|
417 |
|
|
#define PV854827 (~0) /* PIC: fake widget 0xf presence bit. permanent */
|
418 |
|
|
#define PV863579 (1 << 1) /* PIC: PIO to PIC register */
|
419 |
|
|
|
420 |
|
|
|
421 |
|
|
#ifndef __ASSEMBLY__
|
422 |
|
|
/*
|
423 |
|
|
* XBOW Widget 0 Register formats.
|
424 |
|
|
* Format for many of these registers are similar to the standard
|
425 |
|
|
* widget register format described as part of xtalk specification
|
426 |
|
|
* Standard widget register field format description is available in
|
427 |
|
|
* xwidget.h
|
428 |
|
|
* Following structures define the format for xbow widget 0 registers
|
429 |
|
|
*/
|
430 |
|
|
/*
|
431 |
|
|
* Xbow Widget 0 Command error word
|
432 |
|
|
*/
|
433 |
|
|
#ifdef LITTLE_ENDIAN
|
434 |
|
|
|
435 |
|
|
typedef union xbw0_cmdword_u {
|
436 |
|
|
xbowreg_t cmdword;
|
437 |
|
|
struct {
|
438 |
|
|
uint32_t rsvd:8, /* Reserved */
|
439 |
|
|
barr:1, /* Barrier operation */
|
440 |
|
|
error:1, /* Error Occured */
|
441 |
|
|
vbpm:1, /* Virtual Backplane message */
|
442 |
|
|
gbr:1, /* GBR enable ? */
|
443 |
|
|
ds:2, /* Data size */
|
444 |
|
|
ct:1, /* Is it a coherent transaction */
|
445 |
|
|
tnum:5, /* Transaction Number */
|
446 |
|
|
pactyp:4, /* Packet type: */
|
447 |
|
|
srcid:4, /* Source ID number */
|
448 |
|
|
destid:4; /* Desination ID number */
|
449 |
|
|
|
450 |
|
|
} xbw0_cmdfield;
|
451 |
|
|
} xbw0_cmdword_t;
|
452 |
|
|
|
453 |
|
|
#else
|
454 |
|
|
|
455 |
|
|
typedef union xbw0_cmdword_u {
|
456 |
|
|
xbowreg_t cmdword;
|
457 |
|
|
struct {
|
458 |
|
|
uint32_t destid:4, /* Desination ID number */
|
459 |
|
|
srcid:4, /* Source ID number */
|
460 |
|
|
pactyp:4, /* Packet type: */
|
461 |
|
|
tnum:5, /* Transaction Number */
|
462 |
|
|
ct:1, /* Is it a coherent transaction */
|
463 |
|
|
ds:2, /* Data size */
|
464 |
|
|
gbr:1, /* GBR enable ? */
|
465 |
|
|
vbpm:1, /* Virtual Backplane message */
|
466 |
|
|
error:1, /* Error Occured */
|
467 |
|
|
barr:1, /* Barrier operation */
|
468 |
|
|
rsvd:8; /* Reserved */
|
469 |
|
|
} xbw0_cmdfield;
|
470 |
|
|
} xbw0_cmdword_t;
|
471 |
|
|
|
472 |
|
|
#endif
|
473 |
|
|
|
474 |
|
|
#define xbcmd_destid xbw0_cmdfield.destid
|
475 |
|
|
#define xbcmd_srcid xbw0_cmdfield.srcid
|
476 |
|
|
#define xbcmd_pactyp xbw0_cmdfield.pactyp
|
477 |
|
|
#define xbcmd_tnum xbw0_cmdfield.tnum
|
478 |
|
|
#define xbcmd_ct xbw0_cmdfield.ct
|
479 |
|
|
#define xbcmd_ds xbw0_cmdfield.ds
|
480 |
|
|
#define xbcmd_gbr xbw0_cmdfield.gbr
|
481 |
|
|
#define xbcmd_vbpm xbw0_cmdfield.vbpm
|
482 |
|
|
#define xbcmd_error xbw0_cmdfield.error
|
483 |
|
|
#define xbcmd_barr xbw0_cmdfield.barr
|
484 |
|
|
|
485 |
|
|
/*
|
486 |
|
|
* Values for field PACTYP in xbow error command word
|
487 |
|
|
*/
|
488 |
|
|
#define XBCMDTYP_READREQ 0 /* Read Request packet */
|
489 |
|
|
#define XBCMDTYP_READRESP 1 /* Read Response packet */
|
490 |
|
|
#define XBCMDTYP_WRREQ_RESP 2 /* Write Request with response */
|
491 |
|
|
#define XBCMDTYP_WRRESP 3 /* Write Response */
|
492 |
|
|
#define XBCMDTYP_WRREQ_NORESP 4 /* Write request with No Response */
|
493 |
|
|
#define XBCMDTYP_FETCHOP 6 /* Fetch & Op packet */
|
494 |
|
|
#define XBCMDTYP_STOREOP 8 /* Store & Op packet */
|
495 |
|
|
#define XBCMDTYP_SPLPKT_REQ 0xE /* Special packet request */
|
496 |
|
|
#define XBCMDTYP_SPLPKT_RESP 0xF /* Special packet response */
|
497 |
|
|
|
498 |
|
|
/*
|
499 |
|
|
* Values for field ds (datasize) in xbow error command word
|
500 |
|
|
*/
|
501 |
|
|
#define XBCMDSZ_DOUBLEWORD 0
|
502 |
|
|
#define XBCMDSZ_QUARTRCACHE 1
|
503 |
|
|
#define XBCMDSZ_FULLCACHE 2
|
504 |
|
|
|
505 |
|
|
/*
|
506 |
|
|
* Xbow widget 0 Status register format.
|
507 |
|
|
*/
|
508 |
|
|
#ifdef LITTLE_ENDIAN
|
509 |
|
|
|
510 |
|
|
typedef union xbw0_status_u {
|
511 |
|
|
xbowreg_t statusword;
|
512 |
|
|
struct {
|
513 |
|
|
uint32_t mult_err:1, /* Multiple error occurred */
|
514 |
|
|
connect_tout:1, /* Connection timeout */
|
515 |
|
|
xtalk_err:1, /* Xtalk pkt with error bit */
|
516 |
|
|
/* End of Xbridge only */
|
517 |
|
|
w0_arb_tout, /* arbiter timeout err */
|
518 |
|
|
w0_recv_tout, /* receive timeout err */
|
519 |
|
|
/* Xbridge only */
|
520 |
|
|
regacc_err:1, /* Reg Access error */
|
521 |
|
|
src_id:4, /* source id. Xbridge only */
|
522 |
|
|
resvd1:13,
|
523 |
|
|
wid0intr:1; /* Widget 0 err intr */
|
524 |
|
|
} xbw0_stfield;
|
525 |
|
|
} xbw0_status_t;
|
526 |
|
|
|
527 |
|
|
#else
|
528 |
|
|
|
529 |
|
|
typedef union xbw0_status_u {
|
530 |
|
|
xbowreg_t statusword;
|
531 |
|
|
struct {
|
532 |
|
|
uint32_t linkXintr:8, /* link(x) error intr */
|
533 |
|
|
wid0intr:1, /* Widget 0 err intr */
|
534 |
|
|
resvd1:13,
|
535 |
|
|
src_id:4, /* source id. Xbridge only */
|
536 |
|
|
regacc_err:1, /* Reg Access error */
|
537 |
|
|
/* Xbridge only */
|
538 |
|
|
w0_recv_tout, /* receive timeout err */
|
539 |
|
|
w0_arb_tout, /* arbiter timeout err */
|
540 |
|
|
/* End of Xbridge only */
|
541 |
|
|
xtalk_err:1, /* Xtalk pkt with error bit */
|
542 |
|
|
connect_tout:1, /* Connection timeout */
|
543 |
|
|
mult_err:1; /* Multiple error occurred */
|
544 |
|
|
} xbw0_stfield;
|
545 |
|
|
} xbw0_status_t;
|
546 |
|
|
|
547 |
|
|
#endif
|
548 |
|
|
|
549 |
|
|
#define xbst_linkXintr xbw0_stfield.linkXintr
|
550 |
|
|
#define xbst_w0intr xbw0_stfield.wid0intr
|
551 |
|
|
#define xbst_regacc_err xbw0_stfield.regacc_err
|
552 |
|
|
#define xbst_xtalk_err xbw0_stfield.xtalk_err
|
553 |
|
|
#define xbst_connect_tout xbw0_stfield.connect_tout
|
554 |
|
|
#define xbst_mult_err xbw0_stfield.mult_err
|
555 |
|
|
#define xbst_src_id xbw0_stfield.src_id /* Xbridge only */
|
556 |
|
|
#define xbst_w0_recv_tout xbw0_stfield.w0_recv_tout /* Xbridge only */
|
557 |
|
|
#define xbst_w0_arb_tout xbw0_stfield.w0_arb_tout /* Xbridge only */
|
558 |
|
|
|
559 |
|
|
/*
|
560 |
|
|
* Xbow widget 0 Control register format
|
561 |
|
|
*/
|
562 |
|
|
#ifdef LITTLE_ENDIAN
|
563 |
|
|
|
564 |
|
|
typedef union xbw0_ctrl_u {
|
565 |
|
|
xbowreg_t ctrlword;
|
566 |
|
|
struct {
|
567 |
|
|
uint32_t
|
568 |
|
|
resvd3:1,
|
569 |
|
|
conntout_intr:1,
|
570 |
|
|
xtalkerr_intr:1,
|
571 |
|
|
w0_arg_tout_intr:1, /* Xbridge only */
|
572 |
|
|
w0_recv_tout_intr:1, /* Xbridge only */
|
573 |
|
|
accerr_intr:1,
|
574 |
|
|
enable_w0_tout_cntr:1, /* Xbridge only */
|
575 |
|
|
enable_watchdog:1, /* Xbridge only */
|
576 |
|
|
resvd1:24;
|
577 |
|
|
} xbw0_ctrlfield;
|
578 |
|
|
} xbw0_ctrl_t;
|
579 |
|
|
|
580 |
|
|
#else
|
581 |
|
|
|
582 |
|
|
typedef union xbw0_ctrl_u {
|
583 |
|
|
xbowreg_t ctrlword;
|
584 |
|
|
struct {
|
585 |
|
|
uint32_t
|
586 |
|
|
resvd1:24,
|
587 |
|
|
enable_watchdog:1, /* Xbridge only */
|
588 |
|
|
enable_w0_tout_cntr:1, /* Xbridge only */
|
589 |
|
|
accerr_intr:1,
|
590 |
|
|
w0_recv_tout_intr:1, /* Xbridge only */
|
591 |
|
|
w0_arg_tout_intr:1, /* Xbridge only */
|
592 |
|
|
xtalkerr_intr:1,
|
593 |
|
|
conntout_intr:1,
|
594 |
|
|
resvd3:1;
|
595 |
|
|
} xbw0_ctrlfield;
|
596 |
|
|
} xbw0_ctrl_t;
|
597 |
|
|
|
598 |
|
|
#endif
|
599 |
|
|
|
600 |
|
|
#ifdef LITTLE_ENDIAN
|
601 |
|
|
|
602 |
|
|
typedef union xbow_linkctrl_u {
|
603 |
|
|
xbowreg_t xbl_ctrlword;
|
604 |
|
|
struct {
|
605 |
|
|
uint32_t srcto_intr:1,
|
606 |
|
|
maxto_intr:1,
|
607 |
|
|
rsvd3:1,
|
608 |
|
|
trx_retry_intr:1,
|
609 |
|
|
rcv_err_intr:1,
|
610 |
|
|
trx_max_retry_intr:1,
|
611 |
|
|
trxov_intr:1,
|
612 |
|
|
rcvov_intr:1,
|
613 |
|
|
bwalloc_intr:1,
|
614 |
|
|
rsvd2:7,
|
615 |
|
|
obuf_intr:1,
|
616 |
|
|
idest_intr:1,
|
617 |
|
|
llp_credit:5,
|
618 |
|
|
force_badllp:1,
|
619 |
|
|
send_bm8:1,
|
620 |
|
|
inbuf_level:3,
|
621 |
|
|
perf_mode:2,
|
622 |
|
|
rsvd1:1,
|
623 |
|
|
alive_intr:1;
|
624 |
|
|
|
625 |
|
|
} xb_linkcontrol;
|
626 |
|
|
} xbow_linkctrl_t;
|
627 |
|
|
|
628 |
|
|
#else
|
629 |
|
|
|
630 |
|
|
typedef union xbow_linkctrl_u {
|
631 |
|
|
xbowreg_t xbl_ctrlword;
|
632 |
|
|
struct {
|
633 |
|
|
uint32_t alive_intr:1,
|
634 |
|
|
rsvd1:1,
|
635 |
|
|
perf_mode:2,
|
636 |
|
|
inbuf_level:3,
|
637 |
|
|
send_bm8:1,
|
638 |
|
|
force_badllp:1,
|
639 |
|
|
llp_credit:5,
|
640 |
|
|
idest_intr:1,
|
641 |
|
|
obuf_intr:1,
|
642 |
|
|
rsvd2:7,
|
643 |
|
|
bwalloc_intr:1,
|
644 |
|
|
rcvov_intr:1,
|
645 |
|
|
trxov_intr:1,
|
646 |
|
|
trx_max_retry_intr:1,
|
647 |
|
|
rcv_err_intr:1,
|
648 |
|
|
trx_retry_intr:1,
|
649 |
|
|
rsvd3:1,
|
650 |
|
|
maxto_intr:1,
|
651 |
|
|
srcto_intr:1;
|
652 |
|
|
} xb_linkcontrol;
|
653 |
|
|
} xbow_linkctrl_t;
|
654 |
|
|
|
655 |
|
|
#endif
|
656 |
|
|
|
657 |
|
|
|
658 |
|
|
#define xbctl_accerr_intr (xbw0_ctrlfield.accerr_intr)
|
659 |
|
|
#define xbctl_xtalkerr_intr (xbw0_ctrlfield.xtalkerr_intr)
|
660 |
|
|
#define xbctl_cnntout_intr (xbw0_ctrlfield.conntout_intr)
|
661 |
|
|
|
662 |
|
|
#define XBW0_CTRL_ACCERR_INTR (1 << 5)
|
663 |
|
|
#define XBW0_CTRL_XTERR_INTR (1 << 2)
|
664 |
|
|
#define XBW0_CTRL_CONNTOUT_INTR (1 << 1)
|
665 |
|
|
|
666 |
|
|
/*
|
667 |
|
|
* Xbow Link specific Registers structure definitions.
|
668 |
|
|
*/
|
669 |
|
|
|
670 |
|
|
#ifdef LITTLE_ENDIAN
|
671 |
|
|
|
672 |
|
|
typedef union xbow_linkX_status_u {
|
673 |
|
|
xbowreg_t linkstatus;
|
674 |
|
|
struct {
|
675 |
|
|
uint32_t pkt_toutsrc:1,
|
676 |
|
|
pkt_toutconn:1, /* max_req_tout in Xbridge */
|
677 |
|
|
pkt_toutdest:1, /* reserved in Xbridge */
|
678 |
|
|
llp_xmitretry:1,
|
679 |
|
|
llp_rcverror:1,
|
680 |
|
|
llp_maxtxretry:1,
|
681 |
|
|
llp_txovflow:1,
|
682 |
|
|
llp_rxovflow:1,
|
683 |
|
|
bw_errport:8, /* BW allocation error port */
|
684 |
|
|
ioe:1, /* Input overallocation error */
|
685 |
|
|
illdest:1,
|
686 |
|
|
merror:1,
|
687 |
|
|
resvd1:12,
|
688 |
|
|
alive:1;
|
689 |
|
|
} xb_linkstatus;
|
690 |
|
|
} xbwX_stat_t;
|
691 |
|
|
|
692 |
|
|
#else
|
693 |
|
|
|
694 |
|
|
typedef union xbow_linkX_status_u {
|
695 |
|
|
xbowreg_t linkstatus;
|
696 |
|
|
struct {
|
697 |
|
|
uint32_t alive:1,
|
698 |
|
|
resvd1:12,
|
699 |
|
|
merror:1,
|
700 |
|
|
illdest:1,
|
701 |
|
|
ioe:1, /* Input overallocation error */
|
702 |
|
|
bw_errport:8, /* BW allocation error port */
|
703 |
|
|
llp_rxovflow:1,
|
704 |
|
|
llp_txovflow:1,
|
705 |
|
|
llp_maxtxretry:1,
|
706 |
|
|
llp_rcverror:1,
|
707 |
|
|
llp_xmitretry:1,
|
708 |
|
|
pkt_toutdest:1, /* reserved in Xbridge */
|
709 |
|
|
pkt_toutconn:1, /* max_req_tout in Xbridge */
|
710 |
|
|
pkt_toutsrc:1;
|
711 |
|
|
} xb_linkstatus;
|
712 |
|
|
} xbwX_stat_t;
|
713 |
|
|
|
714 |
|
|
#endif
|
715 |
|
|
|
716 |
|
|
#define link_alive xb_linkstatus.alive
|
717 |
|
|
#define link_multierror xb_linkstatus.merror
|
718 |
|
|
#define link_illegal_dest xb_linkstatus.illdest
|
719 |
|
|
#define link_ioe xb_linkstatus.ioe
|
720 |
|
|
#define link_max_req_tout xb_linkstatus.pkt_toutconn /* Xbridge */
|
721 |
|
|
#define link_pkt_toutconn xb_linkstatus.pkt_toutconn /* Xbow */
|
722 |
|
|
#define link_pkt_toutdest xb_linkstatus.pkt_toutdest
|
723 |
|
|
#define link_pkt_toutsrc xb_linkstatus.pkt_toutsrc
|
724 |
|
|
|
725 |
|
|
#ifdef LITTLE_ENDIAN
|
726 |
|
|
|
727 |
|
|
typedef union xbow_aux_linkX_status_u {
|
728 |
|
|
xbowreg_t aux_linkstatus;
|
729 |
|
|
struct {
|
730 |
|
|
uint32_t rsvd2:4,
|
731 |
|
|
bit_mode_8:1,
|
732 |
|
|
wid_present:1,
|
733 |
|
|
fail_mode:1,
|
734 |
|
|
rsvd1:1,
|
735 |
|
|
to_src_loc:8,
|
736 |
|
|
tx_retry_cnt:8,
|
737 |
|
|
rx_err_cnt:8;
|
738 |
|
|
} xb_aux_linkstatus;
|
739 |
|
|
} xbow_aux_link_status_t;
|
740 |
|
|
|
741 |
|
|
#else
|
742 |
|
|
|
743 |
|
|
typedef union xbow_aux_linkX_status_u {
|
744 |
|
|
xbowreg_t aux_linkstatus;
|
745 |
|
|
struct {
|
746 |
|
|
uint32_t rx_err_cnt:8,
|
747 |
|
|
tx_retry_cnt:8,
|
748 |
|
|
to_src_loc:8,
|
749 |
|
|
rsvd1:1,
|
750 |
|
|
fail_mode:1,
|
751 |
|
|
wid_present:1,
|
752 |
|
|
bit_mode_8:1,
|
753 |
|
|
rsvd2:4;
|
754 |
|
|
} xb_aux_linkstatus;
|
755 |
|
|
} xbow_aux_link_status_t;
|
756 |
|
|
|
757 |
|
|
#endif
|
758 |
|
|
|
759 |
|
|
|
760 |
|
|
#ifdef LITTLE_ENDIAN
|
761 |
|
|
|
762 |
|
|
typedef union xbow_perf_count_u {
|
763 |
|
|
xbowreg_t xb_counter_val;
|
764 |
|
|
struct {
|
765 |
|
|
uint32_t count:20,
|
766 |
|
|
link_select:3,
|
767 |
|
|
rsvd:9;
|
768 |
|
|
} xb_perf;
|
769 |
|
|
} xbow_perfcount_t;
|
770 |
|
|
|
771 |
|
|
#else
|
772 |
|
|
|
773 |
|
|
typedef union xbow_perf_count_u {
|
774 |
|
|
xbowreg_t xb_counter_val;
|
775 |
|
|
struct {
|
776 |
|
|
uint32_t rsvd:9,
|
777 |
|
|
link_select:3,
|
778 |
|
|
count:20;
|
779 |
|
|
} xb_perf;
|
780 |
|
|
} xbow_perfcount_t;
|
781 |
|
|
|
782 |
|
|
#endif
|
783 |
|
|
|
784 |
|
|
#define XBOW_COUNTER_MASK 0xFFFFF
|
785 |
|
|
|
786 |
|
|
extern int xbow_widget_present(xbow_t * xbow, int port);
|
787 |
|
|
|
788 |
|
|
extern xwidget_intr_preset_f xbow_intr_preset;
|
789 |
|
|
extern xswitch_reset_link_f xbow_reset_link;
|
790 |
|
|
void xbow_mlreset(xbow_t *);
|
791 |
|
|
|
792 |
|
|
/* ========================================================================
|
793 |
|
|
*/
|
794 |
|
|
|
795 |
|
|
#ifdef MACROFIELD_LINE
|
796 |
|
|
/*
|
797 |
|
|
* This table forms a relation between the byte offset macros normally
|
798 |
|
|
* used for ASM coding and the calculated byte offsets of the fields
|
799 |
|
|
* in the C structure.
|
800 |
|
|
*
|
801 |
|
|
* See xbow_check.c xbow_html.c for further details.
|
802 |
|
|
*/
|
803 |
|
|
#ifndef MACROFIELD_LINE_BITFIELD
|
804 |
|
|
#define MACROFIELD_LINE_BITFIELD(m) /* ignored */
|
805 |
|
|
#endif
|
806 |
|
|
|
807 |
|
|
struct macrofield_s xbow_macrofield[] =
|
808 |
|
|
{
|
809 |
|
|
|
810 |
|
|
MACROFIELD_LINE(XBOW_WID_ID, xb_wid_id)
|
811 |
|
|
MACROFIELD_LINE(XBOW_WID_STAT, xb_wid_stat)
|
812 |
|
|
MACROFIELD_LINE_BITFIELD(XB_WID_STAT_LINK_INTR(0xF))
|
813 |
|
|
MACROFIELD_LINE_BITFIELD(XB_WID_STAT_LINK_INTR(0xE))
|
814 |
|
|
MACROFIELD_LINE_BITFIELD(XB_WID_STAT_LINK_INTR(0xD))
|
815 |
|
|
MACROFIELD_LINE_BITFIELD(XB_WID_STAT_LINK_INTR(0xC))
|
816 |
|
|
MACROFIELD_LINE_BITFIELD(XB_WID_STAT_LINK_INTR(0xB))
|
817 |
|
|
MACROFIELD_LINE_BITFIELD(XB_WID_STAT_LINK_INTR(0xA))
|
818 |
|
|
MACROFIELD_LINE_BITFIELD(XB_WID_STAT_LINK_INTR(0x9))
|
819 |
|
|
MACROFIELD_LINE_BITFIELD(XB_WID_STAT_LINK_INTR(0x8))
|
820 |
|
|
MACROFIELD_LINE_BITFIELD(XB_WID_STAT_WIDGET0_INTR)
|
821 |
|
|
MACROFIELD_LINE_BITFIELD(XB_WID_STAT_REG_ACC_ERR)
|
822 |
|
|
MACROFIELD_LINE_BITFIELD(XB_WID_STAT_XTALK_ERR)
|
823 |
|
|
MACROFIELD_LINE_BITFIELD(XB_WID_STAT_MULTI_ERR)
|
824 |
|
|
MACROFIELD_LINE(XBOW_WID_ERR_UPPER, xb_wid_err_upper)
|
825 |
|
|
MACROFIELD_LINE(XBOW_WID_ERR_LOWER, xb_wid_err_lower)
|
826 |
|
|
MACROFIELD_LINE(XBOW_WID_CONTROL, xb_wid_control)
|
827 |
|
|
MACROFIELD_LINE_BITFIELD(XB_WID_CTRL_REG_ACC_IE)
|
828 |
|
|
MACROFIELD_LINE_BITFIELD(XB_WID_CTRL_XTALK_IE)
|
829 |
|
|
MACROFIELD_LINE(XBOW_WID_REQ_TO, xb_wid_req_timeout)
|
830 |
|
|
MACROFIELD_LINE(XBOW_WID_INT_UPPER, xb_wid_int_upper)
|
831 |
|
|
MACROFIELD_LINE(XBOW_WID_INT_LOWER, xb_wid_int_lower)
|
832 |
|
|
MACROFIELD_LINE(XBOW_WID_ERR_CMDWORD, xb_wid_err_cmdword)
|
833 |
|
|
MACROFIELD_LINE(XBOW_WID_LLP, xb_wid_llp)
|
834 |
|
|
MACROFIELD_LINE(XBOW_WID_STAT_CLR, xb_wid_stat_clr)
|
835 |
|
|
MACROFIELD_LINE(XBOW_WID_ARB_RELOAD, xb_wid_arb_reload)
|
836 |
|
|
MACROFIELD_LINE(XBOW_WID_PERF_CTR_A, xb_perf_ctr_a)
|
837 |
|
|
MACROFIELD_LINE(XBOW_WID_PERF_CTR_B, xb_perf_ctr_b)
|
838 |
|
|
MACROFIELD_LINE(XBOW_WID_NIC, xb_nic)
|
839 |
|
|
MACROFIELD_LINE(XB_LINK_REG_BASE(8), xb_link(8))
|
840 |
|
|
MACROFIELD_LINE(XB_LINK_IBUF_FLUSH(8), xb_link(8).link_ibf)
|
841 |
|
|
MACROFIELD_LINE(XB_LINK_CTRL(8), xb_link(8).link_control)
|
842 |
|
|
MACROFIELD_LINE_BITFIELD(XB_CTRL_LINKALIVE_IE)
|
843 |
|
|
MACROFIELD_LINE_BITFIELD(XB_CTRL_PERF_CTR_MODE_MSK)
|
844 |
|
|
MACROFIELD_LINE_BITFIELD(XB_CTRL_IBUF_LEVEL_MSK)
|
845 |
|
|
MACROFIELD_LINE_BITFIELD(XB_CTRL_8BIT_MODE)
|
846 |
|
|
MACROFIELD_LINE_BITFIELD(XB_CTRL_BAD_LLP_PKT)
|
847 |
|
|
MACROFIELD_LINE_BITFIELD(XB_CTRL_WIDGET_CR_MSK)
|
848 |
|
|
MACROFIELD_LINE_BITFIELD(XB_CTRL_ILLEGAL_DST_IE)
|
849 |
|
|
MACROFIELD_LINE_BITFIELD(XB_CTRL_OALLOC_IBUF_IE)
|
850 |
|
|
MACROFIELD_LINE_BITFIELD(XB_CTRL_BNDWDTH_ALLOC_IE)
|
851 |
|
|
MACROFIELD_LINE_BITFIELD(XB_CTRL_RCV_CNT_OFLOW_IE)
|
852 |
|
|
MACROFIELD_LINE_BITFIELD(XB_CTRL_XMT_CNT_OFLOW_IE)
|
853 |
|
|
MACROFIELD_LINE_BITFIELD(XB_CTRL_XMT_MAX_RTRY_IE)
|
854 |
|
|
MACROFIELD_LINE_BITFIELD(XB_CTRL_RCV_IE)
|
855 |
|
|
MACROFIELD_LINE_BITFIELD(XB_CTRL_XMT_RTRY_IE)
|
856 |
|
|
MACROFIELD_LINE_BITFIELD(XB_CTRL_MAXREQ_TOUT_IE)
|
857 |
|
|
MACROFIELD_LINE_BITFIELD(XB_CTRL_SRC_TOUT_IE)
|
858 |
|
|
MACROFIELD_LINE(XB_LINK_STATUS(8), xb_link(8).link_status)
|
859 |
|
|
MACROFIELD_LINE_BITFIELD(XB_STAT_LINKALIVE)
|
860 |
|
|
MACROFIELD_LINE_BITFIELD(XB_STAT_MULTI_ERR)
|
861 |
|
|
MACROFIELD_LINE_BITFIELD(XB_STAT_ILLEGAL_DST_ERR)
|
862 |
|
|
MACROFIELD_LINE_BITFIELD(XB_STAT_OALLOC_IBUF_ERR)
|
863 |
|
|
MACROFIELD_LINE_BITFIELD(XB_STAT_BNDWDTH_ALLOC_ID_MSK)
|
864 |
|
|
MACROFIELD_LINE_BITFIELD(XB_STAT_RCV_CNT_OFLOW_ERR)
|
865 |
|
|
MACROFIELD_LINE_BITFIELD(XB_STAT_XMT_CNT_OFLOW_ERR)
|
866 |
|
|
MACROFIELD_LINE_BITFIELD(XB_STAT_XMT_MAX_RTRY_ERR)
|
867 |
|
|
MACROFIELD_LINE_BITFIELD(XB_STAT_RCV_ERR)
|
868 |
|
|
MACROFIELD_LINE_BITFIELD(XB_STAT_XMT_RTRY_ERR)
|
869 |
|
|
MACROFIELD_LINE_BITFIELD(XB_STAT_MAXREQ_TOUT_ERR)
|
870 |
|
|
MACROFIELD_LINE_BITFIELD(XB_STAT_SRC_TOUT_ERR)
|
871 |
|
|
MACROFIELD_LINE(XB_LINK_ARB_UPPER(8), xb_link(8).link_arb_upper)
|
872 |
|
|
MACROFIELD_LINE_BITFIELD(XB_ARB_RR_MSK << XB_ARB_RR_SHFT(0xb))
|
873 |
|
|
MACROFIELD_LINE_BITFIELD(XB_ARB_GBR_MSK << XB_ARB_GBR_SHFT(0xb))
|
874 |
|
|
MACROFIELD_LINE_BITFIELD(XB_ARB_RR_MSK << XB_ARB_RR_SHFT(0xa))
|
875 |
|
|
MACROFIELD_LINE_BITFIELD(XB_ARB_GBR_MSK << XB_ARB_GBR_SHFT(0xa))
|
876 |
|
|
MACROFIELD_LINE_BITFIELD(XB_ARB_RR_MSK << XB_ARB_RR_SHFT(0x9))
|
877 |
|
|
MACROFIELD_LINE_BITFIELD(XB_ARB_GBR_MSK << XB_ARB_GBR_SHFT(0x9))
|
878 |
|
|
MACROFIELD_LINE_BITFIELD(XB_ARB_RR_MSK << XB_ARB_RR_SHFT(0x8))
|
879 |
|
|
MACROFIELD_LINE_BITFIELD(XB_ARB_GBR_MSK << XB_ARB_GBR_SHFT(0x8))
|
880 |
|
|
MACROFIELD_LINE(XB_LINK_ARB_LOWER(8), xb_link(8).link_arb_lower)
|
881 |
|
|
MACROFIELD_LINE_BITFIELD(XB_ARB_RR_MSK << XB_ARB_RR_SHFT(0xf))
|
882 |
|
|
MACROFIELD_LINE_BITFIELD(XB_ARB_GBR_MSK << XB_ARB_GBR_SHFT(0xf))
|
883 |
|
|
MACROFIELD_LINE_BITFIELD(XB_ARB_RR_MSK << XB_ARB_RR_SHFT(0xe))
|
884 |
|
|
MACROFIELD_LINE_BITFIELD(XB_ARB_GBR_MSK << XB_ARB_GBR_SHFT(0xe))
|
885 |
|
|
MACROFIELD_LINE_BITFIELD(XB_ARB_RR_MSK << XB_ARB_RR_SHFT(0xd))
|
886 |
|
|
MACROFIELD_LINE_BITFIELD(XB_ARB_GBR_MSK << XB_ARB_GBR_SHFT(0xd))
|
887 |
|
|
MACROFIELD_LINE_BITFIELD(XB_ARB_RR_MSK << XB_ARB_RR_SHFT(0xc))
|
888 |
|
|
MACROFIELD_LINE_BITFIELD(XB_ARB_GBR_MSK << XB_ARB_GBR_SHFT(0xc))
|
889 |
|
|
MACROFIELD_LINE(XB_LINK_STATUS_CLR(8), xb_link(8).link_status_clr)
|
890 |
|
|
MACROFIELD_LINE(XB_LINK_RESET(8), xb_link(8).link_reset)
|
891 |
|
|
MACROFIELD_LINE(XB_LINK_AUX_STATUS(8), xb_link(8).link_aux_status)
|
892 |
|
|
MACROFIELD_LINE_BITFIELD(XB_AUX_STAT_RCV_CNT)
|
893 |
|
|
MACROFIELD_LINE_BITFIELD(XB_AUX_STAT_XMT_CNT)
|
894 |
|
|
MACROFIELD_LINE_BITFIELD(XB_AUX_LINKFAIL_RST_BAD)
|
895 |
|
|
MACROFIELD_LINE_BITFIELD(XB_AUX_STAT_PRESENT)
|
896 |
|
|
MACROFIELD_LINE_BITFIELD(XB_AUX_STAT_PORT_WIDTH)
|
897 |
|
|
MACROFIELD_LINE_BITFIELD(XB_AUX_STAT_TOUT_DST)
|
898 |
|
|
MACROFIELD_LINE(XB_LINK_REG_BASE(0x8), xb_link(0x8))
|
899 |
|
|
MACROFIELD_LINE(XB_LINK_REG_BASE(0x9), xb_link(0x9))
|
900 |
|
|
MACROFIELD_LINE(XB_LINK_REG_BASE(0xA), xb_link(0xA))
|
901 |
|
|
MACROFIELD_LINE(XB_LINK_REG_BASE(0xB), xb_link(0xB))
|
902 |
|
|
MACROFIELD_LINE(XB_LINK_REG_BASE(0xC), xb_link(0xC))
|
903 |
|
|
MACROFIELD_LINE(XB_LINK_REG_BASE(0xD), xb_link(0xD))
|
904 |
|
|
MACROFIELD_LINE(XB_LINK_REG_BASE(0xE), xb_link(0xE))
|
905 |
|
|
MACROFIELD_LINE(XB_LINK_REG_BASE(0xF), xb_link(0xF))
|
906 |
|
|
}; /* xbow_macrofield[] */
|
907 |
|
|
|
908 |
|
|
#endif /* MACROFIELD_LINE */
|
909 |
|
|
|
910 |
|
|
#endif /* __ASSEMBLY__ */
|
911 |
|
|
#endif /* _ASM_SN_SN_XTALK_XBOW_H */
|