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

Annotation of sys/arch/arm/s3c2xx0/sscom_var.h, Revision 1.1

1.1     ! nbrk        1: /* $NetBSD: sscom_var.h,v 1.7 2006/03/06 20:21:25 rjs 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: /* derived from sys/dev/ic/comvar.h */
        !            35:
        !            36: /*
        !            37:  * Copyright (c) 1996 Christopher G. Demetriou.  All rights reserved.
        !            38:  *
        !            39:  * Redistribution and use in source and binary forms, with or without
        !            40:  * modification, are permitted provided that the following conditions
        !            41:  * are met:
        !            42:  * 1. Redistributions of source code must retain the above copyright
        !            43:  *    notice, this list of conditions and the following disclaimer.
        !            44:  * 2. Redistributions in binary form must reproduce the above copyright
        !            45:  *    notice, this list of conditions and the following disclaimer in the
        !            46:  *    documentation and/or other materials provided with the distribution.
        !            47:  * 3. All advertising materials mentioning features or use of this software
        !            48:  *    must display the following acknowledgement:
        !            49:  *      This product includes software developed by Christopher G. Demetriou
        !            50:  *     for the NetBSD Project.
        !            51:  * 4. The name of the author may not be used to endorse or promote products
        !            52:  *    derived from this software without specific prior written permission
        !            53:  *
        !            54:  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
        !            55:  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
        !            56:  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
        !            57:  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
        !            58:  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
        !            59:  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
        !            60:  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
        !            61:  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
        !            62:  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
        !            63:  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
        !            64:  */
        !            65:
        !            66: #ifndef _ARM_S3C2XX0_SSCOM_VAR_H
        !            67: #define _ARM_S3C2XX0_SSCOM_VAR_H
        !            68:
        !            69: #include "opt_multiprocessor.h"
        !            70: #include "opt_lockdebug.h"
        !            71: #include "opt_sscom.h"
        !            72:
        !            73: #include <sys/param.h>
        !            74: #include <sys/systm.h>
        !            75: #include <sys/device.h>
        !            76: #include <sys/termios.h>
        !            77: #include <sys/callout.h>
        !            78: #include <machine/bus.h>
        !            79:
        !            80: #ifdef SSCOM_S3C2410
        !            81: #include <arm/s3c2xx0/s3c2410reg.h>
        !            82: #include <arm/s3c2xx0/s3c2410var.h>
        !            83: #endif
        !            84:
        !            85: /* Hardware flag masks */
        !            86: #define        SSCOM_HW_FLOW           0x02
        !            87: #define        SSCOM_HW_DEV_OK         0x04
        !            88: #define        SSCOM_HW_CONSOLE        0x08
        !            89: #define        SSCOM_HW_KGDB           0x10
        !            90: #define SSCOM_HW_TXINT         0x20
        !            91: #define SSCOM_HW_RXINT         0x40
        !            92:
        !            93: /* Buffer size for character buffer */
        !            94: #define        SSCOM_RING_SIZE 2048
        !            95:
        !            96: struct sscom_softc {
        !            97:        struct device sc_dev;
        !            98:        void *sc_si;
        !            99:        struct tty *sc_tty;
        !           100:
        !           101:        struct callout sc_diag_callout;
        !           102:
        !           103:        int sc_unit;                    /* UART0/UART1 */
        !           104:        int sc_frequency;
        !           105:
        !           106:        bus_space_tag_t sc_iot;
        !           107:        bus_space_handle_t sc_ioh;
        !           108:
        !           109:        u_int sc_overflows,
        !           110:              sc_floods,
        !           111:              sc_errors;
        !           112:
        !           113:        int sc_hwflags,
        !           114:            sc_swflags;
        !           115:
        !           116:        u_int sc_r_hiwat,
        !           117:              sc_r_lowat;
        !           118:        u_char *volatile sc_rbget,
        !           119:               *volatile sc_rbput;
        !           120:        volatile u_int sc_rbavail;
        !           121:        u_char *sc_rbuf,
        !           122:               *sc_ebuf;
        !           123:
        !           124:        u_char *sc_tba;
        !           125:        u_int sc_tbc,
        !           126:              sc_heldtbc;
        !           127:
        !           128:        volatile u_char sc_rx_flags,
        !           129: #define        RX_TTY_BLOCKED          0x01
        !           130: #define        RX_TTY_OVERFLOWED       0x02
        !           131: #define        RX_IBUF_BLOCKED         0x04
        !           132: #define        RX_IBUF_OVERFLOWED      0x08
        !           133: #define        RX_ANY_BLOCK            0x0f
        !           134:                        sc_tx_busy,
        !           135:                        sc_tx_done,
        !           136:                        sc_tx_stopped,
        !           137:                        sc_st_check,
        !           138:                        sc_rx_ready;
        !           139:
        !           140:        /* data to stored in UART registers.
        !           141:           actual write to UART register is pended while sc_tx_busy */
        !           142:        uint16_t sc_ucon;               /* control register */
        !           143:        uint16_t sc_ubrdiv;             /* baudrate register */
        !           144:        uint8_t  sc_heldchange;         /* register changes are pended */
        !           145:        uint8_t  sc_ulcon;              /* line control */
        !           146:        uint8_t  sc_umcon;              /* modem control */
        !           147: #define  UMCON_HW_MASK (UMCON_RTS)
        !           148: #define  UMCON_DTR  (1<<4)             /* provided by other means such as GPIO */
        !           149:        uint8_t  sc_msts;               /* modem status */
        !           150: #define  MSTS_CTS   UMSTAT_CTS         /* bit0 */
        !           151: #define  MSTS_DCD   (1<<1)
        !           152: #define  MSTS_DSR   (1<<2)
        !           153:
        !           154:        uint8_t sc_msr_dcd;             /* DCD or 0 */
        !           155:        uint8_t sc_mcr_dtr;             /* DTR or 0 or DTR|RTS*/
        !           156:        uint8_t sc_mcr_rts;             /* RTS or DTR in sc_umcon */
        !           157:        uint8_t sc_msr_cts;             /* CTS or DCD in sc_msts */
        !           158:
        !           159:        uint8_t sc_msr_mask;            /* sc_msr_cts|sc_msr_dcd */
        !           160:        uint8_t sc_mcr_active;
        !           161:        uint8_t sc_msr_delta;
        !           162:
        !           163:        uint8_t sc_rx_irqno, sc_tx_irqno;
        !           164:
        !           165: #if 0
        !           166:        /* PPS signal on DCD, with or without inkernel clock disciplining */
        !           167:        u_char  sc_ppsmask;                     /* pps signal mask */
        !           168:        u_char  sc_ppsassert;                   /* pps leading edge */
        !           169:        u_char  sc_ppsclear;                    /* pps trailing edge */
        !           170:        pps_info_t ppsinfo;
        !           171:        pps_params_t ppsparam;
        !           172: #endif
        !           173:
        !           174: #if NRND > 0 && defined(RND_COM)
        !           175:        rndsource_element_t  rnd_source;
        !           176: #endif
        !           177: #if (defined(MULTIPROCESSOR) || defined(LOCKDEBUG)) && defined(SSCOM_MPLOCK)
        !           178:        struct simplelock       sc_lock;
        !           179: #endif
        !           180:
        !           181:        /*
        !           182:         * S3C2XX0's UART doesn't have modem control/status pins.
        !           183:         * On platforms with S3C2XX0, those pins are simply unavailable
        !           184:         * or provided by other means such as GPIO.  Platform specific attach routine
        !           185:         * have to provide functions to read/write modem control/status pins.
        !           186:         */
        !           187:        int     (* read_modem_status)( struct sscom_softc * );
        !           188:        void    (* set_modem_control)( struct sscom_softc * );
        !           189: };
        !           190:
        !           191: /* UART register address, etc. */
        !           192: struct sscom_uart_info {
        !           193:        int             unit;
        !           194:        char            tx_int, rx_int, err_int;
        !           195:        bus_addr_t      iobase;
        !           196: };
        !           197:
        !           198: #define sscom_rxrdy(iot,ioh) \
        !           199:        (bus_space_read_1((iot), (ioh), SSCOM_UTRSTAT) & UTRSTAT_RXREADY)
        !           200: #define sscom_getc(iot,ioh) bus_space_read_1((iot), (ioh), SSCOM_URXH)
        !           201: #define sscom_geterr(iot,ioh) bus_space_read_1((iot), (ioh), SSCOM_UERSTAT)
        !           202:
        !           203: /*
        !           204:  * we need to tweak interrupt controller to mask/unmask rxint and/or txint.
        !           205:  */
        !           206: #ifdef SSCOM_S3C2410
        !           207: /* RXINTn, TXINTn and ERRn interrupts are cascaded to UARTn irq. */
        !           208:
        !           209: #define        _sscom_intbit(irqno)    (1<<((irqno)-S3C2410_SUBIRQ_MIN))
        !           210:
        !           211: #define        sscom_unmask_rxint(sc)  \
        !           212:        s3c2410_unmask_subinterrupts(_sscom_intbit((sc)->sc_rx_irqno))
        !           213: #define        sscom_mask_rxint(sc)    \
        !           214:        s3c2410_mask_subinterrupts(_sscom_intbit((sc)->sc_rx_irqno))
        !           215: #define        sscom_unmask_txint(sc)  \
        !           216:        s3c2410_unmask_subinterrupts(_sscom_intbit((sc)->sc_tx_irqno))
        !           217: #define        sscom_mask_txint(sc)    \
        !           218:        s3c2410_mask_subinterrupts(_sscom_intbit((sc)->sc_tx_irqno))
        !           219: #define        sscom_unmask_txrxint(sc)                                      \
        !           220:        s3c2410_unmask_subinterrupts(_sscom_intbit((sc)->sc_tx_irqno) | \
        !           221:                                     _sscom_intbit((sc)->sc_rx_irqno))
        !           222: #define        sscom_mask_txrxint(sc)                                      \
        !           223:        s3c2410_mask_subinterrupts(_sscom_intbit((sc)->sc_tx_irqno) | \
        !           224:                                   _sscom_intbit((sc)->sc_rx_irqno))
        !           225:
        !           226: #else
        !           227:
        !           228: /* for S3C2800 and S3C2400 */
        !           229: #define        sscom_unmask_rxint(sc)  s3c2xx0_unmask_interrupts(1<<(sc)->sc_rx_irqno)
        !           230: #define        sscom_mask_rxint(sc)    s3c2xx0_mask_interrupts(1<<(sc)->sc_rx_irqno)
        !           231: #define        sscom_unmask_txint(sc)  s3c2xx0_unmask_interrupts(1<<(sc)->sc_tx_irqno)
        !           232: #define        sscom_mask_txint(sc)    s3c2xx0_mask_interrupts(1<<(sc)->sc_tx_irqno)
        !           233: #define        sscom_unmask_txrxint(sc) \
        !           234:        s3c2xx0_unmask_interrupts((1<<(sc)->sc_tx_irqno)|(1<<(sc)->sc_rx_irqno))
        !           235: #define        sscom_mask_txrxint(sc)  \
        !           236:        s3c2xx0_mask_interrupts((1<<(sc)->sc_tx_irqno)|(1<<(sc)->sc_rx_irqno))
        !           237:
        !           238: #endif /* SSCOM_S3C2410 */
        !           239:
        !           240: #define sscom_enable_rxint(sc)         \
        !           241:        (sscom_unmask_rxint(sc), ((sc)->sc_hwflags |= SSCOM_HW_RXINT))
        !           242: #define sscom_disable_rxint(sc)                \
        !           243:        (sscom_mask_rxint(sc), ((sc)->sc_hwflags &= ~SSCOM_HW_RXINT))
        !           244: #define sscom_enable_txint(sc)         \
        !           245:        (sscom_unmask_txint(sc), ((sc)->sc_hwflags |= SSCOM_HW_TXINT))
        !           246: #define sscom_disable_txint(sc)                \
        !           247:        (sscom_mask_txint(sc),((sc)->sc_hwflags &= ~SSCOM_HW_TXINT))
        !           248: #define sscom_enable_txrxint(sc)       \
        !           249:        (sscom_unmask_txrxint(sc),((sc)->sc_hwflags |= (SSCOM_HW_TXINT|SSCOM_HW_RXINT)))
        !           250: #define sscom_disable_txrxint(sc)      \
        !           251:        (sscom_mask_txrxint(sc),((sc)->sc_hwflags &= ~(SSCOM_HW_TXINT|SSCOM_HW_RXINT)))
        !           252:
        !           253:
        !           254: int    sscomspeed(long, long);
        !           255: void   sscom_attach_subr(struct sscom_softc *);
        !           256:
        !           257: int    sscom_detach(struct device *, int);
        !           258: int    sscom_activate(struct device *, enum devact);
        !           259: void   sscom_shutdown(struct sscom_softc *);
        !           260: void   sscomdiag               (void *);
        !           261: void   sscomstart(struct tty *);
        !           262: int    sscomparam(struct tty *, struct termios *);
        !           263: int    sscomread(dev_t, struct uio *, int);
        !           264: void   sscom_config(struct sscom_softc *);
        !           265:
        !           266: int    sscomtxintr(void *);
        !           267: int    sscomrxintr(void *);
        !           268:
        !           269: int    sscom_cnattach(bus_space_tag_t, const struct sscom_uart_info *,
        !           270:            int, int, tcflag_t);
        !           271: void   sscom_cndetach(void);
        !           272: int    sscom_is_console(bus_space_tag_t, int, bus_space_handle_t *);
        !           273:
        !           274: #ifdef KGDB
        !           275: int    sscom_kgdb_attach(bus_space_tag_t, const struct sscom_uart_info *,
        !           276:            int, int, tcflag_t);
        !           277: #endif
        !           278:
        !           279: #endif /* _ARM_S3C2XX0_SSCOM_VAR_H */

CVSweb