root/dev/sbus/magmareg.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


    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

/* [<][>][^][v][top][bottom][index][help] */