ixp425_qmgr.h revision 1.1 1 1.1 scw /* $NetBSD: ixp425_qmgr.h,v 1.1 2006/12/10 10:01:49 scw Exp $ */
2 1.1 scw
3 1.1 scw /*-
4 1.1 scw * Copyright (c) 2006 Sam Leffler, Errno Consulting
5 1.1 scw * All rights reserved.
6 1.1 scw *
7 1.1 scw * Redistribution and use in source and binary forms, with or without
8 1.1 scw * modification, are permitted provided that the following conditions
9 1.1 scw * are met:
10 1.1 scw * 1. Redistributions of source code must retain the above copyright
11 1.1 scw * notice, this list of conditions and the following disclaimer,
12 1.1 scw * without modification.
13 1.1 scw * 2. Redistributions in binary form must reproduce at minimum a disclaimer
14 1.1 scw * similar to the "NO WARRANTY" disclaimer below ("Disclaimer") and any
15 1.1 scw * redistribution must be conditioned upon including a substantially
16 1.1 scw * similar Disclaimer requirement for further binary redistribution.
17 1.1 scw *
18 1.1 scw * NO WARRANTY
19 1.1 scw * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
20 1.1 scw * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
21 1.1 scw * LIMITED TO, THE IMPLIED WARRANTIES OF NONINFRINGEMENT, MERCHANTIBILITY
22 1.1 scw * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
23 1.1 scw * THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY,
24 1.1 scw * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
25 1.1 scw * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
26 1.1 scw * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
27 1.1 scw * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
28 1.1 scw * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
29 1.1 scw * THE POSSIBILITY OF SUCH DAMAGES.
30 1.1 scw *
31 1.1 scw * $FreeBSD: src/sys/arm/xscale/ixp425/ixp425_qmgr.h,v 1.1 2006/11/19 23:55:23 sam Exp $
32 1.1 scw */
33 1.1 scw
34 1.1 scw /*-
35 1.1 scw * Copyright (c) 2001-2005, Intel Corporation.
36 1.1 scw * All rights reserved.
37 1.1 scw *
38 1.1 scw * Redistribution and use in source and binary forms, with or without
39 1.1 scw * modification, are permitted provided that the following conditions
40 1.1 scw * are met:
41 1.1 scw * 1. Redistributions of source code must retain the above copyright
42 1.1 scw * notice, this list of conditions and the following disclaimer.
43 1.1 scw * 2. Redistributions in binary form must reproduce the above copyright
44 1.1 scw * notice, this list of conditions and the following disclaimer in the
45 1.1 scw * documentation and/or other materials provided with the distribution.
46 1.1 scw * 3. Neither the name of the Intel Corporation nor the names of its contributors
47 1.1 scw * may be used to endorse or promote products derived from this software
48 1.1 scw * without specific prior written permission.
49 1.1 scw *
50 1.1 scw *
51 1.1 scw * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
52 1.1 scw * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
53 1.1 scw * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
54 1.1 scw * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
55 1.1 scw * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
56 1.1 scw * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
57 1.1 scw * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
58 1.1 scw * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
59 1.1 scw * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
60 1.1 scw * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
61 1.1 scw * SUCH DAMAGE.
62 1.1 scw */
63 1.1 scw
64 1.1 scw #ifndef ARM_XSCALE_IXP425_QMGR_H
65 1.1 scw #define ARM_XSCALE_IXP425_QMGR_H
66 1.1 scw
67 1.1 scw #define IX_QMGR_MAX_NUM_QUEUES 64
68 1.1 scw #define IX_QMGR_MIN_QUEUPP_QID 32
69 1.1 scw
70 1.1 scw #define IX_QMGR_MIN_ENTRY_SIZE_IN_WORDS 16
71 1.1 scw
72 1.1 scw /* Total size of SRAM */
73 1.1 scw #define IX_QMGR_AQM_SRAM_SIZE_IN_BYTES 0x4000
74 1.1 scw
75 1.1 scw #define IX_QMGR_Q_PRIORITY_0 0
76 1.1 scw #define IX_QMGR_Q_PRIORITY_1 1
77 1.1 scw #define IX_QMGR_Q_PRIORITY_2 2
78 1.1 scw #define IX_QMGR_NUM_PRIORITY_LEVELS 3 /* number of priority levels */
79 1.1 scw
80 1.1 scw #define IX_QMGR_Q_STATUS_E_BIT_MASK 0x1 /* Empty */
81 1.1 scw #define IX_QMGR_Q_STATUS_NE_BIT_MASK 0x2 /* Nearly Empty */
82 1.1 scw #define IX_QMGR_Q_STATUS_NF_BIT_MASK 0x4 /* Nearly Full */
83 1.1 scw #define IX_QMGR_Q_STATUS_F_BIT_MASK 0x8 /* Full */
84 1.1 scw #define IX_QMGR_Q_STATUS_UF_BIT_MASK 0x10 /* Underflow */
85 1.1 scw #define IX_QMGR_Q_STATUS_OF_BIT_MASK 0x20 /* Overflow */
86 1.1 scw
87 1.1 scw #define IX_QMGR_Q_SOURCE_ID_E 0 /* Q Empty after last read */
88 1.1 scw #define IX_QMGR_Q_SOURCE_ID_NE 1 /* Q Nearly Empty after last read */
89 1.1 scw #define IX_QMGR_Q_SOURCE_ID_NF 2 /* Q Nearly Full after last write */
90 1.1 scw #define IX_QMGR_Q_SOURCE_ID_F 3 /* Q Full after last write */
91 1.1 scw #define IX_QMGR_Q_SOURCE_ID_NOT_E 4 /* Q !Empty after last write */
92 1.1 scw #define IX_QMGR_Q_SOURCE_ID_NOT_NE 5 /* Q !Nearly Empty after last write */
93 1.1 scw #define IX_QMGR_Q_SOURCE_ID_NOT_NF 6 /* Q !Nearly Full after last read */
94 1.1 scw #define IX_QMGR_Q_SOURCE_ID_NOT_F 7 /* Q !Full after last read */
95 1.1 scw
96 1.1 scw #define IX_QMGR_UNDERFLOW_BIT_OFFSET 0x0 /* underflow bit mask */
97 1.1 scw #define IX_QMGR_OVERFLOW_BIT_OFFSET 0x1 /* overflow bit mask */
98 1.1 scw
99 1.1 scw #define IX_QMGR_QUEACC0_OFFSET 0x0000 /* q 0 access register */
100 1.1 scw #define IX_QMGR_QUEACC_SIZE 0x4/*words*/
101 1.1 scw
102 1.1 scw #define IX_QMGR_QUELOWSTAT0_OFFSET 0x400 /* Q status, q's 0-7 */
103 1.1 scw #define IX_QMGR_QUELOWSTAT1_OFFSET 0x404 /* Q status, q's 8-15 */
104 1.1 scw #define IX_QMGR_QUELOWSTAT2_OFFSET 0x408 /* Q status, q's 16-23 */
105 1.1 scw #define IX_QMGR_QUELOWSTAT3_OFFSET 0x40c /* Q status, q's 24-31 */
106 1.1 scw
107 1.1 scw /* Queue status register Q status bits mask */
108 1.1 scw #define IX_QMGR_QUELOWSTAT_QUE_STS_BITS_MASK 0xF
109 1.1 scw /* Size of queue 0-31 status register */
110 1.1 scw #define IX_QMGR_QUELOWSTAT_SIZE 0x4 /*words*/
111 1.1 scw #define IX_QMGR_QUELOWSTAT_NUM_QUE_PER_WORD 8 /* # status/word */
112 1.1 scw
113 1.1 scw #define IX_QMGR_QUEUOSTAT0_OFFSET 0x410 /* Q UF/OF status, q's 0-15 */
114 1.1 scw #define IX_QMGR_QUEUOSTAT1_OFFSET 0x414 /* Q UF/OF status, q's 16-31 */
115 1.1 scw
116 1.1 scw #define IX_QMGR_QUEUOSTAT_NUM_QUE_PER_WORD 16 /* # UF/OF status/word */
117 1.1 scw
118 1.1 scw #define IX_QMGR_QUEUPPSTAT0_OFFSET 0x418 /* NE status, q's 32-63 */
119 1.1 scw #define IX_QMGR_QUEUPPSTAT1_OFFSET 0x41c /* F status, q's 32-63 */
120 1.1 scw
121 1.1 scw #define IX_QMGR_INT0SRCSELREG0_OFFSET 0x420 /* INT src select, q's 0-7 */
122 1.1 scw #define IX_QMGR_INT0SRCSELREG1_OFFSET 0x424 /* INT src select, q's 8-15 */
123 1.1 scw #define IX_QMGR_INT0SRCSELREG2_OFFSET 0x428 /* INT src select, q's 16-23 */
124 1.1 scw #define IX_QMGR_INT0SRCSELREG3_OFFSET 0x42c /* INT src select, q's 24-31 */
125 1.1 scw
126 1.1 scw #define IX_QMGR_INTSRC_NUM_QUE_PER_WORD 8 /* # INT src select/word */
127 1.1 scw
128 1.1 scw #define IX_QMGR_QUEIEREG0_OFFSET 0x430 /* INT enable, q's 0-31 */
129 1.1 scw #define IX_QMGR_QUEIEREG1_OFFSET 0x434 /* INT enable, q's 32-63 */
130 1.1 scw #define IX_QMGR_QINTREG0_OFFSET 0x438 /* INT status, q's 0-31 */
131 1.1 scw #define IX_QMGR_QINTREG1_OFFSET 0x43c /* INT status, q's 32-63 */
132 1.1 scw
133 1.1 scw #define IX_QMGR_QUECONFIG_BASE_OFFSET 0x2000 /* Q config register, q 0 */
134 1.1 scw
135 1.1 scw #define IX_QMGR_QUECONFIG_SIZE 0x100 /* total size of Q config regs*/
136 1.1 scw
137 1.1 scw #define IX_QMGR_QUEBUFFER_SPACE_OFFSET 0x2100 /* start of SRAM */
138 1.1 scw
139 1.1 scw /* Total bits in a word */
140 1.1 scw #define BITS_PER_WORD 32
141 1.1 scw
142 1.1 scw /* Size of queue buffer space */
143 1.1 scw #define IX_QMGR_QUE_BUFFER_SPACE_SIZE 0x1F00
144 1.1 scw
145 1.1 scw /*
146 1.1 scw * This macro will return the address of the access register for the
147 1.1 scw * queue specified by qId
148 1.1 scw */
149 1.1 scw #define IX_QMGR_Q_ACCESS_ADDR_GET(qId)\
150 1.1 scw (((qId) * (IX_QMGR_QUEACC_SIZE * sizeof(uint32_t)))\
151 1.1 scw + IX_QMGR_QUEACC0_OFFSET)
152 1.1 scw
153 1.1 scw /*
154 1.1 scw * Bit location of bit-3 of INT0SRCSELREG0 register to enabled
155 1.1 scw * sticky interrupt register.
156 1.1 scw */
157 1.1 scw #define IX_QMGR_INT0SRCSELREG0_BIT3 3
158 1.1 scw
159 1.1 scw /*
160 1.1 scw * These defines are the bit offsets of the various fields of
161 1.1 scw * the queue configuration register.
162 1.1 scw */
163 1.1 scw #if 0
164 1.1 scw #define IX_QMGR_Q_CONFIG_WRPTR_OFFSET 0x00
165 1.1 scw #define IX_QMGR_Q_CONFIG_RDPTR_OFFSET 0x07
166 1.1 scw #define IX_QMGR_Q_CONFIG_BADDR_OFFSET 0x0E
167 1.1 scw #define IX_QMGR_Q_CONFIG_ESIZE_OFFSET 0x16
168 1.1 scw #define IX_QMGR_Q_CONFIG_BSIZE_OFFSET 0x18
169 1.1 scw #define IX_QMGR_Q_CONFIG_NE_OFFSET 0x1A
170 1.1 scw #define IX_QMGR_Q_CONFIG_NF_OFFSET 0x1D
171 1.1 scw
172 1.1 scw #define IX_QMGR_NE_NF_CLEAR_MASK 0x03FFFFFF
173 1.1 scw #define IX_QMGR_NE_MASK 0x7
174 1.1 scw #define IX_QMGR_NF_MASK 0x7
175 1.1 scw #define IX_QMGR_SIZE_MASK 0x3
176 1.1 scw #define IX_QMGR_ENTRY_SIZE_MASK 0x3
177 1.1 scw #define IX_QMGR_BADDR_MASK 0x003FC000
178 1.1 scw #define IX_QMGR_RDPTR_MASK 0x7F
179 1.1 scw #define IX_QMGR_WRPTR_MASK 0x7F
180 1.1 scw #define IX_QMGR_RDWRPTR_MASK 0x00003FFF
181 1.1 scw #else
182 1.1 scw #define IX_QMGR_Q_CONFIG_WRPTR_OFFSET 0
183 1.1 scw #define IX_QMGR_WRPTR_MASK 0x7F
184 1.1 scw #define IX_QMGR_Q_CONFIG_RDPTR_OFFSET 7
185 1.1 scw #define IX_QMGR_RDPTR_MASK 0x7F
186 1.1 scw #define IX_QMGR_Q_CONFIG_BADDR_OFFSET 14
187 1.1 scw #define IX_QMGR_BADDR_MASK 0x3FC000 /* XXX not used */
188 1.1 scw #define IX_QMGR_Q_CONFIG_ESIZE_OFFSET 22
189 1.1 scw #define IX_QMGR_ENTRY_SIZE_MASK 0x3
190 1.1 scw #define IX_QMGR_Q_CONFIG_BSIZE_OFFSET 24
191 1.1 scw #define IX_QMGR_SIZE_MASK 0x3
192 1.1 scw #define IX_QMGR_Q_CONFIG_NE_OFFSET 26
193 1.1 scw #define IX_QMGR_NE_MASK 0x7
194 1.1 scw #define IX_QMGR_Q_CONFIG_NF_OFFSET 29
195 1.1 scw #define IX_QMGR_NF_MASK 0x7
196 1.1 scw
197 1.1 scw #define IX_QMGR_RDWRPTR_MASK 0x00003FFF
198 1.1 scw #define IX_QMGR_NE_NF_CLEAR_MASK 0x03FFFFFF
199 1.1 scw #endif
200 1.1 scw
201 1.1 scw #define IX_QMGR_BASE_ADDR_16_WORD_ALIGN 64
202 1.1 scw #define IX_QMGR_BASE_ADDR_16_WORD_SHIFT 6
203 1.1 scw
204 1.1 scw #define IX_QMGR_AQM_ADDRESS_SPACE_SIZE_IN_WORDS 0x1000
205 1.1 scw
206 1.1 scw /* Base address of AQM SRAM */
207 1.1 scw #define IX_QMGR_AQM_SRAM_BASE_ADDRESS_OFFSET \
208 1.1 scw ((IX_QMGR_QUECONFIG_BASE_OFFSET) + (IX_QMGR_QUECONFIG_SIZE))
209 1.1 scw
210 1.1 scw /* Min buffer size used for generating buffer size in QUECONFIG */
211 1.1 scw #define IX_QMGR_MIN_BUFFER_SIZE 16
212 1.1 scw
213 1.1 scw /* Reset values of QMgr hardware registers */
214 1.1 scw #define IX_QMGR_QUELOWSTAT_RESET_VALUE 0x33333333
215 1.1 scw #define IX_QMGR_QUEUOSTAT_RESET_VALUE 0x00000000
216 1.1 scw #define IX_QMGR_QUEUPPSTAT0_RESET_VALUE 0xFFFFFFFF
217 1.1 scw #define IX_QMGR_QUEUPPSTAT1_RESET_VALUE 0x00000000
218 1.1 scw #define IX_QMGR_INT0SRCSELREG_RESET_VALUE 0x00000000
219 1.1 scw #define IX_QMGR_QUEIEREG_RESET_VALUE 0x00000000
220 1.1 scw #define IX_QMGR_QINTREG_RESET_VALUE 0xFFFFFFFF
221 1.1 scw #define IX_QMGR_QUECONFIG_RESET_VALUE 0x00000000
222 1.1 scw
223 1.1 scw #define IX_QMGR_QUELOWSTAT_BITS_PER_Q \
224 1.1 scw (BITS_PER_WORD/IX_QMGR_QUELOWSTAT_NUM_QUE_PER_WORD)
225 1.1 scw
226 1.1 scw #define IX_QMGR_QUELOWSTAT_QID_MASK 0x7
227 1.1 scw #define IX_QMGR_Q_CONFIG_ADDR_GET(qId)\
228 1.1 scw (((qId) * sizeof(uint32_t)) + IX_QMGR_QUECONFIG_BASE_OFFSET)
229 1.1 scw
230 1.1 scw #define IX_QMGR_ENTRY1_OFFSET 0
231 1.1 scw #define IX_QMGR_ENTRY2_OFFSET 1
232 1.1 scw #define IX_QMGR_ENTRY4_OFFSET 3
233 1.1 scw
234 1.1 scw #ifdef __NetBSD__
235 1.1 scw void *ixpqmgr_init(bus_space_tag_t);
236 1.1 scw #endif
237 1.1 scw
238 1.1 scw int ixpqmgr_qconfig(int qId, int qSizeInWords, int ne, int nf, int srcSel,
239 1.1 scw void (*cb)(int, void *), void *cbarg);
240 1.1 scw int ixpqmgr_qwrite(int qId, uint32_t entry);
241 1.1 scw int ixpqmgr_qread(int qId, uint32_t *entry);
242 1.1 scw int ixpqmgr_qreadm(int qId, uint32_t n, uint32_t *p);
243 1.1 scw uint32_t ixpqmgr_getqstatus(int qId);
244 1.1 scw uint32_t ixpqmgr_getqconfig(int qId);
245 1.1 scw void ixpqmgr_notify_enable(int qId, int srcSel);
246 1.1 scw void ixpqmgr_notify_disable(int qId);
247 1.1 scw void ixpqmgr_dump(void);
248 1.1 scw
249 1.1 scw #endif /* ARM_XSCALE_IXP425_QMGR_H */
250