annotate packages/hal/arm/xscale/ixp425/current/src/ixp425_diag.c @ 2729:74dbf4c3f2e1 after-copyright-change-20090129

Update all copyright banners to reflect FSF ownership; fix and improve licence text.
author jlarmour
date Thu, 29 Jan 2009 17:47:46 +0000
parents d6cfbed66cf9
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
835
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
1 /*=============================================================================
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
2 //
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
3 // ixp425_diag.c
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
4 //
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
5 // HAL diagnostic output code
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
6 //
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
7 //=============================================================================
2729
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 835
diff changeset
8 // ####ECOSGPLCOPYRIGHTBEGIN####
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 835
diff changeset
9 // -------------------------------------------
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 835
diff changeset
10 // This file is part of eCos, the Embedded Configurable Operating System.
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 835
diff changeset
11 // Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
835
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
12 //
2729
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 835
diff changeset
13 // eCos is free software; you can redistribute it and/or modify it under
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 835
diff changeset
14 // the terms of the GNU General Public License as published by the Free
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 835
diff changeset
15 // Software Foundation; either version 2 or (at your option) any later
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 835
diff changeset
16 // version.
835
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
17 //
2729
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 835
diff changeset
18 // eCos is distributed in the hope that it will be useful, but WITHOUT
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 835
diff changeset
19 // ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 835
diff changeset
20 // FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 835
diff changeset
21 // for more details.
835
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
22 //
2729
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 835
diff changeset
23 // You should have received a copy of the GNU General Public License
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 835
diff changeset
24 // along with eCos; if not, write to the Free Software Foundation, Inc.,
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 835
diff changeset
25 // 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
835
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
26 //
2729
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 835
diff changeset
27 // As a special exception, if other files instantiate templates or use
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 835
diff changeset
28 // macros or inline functions from this file, or you compile this file
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 835
diff changeset
29 // and link it with other works to produce a work based on this file,
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 835
diff changeset
30 // this file does not by itself cause the resulting work to be covered by
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 835
diff changeset
31 // the GNU General Public License. However the source code for this file
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 835
diff changeset
32 // must still be made available in accordance with section (3) of the GNU
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 835
diff changeset
33 // General Public License v2.
835
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
34 //
2729
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 835
diff changeset
35 // This exception does not invalidate any other reasons why a work based
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 835
diff changeset
36 // on this file might be covered by the GNU General Public License.
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 835
diff changeset
37 // -------------------------------------------
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 835
diff changeset
38 // ####ECOSGPLCOPYRIGHTEND####
835
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
39 //=============================================================================
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
40 //#####DESCRIPTIONBEGIN####
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
41 //
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
42 // Author(s): msalter
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
43 // Contributors:msalter
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
44 // Date: 2002-12-08
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
45 // Purpose: HAL diagnostic output
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
46 // Description: Implementations of HAL diagnostic output support.
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
47 //
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
48 //####DESCRIPTIONEND####
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
49 //
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
50 //===========================================================================*/
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
51
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
52 #include <pkgconf/hal.h>
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
53 #include CYGBLD_HAL_VARIANT_H // Variant specific configuration
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
54 #include CYGBLD_HAL_PLATFORM_H // Platform specific configuration
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
55
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
56 #include <cyg/infra/cyg_type.h> // base types
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
57 #include <cyg/infra/cyg_trac.h> // tracing macros
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
58 #include <cyg/infra/cyg_ass.h> // assertion macros
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
59
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
60 #include <cyg/hal/hal_arch.h> // basic machine info
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
61 #include <cyg/hal/hal_intr.h> // interrupt macros
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
62 #include <cyg/hal/hal_io.h> // IO macros
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
63 #include <cyg/hal/hal_diag.h>
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
64 #include <cyg/hal/drv_api.h>
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
65 #include <cyg/hal/hal_if.h> // interface API
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
66 #include <cyg/hal/hal_misc.h> // Helper functions
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
67
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
68 #if !defined(CYGSEM_HAL_IXP425_PLF_USES_UART1) && !defined(CYGSEM_HAL_IXP425_PLF_USES_UART2)
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
69 #define IXP425_NUM_UARTS 0
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
70 #elif defined(CYGSEM_HAL_IXP425_PLF_USES_UART1) && defined(CYGSEM_HAL_IXP425_PLF_USES_UART2)
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
71 #define IXP425_NUM_UARTS 2
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
72 #else
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
73 #define IXP425_NUM_UARTS 1
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
74 #endif
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
75
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
76 #if IXP425_NUM_UARTS > 0
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
77
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
78 /*---------------------------------------------------------------------------*/
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
79 /* 16550 compatible UARTS */
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
80
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
81 // Define the serial registers.
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
82 #define CYG_DEV_RBR 0x00 // receiver buffer register, read, dlab = 0
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
83 #define CYG_DEV_THR 0x00 // transmitter holding register, write, dlab = 0
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
84 #define CYG_DEV_DLL 0x00 // divisor latch (LS), read/write, dlab = 1
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
85 #define CYG_DEV_IER 0x01 // interrupt enable register, read/write, dlab = 0
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
86 #define CYG_DEV_DLM 0x01 // divisor latch (MS), read/write, dlab = 1
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
87 #define CYG_DEV_IIR 0x02 // interrupt identification register, read, dlab = 0
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
88 #define CYG_DEV_FCR 0x02 // fifo control register, write, dlab = 0
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
89 #define CYG_DEV_LCR 0x03 // line control register, write
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
90 #define CYG_DEV_MCR 0x04 // modem control register, write
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
91 #define CYG_DEV_LSR 0x05 // line status register, read
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
92 #define CYG_DEV_MSR 0x06 // modem status register, read
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
93 #define CYG_DEV_SCR 0x07 // scratch pad register
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
94
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
95 // Interrupt Enable Register
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
96 #define SIO_IER_RCV 0x01
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
97 #define SIO_IER_XMT 0x02
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
98 #define SIO_IER_LS 0x04
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
99 #define SIO_IER_MS 0x08
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
100 #define SIO_IER_UUE 0x40 // UART Unit Enable
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
101
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
102 // The line status register bits.
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
103 #define SIO_LSR_DR 0x01 // data ready
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
104 #define SIO_LSR_OE 0x02 // overrun error
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
105 #define SIO_LSR_PE 0x04 // parity error
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
106 #define SIO_LSR_FE 0x08 // framing error
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
107 #define SIO_LSR_BI 0x10 // break interrupt
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
108 #define SIO_LSR_THRE 0x20 // transmitter holding register empty
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
109 #define SIO_LSR_TEMT 0x40 // transmitter register empty
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
110 #define SIO_LSR_ERR 0x80 // any error condition
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
111
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
112 // The modem status register bits.
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
113 #define SIO_MSR_DCTS 0x01 // delta clear to send
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
114 #define SIO_MSR_DDSR 0x02 // delta data set ready
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
115 #define SIO_MSR_TERI 0x04 // trailing edge ring indicator
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
116 #define SIO_MSR_DDCD 0x08 // delta data carrier detect
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
117 #define SIO_MSR_CTS 0x10 // clear to send
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
118 #define SIO_MSR_DSR 0x20 // data set ready
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
119 #define SIO_MSR_RI 0x40 // ring indicator
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
120 #define SIO_MSR_DCD 0x80 // data carrier detect
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
121
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
122 // The line control register bits.
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
123 #define SIO_LCR_WLS0 0x01 // word length select bit 0
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
124 #define SIO_LCR_WLS1 0x02 // word length select bit 1
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
125 #define SIO_LCR_STB 0x04 // number of stop bits
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
126 #define SIO_LCR_PEN 0x08 // parity enable
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
127 #define SIO_LCR_EPS 0x10 // even parity select
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
128 #define SIO_LCR_SP 0x20 // stick parity
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
129 #define SIO_LCR_SB 0x40 // set break
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
130 #define SIO_LCR_DLAB 0x80 // divisor latch access bit
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
131
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
132 // Modem Control Register
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
133 #define SIO_MCR_DTR 0x01
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
134 #define SIO_MCR_RTS 0x02
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
135 #define SIO_MCR_OUT1 0x04
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
136 #define SIO_MCR_OUT2 0x08
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
137 #define SIO_MCR_LOOP 0x10
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
138 #define SIO_MCR_AFE 0x20
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
139
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
140 #define UART1_BASE 0xC8000000
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
141 #define UART2_BASE 0xC8001000
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
142
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
143 //-----------------------------------------------------------------------------
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
144 typedef struct {
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
145 cyg_uint32* base;
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
146 cyg_int32 msec_timeout;
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
147 int isr_vector;
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
148 cyg_int32 baud_rate;
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
149 } channel_data_t;
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
150
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
151
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
152 //-----------------------------------------------------------------------------
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
153 // Based on 14.7456 MHz xtal
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
154 static int
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
155 set_baud( channel_data_t *chan )
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
156 {
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
157 cyg_uint32* base = chan->base;
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
158 cyg_uint16 div = 921600 / chan->baud_rate;
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
159 cyg_uint32 lcr;
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
160
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
161 HAL_READ_UINT32(base+CYG_DEV_LCR, lcr);
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
162 HAL_WRITE_UINT32(base+CYG_DEV_LCR, lcr|SIO_LCR_DLAB);
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
163 HAL_WRITE_UINT32(base+CYG_DEV_DLL, div & 0xff);
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
164 HAL_WRITE_UINT32(base+CYG_DEV_DLM, (div >> 8) & 0xff);
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
165 HAL_WRITE_UINT32(base+CYG_DEV_LCR, lcr);
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
166 return 1;
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
167 }
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
168
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
169 static void
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
170 cyg_hal_plf_serial_init_channel(void* __ch_data)
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
171 {
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
172 cyg_uint32* base = ((channel_data_t*)__ch_data)->base;
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
173 channel_data_t* chan = (channel_data_t*)__ch_data;
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
174
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
175 HAL_WRITE_UINT32(chan->base+CYG_DEV_IER, SIO_IER_UUE);
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
176
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
177 // 8-1-no parity.
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
178 HAL_WRITE_UINT32(base+CYG_DEV_LCR, SIO_LCR_WLS0 | SIO_LCR_WLS1);
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
179 chan->baud_rate = CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_BAUD;
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
180 set_baud( chan );
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
181 HAL_WRITE_UINT32(base+CYG_DEV_FCR, 0x07); // Enable & clear FIFO
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
182 HAL_WRITE_UINT32(base+CYG_DEV_MCR, SIO_MCR_OUT2); // Enable interrupt to core
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
183 }
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
184
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
185 void
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
186 cyg_hal_plf_serial_putc(void *__ch_data, char c)
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
187 {
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
188 cyg_uint32* base = ((channel_data_t*)__ch_data)->base;
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
189 cyg_uint32 lsr, val;
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
190 CYGARC_HAL_SAVE_GP();
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
191
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
192 do {
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
193 HAL_READ_UINT32(base+CYG_DEV_LSR, lsr);
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
194 } while ((lsr & SIO_LSR_THRE) == 0);
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
195
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
196 val = c;
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
197 HAL_WRITE_UINT32(base+CYG_DEV_THR, val);
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
198
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
199 CYGARC_HAL_RESTORE_GP();
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
200 }
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
201
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
202 static cyg_bool
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
203 cyg_hal_plf_serial_getc_nonblock(void* __ch_data, cyg_uint8* ch)
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
204 {
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
205 cyg_uint32* base = ((channel_data_t*)__ch_data)->base;
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
206 cyg_uint32 lsr, val;
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
207
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
208 HAL_READ_UINT32(base+CYG_DEV_LSR, lsr);
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
209 if ((lsr & SIO_LSR_DR) == 0)
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
210 return false;
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
211
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
212 HAL_READ_UINT32(base+CYG_DEV_RBR, val);
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
213 *ch = val;
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
214
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
215 return true;
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
216 }
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
217
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
218 cyg_uint8
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
219 cyg_hal_plf_serial_getc(void* __ch_data)
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
220 {
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
221 cyg_uint8 ch;
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
222 CYGARC_HAL_SAVE_GP();
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
223
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
224 while(!cyg_hal_plf_serial_getc_nonblock(__ch_data, &ch));
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
225
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
226 CYGARC_HAL_RESTORE_GP();
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
227 return ch;
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
228 }
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
229
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
230 static channel_data_t plf_ser_channels[] = {
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
231 #if defined(CYGSEM_HAL_IXP425_PLF_USES_UART1) && !defined(HAL_PLATFORM_UART2_FIRST)
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
232 { (cyg_uint32*)UART1_BASE, 1000, CYGNUM_HAL_INTERRUPT_UART1 },
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
233 #endif
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
234 #if defined(CYGSEM_HAL_IXP425_PLF_USES_UART2)
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
235 { (cyg_uint32*)UART2_BASE, 1000, CYGNUM_HAL_INTERRUPT_UART2 }
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
236 #endif
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
237 #if defined(CYGSEM_HAL_IXP425_PLF_USES_UART1) && defined(HAL_PLATFORM_UART2_FIRST)
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
238 { (cyg_uint32*)UART1_BASE, 1000, CYGNUM_HAL_INTERRUPT_UART1 },
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
239 #endif
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
240 };
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
241
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
242 static void
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
243 cyg_hal_plf_serial_write(void* __ch_data, const cyg_uint8* __buf,
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
244 cyg_uint32 __len)
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
245 {
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
246 CYGARC_HAL_SAVE_GP();
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
247
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
248 while(__len-- > 0)
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
249 cyg_hal_plf_serial_putc(__ch_data, *__buf++);
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
250
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
251 CYGARC_HAL_RESTORE_GP();
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
252 }
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
253
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
254 static void
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
255 cyg_hal_plf_serial_read(void* __ch_data, cyg_uint8* __buf, cyg_uint32 __len)
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
256 {
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
257 CYGARC_HAL_SAVE_GP();
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
258
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
259 while(__len-- > 0)
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
260 *__buf++ = cyg_hal_plf_serial_getc(__ch_data);
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
261
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
262 CYGARC_HAL_RESTORE_GP();
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
263 }
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
264
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
265 cyg_bool
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
266 cyg_hal_plf_serial_getc_timeout(void* __ch_data, cyg_uint8* ch)
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
267 {
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
268 int delay_count;
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
269 channel_data_t* chan = (channel_data_t*)__ch_data;
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
270 cyg_bool res;
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
271 CYGARC_HAL_SAVE_GP();
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
272
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
273 delay_count = chan->msec_timeout * 10; // delay in .1 ms steps
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
274
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
275 for(;;) {
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
276 res = cyg_hal_plf_serial_getc_nonblock(__ch_data, ch);
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
277 if (res || 0 == delay_count--)
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
278 break;
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
279
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
280 CYGACC_CALL_IF_DELAY_US(100);
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
281 }
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
282
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
283 CYGARC_HAL_RESTORE_GP();
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
284 return res;
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
285 }
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
286
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
287 static int
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
288 cyg_hal_plf_serial_control(void *__ch_data, __comm_control_cmd_t __func, ...)
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
289 {
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
290 static int irq_state = 0;
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
291 channel_data_t* chan = (channel_data_t*)__ch_data;
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
292 int ret = 0;
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
293 CYGARC_HAL_SAVE_GP();
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
294
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
295 switch (__func) {
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
296 case __COMMCTL_IRQ_ENABLE:
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
297 irq_state = 1;
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
298
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
299 HAL_WRITE_UINT32(chan->base+CYG_DEV_IER, SIO_IER_RCV | SIO_IER_UUE);
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
300 HAL_INTERRUPT_UNMASK(chan->isr_vector);
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
301 break;
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
302 case __COMMCTL_IRQ_DISABLE:
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
303 ret = irq_state;
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
304 irq_state = 0;
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
305
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
306 HAL_WRITE_UINT32(chan->base+CYG_DEV_IER, SIO_IER_UUE);
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
307 HAL_INTERRUPT_MASK(chan->isr_vector);
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
308 break;
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
309 case __COMMCTL_DBG_ISR_VECTOR:
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
310 ret = chan->isr_vector;
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
311 break;
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
312 case __COMMCTL_SET_TIMEOUT:
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
313 {
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
314 va_list ap;
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
315
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
316 va_start(ap, __func);
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
317
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
318 ret = chan->msec_timeout;
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
319 chan->msec_timeout = va_arg(ap, cyg_uint32);
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
320
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
321 va_end(ap);
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
322 }
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
323 case __COMMCTL_GETBAUD:
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
324 ret = chan->baud_rate;
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
325 break;
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
326 case __COMMCTL_SETBAUD:
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
327 {
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
328 cyg_uint32 b;
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
329 va_list ap;
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
330
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
331 va_start(ap, __func);
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
332 b = va_arg(ap, cyg_int32);
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
333 va_end(ap);
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
334
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
335 if (b < 300 || b > 115200)
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
336 ret = -1;
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
337 else {
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
338 chan->baud_rate = b;
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
339 ret = set_baud(chan);
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
340 }
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
341 break;
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
342 }
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
343 default:
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
344 break;
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
345 }
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
346 CYGARC_HAL_RESTORE_GP();
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
347 return ret;
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
348 }
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
349
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
350 static int
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
351 cyg_hal_plf_serial_isr(void *__ch_data, int* __ctrlc,
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
352 CYG_ADDRWORD __vector, CYG_ADDRWORD __data)
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
353 {
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
354 int res = 0;
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
355 channel_data_t* chan = (channel_data_t*)__ch_data;
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
356 char c;
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
357 cyg_uint8 lsr;
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
358 CYGARC_HAL_SAVE_GP();
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
359
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
360 cyg_drv_interrupt_acknowledge(chan->isr_vector);
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
361
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
362 *__ctrlc = 0;
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
363 HAL_READ_UINT32(chan->base+CYG_DEV_LSR, lsr);
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
364 if ( (lsr & SIO_LSR_DR) != 0 ) {
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
365
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
366 HAL_READ_UINT32(chan->base+CYG_DEV_RBR, c);
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
367 if( cyg_hal_is_break( &c , 1 ) )
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
368 *__ctrlc = 1;
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
369
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
370 res = CYG_ISR_HANDLED;
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
371 }
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
372
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
373 CYGARC_HAL_RESTORE_GP();
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
374 return res;
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
375 }
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
376
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
377 void
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
378 cyg_hal_ixp425_serial_init(void)
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
379 {
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
380 hal_virtual_comm_table_t* comm;
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
381 int i, cur = CYGACC_CALL_IF_SET_CONSOLE_COMM(CYGNUM_CALL_IF_SET_COMM_ID_QUERY_CURRENT);
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
382
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
383 for (i = 0; i < IXP425_NUM_UARTS; i++) {
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
384
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
385 // Disable interrupts.
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
386 HAL_INTERRUPT_MASK(plf_ser_channels[i].isr_vector);
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
387
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
388 // Init channels
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
389 cyg_hal_plf_serial_init_channel(&plf_ser_channels[i]);
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
390
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
391 // Setup procs in the vector table
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
392 CYGACC_CALL_IF_SET_CONSOLE_COMM(i);
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
393 comm = CYGACC_CALL_IF_CONSOLE_PROCS();
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
394 CYGACC_COMM_IF_CH_DATA_SET(*comm, &plf_ser_channels[i]);
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
395 CYGACC_COMM_IF_WRITE_SET(*comm, cyg_hal_plf_serial_write);
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
396 CYGACC_COMM_IF_READ_SET(*comm, cyg_hal_plf_serial_read);
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
397 CYGACC_COMM_IF_PUTC_SET(*comm, cyg_hal_plf_serial_putc);
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
398 CYGACC_COMM_IF_GETC_SET(*comm, cyg_hal_plf_serial_getc);
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
399 CYGACC_COMM_IF_CONTROL_SET(*comm, cyg_hal_plf_serial_control);
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
400 CYGACC_COMM_IF_DBG_ISR_SET(*comm, cyg_hal_plf_serial_isr);
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
401 CYGACC_COMM_IF_GETC_TIMEOUT_SET(*comm, cyg_hal_plf_serial_getc_timeout);
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
402 }
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
403 // Restore original console
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
404 CYGACC_CALL_IF_SET_CONSOLE_COMM(cur);
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
405 }
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
406
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
407 // If the platform provides some channels of its own, then this function will be
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
408 // provided by that platform.
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
409 #if !defined(CYGNUM_HAL_IXP425_PLF_SERIAL_CHANNELS) || !CYGNUM_HAL_IXP425_PLF_SERIAL_CHANNELS
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
410 void
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
411 cyg_hal_plf_comms_init(void)
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
412 {
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
413 static int initialized = 0;
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
414
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
415 if (initialized)
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
416 return;
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
417
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
418 initialized = 1;
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
419
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
420 cyg_hal_ixp425_serial_init();
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
421 }
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
422 #endif
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
423
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
424 #endif // IXP425_NUM_UARTS > 0
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
425
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
426 /*---------------------------------------------------------------------------*/
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
427
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
428 void
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
429 hal_diag_led(int n)
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
430 {
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
431 }
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
432
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
433 /*---------------------------------------------------------------------------*/
d6cfbed66cf9 New XScale ports
msalter
parents:
diff changeset
434 /* End of hal_diag.c */