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

unix.superglobalmegacorp.com

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