[BACK]Return to magmareg.h CVS log [TXT][DIR] Up to [local] / sys / dev / sbus

Annotation of sys/dev/sbus/magmareg.h, Revision 1.1.1.1

1.1       nbrk        1: /*     $OpenBSD: magmareg.h,v 1.8 2006/03/04 13:00:55 miod Exp $       */
                      2:
                      3: /* magmareg.h
                      4:  *
                      5:  *  Copyright (c) 1998 Iain Hibbert
                      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. All advertising materials mentioning features or use of this software
                     17:  *    must display the following acknowledgement:
                     18:  *     This product includes software developed by Iain Hibbert
                     19:  * 4. The name of the author may not be used to endorse or promote products
                     20:  *    derived from this software without specific prior written permission.
                     21:  *
                     22:  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
                     23:  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
                     24:  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
                     25:  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
                     26:  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
                     27:  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
                     28:  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
                     29:  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
                     30:  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
                     31:  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
                     32:  *
                     33:  */
                     34:
                     35: #ifdef MAGMA_DEBUG
                     36: #define dprintf(x) printf x
                     37: #else
                     38: #define dprintf(x)
                     39: #endif
                     40:
                     41: /*  The mapping of minor device number -> card and port is done as
                     42:  * follows by default:
                     43:  *
                     44:  *  +---+---+---+---+---+---+---+---+
                     45:  *  | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
                     46:  *  +---+---+---+---+---+---+---+---+
                     47:  *    |   |   |   |   |   |   |   |
                     48:  *    |   |   |   |   +---+---+---+---> port number
                     49:  *    |   |   |   |
                     50:  *    |   |   |   +-------------------> dialout (on tty ports)
                     51:  *    |   |   |
                     52:  *    |   |   +-----------------------> unused
                     53:  *    |   |
                     54:  *    +---+---------------------------> card number
                     55:  *
                     56:  */
                     57:
                     58: #define MAGMA_MAX_CARDS                4
                     59: #define MAGMA_MAX_TTY          16
                     60: #define MAGMA_MAX_BPP          2
                     61: #define MAGMA_MAX_CD1400       4
                     62: #define MAGMA_MAX_CD1190       2
                     63:
                     64: #define MAGMA_CARD(x)  ((minor(x) >> 6) & 0x03)
                     65: #define MAGMA_PORT(x)  (minor(x) & 0x0f)
                     66:
                     67: #define MTTY_DIALOUT(x) (minor(x) & 0x10)
                     68:
                     69: /*
                     70:  * Supported Card Types
                     71:  */
                     72: struct magma_board_info {
                     73:        const char *mb_sbusname;        /* sbus name */
                     74:        const char *mb_name;            /* cardname to match against */
                     75:        const char *mb_realname;        /* english card name */
                     76:        int mb_nser;                    /* number of serial ports */
                     77:        int mb_npar;                    /* number of parallel ports */
                     78:        int mb_ncd1400;                 /* number of CD1400 chips */
                     79:        int mb_svcackr;                 /* svcackr offset */
                     80:        int mb_svcackt;                 /* svcackt offset */
                     81:        int mb_svcackm;                 /* svcackm offset */
                     82:        int mb_cd1400[MAGMA_MAX_CD1400];/* cd1400 chip register offsets */
                     83:        int mb_ncd1190;                 /* number of CD1190 chips */
                     84:        int mb_cd1190[MAGMA_MAX_CD1190];/* cd1190 chip register offsets */
                     85: };
                     86:
                     87: /*
                     88:  * cd1400 chip data
                     89:  */
                     90: struct cd1400 {
                     91:        bus_space_handle_t cd_regh;     /* chip register handle */
                     92:        bus_space_tag_t cd_regt;        /* chip register tag */
                     93:        int cd_chiprev;                 /* chip revision */
                     94:        int cd_clock;                   /* clock speed in MHz */
                     95:        int cd_parmode;                 /* parallel mode operation */
                     96: };
                     97:
                     98: /*
                     99:  * cd1190 chip data
                    100:  */
                    101: struct cd1190 {
                    102:        bus_space_handle_t cd_regh;     /* chip register handle */
                    103:        bus_space_tag_t cd_regt;        /* chip register tag */
                    104:        int cd_chiprev;                 /* chip revision */
                    105: };
                    106:
                    107: /* software state for each card */
                    108: struct magma_softc {
                    109:        struct device ms_dev;           /* required. must be first in softc */
                    110:
                    111:        bus_space_tag_t sc_bustag;      /* our bus tag */
                    112:        bus_space_handle_t sc_iohandle; /* whole card registers */
                    113:        void *sc_ih;                    /* interrupt vector */
                    114:        void *sc_sih;                   /* softintr vector */
                    115:
                    116:        /* cd1400 chip info */
                    117:        int ms_ncd1400;
                    118:        struct cd1400 ms_cd1400[MAGMA_MAX_CD1400];
                    119:        bus_space_handle_t sc_svcackrh; /* CD1400 service acknowledge receive */
                    120:        bus_space_handle_t sc_svcackth; /* CD1400 service acknowledge transmit */
                    121:        bus_space_handle_t sc_svcackmh; /* CD1400 service acknowledge modem */
                    122:
                    123:
                    124:        /* cd1190 chip info */
                    125:        int ms_ncd1190;
                    126:        struct cd1190 ms_cd1190[MAGMA_MAX_CD1190];
                    127:
                    128:        const struct magma_board_info *ms_board;        /* what am I? */
                    129:
                    130:        struct mtty_softc *ms_mtty;
                    131:        struct mbpp_softc *ms_mbpp;
                    132:
                    133:        struct intrhand ms_hardint;     /* hard interrupt handler */
                    134:        struct intrhand ms_softint;     /* soft interrupt handler */
                    135: };
                    136:
                    137: #define MTTY_RBUF_SIZE         (2 * 512)
                    138: #define MTTY_RX_FIFO_THRESHOLD 6
                    139: #define MTTY_RX_DTR_THRESHOLD  9
                    140:
                    141: struct mtty_port {
                    142:        struct cd1400 *mp_cd1400;       /* ptr to chip */
                    143:        int mp_channel;                 /* and channel */
                    144:        struct tty *mp_tty;
                    145:
                    146:        int mp_openflags;       /* default tty flags */
                    147:        int mp_flags;           /* port flags */
                    148:        int mp_carrier;         /* state of carrier */
                    149:
                    150:        u_char *mp_rbuf;        /* ring buffer start */
                    151:        u_char *mp_rend;        /* ring buffer end */
                    152:        u_char *mp_rget;        /* ring buffer read pointer */
                    153:        u_char *mp_rput;        /* ring buffer write pointer */
                    154:
                    155:        u_char *mp_txp;         /* transmit character pointer */
                    156:        int mp_txc;             /* transmit character counter */
                    157: };
                    158:
                    159: #define MTTYF_CARRIER_CHANGED  (1<<0)
                    160: #define MTTYF_SET_BREAK                (1<<1)
                    161: #define MTTYF_CLR_BREAK                (1<<2)
                    162: #define MTTYF_DONE             (1<<3)
                    163: #define MTTYF_STOP             (1<<4)
                    164: #define MTTYF_RING_OVERFLOW    (1<<5)
                    165:
                    166: struct mtty_softc {
                    167:        struct device ms_dev;           /* device info */
                    168:        int ms_nports;                  /* tty ports */
                    169:        struct mtty_port ms_port[MAGMA_MAX_TTY];
                    170: };
                    171:
                    172: #define MBPP_RX_FIFO_THRESHOLD 25
                    173:
                    174: struct mbpp_port {
                    175:        struct cd1400 *mp_cd1400;       /* for LC2+1Sp card */
                    176:        struct cd1190 *mp_cd1190;       /* all the others   */
                    177:
                    178:        int mp_flags;
                    179:
                    180:        struct bpp_param mp_param;
                    181: #define mp_burst mp_param.bp_burst
                    182: #define mp_timeout mp_param.bp_timeout
                    183: #define mp_delay mp_param.bp_delay
                    184:
                    185:        u_char *mp_ptr;                 /* pointer to io data */
                    186:        int mp_cnt;                     /* count of io chars */
                    187:
                    188:        struct timeout mp_timeout_tmo;  /* for mbpp_timeout() */
                    189:        struct timeout mp_start_tmo;    /* for mbpp_start() */
                    190: };
                    191:
                    192: #define MBPPF_OPEN     (1<<0)
                    193: #define MBPPF_TIMEOUT  (1<<1)
                    194: #define MBPPF_UIO      (1<<2)
                    195: #define MBPPF_DELAY    (1<<3)
                    196: #define MBPPF_WAKEUP   (1<<4)
                    197:
                    198: struct mbpp_softc {
                    199:        struct device ms_dev;           /* device info */
                    200:        int ms_nports;                  /* parallel ports */
                    201:        struct mbpp_port ms_port[MAGMA_MAX_BPP];
                    202: };
                    203:
                    204: /* internal function prototypes */
                    205:
                    206: int cd1400_compute_baud(speed_t, int, int *, int *);
                    207: __inline void cd1400_write_ccr(struct cd1400 *, u_char);
                    208: __inline u_char cd1400_read_reg(struct cd1400 *, int);
                    209: __inline void cd1400_write_reg(struct cd1400 *, int, u_char);
                    210: void cd1400_enable_transmitter(struct cd1400 *, int);
                    211:
                    212: int magma_match(struct device *, void *, void *);
                    213: void magma_attach(struct device *, struct device *, void *);
                    214: int magma_hard(void *);
                    215: void magma_soft(void *);
                    216:
                    217: int mtty_match(struct device *, void *, void *);
                    218: void mtty_attach(struct device *, struct device *, void *);
                    219: int mtty_modem_control(struct mtty_port *, int, int);
                    220: int mtty_param(struct tty *, struct termios *);
                    221: void mtty_start(struct tty *);
                    222:
                    223: int mbpp_match(struct device *, void *, void *);
                    224: void mbpp_attach(struct device *, struct device *, void *);
                    225: int mbpp_rw(dev_t, struct uio *);
                    226: void mbpp_timeout(void *);
                    227: void mbpp_start(void *);
                    228: int mbpp_send(struct mbpp_port *, caddr_t, int);
                    229: int mbpp_recv(struct mbpp_port *, caddr_t, int);
                    230: int mbpp_hztoms(int);
                    231: int mbpp_mstohz(int);
                    232:
                    233: #define        CD1400_REGMAPSIZE       0x80
                    234: #define        CD1190_REGMAPSIZE       0x20

CVSweb