root/dev/sbus/spifreg.h

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

INCLUDED FROM


    1 /*      $OpenBSD: spifreg.h,v 1.5 2003/06/02 18:32:41 jason Exp $       */
    2 
    3 /*
    4  * Copyright (c) 1999-2002 Jason L. Wright (jason@thought.net)
    5  * All rights reserved.
    6  *
    7  * Redistribution and use in source and binary forms, with or without
    8  * modification, are permitted provided that the following conditions
    9  * are met:
   10  * 1. Redistributions of source code must retain the above copyright
   11  *    notice, this list of conditions and the following disclaimer.
   12  * 2. Redistributions in binary form must reproduce the above copyright
   13  *    notice, this list of conditions and the following disclaimer in the
   14  *    documentation and/or other materials provided with the distribution.
   15  *
   16  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
   17  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
   18  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   19  * DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
   20  * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
   21  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
   22  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
   23  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
   24  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
   25  * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
   26  * POSSIBILITY OF SUCH DAMAGE.
   27  *
   28  * Effort sponsored in part by the Defense Advanced Research Projects
   29  * Agency (DARPA) and Air Force Research Laboratory, Air Force
   30  * Materiel Command, USAF, under agreement number F30602-01-2-0537.
   31  *
   32  */
   33 
   34 #define PPC_IN_PDATA            0x000           /* input data */
   35 #define PPC_IN_PSTAT            0x001           /* input status */
   36 #define PPC_IN_CTRL             0x002           /* input control */
   37 #define PPC_IN_PWEIRD           0x003           /* input weird */
   38 #define PPC_OUT_PDATA           0x000           /* output data */
   39 #define PPC_OUT_PSTAT           0x001           /* output status */
   40 #define PPC_OUT_PCTRL           0x002           /* output control */
   41 #define PPC_OUT_PWEIRD          0x003           /* output weird */
   42 #define PPC_IACK_PDATA          0x1fc           /* iack data */
   43 #define PPC_IACK_PSTAT          0x1fd           /* iack status */
   44 #define PPC_IACK_PCTRL          0x1fe           /* iack control */
   45 #define PPC_IACK_PWEIRD         0x1ff           /* iack weird */
   46 
   47 /* Parallel Status: read only */
   48 #define PPC_PSTAT_ERROR         0x08            /* error */
   49 #define PPC_PSTAT_SELECT        0x10            /* select */
   50 #define PPC_PSTAT_PAPER         0x20            /* paper out */
   51 #define PPC_PSTAT_ACK           0x40            /* ack */
   52 #define PPC_PSTAT_BUSY          0x80            /* busy */
   53 
   54 /* Parallel Control: read/write */
   55 #define PPC_CTRL_STROBE         0x01            /* strobe, 1=drop strobe */
   56 #define PPC_CTRL_AFX            0x02            /* auto form-feed */
   57 #define PPC_CTRL_INIT           0x04            /* init, 1=enable printer */
   58 #define PPC_CTRL_SLCT           0x08            /* SLC, 1=select printer */
   59 #define PPC_CTRL_IRQE           0x10            /* IRQ, 1=enable intrs */
   60 #define PPC_CTRL_OUTPUT         0x20            /* direction: 1=ppc out */
   61 
   62 /*
   63  * The 'stc' is a Cirrus Logic CL-CD180 (either revision B or revision C)
   64  */
   65 #define STC_CCR                 0x01            /* channel command */           
   66 #define STC_SRER                0x02            /* service request enable */
   67 #define STC_COR1                0x03            /* channel option 1 */
   68 #define STC_COR2                0x04            /* channel option 2 */
   69 #define STC_COR3                0x05            /* channel option 3 */
   70 #define STC_CCSR                0x06            /* channel control status */
   71 #define STC_RDCR                0x07            /* rx data count */
   72 #define STC_SCHR1               0x09            /* special character 1 */
   73 #define STC_SCHR2               0x0a            /* special character 2 */
   74 #define STC_SCHR3               0x0b            /* special character 3 */
   75 #define STC_SCHR4               0x0c            /* special character 4 */
   76 #define STC_MCOR1               0x10            /* modem change option 1 */
   77 #define STC_MCOR2               0x11            /* modem change option 2 */
   78 #define STC_MCR                 0x12            /* modem change */
   79 #define STC_RTPR                0x18            /* rx timeout period */
   80 #define STC_MSVR                0x28            /* modem signal value */
   81 #define STC_MSVRTS              0x29            /* modem signal value rts */
   82 #define STC_MSVDTR              0x2a            /* modem signal value dtr */
   83 #define STC_RBPRH               0x31            /* rx bit rate period high */
   84 #define STC_RBPRL               0x32            /* rx bit rate period low */
   85 #define STC_RBR                 0x33            /* rx bit */
   86 #define STC_TBPRH               0x39            /* tx bit rate period high */
   87 #define STC_TBPRL               0x3a            /* tx bit rate period low */
   88 #define STC_GSVR                0x40            /* global service vector */
   89 #define STC_GSCR1               0x41            /* global service channel 1 */
   90 #define STC_GSCR2               0x42            /* global service channel 2 */
   91 #define STC_GSCR3               0x43            /* global service channel 3 */
   92 #define STC_MSMR                0x61            /* modem service match */
   93 #define STC_TSMR                0x62            /* tx service match */
   94 #define STC_RSMR                0x63            /* rx service match */
   95 #define STC_CAR                 0x64            /* channel access */
   96 #define STC_SRSR                0x65            /* service request status */
   97 #define STC_SRCR                0x66            /* service request config */
   98 #define STC_GFRCR               0x6b            /* global firmware rev code */
   99 #define STC_PPRH                0x70            /* prescalar period high */
  100 #define STC_PPRL                0x71            /* prescalar period low */
  101 #define STC_MRAR                0x75            /* modem request ack */
  102 #define STC_TRAR                0x76            /* tx request ack */
  103 #define STC_RRAR                0x77            /* rx request ack */
  104 #define STC_RDR                 0x78            /* rx data */
  105 #define STC_RCSR                0x7a            /* rx character status */
  106 #define STC_TDR                 0x7b            /* tx data */
  107 #define STC_EOSRR               0x7f            /* end of service */
  108 
  109 #define STC_REGMAPSIZE          0x80
  110 
  111 /* Global Firmware Revision Code Register (rw) */
  112 #define CD180_GFRCR_REV_B       0x81            /* CL-CD180B */
  113 #define CD180_GFRCR_REV_C       0x82            /* CL-CD180C */
  114 
  115 /* Service Request Configuration Register (rw) (CD180C or higher) */
  116 #define CD180_SRCR_PKGTYP               0x80    /* pkg type,0=PLCC,1=PQFP */
  117 #define CD180_SRCR_REGACKEN             0x40    /* register ack enable */
  118 #define CD180_SRCR_DAISYEN              0x20    /* daisy chain enable */
  119 #define CD180_SRCR_GLOBPRI              0x10    /* global priority */
  120 #define CD180_SRCR_UNFAIR               0x08    /* use unfair interrupts */
  121 #define CD180_SRCR_AUTOPRI              0x02    /* automatic priority */
  122 #define CD180_SRCR_PRISEL               0x01    /* select rx/tx as high pri */
  123 
  124 /* Prescalar Period Register High (rw) */
  125 #define CD180_PPRH      0xf0            /* high byte */
  126 #define CD180_PPRL      0x00            /* low byte */
  127 
  128 /* Global Service Vector Register (rw) */
  129 /* Modem Request Acknowledgement Register (ro) (and IACK equivalent) */
  130 /* Receive Request Acknowledgement Register (ro) (and IACK equivalent) */
  131 /* Transmit Request Acknowledgement Register (ro) (and IACK equivalent) */
  132 #define CD180_GSVR_USERMASK             0xf8    /* user defined bits */
  133 #define CD180_GSVR_IMASK                0x07    /* interrupt type mask */
  134 #define CD180_GSVR_NOREQUEST            0x00    /* no request pending */
  135 #define CD180_GSVR_STATCHG              0x01    /* modem signal change */
  136 #define CD180_GSVR_TXDATA               0x02    /* tx service request */
  137 #define CD180_GSVR_RXGOOD               0x03    /* rx service request */
  138 #define CD180_GSVR_reserved1            0x04    /* reserved */
  139 #define CD180_GSVR_reserved2            0x05    /* reserved */
  140 #define CD180_GSVR_reserved3            0x06    /* reserved */
  141 #define CD180_GSVR_RXEXCEPTION          0x07    /* rx exception request */
  142 
  143 /* Service Request Status Register (ro) (CD180C and higher) */
  144 #define CD180_SRSR_MREQINT              0x01    /* modem request internal */
  145 #define CD180_SRSR_MREQEXT              0x02    /* modem request external */
  146 #define CD180_SRSR_TREQINT              0x04    /* tx request internal */
  147 #define CD180_SRSR_TREQEXT              0x08    /* tx request external */
  148 #define CD180_SRSR_RREQINT              0x10    /* rx request internal */
  149 #define CD180_SRSR_RREQEXT              0x20    /* rx request external */
  150 #define CD180_SRSR_ILV_MASK             0xc0    /* internal service context */
  151 #define CD180_SRSR_ILV_NONE             0x00    /* not in service context */
  152 #define CD180_SRSR_ILV_RX               0xc0    /* in rx service context */
  153 #define CD180_SRSR_ILV_TX               0x80    /* in tx service context */
  154 #define CD180_SRSR_ILV_MODEM            0x40    /* in modem service context */
  155 
  156 /* Global Service Channel Register 1,2,3 (rw) */
  157 #define CD180_GSCR_CHANNEL(gscr)        (((gscr) >> 2) & 7)
  158 
  159 /* Receive Data Count Register (ro) */
  160 #define CD180_RDCR_MASK                 0x0f    /* mask for fifo length */
  161 
  162 /* Receive Character Status Register (ro) */
  163 #define CD180_RCSR_TO                   0x80    /* time out */
  164 #define CD180_RCSR_SCD2                 0x40    /* special char detect 2 */
  165 #define CD180_RCSR_SCD1                 0x20    /* special char detect 1 */
  166 #define CD180_RCSR_SCD0                 0x10    /* special char detect 0 */
  167 #define CD180_RCSR_BE                   0x08    /* break exception */
  168 #define CD180_RCSR_PE                   0x04    /* parity exception */
  169 #define CD180_RCSR_FE                   0x02    /* framing exception */
  170 #define CD180_RCSR_OE                   0x01    /* overrun exception */
  171 
  172 /* Service Request Enable Register (rw) */
  173 #define CD180_SRER_DSR                  0x80    /* DSR service request */
  174 #define CD180_SRER_CD                   0x40    /* CD service request */
  175 #define CD180_SRER_CTS                  0x20    /* CTS service request */
  176 #define CD180_SRER_RXD                  0x10    /* RXD service request */
  177 #define CD180_SRER_RXSCD                0x08    /* RX special char request */
  178 #define CD180_SRER_TXD                  0x04    /* TX ready service request */
  179 #define CD180_SRER_TXE                  0x02    /* TX empty service request */
  180 #define CD180_SRER_NNDT                 0x01    /* No new data timeout req */
  181 
  182 /* Channel Command Register (rw) */
  183 /* Reset Channel Command */
  184 #define CD180_CCR_CMD_RESET             0x80    /* chip/channel reset */
  185 #define CD180_CCR_RESETALL              0x01    /* global reset */
  186 #define CD180_CCR_RESETCHAN             0x00    /* current channel reset */
  187 /* Channel Option Register Command */
  188 #define CD180_CCR_CMD_COR               0x40    /* channel opt reg changed */
  189 #define CD180_CCR_CORCHG1               0x02    /* cor1 has changed */
  190 #define CD180_CCR_CORCHG2               0x04    /* cor2 has changed */
  191 #define CD180_CCR_CORCHG3               0x08    /* cor3 has changed */
  192 /* Send Special Character Command */
  193 #define CD180_CCR_CMD_SPC               0x20    /* send special chars changed */
  194 #define CD180_CCR_SSPC0                 0x01    /* send special char 0 change */
  195 #define CD180_CCR_SSPC1                 0x02    /* send special char 1 change */
  196 #define CD180_CCR_SSPC2                 0x04    /* send special char 2 change */
  197 /* Channel Control Command */
  198 #define CD180_CCR_CMD_CHAN              0x10    /* channel control command */
  199 #define CD180_CCR_CHAN_TXEN             0x08    /* enable channel tx */
  200 #define CD180_CCR_CHAN_TXDIS            0x04    /* disable channel tx */
  201 #define CD180_CCR_CHAN_RXEN             0x02    /* enable channel rx */
  202 #define CD180_CCR_CHAN_RXDIS            0x01    /* disable channel rx */
  203 
  204 /* Channel Option Register 1 (rw) */
  205 #define CD180_COR1_EVENPAR              0x00    /* even parity */
  206 #define CD180_COR1_ODDPAR               0x80    /* odd parity */
  207 #define CD180_COR1_PARMODE_NO           0x00    /* no parity */
  208 #define CD180_COR1_PARMODE_FORCE        0x20    /* force (odd=1, even=0) */
  209 #define CD180_COR1_PARMODE_NORMAL       0x40    /* normal parity mode */
  210 #define CD180_COR1_PARMODE_NA           0x60    /* notused */
  211 #define CD180_COR1_IGNPAR               0x10    /* ignore parity */
  212 #define CD180_COR1_STOP1                0x00    /* 1 stop bit */
  213 #define CD180_COR1_STOP15               0x04    /* 1.5 stop bits */
  214 #define CD180_COR1_STOP2                0x08    /* 2 stop bits */
  215 #define CD180_COR1_STOP25               0x0c    /* 2.5 stop bits */
  216 #define CD180_COR1_CS5                  0x00    /* 5 bit characters */
  217 #define CD180_COR1_CS6                  0x01    /* 6 bit characters */
  218 #define CD180_COR1_CS7                  0x02    /* 7 bit characters */
  219 #define CD180_COR1_CS8                  0x03    /* 8 bit characters */
  220 
  221 /* Channel Option Register 2 (rw) */
  222 #define CD180_COR2_IXM                  0x80    /* implied xon mode */
  223 #define CD180_COR2_TXIBE                0x40    /* tx in-band flow control */
  224 #define CD180_COR2_ETC                  0x20    /* embedded tx command enbl */
  225 #define CD180_COR2_LLM                  0x10    /* local loopback mode */
  226 #define CD180_COR2_RLM                  0x08    /* remote loopback mode */
  227 #define CD180_COR2_RTSAO                0x04    /* RTS automatic output enbl */
  228 #define CD180_COR2_CTSAE                0x02    /* CTS automatic enable */
  229 #define CD180_COR2_DSRAE                0x01    /* DSR automatic enable */
  230 
  231 /* Channel Option Register 3 (rw) */
  232 #define CD180_COR3_XON2                 0x80    /* XON char in spc1&3 */
  233 #define CD180_COR3_XON1                 0x00    /* XON char in spc1 */
  234 #define CD180_COR3_XOFF2                0x40    /* XOFF char in spc2&4 */
  235 #define CD180_COR3_XOFF1                0x00    /* XOFF char in spc2 */
  236 #define CD180_COR3_FCT                  0x20    /* flow control transparency */
  237 #define CD180_COR3_SCDE                 0x10    /* special char recognition */
  238 #define CD180_COR3_RXFIFO_MASK          0x0f    /* rx fifo threshold */
  239 
  240 /* Channel Control Status Register (ro) */
  241 #define CD180_CCSR_RXEN                 0x80    /* rx is enabled */
  242 #define CD180_CCSR_RXFLOFF              0x40    /* rx flow-off */
  243 #define CD180_CCSR_RXFLON               0x20    /* rx flow-on */
  244 #define CD180_CCSR_TXEN                 0x08    /* tx is enabled */
  245 #define CD180_CCSR_TXFLOFF              0x04    /* tx flow-off */
  246 #define CD180_CCSR_TXFLON               0x02    /* tx flow-on */
  247 
  248 /* Receiver Bit Register (ro) */
  249 #define CD180_RBR_RXD                   0x40    /* state of RxD pin */
  250 #define CD180_RBR_STARTHUNT             0x20    /* looking for start bit */
  251 
  252 /* Modem Change Register (rw) */
  253 #define CD180_MCR_DSR                   0x80    /* DSR changed */
  254 #define CD180_MCR_CD                    0x40    /* CD changed */
  255 #define CD180_MCR_CTS                   0x20    /* CTS changed */
  256 
  257 /* Modem Change Option Register 1 (rw) */
  258 #define CD180_MCOR1_DSRZD               0x80    /* catch 0->1 DSR changes */
  259 #define CD180_MCOR1_CDZD                0x40    /* catch 0->1 CD changes */
  260 #define CD180_MCOR1_CTSZD               0x40    /* catch 0->1 CTS changes */
  261 #define CD180_MCOR1_DTRTHRESH           0x0f    /* DTR threshold mask */
  262 
  263 /* Modem Change Option Register 2 (rw) */
  264 #define CD180_MCOR2_DSROD               0x80    /* catch 1->0 DSR changes */
  265 #define CD180_MCOR2_CDOD                0x40    /* catch 1->0 CD changes */
  266 #define CD180_MCOR2_CTSOD               0x20    /* catch 1->0 CTS changes */
  267 
  268 /* Modem Signal Value Register (rw) */
  269 #define CD180_MSVR_DSR                  0x80    /* DSR input state */
  270 #define CD180_MSVR_CD                   0x40    /* CD input state */
  271 #define CD180_MSVR_CTS                  0x20    /* CTS input state */
  272 #define CD180_MSVR_DTR                  0x02    /* DTR output state */
  273 #define CD180_MSVR_RTS                  0x01    /* RTS output state */
  274 
  275 /* Modem Signal Value Register - Request To Send (w) (CD180C and higher) */
  276 #define CD180_MSVRTS_RTS                0x01    /* RTS signal value */
  277 
  278 /* Modem Signal Value Register - Data Terminal Ready (w) (CD180C and higher) */
  279 #define CD180_MSVDTR_DTR                0x02    /* DTR signal value */
  280 
  281 /*
  282  * The register map for the SUNW,spif looks something like:
  283  *    Offset:           Function:
  284  *      0000 - 03ff     Boot ROM
  285  *      0400 - 0407     dtr latches (one per port)
  286  *      0409 - 07ff     unused
  287  *      0800 - 087f     CD180 registers (normal mapping)
  288  *      0880 - 0bff     unused
  289  *      0c00 - 0c7f     CD180 registers (*iack mapping)
  290  *      0c80 - 0dff     unused
  291  *      0e00 - 1fff     PPC registers
  292  *
  293  * One note about the DTR latches:  The values stored there are reversed.
  294  * By writing a 1 to the latch, DTR is lowered, and by writing a 0, DTR
  295  * is raised.  The latches cannot be read, and no other value can be written
  296  * there or the system will crash due to "excessive bus loading (see
  297  * SBus loading and capacitance spec)"
  298  *
  299  * The *iack registers are read/written with the IACK bit set.  When
  300  * the interrupt routine starts, it reads the MRAR, TRAR, and RRAR registers
  301  * from this mapping.  This signals an interrupt acknowledgement cycle.
  302  * (NOTE: these are not really the MRAR, TRAR, and RRAR... They are copies
  303  * of the GSVR, I just mapped them to the same location as the mrar, trar,
  304  * and rrar because it seemed appropriate).
  305  */
  306 #define DTR_REG_OFFSET          0x400           /* DTR latches */
  307 #define DTR_REG_LEN             0x8
  308 #define STC_REG_OFFSET          0x800           /* normal cd180 access */
  309 #define STC_REG_LEN             0x80
  310 #define ISTC_REG_OFFSET         0xc00           /* IACK cd180 access */
  311 #define ISTC_REG_LEN            STC_REG_LEN
  312 #define PPC_REG_OFFSET          0xe00           /* PPC registers */
  313 #define PPC_REG_LEN             0x200
  314 
  315 /*
  316  * The mapping of minor device number -> card and port is done as
  317  * follows by default:
  318  *
  319  *  +---+---+---+---+---+---+---+---+
  320  *  | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
  321  *  +---+---+---+---+---+---+---+---+
  322  *    |   |   |   |   |   |   |   |
  323  *    |   |   |   |   |   +---+---+---> port number
  324  *    |   |   |   |   |
  325  *    |   |   |   |   +---------------> unused
  326  *    |   |   |   |
  327  *    |   |   |   +-------------------> dialout (on tty ports)
  328  *    |   |   |
  329  *    |   |   +-----------------------> unused
  330  *    |   |
  331  *    +---+---------------------------> card number
  332  *
  333  */
  334 #define SPIF_MAX_CARDS          4
  335 #define SPIF_MAX_TTY            8
  336 #define SPIF_MAX_BPP            1
  337 
  338 /*
  339  * device selectors
  340  */
  341 #define SPIF_CARD(x)    ((minor(x) >> 6) & 0x03)
  342 #define SPIF_PORT(x)    (minor(x) & 0x07)
  343 #define STTY_DIALOUT(x) (minor(x) & 0x10)
  344 
  345 #define STTY_RX_FIFO_THRESHOLD  4
  346 #define STTY_RX_DTR_THRESHOLD   7
  347 #define CD180_TX_FIFO_SIZE      8               /* 8 chars of fifo */
  348 
  349 /*
  350  * These are the offsets of the MRAR, TRAR, and RRAR in *IACK space.
  351  * The high bit must be set as per specs for the MSMR, TSMR, and RSMR.
  352  */
  353 #define SPIF_MSMR       (0x80 | STC_MRAR)       /* offset of MRAR | 0x80 */
  354 #define SPIF_TSMR       (0x80 | STC_TRAR)       /* offset of TRAR | 0x80 */
  355 #define SPIF_RSMR       (0x80 | STC_RRAR)       /* offset of RRAR | 0x80 */
  356 
  357 /*
  358  * "verosc" node tells which oscillator we have.
  359  */
  360 #define SPIF_OSC9       1               /* 9.8304 MHz */
  361 #define SPIF_OSC10      2               /* 10MHz */
  362 
  363 /*
  364  * There are two interrupts, serial gets interrupt[0], and parallel
  365  * gets interrupt[1]
  366  */
  367 #define SERIAL_INTR     0
  368 #define PARALLEL_INTR   1
  369 
  370 /*
  371  * spif tty flags
  372  */
  373 #define STTYF_CDCHG             0x01            /* carrier changed */
  374 #define STTYF_RING_OVERFLOW     0x02            /* ring buffer overflowed */
  375 #define STTYF_DONE              0x04            /* done... flush buffers */
  376 #define STTYF_SET_BREAK         0x08            /* set break signal */
  377 #define STTYF_CLR_BREAK         0x10            /* clear break signal */
  378 #define STTYF_STOP              0x20            /* stopped */
  379 
  380 #define STTY_RBUF_SIZE          (2 * 512)

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