[BACK]Return to sscom_s3c2800.c CVS log [TXT][DIR] Up to [local] / sys / arch / arm / s3c2xx0

Annotation of sys/arch/arm/s3c2xx0/sscom_s3c2800.c, Revision 1.1.1.1

1.1       nbrk        1: /*     $NetBSD: sscom_s3c2800.c,v 1.6 2005/12/11 12:16:51 christos Exp $ */
                      2:
                      3: /*
                      4:  * Copyright (c) 2002, 2003 Fujitsu Component Limited
                      5:  * Copyright (c) 2002, 2003 Genetec Corporation
                      6:  * All rights reserved.
                      7:  *
                      8:  * Redistribution and use in source and binary forms, with or without
                      9:  * modification, are permitted provided that the following conditions
                     10:  * are met:
                     11:  * 1. Redistributions of source code must retain the above copyright
                     12:  *    notice, this list of conditions and the following disclaimer.
                     13:  * 2. Redistributions in binary form must reproduce the above copyright
                     14:  *    notice, this list of conditions and the following disclaimer in the
                     15:  *    documentation and/or other materials provided with the distribution.
                     16:  * 3. Neither the name of The Fujitsu Component Limited nor the name of
                     17:  *    Genetec corporation may not be used to endorse or promote products
                     18:  *    derived from this software without specific prior written permission.
                     19:  *
                     20:  * THIS SOFTWARE IS PROVIDED BY FUJITSU COMPONENT LIMITED AND GENETEC
                     21:  * CORPORATION ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
                     22:  * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
                     23:  * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
                     24:  * DISCLAIMED.  IN NO EVENT SHALL FUJITSU COMPONENT LIMITED OR GENETEC
                     25:  * CORPORATION BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
                     26:  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
                     27:  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
                     28:  * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
                     29:  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
                     30:  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
                     31:  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
                     32:  * SUCH DAMAGE.
                     33:  */
                     34:
                     35: #include <sys/cdefs.h>
                     36: __KERNEL_RCSID(0, "$NetBSD: sscom_s3c2800.c,v 1.6 2005/12/11 12:16:51 christos Exp $");
                     37:
                     38: #include "opt_sscom.h"
                     39: #include "opt_ddb.h"
                     40: #include "opt_kgdb.h"
                     41:
                     42: #include <sys/param.h>
                     43: #include <sys/systm.h>
                     44: #include <sys/ioctl.h>
                     45: #include <sys/select.h>
                     46: #include <sys/tty.h>
                     47: #include <sys/proc.h>
                     48: #include <sys/user.h>
                     49: #include <sys/conf.h>
                     50: #include <sys/file.h>
                     51: #include <sys/uio.h>
                     52: #include <sys/kernel.h>
                     53: #include <sys/syslog.h>
                     54: #include <sys/types.h>
                     55: #include <sys/device.h>
                     56: #include <sys/malloc.h>
                     57: #include <sys/timepps.h>
                     58: #include <sys/vnode.h>
                     59:
                     60: #include <machine/intr.h>
                     61: #include <machine/bus.h>
                     62:
                     63: #include <arm/s3c2xx0/s3c2800reg.h>
                     64: #include <arm/s3c2xx0/s3c2800var.h>
                     65: #include <arm/s3c2xx0/sscom_var.h>
                     66: #include <sys/termios.h>
                     67:
                     68: static int sscom_match(struct device *, struct cfdata *, void *);
                     69: static void sscom_attach(struct device *, struct device *, void *);
                     70:
                     71: CFATTACH_DECL(sscom, sizeof(struct sscom_softc), sscom_match,
                     72:     sscom_attach, NULL, NULL);
                     73:
                     74: const struct sscom_uart_info s3c2800_uart_config[] = {
                     75:        /* UART 0 */
                     76:        {
                     77:                0,
                     78:                S3C2800_INT_TXD0,
                     79:                S3C2800_INT_RXD0,
                     80:                S3C2800_INT_UERR0,
                     81:                S3C2800_UART0_BASE,
                     82:        },
                     83:        /* UART 1 */
                     84:        {
                     85:                1,
                     86:                S3C2800_INT_TXD1,
                     87:                S3C2800_INT_RXD1,
                     88:                S3C2800_INT_UERR1,
                     89:                S3C2800_UART1_BASE,
                     90:        },
                     91: };
                     92:
                     93: static int
                     94: sscom_match(struct device *parent, struct cfdata *cf, void *aux)
                     95: {
                     96:        struct s3c2xx0_attach_args *sa = aux;
                     97:        int unit = sa->sa_index;
                     98:
                     99:        return unit == 0 || unit == 1;
                    100: }
                    101:
                    102: static void
                    103: sscom_attach(struct device *parent, struct device *self, void *aux)
                    104: {
                    105:        struct sscom_softc *sc = (struct sscom_softc *)self;
                    106:        struct s3c2xx0_attach_args *sa = aux;
                    107:        int unit = sa->sa_index;
                    108:        bus_addr_t iobase = s3c2800_uart_config[unit].iobase;
                    109:
                    110:        printf( ": UART%d addr=%lx", sa->sa_index, iobase );
                    111:
                    112:        sc->sc_iot = s3c2xx0_softc->sc_iot;
                    113:        sc->sc_unit = unit;
                    114:        sc->sc_frequency = s3c2xx0_softc->sc_pclk;
                    115:
                    116:        sc->sc_rx_irqno = S3C2800_INT_RXD0 + sa->sa_index;
                    117:        sc->sc_tx_irqno = S3C2800_INT_TXD0 + sa->sa_index;
                    118:
                    119:        if (bus_space_map(sc->sc_iot, iobase, SSCOM_SIZE, 0, &sc->sc_ioh)) {
                    120:                printf( ": failed to map registers\n" );
                    121:                return;
                    122:        }
                    123:
                    124:        printf("\n");
                    125:
                    126:        s3c2800_intr_establish(s3c2800_uart_config[unit].tx_int,
                    127:            IPL_SERIAL, IST_LEVEL, sscomtxintr, sc);
                    128:        s3c2800_intr_establish(s3c2800_uart_config[unit].rx_int,
                    129:            IPL_SERIAL, IST_LEVEL, sscomrxintr, sc);
                    130:        s3c2800_intr_establish(s3c2800_uart_config[unit].err_int,
                    131:            IPL_SERIAL, IST_LEVEL, sscomrxintr, sc);
                    132:        sscom_disable_txrxint(sc);
                    133:
                    134:        sscom_attach_subr(sc);
                    135: }
                    136:
                    137:
                    138:
                    139: int
                    140: s3c2800_sscom_cnattach(bus_space_tag_t iot, int unit, int rate,
                    141:     int frequency, tcflag_t cflag)
                    142: {
                    143:        return sscom_cnattach(iot, s3c2800_uart_config + unit,
                    144:            rate, frequency, cflag);
                    145: }
                    146:
                    147: #ifdef KGDB
                    148: int
                    149: s3c2800_sscom_kgdb_attach(bus_space_tag_t iot, int unit, int rate,
                    150:     int frequency, tcflag_t cflag)
                    151: {
                    152:        return sscom_kgdb_attach(iot, s3c2800_uart_config + unit,
                    153:            rate, frequency, cflag);
                    154: }
                    155: #endif /* KGDB */

CVSweb