root/dev/ic/cyreg.h

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

INCLUDED FROM


    1 /*      $OpenBSD: cyreg.h,v 1.8 2002/09/14 15:00:02 art Exp $   */
    2 /*      $FreeBSD: cyreg.h,v 1.1 1995/07/05 12:15:51 bde Exp $   */
    3 
    4 /*-
    5  * Copyright (c) 1995 Bruce Evans.
    6  * All rights reserved.
    7  *
    8  * Modified by Timo Rossi, 1996
    9  *
   10  * Redistribution and use in source and binary forms, with or without
   11  * modification, are permitted provided that the following conditions
   12  * are met:
   13  * 1. Redistributions of source code must retain the above copyright
   14  *    notice, this list of conditions and the following disclaimer.
   15  * 2. Redistributions in binary form must reproduce the above copyright
   16  *    notice, this list of conditions and the following disclaimer in the
   17  *    documentation and/or other materials provided with the distribution.
   18  * 3. Neither the name of the author nor the names of contributors
   19  *    may be used to endorse or promote products derived from this software
   20  *    without specific prior written permission.
   21  *
   22  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
   23  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
   24  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
   25  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
   26  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
   27  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
   28  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
   29  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
   30  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
   31  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   32  * SUCH DAMAGE.
   33  */
   34 
   35 #ifndef _DEV_IC_CYREG_H_
   36 #define _DEV_IC_CYREG_H_
   37 
   38 #include <sys/timeout.h>
   39 
   40 /*
   41  * Definitions for Cyclades Cyclom-Y serial boards.
   42  */
   43 
   44 #define CY8_SVCACKR             0x100
   45 #define CY8_SVCACKT             0x200
   46 #define CY8_SVCACKM             0x300
   47 
   48 /* twice this in PCI mode (shifed BUSTYPE bits left) */
   49 #define CY_CD1400_MEMSPACING    0x400
   50 
   51 /* adjustment value for accessing the last 4 cd1400s on Cyclom-32 */
   52 #define CY32_ADDR_FIX           0xe00
   53 
   54 #define CY16_RESET              0x1400
   55 #define CY_CLEAR_INTR           0x1800  /* intr ack address */
   56 
   57 #define CY_MAX_CD1400s          8       /* for Cyclom-32 */
   58 
   59 /* I/O location for enabling interrupts on PCI Cyclom cards */
   60 #define CY_PCI_INTENA           0x68
   61 #define CY_PCI_INTENA_9050      0x4c
   62 
   63 /* Cyclom-Y Custom Register for PLX ID (PCI only) */
   64 #define CY_PLX_VER             0x3400          /* PLX version */
   65 #define CY_PLX_9050            0x0b
   66 #define CY_PLX_9060            0x0c
   67 #define CY_PLX_9080            0x0d
   68 
   69 #define CY_CLOCK                25000000        /* baud rate clock */
   70 #define CY_CLOCK_60             60000000        /* baud rate clock for newer cd1400s */
   71 
   72 /*
   73  * bustype is actually the shift count for the offset
   74  * ISA card addresses are multiplied by 2 (shifted 1 bit)
   75  * and PCI addresses multiplied by 4 (shifted 2 bits)
   76  */
   77 #define CY_BUSTYPE_ISA 0
   78 #define CY_BUSTYPE_PCI 1
   79 
   80 #define RX_FIFO_THRESHOLD  6
   81 
   82 /* Automatic RTS (or actually DTR, the RTS and DTR lines need to be exchanged)
   83  * handshake threshold used if CY_HW_RTS is defined
   84  */
   85 #define RX_DTR_THRESHOLD   9
   86 
   87 /*
   88  * Maximum number of ports per card 
   89  */
   90 #define CY_MAX_PORTS            (CD1400_NO_OF_CHANNELS * CY_MAX_CD1400s)
   91 
   92 /*
   93  * Port number on card encoded in low 5 bits
   94  * card number in next 2 bits (only space for 4 cards)
   95  * high bit reserved for dialout flag
   96  */
   97 #define CY_PORT(x) (minor(x) & 0xf)
   98 #define CY_CARD(x) ((minor(x) >> 5) & 3)
   99 #define CY_DIALOUT(x) ((minor(x) & 0x80) != 0)
  100 #define CY_DIALIN(x) (!CY_DIALOUT(x))
  101 
  102 /*
  103  * read/write cd1400 registers (when cy_port-structure is available)
  104  */
  105 #define cd_read_reg(cy,reg) bus_space_read_1(cy->cy_memt, cy->cy_memh, \
  106                           cy->cy_chip_offs+(((reg<<1))<<cy->cy_bustype))
  107 
  108 #define cd_write_reg(cy,reg,val) bus_space_write_1(cy->cy_memt, cy->cy_memh, \
  109                           cy->cy_chip_offs+(((reg<<1))<<cy->cy_bustype), \
  110                           (val))
  111 
  112 /*
  113  * read/write cd1400 registers (when sc_softc-structure is available)
  114  */
  115 #define cd_read_reg_sc(sc,chip,reg) bus_space_read_1(sc->sc_memt, \
  116                                  sc->sc_memh, \
  117                                  sc->sc_cd1400_offs[chip]+\
  118                                  (((reg<<1))<<sc->sc_bustype))
  119 
  120 #define cd_write_reg_sc(sc,chip,reg,val) bus_space_write_1(sc->sc_memt, \
  121                                  sc->sc_memh, \
  122                                  sc->sc_cd1400_offs[chip]+\
  123                                  (((reg<<1))<<sc->sc_bustype), \
  124                                  (val))
  125 
  126 /*
  127  * ibuf is a simple ring buffer. It is always used two
  128  * bytes at a time (status and data)
  129  */
  130 #define IBUF_SIZE (2*512)
  131 
  132 /* software state for one port */
  133 struct cy_port {
  134         int                      cy_port_num;
  135         bus_space_tag_t          cy_memt;
  136         bus_space_handle_t       cy_memh;
  137         int                      cy_chip_offs;
  138         int                      cy_bustype;
  139         int                      cy_clock;
  140         struct tty              *cy_tty;
  141         int                      cy_openflags;
  142         int                      cy_fifo_overruns;
  143         int                      cy_ibuf_overruns;
  144         u_char                   cy_channel_control;    /* last CCR channel
  145                                                          * control command
  146                                                          * bits */
  147         u_char                   cy_carrier_stat;       /* copied from MSVR2 */
  148         u_char                   cy_flags;
  149         u_char                  *cy_ibuf, *cy_ibuf_end;
  150         u_char                  *cy_ibuf_rd_ptr, *cy_ibuf_wr_ptr;
  151 #ifdef CY_DEBUG1
  152         int                      cy_rx_int_count;
  153         int                      cy_tx_int_count;
  154         int                      cy_modem_int_count;
  155         int                      cy_start_count;
  156 #endif /* CY_DEBUG1 */
  157 };
  158 
  159 #define CYF_CARRIER_CHANGED  0x01
  160 #define CYF_START_BREAK      0x02
  161 #define CYF_END_BREAK        0x04
  162 #define CYF_STOP             0x08
  163 #define CYF_SEND_NUL         0x10
  164 #define CYF_START            0x20
  165 
  166 /* software state for one card */
  167 struct cy_softc {
  168         struct device            sc_dev;
  169         struct timeout           sc_poll_to;
  170         int                      sc_events;
  171         void                    *sc_ih;
  172         bus_space_tag_t          sc_memt;
  173         bus_space_handle_t       sc_memh;
  174         int                      sc_bustype;
  175         int                      sc_nports; /* number of ports on this card */
  176         int                      sc_cd1400_offs[CY_MAX_CD1400s];
  177         struct cy_port           sc_ports[CY_MAX_PORTS];
  178         int                      sc_nr_cd1400s;
  179 #ifdef CY_DEBUG1
  180         int                      sc_poll_count1;
  181         int                      sc_poll_count2;
  182 #endif
  183 };
  184 
  185 int     cy_probe_common(bus_space_tag_t, bus_space_handle_t, int);
  186 void    cy_attach(struct device *, struct device *);
  187 int     cy_intr(void *);
  188 
  189 #endif  /* _DEV_IC_CYREG_H_ */

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