diff options
Diffstat (limited to 'arch/mips/include/asm/xtalk/xwidget.h')
-rw-r--r-- | arch/mips/include/asm/xtalk/xwidget.h | 167 |
1 files changed, 167 insertions, 0 deletions
diff --git a/arch/mips/include/asm/xtalk/xwidget.h b/arch/mips/include/asm/xtalk/xwidget.h new file mode 100644 index 000000000000..b4a13d7405ee --- /dev/null +++ b/arch/mips/include/asm/xtalk/xwidget.h | |||
@@ -0,0 +1,167 @@ | |||
1 | /* | ||
2 | * This file is subject to the terms and conditions of the GNU General Public | ||
3 | * License. See the file "COPYING" in the main directory of this archive | ||
4 | * for more details. | ||
5 | * | ||
6 | * xwidget.h - generic crosstalk widget header file, derived from IRIX | ||
7 | * <sys/xtalk/xtalkwidget.h>, revision 1.32. | ||
8 | * | ||
9 | * Copyright (C) 1996, 1999 Silcon Graphics, Inc. | ||
10 | * Copyright (C) 1999 Ralf Baechle (ralf@gnu.org) | ||
11 | */ | ||
12 | #ifndef _ASM_XTALK_XWIDGET_H | ||
13 | #define _ASM_XTALK_XWIDGET_H | ||
14 | |||
15 | #include <linux/types.h> | ||
16 | #include <asm/xtalk/xtalk.h> | ||
17 | |||
18 | #define WIDGET_ID 0x04 | ||
19 | #define WIDGET_STATUS 0x0c | ||
20 | #define WIDGET_ERR_UPPER_ADDR 0x14 | ||
21 | #define WIDGET_ERR_LOWER_ADDR 0x1c | ||
22 | #define WIDGET_CONTROL 0x24 | ||
23 | #define WIDGET_REQ_TIMEOUT 0x2c | ||
24 | #define WIDGET_INTDEST_UPPER_ADDR 0x34 | ||
25 | #define WIDGET_INTDEST_LOWER_ADDR 0x3c | ||
26 | #define WIDGET_ERR_CMD_WORD 0x44 | ||
27 | #define WIDGET_LLP_CFG 0x4c | ||
28 | #define WIDGET_TFLUSH 0x54 | ||
29 | |||
30 | /* WIDGET_ID */ | ||
31 | #define WIDGET_REV_NUM 0xf0000000 | ||
32 | #define WIDGET_PART_NUM 0x0ffff000 | ||
33 | #define WIDGET_MFG_NUM 0x00000ffe | ||
34 | #define WIDGET_REV_NUM_SHFT 28 | ||
35 | #define WIDGET_PART_NUM_SHFT 12 | ||
36 | #define WIDGET_MFG_NUM_SHFT 1 | ||
37 | |||
38 | #define XWIDGET_PART_NUM(widgetid) (((widgetid) & WIDGET_PART_NUM) >> WIDGET_PART_NUM_SHFT) | ||
39 | #define XWIDGET_REV_NUM(widgetid) (((widgetid) & WIDGET_REV_NUM) >> WIDGET_REV_NUM_SHFT) | ||
40 | #define XWIDGET_MFG_NUM(widgetid) (((widgetid) & WIDGET_MFG_NUM) >> WIDGET_MFG_NUM_SHFT) | ||
41 | |||
42 | /* WIDGET_STATUS */ | ||
43 | #define WIDGET_LLP_REC_CNT 0xff000000 | ||
44 | #define WIDGET_LLP_TX_CNT 0x00ff0000 | ||
45 | #define WIDGET_PENDING 0x0000001f | ||
46 | |||
47 | /* WIDGET_ERR_UPPER_ADDR */ | ||
48 | #define WIDGET_ERR_UPPER_ADDR_ONLY 0x0000ffff | ||
49 | |||
50 | /* WIDGET_CONTROL */ | ||
51 | #define WIDGET_F_BAD_PKT 0x00010000 | ||
52 | #define WIDGET_LLP_XBAR_CRD 0x0000f000 | ||
53 | #define WIDGET_LLP_XBAR_CRD_SHFT 12 | ||
54 | #define WIDGET_CLR_RLLP_CNT 0x00000800 | ||
55 | #define WIDGET_CLR_TLLP_CNT 0x00000400 | ||
56 | #define WIDGET_SYS_END 0x00000200 | ||
57 | #define WIDGET_MAX_TRANS 0x000001f0 | ||
58 | #define WIDGET_WIDGET_ID 0x0000000f | ||
59 | |||
60 | /* WIDGET_INTDEST_UPPER_ADDR */ | ||
61 | #define WIDGET_INT_VECTOR 0xff000000 | ||
62 | #define WIDGET_INT_VECTOR_SHFT 24 | ||
63 | #define WIDGET_TARGET_ID 0x000f0000 | ||
64 | #define WIDGET_TARGET_ID_SHFT 16 | ||
65 | #define WIDGET_UPP_ADDR 0x0000ffff | ||
66 | |||
67 | /* WIDGET_ERR_CMD_WORD */ | ||
68 | #define WIDGET_DIDN 0xf0000000 | ||
69 | #define WIDGET_SIDN 0x0f000000 | ||
70 | #define WIDGET_PACTYP 0x00f00000 | ||
71 | #define WIDGET_TNUM 0x000f8000 | ||
72 | #define WIDGET_COHERENT 0x00004000 | ||
73 | #define WIDGET_DS 0x00003000 | ||
74 | #define WIDGET_GBR 0x00000800 | ||
75 | #define WIDGET_VBPM 0x00000400 | ||
76 | #define WIDGET_ERROR 0x00000200 | ||
77 | #define WIDGET_BARRIER 0x00000100 | ||
78 | |||
79 | /* WIDGET_LLP_CFG */ | ||
80 | #define WIDGET_LLP_MAXRETRY 0x03ff0000 | ||
81 | #define WIDGET_LLP_MAXRETRY_SHFT 16 | ||
82 | #define WIDGET_LLP_NULLTIMEOUT 0x0000fc00 | ||
83 | #define WIDGET_LLP_NULLTIMEOUT_SHFT 10 | ||
84 | #define WIDGET_LLP_MAXBURST 0x000003ff | ||
85 | #define WIDGET_LLP_MAXBURST_SHFT 0 | ||
86 | |||
87 | /* | ||
88 | * according to the crosstalk spec, only 32-bits access to the widget | ||
89 | * configuration registers is allowed. some widgets may allow 64-bits | ||
90 | * access but software should not depend on it. registers beyond the | ||
91 | * widget target flush register are widget dependent thus will not be | ||
92 | * defined here | ||
93 | */ | ||
94 | #ifndef __ASSEMBLY__ | ||
95 | typedef u32 widgetreg_t; | ||
96 | |||
97 | /* widget configuration registers */ | ||
98 | typedef volatile struct widget_cfg { | ||
99 | widgetreg_t w_pad_0; /* 0x00 */ | ||
100 | widgetreg_t w_id; /* 0x04 */ | ||
101 | widgetreg_t w_pad_1; /* 0x08 */ | ||
102 | widgetreg_t w_status; /* 0x0c */ | ||
103 | widgetreg_t w_pad_2; /* 0x10 */ | ||
104 | widgetreg_t w_err_upper_addr; /* 0x14 */ | ||
105 | widgetreg_t w_pad_3; /* 0x18 */ | ||
106 | widgetreg_t w_err_lower_addr; /* 0x1c */ | ||
107 | widgetreg_t w_pad_4; /* 0x20 */ | ||
108 | widgetreg_t w_control; /* 0x24 */ | ||
109 | widgetreg_t w_pad_5; /* 0x28 */ | ||
110 | widgetreg_t w_req_timeout; /* 0x2c */ | ||
111 | widgetreg_t w_pad_6; /* 0x30 */ | ||
112 | widgetreg_t w_intdest_upper_addr; /* 0x34 */ | ||
113 | widgetreg_t w_pad_7; /* 0x38 */ | ||
114 | widgetreg_t w_intdest_lower_addr; /* 0x3c */ | ||
115 | widgetreg_t w_pad_8; /* 0x40 */ | ||
116 | widgetreg_t w_err_cmd_word; /* 0x44 */ | ||
117 | widgetreg_t w_pad_9; /* 0x48 */ | ||
118 | widgetreg_t w_llp_cfg; /* 0x4c */ | ||
119 | widgetreg_t w_pad_10; /* 0x50 */ | ||
120 | widgetreg_t w_tflush; /* 0x54 */ | ||
121 | } widget_cfg_t; | ||
122 | |||
123 | typedef struct { | ||
124 | unsigned didn:4; | ||
125 | unsigned sidn:4; | ||
126 | unsigned pactyp:4; | ||
127 | unsigned tnum:5; | ||
128 | unsigned ct:1; | ||
129 | unsigned ds:2; | ||
130 | unsigned gbr:1; | ||
131 | unsigned vbpm:1; | ||
132 | unsigned error:1; | ||
133 | unsigned bo:1; | ||
134 | unsigned other:8; | ||
135 | } w_err_cmd_word_f; | ||
136 | |||
137 | typedef union { | ||
138 | widgetreg_t r; | ||
139 | w_err_cmd_word_f f; | ||
140 | } w_err_cmd_word_u; | ||
141 | |||
142 | typedef struct xwidget_info_s *xwidget_info_t; | ||
143 | |||
144 | /* | ||
145 | * Crosstalk Widget Hardware Identification, as defined in the Crosstalk spec. | ||
146 | */ | ||
147 | typedef struct xwidget_hwid_s { | ||
148 | xwidget_part_num_t part_num; | ||
149 | xwidget_rev_num_t rev_num; | ||
150 | xwidget_mfg_num_t mfg_num; | ||
151 | } *xwidget_hwid_t; | ||
152 | |||
153 | |||
154 | /* | ||
155 | * Returns 1 if a driver that handles devices described by hwid1 is able | ||
156 | * to manage a device with hardwareid hwid2. NOTE: We don't check rev | ||
157 | * numbers at all. | ||
158 | */ | ||
159 | #define XWIDGET_HARDWARE_ID_MATCH(hwid1, hwid2) \ | ||
160 | (((hwid1)->part_num == (hwid2)->part_num) && \ | ||
161 | (((hwid1)->mfg_num == XWIDGET_MFG_NUM_NONE) || \ | ||
162 | ((hwid2)->mfg_num == XWIDGET_MFG_NUM_NONE) || \ | ||
163 | ((hwid1)->mfg_num == (hwid2)->mfg_num))) | ||
164 | |||
165 | #endif /* !__ASSEMBLY__ */ | ||
166 | |||
167 | #endif /* _ASM_XTALK_XWIDGET_H */ | ||