Annotation of sys/dev/ic/cyreg.h, Revision 1.1
1.1 ! nbrk 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_ */
CVSweb