1 #ifndef CYGONCE_HAL_HAL_HWIO_H
2 #define CYGONCE_HAL_HAL_HWIO_H
4 /*=============================================================================
8 // HAL Support for IO to platform-specific devices
10 //=============================================================================
11 //####ECOSGPLCOPYRIGHTBEGIN####
12 // -------------------------------------------
13 // This file is part of eCos, the Embedded Configurable Operating System.
14 // Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
16 // eCos is free software; you can redistribute it and/or modify it under
17 // the terms of the GNU General Public License as published by the Free
18 // Software Foundation; either version 2 or (at your option) any later version.
20 // eCos is distributed in the hope that it will be useful, but WITHOUT ANY
21 // WARRANTY; without even the implied warranty of MERCHANTABILITY or
22 // FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
25 // You should have received a copy of the GNU General Public License along
26 // with eCos; if not, write to the Free Software Foundation, Inc.,
27 // 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
29 // As a special exception, if other files instantiate templates or use macros
30 // or inline functions from this file, or you compile this file and link it
31 // with other works to produce a work based on this file, this file does not
32 // by itself cause the resulting work to be covered by the GNU General Public
33 // License. However the source code for this file must still be made available
34 // in accordance with section (3) of the GNU General Public License.
36 // This exception does not invalidate any other reasons why a work based on
37 // this file might be covered by the GNU General Public License.
39 // Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
40 // at http://sources.redhat.com/ecos/ecos-license/
41 // -------------------------------------------
42 //####ECOSGPLCOPYRIGHTEND####
43 //=============================================================================
44 //#####DESCRIPTIONBEGIN####
49 // Purpose: HAL Support for IO to platform-specific devices
50 // Description: Macros to access the 86940 SPARClite companion chip
51 // Usage: #include <cyg/hal/hal_hwio.h>
53 //####DESCRIPTIONEND####
55 //===========================================================================*/
57 #include <pkgconf/system.h>
58 #include <pkgconf/hal.h>
59 #include <pkgconf/hal_sparclite.h>
60 #include <pkgconf/hal_sparclite_sleb.h>
62 #include <cyg/infra/cyg_type.h>
64 /*---------------------------------------------------------------------------*/
65 /* MB86940 flags and the like */
67 /* Interrupt trigger modes. */
68 #define HAL_SPARC_86940_TRIG_LEVEL_H 0 /* trigger on high level */
69 #define HAL_SPARC_86940_TRIG_LEVEL_L 1 /* trigger on low level */
70 #define HAL_SPARC_86940_TRIG_EDGE_H 2 /* trigger on rising edge */
71 #define HAL_SPARC_86940_TRIG_EDGE_L 3 /* trigger on falling edge */
73 /* Timer prescaler register values */
74 #define HAL_SPARC_86940_PRS_EXTCLK 0x8000
75 #define HAL_SPARC_86940_PRS_ODIV1 (0<<8)
76 #define HAL_SPARC_86940_PRS_ODIV2 (1<<8)
77 #define HAL_SPARC_86940_PRS_ODIV4 (2<<8)
78 #define HAL_SPARC_86940_PRS_ODIV8 (3<<8)
79 #define HAL_SPARC_86940_PRS_ODIV16 (4<<8)
80 #define HAL_SPARC_86940_PRS_ODIV32 (5<<8)
81 #define HAL_SPARC_86940_PRS_ODIV64 (6<<8)
82 #define HAL_SPARC_86940_PRS_ODIV128 (7<<8)
84 /* Timer control register values */
85 #define HAL_SPARC_86940_TCR_CE (1<<11)
86 #define HAL_SPARC_86940_TCR_CLKINT (0<<9)
87 #define HAL_SPARC_86940_TCR_CLKEXT (1<<9)
88 #define HAL_SPARC_86940_TCR_CLKPRS (2<<9)
89 #define HAL_SPARC_86940_TCR_CLKRSVD (3<<9)
90 #define HAL_SPARC_86940_TCR_OUTSAME (0<<7)
91 #define HAL_SPARC_86940_TCR_OUTHIGH (1<<7)
92 #define HAL_SPARC_86940_TCR_OUTLOW (2<<7)
93 #define HAL_SPARC_86940_TCR_OUTC3 (3<<7)
94 #define HAL_SPARC_86940_TCR_INV (1<<6)
95 #define HAL_SPARC_86940_TCR_PER_INT (0<<3)
96 #define HAL_SPARC_86940_TCR_TO_INT (1<<3)
97 #define HAL_SPARC_86940_TCR_SQWAVE (2<<3)
98 #define HAL_SPARC_86940_TCR_SW_WATCH (3<<3)
99 #define HAL_SPARC_86940_TCR_HW_WATCH (4<<3)
100 #define HAL_SPARC_86940_TCR_LEVEL_L 0
101 #define HAL_SPARC_86940_TCR_LEVEL_H 1
102 #define HAL_SPARC_86940_TCR_EDGE_H 2
103 #define HAL_SPARC_86940_TCR_EDGE_L 3
104 #define HAL_SPARC_86940_TCR_EDGE 4
106 /* serial mode register values */
107 #define HAL_SPARC_86940_SER_STOP0 (0<<6)
108 #define HAL_SPARC_86940_SER_STOP1 (1<<6)
109 #define HAL_SPARC_86940_SER_STOP1_5 (2<<6)
110 #define HAL_SPARC_86940_SER_STOP2 (3<<6)
111 #define HAL_SPARC_86940_SER_NO_PARITY (0<<4)
112 #define HAL_SPARC_86940_SER_ODD_PARITY (1<<4)
113 #define HAL_SPARC_86940_SER_EVEN_PARITY (3<<4)
114 #define HAL_SPARC_86940_SER_5BITS (0<<2)
115 #define HAL_SPARC_86940_SER_6BITS (1<<2)
116 #define HAL_SPARC_86940_SER_7BITS (2<<2)
117 #define HAL_SPARC_86940_SER_8BITS (3<<2)
118 #define HAL_SPARC_86940_SER_MODE_SYNCH 0
119 #define HAL_SPARC_86940_SER_DIV1_CLK 1
120 #define HAL_SPARC_86940_SER_DIV16_CLK 2
121 #define HAL_SPARC_86940_SER_DIV64_CLK 3
123 /* serial command register (asynch) */
124 #define HAL_SPARC_86940_SER_CMD_EHM (1<<7)
125 #define HAL_SPARC_86940_SER_CMD_IRST (1<<6)
126 #define HAL_SPARC_86940_SER_CMD_RTS (1<<5)
127 #define HAL_SPARC_86940_SER_CMD_EFR (1<<4)
128 #define HAL_SPARC_86940_SER_CMD_BREAK (1<<3)
129 #define HAL_SPARC_86940_SER_CMD_RXEN (1<<2)
130 #define HAL_SPARC_86940_SER_CMD_DTR (1<<1)
131 #define HAL_SPARC_86940_SER_CMD_TXEN (1<<0)
133 /* serial status register */
134 #define HAL_SPARC_86940_SER_STAT_DSR (1<<7)
135 #define HAL_SPARC_86940_SER_STAT_BREAK (1<<6)
136 #define HAL_SPARC_86940_SER_STAT_FERR (1<<5)
137 #define HAL_SPARC_86940_SER_STAT_OERR (1<<4)
138 #define HAL_SPARC_86940_SER_STAT_PERR (1<<3)
139 #define HAL_SPARC_86940_SER_STAT_TXEMP (1<<2)
140 #define HAL_SPARC_86940_SER_STAT_RXRDY (1<<1)
141 #define HAL_SPARC_86940_SER_STAT_TXRDY (1<<0)
143 #define HAL_SPARC_86940_CHIP_ASI 4
144 #define HAL_SPARC_86940_CHIP_BASE 0x10000000
145 #define HAL_SPARC_86940_REGADDR_SHIFT 2
146 #define HAL_SPARC_86940_REGVAL_SHIFT 16
148 /*---------------------------------------------------------------------------*/
149 /* Register addresses */
151 // The "interesting" IO parts are in Address Space Four:
152 #define HAL_SPARC_ASI_4_READ( addr, res ) \
159 #define HAL_SPARC_ASI_4_WRITE( addr, val ) \
163 : "r"(val),"r"(addr) \
166 #define HAL_SPARC_86940_BASE (0x10000000) // in ASI 4
168 // The 86940 is connected to the upper 16 bits!
169 #define HAL_SPARC_86940_READ( reg, result ) CYG_MACRO_START \
171 HAL_SPARC_ASI_4_READ( reg + HAL_SPARC_86940_BASE, hires ); \
176 // THIS IS ONLY HERE FOR DEBUGGING:
177 // The 86940 is connected to the upper 16 bits!
178 // And seems to be an unreliable deprecated thing...
179 // so read it 3 times and believe the majority.
180 #define HAL_SPARC_86940_READ3( reg, result ) CYG_MACRO_START \
184 HAL_SPARC_ASI_4_READ( reg + HAL_SPARC_86940_BASE, hires1 ); \
185 HAL_SPARC_ASI_4_READ( reg + HAL_SPARC_86940_BASE, hires2 ); \
186 HAL_SPARC_ASI_4_READ( reg + HAL_SPARC_86940_BASE, hires3 ); \
187 result = ((hires1&hires2)|(hires1&hires3)|(hires2&hires3)) >> 16; \
190 #define HAL_SPARC_86940_WRITE( reg, value ) CYG_MACRO_START \
191 cyg_uint32 hival = (value) << 16; \
192 HAL_SPARC_ASI_4_WRITE( reg + HAL_SPARC_86940_BASE, hival ); \
195 // Registers are at word offsets
196 #define HAL_SPARC_86940_REG_SDTR0_TXDATA ( 0x08 * 4 )
197 #define HAL_SPARC_86940_REG_SDTR0_RXDATA ( 0x08 * 4 )
198 #define HAL_SPARC_86940_REG_SDTR0_STAT ( 0x09 * 4 )
199 #define HAL_SPARC_86940_REG_SDTR0_CTRL ( 0x09 * 4 )
200 #define HAL_SPARC_86940_REG_SDTR1_TXDATA ( 0x0c * 4 )
201 #define HAL_SPARC_86940_REG_SDTR1_RXDATA ( 0x0c * 4 )
202 #define HAL_SPARC_86940_REG_SDTR1_STAT ( 0x0d * 4 )
203 #define HAL_SPARC_86940_REG_SDTR1_CTRL ( 0x0d * 4 )
205 #define HAL_SPARC_86940_REG_PRS0 ( 0x10 * 4 )
206 #define HAL_SPARC_86940_REG_TCR0 ( 0x11 * 4 )
207 #define HAL_SPARC_86940_REG_RELOAD0 ( 0x12 * 4 )
208 #define HAL_SPARC_86940_REG_CNT0 ( 0x13 * 4 )
209 #define HAL_SPARC_86940_REG_PRS1 ( 0x14 * 4 )
210 #define HAL_SPARC_86940_REG_TCR1 ( 0x15 * 4 )
211 #define HAL_SPARC_86940_REG_RELOAD1 ( 0x16 * 4 )
212 #define HAL_SPARC_86940_REG_CNT1 ( 0x17 * 4 )
213 #define HAL_SPARC_86940_REG_TCR2 ( 0x19 * 4 )
214 #define HAL_SPARC_86940_REG_RELOAD2 ( 0x1A * 4 )
215 #define HAL_SPARC_86940_REG_CNT2 ( 0x1B * 4 )
216 #define HAL_SPARC_86940_REG_TCR3 ( 0x1D * 4 )
217 #define HAL_SPARC_86940_REG_RELOAD3 ( 0x1E * 4 )
218 #define HAL_SPARC_86940_REG_CNT3 ( 0x1F * 4 )
220 // Glue together to access them neatly
221 #define HAL_SPARC_86940_SDTR0_TXDATA_WRITE( v ) \
222 HAL_SPARC_86940_WRITE( HAL_SPARC_86940_REG_SDTR0_TXDATA, v )
223 #define HAL_SPARC_86940_SDTR0_RXDATA_READ( r ) \
224 HAL_SPARC_86940_READ( HAL_SPARC_86940_REG_SDTR0_RXDATA, r )
226 #define HAL_SPARC_86940_SDTR0_STAT_READ( r ) \
227 HAL_SPARC_86940_READ( HAL_SPARC_86940_REG_SDTR0_STAT, r )
228 #define HAL_SPARC_86940_SDTR0_CTRL_WRITE( v ) \
229 HAL_SPARC_86940_WRITE( HAL_SPARC_86940_REG_SDTR0_CTRL, v )
231 #define HAL_SPARC_86940_SDTR1_TXDATA_WRITE( v ) \
232 HAL_SPARC_86940_WRITE( HAL_SPARC_86940_REG_SDTR1_TXDATA, v )
233 #define HAL_SPARC_86940_SDTR1_RXDATA_READ( r ) \
234 HAL_SPARC_86940_READ( HAL_SPARC_86940_REG_SDTR1_RXDATA, r )
236 #define HAL_SPARC_86940_SDTR1_STAT_READ( r ) \
237 HAL_SPARC_86940_READ( HAL_SPARC_86940_REG_SDTR1_STAT, r )
238 #define HAL_SPARC_86940_SDTR1_CTRL_WRITE( v ) \
239 HAL_SPARC_86940_WRITE( HAL_SPARC_86940_REG_SDTR1_CTRL, v )
241 #define HAL_SPARC_86940_PRS0_READ( r ) \
242 HAL_SPARC_86940_READ( HAL_SPARC_86940_REG_PRS0, r )
243 #define HAL_SPARC_86940_PRS0_WRITE( v ) \
244 HAL_SPARC_86940_WRITE( HAL_SPARC_86940_REG_PRS0, v )
246 #define HAL_SPARC_86940_TCR0_READ( r ) \
247 HAL_SPARC_86940_READ( HAL_SPARC_86940_REG_TCR0, r )
248 #define HAL_SPARC_86940_TCR0_WRITE( v ) \
249 HAL_SPARC_86940_WRITE( HAL_SPARC_86940_REG_TCR0, v )
251 #define HAL_SPARC_86940_RELOAD0_READ( r ) \
252 HAL_SPARC_86940_READ( HAL_SPARC_86940_REG_RELOAD0, r )
253 #define HAL_SPARC_86940_RELOAD0_WRITE( v ) \
254 HAL_SPARC_86940_WRITE( HAL_SPARC_86940_REG_RELOAD0, v )
256 #define HAL_SPARC_86940_CNT0_READ( r ) \
257 HAL_SPARC_86940_READ( HAL_SPARC_86940_REG_CNT0, r )
258 #define HAL_SPARC_86940_CNT0_WRITE( v ) \
259 HAL_SPARC_86940_WRITE( HAL_SPARC_86940_REG_CNT0, v )
261 #define HAL_SPARC_86940_PRS1_READ( r ) \
262 HAL_SPARC_86940_READ( HAL_SPARC_86940_REG_PRS1, r )
263 #define HAL_SPARC_86940_PRS1_WRITE( v ) \
264 HAL_SPARC_86940_WRITE( HAL_SPARC_86940_REG_PRS1, v )
266 #define HAL_SPARC_86940_TCR1_READ( r ) \
267 HAL_SPARC_86940_READ( HAL_SPARC_86940_REG_TCR1, r )
268 #define HAL_SPARC_86940_TCR1_WRITE( v ) \
269 HAL_SPARC_86940_WRITE( HAL_SPARC_86940_REG_TCR1, v )
271 #define HAL_SPARC_86940_RELOAD1_READ( r ) \
272 HAL_SPARC_86940_READ( HAL_SPARC_86940_REG_RELOAD1, r )
273 #define HAL_SPARC_86940_RELOAD1_WRITE( v ) \
274 HAL_SPARC_86940_WRITE( HAL_SPARC_86940_REG_RELOAD1, v )
276 #define HAL_SPARC_86940_CNT1_READ( r ) \
277 HAL_SPARC_86940_READ( HAL_SPARC_86940_REG_CNT1, r )
278 #define HAL_SPARC_86940_CNT1_WRITE( v ) \
279 HAL_SPARC_86940_WRITE( HAL_SPARC_86940_REG_CNT1, v )
281 #define HAL_SPARC_86940_TCR2_READ( r ) \
282 HAL_SPARC_86940_READ( HAL_SPARC_86940_REG_TCR2, r )
283 #define HAL_SPARC_86940_TCR2_WRITE( v ) \
284 HAL_SPARC_86940_WRITE( HAL_SPARC_86940_REG_TCR2, v )
286 #define HAL_SPARC_86940_RELOAD2_READ( r ) \
287 HAL_SPARC_86940_READ( HAL_SPARC_86940_REG_RELOAD2, r )
288 #define HAL_SPARC_86940_RELOAD2_WRITE( v ) \
289 HAL_SPARC_86940_WRITE( HAL_SPARC_86940_REG_RELOAD2, v )
291 #define HAL_SPARC_86940_CNT2_READ( r ) \
292 HAL_SPARC_86940_READ( HAL_SPARC_86940_REG_CNT2, r )
293 #define HAL_SPARC_86940_CNT2_WRITE( v ) \
294 HAL_SPARC_86940_WRITE( HAL_SPARC_86940_REG_CNT2, v )
296 #define HAL_SPARC_86940_TCR3_READ( r ) \
297 HAL_SPARC_86940_READ( HAL_SPARC_86940_REG_TCR3, r )
298 #define HAL_SPARC_86940_TCR3_WRITE( v ) \
299 HAL_SPARC_86940_WRITE( HAL_SPARC_86940_REG_TCR3, v )
301 #define HAL_SPARC_86940_RELOAD3_READ( r ) \
302 HAL_SPARC_86940_READ( HAL_SPARC_86940_REG_RELOAD3, r )
303 #define HAL_SPARC_86940_RELOAD3_WRITE( v ) \
304 HAL_SPARC_86940_WRITE( HAL_SPARC_86940_REG_RELOAD3, v )
306 #define HAL_SPARC_86940_CNT3_READ( r ) \
307 HAL_SPARC_86940_READ( HAL_SPARC_86940_REG_CNT3, r )
308 #define HAL_SPARC_86940_CNT3_WRITE( v ) \
309 HAL_SPARC_86940_WRITE( HAL_SPARC_86940_REG_CNT3, v )
311 /*---------------------------------------------------------------------------*/
312 /* end of hal_hwio.h */
313 #endif /* CYGONCE_HAL_HAL_HWIO_H */