Annotation of Net2/arch/tahoe/vba/mpreg.h, revision 1.1.1.1

1.1       root        1: /*
                      2:  * Copyright (c) 1988 Regents of the University of California.
                      3:  * All rights reserved.
                      4:  *
                      5:  * This code is derived from software contributed to Berkeley by
                      6:  * Computer Consoles Inc.
                      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 the University of
                     19:  *     California, Berkeley and its contributors.
                     20:  * 4. Neither the name of the University nor the names of its contributors
                     21:  *    may be used to endorse or promote products derived from this software
                     22:  *    without specific prior written permission.
                     23:  *
                     24:  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
                     25:  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
                     26:  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
                     27:  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
                     28:  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
                     29:  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
                     30:  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
                     31:  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
                     32:  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
                     33:  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
                     34:  * SUCH DAMAGE.
                     35:  *
                     36:  *     @(#)mpreg.h     7.4 (Berkeley) 6/28/90
                     37:  */
                     38: 
                     39: /*
                     40:  * MPCC Asynchronous Communications Interface.
                     41:  */
                     42: #define MPINTRBASE     0xa0            /* base vector for interupts */
                     43: #define MPMAGIC                1969            /* magic number for mblok */
                     44: #define MPMAXPORT      32              /* maximum number of ports on an MPCC */
                     45: 
                     46: /*
                     47:  * MPCC's are capable of supporting one of a
                     48:  * the protocols listed below.  This driver
                     49:  * supports only the async terminal protocol.
                     50:  */
                     51: #define MPPROTO_UNUSED 0       /* port not in use */
                     52: #define MPPROTO_ASYNC  1       /* async protocol */
                     53: #define MPPROTO_X25    2       /* x25 protocol (unsupported) */
                     54: #define MPPROTO_BISYNC 3       /* bisync protocol (unsupported) */
                     55: #define MPPROTO_SNA    4       /* sna protocol (unsupported) */
                     56: 
                     57: #define NMPPROTO       5       /* max protocols supported by MPCC */
                     58: 
                     59: #define MPINSET                8
                     60: #define MPOUTSET       8
                     61: 
                     62: /*
                     63:  * Host Interface semaphores
                     64:  */
                     65: #define MPSEMA_AVAILABLE       1
                     66: #define MPSEMA_WORK            4
                     67: 
                     68: /*
                     69:  * Host Interface imok values
                     70:  */
                     71: #define MPIMOK_ALIVE   0x01
                     72: #define MPIMOK_DEAD    0x80
                     73: 
                     74: /*
                     75:  * Host Interface Structure
                     76:  */
                     77: struct his {
                     78:        u_char  semaphore;
                     79:        u_char  imok;
                     80:        u_char  brdnum;         /* Virtual brd number for protocol */
                     81:        u_char  unused;
                     82:        struct {
                     83:                u_char  inbdone[MPMAXPORT];     /* Ports w/ inbound completed */
                     84:                u_char  outbdone[MPMAXPORT];    /* Ports w/outbound available */
                     85:                u_int   fill[2];
                     86:        } proto[NMPPROTO];
                     87: };
                     88: 
                     89: #define MPPORT_EOL     0xff            /* end of port list */
                     90: 
                     91: /*
                     92:  * Async host transmit list structure.
                     93:  */
                     94: #define MPXMIT 4       /* # of transmit ptrs/MP_WRITE event */
                     95: 
                     96: struct hxmtl {
                     97:        caddr_t dblock[MPXMIT]; /* ptrs to data blocks */
                     98:        u_short size[MPXMIT];   /* size of each block */
                     99: };
                    100: 
                    101: /*
                    102:  * MPCC asynchronous protocol events.
                    103:  */
                    104: struct mpevent {
                    105:        u_char  ev_status;      /* Go Status */
                    106:        u_char  ev_cmd;         /* Optional Op-code */
                    107:        u_short ev_opts;        /* Optional flags */
                    108:        u_short ev_error;       /* error status returned */
                    109:        u_short ev_flags;       /* optional event flags field */
                    110:        caddr_t ev_params;      /* pointer to event parameters */
                    111:        union {
                    112:                struct  hxmtl *hxl;     /* pointer to host xmit list */
                    113:                u_char  *rcvblk;        /* pointer to receive block */
                    114:        } ev_un;
                    115:        u_short ev_count;       /* # ptrs in xmit list/# receive chars  */
                    116:        u_short ev_unused;      /* round to longword */
                    117:        u_int   ev_unused2;     /* round to size of BSC struct. GROT!! */
                    118: };
                    119: 
                    120: /* defines for ev_status */
                    121: #define EVSTATUS_FREE  0
                    122: #define EVSTATUS_GO    1
                    123: #define EVSTATUS_BUSY  2
                    124: #define EVSTATUS_DONE  4
                    125: 
                    126: /* defines for ev_cmd */
                    127: #define EVCMD_OPEN     1
                    128: #define EVCMD_CLOSE    2
                    129: #define EVCMD_RESET    3
                    130: #define EVCMD_IOCTL    4
                    131: #define EVCMD_WRITE    5
                    132: #define EVCMD_READ     6
                    133: #define EVCMD_STATUS   7
                    134: #define EVCMD_EVENT    8
                    135: 
                    136: /*
                    137:  * Host-MPCC interface block.
                    138:  */
                    139: struct mblok {
                    140:        u_char  mb_status;              /* mpcc status */
                    141:        u_char  mb_ivec;                /* host interrupt vector */
                    142:        u_short mb_magic;
                    143:        u_char  mb_diagswitch[2];       /* run diagnostics/application */
                    144:        u_char  mb_softerr;             /* soft error code */
                    145:        u_char  mb_harderr;             /* hard error code */
                    146:        struct mpdl {           /* download/config area */
                    147:                u_char  mpdl_status;    /* control/status */
                    148:                u_char  mpdl_cmd;       /* request type */
                    149:                u_short mpdl_count;     /* size of parameter block */
                    150:                caddr_t mpdl_data;      /* command parameters */
                    151:        } mb_dl;
                    152:        u_char  mb_hiport, mb_loport;   /* high-low mpcc port numbers */
                    153:        u_char  mb_unit;                /* mpcc unit number */
                    154:        u_char  mb_hndshk;              /* handshaking timer */
                    155:        caddr_t mb_imokclk;             /* handshaking clock */
                    156:        u_char  mb_nointcnt;            /* no interrupt from handshake */
                    157:        u_char  mb_mpintcnt;            /* # outstanding interupts to MPCC */
                    158:        short   mb_unused;
                    159:        caddr_t mb_mpintclk;            /* MPCC interrupt clock */
                    160:        struct  his mb_hostint;         /* To Talk with Host */
                    161:        u_char  mb_proto[MPMAXPORT];    /* per-port protocols */
                    162:        u_char  mb_intr[MPMAXPORT];     /* per-port host->mpcc int flags */
                    163:        struct  mpport {        /* per-port structure */
                    164:                u_short mp_proto;       /* protocol of port */
                    165:                u_char  mp_on;          /* Next available entry on Host */
                    166:                u_char  mp_off;         /* Next expected 'DONE' entry on Host */
                    167:                struct  mpevent mp_recvq[MPINSET]; /* queue of events to host */
                    168:                struct  mpevent mp_sendq[MPOUTSET];/* queue of events to mpcc */
                    169:                u_char  mp_nextrcv;     /* next expected 'DONE' entry on Host */
                    170:                u_char  mp_flags;       /* host flags */
                    171:                short   mp_unused;
                    172:                caddr_t mp_data;        /* pointer to data for port */
                    173:        } mb_port[MPMAXPORT];
                    174: };
                    175: 
                    176: /* status defines for mblok.status */
                    177: #define MP_DLPEND      1
                    178: #define MP_DLOPEN      2
                    179: #define MP_DLDONE      3
                    180: #define MP_OPCLOSE     4
                    181: #define MP_OPOPEN      5
                    182: #define MP_DLTIME      6
                    183: #define MP_DLERROR     (-1)
                    184: 
                    185: /* hard error status values loaded into mblock.herr */
                    186: #define NOHERR         0       /* no error */
                    187: #define MPBUSERR       1       /* bus error */
                    188: #define ADDRERR                2       /* address error */
                    189: #define UNDECC         3       /* undefined ecc interrupt */
                    190: #define UNDINT         4       /* undefined interrupt */
                    191: #define PWRFL          5       /* power fail occurred */
                    192: #define NOXENTRY       6       /* xdone was enterred w/o xmit entry on queue */
                    193: #define TWOFTMRS       7       /* tried to start two fast timers on one port */
                    194: #define INTQFULL       8       /* interupt queue full */
                    195: #define INTQERR                9       /* interupt queue ack error */
                    196: #define CBPERR         10      /* uncorrectable DMA parity error */
                    197: #define ACPDEAD                11      /* acap has died */
                    198: /* additional panic codes not listed */
                    199: 
                    200: /* soft error status values loaded into mblock.serr */
                    201: #define NOSERR 0               /* no error */
                    202: #define DMAPERR        1               /* dma parity error */
                    203: #define ECCERR 2               /* local memory ecc error */
                    204: 
                    205: /* Defines for flags */
                    206: #define MP_PROGRESS    1       /* Open or Close is in progress */
                    207: #define MP_IOCTL       2       /* IOCTL is in progress */
                    208: #define MP_REMBSY      4       /* remote station busy */
                    209: 
                    210: /*
                    211:  * Asynchronous Terminal Protocol Definitions.
                    212:  */
                    213: #define A_RCVTIM       2       /* default max tix for receive event (~20ms) */
                    214: #define ACPTMR         300     /* approx. 5 secs to wait for acap     */
                    215: #define A_MAXEVTP      3       /* maximum # of L1 or Host Events to    */
                    216:                                /* process per port at one time  */
                    217: #define A_MAXRCV       128     /* max # of chars in rcv event - enough */
                    218:                                /* to hold 20ms of chars at 19.2KB      */
                    219: #define A_NUMRCV       32      /* number of rcv buffers per port       */
                    220: #define A_NUMXMT       2       /* max number of concurrent xmits/port  */
                    221: #define A_NUMEVT       32      /* number of evt bufs for status evts   */
                    222:                                /* and L2 to L1 transmit evts      */
                    223: #define WR5    5               /* SCC Write Reg 5                    */
                    224: #define TXENBL 0x08            /* mask to enable transmitter in WR 5   */
                    225: #define RTSON  0x02            /* mask to turn on RTS in wreg 5        */
                    226: #define CHR5MSK        0x1F            /* mask for 5-bit transmit data  */
                    227: 
                    228: /*
                    229:  * macro to adjust a circular buffer ptr
                    230:  *      x  = pointer or index
                    231:  *      sz = size of circular buffer
                    232:  */
                    233: #define adjptr(x,sz)   ((x) = ((++(x) == (sz)) ? 0 : (x)))
                    234: #define adjptrbk(x,sz) ((x) = ((x) == 0) ? (sz) : --(x))
                    235: 
                    236: /*
                    237:  * Events from ASYNC Level 1 to Level 2
                    238:  */
                    239: #define RCVDTA 10      /* normal receive data available */
                    240: #define PARERR 11      /* receive data with parity error */
                    241: #define OVRNERR        12      /* receive data with overrun error */
                    242: #define OVFERR 13      /* receive data with overflow error */
                    243: #define FRAMERR        14      /* receive data with framing error */
                    244: #define ACKXMT 15      /* successful completion of transmit */
                    245: #define NORBUF 16      /* No Receive Buffers available  */
                    246: #define NOEBUF 17      /* No Event Buffers available */
                    247: #define BRKASRT        18      /* Break condition detected */
                    248: 
                    249: /* defines for error conditions */
                    250: #define A_OK           0       /* No Errors */
                    251: #define A_INVEVT       1       /* Invalid Event Error */
                    252: #define A_IOCERR       2       /* Error while configuring port */
                    253: #define A_SIZERR       3       /* Error in count of data chars to xmt */
                    254: #define A_NXBERR       4       /* Transmit Incomplete due to lack of bufs */
                    255: 
                    256: /*
                    257:  * Modem control signal control structure.
                    258:  */
                    259: struct mdmctl {
                    260:        u_char  mc_rngdsr;      /* ring or dsr */
                    261:        u_char  mc_rts;         /* request to send */
                    262:        u_char  mc_rate;
                    263:        u_char  mc_dcd;         /* data carrier detect */
                    264:        u_char  mc_sectx;       /* secondary transmit */
                    265:        u_char  mc_cts;         /* clear to send */
                    266:        u_char  mc_secrx;       /* secondary receive */
                    267:        u_char  mc_dtr;         /* data terminal ready */
                    268: };
                    269: 
                    270: /* defines for modem control lines */
                    271: #define ASSERT 1               /* line asserted */
                    272: #define DROP   2               /* line dropped */
                    273: #define AUTO   3               /* auto mode enabled, rts only */
                    274: 
                    275: /*
                    276:  * Async parameter structure.
                    277:  */
                    278: struct asyncparam {
                    279:        u_char  ap_xon, ap_xoff;        /* xon-xoff characters */
                    280:        u_char  ap_xena;                /* xon/xoff enabled */
                    281:        u_char  ap_xany;                /* any received char enables xmitter */
                    282:        struct  mdmctl ap_modem;        /* port modem control lines */
                    283:        struct  mdmctl ap_intena;       /* modem signals which generate */
                    284:                                        /* status change events */
                    285:        u_char  ap_data;                /* number of data bits */
                    286:        u_char  ap_stop;                /* number of stop bits */
                    287:        u_char  ap_baud;                /* baud rate */
                    288:        u_char  ap_parity;              /* even/odd/no parity */
                    289:        u_char  ap_loop;                /* enable for local loopback */
                    290:        u_char  ap_rtimer;              /* receive timer value (msec) */
                    291:        short   ap_fill;                /* round to longword */
                    292: };
                    293: 
                    294: /* enable/disable signal codes */
                    295: #define MPA_ENA        1               /* condition enabled */
                    296: #define MPA_DIS        2               /* condition disabled */
                    297: 
                    298: /* defines for ap_data */
                    299: #define MPCHAR_5       0       /* 5 bits per character */
                    300: #define MPCHAR_6       2       /* 6 bits per character */
                    301: #define MPCHAR_7       1       /* 7 bits per character */
                    302: #define MPCHAR_8       3       /* 8 bits per character */
                    303: 
                    304: /* defines for ap_stop */
                    305: #define MPSTOP_1       1       /* 1 stop bit per character */
                    306: #define MPSTOP_1_5     2       /* 1 1/2 stop bits per character */
                    307: #define MPSTOP_2       3       /* 2 stop bits per character */
                    308: 
                    309: /* defines for ap_baud */
                    310: #define MODEM  0
                    311: #define M0     0               /* baud rate = 0 */
                    312: #define M50    1               /* baud rate = 50 */
                    313: #define M75    2               /* baud rate = 75 */
                    314: #define M110   3               /* baud rate = 110 */
                    315: #define M134_5 4               /* baud rate = 134.5 */
                    316: #define M150   5               /* baud rate = 150 */
                    317: #define M200   6               /* baud rate = 200 */
                    318: #define M300   7               /* baud rate = 300 */
                    319: #define M600   8               /* baud rate = 600 */
                    320: #define M1200  9               /* baud rate = 1200 */
                    321: #define M1800  10              /* baud rate = 1800 */
                    322: #define M2400  11              /* baud rate = 2400 */
                    323: #define M4800  12              /* baud rate = 4800 */
                    324: #define M9600  13              /* baud rate = 9600 */
                    325: #define MEXTA  14              /* baud rate = Ext A */
                    326: #define MEXTB  15              /* baud rate = Ext B */
                    327: #define M2000  16              /* baud rate = 2000 */
                    328: #define M3600  17              /* baud rate = 3600 */
                    329: #define M7200  18              /* baud rate = 7200 */
                    330: #define M19200 19              /* baud rate = 19,200 */
                    331: #define M24000 20              /* baud rate = 24,000 */
                    332: #define M28400 21              /* baud rate = 28,400 */
                    333: #define M37800 22              /* baud rate = 37,800 */
                    334: #define M40300 23              /* baud rate = 40,300 */
                    335: #define M48000 24              /* baud rate = 48,000 */
                    336: #define M52000 25              /* baud rate = 52,000 */
                    337: #define M56800 26              /* baud rate = 56,800 */
                    338: 
                    339: /* defines for ap_parity */
                    340: #define MPPAR_NONE     0       /* no parity */
                    341: #define MPPAR_ODD      1       /* odd parity */
                    342: #define MPPAR_EVEN     3       /* even parity */
                    343: 
                    344: /* possible flags for Host MP_IOCTL Events */
                    345: #define A_CHGX         1       /* IOCTL is only chging xonxoff params */
                    346: #define A_MDMCHG       2       /* change modem control lines */
                    347: #define A_MDMGET       3       /* get current state of modem ctl lines */
                    348: #define A_CHGL1P       4       /* IOCTL is changing changing L1 params */
                    349: #define A_BRKON                5       /* set port break bit */
                    350: #define A_BRKOFF       6       /* clear port break bit */
                    351: #define A_CHGALL       7       /* IOCTL is changing xonxoff params, */
                    352:                                /* pcnfg struct, & modem ctl structs */
                    353: #define A_DISABX       8       /* disable port transmitter (ctl-s) */
                    354: #define A_ENABLX       9       /* enable port transmitter (ctl-q) */
                    355: 
                    356: /* possible flags for Host MP_WRITE Events */
                    357: #define A_FLUSH                1       /* flush any queued transmit events */
                    358: #define A_SSTOP                2       /* transmit a port stop (xoff) char */
                    359:                                /* before sending rest of event xmts */
                    360: #define A_SSTART       3       /* transmit a port start (xon) char */
                    361:                                /* before sending rest of event xmts */
                    362: 
                    363: /* possible flags for Outbound MP_READ Events */
                    364: #define A_XOFF         1       /* transmitter stopped from by xoff char */
                    365: 
                    366: /* Perpos flags for modem control fields */
                    367: #define A_RNGDSR       00001
                    368: #define A_RTS          00002
                    369: #define A_RATE         00004 
                    370: #define A_DCD          00010
                    371: #define A_SECTX                00020 
                    372: #define A_CTS          00040
                    373: #define A_SECRX                00100
                    374: #define A_DTR          00200
                    375: 
                    376: #define DCDASRT                100     /* data carrier detect asserted */
                    377: #define DTRASRT                101     /* data terminal ready asserted */
                    378: #define RNGASRT                102     /* ring indicator asserted */
                    379: #define DSRASRT                102     /* data set ready asserted */
                    380: #define CTSASRT                103     /* clear to send asserted */
                    381: #define RTSASRT                104     /* ready to send asserted */
                    382: #define STXASRT                105     /* secondary transmit asserted */
                    383: #define SRXASRT                106     /* secondary recieve asserted */
                    384: #define RATEASRT       107     /* rate signal asserted */
                    385: #define DCDDROP                108     /* data carrier detect dropped */
                    386: #define DTRDROP                109     /* data terminal ready dropped */
                    387: #define RNGDROP                110     /* ring indicator dropped */
                    388: #define MPDSRDROP      110     /* data set ready dropped */
                    389: #define CTSDROP                111     /* clear to send dropped */
                    390: #define RTSDROP                112     /* ready to send dropped */
                    391: #define STXDROP                113     /* secondary transmit dropped */
                    392: #define SRXDROP                114     /* secondary recieve dropped */
                    393: #define RATEDROP       115     /* rate signal dropped */
                    394: 
                    395: /* Defines for filters and intena in portstat */
                    396: #define MDM_OFF        0
                    397: #define MDM_ON 1
                    398: 
                    399: /* Modem on/off flags */
                    400: #define MMOD_OFF       0
                    401: #define MMOD_ON                1
                    402: 
                    403: /* defintions for DL interface */
                    404: 
                    405: #define MPDLBUFSIZE    1024
                    406: 
                    407: /* mpdlioctl command defines */
                    408: 
                    409: struct protports {
                    410:        char protoport[MPMAXPORT];
                    411: };
                    412: 
                    413: struct abdcf {
                    414:        short xmtbsz;           /* transmit buffer size - should */
                    415:                                /* equal # of chars in a cblock  */
                    416: };
                    417: 
                    418: struct bdcf {
                    419:        char loadname[NMPPROTO+1];
                    420:        char protoports[MPMAXPORT];
                    421:        char fccstimer;         /* powerfail timer */
                    422:        char fccsports;         /* ports to affect */
                    423:        char fccssoc;           /* ports which will 'switch on close' */
                    424: };
                    425: 
                    426: 
                    427: /* These ioctls are for the dlmpcc command */
                    428: #define MPIOPORTMAP            _IOW('m',1, struct protports)
                    429: #define MPIOHILO               _IOW('m',3, short)
                    430: #define MPIOENDCODE            _IO('m',4)
                    431: #define MPIOASYNCNF            _IOW('m',7, struct abdcf)
                    432: #define MPIOENDDL              _IO('m',10)
                    433: #define MPIOSTARTDL            _IO('m',11)
                    434: #define MPIORESETBOARD         _IO('m',12)
                    435: 
                    436: /* mpdlwrite opcode defines */
                    437: 
                    438: #define MPDLCMD_NORMAL 1
                    439: 
                    440: /* error messages printed at console , board & port # filled in later */
                    441: 
                    442: #define A_INVSTS       "Invalid Status Event "
                    443: #define A_INVCMD       "Invalid Event From the MPCC " 
                    444: #define A_NORBUF       "No More Available Receive Buffers "
                    445: #define A_NOEBUF       "No More Available Event Buffers "
                    446: #define A_OVRN         "Overrun Error Detected "
                    447: #define A_OVRF         "Overflow Error Detected "
                    448: #define A_NOXBUF       "No More Available Transmit Event Buffers "
                    449: #define A_XSIZE                "Transmit Data Block Size Exceeds Event Data Buffer Size "
                    450: #define A_NOFREIN      "No Available Inbound Entries to Send Close Event "

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.